@import url(https://fonts.googleapis.com/css?family=Roboto:400,500);@import url(https://fonts.googleapis.com/css?family=Roboto:400,500);@import url(https://fonts.googleapis.com/css?family=Roboto:400,500);.contract-wrapper iframe{height:94vh;margin-top:-3em;padding:0;border:none;position:relative;z-index:0}.contract-wrapper .iframe-message{margin:2em auto;text-align:center;font-weight:300}.bold{font-weight:600}.comment-date{color:grey;font-size:1rem}.padding-top{padding-top:30px}.padding-top-spacer{padding-top:5px}.text-center{text-align:center}.text-right{text-align:right}.badge{color:#fff!important;background-color:#00a5fa;padding:3px 7px;font-size:13px;border-radius:7px}#comment{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;max-width:100%;line-height:1.5;padding:5px 15px 30px;outline:none!important;border-radius:3px;-webkit-transition:-webkit-box-shadow .5s ease;transition:-webkit-box-shadow .5s ease;transition:box-shadow .5s ease;transition:box-shadow .5s ease,-webkit-box-shadow .5s ease}.dropdown-menu1{position:absolute;top:100%;right:0;z-index:1000;float:left;min-width:159px;padding:.5rem 0;margin:.5rem 0 0;font-size:1rem;color:#373a3c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-item1{display:block;width:100%;padding:3px 20px;clear:both;font-weight:400;color:#373a3c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item1:hover{background-color:#f1f1f1}@media only screen and (max-width:768px){.dropdown-menu1{left:0!important}}.detail-container{font-size:1.1rem;line-height:1.5rem}.detail-container .detail-title{line-height:1.4em}.contract-form{padding:1em 0 5em}@media (min-width:768px){.contract-form{padding:1em 1em 5em 0}}.contract-form .step-title{color:#001433;font-size:2.5em;line-height:1.2em;font-weight:100}.contract-form .form-input,.contract-form button,.contract-form label,.contract-form select{display:block;margin:1em 0;width:100%}.contract-form label{font-size:1.2em}.new-contract-message{padding:1em 1em 5em}.new-contract-message label{margin:0}.new-contract-message hr{width:50px;display:inline-block;height:1px;margin:1em 0}.new-contract-message .section-title-wrapper .section-title{font-size:1.75em;font-weight:300;color:#ffb828;margin-bottom:0;text-transform:uppercase;font-family:Circular Bold;padding-left:0}.new-contract-message .section-description-wrapper,.new-contract-message .section-title-wrapper{margin:1.25em 0}.new-contract-message .create-contract-button{width:30%;display:block;height:55px;font-size:1.25em;margin-top:1em}.new-contract-message .new-contract-title{display:block;color:#00a5fa;font-size:3.75rem;font-weight:700;font-family:Circular Bold}.contract-wrapper{padding:1em 1em 5em 0}.contract-wrapper .fr-view{padding:2em;border:1px solid #ececec;-webkit-box-shadow:10px 10px 80px -30px rgba(0,0,0,.75);box-shadow:10px 10px 80px -30px rgba(0,0,0,.75)}.btn.get-paypalme-button,.btn.loan-calculator-button{background-color:#ffb828;color:#000}.btn.get-paypalme-button:focus,.btn.get-paypalme-button:visited,.btn.loan-calculator-button:focus,.btn.loan-calculator-button:visited{color:#000}.concierge-dashboard{--concierge-paper:"#f8fbff";--concierge-inner-paper:#fff;--concierge-mist:#f0ebe2;--concierge-line:#e7e7e7;--concierge-ink:#20272a;--concierge-muted:#697275;--concierge-teal:#2c6b69;--concierge-teal-soft:#dcebea;--concierge-ochre:#9d7735;--concierge-ochre-soft:#f4ead7;--concierge-brick:#a35d48;--concierge-brick-soft:#f4e2db;--concierge-brand:#1a73e8;--concierge-error:#b91c1c;--concierge-shadow:0 16px 46px rgba(73,59,39,0.09);--concierge-type-small-header:11px;--concierge-type-meta:12px;--concierge-type-body:14px;--concierge-type-subheader:18px;--concierge-type-header:24px;--concierge-type-metric:24px;--concierge-type-stat:17px;color:var(--concierge-ink);-webkit-box-sizing:border-box;box-sizing:border-box}.concierge-dashboard *,.concierge-dashboard :after,.concierge-dashboard :before{-webkit-box-sizing:border-box;box-sizing:border-box}.concierge-dashboard .concierge-page{margin:0 auto;padding:20px 24px;display:grid;gap:16px}.concierge-dashboard .concierge-archive-row,.concierge-dashboard .concierge-hero,.concierge-dashboard .concierge-panel,.concierge-dashboard .concierge-promo,.concierge-dashboard .concierge-tile{background:var(--concierge-paper);border:1px solid var(--concierge-line);-webkit-box-shadow:var(--concierge-shadow);box-shadow:var(--concierge-shadow)}.concierge-dashboard .concierge-archive-row,.concierge-dashboard .concierge-hero,.concierge-dashboard .concierge-panel,.concierge-dashboard .concierge-promo,.concierge-dashboard .concierge-tile{border-radius:10px}.concierge-dashboard .concierge-label{font-size:var(--concierge-type-small-header);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--concierge-muted)}.concierge-dashboard .concierge-header-text{font-size:var(--concierge-type-header);line-height:1.15}.concierge-dashboard .concierge-subheader-text{font-size:var(--concierge-type-subheader);line-height:1.2}.concierge-dashboard .concierge-body-text{font-size:var(--concierge-type-body);line-height:1.45}.concierge-dashboard .concierge-meta-text{font-size:var(--concierge-type-meta);line-height:1.35}.concierge-dashboard .concierge-hero{padding:16px 20px;display:grid;gap:14px}.concierge-dashboard .concierge-hero-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:14px;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;min-height:0;grid-template-rows:minmax(0,1fr);height:435px}.concierge-dashboard .concierge-pulse-shell{flex-direction:column}.concierge-dashboard .concierge-pulse-banner,.concierge-dashboard .concierge-pulse-shell{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;min-height:0;overflow:hidden}.concierge-dashboard .concierge-pulse-banner{border-radius:10px;padding:14px 16px;background:#fafbfa;border:1px solid var(--concierge-line);-webkit-box-shadow:var(--concierge-shadow);box-shadow:var(--concierge-shadow);flex-direction:column;gap:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.concierge-dashboard .concierge-pulse-banner>.concierge-label,.concierge-dashboard .concierge-pulse-banner>strong.concierge-header-text{-ms-flex-negative:0;flex-shrink:0}.concierge-dashboard .concierge-pulse-banner>strong.concierge-header-text{font-size:var(--concierge-type-header)}.concierge-dashboard .concierge-pulse-banner-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.5rem}.concierge-dashboard .concierge-pulse-banner-header .concierge-header-text{display:block;margin:4px 0 0}.concierge-dashboard .concierge-summary-trigger-btn{padding:.4rem .75rem;font-size:.875rem;font-weight:600;color:var(--concierge-brand);background-color:rgba(0,0,0,0);border:1px solid var(--concierge-brand);border-radius:6px;cursor:pointer}.concierge-dashboard .concierge-summary-trigger-btn:disabled{cursor:not-allowed;opacity:.6}.concierge-dashboard .concierge-summary-trigger-error{color:var(--concierge-error);margin-top:.5rem}.concierge-dashboard .concierge-summary-trigger-status{color:var(--concierge-muted);margin-top:.5rem}.concierge-dashboard .concierge-pulse-summary{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px;min-height:0;padding:12px 14px;background:var(--concierge-inner-paper);border:1px solid var(--concierge-line);border-radius:5px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-pulse-banner p,.concierge-dashboard .concierge-pulse-summary p{margin:0}.concierge-dashboard .concierge-pulse-summary-content{font-size:var(--concierge-type-body);line-height:1.75;color:var(--concierge-ink)}.concierge-dashboard .concierge-pulse-summary-content p{margin:.75em 0;line-height:1.75;font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-pulse-summary-content p:first-child{margin-top:0}.concierge-dashboard .concierge-pulse-summary-content p:last-child{margin-bottom:0}.concierge-dashboard .concierge-pulse-summary-content b,.concierge-dashboard .concierge-pulse-summary-content strong{font-weight:600}.concierge-dashboard .concierge-pulse-summary-content em,.concierge-dashboard .concierge-pulse-summary-content i{font-style:italic}.concierge-dashboard .concierge-pulse-summary-content ol,.concierge-dashboard .concierge-pulse-summary-content ul{margin:.75em 0;padding-left:1.5em;font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-pulse-summary-content ul{list-style-type:disc}.concierge-dashboard .concierge-pulse-summary-content ol{list-style-type:decimal}.concierge-dashboard .concierge-pulse-summary-content ol ul,.concierge-dashboard .concierge-pulse-summary-content ul ul{list-style-type:circle}.concierge-dashboard .concierge-pulse-summary-content li{margin:.35em 0;line-height:1.6;font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-pulse-summary-content h1,.concierge-dashboard .concierge-pulse-summary-content h2,.concierge-dashboard .concierge-pulse-summary-content h3,.concierge-dashboard .concierge-pulse-summary-content h4{margin:.75em 0 .35em;font-size:1em;font-weight:600;line-height:1.4}.concierge-dashboard .concierge-pulse-summary-content h1:first-child,.concierge-dashboard .concierge-pulse-summary-content h2:first-child,.concierge-dashboard .concierge-pulse-summary-content h3:first-child,.concierge-dashboard .concierge-pulse-summary-content h4:first-child{margin-top:0}.concierge-dashboard .concierge-pulse-stats{-ms-flex-negative:0;flex-shrink:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.concierge-dashboard .concierge-pulse-stats>div{padding:10px 12px;border-radius:10px;background:hsla(0,0%,100%,.8);border:1px solid var(--concierge-line);font-size:var(--concierge-type-meta)}.concierge-dashboard .concierge-pulse-stats strong{display:block;margin-top:4px;font-size:var(--concierge-type-stat)}.concierge-dashboard .concierge-capabilities{padding:16px 20px}.concierge-dashboard .concierge-capabilities-header{margin:0;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.concierge-dashboard .concierge-promo-strip{display:grid;gap:10px}.concierge-dashboard .concierge-promo-row{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(220px,1fr);gap:10px;overflow-x:auto;-ms-scroll-snap-type:x proximity;scroll-snap-type:x proximity;padding-bottom:4px}.concierge-dashboard .concierge-promo{padding:14px 16px;display:grid;gap:8px;min-height:140px;scroll-snap-align:start;font-size:var(--concierge-type-body);background:var(--concierge-inner-paper)}.concierge-dashboard .concierge-promo[role=button]:hover{background:var(--concierge-teal-soft);border-color:var(--concierge-teal)}.concierge-dashboard .concierge-promo strong{font-size:var(--concierge-type-subheader)}.concierge-dashboard .concierge-badge{display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;padding:5px 9px;border-radius:999px;font-size:var(--concierge-type-small-header);font-weight:700}.concierge-dashboard .concierge-badge-teal{background:var(--concierge-teal-soft);color:var(--concierge-teal)}.concierge-dashboard .concierge-badge-ochre{background:var(--concierge-ochre-soft);color:var(--concierge-ochre)}.concierge-dashboard .concierge-badge-brick{background:var(--concierge-brick-soft);color:var(--concierge-brick)}.concierge-dashboard .concierge-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.concierge-dashboard .concierge-tile{padding:12px 14px;cursor:pointer;-webkit-transition:border-color .2s,-webkit-box-shadow .2s;transition:border-color .2s,-webkit-box-shadow .2s;transition:border-color .2s,box-shadow .2s;transition:border-color .2s,box-shadow .2s,-webkit-box-shadow .2s}.concierge-dashboard .concierge-tile:hover{border-color:var(--concierge-teal)}.concierge-dashboard .concierge-tile.concierge-tile-active{border-color:var(--concierge-teal);-webkit-box-shadow:0 0 0 2px var(--concierge-teal-soft);box-shadow:0 0 0 2px var(--concierge-teal-soft)}.concierge-dashboard .concierge-tile strong{display:block;font-size:var(--concierge-type-metric);margin-top:4px}.concierge-dashboard .concierge-tile p{margin:4px 0 0;color:var(--concierge-muted);font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-main{display:grid;grid-template-columns:1fr;gap:16px}.concierge-dashboard .concierge-panel{background:#fafbfa;padding:16px 20px;display:grid;gap:12px;-ms-flex-line-pack:start;align-content:start}.concierge-dashboard .concierge-panel-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;gap:12px;-ms-flex-wrap:wrap;flex-wrap:wrap}.concierge-dashboard .concierge-panel-header h2.concierge-header-text{font-size:var(--concierge-type-header);line-height:1.15;margin:4px 0 0;font-weight:700}.concierge-dashboard .concierge-data-sheet{border-radius:10px;border:1px solid var(--concierge-line);background:var(--concierge-inner-paper);overflow:hidden}.concierge-dashboard .concierge-data-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.concierge-dashboard .concierge-data-row{padding:14px 16px;border-bottom:1px solid var(--concierge-line);display:grid;gap:4px;background:var(--concierge-inner-paper)}.concierge-dashboard .concierge-data-row:nth-last-child(-n+2){border-bottom:none}.concierge-dashboard .concierge-data-row:nth-child(odd){border-right:1px solid var(--concierge-line)}.concierge-dashboard .concierge-data-row strong{font-size:var(--concierge-type-subheader)}.concierge-dashboard .concierge-data-row p{margin:0;color:var(--concierge-muted);font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-archive-tools{display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-ms-flex-wrap:wrap;flex-wrap:wrap}.concierge-dashboard .concierge-chip-btn,.concierge-dashboard .concierge-search{font:inherit;font-size:var(--concierge-type-body);border-radius:999px;border:1px solid var(--concierge-line);background:#fff;padding:9px 14px}.concierge-dashboard .concierge-search{min-width:250px;-webkit-box-flex:1;-ms-flex:1;flex:1}.concierge-dashboard .concierge-archive{max-height:760px;overflow:auto;padding-right:4px}.concierge-dashboard .concierge-archive-row{padding:12px 14px;display:grid;gap:6px;background:var(--concierge-inner-paper)}.concierge-dashboard .concierge-archive-top{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:12px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.concierge-dashboard .concierge-agent-category{font-size:var(--concierge-type-small-header);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--concierge-muted);margin-bottom:4px}.concierge-dashboard .concierge-archive-row p{font-size:var(--concierge-type-body)}.concierge-dashboard .concierge-archive-row strong{font-size:var(--concierge-type-subheader)}.concierge-dashboard .concierge-archive-meta{font-size:var(--concierge-type-meta);color:var(--concierge-muted)}.concierge-dashboard .concierge-callout{padding:12px 14px;border-radius:10px;background:var(--concierge-mist);color:var(--concierge-muted);font-size:var(--concierge-type-body)}@media (max-width:1180px){.concierge-dashboard .concierge-hero-grid,.concierge-dashboard .concierge-main{grid-template-columns:1fr}.concierge-dashboard .concierge-hero-grid{height:auto;min-height:380px}}@media (max-width:860px){.concierge-dashboard .concierge-pulse-stats,.concierge-dashboard .concierge-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.concierge-dashboard .concierge-data-grid{grid-template-columns:1fr}.concierge-dashboard .concierge-data-row:nth-child(odd){border-right:none}.concierge-dashboard .concierge-data-row:nth-last-child(-n+2){border-bottom:1px solid var(--concierge-line)}.concierge-dashboard .concierge-data-row:last-child{border-bottom:none}}@media (max-width:640px){.concierge-dashboard .concierge-pulse-stats,.concierge-dashboard .concierge-tiles{grid-template-columns:1fr}.concierge-dashboard .concierge-search{min-width:100%}}h2{font-weight:600;font-size:1.5rem;color:#000;margin-bottom:1rem}.lw-fullscreen-page a{color:#000!important}.lw-fullscreen-page a:hover{color:#333!important}.lw-fullscreen-page .underline{color:#000!important}.lw-fullscreen-page .underline:hover{color:#333!important}.lw-fullscreen-page .color-secondary-color{color:#0096c3!important}.lw-fullscreen-page .color-secondary-color:hover{color:#00465a!important}.dashboard-main-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:1em 0 5em;overflow:hidden}.dashboard-main-wrapper.row{padding-left:15px;padding-right:15px}@media (min-width:768px){.dashboard-main-wrapper{padding:2em 1em 5em}.dashboard-main-wrapper.row{padding-left:15px;padding-right:15px}}@media (min-width:992px){.dashboard-main-wrapper{padding:2em 1em 5em 0}.dashboard-main-wrapper.row{padding-left:15px;padding-right:15px}}.dashboard-main-wrapper .short-hr{width:350px;display:block;height:1px;margin:1em auto 2em}.dashboard-main-wrapper .section-header-wrapper{position:relative}.dashboard-main-wrapper .section-header-wrapper .flexed{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.dashboard-main-wrapper .section-header-wrapper .display-dropdown-wrapper{position:relative;display:inline-block}.dashboard-main-wrapper .section-header-wrapper .display-dropdown-wrapper:before{bottom:0;background-color:#00a5fa;z-index:1;pointer-events:none;padding:1em;position:absolute;right:0;top:0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNCAzNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEyIDE2bDItMiAzIDMgMy0zIDIgMi01IDV6Ii8+PC9zdmc+);content:"";background-repeat:no-repeat;background-position:50%}.dashboard-main-wrapper .section-header-wrapper .display-dropdown{font-size:1.3em!important;line-height:1.75em!important;height:auto!important;font-family:Circular Book,Inter,Arial;padding-left:.5em;padding-right:1em;border-radius:5px;border:1px solid #d3d3d3;color:grey;min-height:calc(2em + 1px);background-color:#fff;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.dashboard-main-wrapper .section-header-wrapper .display-dropdown.overview-display-mode-dropdown{width:150px;font-size:1.1em!important}.dashboard-main-wrapper .section-header-wrapper .section-header{display:block;margin-bottom:1em;text-align:center}@media (min-width:768px){.dashboard-main-wrapper .section-header-wrapper .section-header{text-align:left;margin-bottom:.5em}}.dashboard-main-wrapper .logout-btn-wrapper{position:relative;display:block;text-align:right}@media (min-width:768px){.dashboard-main-wrapper .logout-btn-wrapper{float:right}}.dashboard-main-wrapper .logout-btn-wrapper .logout-btn{margin-right:-.5em;margin-bottom:2em;color:#001433;border-color:#001433}@media (min-width:400px){.dashboard-main-wrapper .logout-btn-wrapper .logout-btn{margin-right:0}}@media (min-width:768px){.dashboard-main-wrapper .logout-btn-wrapper .logout-btn{margin-right:4.5em}}.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper{display:block;margin-left:auto;margin-right:auto;top:0;right:0;margin-top:2em}@media (min-width:768px){.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper{position:absolute;margin-top:0}}.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper .dashboard-new-agreement-btn{color:#fff}.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper .add-bank-account-btn{margin-right:1em;margin-bottom:1em;width:100%}@media (min-width:400px){.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper .add-bank-account-btn{width:auto}}.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper .remove-bank-account-btn{margin-bottom:1em;width:100%}@media (min-width:400px){.dashboard-main-wrapper .dashboard-new-agreement-btn-wrapper .remove-bank-account-btn{width:auto}}.dashboard-main-wrapper .help-message{font-size:1.1em;margin-bottom:2em}.dashboard-main-wrapper .gallery-item .text-wrapper{text-align:center;padding:2em 3em 3em}@media (min-width:992px){.dashboard-main-wrapper .gallery-item .text-wrapper{padding:8em 3em 3em;text-align:left}}.dashboard-main-wrapper .gallery-item .text-wrapper hr{width:100%;margin-top:1em;margin-bottom:1em}.dashboard-main-wrapper .gallery-item .text-wrapper .btn{margin-left:auto;margin-right:auto;display:block;float:none}@media (min-width:992px){.dashboard-main-wrapper .gallery-item .text-wrapper .btn{float:left}}.dashboard-main-wrapper .loan-credit-counter{font-size:8em;text-align:center;line-height:1em}.dashboard-main-wrapper .loan-credit-counter-summary{text-align:center;margin-top:.5em;font-size:1.75em}.dashboard-main-wrapper .table .td,.dashboard-main-wrapper .table .th{font-size:1.1em}.dashboard-main-wrapper .bank-account-icon-wrapper{margin-bottom:2.5em}.dashboard-main-wrapper .bank-account-icon-wrapper img{max-height:250px;max-width:100%;width:auto}@media (min-width:1200px){.dashboard-main-wrapper .bank-account-icon-wrapper{padding-right:2em}}.dashboard-config-sections{margin:0;padding:.25rem 0;max-width:1100px;width:100%}.dashboard-sections-wrapper{clear:both;margin-top:1.5rem}@media (min-width:992px){.dashboard-sections-wrapper{width:75%;padding-left:15px;padding-right:15px}.dashboard-config-sections{max-width:none;width:100%}}.dashboard-config-section{margin:0 0 2rem;padding:1rem .75rem 1.25rem;border:1px solid #e6e9ed;border-radius:8px;background:#fff;-webkit-box-shadow:0 8px 14px rgba(0,0,0,.03);box-shadow:0 8px 14px rgba(0,0,0,.03)}.dashboard-config-section .section-header-wrapper{margin-bottom:.75rem}.dashboard-config-section .row{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:.75rem;margin:0}.dashboard-config-section .row>[class^=col-]{width:100%;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex}.dashboard-config-card{margin-bottom:.5rem;border:1px solid #e6e9ed;border-radius:6px;-webkit-box-shadow:0 6px 10px rgba(0,0,0,.04);box-shadow:0 6px 10px rgba(0,0,0,.04);-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.dashboard-config-card,.dashboard-config-card .card-body{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%}.dashboard-config-card .card-body{padding:.9rem 1rem 1rem;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.35rem;min-height:140px}.dashboard-config-card .card-title{font-size:1.05rem;margin-bottom:.25rem}.dashboard-config-card .card-text{margin-bottom:.35rem}.dashboard-config-card .card-text.secondary-text{color:#4a4a4a}.dashboard-config-card .card-text.amount-text{font-weight:600;color:#1c4c8c}.dashboard-config-card .dashboard-config-link{padding:6px 10px;margin-top:auto;-ms-flex-item-align:start;align-self:flex-start;background:#001433;color:#fff!important;border:none;border-radius:4px;text-decoration:none!important}.dashboard-config-card .dashboard-config-link:focus,.dashboard-config-card .dashboard-config-link:hover{background:#000f29;color:#fff!important;text-decoration:none}.dashboard-config-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 0 1rem;min-height:260px;width:100%}.dashboard-config-empty>div{width:100%;max-width:620px;margin:0 auto}.dashboard-config-empty img{max-height:200px!important;-o-object-fit:contain;object-fit:contain}.dashboard-layout-sidebar{position:relative}.dashboard-layout-sidebar .subnav-wrapper{display:none;margin-top:1em;margin-bottom:1em;padding-left:0}.dashboard-layout-sidebar .subnav-wrapper.active{display:block}@media (min-width:768px){.dashboard-layout-sidebar .subnav-wrapper{margin-top:0;display:block}}.dashboard-layout-sidebar .subnav-wrapper .subnav-inner-wrapper .subnav .nav-item{display:block}.dashboard-layout-sidebar .subnav-wrapper .subnav-inner-wrapper .subnav .nav-item .nav-link{text-align:left;font-size:1.1em}.dashboard-layout-sidebar .subnav-wrapper .subnav-inner-wrapper .subnav .nav-item-divider-with-border{border-top:1px solid #d3d3d3;margin-bottom:0}.dashboard-layout-sidebar .dashboard-layout-sidebar-dropdown-btn{padding:1em 0 .5em;font-size:1.2em}.default-layout-sidebar{position:relative;padding:1em 1em 0;margin-bottom:-1em}@media (min-width:768px){.default-layout-sidebar{padding:1em 3em 0}}@media (min-width:992px){.default-layout-sidebar{padding:1em 3em 0}}@media (min-width:1200px){.default-layout-sidebar{padding:1em 10em 0}}.default-layout-sidebar .breadcrumb{padding-left:1em}.default-layout-sidebar .subnav-wrapper{display:none;height:auto;margin-top:1em;margin-bottom:1em;padding-left:0}.default-layout-sidebar .subnav-wrapper.active,.default-layout-sidebar .subnav-wrapper .subnav-inner-wrapper .subnav .nav-item{display:block}.default-layout-sidebar .subnav-wrapper .subnav-inner-wrapper .subnav .nav-item .nav-link{text-align:left;font-size:1.1em;overflow:auto}.default-layout-sidebar .default-layout-sidebar-dropdown-btn{display:inline-block}.integrations-table .integration-detail{padding-left:0;padding-right:1em;max-width:750px;float:left;border-bottom:none;width:700px;max-width:100%}@media (min-width:768px){.integrations-table .integration-detail{padding-right:3em;float:none}}.integrations-table .integration-cta{border-bottom:none;padding-left:0}.integrations-table .integration-cta .btn{padding:.75em 1em;font-size:1em;float:left}@media (min-width:768px){.integrations-table .integration-cta .btn{padding:1em;font-size:1.1em;float:none}}.applicants-list{overflow:auto;width:100%;height:90vh}.applicants-list .applicants-list-item.kanban{width:100%}@media (min-width:992px){.applicants-list .applicants-list-item.kanban{height:90vh;display:table-cell;padding:0 1em;min-width:275px;border-right:1px solid #d3d3d3}}.applicants-list .applicants-list-item.kanban .applicants-list-item-title{text-overflow:ellipsis}.applicants-step-nav-wrapper{position:relative;overflow-x:auto;overflow-y:hidden;border-top:1px solid #d3d3d3;border-bottom:1px solid #d3d3d3}.applicants-step-nav-wrapper .applicants-step-nav{position:relative;width:10000px;width:-webkit-max-content;width:-moz-max-content;width:max-content}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item{position:relative;float:left;height:85px;padding:1em 1.25em 1em 2.5em;border:none}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item:first-child{padding-left:1em}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item:before{content:"";position:absolute;z-index:3;right:-22px;bottom:-8px;width:0;height:0;border-top:50px solid rgba(0,0,0,0);border-left:25px solid #fff;border-bottom:50px solid rgba(0,0,0,0)}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item:after{content:"";position:absolute;z-index:2;right:-22px;bottom:-8px;width:0;height:0;border-top:50px solid rgba(0,0,0,0);border-left:25px solid #fff;border-bottom:50px solid rgba(0,0,0,0)}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item.active{background-color:#001433;color:#fff}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item.active:before{content:"";position:absolute;z-index:3;right:-22px;bottom:-8px;width:0;height:0;border-top:50px solid rgba(0,0,0,0);border-left:25px solid #001433;border-bottom:50px solid rgba(0,0,0,0)}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item.active .applicants-step-nav-link{color:#fff}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item .applicants-step-nav-link{position:relative;height:100%;color:#001433;background-color:rgba(0,0,0,0);text-decoration:none;border:none;outline:none}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item .applicants-step-nav-link:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item .applicants-step-nav-link .applicants-step-nav-link-title{padding-bottom:.75rem;font-size:1em;text-transform:uppercase}.applicants-step-nav-wrapper .applicants-step-nav .applicants-step-nav-item .applicants-step-nav-link .applicants-step-nav-link-number{background-color:#001433;color:#fff;width:auto;padding:.3rem .7rem;border-radius:5px}#applicantProcessIdSelect{margin-right:2em;height:2em;max-width:300px;border-radius:2px;padding:.25em .75em}@media (min-width:992px){#applicantProcessIdSelect{margin-top:1em}}.lw-fullscreen-page{width:100vw;min-height:100vh;max-width:100vw;margin:0;padding:0 0 3rem;background:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12{padding:0 2rem}@media (min-width:768px){.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12{padding:0 3rem}}@media (min-width:992px){.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12{padding:0 4rem}}@media (min-width:1200px){.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12{padding:0 5rem}}.dashboard-layout-body .dashboard-subroute-pipeline-shell{background:#fafbfa;min-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:-1em}@media (min-width:768px){.dashboard-layout-body .dashboard-subroute-pipeline-shell{margin-top:-2em}}.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12 .dashboard-subroute-pipeline-shell{margin-left:-2rem;margin-right:-2rem;padding-left:2rem;padding-right:2rem}@media (min-width:768px){.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12 .dashboard-subroute-pipeline-shell{margin-left:-3rem;margin-right:-3rem;padding-left:3rem;padding-right:3rem}}@media (min-width:992px){.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12 .dashboard-subroute-pipeline-shell{margin-left:-4rem;margin-right:-4rem;padding-left:4rem;padding-right:4rem}}@media (min-width:1200px){.dashboard-layout-body.col-md-12.col-lg-12.col-xl-12 .dashboard-subroute-pipeline-shell{margin-left:-5rem;margin-right:-5rem;padding-left:5rem;padding-right:5rem}}.dashboard-subroute-pipeline-body{padding-bottom:.5rem}.dashboard-subroute-pipeline-lw-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-subroute-pipeline-header-container{width:100%}.dashboard-subroute-pipeline-header-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem;row-gap:.5rem;width:100%}.dashboard-subroute-pipeline-title,.dashboard-subroute-pipeline-title-slot h1,.dashboard-subroute-pipeline-title-slot h2{margin:0!important;float:none!important;max-width:100%;-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px;min-width:0}.dashboard-subroute-pipeline-header-row:not(.dashboard-subroute-pipeline-header-row--has-tools) .dashboard-subroute-pipeline-title,.dashboard-subroute-pipeline-title--full{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%}.dashboard-subroute-pipeline-title-slot{-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px;min-width:0}.dashboard-subroute-pipeline-tools{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;padding:.25rem 0}.dashboard-subroute-pipeline-tools,.dashboard-subroute-pipeline-tools-flex{min-width:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%}.dashboard-subroute-pipeline-tools-flex{-ms-flex-wrap:wrap;flex-wrap:wrap;gap:10px;width:auto}.dashboard-main-wrapper .dashboard-subroute-pipeline-tools .dashboard-new-agreement-btn-wrapper{position:static;top:auto;right:auto;margin-top:0;margin-left:0;margin-right:0;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0}.lw-page-header .dashboard-pipeline-header-tools .dashboard-new-agreement-btn-wrapper{position:static;top:auto;right:auto;margin-top:0;margin-left:0;margin-right:0}.detail-container.col-md-12.col-lg-12.col-xl-12{padding:0 2rem}@media (min-width:768px){.detail-container.col-md-12.col-lg-12.col-xl-12{padding:0 3rem}}@media (min-width:992px){.detail-container.col-md-12.col-lg-12.col-xl-12{padding:0 4rem}}@media (min-width:1200px){.detail-container.col-md-12.col-lg-12.col-xl-12{padding:0 5rem}}@charset "UTF-8";.auto-save-widget{display:inline-block;margin-left:10px}@media (max-width:767px){.auto-save-widget{display:block;margin:.5em 0;text-align:center;max-width:100%}}.auto-save-widget-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(0,0,0,0);padding:0;line-height:1.2;max-width:280px}@media (max-width:767px){.auto-save-widget-content{max-width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:0}}.auto-save-widget-icon{margin-right:8px;-ms-flex-negative:0;flex-shrink:0}.auto-save-widget-icon i{color:#28a745;font-size:1rem}.auto-save-widget-icon i.fa-clock-o{color:#6c757d}@media (max-width:767px){.auto-save-widget-icon{margin-right:6px}.auto-save-widget-icon i{font-size:.9rem}}.auto-save-widget-text{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.auto-save-widget-time{font-weight:500;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width:767px){.auto-save-widget-time{white-space:normal;text-align:center;line-height:1.3}}.auto-save-widget{-webkit-animation:fadeInSlide .3s ease-out;animation:fadeInSlide .3s ease-out}@-webkit-keyframes fadeInSlide{0%{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInSlide{0%{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.breadcrumb-item .auto-save-widget{display:inline-block;margin-left:10px;vertical-align:middle}@media (max-width:767px){.breadcrumb-item .auto-save-widget{display:block;margin:.5em 0;text-align:center}}.landing-page,body{overflow-x:hidden!important}.landing-page{background-color:#fff!important;color:#333!important;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important;line-height:1.6!important}.landing-page .landing-page-content{max-width:1200px!important;margin:0 auto!important;padding:0 20px!important}.landing-page .hero-section{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important;padding:0!important;min-height:500px!important;position:relative}.landing-page .hero-section .hero-content-container{min-height:500px!important;height:100%!important;width:50%!important;position:relative!important;color:#fff!important;z-index:2}.landing-page .hero-section .hero-content-container:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#00465a;z-index:0;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.05);box-shadow:0 4px 20px rgba(0,0,0,.05);border-radius:0 0 240px 0/0 0 240px 0}.landing-page .hero-section .hero-content{position:relative!important;z-index:1!important;width:100%!important;height:100%!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important;min-height:500px!important;padding:80px!important}.landing-page .hero-section .hero-content .hero-title{font-size:4rem;font-weight:700;color:#fff;margin-bottom:30px}.landing-page .hero-section .hero-content .hero-subtitle{font-size:2rem;font-weight:700;color:#c3ebf5;margin-bottom:30px}@media (max-width:1024px){.landing-page .hero-section .hero-content{padding:40px 20px!important;min-height:300px!important}.landing-page .hero-section .hero-content .hero-title{font-size:2.5rem;margin-bottom:20px}.landing-page .hero-section .hero-content .hero-subtitle{font-size:1.5rem;margin-bottom:20px}}.landing-page .hero-section .hero-image{width:100%;position:absolute;right:0;top:0;z-index:0}.landing-page .hero-section .hero-image img{height:450px;width:100%;-o-object-fit:cover;object-fit:cover}.landing-page .hero-section .hero-image .image-placeholder{background:#f0f0f0;color:#000;height:400px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:50%}.landing-page .header{padding:40px 0!important;background:#fff!important}.landing-page .header .main-title{font-size:3.5rem!important;font-weight:700!important;color:#1a1a1a!important;margin-bottom:30px!important;letter-spacing:-.02em!important;line-height:1.2!important}.landing-page .header .signup-section{text-align:center!important;margin-bottom:10px!important}.landing-page .header .signup-section .signup-form{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;gap:15px!important;margin-bottom:10px!important}.landing-page .header .signup-section .email-input{width:320px!important;padding:16px 20px!important;border:2px solid #e5e7eb!important;border-radius:12px!important;font-size:1rem!important;-webkit-transition:all .3s ease!important;transition:all .3s ease!important;background:#fff!important}.landing-page .header .signup-section .email-input:focus{outline:none!important;border-color:#2563eb!important;-webkit-box-shadow:0 0 0 3px rgba(37,99,235,.1)!important;box-shadow:0 0 0 3px rgba(37,99,235,.1)!important}.landing-page .header .signup-section .login-btn{padding:16px 32px!important;background:#72aa49!important;color:#fff!important;border:none!important;border-radius:12px!important;font-size:1rem!important;font-weight:600!important;cursor:pointer!important;-webkit-transition:all .3s ease!important;transition:all .3s ease!important;-webkit-box-shadow:0 4px 15px rgba(114,170,73,.3)!important;box-shadow:0 4px 15px rgba(114,170,73,.3)!important}.landing-page .header .signup-section .login-btn:hover{-webkit-transform:translateY(-2px)!important;-ms-transform:translateY(-2px)!important;transform:translateY(-2px)!important;-webkit-box-shadow:0 8px 25px rgba(114,170,73,.4)!important;box-shadow:0 8px 25px rgba(114,170,73,.4)!important}.landing-page .main-content{padding:20px 0!important;background:#fff!important;text-align:left}.landing-page .main-content .section-title{font-size:2.5rem!important;font-weight:700!important;color:#1a1a1a!important;margin-bottom:30px!important;text-align:center!important;letter-spacing:-.02em!important;line-height:1.3!important}.landing-page .main-content .intro-section{margin-bottom:50px!important}.landing-page .main-content .intro-section .intro-description{font-size:1.4rem!important;line-height:1.7!important;color:#374151!important;font-weight:400!important;text-align:center!important;max-width:none!important;margin:0!important}.landing-page .main-content .intro-section .services-overview{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;gap:60px!important;margin-top:40px!important}.landing-page .main-content .intro-section .services-overview .service-item{text-align:center!important;-webkit-box-flex:1!important;-ms-flex:1!important;flex:1!important;max-width:200px!important}.landing-page .main-content .intro-section .services-overview .service-item h3{font-size:1.5rem!important;font-weight:700!important;color:#333!important;margin-bottom:10px!important;text-transform:uppercase!important;letter-spacing:.5px!important}.landing-page .main-content .intro-section .services-overview .service-item p{font-size:1rem!important;color:#666!important;line-height:1.5!important;margin:0!important}.landing-page .main-content .about-video-section{margin:5rem 0}.landing-page .main-content .about-video-section h2{font-size:1.5rem!important;font-weight:700!important;color:#333!important;margin-bottom:20px!important}.landing-page .main-content .about-video-section p{font-size:1.1rem!important;line-height:1.6!important;color:#333!important;margin-bottom:15px!important}.landing-page .main-content .about-video-section .video-placeholder{position:relative!important;width:75%!important;aspect-ratio:16/9!important;background:linear-gradient(135deg,#f8f9fa,#e9ecef)!important;border-radius:12px!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;margin:30px auto!important;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08)!important;box-shadow:0 4px 20px rgba(0,0,0,.08)!important}.landing-page .main-content .about-video-section .video-placeholder .video-overlay{text-align:center!important;width:100%!important;padding:20px!important}.landing-page .main-content .about-video-section .video-placeholder .video-overlay h3{font-size:1.2rem!important;font-weight:400!important;color:#666!important;margin-bottom:20px!important}.landing-page .main-content .about-video-section .video-placeholder .video-overlay .play-button{width:80px!important;height:80px!important;background:#72aa49!important;border-radius:50%!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;font-size:1.8rem!important;color:#fff!important;cursor:pointer!important;margin:0 auto!important;-webkit-box-shadow:0 8px 25px rgba(114,170,73,.3)!important;box-shadow:0 8px 25px rgba(114,170,73,.3)!important;-webkit-transition:all .3s ease!important;transition:all .3s ease!important}.landing-page .main-content .about-video-section .video-placeholder .video-overlay .play-button:hover{-webkit-transform:scale(1.05)!important;-ms-transform:scale(1.05)!important;transform:scale(1.05)!important;-webkit-box-shadow:0 12px 35px rgba(114,170,73,.4)!important;box-shadow:0 12px 35px rgba(114,170,73,.4)!important}.landing-page .main-content .section-description{font-size:1rem!important;line-height:1.6!important;color:#333!important;margin-bottom:40px!important}.landing-page .main-content .main-video-section{margin-bottom:40px!important}.landing-page .main-content .main-video-section .video-placeholder.large{position:relative!important;height:300px!important;background:#f8f9fa!important;border-radius:8px!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay{text-align:center!important;width:100%!important;padding:20px!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay h3{font-size:1.2rem!important;font-weight:400!important;color:#333!important;margin-bottom:15px!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay .play-button.large{width:40px!important;height:40px!important;background:#333!important;border-radius:50%!important;font-size:1rem!important;color:#fff!important;cursor:pointer!important;margin:0 auto 10px!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay .play-button.large,.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay .video-progress{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay .video-progress{gap:10px!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay .video-progress .progress-bar{width:100px!important;height:2px!important;background:#ddd!important;border-radius:1px!important}.landing-page .main-content .main-video-section .video-placeholder.large .video-overlay .video-progress .duration{font-size:.9rem!important;color:#666!important}.landing-page .main-content .testimonials-section .testimonial-card{background:#fff!important;padding:30px 25px!important;border:1px solid #e5e7eb!important;border-radius:16px!important;margin-bottom:20px!important;text-align:center!important;height:100%!important;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.06)!important;box-shadow:0 4px 20px rgba(0,0,0,.06)!important;-webkit-transition:all .3s ease!important;transition:all .3s ease!important}.landing-page .main-content .testimonials-section .testimonial-card:hover{-webkit-transform:translateY(-4px)!important;-ms-transform:translateY(-4px)!important;transform:translateY(-4px)!important;-webkit-box-shadow:0 8px 30px rgba(0,0,0,.12)!important;box-shadow:0 8px 30px rgba(0,0,0,.12)!important}.landing-page .main-content .testimonials-section .testimonial-card .testimonial-avatar{width:60px!important;height:60px!important;border-radius:50%!important;margin:0 auto 15px!important;overflow:hidden!important}.landing-page .main-content .testimonials-section .testimonial-card .testimonial-avatar img{width:100%!important;height:100%!important;-o-object-fit:cover!important;object-fit:cover!important}.landing-page .main-content .testimonials-section .testimonial-card h3{font-size:1.1rem!important;font-weight:700!important;color:#333!important;margin-bottom:8px!important}.landing-page .main-content .testimonials-section .testimonial-card p{font-size:.9rem!important;color:#666!important;margin-bottom:15px!important}.landing-page .main-content .testimonials-section .testimonial-card .read-more-btn{background:#72aa49!important;border:2px solid #72aa49!important;border-radius:8px!important;padding:10px 20px!important;color:#fff!important;font-size:.9rem!important;font-weight:600!important;cursor:pointer!important;-webkit-transition:all .3s ease!important;transition:all .3s ease!important}.landing-page .main-content .testimonials-section .testimonial-card .read-more-btn:hover{background:#5a8a3a!important;border-color:#5a8a3a!important;color:#fff!important;-webkit-transform:translateY(-1px)!important;-ms-transform:translateY(-1px)!important;transform:translateY(-1px)!important;-webkit-box-shadow:0 4px 12px rgba(114,170,73,.3)!important;box-shadow:0 4px 12px rgba(114,170,73,.3)!important}.landing-page .main-content .success-stories .story-card{background:#f8f9fa!important;padding:25px!important;border-radius:12px!important;margin-bottom:20px!important;text-align:center!important}.landing-page .main-content .success-stories .story-card .story-avatar{width:60px!important;height:60px!important;background:#ddd!important;border-radius:50%!important;margin:0 auto 15px!important}.landing-page .main-content .success-stories .story-card h4{font-size:1.2rem!important;font-weight:700!important;color:#333!important;margin-bottom:10px!important}.landing-page .main-content .success-stories .story-card p{font-size:1rem!important;color:#666!important;margin-bottom:15px!important}.landing-page .main-content .success-stories .story-card .read-more-btn{background:#72aa49!important;border:1px solid #72aa49!important;border-radius:8px!important;padding:8px 16px!important;color:#fff!important;font-size:.9rem!important;cursor:pointer!important}.landing-page .main-content .success-stories .story-card .read-more-btn:hover{background:#5a8a3a!important;border-color:#5a8a3a!important}.landing-page .services-ribbon{background:rgba(0,0,0,0)!important;position:relative!important}.landing-page .services-ribbon:before{content:"";position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:105%;height:70%;background-color:#00465a;z-index:0;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.05);box-shadow:0 4px 20px rgba(0,0,0,.05);border-radius:0 160px 0 160px/0 120px 0 120px}.landing-page .services-ribbon .container{position:relative;z-index:1}.landing-page .get-started{padding:60px 0!important}.landing-page .get-started .section-title{font-size:2.5rem!important;font-weight:700!important;color:#fff!important;margin-bottom:20px!important;text-align:center!important}.landing-page .get-started .section-subtitle{font-size:1.2rem!important;color:#666!important;text-align:center!important;margin-bottom:50px!important}.landing-page .get-started .option-card{background:#fff!important;padding:40px 30px!important;border-radius:12px!important;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.1)!important;box-shadow:0 4px 12px rgba(0,0,0,.1)!important;height:100%!important;text-align:center!important}.landing-page .get-started .option-card .card-icon{width:60px!important;height:60px!important;background:#f0f0f0!important;border-radius:50%!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;font-size:1.5rem!important;color:#666!important;margin:0 auto 20px!important}.landing-page .get-started .option-card h3{font-size:1.5rem!important;font-weight:700!important;color:#00465a!important;margin-bottom:15px!important;text-align:center!important}.landing-page .get-started .option-card p{font-size:1rem!important;color:#666!important;margin-bottom:25px!important;text-align:center!important}.landing-page .get-started .option-card .option-buttons{margin-bottom:20px!important}.landing-page .get-started .option-card .option-buttons .option-btn{display:block!important;width:100%!important;padding:12px!important;background:#72aa49!important;border:1px solid #72aa49!important;border-radius:8px!important;text-align:left!important;color:#fff!important;font-size:1rem!important;margin-bottom:10px!important;cursor:pointer!important;-webkit-transition:background-color .2s!important;transition:background-color .2s!important;text-decoration:none!important;font-weight:600!important}.landing-page .get-started .option-card .option-buttons .option-btn:hover{background:#5a8a3a!important;border-color:#5a8a3a!important}.landing-page .get-started .option-card .see-all-link{display:block!important;text-align:center!important;color:#007bff!important;text-decoration:none!important;margin-bottom:20px!important}.landing-page .get-started .option-card .see-all-link:hover{text-decoration:underline!important}.landing-page .get-started .option-card .search-section{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;gap:10px!important}.landing-page .get-started .option-card .search-section .search-input{-webkit-box-flex:1!important;-ms-flex:1!important;flex:1!important;padding:8px 12px!important;border:1px solid #ddd!important;border-radius:6px!important;font-size:1rem!important}.landing-page .get-started .option-card .search-section .search-btn{padding:8px 12px!important;background:#333!important;color:#fff!important;border:none!important;border-radius:6px!important;cursor:pointer!important}.landing-page .get-started .option-card .guide-list{list-style:none!important;padding:0!important;margin-bottom:20px!important}.landing-page .get-started .option-card .guide-list li{padding:8px 0!important;color:#333!important;font-size:1rem!important}.landing-page .get-started .option-card .guide-list li:before{content:"\2022"!important;color:#007bff!important;font-weight:700!important;margin-right:10px!important}.landing-page .get-started .option-card .time-estimate{font-size:.9rem!important;color:#666!important;margin-bottom:25px!important;text-align:center!important}.landing-page .get-started .option-card .connect-btn{width:100%!important;padding:12px 24px!important;background:#333!important;color:#fff!important;border:none!important;border-radius:8px!important;font-size:1rem!important;font-weight:400!important;cursor:pointer!important;-webkit-transition:background-color .2s!important;transition:background-color .2s!important}.landing-page .get-started .option-card .connect-btn:hover{background:#555!important}.questionnaire-signature .sv_complete_btn{display:none!important}.slanted-right{clip-path:polygon(0 0,100% 0,100% 100%,0 94%)}.questionnaire .alert{font-size:1.2rem;line-height:1.7rem;font-family:Circular Book,Inter,Arial}.questionnaire .alert.alert-info{background-color:rgba(0,165,250,.4);border-color:#00a5fa;color:#001433}.toolbar-helper{position:fixed;bottom:0;right:0;background-color:#00a5fa;width:200px;height:25px;z-index:10;text-align:center;cursor:pointer;border-top-left-radius:5px}.toolbar-helper span{color:#001433}.toolbar-window{position:fixed;bottom:0;right:0;width:500px;height:calc(100% - 75px);background-color:#fff;z-index:9;opacity:1;-webkit-box-shadow:-1px 10px 20px 1px #bbb;box-shadow:-1px 10px 20px 1px #bbb;border-top-left-radius:5px}.toolbar-close{width:100%;border-bottom:1px solid #e5e5e5;text-align:right;padding:5px}.toolbar-close a{position:relative;padding-left:10px;padding-right:10px}.toolbar-body{height:90%;width:100%;padding:5px 15px;background-color:#fff;overflow-y:scroll}.toolbar-bottom{padding:20px 0}div.sv_p_root>h4.sv_page_title{display:none}.overflow-visible{overflow:visible!important}.button-white input[type=button]{color:#fff!important}.agreement-questionnaire-dynamic-sidebar-layout .questionnaire-container .questionnaire-styles .questionnaire:not(.no-questionnaire-styles){font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;padding:1rem}@media (min-width:768px){.agreement-questionnaire-dynamic-sidebar-layout .questionnaire-container .questionnaire-styles .questionnaire:not(.no-questionnaire-styles){padding:1rem 2rem 0}}@media (min-width:1400px){.agreement-questionnaire-dynamic-sidebar-layout .questionnaire-container .questionnaire-styles .questionnaire:not(.no-questionnaire-styles){padding:1rem 4rem 0}}.agreement-questionnaire-dynamic-sidebar-layout .lw-page-header .flex-padding-no-max{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;padding:0 1rem}@media (min-width:768px){.agreement-questionnaire-dynamic-sidebar-layout .lw-page-header .flex-padding-no-max{padding:0 2rem}}@media (min-width:1400px){.agreement-questionnaire-dynamic-sidebar-layout .lw-page-header .flex-padding-no-max{padding:0 4rem}}.agreement-questionnaire-dynamic-sidebar-layout .lw-page-header .flex-padding-no-max .page-title+.col-xs-12,.agreement-questionnaire-dynamic-sidebar-layout .lw-page-header .flex-padding-no-max .page-title.col-xs-12{padding-left:0!important;padding-right:0!important}.agreement-questionnaire-dynamic-sidebar-layout .lw-page-header .flex-padding-no-max .page-title+.col-xs-12{padding-top:.25rem!important;padding-bottom:.25rem!important}.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;padding:1rem 1rem 0;margin-bottom:-1em}@media (min-width:768px){.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar{padding:1rem 2rem 0}}@media (min-width:1400px){.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar{padding:1rem 4rem 0}}.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar nav.breadcrumb.flex-padding-no-max{margin-left:0;margin-right:0;max-width:none;padding:0!important}.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar nav.breadcrumb .breadcrumb-item a,.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar nav.breadcrumb li a{padding:0!important;float:none;display:inline}.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar nav.breadcrumb .breadcrumb-item:first-child a{padding-left:0!important}.agreement-questionnaire-dynamic-sidebar-layout .default-layout-sidebar .breadcrumb{padding-left:0}.agreement-questionnaire-dynamic-sidebar-layout .questionnaire-container .questionnaire-styles .questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body{padding:0 0 4em}@media (min-width:992px){.agreement-questionnaire-dynamic-sidebar-layout .questionnaire-container .questionnaire-styles .questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body{padding:1em 0 5em}}#app .agreement-questionnaire-dynamic-sidebar-column--fixed{-webkit-overflow-scrolling:touch}.agreement-questionnaire-sidebar-header-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:.5rem 1rem}.agreement-questionnaire-sidebar-header-row-main{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0}.agreement-questionnaire-sidebar-header-row-actions{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;text-align:right;-ms-flex-item-align:center;align-self:center}#app .agreement-dynamic-sidebar-text-toggle{padding:.5rem;border-radius:5px;margin:0;font-size:1em;text-align:right;white-space:normal;border:none;-webkit-box-shadow:none;box-shadow:none}#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--expanded{background:rgba(0,0,0,0)!important;background-color:rgba(0,0,0,0)!important;color:#001433!important}#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--expanded:active,#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--expanded:focus,#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--expanded:hover{background:rgba(0,0,0,0)!important;background-color:rgba(0,0,0,0)!important;color:#001433!important;border-color:rgba(0,0,0,0)!important;text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--collapsed{background:#00a5fa!important;background-color:#00a5fa!important;color:#fff!important}#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--collapsed:active,#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--collapsed:focus,#app .agreement-dynamic-sidebar-text-toggle.agreement-dynamic-sidebar-text-toggle--collapsed:hover{background:#00a5fa!important;background-color:#00a5fa!important;color:#fff!important;border-color:#00a5fa!important;text-decoration:none;-webkit-box-shadow:none;box-shadow:none;-webkit-filter:brightness(.95);filter:brightness(.95)}.questionnaire:not(.no-questionnaire-styles).questionnaire{padding:1em}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire{padding:1em 3em 3em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles).questionnaire{padding:1em 3em 3em}}@media (min-width:1200px){.questionnaire:not(.no-questionnaire-styles).questionnaire{padding:1em 10em 10em}}.questionnaire:not(.no-questionnaire-styles).questionnaire #defaultRTE-value{min-height:0!important;height:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .no-show{margin:0!important;padding:0!important;height:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .tiny-text{font-size:.75em!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .small-text{font-size:1.25em!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .horizontal-panel-dynamic .sv_panel_dynamic{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;padding-top:30px}.questionnaire:not(.no-questionnaire-styles).questionnaire .horizontal-panel-dynamic .sv_panel_dynamic input[type=button]{color:#fff!important;border:none;float:right;margin-right:20px;margin-top:20px!important;max-height:48px;position:absolute;right:0;top:-26px}.questionnaire:not(.no-questionnaire-styles).questionnaire .horizontal-panel-dynamic .sv_panel_dynamic div input[type=button]{color:#fff!important;border:none;border-radius:5px;padding:.35rem 1rem;font-size:1.2em!important;width:auto!important;font-weight:700;line-height:2em;border:none!important;min-width:100px!important;cursor:pointer;float:right;margin-right:20px;margin-top:20px!important;max-height:48px;position:absolute;right:0;top:-26px}.questionnaire:not(.no-questionnaire-styles).questionnaire .horizontal-panel-dynamic .sv_panel_dynamic .sv_p_container{min-width:44%}.questionnaire:not(.no-questionnaire-styles).questionnaire .horizontal-panel-dynamic .sv_panel_dynamic .sv_p_container input[type=button],.questionnaire:not(.no-questionnaire-styles).questionnaire .horizontal-panel-dynamic .sv_panel_dynamic .sv_p_container input[type=button]:hover{max-width:90%}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_panel_dynamic input[type=button]{color:#fff!important;border:none;border-radius:5px;padding:.35rem 1rem;font-size:1.2em!important;width:auto!important;font-weight:700;line-height:2em;border:none!important;min-width:100px!important;cursor:pointer;float:right;margin-right:20px;margin-top:20px!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_panel_dynamic .sv_p_container input[type=button]{float:left;background-color:#ff6f5e;margin-left:13px;margin-top:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_panel_dynamic .sv_p_container input[type=button]:hover{float:left;background-color:#db3056}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_q_matrix_dropdown tbody tr td span,.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_q_matrix_dropdown thead tr th,.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_q_matrix_dynamic thead tr th{font-size:20px;font-weight:400}.questionnaire:not(.no-questionnaire-styles).questionnaire .matrix-headers-wrap .sv_q_matrix_dropdown thead th{white-space:normal!important;overflow-wrap:break-word;word-wrap:break-word;max-width:140px;line-height:1.2;padding:.5em .4em;vertical-align:middle}.questionnaire:not(.no-questionnaire-styles).questionnaire .matrix-headers-wrap .sv_q_matrix_dropdown tbody tr:last-child{border-top:2px solid #333}.questionnaire:not(.no-questionnaire-styles).questionnaire .title-left-tiny-text .sv_qstn_left{margin-top:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .title-left-tiny-text .sv_qstn_left .title-left .sv_q_title{margin-bottom:0!important;margin:0;width:45px}.questionnaire:not(.no-questionnaire-styles).questionnaire .title-left-tiny-text .sv_qstn_left .title-left .sv_q_title span{font-size:.75em}.questionnaire:not(.no-questionnaire-styles).questionnaire .text15{font-size:15px!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .title-top-tiny-text .sv_qstn{margin-top:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .title-top-tiny-text .sv_qstn .sv_q_title{margin-bottom:0!important;margin:0}.questionnaire:not(.no-questionnaire-styles).questionnaire .title-top-tiny-text .sv_qstn .sv_q_title span{font-size:.75em}.questionnaire:not(.no-questionnaire-styles).questionnaire .text-right .sv_q_title{text-align:right!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .input-title{clear:both;padding:22px 0 0;font-size:16px;color:hsla(0,0%,100%,.6);font-weight:300}.questionnaire:not(.no-questionnaire-styles) .checkbox-label,.questionnaire:not(.no-questionnaire-styles) .form-radio-input{position:absolute;opacity:0;cursor:pointer;z-index:1}.questionnaire:not(.no-questionnaire-styles) .form-check-label{line-height:2rem}.questionnaire:not(.no-questionnaire-styles) .form-control,.questionnaire:not(.no-questionnaire-styles) .no-padding-bottom-nested .sv_q{padding-bottom:0!important}.questionnaire:not(.no-questionnaire-styles) .attached-checkbox .sv_q{padding-top:0!important}.questionnaire:not(.no-questionnaire-styles) .pt-2{padding-top:2rem!important}.questionnaire:not(.no-questionnaire-styles) .form-check .radio-custom{position:absolute;top:1.25px;left:1.25px;height:30px;width:30px;background-color:rgba(0,0,0,0);border-radius:20px;border:1px solid #d3d3d3}.questionnaire:not(.no-questionnaire-styles) .form-check input:checked~.radio-custom{background-color:#5cb85c;border-radius:20px!important;height:25px!important;width:25px!important;padding:9px!important;opacity:1;border:6px solid #f7f7f7;-webkit-box-shadow:0 0 2px #000!important;box-shadow:0 0 2px #000!important}.questionnaire:not(.no-questionnaire-styles) .form-check{margin:30px 0 0;overflow:hidden}.questionnaire:not(.no-questionnaire-styles) .checkbox-label{display:block;position:relative;margin:auto;cursor:pointer;font-size:22px;line-height:24px;height:24px;width:24px;clear:both}.questionnaire:not(.no-questionnaire-styles) .checkbox-label,.questionnaire:not(.no-questionnaire-styles) .form-check-input{position:absolute;opacity:0;cursor:pointer;z-index:10}.questionnaire:not(.no-questionnaire-styles) .form-check-input{height:100%;width:100%}.questionnaire:not(.no-questionnaire-styles) .form-check-label{padding-left:3rem;font-weight:400;font-size:1.2rem;color:#000;font-family:Circular Book,Inter,Arial}.questionnaire:not(.no-questionnaire-styles) .form-check .checkbox-custom{position:absolute;top:0;left:0;height:24px;width:24px;background-color:rgba(0,0,0,0);border-radius:5px;transition:all .3s ease-out;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;border:2px solid #e6e6e6;margin:.3rem .1rem}.questionnaire:not(.no-questionnaire-styles) .form-check input:checked~.checkbox-custom{background-color:#5cb85c;border-radius:5px;-webkit-transform:rotate(0deg) scale(1);-ms-transform:rotate(0deg) scale(1);transform:rotate(0deg) scale(1);opacity:1;border:2px solid #5cb85c}.questionnaire:not(.no-questionnaire-styles) .form-check .checkbox-custom:after{position:absolute;content:"";left:12px;top:12px;height:0;width:0;border-radius:5px;border:solid #5cb85c;border-width:0 3px 3px 0;-webkit-transform:rotate(0deg) scale(0);-ms-transform:rotate(0deg) scale(0);transform:rotate(0deg) scale(0);opacity:1;transition:all .3s ease-out;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out}.questionnaire:not(.no-questionnaire-styles) .form-check input:checked~.checkbox-custom:after{-webkit-transform:rotate(45deg) scale(1);-ms-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);opacity:1;left:8px;top:3px;width:6px;height:12px;border:solid #fff;border-width:0 2px 2px 0;background-color:#5cb85c;border-radius:0}.questionnaire:not(.no-questionnaire-styles) .form-check .checkbox-custom:before{position:absolute;content:"";left:10px;top:10px;width:0;height:0;border-radius:5px;border:2px solid #e6e6e6;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.questionnaire:not(.no-questionnaire-styles) .form-check input:checked~.checkbox-custom:before{left:-3px;top:-3px;width:24px;height:24px;border-radius:5px;-webkit-transform:scale(3);-ms-transform:scale(3);transform:scale(3);opacity:0;z-index:999;transition:all .3s ease-out;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out}.questionnaire:not(.no-questionnaire-styles) .title-left-tiny-text-no-width .sv_qstn_left{margin-top:0!important}.questionnaire:not(.no-questionnaire-styles) .title-left-tiny-text-no-width .sv_qstn_left .title-left .sv_q_title{margin-bottom:0!important;margin:0}.questionnaire:not(.no-questionnaire-styles) .title-left-tiny-text-no-width .sv_qstn_left .title-left .sv_q_title span{font-size:.75em}.questionnaire:not(.no-questionnaire-styles) .title-left-tiny-text-no-width .form-check-label{font-size:1.2rem}.questionnaire:not(.no-questionnaire-styles) .checkbox-no-scroll .sv_qstn{overflow:hidden}.questionnaire:not(.no-questionnaire-styles) .sv_main{background-color:rgba(0,0,0,0)}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-toggle{margin:0 0 1rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.75rem;font-weight:500;color:#4f5a65}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-label--toggle{cursor:pointer}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-slider{position:relative;display:inline-block;width:44px;height:24px;background-color:#d7dce1;border-radius:999px;-webkit-transition:background-color .2s ease;transition:background-color .2s ease;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-slider:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;background-color:#fff;border-radius:50%;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-label--toggle .custom-nav-skip-input:checked+.custom-nav-skip-slider{background-color:#1f6fd1}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-label--toggle .custom-nav-skip-input:checked+.custom-nav-skip-slider:after{-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-label--toggle .custom-nav-skip-input:focus+.custom-nav-skip-slider{-webkit-box-shadow:0 0 0 3px rgba(31,111,209,.25);box-shadow:0 0 0 3px rgba(31,111,209,.25)}.questionnaire:not(.no-questionnaire-styles) .sv_main .custom-nav-skip-text{line-height:1.4}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container{max-width:1400px;margin-left:auto;margin-right:auto}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body{border:none;background-color:rgba(0,0,0,0);padding:0 0 4em}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body{padding:1em 1em 5em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root{margin-left:auto;margin-right:auto;padding-left:0;padding-right:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root:after{content:"";display:table;clear:both}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles){background-color:rgba(0,0,0,0);border:none;clear:none}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q textarea{font-size:1.5em;line-height:2em;height:auto;padding-top:0;padding-bottom:0}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q textarea{font-size:1.75em;line-height:1.7em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q textarea{font-size:2em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-ddl.e-input-group .e-ddl-hidden{display:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-group:not(.e-float-icon-left){border:none!important;margin-bottom:0!important;line-height:inherit!important;min-height:calc(2em + 1px)}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):before,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):after,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .e-input-focus{background:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q select{min-height:calc(2em + 1px)}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .sv_q_radiogroup_label{line-height:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .input-group-addon{font-size:1.5em;line-height:1em}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .input-group-addon{font-size:1.75em;line-height:1.25em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display .sv_q .custom_nav{padding:1em 0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em;font-weight:400!important}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q textarea{font-size:1.5em;line-height:2em;height:auto;padding-top:0;padding-bottom:0}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q textarea{font-size:1.75em;line-height:1.7em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q textarea{font-size:2em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-ddl.e-input-group .e-ddl-hidden{display:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-group:not(.e-float-icon-left){border:none!important;margin-bottom:0!important;line-height:inherit!important;min-height:calc(2em + 1px)}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):before,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):after,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .e-input-focus{background:none!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .form-control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q select{min-height:calc(2em + 1px)}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .sv_q_radiogroup_label{line-height:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .input-group-addon{font-size:1.5em;line-height:1em}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .input-group-addon{font-size:1.75em;line-height:1.25em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-smaller-display-no-bold .sv_q .custom_nav{padding:1em 0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display.questionnaire-expression-question.compact .sv_q div{line-height:0;min-height:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display.questionnaire-expression-question .sv_q div:last-child{font-size:1.25rem!important;font-family:Circular Book,Inter,Arial;min-height:1.25em;padding-top:.5rem;padding-bottom:.2rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display.text-right .sv_q.sv_qstn div{line-height:0;min-height:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display.text-right .sv_q.sv_qstn div:last-child{line-height:1.75em;min-height:auto;padding-top:0;padding-bottom:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_title{font-size:1.3em;line-height:1.1em}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_title{font-size:1.3em;line-height:1.1em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_cw_pretty_checkbox_radiogroup label:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_dropdown_control:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_radiogroup_label:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_text_root:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn input:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn input[type=text]:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn select:not(.RDL-uploadedItem-input),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn textarea:not(.RDL-uploadedItem-input){font-size:1.3em!important;line-height:1.75em!important;height:auto!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_cw_pretty_checkbox_radiogroup label:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_dropdown_control:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_radiogroup_label:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_text_root:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn input:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn input[type=text]:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn select:not(.RDL-uploadedItem-input).date-picker,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn textarea:not(.RDL-uploadedItem-input).date-picker{height:calc(2em + 1px)!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .input-group input[type=text]:not(.RDL-uploadedItem-input){font-size:1.3em!important;line-height:1.75em!important;height:auto!important;padding:1px 1em!important;border-radius:5px!important;border:1px solid #d3d3d3!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_q_radiogroup_label{line-height:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .sv_cw_pretty_checkbox_radiogroup{padding-top:20px}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .borrowerAddressCityStateZip input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .lenderAddressCityStateZip input{height:2em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .input-group-addon{font-size:1.1em;line-height:1.1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .custom_nav{padding:1em 0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .customCheckbox{font-size:.75em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn .react-select-input-group-xsmall__input input{min-height:auto!important;height:20px!important;font-size:1.2rem!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn[data-rendered=r] .sv_q_text_root[readonly],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn[data-rendered=r] input[readonly],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn[data-rendered=r] textarea[readonly]{font-size:1.3em!important;line-height:1.75em!important;height:auto!important;min-height:calc(2em + 1px)!important;padding:1px 1em!important;border-radius:5px!important;border:1px solid #d3d3d3!important;background-color:#eceeef;color:#001433!important;width:100%!important;display:block!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display .sv_q.sv_qstn[data-rendered=r] textarea{resize:vertical;min-height:4em!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).questionnaire-xsmall-display.full-height-textarea .sv_q.sv_qstn textarea{height:100vh!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).confirmation-question .sv_q{padding-top:3em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).disabled .sv_q_text_root{background-color:#eceeef;color:#001433!important;cursor:not-allowed}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q_title{font-family:Circular Book,Inter,Arial;margin-bottom:1.1em;font-size:1.75em;line-height:1.15em;letter-spacing:-.03em;color:#001433;text-align:left}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q_title{font-size:2em;line-height:1.3em;letter-spacing:-.01em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_page_title,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q_title{margin-bottom:.75em;font-size:2.5em;line-height:1.3em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_cw_pretty_checkbox_radiogroup:last-child{margin-bottom:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_cw_pretty_checkbox_radiogroup label{font-family:Circular Book,Inter,Arial;font-size:2em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager){color:#001433}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).questionnaireIntro{padding:1em 1em .25em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).questionnaireIntro hr{background-color:#001433;opacity:.5;height:1px;margin-bottom:0;margin-top:2em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .page-title{color:#001433;padding-bottom:1rem;font-size:3rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .step-summary{font-size:1.2rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) p{font-size:1.4em;font-weight:400}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid rgba(0,0,0,0);padding:.5rem 1rem;font-size:1.2em;border-radius:.25rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input{width:100%}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .form-group{margin-bottom:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) textarea{font-family:Circular Book,Inter,Arial;min-height:auto;padding-left:1em;padding-right:1em;border-radius:5px;border:1px solid #d3d3d3;color:#001433;font-size:1.5em;line-height:1.5em;min-height:calc(2em + 1px)}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) textarea{font-size:1.75em;line-height:1.7em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_radiogroup_label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=text],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) textarea{font-size:2em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=button],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=submit]{font-size:1.3em;line-height:1.3em;background-color:#00a5fa;color:#fff;width:auto}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .pretty.p-round .state label:after,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .pretty.p-round .state label:before{margin-top:30px}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=checkbox],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=radio]{height:100%;width:100%}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[type=file]{line-height:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_dropdown_control[disabled],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_text_root[disabled],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[disabled] [class^=sv_q]:not(.sv_q_title),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[disabled] input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[disabled] select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[disabled] textarea,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[readonly] [class^=sv_q]:not(.sv_q_title),.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[readonly] input,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[readonly] select,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager)[readonly] textarea,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) div:not(.btn-group)>input[readOnly],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) input[disabled],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) select[disabled],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) textarea[disabled],.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) textarea[readonly]{background-color:#eceeef;color:#001433!important;cursor:not-allowed;width:100%}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_cw_pretty_checkbox_radiogroup label,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_radiogroup_label{border:none;line-height:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .pretty input[disabled]~*{opacity:1}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .date-picker{padding:.125rem .75rem;background-color:#fff;color:#000}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) #date-picker-parent input.date-picker{background-color:"#fff";cursor:pointer;color:#000!important;display:table;width:100%}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_erbox{font-family:Circular Book,Inter,Arial;font-size:1.3em}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_erbox{font-size:1.5em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .alert-wrapper{background-color:#fff;color:#001433;border:1px solid grey}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .alert-wrapper p{font-size:1.4em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .alert-wrapper button{background-color:#001433;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;margin-right:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .dropdown-button-centered.btn-group{border:none;padding:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_matrix_dynamic_button{background-color:#f14233;color:#fff!important;border-radius:5px;padding:.35rem 1rem;font-size:1rem;width:auto!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_footer button,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_footer input[type=button]{background-color:#001433;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1rem;width:auto!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_q_matrix_dropdown td{font-weight:700}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .react-select-input-group-xsmall__input input{min-height:auto!important;height:20px!important;font-size:1.2rem!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .react-select-input-group-smaller__input input{min-height:auto!important;height:43px!important;font-size:1.2rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .react-select-input-group__input input{min-height:auto!important;height:43px!important;font-size:1.2rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-bordered .sv_q.sv_qstn:not([data-rendered=r]){border:1px solid #001433;border-radius:5px;margin-bottom:2rem;position:relative}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-bordered .sv_p_title_expandable{border:none!important;margin:0}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-bordered.expectedCashFlowEntries .sv_q:first-child>div>hr{display:none}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-bordered.expectedCashFlowEntries .sv_q{padding-bottom:1rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-alt-buttons input[type=button]{width:auto!important;color:#fff!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-alt-buttons>div>.sv_row>.sv_qstn:not([data-rendered=r])>div:last-child{float:right}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-alt-buttons>div>.sv_row>.sv_qstn:not([data-rendered=r])>div:last-child input[type=button]{background-color:#f14233;color:#fff!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-alt-buttons>div:nth-of-type(2)>.sv_row>.sv_qstn:not([className="*question"])>div:nth-of-type(2){text-align:right}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-alt-buttons>div:nth-of-type(2)>.sv_row>.sv_qstn:not([className="*question"])>div:nth-of-type(2) input[type=button]{background-color:#f14233;color:#fff!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-bottom-right-remove-button>div:nth-of-type(2)>.sv_row>.sv_qstn:not([className="*question"])>div:nth-of-type(2){text-align:right}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-bottom-right-remove-button>div:nth-of-type(2)>.sv_row>.sv_qstn:not([className="*question"])>div:nth-of-type(2) input[type=button]{background-color:#f14233;color:#fff!important;position:absolute;right:2rem;bottom:2rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-alt-buttons>div:nth-of-type(2)>.sv_panel_dynamic{float:left}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-button-tertiary-color input[type=button]{font-family:Circular Book,Inter,Arial;min-height:auto;padding-left:1em;padding-right:1em;border-radius:5px;border:1px solid #d3d3d3;color:#fff!important;font-size:1.5em;line-height:1.5em;min-height:calc(2em + 1px);background-color:#001433}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-button-tertiary-color input[type=button]{font-size:1.75em;line-height:1.7em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-button-tertiary-color input[type=button]{font-size:2em}}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-border-tertiary-color{border:1px solid #001433;border-radius:5px}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager).paneldynamic-padded .sv_row>.sv_qstn>div:nth-child(2)>input[type=button]{margin-top:3rem!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav{padding:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav input[type=button]{background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:inherit!important;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav input[type=button].sv_complete_btn,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav input[type=button].sv_next_btn,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav input[type=button].sv_start_btn{float:right}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav input[type=button].sv_prev_btn{background-color:#001433;color:#fff!important;float:left}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q:not(.campaignHtml):not(.underwriting):not(.fileManager) .sv_nav input[type=button][disabled]{background-color:#eceeef;color:#001433!important;cursor:not-allowed}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .sv_q_description{margin-top:0;margin-bottom:1rem;font-size:1.1rem;line-height:1.4rem}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles) .e-clipboard{display:none}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_p_root .sv_row:not(.no-questionnaire-styles).single-row-comment-cells .sv_q.sv_qstn textarea:not(.RDL-uploadedItem-input){height:37.4px!important;resize:both!important}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav{padding:1em}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav input[type=button]{background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:inherit!important;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav input[type=button].sv_complete_btn,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav input[type=button].sv_next_btn,.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav input[type=button].sv_start_btn{float:right}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav input[type=button].sv_prev_btn{background-color:#001433;color:#fff!important;float:left}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .sv_nav input[type=button][disabled]{background-color:#eceeef;color:#001433!important;cursor:not-allowed}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .tooltip{opacity:1;border:1px solid #001433;border-radius:5px}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_container .sv_body .tooltip .tooltip-inner{background-color:#fff;color:#001433;font-size:20px;max-width:100%}.questionnaire:not(.no-questionnaire-styles) .sv_main .sv_custom_header{background-color:rgba(0,0,0,0)}.questionnaire:not(.no-questionnaire-styles).questionnaire-full-width{padding:1em}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire-full-width{padding:1em 1em 3em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles).questionnaire-full-width{padding:1em 1em 3em}}@media (min-width:1200px){.questionnaire:not(.no-questionnaire-styles).questionnaire-full-width{padding:1em 4em 10em}}.questionnaire:not(.no-questionnaire-styles).questionnaire-full-width .sv_main .sv_container{max-width:1600px}.questionnaire:not(.no-questionnaire-styles).questionnaire-full-width .progress-bar-wrapper{max-width:1600px}.questionnaire:not(.no-questionnaire-styles).questionnaire-completedTerms{padding:1em 0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire-completedTerms .sv_main .sv_container{max-width:100%}.questionnaire:not(.no-questionnaire-styles).questionnaire-loan-status-overview .sv_main .sv_container{max-width:100%}.questionnaire:not(.no-questionnaire-styles).questionnaire-loan-status-overview .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q.loanStatusOverview{padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-loan-status-overview .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q.loanStatusOverview .page-title{padding-left:0;padding-bottom:0;margin-bottom:0;font-size:3em}.questionnaire:not(.no-questionnaire-styles).questionnaire-loan-status-overview .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q.loanStatusOverview hr{border-bottom:1px solid #e7e7e7}.questionnaire:not(.no-questionnaire-styles).questionnaire-invite .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text]{font-size:1.4em}.questionnaire:not(.no-questionnaire-styles).questionnaire-invite .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:1.4em;font-weight:400}.questionnaire:not(.no-questionnaire-styles).questionnaire-landing-page{padding:5em 2em 1em;z-index:1}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire-landing-page{padding:5em 3em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles).questionnaire-landing-page{padding:5em}}.questionnaire:not(.no-questionnaire-styles).questionnaire-landing-page .sv_main{background-color:#f7f7f7;border-radius:5px}.questionnaire:not(.no-questionnaire-styles).questionnaire-landing-page .landing-page-title{color:#001433;padding:2rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-deposit .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_matrix_dynamic tbody tr td{min-width:200px}.questionnaire:not(.no-questionnaire-styles).questionnaire-deposit .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q.payments td:first-child{display:none}.questionnaire:not(.no-questionnaire-styles).questionnaire-deposit .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root{overflow:hidden}.questionnaire:not(.no-questionnaire-styles).questionnaire-spreadsheet .sv_main button{padding:1px 7px 2px;cursor:default;min-width:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-spreadsheet .sv_main .sv_container .sv_body .sv_p_root table td,.questionnaire:not(.no-questionnaire-styles).questionnaire-spreadsheet .sv_main .sv_container .sv_body .sv_p_root table th{padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-spreadsheet .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input{font-size:1.3rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main button{padding:1px 7px 2px;cursor:default;min-width:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root table td,.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root table th{padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input{font-size:1.3rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main button{padding:1px 7px 2px;cursor:default;min-width:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main .sv_container .sv_body{padding-top:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main .sv_container .sv_body .sv_p_root table td,.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main .sv_container .sv_body .sv_p_root table th{padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main .sv_container .sv_body .sv_p_root .sv_q:not(.campaignHtml).questionnaireIntro{padding-top:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main .sv_container .sv_body .sv_p_root .sv_q:not(.campaignHtml).paymentInSchedule{padding-top:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-payment-in-schedule .sv_main .sv_container .sv_body .sv_p_root .sv_q:not(.campaignHtml) .page-title{font-size:3rem;color:#001433}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic .sv_q_title{font-size:1.5rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic input[value="Add New Process Status Rule"]{width:auto;color:#fff;margin:2em auto;display:block;background-color:#001433;font-size:1.2em;padding:.35rem 1rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic input[value*=Remove]{margin-top:5px;width:auto;color:#fff;margin-left:.75em;margin-bottom:1em;background-color:#f14233;font-size:1.2em;padding:.35rem 1rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic .dropdown-item input[type=text]{margin-top:.75em}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic .sv_p_container{border-top:1px solid #d3d3d3}.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic input[type=text],.questionnaire:not(.no-questionnaire-styles).questionnaire-configuration .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic select{font-size:1.3rem;min-height:calc(2em + 1px)}.questionnaire:not(.no-questionnaire-styles) .places-autocomplete-container{margin-top:2em;font-family:Circular Book,Inter,Arial;font-size:1.75em;line-height:1.25em}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .places-autocomplete-container{font-size:2em}}.questionnaire:not(.no-questionnaire-styles) .dropdown-menu{left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);top:60%}.questionnaire:not(.no-questionnaire-styles) .breadcrumb-dropdown{text-align:left}.questionnaire:not(.no-questionnaire-styles) .breadcrumb-dropdown .dropdown-menu{left:0;-webkit-transform:translate(0);-ms-transform:translate(0);transform:translate(0);top:2.5em}.questionnaire:not(.no-questionnaire-styles) .input-group-addon{font-family:Circular Book,Inter,Arial;font-size:1.5em;line-height:1em}@media (min-width:400px){.questionnaire:not(.no-questionnaire-styles) .input-group-addon{font-size:1.75em;line-height:1.25em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .input-group-addon{font-size:2em}}.questionnaire:not(.no-questionnaire-styles) iframe.contract{margin-top:-5.5em}.questionnaire:not(.no-questionnaire-styles) .contract-wrapper{min-height:88vh}.questionnaire:not(.no-questionnaire-styles) .repayment-schedule-wrapper{margin-top:2em;padding:0}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .repayment-schedule-wrapper{margin-top:0}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .repayment-schedule-wrapper.fixed-repayment-schedule{position:fixed;right:0;padding-left:.2em;padding-right:1em}}@media (min-width:1200px){.questionnaire:not(.no-questionnaire-styles) .repayment-schedule-wrapper.fixed-repayment-schedule{padding-left:.7em;padding-right:4em}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles) .repayment-schedule-wrapper.fluid-repayment-schedule{padding-top:300px}}.questionnaire:not(.no-questionnaire-styles) .repayment-schedule-wrapper .repaymentScheduleTable{background-color:#fff}.questionnaire:not(.no-questionnaire-styles) #iavContainer{padding:1em 0}.questionnaire:not(.no-questionnaire-styles) .yodlee-check-image{display:none}.questionnaire:not(.no-questionnaire-styles) .dragAndDropListBox ul li{height:66px;line-height:66px;font-weight:500;font-size:1.1rem;border-right-color:#001433;border-right-width:5px}.questionnaire:not(.no-questionnaire-styles) .dragAndDropListBox ul .e-list-item:hover:not(.e-disabled){border-right-color:#00a5fa;border-right-width:5px;color:#00a5fa}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body{padding:0 0 1em}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body{padding:1em 0}}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_row{border:none}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_row .signature-completed-message{padding-top:.75em;color:#001433;cursor:pointer}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.borrowerSignature,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.lenderSignature{padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.borrowerSignature .sv_q_title,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.lenderSignature .sv_q_title{display:none}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments{width:100%;padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config td,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td{min-width:300px;font-size:.7em;width:auto}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config td:first-child,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td:first-child{font-weight:700}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config td .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config td .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config td input[type=text],.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td .sv_q_dropdown_control,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td .sv_q_text_root,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td input[type=text]{font-size:1.2rem;font-weight:400}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config th,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments th{font-size:1rem}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.config .sv_q_footer,.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments .sv_q_footer{display:none}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td{min-width:250px}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.payments td .sv_q_text_root{overflow:auto}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q.selected{background-color:#00a5fa}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .sv_q ol{font-size:1.2rem;font-weight:400}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .custom_nav{padding:2em 0 1em}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .custom_nav .custom_left_btn{float:left;color:#fff;background-color:#001433;border-radius:5px;padding:.35rem 1rem;font-size:1.2em}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .custom_nav .custom_right_btn{float:right;background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .custom_nav .skip-btn{display:block;margin-top:1em}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .custom_nav .skip-btn{display:inline-block;margin-top:0}}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root .custom_nav .skip-btn:hover{color:#001433!important;background-color:rgba(0,0,0,0)!important;border:none}.questionnaire:not(.no-questionnaire-styles).questionnaire-custom .sv_main .sv_container .sv_body .sv_p_root+.sv_nav{display:none}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_nav input{color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:auto;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.external_anchor_button a{color:#208be1;background-color:rgba(0,0,0,0);text-decoration:none;font-weight:700}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_matrix_dynamic input.sv_q_text_root{font-size:1.2rem;font-weight:400}.questionnaire:not(.no-questionnaire-styles).questionnaire .read-only{background-color:#d3d3d3}.questionnaire:not(.no-questionnaire-styles).questionnaire .read-only .sv_q_text_root{background-color:#eceeef!important;color:#001433!important;cursor:not-allowed}.questionnaire:not(.no-questionnaire-styles).questionnaire .read-only .input-group-addon{background-color:#d3d3d3}.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-unordered-list{font-size:20px!important;font-weight:400;-webkit-padding-start:1em;padding-inline-start:1em;margin-left:1rem}.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-unordered-list li{padding-bottom:.5em}.questionnaire:not(.no-questionnaire-styles).questionnaire .list-bullets{list-style-type:circle}.questionnaire:not(.no-questionnaire-styles).questionnaire .list-numbers{list-style-type:decimal}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper:before{bottom:0;background-color:#00a5fa;z-index:1;pointer-events:none}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper{width:100%;position:relative;display:table}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-ddl.e-input-group .e-ddl-hidden{display:none!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-group.e-control-wrapper:not(.e-float-icon-left),.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-group:not(.e-float-icon-left){border:none!important;margin-bottom:0!important;line-height:inherit!important;min-height:calc(2em + 1px)}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-group.e-control-wrapper:not(.e-float-icon-left):before,.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-group.e-control-wrapper:not(.e-float-icon-left):after,.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .e-input-focus{background:none!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q.sv_qstn.tags thead{display:none}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q.sv_qstn.tags td{padding-left:0}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .sv_q.sv_qstn.tags input[type=button]{background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:auto}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-help-article{padding-top:2rem}}.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-payment,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-payment-in-schedule{padding:0}.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-payment-in-schedule .sv_main .sv_container,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-payment .sv_main .sv_container{max-width:100%}.questionnaire:not(.no-questionnaire-styles).questionnaire .breadcrumb-wrapper,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper{padding-left:0}.questionnaire:not(.no-questionnaire-styles).questionnaire .breadcrumb-wrapper .breadcrumb-item,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper .breadcrumb-item{background-color:rgba(0,0,0,0);font-size:1.1em}.questionnaire:not(.no-questionnaire-styles).questionnaire .breadcrumb-wrapper .breadcrumb-item:hover,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper .breadcrumb-item:hover{background-color:rgba(0,0,0,0)}.questionnaire:not(.no-questionnaire-styles).questionnaire .breadcrumb-wrapper .breadcrumb-item a,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper .breadcrumb-item a{color:#0093fb}.questionnaire:not(.no-questionnaire-styles).questionnaire .breadcrumb-wrapper .breadcrumb-item a:hover,.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper .breadcrumb-item a:hover{color:#001433}.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper{padding:1em 1em 0;margin-bottom:-1em}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper{padding:1em 3em 0}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper{padding:1em 10em 0}}@media (min-width:1200px){.questionnaire:not(.no-questionnaire-styles).questionnaire .questionnaire-breadcrumb-wrapper{padding:1em 10em 0}}.questionnaire:not(.no-questionnaire-styles).questionnaire .monitor-transaction{padding:2em;border-bottom:1px solid #d3d3d3;cursor:pointer}.questionnaire:not(.no-questionnaire-styles).questionnaire .monitor-transaction:hover{background-color:#d3d3d3;text-decoration:none}.questionnaire:not(.no-questionnaire-styles).questionnaire .monitor-transaction.selected{background-color:#d3d3d3;text-decoration:none}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main.sv_default_css hr.transaction-hr{border:1px solid #001433}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container{width:100%;min-width:1000px}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container .webix-spreadsheet{width:100%}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container .webix-filemanager{width:100%}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container .ssheet_list_sheets .webix_list_item div:first-child{max-width:none}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container .webix_el_segmented button{display:inline-block!important;line-height:normal!important;text-align:center!important;white-space:nowrap!important;vertical-align:baseline!important;cursor:pointer!important;-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;border:0 solid #1ca1c1!important;padding:0!important;font-size:16px!important;font-weight:500!important;min-width:0!important;border-radius:2px 0 2px 0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container .webix_fmanager_spec_icon button{display:inline-block!important;line-height:normal!important;text-align:center!important;white-space:nowrap!important;vertical-align:baseline!important;cursor:pointer!important;-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;border:0 solid #1ca1c1!important;padding:0!important;font-size:16px!important;font-weight:500!important;min-width:0!important;border-radius:2px 0 2px 0!important;background:#fff!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix-container td{padding:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix_menu .menu{position:relative;top:unset;bottom:unset;right:unset;min-height:0}.questionnaire:not(.no-questionnaire-styles).questionnaire .webix_clipbuffer,.questionnaire:not(.no-questionnaire-styles).questionnaire .webix_message.webix_error{display:none!important}.questionnaire:not(.no-questionnaire-styles).questionnaire [gcuielement=gcValidationButton]{font-size:0!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .survey-creator-container{width:100%}@media (min-width:601px){.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_q_matrix_dropdown tbody tr td{min-width:90px}}.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-time{font-size:18px}.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body{font-size:20px;font-weight:600}.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body .RDL-uploadedItem-input,.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body input[type=text]{width:90%!important;min-width:0;padding:0 1.25rem;font-size:1.1em!important}@media (min-width:768px){.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body .RDL-uploadedItem-input,.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body input[type=text]{width:75%!important}}@media (min-width:992px){.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body .RDL-uploadedItem-input,.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body input[type=text]{width:60%!important}}.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body .RDL-uploadedItem-button,.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body button{width:auto!important;min-width:0;padding:0 1.25rem;font-size:1.1em;margin:-.4rem 1rem 0 0}.questionnaire:not(.no-questionnaire-styles).questionnaire .RDL-uploadedItem-body .RDL-uploadedItem-edit{color:#00a5fa;margin-left:.4rem;margin-right:.7rem}.questionnaire:not(.no-questionnaire-styles).questionnaire .hide-matrix-dynamic-buttons .sv_matrix_dynamic_button{display:none!important}.questionnaire:not(.no-questionnaire-styles).questionnaire .readonly-inputs-as-text-only .sv_q_text_root{background-color:rgba(0,0,0,0)!important;border:none!important;padding-left:0!important;width:auto}.questionnaire:not(.no-questionnaire-styles).questionnaire .sv_main .sv_container .sv_body .sv_p_root .panel-smaller-display .sv_p_title{margin-top:.25em}.no-questionnaire-styles.questionnaire-custom{padding:1em}@media (min-width:768px){.no-questionnaire-styles.questionnaire-custom{padding:1em 3em 3em}}@media (min-width:992px){.no-questionnaire-styles.questionnaire-custom{padding:1em 10em 10em}}@media (min-width:1200px){.no-questionnaire-styles.questionnaire-custom{padding:1em 10em 10em}}.no-questionnaire-styles.questionnaire-custom .sv_page_title,.no-questionnaire-styles.questionnaire-custom .sv_q_title{font-weight:700;font-family:Circular Book,Inter,Arial;margin:.5em 0 1.1em;font-size:1.75em;line-height:1.15em;letter-spacing:-.03em;color:#001433}@media (min-width:400px){.no-questionnaire-styles.questionnaire-custom .sv_page_title,.no-questionnaire-styles.questionnaire-custom .sv_q_title{font-size:2em;line-height:1.3em;letter-spacing:-.01em}}@media (min-width:992px){.no-questionnaire-styles.questionnaire-custom .sv_page_title,.no-questionnaire-styles.questionnaire-custom .sv_q_title{margin-bottom:.75em;font-size:2.5em;line-height:1.3em}}.no-questionnaire-styles.questionnaire-custom .sv_nav{padding:1em}.no-questionnaire-styles.questionnaire-custom .sv_nav input[type=button]{background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:inherit!important;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.no-questionnaire-styles.questionnaire-custom .sv_nav input[type=button].sv_complete_btn,.no-questionnaire-styles.questionnaire-custom .sv_nav input[type=button].sv_next_btn,.no-questionnaire-styles.questionnaire-custom .sv_nav input[type=button].sv_start_btn{float:right}.no-questionnaire-styles.questionnaire-custom .sv_nav input[type=button].sv_prev_btn{background-color:#001433;color:#fff!important;float:left}.no-questionnaire-styles.questionnaire-custom .sv_nav input[type=button][disabled]{background-color:#eceeef;color:#001433!important;cursor:not-allowed}.no-questionnaire-styles.questionnaire-custom .custom_nav{padding:2em 0 1em}.no-questionnaire-styles.questionnaire-custom .custom_nav .custom_left_btn{float:left;color:#fff;background-color:#001433;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:auto;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.no-questionnaire-styles.questionnaire-custom .custom_nav .custom_right_btn{float:right;background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:auto;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.no-questionnaire-styles.questionnaire-custom .custom_nav .skip-btn{display:block;margin-top:1em}@media (min-width:768px){.no-questionnaire-styles.questionnaire-custom .custom_nav .skip-btn{display:inline-block;margin-top:0}}.no-questionnaire-styles.questionnaire-custom .custom_nav .skip-btn:hover{color:#001433!important;background-color:rgba(0,0,0,0)!important;border:none}.no-questionnaire-styles.questionnaire-custom .sv_p_root+.sv_nav{display:none}.no-questionnaire-styles.questionnaire-custom .progress-bar-wrapper{max-width:1600px;margin-top:2em}.no-questionnaire-styles.questionnaire-full-width{padding:1em}@media (min-width:768px){.no-questionnaire-styles.questionnaire-full-width{padding:1em 1em 3em}}@media (min-width:992px){.no-questionnaire-styles.questionnaire-full-width{padding:1em 1em 3em}}@media (min-width:1200px){.no-questionnaire-styles.questionnaire-full-width{padding:1em 4em 10em}}.no-questionnaire-styles.questionnaire-full-width .progress-bar-wrapper,.no-questionnaire-styles.questionnaire-full-width .sv_main .sv_container{max-width:1600px}.no-questionnaire-styles.sv_row button:hover{background-color:inherit!important;border-color:inherit!important;color:inherit!important}.no-questionnaire-styles.sv_row input:active,.no-questionnaire-styles.sv_row input:focus{border:inherit!important}.no-questionnaire-styles.sv_row th{line-height:normal!important;padding:0 .5rem!important;vertical-align:middle!important;font-weight:500!important}.questionnaire .sv_nav{padding:1em}.questionnaire .sv_nav input[type=button]{background-color:#00a5fa;color:#fff;border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:inherit!important;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer}.questionnaire .sv_nav input[type=button].sv_complete_btn,.questionnaire .sv_nav input[type=button].sv_next_btn,.questionnaire .sv_nav input[type=button].sv_start_btn{float:right}.questionnaire .sv_nav input[type=button].sv_prev_btn{background-color:#001433;color:#fff!important;float:left}.questionnaire .sv_nav input[type=button][disabled]{background-color:#eceeef;color:#001433!important;cursor:not-allowed}.questionnaire .sv_p_root+.sv_nav{display:none}.questionnaire .spreadjs-inspector .btn{background-color:inherit;color:#001433}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_page_title,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em}@media (min-width:992px){.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_page_title,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em}}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:1.5em;line-height:2em;height:auto;padding-top:0;padding-bottom:0}@media (min-width:400px){.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:1.75em;line-height:1.7em}}@media (min-width:992px){.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:2em}}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-ddl.e-input-group .e-ddl-hidden{display:none!important}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left),.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group:not(.e-float-icon-left){border:none!important;margin-bottom:0!important;line-height:inherit!important;min-height:calc(2em + 1px)}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):before,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):after,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-focus{background:none!important}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select{min-height:calc(2em + 1px)}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label{line-height:1em}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .input-group-addon{font-size:1.5em;line-height:1em}@media (min-width:400px){.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .input-group-addon{font-size:1.75em;line-height:1.25em}}.questionnaire.questionnaire-smaller-display .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .custom_nav{padding:1em 0}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_page_title,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em;font-weight:400!important}@media (min-width:992px){.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_page_title,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_title{font-size:1.75em;line-height:1.1em}}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:1.5em;line-height:2em;height:auto;padding-top:0;padding-bottom:0}@media (min-width:400px){.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:1.75em;line-height:1.7em}}@media (min-width:992px){.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q textarea{font-size:2em}}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-ddl.e-input-group .e-ddl-hidden{display:none!important}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left),.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group:not(.e-float-icon-left){border:none!important;margin-bottom:0!important;line-height:inherit!important;min-height:calc(2em + 1px)}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):before,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group.e-control-wrapper:not(.e-float-icon-left):after,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-group:not(.e-float-icon-left){background:none!important}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .e-input-focus{background:none!important}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .form-control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_dropdown_control,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_text_root,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q input[type=text],.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q select{min-height:calc(2em + 1px)}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_cw_pretty_checkbox_radiogroup label,.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_label{line-height:1em}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .input-group-addon{font-size:1.5em;line-height:1em}@media (min-width:400px){.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .input-group-addon{font-size:1.75em;line-height:1.25em}}.questionnaire.questionnaire-smaller-display-no-bold .sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .custom_nav{padding:1em 0}.questionnaire-side-padding{padding:1em}@media (min-width:768px){.questionnaire-side-padding{padding:1em 3em}}@media (min-width:992px){.questionnaire-side-padding{padding:1em 3em}}@media (min-width:1200px){.questionnaire-side-padding{padding:1em 10em}}.survey-tooltip{color:#fff;background-color:#5cb85c;border-radius:50%;padding:2.5px 7.5px;margin:0 0 0 5px;font-size:15px;cursor:pointer;height:15px;line-height:2em}.questionnaire-expression-question .sv_q div{line-height:2rem;min-height:2em}.questionnaire-expression-question .sv_q div:last-child{font-size:1.75rem;font-family:Circular Book,Inter,Arial;padding-top:.75rem;padding-bottom:.4rem}.esign-wrapper iframe{height:85vh;width:100%;border:1px solid #d3d3d3}.default-divider,.entry-hr{background-color:#001433;height:1px}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic .sv_row.sv-q-title-wrapper .sv_q_title{font-weight:700}.spreadjs-inspector .insp-container{height:95%}.sv_main .sv_container .sv_body .sv_p_root .sv_p_title.sv_p_title_expandable{font-size:1.25rem;border:1px solid grey;border-radius:5px;padding:.75rem;margin-bottom:1rem}.sv_main .sv_container .sv_body .added-panel-margin-bottom .sv_panel_dynamic .sv_p_container{margin-bottom:3.5rem}.spacer{padding:0!important;margin:0!important;line-height:0!important;height:0!important}.no-margin-top-first-radio-option.compact{margin-top:-2rem}.no-margin-top-first-radio-option .customCheckbox .form-check{margin-top:0!important}.compact-spacing-radio-options .customCheckbox .form-check{margin-top:.85rem!important}.questionnaire:not(.no-questionnaire-styles) .smaller-option-label .form-check-label{font-size:1.2rem}.full-height-textarea textarea{height:100vh!important}#formulabox,#positionbox{position:inherit;width:inherit;-webkit-box-sizing:inherit;box-sizing:inherit;font-size:16px;font-weight:400;line-height:inherit;padding-left:inherit}#positionbox{background-color:#f1f1f1!important}.nav-pills>li+li{border-left:inherit;line-height:inherit;height:inherit}.sv_main #statusBar{height:40px!important}.sv_main #statusBar .gc-statusbar{background-color:#000}.sv_main #statusBar .gc-statusbar-statusitem-container span{word-break:normal!important}.sv_main #cellTab input.editor,.sv_main #sheetTab input.editor,.sv_main #spreadTab input.editor{height:30px;width:100%}.questionnaire-underwriting .sv_container{max-width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:51vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:29vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:22vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:22vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting .spreadjs-inspector{position:absolute!important;top:0;left:0;right:0;bottom:0;padding:0;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting .spreadjs-sidebar-hidden .toolbar-right-section{display:none!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:nth-child(2)>td:first-child>table:first-child{position:absolute!important;top:0}@media (min-height:458px){.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:58vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:41vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:35vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:35vh!important}}@media (min-height:558px){.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:68vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:54vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:49vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:49vh!important}}@media (min-height:658px){.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:71vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:59vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:55vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:55vh!important}}@media (min-height:758px){.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:74vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:64vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:60vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:60vh!important}}@media (min-height:858px){.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:77vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:68vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:65vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:65vh!important}}@media (min-height:958px){.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting{height:81vh!important;min-height:auto!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#controlPanel{height:73vh!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ssvp{height:70vh!important;width:100%!important}.questionnaire-underwriting .sv_container .underwriting .fixed-underwriting div#ss>table>tr:first-child>td:first-child{height:70vh!important}}.questionnaire-underwriting .sv_container .underwriting .underwriting-save-btn{border-radius:5px;padding:.35rem 1rem;font-size:1.2em;width:auto;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer;color:#fff}.sv_default_css .btn,.sv_main button{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid rgba(0,0,0,0);padding:.5rem 1rem;font-size:1rem;border-radius:.25rem}.p-tag-relative-font p{font-size:1rem!important}.black-label label{color:#000!important}.relative-font label,.relative-td-size td span{font-size:1.2rem!important}.li-padding-indent li{padding-left:2.5rem!important}.li-relative-size li{font-size:1.2rem!important}.li-spacing li{padding-top:.5rem!important;padding-bottom:.5rem!important}.gray-default:hover{color:red}.sv_p_title_hidden .sv_p_title{display:none}.nav-left,.nav-left .sv_q{padding-left:0!important}.nav-left .sv_prev_btn{margin-right:1rem!important}.nav-left .sv_complete_btn,.nav-left .sv_next_btn{float:left!important}.no-padding-nested-rows .sv_row{padding:0!important}.no-padding-left-nested-rows .sv_row{padding-left:0!important}.no-padding-right-nested-rows .sv_row{padding-right:0!important}.no-padding-top-nested-rows .sv_row{padding-top:0!important}.no-padding-bottom-nested-rows .sv_row{padding-bottom:0!important}.no-padding-nested-questions .sv_q{padding:0!important}.no-padding-left-nested-questions .sv_q{padding-left:0!important}.no-padding-right-nested-questions .sv_q{padding-right:0!important}.no-padding-top-nested-questions .sv_q{padding-top:0!important}.no-padding-bottom-nested-questions .sv_q{padding-bottom:0!important}.mock-toggle-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:10px;padding:10px;background-color:#f8f9fa;border-radius:4px}.mock-toggle-switch{position:relative;display:inline-block;width:60px;height:34px;margin-right:10px}.mock-toggle-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s;border-radius:34px}.mock-toggle-slider.enabled{background-color:#2196f3}.mock-toggle-slider.enabled .mock-toggle-slider-button{-webkit-transform:translateX(26px);-ms-transform:translateX(26px);transform:translateX(26px)}.mock-toggle-slider-button{position:absolute;height:26px;width:26px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.4s;transition:.4s;border-radius:50%}.mock-toggle-input{opacity:0;width:0;height:0}.mock-toggle-text{margin:0;font-size:14px;color:#666}.sv_main.sv_default_css .sv_p_root>.sv_row:nth-child(odd){background-color:rgba(0,0,0,0)!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic td,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic th{padding:8px 12px!important;border:1px solid #e0e0e0!important;vertical-align:middle!important;height:35px!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic thead tr th{background-color:#f7f7f7;font-weight:600!important;font-size:1.1em!important;color:#333}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr:nth-child(2n){background-color:#fafafa}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td{font-size:1.1em!important;line-height:1.4!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td span{font-size:1.1em!important;line-height:1.4!important;display:block!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td .sv_q_text_root,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td input[type=text],.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td span{padding:6px 10px!important;width:100%!important;font-size:1em!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td .sv_q_text_root,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td input[type=text]{border:1px solid #ddd!important;border-radius:4px!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td .sv_q_text_root:focus,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td input[type=text]:focus{border-color:#80bdff!important;-webkit-box-shadow:0 0 0 .2rem rgba(0,123,255,.25)!important;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)!important;outline:none!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(2),.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(3),.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(4),.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(5){text-align:right!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(2) .sv_q_text_root,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(2) input[type=text],.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(3) .sv_q_text_root,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(3) input[type=text],.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(4) .sv_q_text_root,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(4) input[type=text],.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(5) .sv_q_text_root,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:nth-child(5) input[type=text]{text-align:right!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:first-child{text-align:left!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic tbody tr td:not(:first-child) span{padding-right:0!important;text-align:right!important}@media (max-width:768px){.matrix-dynamic-read-only-table .sv_q_matrix_dynamic{font-size:.9em!important}.matrix-dynamic-read-only-table .sv_q_matrix_dynamic td,.matrix-dynamic-read-only-table .sv_q_matrix_dynamic th{padding:6px 8px!important}}.matrix-dynamic-read-only-table .sv_matrix_dynamic_button{margin-top:12px!important;background-color:#00a5fa!important;border:none!important;padding:8px 16px!important;border-radius:4px!important;font-size:1em!important;font-weight:500!important}.matrix-dynamic-read-only-table .sv_matrix_dynamic_button:hover{background-color:#0083c7!important}.large-payment-link a{font-size:1.5rem!important;font-weight:400!important;color:#00a5fa!important;text-decoration:underline!important;display:inline-block!important;margin:1rem 0!important}.large-payment-link a:hover{color:#0083c7!important}.testimonial-section{padding:40px 0;position:relative}.testimonial-section .section-title{font-size:2.5rem!important;font-weight:700!important;color:#00465a!important;text-align:center;margin:30px 0}.testimonial-section .container{max-width:1200px;margin:0 auto;padding:0 20px}.testimonial-section .row{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.testimonial-section .testimonial-card{max-width:350px;margin:0 auto;position:relative;background:rgba(0,0,0,0);width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;min-height:430px}@media (max-width:768px){.testimonial-section .testimonial-card{max-width:300px}}@media (max-width:576px){.testimonial-section .testimonial-card{max-width:280px}}.testimonial-section .testimonial-image{position:relative;z-index:3}.testimonial-section .testimonial-image img{width:100%;height:180px;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;border-radius:60px 0 0 0/60px 0 0 0}.testimonial-section .testimonial-about{position:absolute;top:160px;background:#82d2e1;padding:10px 14px;border-radius:0 60px 0 0/0 60px 0 0;z-index:4;width:100%;height:70px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.testimonial-section .testimonial-about h3{font-size:1.25rem;font-weight:700}.testimonial-section .testimonial-about h3,.testimonial-section .testimonial-about span{color:#00465a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;line-height:1.2}.testimonial-section .testimonial-about span{font-size:1rem}.testimonial-section .testimonial-quote{position:relative;background:#6ea346;padding:60px 20px 25px 32px;border-radius:0 0 60px 0/0 0 60px 0;margin-top:-3px;margin-left:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1;flex:1;min-height:200px}.testimonial-section .testimonial-quote blockquote{font-size:1rem;font-weight:600;color:#052832;quotes:none;display:-webkit-box;-webkit-line-clamp:6;-webkit-box-orient:vertical;overflow:hidden}.testimonial-section .testimonial-quote .testimonial-link{color:#052832;text-decoration:none;font-size:.7rem;font-weight:600;display:inline-block;margin-top:auto}.testimonial-section .testimonial-quote .testimonial-link:hover{color:#0d6b86;text-decoration:underline}.questionnaire-list-table{table-layout:fixed;width:120%;min-width:100%;margin:0}.questionnaire-list-table td,.questionnaire-list-table th{min-width:0;word-wrap:break-word;word-break:break-word;white-space:normal;overflow-wrap:break-word;-webkit-box-sizing:border-box;box-sizing:border-box}.questionnaire-list-table td p,.questionnaire-list-table th p{margin:0;min-width:0;overflow:hidden;word-wrap:break-word;word-break:break-word;white-space:normal;overflow-wrap:break-word}.questionnaire-list-table td .btn{white-space:nowrap}.sv_row.questionnaire-xsmall-display .sv_q.parties_questionnaire_list,.sv_row.questionnaire-xsmall-display .sv_q[class*=approversQuestionnaireList]{width:100%;max-width:100%}.sv_row.questionnaire-xsmall-display .sv_q.parties_questionnaire_list>div,.sv_row.questionnaire-xsmall-display .sv_q[class*=approversQuestionnaireList]>div{width:100%;max-width:100%}.sv_body .sv_p_root .sv_row.questionnaire-xsmall-display:has(.questionnaire-list-table){width:calc(100% + 2em);max-width:calc(100% + 2em);-webkit-box-sizing:border-box;box-sizing:border-box}.sv_row .sv_q:has(.questionnaire-list-table){overflow:visible}.sv_row .sv_q:has(.questionnaire-list-table)>div{overflow:visible}@media (max-width:768px){nav.breadcrumb #lw-autosave-badge{display:none!important}}.dp-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.75)}.dp{position:relative;background:#fff;-webkit-box-shadow:2px 2px 16px rgba(0,0,0,.25);box-shadow:2px 2px 16px rgba(0,0,0,.25);line-height:1.4;border-radius:4px;max-height:400px;z-index:1000;padding-top:6px;overflow:hidden;-webkit-tap-highlight-color:transparent}.dp:before{content:" ";height:6px;position:absolute;top:0;left:0;right:0;background:#3b99fc;background:-webkit-gradient(linear,right top,left top,color-stop(0,#3b99fc),to(#8aefc8));background:linear-gradient(-90deg,#3b99fc,#8aefc8)}.dp-permanent .dp{padding-top:0;border:1px solid #eee;-webkit-box-shadow:none;box-shadow:none}.dp-permanent .dp:before{display:none}.dp-cal{min-height:300px}.dp-below{position:absolute}.dp-below,.dp-permanent{font-size:.8em;width:400px;max-width:100vw}.dp-permanent{position:relative}.dp-permanent .dp{z-index:0}.dp-modal .dp{position:absolute;top:50%;left:50%;max-width:600px;width:calc(100% - 4em);-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-animation:slide-up .3s forwards;animation:slide-up .3s forwards}.dp-months{padding:24px}.dp-years{-webkit-box-sizing:border-box;box-sizing:border-box;max-height:400px;padding:8px 0;overflow:auto!important}.dp-cal-month,.dp-cal-year,.dp-day,.dp-month,.dp-year{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;text-decoration:none;position:relative;color:#3b404d;border-radius:2px;border:0;background:rgba(0,0,0,0)}.dp-cal-header{position:relative;text-align:center;padding-bottom:16px;background:#f5f5f5}.dp-next,.dp-prev{position:absolute;width:30px;height:30px;overflow:hidden;top:14px;color:#777;border-radius:2px;border:0;background:rgba(0,0,0,0)}.dp-next:focus,.dp-next:hover,.dp-prev:focus,.dp-prev:hover{outline:0;color:inherit}.dp-prev{left:24px}.dp-next{right:24px}.dp-next:before,.dp-prev:before{content:"";border:2px solid;width:10px;height:10px;display:inline-block;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transition:border-color .2s;transition:border-color .2s;margin:9px 0 40px 4px}.dp-prev:before{border-right:0;border-bottom:0}.dp-next:before{border-left:0;border-top:0;margin-left:0;margin-right:4px}.dp-cal-month,.dp-cal-year{display:inline-block;font-size:1.4em;padding:16px 8px 8px;outline:0}.dp-cal-footer{text-align:center;background:#f5f5f5}.dp-day-today:after{content:"";height:0;width:0;border-color:#227bd7 #227bd7 rgba(0,0,0,0) rgba(0,0,0,0);border-style:solid;border-width:7px;position:absolute;top:0;right:0}.dp-clear,.dp-close,.dp-today{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;width:33%;padding:8px;text-decoration:none;color:inherit;border:0;background:rgba(0,0,0,0)}.dp-permanent .dp-clear,.dp-permanent .dp-close{display:none}.dp-cal-month:active,.dp-cal-year:active,.dp-clear:active,.dp-close:active,.dp-next:active,.dp-prev:active,.dp-today:active{background:#75bcfc;color:#fff}@media screen and (min-device-width:1200px){.dp-cal-month:focus,.dp-cal-month:hover,.dp-cal-year:focus,.dp-cal-year:hover,.dp-clear:focus,.dp-clear:hover,.dp-close:focus,.dp-close:hover,.dp-next:focus,.dp-next:hover,.dp-prev:focus,.dp-prev:hover,.dp-today:focus,.dp-today:hover{background:#75bcfc;color:#fff}}.dp-col-header,.dp-day{width:14.28571429%;display:inline-block;padding:8px;text-align:center}.dp-col-header{color:#aaa;text-transform:uppercase;font-weight:300;font-size:.8em;padding:8px 0}.dp-month{width:33%;display:inline-block;padding:8px}.dp-year{display:block;padding:8px 40px;width:100%}.dp-edge-day{color:#aaa}.dp-current,.dp-current:focus,.dp-day:focus,.dp-day:hover,.dp-month:focus,.dp-month:hover,.dp-year:focus,.dp-year:hover{outline:0;background:#75bcfc;color:#fff}.dp-selected,.dp-selected:focus,.dp-selected:hover{background:#3b99fc;color:#fff}.dp-day-disabled{background:rgba(0,0,0,0);color:#ddd}.dp-day-disabled:focus,.dp-day-disabled:hover{background:#ddd}.dp-focuser{position:absolute;z-index:0;top:50%;left:50%}@media (max-height:480px),(max-width:480px){.dp-modal .dp{font-size:.9em;width:auto;width:100%}.dp-day,.dp-day-of-week{padding:8px}}@-webkit-keyframes slide-up{0%{-webkit-transform:translate(-50%,100%);transform:translate(-50%,100%)}to{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}}@keyframes slide-up{0%{-webkit-transform:translate(-50%,100%);transform:translate(-50%,100%)}to{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}}.sv_window{position:fixed;bottom:3px;right:10px;background-color:#5f9ea0;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.sv_window_title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.sv_window_content{padding:8px;margin:0}.sv_window_title a,.sv_window_title a:link,.sv_window_title a:visited{text-decoration:none;font-size:14px;font-style:normal;color:#000}.sv_main.sv_frame .sv_container{max-width:80%;margin:auto;padding:0 1em}.sv_main.sv_frame .sv_container .sv_header{padding-top:5em;padding-bottom:1em}.sv_main{background-color:#f4f4f4}.sv_main hr{border-bottom:1px solid #e7e7e7}.sv_main button,.sv_main input[type=button]{color:#fff;background-color:#1ab394}.sv_main button:hover,.sv_main input[type=button]:hover{background-color:#179d82}.sv_main .sv_q_dropdown_control,.sv_main .sv_q_other input,.sv_main .sv_q_text_root,.sv_main input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]),.sv_main select,.sv_main textarea{border:1px solid #e7e7e7;color:#6d7072;background-color:#fff}.sv_main .sv_q_dropdown_control:focus,.sv_main .sv_q_other input:focus,.sv_main .sv_q_text_root:focus,.sv_main input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]):focus,.sv_main select:focus,.sv_main textarea:focus{border:1px solid #1ab394}.sv_main .sv_select_wrapper{background-color:#fff}.sv_main .sv_select_wrapper:before{background-color:#1ab394}.sv_main .sv_header{color:#6d7072}.sv_main .sv_custom_header{background-color:#e7e7e7}.sv_main .sv_container{color:#6d7072}.sv_main .sv_body{background-color:#fff;border-top:2px solid #1ab394}.sv_main .sv_progress{background-color:#e7e7e7}.sv_main .sv_progress_bar{background-color:#1ab394}.sv_main .sv_p_root>.sv_row{border-bottom:1px solid #e7e7e7}.sv_main .sv_p_root>.sv_row:nth-child(odd){background-color:#fff}.sv_main .sv_p_root>.sv_row:nth-child(2n){background-color:#f4f4f4}.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"]){border:1px solid #ed5565;background-color:#fcdfe2;color:#ed5565}.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"])+.sv_select_wrapper select,.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"])+input,.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"])+textarea{border:1px solid #ed5565}.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"])+.sv_select_wrapper select:focus,.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"])+input:focus,.sv_main .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"])+textarea:focus{outline:5px auto #ed5565}.sv_main table.sv_q_matrix_dropdown tr,.sv_main table.sv_q_matrix_dynamic tr,.sv_main table.sv_q_matrix tr{border-bottom:1px solid #e7e7e7}.sv_main .sv_q_m_cell_selected{color:#fff;background-color:#179d82}.sv_main .sv_q_rating_item.active .sv_q_rating_item_text{background-color:#179d82;border-color:#179d82;color:#fff}.sv_main .sv_q_rating_item .sv_q_rating_item_text{border:1px solid #e7e7e7}.sv_main .sv_q_rating_item .sv_q_rating_item_text:hover{border:1px solid #179d82}.sv_main .sv_q_imgsel.checked label>div{background-color:#1ab394}.sv_main .sv_q_file_remove:hover{color:#1ab394}.sv_main{position:relative;width:100%;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px}.sv_main hr{border:none}.sv_main button,.sv_main input[type=button]{font-size:.85em;font-weight:700;line-height:2em;border:none;min-width:100px;cursor:pointer;padding:0 2em;border-radius:2px}.sv_main .sv_custom_header{position:absolute;width:100%;height:74%;max-height:275px}.sv_main .sv_container{position:relative}.sv_main .sv_container .sv_header{padding:1em}.sv_main .sv_container .sv_header h3{font-size:2em;font-weight:300;text-align:left;margin:0}.sv_main .sv_container .sv_body{padding:1em 1em 1.6428em}.sv_main .sv_container .sv_body.sv_completed_page{text-align:center;padding:5em 1em}.sv_main .sv_container .sv_body.sv_completed_page>h3{margin:0;font-size:30px;font-weight:300}.sv_main .sv_container .sv_body .sv_progress{height:.3em}.sv_main .sv_container .sv_body .sv_progress .sv_progress_bar{height:100%;min-width:100px;position:relative;margin-top:2em}.sv_main .sv_container .sv_body .sv_progress .sv_progress_bar>span{position:absolute;top:-1.5em;display:inline-block;white-space:nowrap}.sv_main .sv_container .sv_body .sv_p_root .sv_page_title{font-size:1em;margin-top:.1em;font-weight:400}.sv_main .sv_container .sv_body .sv_p_root .sv_p_title{font-weight:700;font-size:1.15em;margin:1.5em 0 0}.sv_main .sv_container .sv_body .sv_p_root>.sv_row{padding:0}.sv_main .sv_container .sv_body .sv_p_root .sv_q_title{font-weight:700;font-size:1em;margin:.5em 0}.sv_main .sv_container .sv_body .sv_p_root .sv_q_description{margin-top:-.6em;min-height:.6em}.sv_main .sv_container .sv_body .sv_p_root .sv_q_flow .sv_q_checkbox_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_q_flow .sv_q_imagepicker_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_q_flow .sv_q_radiogroup_inline{line-height:2em;display:inline-block}.sv_main .sv_container .sv_body .sv_p_root .sv_q{padding:.5em 1em 1.5em;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_panel_dynamic .sv_q_title{font-weight:400}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_erbox:not([style*="display: none"]):not([style*="display:none"]){margin:1em 0;padding:1em}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_dropdown_control,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_other input,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_text_root,.sv_main .sv_container .sv_body .sv_p_root .sv_q input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]),.sv_main .sv_container .sv_body .sv_p_root .sv_q select,.sv_main .sv_container .sv_body .sv_p_root .sv_q textarea{position:relative;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1em;line-height:2em;padding-left:1em}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_dropdown_control:focus,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_other input:focus,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_text_root:focus,.sv_main .sv_container .sv_body .sv_p_root .sv_q input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]):focus,.sv_main .sv_container .sv_body .sv_p_root .sv_q select:focus,.sv_main .sv_container .sv_body .sv_p_root .sv_q textarea:focus{outline:none}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_dropdown_control,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_other input,.sv_main .sv_container .sv_body .sv_p_root .sv_q input:not([type=button]):not([type=reset]):not([type=submit]):not([type=image]):not([type=checkbox]):not([type=radio]),.sv_main .sv_container .sv_body .sv_p_root .sv_q select{height:calc(2em + 1px)}.sv_main .sv_container .sv_body .sv_p_root .sv_q div.sv_q_dropdown_control,.sv_main .sv_container .sv_body .sv_p_root .sv_q div.sv_q_text_root{min-height:2.43em;min-width:7em}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper{width:100%;position:relative;display:inline-block}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper select{display:block;background:rgba(0,0,0,0);appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:2.5em}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper select::-ms-expand{display:none}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper:before{padding:1em;position:absolute;right:1px;right:0;top:1px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNCAzNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEyIDE2bDItMiAzIDMgMy0zIDIgMi01IDV6Ii8+PC9zdmc+);content:"";background-repeat:no-repeat;background-position:50%}.sv_main .sv_container .sv_body .sv_p_root .sv_q input[type=color]{min-height:2em;padding:0}.sv_main .sv_container .sv_body .sv_p_root .sv_q input[type=checkbox],.sv_main .sv_container .sv_body .sv_p_root .sv_q input[type=radio]{width:1.2em;height:1.2em;vertical-align:middle;font-size:1em;margin:-.1em .55em 0 0}.sv_main .sv_container .sv_body .sv_p_root .sv_q input[type=checkbox]:focus,.sv_main .sv_container .sv_body .sv_p_root .sv_q input[type=radio]:focus{outline:1px dotted #1ab394}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_checkbox.sv_q_checkbox_inline:not(:last-child),.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_imgsel.sv_q_imagepicker_inline:not(:last-child),.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_radiogroup.sv_q_radiogroup_inline:not(:last-child){margin-right:1.5em}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_imgsel label>div{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:4px;border:1px solid #d3d3d3;border-radius:4px}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_imgsel label>div>img{display:block;pointer-events:none;position:relative}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_radiogroup_clear{margin-top:.5em}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_checkbox_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_imagepicker_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_radiogroup_inline{line-height:2em;display:inline-block}.sv_main .sv_container .sv_body .sv_p_root .sv_q .sv_q_footer{padding:1em 0}.sv_main .sv_container .sv_body .sv_p_root table{width:100%;border-collapse:collapse}.sv_main .sv_container .sv_body .sv_p_root table.sv_q_matrix .sv_matrix_dynamic_button,.sv_main .sv_container .sv_body .sv_p_root table.sv_q_matrix_dropdown .sv_matrix_dynamic_button,.sv_main .sv_container .sv_body .sv_p_root table.sv_q_matrix_dynamic .sv_matrix_dynamic_button{padding:.3em 2em}@media (min-width:768px){.sv_main .sv_container .sv_body .sv_p_root table.sv_q_matrix td{min-width:10em}}.sv_main .sv_container .sv_body .sv_p_root table.sv_q_matrix td .sv_q_m_label{position:static;display:block;width:100%}.sv_main .sv_container .sv_body .sv_p_root table.sv_q_matrix_dropdown .sv_qcbc .sv_q_checkbox_control_label{margin-right:1.5em}.sv_main .sv_container .sv_body .sv_p_root table td,.sv_main .sv_container .sv_body .sv_p_root table th{text-align:left;padding:0 1em}.sv_main .sv_container .sv_body .sv_p_root table td{padding:.5em}.sv_main .sv_container .sv_body .sv_p_root table th{line-height:1.3em;padding:.5em;vertical-align:bottom;font-weight:700}.sv_main .sv_container .sv_body .sv_p_root fieldset.sv_qcbc{line-height:2em;padding-top:.1em}.sv_main .sv_container .sv_body .sv_p_root .sv_q_other{margin-left:1em}.sv_main .sv_container .sv_body .sv_p_root .sv_q_select_column{display:inline-block;vertical-align:top;min-width:10%}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating{line-height:2em}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_item{cursor:pointer;word-spacing:-.3em;font-weight:400;display:inline}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_item>*{word-spacing:normal}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_item>*{word-spacing:normal}}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_item .sv_q_rating_item_text{display:inline-block;min-width:2em;padding:0 .3em;margin-left:-1px;text-align:center}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_item:not(:first-child) .sv_q_rating_item_text:not(:hover){border-left-color:rgba(0,0,0,0)}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_min_text{margin-right:.5em}.sv_main .sv_container .sv_body .sv_p_root .sv_q_rating .sv_q_rating_max_text{margin-left:.5em}.sv_main .sv_container .sv_body .sv_nav{padding:1em 0;min-height:2em}.sv_main .sv_container .sv_body .sv_nav .sv_complete_btn,.sv_main .sv_container .sv_body .sv_nav .sv_next_btn,.sv_main .sv_container .sv_body .sv_nav .sv_start_btn{float:right}.sv_main .sv_container .sv_body .sv_nav .sv_prev_btn{float:left}@media (max-width:600px){.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn{display:block;width:100%!important}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .title-left,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn .title-left{float:none}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_checkbox_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_imagepicker_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q .sv_q_radiogroup_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn .sv_q_checkbox_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn .sv_q_imagepicker_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn .sv_q_radiogroup_inline,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dropdown,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dynamic,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dropdown,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dynamic{display:block}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dropdown thead,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dynamic thead,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix thead,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dropdown thead,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dynamic thead,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix thead{display:none}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dropdown tbody,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dropdown td,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dropdown tr,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dynamic tbody,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dynamic td,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dynamic tr,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix tbody,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix td,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix tr,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dropdown tbody,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dropdown td,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dropdown tr,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dynamic tbody,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dynamic td,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dynamic tr,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix tbody,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix td,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix tr{display:block}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dropdown td:before,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix_dynamic td:before,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dropdown td:before,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix_dynamic td:before{content:attr(headers)}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix td label.sv_q_m_label,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix td label.sv_q_m_label{display:inline}.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_qstn table.sv_q_matrix td:after,.sv_main .sv_container .sv_body .sv_p_root .sv_row .sv_q table.sv_q_matrix td:after{content:attr(headers)}}.ReactTable{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid rgba(0,0,0,.1)}.ReactTable *{-webkit-box-sizing:border-box;box-sizing:border-box}.ReactTable .rt-table{-ms-flex:auto 1;flex:auto 1;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%;border-collapse:collapse;overflow:auto}.ReactTable .rt-table,.ReactTable .rt-thead{-webkit-box-flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal}.ReactTable .rt-thead{-ms-flex:1 0 auto;flex:1 0 auto;-ms-flex-direction:column;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ReactTable .rt-thead.-headerGroups{background:rgba(0,0,0,.03)}.ReactTable .rt-thead.-filters,.ReactTable .rt-thead.-headerGroups{border-bottom:1px solid rgba(0,0,0,.05)}.ReactTable .rt-thead.-filters input,.ReactTable .rt-thead.-filters select{border:1px solid rgba(0,0,0,.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:400;outline-width:0}.ReactTable .rt-thead.-filters .rt-th{border-right:1px solid rgba(0,0,0,.02)}.ReactTable .rt-thead.-header{-webkit-box-shadow:0 2px 15px 0 rgba(0,0,0,.15);box-shadow:0 2px 15px 0 rgba(0,0,0,.15)}.ReactTable .rt-thead .rt-tr{text-align:center}.ReactTable .rt-thead .rt-td,.ReactTable .rt-thead .rt-th{padding:5px;line-height:normal;position:relative;border-right:1px solid rgba(0,0,0,.05);-webkit-transition:-webkit-box-shadow .3s cubic-bezier(.175,.885,.32,1.275);transition:-webkit-box-shadow .3s cubic-bezier(.175,.885,.32,1.275);transition:box-shadow .3s cubic-bezier(.175,.885,.32,1.275);transition:box-shadow .3s cubic-bezier(.175,.885,.32,1.275),-webkit-box-shadow .3s cubic-bezier(.175,.885,.32,1.275);-webkit-box-shadow:inset 0 0 0 0 rgba(0,0,0,0);box-shadow:inset 0 0 0 0 rgba(0,0,0,0)}.ReactTable .rt-thead .rt-td.-sort-asc,.ReactTable .rt-thead .rt-th.-sort-asc{-webkit-box-shadow:inset 0 3px 0 0 rgba(0,0,0,.6);box-shadow:inset 0 3px 0 0 rgba(0,0,0,.6)}.ReactTable .rt-thead .rt-td.-sort-desc,.ReactTable .rt-thead .rt-th.-sort-desc{-webkit-box-shadow:inset 0 -3px 0 0 rgba(0,0,0,.6);box-shadow:inset 0 -3px 0 0 rgba(0,0,0,.6)}.ReactTable .rt-thead .rt-td.-cursor-pointer,.ReactTable .rt-thead .rt-th.-cursor-pointer{cursor:pointer}.ReactTable .rt-thead .rt-td:last-child,.ReactTable .rt-thead .rt-th:last-child{border-right:0}.ReactTable .rt-thead .rt-th:focus{outline-width:0}.ReactTable .rt-thead .rt-resizable-header{overflow:visible}.ReactTable .rt-thead .rt-resizable-header:last-child{overflow:hidden}.ReactTable .rt-thead .rt-resizable-header-content{overflow:hidden;text-overflow:ellipsis}.ReactTable .rt-thead .rt-header-pivot{border-right-color:#f7f7f7}.ReactTable .rt-thead .rt-header-pivot:after,.ReactTable .rt-thead .rt-header-pivot:before{left:100%;top:50%;border:solid rgba(0,0,0,0);content:" ";height:0;width:0;position:absolute;pointer-events:none}.ReactTable .rt-thead .rt-header-pivot:after{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #fff;border-width:8px;margin-top:-8px}.ReactTable .rt-thead .rt-header-pivot:before{border-color:hsla(0,0%,40%,0) hsla(0,0%,40%,0) hsla(0,0%,40%,0) #f7f7f7;border-width:10px;margin-top:-10px}.ReactTable .rt-tbody{-webkit-box-flex:99999;-ms-flex:99999 1 auto;flex:99999 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:auto}.ReactTable .rt-tbody .rt-tr-group{border-bottom:1px solid rgba(0,0,0,.05)}.ReactTable .rt-tbody .rt-tr-group:last-child{border-bottom:0}.ReactTable .rt-tbody .rt-td{border-right:1px solid rgba(0,0,0,.02)}.ReactTable .rt-tbody .rt-td:last-child{border-right:0}.ReactTable .rt-tbody .rt-expandable{cursor:pointer;text-overflow:clip}.ReactTable .rt-tr-group{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.ReactTable .rt-tr{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ReactTable .rt-td,.ReactTable .rt-th{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0;white-space:nowrap;text-overflow:ellipsis;padding:7px 5px;overflow:hidden;-webkit-transition:.3s ease;transition:.3s ease;-webkit-transition-property:width,min-width,padding,opacity;transition-property:width,min-width,padding,opacity}.ReactTable .rt-td.-hidden,.ReactTable .rt-th.-hidden{width:0!important;min-width:0!important;padding:0!important;border:0!important;opacity:0!important}.ReactTable .rt-expander{display:inline-block;position:relative;color:rgba(0,0,0,0);margin:0 10px}.ReactTable .rt-expander:after{content:"";position:absolute;width:0;height:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%) rotate(-90deg);-ms-transform:translate(-50%,-50%) rotate(-90deg);transform:translate(-50%,-50%) rotate(-90deg);border-left:5.04px solid rgba(0,0,0,0);border-right:5.04px solid rgba(0,0,0,0);border-top:7px solid rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.175,.885,.32,1.275);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}.ReactTable .rt-expander.-open:after{-webkit-transform:translate(-50%,-50%) rotate(0);-ms-transform:translate(-50%,-50%) rotate(0);transform:translate(-50%,-50%) rotate(0)}.ReactTable .rt-resizer{display:inline-block;position:absolute;width:36px;top:0;bottom:0;right:-18px;cursor:col-resize;z-index:10}.ReactTable .rt-tfoot{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 0 15px 0 rgba(0,0,0,.15);box-shadow:0 0 15px 0 rgba(0,0,0,.15)}.ReactTable .rt-tfoot .rt-td{border-right:1px solid rgba(0,0,0,.05)}.ReactTable .rt-tfoot .rt-td:last-child{border-right:0}.ReactTable.-striped .rt-tr.-odd{background:rgba(0,0,0,.03)}.ReactTable.-highlight .rt-tbody .rt-tr:not(.-padRow):hover{background:rgba(0,0,0,.05)}.ReactTable .-pagination{z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:3px;-webkit-box-shadow:0 0 15px 0 rgba(0,0,0,.1);box-shadow:0 0 15px 0 rgba(0,0,0,.1);border-top:2px solid rgba(0,0,0,.1)}.ReactTable .-pagination input,.ReactTable .-pagination select{border:1px solid rgba(0,0,0,.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:400;outline-width:0}.ReactTable .-pagination .-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;width:100%;height:100%;border:0;border-radius:3px;padding:6px;font-size:1em;color:rgba(0,0,0,.6);background:rgba(0,0,0,.1);-webkit-transition:all .1s ease;transition:all .1s ease;cursor:pointer;outline-width:0}.ReactTable .-pagination .-btn[disabled]{opacity:.5;cursor:default}.ReactTable .-pagination .-btn:not([disabled]):hover{background:rgba(0,0,0,.3);color:#fff}.ReactTable .-pagination .-next,.ReactTable .-pagination .-previous{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.ReactTable .-pagination .-center{-webkit-box-flex:1.5;-ms-flex:1.5;flex:1.5;text-align:center;margin-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ReactTable .-pagination .-pageInfo{display:inline-block;margin:3px 10px;white-space:nowrap}.ReactTable .-pagination .-pageJump{display:inline-block}.ReactTable .-pagination .-pageJump input{width:70px;text-align:center}.ReactTable .-pagination .-pageSizeOptions{margin:3px 10px}.ReactTable .rt-noData{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:1;padding:20px;color:rgba(0,0,0,.5)}.ReactTable .-loading,.ReactTable .rt-noData{display:block;position:absolute;background:hsla(0,0%,100%,.8);-webkit-transition:all .3s ease;transition:all .3s ease;pointer-events:none}.ReactTable .-loading{left:0;right:0;top:0;bottom:0;z-index:-1;opacity:0}.ReactTable .-loading>div{position:absolute;display:block;text-align:center;width:100%;top:50%;left:0;font-size:15px;color:rgba(0,0,0,.6);-webkit-transform:translateY(-52%);-ms-transform:translateY(-52%);transform:translateY(-52%);-webkit-transition:all .3s cubic-bezier(.25,.46,.45,.94);transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ReactTable .-loading.-active{opacity:1;z-index:2;pointer-events:all}.ReactTable .-loading.-active>div{-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.ReactTable .rt-resizing .rt-td,.ReactTable .rt-resizing .rt-th{-webkit-transition:none!important;transition:none!important;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.activity-timeline h5.card-title{font-weight:700;font-size:1.1rem;color:#1a2233}.activity-timeline .small{font-weight:500}.activity-timeline .small,.activity-timeline .text-body.small{font-size:.75rem;color:#5a5a5a}body{font:16px Circular Book,Inter,Arial,Helvetica,sans-serif!important;line-height:1.4em;color:#001433;min-height:1000px;margin:0 auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:300}.col-xxl-1,.col-xxl-2,.col-xxl-3,.col-xxl-4,.col-xxl-5,.col-xxl-6,.col-xxl-7,.col-xxl-8,.col-xxl-9,.col-xxl-10,.col-xxl-11,.col-xxl-12,.col-xxxl-1,.col-xxxl-2,.col-xxxl-3,.col-xxxl-4,.col-xxxl-5,.col-xxxl-6,.col-xxxl-7,.col-xxxl-8,.col-xxxl-9,.col-xxxl-10,.col-xxxl-11,.col-xxxl-12,.col-xxxxl-1,.col-xxxxl-2,.col-xxxxl-3,.col-xxxxl-4,.col-xxxxl-5,.col-xxxxl-6,.col-xxxxl-7,.col-xxxxl-8,.col-xxxxl-9,.col-xxxxl-10,.col-xxxxl-11,.col-xxxxl-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1400px){.col-xxl-1{float:left;width:8.333333%}.col-xxl-2{float:left;width:16.666667%}.col-xxl-3{float:left;width:25%}.col-xxl-4{float:left;width:33.333333%}.col-xxl-5{float:left;width:41.666667%}.col-xxl-6{float:left;width:50%}.col-xxl-7{float:left;width:58.333333%}.col-xxl-8{float:left;width:66.666667%}.col-xxl-9{float:left;width:75%}.col-xxl-10{float:left;width:83.333333%}.col-xxl-11{float:left;width:91.666667%}.col-xxl-12{float:left;width:100%}.pull-xxl-0{right:auto}.pull-xxl-1{right:8.333333%}.pull-xxl-2{right:16.666667%}.pull-xxl-3{right:25%}.pull-xxl-4{right:33.333333%}.pull-xxl-5{right:41.666667%}.pull-xxl-6{right:50%}.pull-xxl-7{right:58.333333%}.pull-xxl-8{right:66.666667%}.pull-xxl-9{right:75%}.pull-xxl-10{right:83.333333%}.pull-xxl-11{right:91.666667%}.pull-xxl-12{right:100%}.push-xxl-0{left:auto}.push-xxl-1{left:8.333333%}.push-xxl-2{left:16.666667%}.push-xxl-3{left:25%}.push-xxl-4{left:33.333333%}.push-xxl-5{left:41.666667%}.push-xxl-6{left:50%}.push-xxl-7{left:58.333333%}.push-xxl-8{left:66.666667%}.push-xxl-9{left:75%}.push-xxl-10{left:83.333333%}.push-xxl-11{left:91.666667%}.push-xxl-12{left:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.333333%}.offset-xxl-2{margin-left:16.666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.333333%}.offset-xxl-5{margin-left:41.666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.333333%}.offset-xxl-8{margin-left:66.666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.333333%}.offset-xxl-11{margin-left:91.666667%}}@media (min-width:1800px){.col-xxxl-1{float:left;width:8.333333%}.col-xxxl-2{float:left;width:16.666667%}.col-xxxl-3{float:left;width:25%}.col-xxxl-4{float:left;width:33.333333%}.col-xxxl-5{float:left;width:41.666667%}.col-xxxl-6{float:left;width:50%}.col-xxxl-7{float:left;width:58.333333%}.col-xxxl-8{float:left;width:66.666667%}.col-xxxl-9{float:left;width:75%}.col-xxxl-10{float:left;width:83.333333%}.col-xxxl-11{float:left;width:91.666667%}.col-xxxl-12{float:left;width:100%}.pull-xxxl-0{right:auto}.pull-xxxl-1{right:8.333333%}.pull-xxxl-2{right:16.666667%}.pull-xxxl-3{right:25%}.pull-xxxl-4{right:33.333333%}.pull-xxxl-5{right:41.666667%}.pull-xxxl-6{right:50%}.pull-xxxl-7{right:58.333333%}.pull-xxxl-8{right:66.666667%}.pull-xxxl-9{right:75%}.pull-xxxl-10{right:83.333333%}.pull-xxxl-11{right:91.666667%}.pull-xxxl-12{right:100%}.push-xxxl-0{left:auto}.push-xxxl-1{left:8.333333%}.push-xxxl-2{left:16.666667%}.push-xxxl-3{left:25%}.push-xxxl-4{left:33.333333%}.push-xxxl-5{left:41.666667%}.push-xxxl-6{left:50%}.push-xxxl-7{left:58.333333%}.push-xxxl-8{left:66.666667%}.push-xxxl-9{left:75%}.push-xxxl-10{left:83.333333%}.push-xxxl-11{left:91.666667%}.push-xxxl-12{left:100%}.offset-xxxl-0{margin-left:0}.offset-xxxl-1{margin-left:8.333333%}.offset-xxxl-2{margin-left:16.666667%}.offset-xxxl-3{margin-left:25%}.offset-xxxl-4{margin-left:33.333333%}.offset-xxxl-5{margin-left:41.666667%}.offset-xxxl-6{margin-left:50%}.offset-xxxl-7{margin-left:58.333333%}.offset-xxxl-8{margin-left:66.666667%}.offset-xxxl-9{margin-left:75%}.offset-xxxl-10{margin-left:83.333333%}.offset-xxxl-11{margin-left:91.666667%}}@media (min-width:2400px){.col-xxxxl-1{float:left;width:8.333333%}.col-xxxxl-2{float:left;width:16.666667%}.col-xxxxl-3{float:left;width:25%}.col-xxxxl-4{float:left;width:33.333333%}.col-xxxxl-5{float:left;width:41.666667%}.col-xxxxl-6{float:left;width:50%}.col-xxxxl-7{float:left;width:58.333333%}.col-xxxxl-8{float:left;width:66.666667%}.col-xxxxl-9{float:left;width:75%}.col-xxxxl-10{float:left;width:83.333333%}.col-xxxxl-11{float:left;width:91.666667%}.col-xxxxl-12{float:left;width:100%}.pull-xxxxl-0{right:auto}.pull-xxxxl-1{right:8.333333%}.pull-xxxxl-2{right:16.666667%}.pull-xxxxl-3{right:25%}.pull-xxxxl-4{right:33.333333%}.pull-xxxxl-5{right:41.666667%}.pull-xxxxl-6{right:50%}.pull-xxxxl-7{right:58.333333%}.pull-xxxxl-8{right:66.666667%}.pull-xxxxl-9{right:75%}.pull-xxxxl-10{right:83.333333%}.pull-xxxxl-11{right:91.666667%}.pull-xxxxl-12{right:100%}.push-xxxxl-0{left:auto}.push-xxxxl-1{left:8.333333%}.push-xxxxl-2{left:16.666667%}.push-xxxxl-3{left:25%}.push-xxxxl-4{left:33.333333%}.push-xxxxl-5{left:41.666667%}.push-xxxxl-6{left:50%}.push-xxxxl-7{left:58.333333%}.push-xxxxl-8{left:66.666667%}.push-xxxxl-9{left:75%}.push-xxxxl-10{left:83.333333%}.push-xxxxl-11{left:91.666667%}.push-xxxxl-12{left:100%}.offset-xxxxl-0{margin-left:0}.offset-xxxxl-1{margin-left:8.333333%}.offset-xxxxl-2{margin-left:16.666667%}.offset-xxxxl-3{margin-left:25%}.offset-xxxxl-4{margin-left:33.333333%}.offset-xxxxl-5{margin-left:41.666667%}.offset-xxxxl-6{margin-left:50%}.offset-xxxxl-7{margin-left:58.333333%}.offset-xxxxl-8{margin-left:66.666667%}.offset-xxxxl-9{margin-left:75%}.offset-xxxxl-10{margin-left:83.333333%}.offset-xxxxl-11{margin-left:91.666667%}}@media (min-width:992px){.offset-lg-1-5{margin-left:12.5%}}@media (min-width:1200px){.offset-xl-1-5{margin-left:12.5%}}@media (min-width:1400px){.offset-xxl-1{margin-left:8.333%}}@media (min-width:1400px){.offset-xxl-1-5{margin-left:12.5%}}@media (min-width:1400px){.offset-xxl-2{margin-left:16.667%}}table td,table th{width:auto}table td,table td p,table th,table th p{white-space:nowrap}.table{display:block;overflow:auto}@media (min-width:992px){.table{display:table}}.table .thead{display:table-header-group}.table .tbody{display:table-row-group}.table .tbody .tr.tr-hover:hover{background-color:#e6e6e6;text-decoration:none}.table .tr{display:table-row}.table .td,.table .th{display:table-cell;border-bottom:1px solid #d3d3d3;padding:.5em}#app{overflow:hidden}.btn,.sv_default_css .btn,.sv_main button{background-color:#00a5fa;color:#fff}.btn:active:focus,.btn:focus,.sv_default_css .btn:active:focus,.sv_default_css .btn:focus,.sv_main button:active:focus,.sv_main button:focus{outline:none!important}.btn:hover,.sv_default_css .btn:hover,.sv_main button:hover{background-color:#001433!important;border-color:#001433!important;color:#fff!important}.btn.btn-circle,.sv_default_css .btn.btn-circle,.sv_main button.btn-circle{border-radius:20px}.btn.btn-outline,.sv_default_css .btn.btn-outline,.sv_main button.btn-outline{background-color:rgba(0,0,0,0);border-color:#00a5fa;color:#00a5fa}.btn.btn-outline:hover,.sv_default_css .btn.btn-outline:hover,.sv_main button.btn-outline:hover{background-color:#00a5fa!important;border-color:#00a5fa!important}.btn.btn-outline-tertiary-color,.sv_default_css .btn.btn-outline-tertiary-color,.sv_main button.btn-outline-tertiary-color{background-color:rgba(0,0,0,0);border-color:#001433;color:#001433}.btn.btn-outline-tertiary-color:hover,.sv_default_css .btn.btn-outline-tertiary-color:hover,.sv_main button.btn-outline-tertiary-color:hover{background-color:#001433!important;border-color:#001433!important;color:#fff}.btn.btn-secondary-color,.sv_default_css .btn.btn-secondary-color,.sv_main button.btn-secondary-color{background-color:#ffb828;border-color:#ffb828;color:#000}.btn.btn-secondary-color:hover,.sv_default_css .btn.btn-secondary-color:hover,.sv_main button.btn-secondary-color:hover{background-color:#00a5fa!important;border-color:#00a5fa!important}.btn.btn-tertiary-color,.sv_default_css .btn.btn-tertiary-color,.sv_main button.btn-tertiary-color{background-color:#001433;border-color:#001433;color:#fff}.btn.btn-white-color,.sv_default_css .btn.btn-white-color,.sv_main button.btn-white-color{background-color:#fff;border-color:#fff;color:#000}.btn.btn-gray-color,.sv_default_css .btn.btn-gray-color,.sv_main button.btn-gray-color{background-color:#929292;border-color:#929292;color:#fff}.btn.btn-margin-left-sm,.sv_default_css .btn.btn-margin-left-sm,.sv_main button.btn-margin-left-sm{margin-left:.25em}.btn.btn-margin-right-sm,.sv_default_css .btn.btn-margin-right-sm,.sv_main button.btn-margin-right-sm{margin-right:.25em}.short-btn{min-width:150px}.active-display{display:block!important}a{color:#208be1}a:hover{cursor:pointer}p{font-size:1.2em;line-height:1.4em}td{padding:12px}.navbar-brand-text.color-main-color,h2.page-title,h5.color-main-color{color:#00a5fa!important}ol,ul{list-style:none}ol{counter-reset:auto;-webkit-padding-start:unset;padding-inline-start:unset}ol li{counter-increment:auto;padding:.75rem 0}ol li p{display:inline}ol li:before{content:counter(auto) ". ";font-weight:700;font-size:1.2rem}strong{font-weight:700}hr.thick-hr{border:1px solid #001433}hr.short-hr{width:100px;display:block;margin-left:auto;margin-right:auto;margin-top:2rem;background-color:#d3d3d3;height:1px}.color-main-color{color:#00a5fa!important}.color-secondary-color{color:#ffb828!important}.color-tertiary-color{color:#001433!important}.color-white-color{color:#fff!important}.color-red-color{color:red!important}.detailed-list{max-width:900px;margin:0 auto;font-size:1.2em;line-height:1.75em;text-align:center}.detailed-list h3{color:#fff}@media (min-width:768px){.detailed-list{text-align:left}}.inline{display:inline!important}.inline-apply-now{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;vertical-align:middle}.apply-now-button-text,.inline-apply-now{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.apply-now-button-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;font-size:inherit}.call-to-action-btn-apply-now{display:block;color:#00a5fa!important}@media (min-width:1275px){.call-to-action-btn-apply-now{display:inline;margin-left:3.5em;color:#fff!important}}.vertical-align-middle{vertical-align:middle}.text-align-left{text-align:left!important}.text-align-right{text-align:right!important}.text-align-center{text-align:center!important}.no-max-width{width:100%!important;max-width:none!important}.no-max-height{max-height:none!important}.min-height-90vh{min-height:90vh!important}.min-height-100vh{min-height:100vh!important}.max-height-60vh{max-height:60vh!important}.max-height-70vh{max-height:70vh!important}.max-height-80vh{max-height:80vh!important}.max-height-90vh{max-height:90vh!important}.max-height-100vh{max-height:100vh!important}.padding-top-0rem{padding-top:0!important}.padding-right-0rem{padding-right:0!important}.padding-bottom-0rem{padding-bottom:0!important}.padding-left-0rem{padding-left:0!important}.padding-top-1rem{padding-top:1rem!important}.padding-right-1rem{padding-right:1rem!important}.padding-bottom-1rem{padding-bottom:1rem!important}.padding-left-1rem{padding-left:1rem!important}.padding-top-2rem{padding-top:2rem!important}.padding-right-2rem{padding-right:2rem!important}.padding-bottom-2rem{padding-bottom:2rem!important}.padding-left-2rem{padding-left:2rem!important}.padding-top-3rem{padding-top:3rem!important}.padding-right-3rem{padding-right:3rem!important}.padding-bottom-3rem{padding-bottom:3rem!important}.padding-left-3rem{padding-left:3rem!important}.padding-top-4rem{padding-top:4rem!important}.padding-right-4rem{padding-right:4rem!important}.padding-bottom-4rem{padding-bottom:4rem!important}.padding-left-4rem{padding-left:4rem!important}.padding-top-5rem{padding-top:5rem!important}.padding-right-5rem{padding-right:5rem!important}.padding-bottom-5rem{padding-bottom:5rem!important}.padding-left-5rem{padding-left:5rem!important}.padding-top-6rem{padding-top:6rem!important}.padding-right-6rem{padding-right:6rem!important}.padding-bottom-6rem{padding-bottom:6rem!important}.padding-left-6rem{padding-left:6rem!important}.padding-top-7rem{padding-top:7rem!important}.padding-right-7rem{padding-right:7rem!important}.padding-bottom-7rem{padding-bottom:7rem!important}.padding-left-7rem{padding-left:7rem!important}.padding-top-8rem{padding-top:8rem!important}.padding-right-8rem{padding-right:8rem!important}.padding-bottom-8rem{padding-bottom:8rem!important}.padding-left-8rem{padding-left:8rem!important}.padding-top-9rem{padding-top:9rem!important}.padding-right-9rem{padding-right:9rem!important}.padding-bottom-9rem{padding-bottom:9rem!important}.padding-left-9rem{padding-left:9rem!important}.padding-top-10rem{padding-top:10rem!important}.padding-right-10rem{padding-right:10rem!important}.padding-bottom-10rem{padding-bottom:10rem!important}.padding-left-10rem{padding-left:10rem!important}.padding-top-11rem{padding-top:11rem!important}.padding-right-11rem{padding-right:11rem!important}.padding-bottom-11rem{padding-bottom:11rem!important}.padding-left-11rem{padding-left:11rem!important}.padding-top-12rem{padding-top:12rem!important}.padding-right-12rem{padding-right:12rem!important}.padding-bottom-12rem{padding-bottom:12rem!important}.padding-left-12rem{padding-left:12rem!important}.padding-top-13rem{padding-top:13rem!important}.padding-right-13rem{padding-right:13rem!important}.padding-bottom-13rem{padding-bottom:13rem!important}.padding-left-13rem{padding-left:13rem!important}.padding-top-14rem{padding-top:14rem!important}.padding-right-14rem{padding-right:14rem!important}.padding-bottom-14rem{padding-bottom:14rem!important}.padding-left-14rem{padding-left:14rem!important}.padding-top-15rem{padding-top:15rem!important}.padding-right-15rem{padding-right:15rem!important}.padding-bottom-15rem{padding-bottom:15rem!important}.padding-left-15rem{padding-left:15rem!important}.padding-top-16rem{padding-top:16rem!important}.padding-right-16rem{padding-right:16rem!important}.padding-bottom-16rem{padding-bottom:16rem!important}.padding-left-16rem{padding-left:16rem!important}.padding-top-17rem{padding-top:17rem!important}.padding-right-17rem{padding-right:17rem!important}.padding-bottom-17rem{padding-bottom:17rem!important}.padding-left-17rem{padding-left:17rem!important}.padding-top-18rem{padding-top:18rem!important}.padding-right-18rem{padding-right:18rem!important}.padding-bottom-18rem{padding-bottom:18rem!important}.padding-left-18rem{padding-left:18rem!important}.padding-top-19rem{padding-top:19rem!important}.padding-right-19rem{padding-right:19rem!important}.padding-bottom-19rem{padding-bottom:19rem!important}.padding-left-19rem{padding-left:19rem!important}.padding-top-20rem{padding-top:20rem!important}.padding-right-20rem{padding-right:20rem!important}.padding-bottom-20rem{padding-bottom:20rem!important}.padding-left-20rem{padding-left:20rem!important}.no-padding{padding:0!important}.no-padding-top{padding-top:0!important}.no-padding-left{padding-left:0!important}.no-padding-bottom{padding-bottom:0!important}@media (min-width:400px){.no-padding-left-sm-up{padding-left:0!important}}@media (min-width:768px){.no-padding-left-md-up{padding-left:0!important}}.no-padding-right{padding-right:0!important}@media (min-width:400px){.no-padding-right-sm-up{padding-right:0!important}}@media (min-width:768px){.no-padding-right-md-up{padding-right:0!important}}@media (max-width:400px){.no-padding-left-sm-down{padding-left:0!important}}@media (max-width:400px){.no-padding-right-sm-down{padding-right:0!important}}@media (max-width:768px){.no-padding-left-md-down{padding-left:0!important}}@media (max-width:768px){.no-padding-right-md-down{padding-right:0!important}}@media (max-width:992px){.no-padding-left-lg-down{padding-left:0!important}}@media (max-width:992px){.no-padding-right-lg-down{padding-right:0!important}}@media (max-width:768px){.no-padding-md-down{padding:0!important}}.no-margin{margin:0!important}.no-margin-bottom{margin-bottom:0!important}.no-margin-top{margin-top:0!important}.no-margin-left{margin-left:0!important}.no-margin-right{margin-right:0!important}.no-border{border:none!important}.no-boxshadow{-webkit-box-shadow:none!important;box-shadow:none!important}.hidden{display:none!important}.word-break-all{word-break:break-all}.italicize{font-style:italic!important}.overflow-visible{overflow:visible}.overflow-scroll-h{overflow-x:scroll}.overflow-scroll-v{overflow-y:scroll}.no-height{height:0!important}.no-width{width:0!important}@media (min-width:768px){.col-md-2-5{width:20.833333%}}@media (min-width:768px){.col-md-9-5{width:79.166667%}}@media (min-width:992px){.col-lg-3-5{width:29.166667%}}@media (min-width:992px){.col-lg-5-5{width:45.833333%}}@media (min-width:992px){.col-lg-6-5{width:54.1666667%}}@media (min-width:992px){.col-lg-8-5{width:70.833333%}}@media (min-width:1400px){.col-xxl-1{width:"8.3333333333%"}}@media (min-width:1400px){.col-xxl-2{width:"16.6666666667%"}}@media (min-width:1400px){.col-xxl-3{width:"25%"}}@media (min-width:1400px){.col-xxl-4{width:"33.3333333333%"}}@media (min-width:1400px){.col-xxl-5{width:"41.6666666667%"}}@media (min-width:1400px){.col-xxl-6{width:"50%"}}@media (min-width:1400px){.col-xxl-7{width:"58.3333333333%"}}@media (min-width:1400px){.col-xxl-8{width:"66.6666666667%"}}@media (min-width:1400px){.col-xxl-9{width:"75%"}}@media (min-width:1400px){.col-xxl-10{width:"83.3333333333%"}}@media (min-width:1400px){.col-xxl-11{width:"91.6666666667%"}}@media (min-width:1400px){.col-xxl-12{width:"100%"}}.clear-left{clear:left!important}.clear-right{clear:right!important}.clear-both{clear:both!important}.bolden{font-weight:700!important}.text-centered{text-align:center!important}.text-right{text-align:right!important}.element-centered{margin-left:auto;margin-right:auto;display:block}.capitalize{text-transform:capitalize!important}.lowercase{text-transform:lowercase!important}.uppercase{text-transform:uppercase!important}.underline{text-decoration:underline!important}.bg-transparent{background-color:rgba(0,0,0,0)!important}.cursor-not-allowed{cursor:not-allowed!important}.width-100{width:100%!important}.inline-block{display:inline-block!important}.alert-wrapper{padding:3em 1.75em;border-radius:15px;background-color:#00a5fa;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:none;text-align:center;color:#fff;z-index:2500000000!important;min-width:300px;-webkit-box-shadow:0 0 10px 5px #bdbdbd;-moz-box-shadow:0 0 10px 5px #bdbdbd;box-shadow:0 0 10px 5px #bdbdbd}@media (min-width:992px){.alert-wrapper{padding:3em}}.alert-wrapper.active{display:block}.alert-wrapper.alert-prompt{z-index:99999}.alert-wrapper.alert-light-background{background-color:#fff;color:#001433}.alert-wrapper.alert-big{width:90vw;height:90vh}.alert-wrapper.alert-big,.alert-wrapper.alert-medium{text-align:left;border-radius:7px;-webkit-box-shadow:0 0 200px 30px rgba(0,0,0,.25);box-shadow:0 0 200px 30px rgba(0,0,0,.25)}.alert-wrapper.alert-medium{width:40vw;height:100vh}.alert-wrapper.alert-fullscreen{text-align:left;border-radius:7px;width:100%;height:100%;max-height:100%;-webkit-box-shadow:0 0 200px 30px rgba(0,0,0,.25);box-shadow:0 0 200px 30px rgba(0,0,0,.25)}.alert-wrapper p{font-size:1.2rem}.alert-wrapper button{background-color:#fff;border-color:#fff;color:#001433}.alert-wrapper button:hover{background-color:#fff}.notification-wrapper{background-color:#001433;color:#fff;margin-bottom:0;padding:.5em}.notification-wrapper .prompt-close-btn{float:right;padding:.2em;z-index:10}.empty-validation-error{border:1px solid red!important}.empty-validation-message{color:red;font-weight:500;text-align:center;font-size:1.1em;margin-bottom:2em}.email-validation-message{margin-top:2em;margin-bottom:1em}.panel-border{border-style:double;border-color:#000}.auth0-lock.auth0-lock .auth0-lock-header-logo{width:80%;height:auto}.auth0-lock-tabs li a{color:rgba(92,102,111,.4)!important}.auth0-lock-tabs li.auth0-lock-tabs-current{-webkit-box-shadow:none!important;box-shadow:none!important;background:#001433!important}.auth0-lock-tabs li.auth0-lock-tabs-current a{color:#fff!important}.auth0-lock-header{height:auto!important}.auth0-lock-form div,.auth0-lock-form p{font-weight:400!important}.auth0-lock-form p{color:#000!important}.auth0-lock-form .auth0-lock-social-button-text{color:#fff!important;font-weight:600!important;font-size:.85em!important}.auth0-lock-form .auth0-lock-input{color:#000;font-weight:400}.auth0-label-submit{color:#fff;font-weight:400}.changingColor-appear.changingColor-appear-active{opacity:1;-webkit-transition:opacity .5s ease-in;transition:opacity .5s ease-in}.changingColor-appear{opacity:.1;-webkit-transition:opacity .5s ease-out;transition:opacity .5s ease-out}.auth0-lock.auth0-lock .auth0-lock-overlay{background:rgba(34,34,40,.94)}.adjacent-to-subtle-h1-tag,.subtle-h1-tag{font-size:1.2em;display:inline;margin-bottom:0;line-height:1.4em;color:#fff}.jumbotron{margin-bottom:0;background-color:#fff}.page-title{font-family:Circular Bold,Inter,Arial;font-weight:700;font-size:2.5em;color:#001433;letter-spacing:-3px}@media (min-width:400px){.page-title{font-size:2.75em}}@media (min-width:768px){.page-title{font-size:3em}}.page-title.tertiary{color:#001433}.circle-btn{border-radius:25px;height:45px;min-width:125px;text-transform:uppercase;font-size:.8em;font-weight:600;background:hsla(0,0%,100%,.85);color:#000}a.circle-btn{padding-top:1.2em}.full-height-header{height:530px}@media (min-width:768px){.full-height-header{height:107vh}}.logo{max-height:38px}.sv_q.sv_qstn.logo{max-height:110px;height:110px}.navbar{padding:.1em .5em}@media (min-width:544px){.navbar{border-radius:.25em}}@media (min-width:992px){.navbar{padding:.1em 6.25em}}.navbar .navbar-contents{padding:0 2em}.cursor-pointer{cursor:pointer}.navbar-clear .logo{max-height:38px}.navbar-clear .color-white{color:#fff}.navbar-clear .navbar-brand{color:#fff;vertical-align:middle}.navbar-clear .navbar-brand:hover{color:#fff}.navbar-clear .navbar-brand.dark,.navbar-clear .navbar-brand .logo-accent{color:#00a5fa}.navbar-clear .logged-in-wrapper{float:right;color:#fff;margin-top:1em;font-weight:700;padding-right:.25em;text-align:right;padding-bottom:1em;border-top:1px solid;padding-top:.75em}.navbar-clear .logged-in-wrapper:hover,.navbar-clear .logged-in-wrapper:visited{text-decoration:none}@media (min-width:768px){.navbar-clear .logged-in-wrapper{border-top:none;padding-bottom:0;padding-top:0;display:block!important}}.navbar-clear .logged-in-wrapper .btn{background-color:rgba(0,0,0,0);border:none}.navbar-clear .logged-in-wrapper .btn:hover{background-color:rgba(0,0,0,0)}.navbar-clear .logged-in-wrapper .nickname{color:#e2e2e2;display:none}@media (min-width:768px){.navbar-clear .logged-in-wrapper .nickname{display:inline}}.navbar-clear .logged-in-wrapper .dashboard-link{color:#001433}@media (min-width:768px){.navbar-clear .logged-in-wrapper .dashboard-link{color:#fff}}.navbar-clear .logged-in-wrapper .dashboard-link-white{color:#fff!important}.navbar-clear .logged-in-wrapper .translation-button-wrapper{float:left;color:#fff;margin-top:.45em;font-size:1em;border-radius:.25em;text-align:right;padding-bottom:1em;border-top:1px solid;padding-top:.75em}.navbar-clear .logged-in-wrapper .translation-button-wrapper:hover,.navbar-clear .logged-in-wrapper .translation-button-wrapper:visited{text-decoration:none}.navbar-clear .logged-in-wrapper .translation-button-wrapper .btn{background-color:#00a5fa;border:none}.navbar-clear .logged-in-wrapper .translation-button-wrapper .btn:hover{background-color:#00a5fa}@media (min-width:768px){.navbar-clear .logged-in-wrapper .translation-button-wrapper{border-top:none;padding-bottom:0;padding-top:0;display:block!important}}.underline-hover:hover{text-decoration:underline;-webkit-text-decoration-color:#208be1;text-decoration-color:#208be1}.navbar-light{background-color:#fff!important;border-bottom:1px solid #ececec}.navbar-light .logo{max-height:38px}.navbar-light .navbar-brand,.navbar-light .navbar-brand.dark,.navbar-light .navbar-brand:hover{color:#00a5fa}.navbar-light .navbar-brand .logo-accent{color:#001433}.navbar-light .logged-in-wrapper{float:right;color:#00a5fa;margin-top:1em;font-weight:700;text-align:right;padding-bottom:1em;border-top:1px solid;padding-top:.75em}.navbar-light .logged-in-wrapper:hover,.navbar-light .logged-in-wrapper:visited{text-decoration:none}@media (min-width:768px){.navbar-light .logged-in-wrapper{border-top:none;padding-bottom:0;padding-top:0;display:block!important}}.navbar-light .logged-in-wrapper .btn{background-color:rgba(0,0,0,0);border:none}.navbar-light .logged-in-wrapper .btn:hover{background-color:rgba(0,0,0,0);color:#fff}.navbar-light .logged-in-wrapper .btn .dashboard-link{color:inherit}.navbar-light .logged-in-wrapper .nickname{color:#b5b5b5;display:none}@media (min-width:768px){.navbar-light .logged-in-wrapper .nickname{display:inline}}.navbar-light .logged-in-wrapper .dashboard-link,.navbar-light .logged-in-wrapper .nav-items{color:#001433}.navbar-light .logged-in-wrapper .dashboard-link-white{color:#fff!important}.navbar-light .translation-button-wrapper{float:left;color:#fff;margin-top:.45em;font-size:1em;border-radius:.25em;text-align:right;padding-bottom:1em;border-top:1px solid;padding-top:.75em}.navbar-light .translation-button-wrapper:hover,.navbar-light .translation-button-wrapper:visited{text-decoration:none}.navbar-light .translation-button-wrapper .btn{background-color:#00a5fa;border:none}.navbar-light .translation-button-wrapper .btn:hover{background-color:#00a5fa}@media (min-width:768px){.navbar-light .translation-button-wrapper{border-top:none;padding-bottom:0;padding-top:0;display:block!important}}.login-button-wrapper{float:right;color:#fff;margin-top:.45em;font-size:1em;border-radius:.25em;text-align:right;padding-bottom:1em;border-top:1px solid;padding-top:.75em}.login-button-wrapper:hover,.login-button-wrapper:visited{text-decoration:none}@media (min-width:768px){.login-button-wrapper{border-top:none;padding-bottom:0;padding-top:0;display:block!important}}.translation-button-wrapper{float:left;color:#fff;margin-top:.45em;font-size:1em;border-radius:.25em;text-align:right;padding-bottom:1em;border-top:1px solid;padding-top:.75em}.translation-button-wrapper:hover,.translation-button-wrapper:visited{text-decoration:none}@media (min-width:768px){.translation-button-wrapper{border-top:none;padding-bottom:0;padding-top:0;display:block!important}}.navbar-brand{padding-top:.3em;padding-bottom:.3em;font-family:Circular Bold,Inter,Arial,sans-serif;font-size:1.9em;font-weight:700;color:#fff;float:left;margin-right:0}.navbar-brand:hover{color:#d3d3d3}.navbar-brand .navbar-brand-logoOnly{width:auto;display:inline-block;float:left;height:40px;cursor:pointer}.navbar-brand .navbar-brand-image{width:30px;display:inline-block;margin-top:.13em;float:left;cursor:pointer}.navbar-brand .navbar-brand-text{display:inline-block;font-family:Circular Bold,Inter,Arial;font-size:1em;letter-spacing:-.05em;float:left;line-height:1.2em;margin-bottom:0;margin-top:0}.navbar-brand.with-background{background:#00a5fa;-webkit-transition:background-color .25s linear;transition:background-color .25s linear;padding:0;font-size:2em;float:none}.navbar-separator{margin:0 .5em}.progress-tracker-wrapper{position:fixed;margin-top:56px;z-index:100;width:100%;padding:0}.progress-tracker-wrapper .progress-tracker{display:block;margin-left:auto;margin-right:auto;margin-bottom:0;padding:.5em;text-align:center}.progress-tracker-wrapper .progress-tracker li{display:inline-block;float:none}.progress-tracker-wrapper .progress-tracker li .nav-link{color:#001433;background-color:#fff;border-radius:25px}.progress-tracker-bkg-line{height:1px;background-color:grey;position:absolute;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);top:50%;left:50%;z-index:-1}.breadcrumb{padding:0;background-color:rgba(0,0,0,0);list-style:none;text-align:center;margin-bottom:0}.breadcrumb .circled-number{background-color:#001433;padding:.25em .5em;border-radius:25px}.breadcrumb-dropdown{text-align:center;margin-bottom:1em}.breadcrumb-dropdown.active .dropdown-menu{display:block;left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%)}.breadcrumb-dropdown.active .dropdown-menu .dropdown-item{padding:10px 20px;border-bottom:1px solid #ececec}.breadcrumb-dropdown.active .dropdown-menu .dropdown-item:last-child{border:none}.breadcrumb-dropdown.active .dropdown-menu .dropdown-item.active{background-color:#a9a9a9;color:grey}.breadcrumb-dropdown .dropdown-toggle{border:none;color:#fff}.breadcrumb-dropdown .dropdown-toggle:focus,.breadcrumb-dropdown .dropdown-toggle:visited{background-color:#00a5fa}.tooltip.persisted{opacity:1}.tooltip.persisted.breadcrumb-tooltip,.tooltip.persisted.breadcrumb-tooltip .tooltip-inner{text-align:center;margin-left:auto;margin-right:auto;position:relative}.tooltip.persisted.breadcrumb-tooltip .tooltip-inner{max-width:80%;background-color:#00a5fa}#exCollapsingNavbar{position:absolute;top:0;left:0;min-width:80%;min-height:100em;background-color:#000;color:#fff}.navbar-toggler-wrapper{padding-left:1em;margin-bottom:1em;min-height:40px}.navbar-toggler{color:#fff;background-color:#001433}.navbar-toggler i{margin-right:.75em}.hero-tucked{width:100%}.page-body{min-height:790px;background-color:#f7f7f7;overflow:auto}.page-body.with-top-margin{margin-top:50px}.page-body.with-top-margin .sidebar-logo-background{display:none}.page-body.with-top-margin .sidebar{padding-top:calc(5em - 50px)}.visit-link{text-transform:uppercase;padding:.75em 1.2em;background:#000;color:#fff;border-radius:50px;font-size:.75em;font-weight:400}.visit-link:hover{color:#d3d3d3;text-decoration:none}.footer{padding:2em 1em;background:#001433;color:#8b9197;position:relative}@media (min-width:768px){.footer{padding:3em 2em}}.footer a{color:inherit}.footer h1,.footer h6{color:#f1f1f1;font-size:inherit}.footer h1{font-size:2.5em}.footer h6{margin-bottom:1.5em}.footer hr{background-color:#8b9197;border:none;margin:2em 0}.footer p{margin-bottom:1em}.footer .btn{padding:.5em 1em;font-size:1em;border-radius:.25em}.footer .btn.test{margin-right:100px}.footer .btn-outline-secondary:hover{color:#000}.footer .footer-button-divider{margin:0 1em 2em;display:inline-block}@media (min-width:768px){.footer .footer-button-divider{margin-bottom:0}}.footer .links-wrapper{margin-top:3em}@media (min-width:768px){.footer .links-wrapper{margin-top:.75em}}.footer .icons-wrapper{text-align:center}@media (min-width:768px){.footer .icons-wrapper{text-align:right}}.footer .copyright-wrapper{text-align:center;margin-bottom:2em}@media (min-width:768px){.footer .copyright-wrapper{text-align:left}}.footer i{font-size:1.5em;margin-right:1em}@media (min-width:768px){.footer .call-to-action-wrapper{padding-right:3em}}@media (min-width:992px){.footer .call-to-action-wrapper{padding-right:1em}}.footer .call-to-action-button,.spinner-wrapper{background-color:#00a5fa}.spinner-wrapper{padding:4em;border-radius:15px;color:#fff;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:200000000000000;display:none}.spinner-wrapper.loading{display:block}.spinner-wrapper .spinner{height:100px;width:100px}.loading-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:199999999999999;display:none;pointer-events:auto;background-color:rgba(0,0,0,0)}.loading-overlay.loading{display:block}.help-message{font-size:.9em;color:grey;margin-top:1em}@media (min-width:768px){.help-message{margin-top:0}}.message-popup{padding:4em;border-radius:15px;background-color:#ffb828;position:fixed;max-height:100vh;max-width:500px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:none;z-index:10000;overflow:auto}.message-popup.visible{display:block}.message-popup .popup-dismiss-button{position:absolute;top:10px;left:15px;font-size:2em;color:#fff}.message-popup input{display:block;width:100%;border-radius:5px;border:1px solid #d3d3d3;font-size:2.25em;margin:1em 0;padding:.25em;text-align:center}.message-popup .donate-button{background-color:#00a5fa;width:100%;padding:.75em;font-size:1.25em}.message-popup .donate-button:hover{background-color:#fff!important}.message-popup .confirm-donation-button{display:none;width:100%;padding:.75em;font-size:1.25em;background-color:#fff;color:#00a5fa}.message-popup .confirm-donation-button.visible{display:block}.message-popup .confirm-donation-button:hover{background-color:#fff!important}.message-popup .agreement-signed-btn{display:none;width:100%;padding:.75em;font-size:1.25em;background-color:#fff;color:#00a5fa}.message-popup .agreement-signed-btn.visible{display:block}.message-popup .agreement-signed-btn:hover{background-color:#fff!important}.get-started-btn-wrapper{margin-top:2em;padding-left:0}.get-started-btn{float:left;font-size:1em;font-weight:400;text-transform:none;background-color:#00a5fa;border-color:#00a5fa;padding:0 1.75em;color:#fff}.gallery-item{padding-left:0;padding-right:0}@media (min-width:768px){.gallery-item{padding:auto}}.gallery-item:nth-child(2n) .img-wrapper .background-text{text-align:right}.gallery-item .text-wrapper{padding:2em 1em 1em;color:#4d4d4d}@media (min-width:992px){.gallery-item .text-wrapper{padding:0 1.75em 0 0}}@media (min-width:1200px){.gallery-item .text-wrapper{padding:0 2em}}.gallery-item .text-wrapper .text-wrapper-title{font-family:Circular Book,Inter,Arial;font-size:1.35em;line-height:1.5em;letter-spacing:-.02em;color:#001433}.gallery-item .text-wrapper hr{width:100px;display:inline-block;margin:0 0 .5em;height:1px}.gallery-item .text-wrapper .text-wrapper-text{line-height:1.6em}.gallery-item .img-wrapper{padding:0}@media (min-width:768px){.gallery-item .img-wrapper{padding:auto}}@media (min-width:992px){.gallery-item .img-wrapper+.text-wrapper{padding:0 0 0 1.75em}}@media (min-width:1200px){.gallery-item .img-wrapper+.text-wrapper{padding:0 0 0 3em}}.gallery-item .img-wrapper img{border:1px solid #d7d7d7;border-radius:8px;-webkit-box-shadow:10px 10px 51px -20px rgba(0,0,0,.75);box-shadow:10px 10px 51px -20px rgba(0,0,0,.75)}.gallery-item .img-wrapper .background-text{color:#e8e8e8;font-family:Circular Bold,Inter,Arial;font-weight:700;margin-top:-.15em;margin-bottom:-.25em;font-size:4em;letter-spacing:-.03em}@media (min-width:400px){.gallery-item .img-wrapper .background-text{font-size:5em}}@media (min-width:768px){.gallery-item .img-wrapper .background-text{font-size:7em}}@media (min-width:1200px){.gallery-item .img-wrapper .background-text{font-size:9em}}.gallery-item .img-wrapper+.text-wrapper{margin-top:2em}@media (min-width:768px){.gallery-item .img-wrapper+.text-wrapper{margin:auto}}.alt-general-container .container-title{color:#001433}.alt-general-container .text-wrapper{padding:2em 1em 1em;color:#4d4d4d}@media (min-width:992px){.alt-general-container .text-wrapper{padding:0 1.75em 0 0}}@media (min-width:1200px){.alt-general-container .text-wrapper{padding:0 2em}}.call-to-action{position:relative;text-align:center;overflow:hidden;padding:1em .5em;width:100%}@media (min-width:768px){.call-to-action{padding:4em 6em}}.call-to-action.condensed{padding:2em 2em 1.5em;border-bottom:1px solid #e8e8e8}.call-to-action.condensed h3{font-size:1.5rem}.call-to-action h3{font-weight:300;z-index:2;position:relative;margin-bottom:0}@media (max-width:1200px){.call-to-action h3{margin-left:0!important}}.call-to-action .diagonal{position:absolute;top:50%;left:48%;width:200px;height:800px;background-color:#00a5fa;-webkit-transform:rotate(40deg) translateY(-50%);-ms-transform:rotate(40deg) translateY(-50%);transform:rotate(40deg) translateY(-50%);z-index:1}.call-to-action .call-to-action-btn{display:block;color:#00a5fa!important;margin-top:1em}@media (min-width:1275px){.call-to-action .call-to-action-btn{display:inline;margin-left:3.5em;color:#fff!important}}.file-input{padding:2em;border:1px dashed #d2d2d2;background:#fff;cursor:pointer}#drift-widget-container{position:fixed;top:auto;left:auto;bottom:5px;right:5px;width:76px!important;height:76px!important}#drift-widget-container #drift-widget{bottom:5px!important;right:5px!important}.header-image-wrapper{border-radius:0;padding:5em 0;position:absolute;width:100%;top:0;height:auto!important}@media (min-width:768px){.header-image-wrapper{padding:7em 0}}.header-image-wrapper.home-header-image-wrapper{position:relative;height:140vh}@media (min-width:375px){.header-image-wrapper.home-header-image-wrapper{height:120vh}}@media (min-width:400px){.header-image-wrapper.home-header-image-wrapper{min-height:700px}}@media (min-width:768px){.header-image-wrapper.home-header-image-wrapper{min-height:650px}}.header-image-wrapper.landing-page-video-header-image-wrapper{position:relative;height:140vh;background-color:#f7f7f7}@media (min-width:375px){.header-image-wrapper.landing-page-video-header-image-wrapper{height:120vh}}@media (min-width:400px){.header-image-wrapper.landing-page-video-header-image-wrapper{height:550px}}@media (min-width:992px){.header-image-wrapper.landing-page-video-header-image-wrapper{height:600px}}@media (min-width:1200px){.header-image-wrapper.landing-page-video-header-image-wrapper{height:700px}}.header-image-wrapper .header-container{max-width:550px;color:#fff;padding:2em}.header-image-wrapper .header-container.centered{width:900px;padding-top:9em;text-align:center!important;margin-left:auto;margin-right:auto}.header-image-wrapper .header-container .header-container-title{color:#fff;font-family:Circular Book,Inter,Arial;font-weight:600;font-size:42px;line-height:1.2em;letter-spacing:-.02em}.header-image-wrapper .header-container .header-container-title.dark{color:#001433}.header-image-wrapper .header-container .header-container-subtitle{margin-bottom:.4em}.jumbotron-container-diagonal{width:900px;height:1200px;background-color:hsla(0,0%,100%,.5);position:absolute;top:-5em;left:-51em;-webkit-transform:rotate(43deg) translateY(-50%);-ms-transform:rotate(43deg) translateY(-50%);transform:rotate(43deg) translateY(-50%)}.container-title{text-align:center;color:#00a5fa;font-family:Circular Book,Inter,Arial;font-weight:600;font-size:1.75em;line-height:1.2em;letter-spacing:-.02em}.container-title.light{color:#fff}.container-title.dark{color:#001433}.general-container{padding-top:2.5em;padding-bottom:2.5em}.general-container hr{width:150px;display:block;height:1px;margin:1em auto 2em}.vaulted-container-wrapper{padding:0}@media (min-width:992px){.vaulted-container-wrapper{padding:7em 3em}}.vaulted-container-wrapper .header-container{max-width:550px;color:#fff;position:relative}.vaulted-container-wrapper .header-container.centered{max-width:900px;padding:8em 1em 1em;text-align:center!important;margin-left:auto;margin-right:auto}@media (min-width:768px){.vaulted-container-wrapper .header-container.centered{padding-top:3em}}.vaulted-container-wrapper .header-container .header-container-title{color:#fff;font-family:Circular Book,Inter,Arial;font-weight:600;font-size:42px;line-height:1.2em;letter-spacing:-.02em}.vaulted-container-wrapper .header-container .header-container-title.dark{color:#001433}.vaulted-container-wrapper .header-container .header-container-subtitle{margin-bottom:.4em}.vaulted-container-wrapper .vaulted-container{background-color:#fff;margin-bottom:3em;padding:1.5em 0;position:relative;min-height:200px}@media (min-width:992px){.vaulted-container-wrapper .vaulted-container{padding:1.5em 5em}}.vaulted-container-wrapper .vaulted-container.agreement-vaulted-container{padding:1.5em;border-radius:7px}@media (min-width:1200px){.vaulted-container-wrapper .vaulted-container.agreement-vaulted-container{padding:1.5em 2.5em 3em}}.vaulted-container-wrapper .vaulted-container .vaulted-container-title{text-align:center}.vaulted-container-wrapper .vaulted-container .vaulted-container-subtitle{text-align:center;margin-bottom:1.5em;max-width:600px;padding:0 1em;margin-left:auto;margin-right:auto}.general-container hr.agreement-hr{margin:6em auto 2em}@media (min-width:400px){.general-container hr.agreement-hr{margin:3.5em auto 2em}}@media (min-width:768px){.general-container hr.agreement-hr{margin:1em auto 2em}}.input-wrapper{margin-bottom:1em}.input-wrapper .input-group label{text-transform:uppercase;font-family:Circular Bold;font-size:1em;margin-bottom:.5em}.input-wrapper .input-group .input-help-text{font-size:.85em}.input-wrapper .input-group .input-help-text .weighted{font-weight:700;color:#00a5fa}.input-wrapper .input-group .form-control{border-radius:.25rem}.agreement-email-btn-wrapper .btn{margin-right:2em}.agreement-email-btn-wrapper .btn:last-child{margin-right:0}.agreement-email-btn-wrapper .btn.skip-btn{background-color:grey}.home hr{margin:1em auto}.subnav-wrapper{position:relative;height:40px;margin-top:-.5em;margin-bottom:2.5em}.subnav-wrapper .subnav.nav-pills .nav-item{float:none;display:inline-block;margin-bottom:1em}.subnav-wrapper .subnav.nav-pills .nav-item .nav-link{color:#001433;background-color:rgba(0,0,0,0)}.subnav-wrapper .subnav.nav-pills .nav-item .nav-link.active{background-color:#001433;color:#fff}.dashboard-layout-sidebar .subnav-wrapper{height:auto}.side-by-side-inputs{padding:0 .4em 0 0}.side-by-side-inputs:last-child{padding-right:0}.terms-call-to-action-text{text-align:center;font-size:1em}.repayment-schedule-calculator-btn{margin-top:1em;margin-bottom:1em;background-color:#001433;color:#fff}.dp-modal{z-index:10}.background-color-main,.background-color-main-color{background-color:#00a5fa!important;border-color:#00a5fa!important;color:#fff!important}.background-color-tertiary-color{background-color:#001433!important;color:#fff!important}.background-color-lightgray-color{background-color:#d3d3d3!important;color:#001433}.background-color-white-color{background-color:#fff!important}.background-color-inherit{background-color:inherit!important}.color-white{color:#fff!important}.dwolla-customer-form #PlacesAutocomplete__autocomplete-container{top:6.5em}#PlacesAutocomplete__autocomplete-container{position:absolute;top:4.5em;z-index:1000;width:100%;border-color:grey;background-color:#fff}body .history{padding-bottom:1em;margin-bottom:2em;border-bottom:1px solid #e8e8e8}body .history .date{text-align:center;color:#00a5fa;font-size:1em}body .history .author,body .history .message{font-size:1em}body .history .list-wrapper{padding-left:0}body .history .list-wrapper .list-wrapper-title-wrapper{margin-bottom:.75em}body .history .list-wrapper .list-wrapper-title-wrapper .list-wrapper-title{text-align:center;font-weight:700;color:#f14233;border-bottom:1px solid}body .history .list-wrapper .list-wrapper-title-wrapper .list-wrapper-title.after{color:#00ca95}body .history .list-wrapper .list{padding-left:0}body .history .list-wrapper .list li .term{text-transform:capitalize;font-weight:700}body .history .list-wrapper .list li p{font-size:1rem!important}body .history .amount{color:#00ca95;font-weight:700}.details{text-align:center}.details .detail{margin-bottom:2em;padding-bottom:2em;border-bottom:1px solid #e8e8e8}.details .detail:last-child{border-bottom:none}.details .detail .detail-title{font-size:1.2em;font-weight:700}.details .detail .detail-summary{font-size:1.1em;max-width:700px;margin-left:auto;margin-right:auto}.td.agreement-status{text-transform:capitalize}.agreement-status{margin-top:1.5em}.agreement-status span{text-transform:capitalize;border:1px solid #fff;padding:.5em .75em;border-radius:5px;display:inline-block}.agreement-section{text-align:center}.agreement-section-title{text-transform:capitalize;font-weight:700;font-size:1.2em}.agreement-section-summary{font-size:1.1em;max-width:700px;margin-left:auto;margin-right:auto;margin-bottom:1.5em}.agreement-overview-card{display:inline-block;width:100%}.agreement-overview-card.highlighted{border-radius:5px;padding:.75em 1em;background-color:rgba(0,0,0,0);-webkit-box-shadow:2px 2px 5px -6px rgba(0,0,0,.75);box-shadow:2px 2px 5px -6px rgba(0,0,0,.75)}.agreement-overview-card.highlighted.transparent{-webkit-box-shadow:none;box-shadow:none;border:none}.agreement-overview-card.highlighted p{font-size:1.2rem}.agreement-overview-card.highlighted .message{font-size:1.75rem;font-weight:700}.agreement-overview-card.highlighted .title{color:#001433;font-family:Circular Bold,Inter,Arial;font-weight:700;margin-top:-.35em;margin-bottom:-.1em;font-size:2em;letter-spacing:-5px}@media (min-width:400px){.agreement-overview-card.highlighted .title{font-size:2.5em}}@media (min-width:768px){.agreement-overview-card.highlighted .title{font-size:3em}}@media (min-width:1200px){.agreement-overview-card.highlighted .title{font-size:4em}}.agreement-summary-prose{max-width:800px}.auto-fill-btn{margin:0 auto 2.5em;display:block;background-color:#001433}.alert-error .btn{margin-right:1.5em}.alert-error .prompt-btn{background-color:#fff;color:#001433}.alert-error .prompt-close-btn{position:absolute;top:.6em;left:.6em;font-size:1.75em;z-index:10}.alert-prompt{overflow-y:auto;max-height:90%}.alert-prompt .btn{margin-right:1.5em}.alert-prompt .prompt-btn{background-color:#fff;color:#001433}.alert-prompt .prompt-close-btn{position:absolute;top:.6em;left:.6em;font-size:1.75em;z-index:10}.alert-prompt.alert-prompt-wide{overflow:auto}.button-wrapper{margin-bottom:1em}.button-wrapper:last-child{margin-bottom:0}.repayment-type-section .error-message{display:none}.repayment-type-section.empty-validation-error{padding:1em}.repayment-type-section.empty-validation-error .error-message{display:block;color:red}.card.selected,.card:hover{color:inherit!important}.card-title{font-weight:700;font-size:1.2em;text-align:center}.card-text{font-size:1.1em;max-width:700px;margin-left:auto;margin-right:auto;margin-bottom:1.5em}.uphold-link{color:#00a5fa}.uphold-logo,.uphold-secure{display:block;margin-left:auto;margin-right:auto}.uphold-logo-wrapper{margin-top:1.5em}.uphold-logo-wrapper .uphold-logo{max-width:200px;width:100%}.progress-completed-icon-wrapper{margin-top:-1em}.progress-completed-icon-wrapper .progress-completed-icon{max-width:450px;width:100%}.uphold-secure-wrapper{margin:1.5em 0}.uphold-secure-wrapper .uphold-secure{max-width:600px;width:100%}.pay-btn{color:#fff;width:125px}.input-group.pay-input-group{max-width:400px}.pay-btn-addon{color:#fff;background-color:#00a5fa;width:100px}.general-message-container{padding:3.5em 1em 1em}@media (min-width:768px){.general-message-container{padding-top:5em}}.general-message-wrapper{padding:1em}@media (min-width:768px){.general-message-wrapper{padding:2em}}@media (min-width:992px){.general-message-wrapper{padding:3em}}.general-message-wrapper h1{font-size:3.25rem}.authentication-title{max-width:400px}.authentication-page-container{padding:0}.authentication-page-container .header-image-wrapper{height:100vh}.sidebar-wrapper{height:auto;padding:0;position:relative;background-color:#f7f7f7}.sidebar-wrapper .sidebar-logo-background{position:fixed;background-color:#fff;height:55px;width:100%;border-bottom:1px solid #ececec}.sidebar-wrapper .sidebar{position:relative;width:100%;padding:5em 0 0;overflow:auto;z-index:1}.sidebar-wrapper .sidebar .step a{cursor:default}.sidebar-wrapper .sidebar .step a:focus,.sidebar-wrapper .sidebar .step a:hover,.sidebar-wrapper .sidebar .step a:visited{text-decoration:none}.sidebar-wrapper .sidebar .step .step-title{font-family:Circular Book,Inter,Arial;font-weight:600;font-size:1.5em;line-height:1.2em;letter-spacing:-.02em;color:#d3d3d3;padding:.5em 1em}.sidebar-wrapper .sidebar .step .step-title.clickable{cursor:pointer}.sidebar-wrapper .sidebar .step .step-title.clickable:hover{color:#00a5fa}.sidebar-wrapper .sidebar .step .step-description{display:none;font-size:1em;padding:1em 1.75em;word-wrap:break-word}.sidebar-wrapper .sidebar .step hr{margin:-.5em 1.75em}.sidebar-wrapper .sidebar .step.active{border-bottom:1px solid #ececec}.sidebar-wrapper .sidebar .step.active .step-title{color:#001433;background-color:#fff;border:1px solid #ececec}.sidebar-wrapper .sidebar .step.active .step-description{display:block}.sidebar-wrapper .sidebar .step.active hr{display:none}.sidebar-wrapper .sidebar .step.completed .step-title{color:#001433}.sidebar-wrapper .sidebar .step.current-step{border:1px solid rgba(0,20,50,.34)}.sidebar-wrapper .sidebar .step.current-step .current-step-label{margin-bottom:0;padding:.5em 0 0 1.2em}.sidebar-wrapper .sidebar .step.details-step{margin-top:3em}.sidebar-wrapper .sidebar .mobile-sidebar-list{padding:0}.sidebar-wrapper .sidebar .mobile-sidebar-list hr,.sidebar-wrapper .sidebar .mobile-sidebar-list li{display:none}.sidebar-wrapper .sidebar .mobile-sidebar-list.open hr,.sidebar-wrapper .sidebar .mobile-sidebar-list.open li,.sidebar-wrapper .sidebar .mobile-sidebar-list hr.active,.sidebar-wrapper .sidebar .mobile-sidebar-list li.active{display:block}.skip-btn{margin-right:2em}.uphold-steps{border-top:1px solid #ececec;padding:3em 0 0}.uphold-steps .uphold-step{padding-bottom:3em}.uphold-steps .uphold-step .uphold-step-number{font-size:3.5em;padding-top:.2em;text-align:right}.uphold-steps .uphold-step .uphold-step-description{font-size:1.1em;text-align:left}.uphold-steps .uphold-step .uphold-step-image{width:100%}.agreement-group-wrapper{padding-top:2em}.agreement-group-table-wrapper{overflow-x:auto;width:95%;padding-left:0;padding-bottom:10em}.agreement-group-table-wrapper .agreement-group-table .tr-wrapper{position:relative}.agreement-group-header-title{margin-bottom:1em;text-transform:capitalize;font-weight:700;font-size:1.2em}@media (min-width:768px){.agreement-group-header-title{display:inline-block;margin-bottom:2em}}.agreement-group-new-agreement-btn{display:block}@media (min-width:768px){.agreement-group-new-agreement-btn{display:inline-block;float:right}}.delete-single-agreement-in-group-btn-list{padding:3.4em 0 1em .75em;width:5%}.delete-single-agreement-in-group-btn{margin-bottom:2em;background-color:#ececec;border-radius:5px;padding:.6em .5em .5em;min-width:35px;text-align:center}.table .agreement-in-group-td{min-width:225px;vertical-align:middle;position:relative;padding:1em .5em}.table .agreement-in-group-td .form-group{margin-bottom:0}.agreement-edit-section{-webkit-box-shadow:0 0 7px 0 rgba(0,0,0,.1);box-shadow:0 0 7px 0 rgba(0,0,0,.1)}.partners-page{padding-top:2em}.partners-page .header{margin:1em auto 4em;max-width:900px}.partner-section,.partners-page .header .new-contract-title{text-align:center}.partner-section{margin-bottom:5em}.partner-section img{width:100%;margin-bottom:2em}.partner-section .btn{margin-top:1em}.partner-section h4{font-weight:700}.partner-section hr{width:100px}.partner-section p{text-align:left;margin-left:auto;margin-right:auto;max-width:900px}.dropdown-header{text-transform:capitalize}.homepage-dropdown-wrapper{padding:2.5em 0}.homepage-dropdown-wrapper .homepage-dropdown{margin-right:1.5em;margin-bottom:1em}.homepage-dropdown-wrapper .homepage-dropdown .btn{background-color:#fff;color:#000}.homepage-dropdown-wrapper .homepage-dropdown-start-btn{margin-bottom:1em}.dropdown-button-centered.btn-group{padding:2em 0;border-top:1px solid #ececec;width:100%}.dropdown-button-centered.btn-group .btn{margin-left:auto;margin-right:auto;display:block;float:none}.dropdown-button-centered.btn-group .dropdown-menu{left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);top:75%}.payments-table,.transactions-table{overflow-x:auto;display:block}.payments-table .td,.payments-table .th,.transactions-table .td,.transactions-table .th{border:1px solid #eaeaea}.payments-table .td.wide,.payments-table .th.wide,.transactions-table .td.wide,.transactions-table .th.wide{min-width:300px}.bank-account-icon-wrapper{margin-bottom:2.5em}.bank-account-icon-wrapper img{max-height:250px;max-width:100%;width:auto}@media (min-width:1200px){.bank-account-icon-wrapper{padding-right:2em}}.funding-source-detail p{font-size:1.1rem!important}.funding-source-detail .funding-source-detail-title{font-weight:700!important;font-size:1.6rem!important}.funding-source-detail hr{width:150px!important;margin-left:0!important}.funding-source-detail .funding-source-detail-subtitle{font-size:15px!important;font-weight:700!important;text-transform:uppercase!important;margin-bottom:.5rem!important}#startDateType{margin-bottom:1em}.iavContainerWrapper{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999999;background-color:hsla(0,0%,56.5%,.98)}#iavContainer{padding:1em}#iavContainer .list-search__section{display:none}.default-landing-page .table-wrapper{overflow:auto}.default-landing-page .table-wrapper .table{display:table;min-width:500px}.default-landing-page .image-wrapper{min-height:100vh;display:none}@media (min-width:768px){.default-landing-page .image-wrapper{display:block}}.default-landing-page .form-wrapper{background-color:#fff;min-height:100vh;padding:4.5em 2em 4em}@media (min-width:992px){.default-landing-page .form-wrapper{padding:5em 6em}}.default-landing-page .form-wrapper.bg-transparent{background-color:rgba(0,0,0,0)}.default-landing-page .form-wrapper .img-wrapper{margin-top:2em}.default-landing-page .step-title{color:#00a5fa;font-family:Circular Book,Inter,Arial;font-weight:600;font-size:1.75em;line-height:1.2em;letter-spacing:-.02em}.default-landing-page .landing-page-howto-step{margin:1em 0 3em}.savings-page{padding:2em 0}.savings-page .savings{color:#00a5fa;font-weight:700}.savings-page .cost{color:red;font-weight:700}.savings-page .header{padding-bottom:1em}.savings-page .subtitle{color:#00a5fa;margin-bottom:.5em}@media (min-width:768px){.savings-page .savings-table-wrapper{padding-left:2em}}.savings-page .savings-table-wrapper .savings-table{border-radius:8px}.savings-page .savings-table-wrapper .savings-table td,.savings-page .savings-table-wrapper .savings-table th{background-color:#fff;padding:1em;font-size:1.2em;line-height:1.5em}.savings-page .savings-table-wrapper .savings-table td.transparent,.savings-page .savings-table-wrapper .savings-table th.transparent{background-color:rgba(0,0,0,0)}.savings-page .savings-table-wrapper .savings-table .current-loan{font-weight:400}.savings-page .savings-table-wrapper .savings-table .new-loan{color:#000;font-weight:700}.savings-page .faq{margin-top:2.5em;margin-bottom:3.5em}.savings-page .call-to-action-message{line-height:2.5em}.savings-page .call-to-action-btn{font-size:.95em;margin-left:1em}.landing-page-subtitle{color:#00a5fa;font-family:Circular Bold,Inter,Arial;font-weight:600;font-size:2.4em;line-height:1.75em;letter-spacing:-.02em}.landing-page-subtitle.tertiary{color:#001433}.product-page{padding:3em 2em}.product-page .product-description-wrapper{margin-bottom:3em}.product-page .product-cta-btn{width:400px;height:55px;max-width:100%;background-color:#00a5fa;color:#fff;font-size:1.15em;margin-left:auto;margin-right:auto;display:block}.paypalForm{display:none}.agreement-status-table{font-size:1.1em}@media (min-width:400px){.agreement-status-table{display:table}}.agreement-status-table .th{padding-left:0}.agreement-status-table .agreement-status-step{min-width:11em;padding:.75rem}.agreement-status-table .agreement-status-step .agreement-status-step-index{min-width:1.5em;display:inline-block}.agreement-status-list{font-size:1.1em}.agreement-status-list .agreement-status-list-item{line-height:1.7em}.agreement-status-list .agreement-status-list-item .agreement-status-list-item-index{min-width:1.25em}.agreement-status-list .agreement-status-list-item .agreement-status-list-item-index,.agreement-status-list .agreement-status-list-item .agreement-status-list-item-link,.agreement-status-list .agreement-status-list-item .agreement-status-list-item-progress-message{display:inline-block;padding-right:.3em}.agreement-overview .vaulted-container-wrapper{padding:3em 0}@media (min-width:768px){.agreement-overview .vaulted-container-wrapper{padding:7em 0}}.agreement-overview .vaulted-container-wrapper .vaulted-container{padding:2em 1em}@media (min-width:768px){.agreement-overview .vaulted-container-wrapper .vaulted-container{padding:2em 3em}}@media (min-width:992px){.agreement-overview .vaulted-container-wrapper .vaulted-container{padding:2em}}.agreement-overview .header-container-subtitle{text-transform:uppercase}.agreement-overview .agreement-overview-summary hr{margin-bottom:1.5em}.agreement-overview .agreement-overview-summary .agreement-section-summary{margin-bottom:.5em}.repayment-calculator-page{padding:1em}@media (min-width:768px){.repayment-calculator-page{padding:1em 2em}}@media (min-width:992px){.repayment-calculator-page{padding:1em 2em}}@media (min-width:1200px){.repayment-calculator-page{padding:1em 3em}}.landing-page-side-image-wrapper{height:auto}@media (min-width:768px){.landing-page-side-image-wrapper{height:100vh}}.landing-page-side-image-wrapper .landing-page-side-image{width:100%;height:auto;margin-top:0}@media (min-width:768px){.landing-page-side-image-wrapper .landing-page-side-image{margin-top:0;height:90vh;width:auto}}.progress-bar-wrapper{padding:0 0 1em 1em;margin-left:auto;margin-right:auto;max-width:1200px}@media (min-width:992px){.progress-bar-wrapper{padding:0 0 1em 1.75em}}.progress-bar-wrapper .progress{background-color:#d3d3d3;height:10px;max-width:400px}.progress-bar-wrapper .progress .progress-bar{background-color:#001433;height:10px}.progress-bar-wrapper .progress-label{margin-bottom:.2em;font-family:Circular Book,Inter,Arial}.progress-bar-wrapper.main-color-progress-bar .progress-bar{background-color:#00a5fa}.share-button-toolbar{text-align:center}@media (max-width:544px){.share-button-toolbar{margin-top:2em}}.share-button-toolbar .share-button{display:inline-block;margin-right:.5em}.homepage-faq-title{margin-bottom:.75em}.borrowing-options-section .page-title,.lending-options-section .page-title,.repayment-section .page-title{margin-bottom:0}@media (min-width:992px){.borrowing-options-section .page-title,.lending-options-section .page-title,.repayment-section .page-title{margin-bottom:1em}}.what-people-are-saying-section .quote{font-size:1.75em;font-weight:400}.use-case-group{margin-bottom:2rem}.use-case-group.first-use-case-group{text-align:left}@media (min-width:768px){.use-case-group.first-use-case-group{text-align:right;border-right:1px solid #d3d3d3;padding-right:2rem}}@media (min-width:768px){.use-case-group.second-use-case-group{padding-left:2rem}}.use-case-group .use-case{margin-top:1.5rem;background-color:#e8e8e8;border:1px solid #e4e4e4;border-radius:3px}.use-case-group .use-case .use-case-heading{text-align:center;font-size:1.2rem;padding-top:2rem;padding-bottom:2rem}@media (min-width:400px){.use-case-group .use-case .use-case-heading{text-align:left}}@media (min-width:768px){.use-case-group .use-case .use-case-heading{text-align:center}}@media (min-width:992px){.use-case-group .use-case .use-case-heading{text-align:left}}.use-case-group .use-case .use-case-heading a{padding-left:.5em;color:#001433;display:inline-block}.use-case-group .use-case .use-case-img{background-position:50%;background-size:cover;margin-right:0;border-radius:3px;height:110px}@media (min-width:400px){.use-case-group .use-case .use-case-img{height:85px}}@media (min-width:768px){.use-case-group .use-case .use-case-img{height:110px}}@media (min-width:992px){.use-case-group .use-case .use-case-img{height:85px}}.securities-disclaimer{text-align:center;margin-top:2em}@media (min-width:768px){.securities-disclaimer{margin-top:0}}.features-table .tr{display:inline-block;border:none}.features-table .td{padding:1em 2em;border:none}#dashboardContainer iframe{border:1px solid #001433}.new-payment-btn{margin-bottom:1em}.nav-menu-btn{padding:0 0 .5em .25em;float:right;font-size:2em}.landing-page-video-background-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;z-index:0}.landing-page-video-background-wrapper .overlay{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.webix_message_area{display:none!important}.agreement-title-with-party-names{font-weight:700;padding-left:.1rem}.repayment-schedule-row-as-link{cursor:pointer}.repayment-schedule-row-as-link:hover{background-color:#00a5fa!important;color:#fff}.detail-page-action-btn{display:inline-block;padding-right:1em}.icon-btn{background-color:rgba(0,0,0,0);border:none}.icon-btn:focus{outline:none}.icon-btn i{font-size:1.75em}.pandadoc-editor iframe{width:100%;height:94vh}.tox-notifications-container{display:none!important}.document-editor{min-height:100%!important}.document-editor .e-documenteditor{background-color:#fff}.document-editor .e-de-pane{background-color:#f7f7f7;z-index:10}.document-editor .e-de-background{background-color:#eee}.document-editor #loader{color:#008cff;height:40px;left:45%;position:absolute;top:45%;width:30%}.document-editor body{-ms-touch-action:none;touch-action:none}.document-editor .body{font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif"}.document-editor .e-view{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}.document-editor .sb-left{float:left}.document-editor .sb-right{float:right}.document-editor .sb-block{display:block}.document-editor .sb-table{display:table}.document-editor .sb-table-cell{display:table-cell;vertical-align:middle}.document-editor .sb-header{height:48px;background:#fff;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px 0 rgba(0,0,0,.12);z-index:1001;opacity:1}.document-editor .sb-header-left,.document-editor .sb-header-right{height:100%}.document-editor #sb-header-text{padding-left:22px;opacity:.87;font-family:Roboto;font-weight:500;font-size:15px;color:#000;text-align:left}.document-editor .header-logo{float:left;padding-left:8px;padding-right:22px}.document-editor .footer-logo{background:url(https://ej2.syncfusion.com/home/images/footer-logo.svg) no-repeat 100%;height:40px;width:140px}.document-editor .sb-header-splitter{float:left;border-left:1px solid #c4c4c4;height:32px;margin-top:8px;padding-left:22 px}.document-editor .sb-header-settings{display:none}.document-editor .product-style a{padding-right:15px;font-family:Roboto;font-weight:500;font-size:13px;color:#363636;text-align:center;text-decoration:none}.document-editor .product-style a:hover{color:#3c78ef}.document-editor .sb-download-btn a{text-decoration:none}.document-editor .sb-download-text{color:#fff}.document-editor .sb-download-wrapper{padding-right:27px}.document-editor .sb-download-btn:hover .sb-download-btn:focus .sb-download-btn.active{border-radius:2px;font-family:Roboto;font-weight:700;color:#fff}.document-editor .sb-download-btn:hover{background:#006ce6}.document-editor .sb-download-btn:focus{background:#0051cb}.document-editor .sb-download-btn.active{background:#0036b1}.document-editor .sb-download-btn{background-color:#3c78ef;opacity:1;border-radius:2px;font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif";font-weight:500;line-height:18px;height:32px;border-color:rgba(0,0,0,0)}.document-editor .sb-bread-crumb h1{padding-left:20px;padding-top:24px;padding-bottom:10px;margin:0}.document-editor .category-allcontrols a,.document-editor .category-text a,.document-editor .crumb-sample{display:table;opacity:.87;font-family:Roboto;font-weight:500;font-size:15px;color:#3c78ef;text-align:left;text-decoration:none}.document-editor .sb-bread-crumb .sb-bread-crumb-text>div{font-size:15px;font-weight:500;padding-right:8px;cursor:default;display:table-cell}.document-editor .sb-bread-crumb-text>div.seperator{font-weight:700;font-size:15px;vertical-align:bottom}.document-editor .content{overflow:auto;height:calc(100% - 50px);top:50px}.document-editor .sample-content{top:48px;background:#fff}.document-editor .div{display:block}.document-editor .control-section{padding-left:4px}.document-editor .crumb-sample{color:#000;line-height:18px}.document-editor #description{padding-bottom:16px;opacity:.75;padding-top:14px}.document-editor #action-description,.document-editor #description{padding-left:20px;font-family:Roboto;font-size:13px;color:#000;text-align:left}.document-editor #action-description{padding-bottom:15px}.document-editor #description-section{padding-left:20px;padding-top:30px;opacity:.87;font-family:Roboto;font-weight:700;font-size:15px;color:#000;text-align:left}.document-editor .layout{display:inline-block;cursor:pointer}.document-editor #actionDes{opacity:.75}@font-face{font-family:sbicons;src:url(data:font/truetype;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYX+RGcAAAYcAAAAHEdERUYAJwANAAAF/AAAAB5PUy8yVpBcGwAAAVgAAABWY21hcOlg2h8AAAHIAAABYmdhc3D//wADAAAF9AAAAAhnbHlmp9UzsAAAAzwAAADkaGVhZBN5YdsAAADcAAAANmhoZWEIHgPGAAABFAAAACRobXR4DIABKwAAAbAAAAAYbG9jYQAsAIgAAAMsAAAAEG1heHAATQAuAAABOAAAACBuYW1lVG4gEgAABCAAAAGGcG9zdJaXZqkAAAWoAAAASwABAAAAAQAArag3N18PPPUACwQAAAAAANgtDq8AAAAA2C0OrwAA/8AEAAPAAAAACAACAAAAAAAAAAEAAAPA/8AAXAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAFAAEAAAAHACsABAAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQOAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAIABQMAAAAAAAAAAAABEAAAAAAAAAAAAAAAUGZFZABAACDqCAPA/8AAXAPAAEAAAAABAAAAAAAABAAAAAAAAAABVQAAAgAAAAQAASsBKwAAAAAAAwAAAAMAAAAcAAEAAAAAAFwAAwABAAAAHAAEAEAAAAAMAAgAAgAEAAAAIOkb6R/qCP//AAAAAAAg6RvpH+oI//8AAP/jFukW5hX+AAEAAAAAAAAAAAAAAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYALAByAAEBKwBrAtUDFQAFAAAlCQE3CQEBKwEH/vlRAVn+p7sBBQEFUP6r/qsAAAAAAQErAGsC1QMVAAUAACUJAScJAQLV/vkBB1H+pwFZuwEFAQVQ/qv+qwAAAAAEAAD/wAQAA8AAFgAiACYAKgAAACIOAQcOAxUUHgIyPgI0JicuASQgHgEQDgEgLgEQNgEzFSMRMxEjAjdual4nHi0fED92mKaYdj8/Oyde/tQBFuyJiez+6uyJiQE3gICAgANgHDcnHURLUCpTmHY/P3aYppg7Jzd8iez+6uyJiewBFuz9yYACgP6AAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMAIwB4AAEAAAAAAAQABwCsAAEAAAAAAAUACwDMAAEAAAAAAAYABwDoAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMARgAwAAMAAQQJAAQADgCcAAMAAQQJAAUAFgC0AAMAAQQJAAYADgDYAHMAYgBpAGMAbwBuAHMAAHNiaWNvbnMAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAHMAYgBpAGMAbwBuAHMAAHNiaWNvbnMAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQACAAMBAgEDAQQETmV4dAhQcmV2aW91cwxub3RpZmljYXRpb24AAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAEABgABAAQAAAACAAAAAAAAAAEAAAAA1aQnCAAAAADYLQ6vAAAAANgtDq8=) format("truetype");font-weight:400;font-style:normal}.document-editor .sb-icons{font-family:sbicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.document-editor .sb-icon-Next:before{content:"\E91B"}.document-editor .sb-icon-Previous:before{content:"\E91F"}.document-editor #next-sample,.document-editor #prev-sample{font-size:18px;border:.5px solid #e5e5e5;background:#fff;display:inline-table;padding:2px 5px 0}.document-editor .sb-navigation-next a,.document-editor .sb-navigation-prev a{color:#636363;text-decoration:none}.document-editor #prev-sample{border-radius:4px 0 0 4px}.document-editor #next-sample{border-radius:0 4px 4px 0;float:right}.document-editor #next-sample:hover,.document-editor #prev-sample:hover{background-color:#d8d8d8;text-decoration:none}.document-editor .sb-sample-navigation{font-size:18px;color:#5a5a5a;cursor:pointer}.document-editor .sb-custom-item{padding-right:15px;padding-left:30px;display:inline-table;padding-top:20px}.document-editor a.e-disabled{cursor:not-allowed;opacity:.35}@media (max-width:550px){.document-editor .sb-headers{height:48px;background:#fff;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px 0 rgba(0,0,0,.12);z-index:1001;opacity:1}.document-editor .sb-header{display:none}.document-editor .syncfusion-logo{float:left;padding-left:8px;padding-right:8px}.document-editor .sync-logo{padding-right:0;padding-left:8px;height:40px;width:40px}.document-editor .sb-icon-notification{padding-left:15px;padding-right:15px;font-size:18px;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg);color:#5d5d5d;opacity:1%}.document-editor #sb-header-text{padding-left:0}.document-editor .sb-icon-notification:before{content:"\EA08"}.document-editor .product a:hover{color:#5d5d5d;text-decoration:none}}.Toastify__progress-bar.Toastify__progress-bar--default{background:#00a5fa}.image-centered{margin-left:auto;margin-right:auto;display:block;float:none}.invoice{font-family:Circular Book,Inter,Arial}.invoice .invoice-table-wrapper{overflow:auto}.invoice .invoice-table-wrapper .table{font-size:1.2rem;width:100%;background-color:#fff}.invoice .invoice-table-wrapper .table tbody,.invoice .invoice-table-wrapper .table thead{width:100%}.invoice .invoice-table-wrapper .table th,.invoice .invoice-table-wrapper .table tr{border:1px solid #d3d3d3}.invoice .invoice-table-wrapper .table .thead-light{background-color:#ececec}.e-grid .e-gridcontent tr td,.e-grid tr th{font-size:.95rem}.e-grid .e-tableborder{border:none}.e-table .e-emptyrow{background-color:#f7f7f7}.disbursement-table{overflow:auto}.disbursement-table tbody tr:hover{background-color:#001433;color:#fff;cursor:pointer}.disbursement-table tbody tr td{padding:.3rem;border:1px solid #d3d3d3}.disbursement-table tbody tr td p{margin:0}.overview-display-list .display-list-item{padding:2em;border-bottom:1px solid #d3d3d3}.e-split-btn-wrapper button{font-size:1.1rem}.left-aligned-data-table .e-headercelldiv,.left-aligned-data-table td{text-align:left!important}.data-table-detail-template .e-grid{border-color:rgba(0,0,0,0)!important}.data-table-detail-template .e-grid .e-gridheader{display:none!important}.data-table-detail-template .e-grid .e-gridcontent{background-color:rgba(0,0,0,0)!important}.data-table-detail-template .e-grid .e-gridcontent .e-content{height:auto!important}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table{background-color:rgba(0,0,0,0)!important;width:100%!important}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table col.e-detail-intent{display:none}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .configuration-category,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .default-row-template{width:78vw;max-width:1300px}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .configuration-category .integration-detail p,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .default-row-template .integration-detail p{text-wrap:wrap}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-detailindentcell,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-row{display:none!important}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-detailcell,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-lastrowcell{border-color:rgba(0,0,0,0)!important}.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-detailcell .configuration-category,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-detailcell .default-row-template,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-lastrowcell .configuration-category,.data-table-detail-template .e-grid .e-gridcontent .e-content .e-table .e-detailrow .e-lastrowcell .default-row-template{padding:1em 1em 0}.data-table-detail-template .e-grid .e-toolbar,.data-table-detail-template .e-grid .e-toolbar .e-toolbar-items{background-color:rgba(0,0,0,0)!important;border-color:rgba(0,0,0,0)!important}.e-rowcell{max-width:750px;overflow:auto!important;text-overflow:clip!important}.e-grid .e-content{background-color:#f7f7f7!important}.hide-data-table-toolbar .e-toolbar{display:none}.repayment-calculator-page .e-control .e-dialog{left:50%!important;position:absolute!important;-webkit-transform:translate(-50%)!important;-ms-transform:translate(-50%)!important;transform:translate(-50%)!important}.repayment-calculator-page .e-popup.e-popup-open.e-dialog{min-width:300px!important;width:60%!important;height:700px!important;max-height:80%!important}#ddlelement_popup input,#ddlelement_popup li,#ddlelement_popup p{font-size:1.5rem}#ddlelement_popup li{padding:.5rem}.e-pv-signature-apperance{overflow:auto!important}.tasks-display-mode .tasks-display-mode-heading{color:#001433;font-weight:700;padding:.75em 0 1.2em}.tasks-display-mode .tasks-display-mode-spacer-point1{margin:.1em}.tasks-display-mode .tasks-display-mode-spacer-point25{margin:.25em}.tasks-display-mode .tasks-display-mode-spacer-point5{margin:.5em}.tasks-display-mode .tasks-display-mode-spacer-point75{margin:.75em}.tasks-display-mode .tasks-display-mode-spacer{margin:1em}.tasks-display-mode .tasks-display-mode-default-button{min-width:150px;background-color:#001433;color:#fff}.tasks-display-mode .tasks-display-mode-default-link{min-width:150px;color:#001433}.tasks-display-mode .tasks-display-mode-default-link:hover{color:#00a5fa;background-color:rgba(0,0,0,0)}.tasks-display-mode .view-all-tasks-container{background-color:#fff;padding:1.25em 2em;border:1px solid #d3d3d3;border-radius:5px}.tasks-display-mode .view-all-tasks-container .view-all-tasks-left-side{margin:0;padding:.5rem 0;text-align:left}.tasks-display-mode .view-all-tasks-container .view-all-tasks-right-side{margin:0;padding:.5rem 0}@media (min-width:768px){.tasks-display-mode .view-all-tasks-container .view-all-tasks-right-side{text-align:right}}.tasks-display-mode .view-tasks-container{background-color:#fff;padding:1.25em 2em;border:1px solid #d3d3d3;border-radius:5px}.tasks-display-mode .view-tasks-container .view-tasks-task-container{padding:0}.tasks-display-mode .view-tasks-container .view-tasks-task-container .task-small-text{margin:0;padding:0;font-size:1rem}.tasks-display-mode .view-tasks-container .view-tasks-left-side{margin:0;padding:.5rem 0;text-align:left}.tasks-display-mode .view-tasks-container .view-tasks-right-side{margin:0;padding:.5rem 0}@media (min-width:768px){.tasks-display-mode .view-tasks-container .view-tasks-right-side{text-align:right}}.query-builder-btn{margin-bottom:1em}@media (min-width:768px){.query-builder-btn{margin-left:1em}}.e-popup-flmenu.e-control.e-popup.e-lib{display:none!important}.react-select-input-group-smaller__menu,.react-select-input-group-xsmall__menu,.react-select-input-group__menu{font-family:Circular Book,Inter,Arial;font-size:1.2rem}.searchable-dropdown-wrapper{overflow:visible}.searchable-dropdown-wrapper.questionnaire-xsmall-display .sv_q{min-height:100px!important;height:auto}.searchable-dropdown-wrapper.questionnaire-xsmall-display .sv_q .react-select-input-group{font-size:1.2rem}.searchable-dropdown-wrapper.questionnaire-smaller-display .sv_q{min-height:150px!important;height:auto}.searchable-dropdown-wrapper.questionnaire-smaller-display .sv_q .react-select-input-group{font-size:1.2rem}.searchable-dropdown-wrapper .sv_q{min-height:150px!important}.searchable-dropdown-wrapper .sv_q .react-select-input-group{position:relative;width:100%;right:0;left:0;padding:0;font-size:1.2rem;font-family:Circular Book,Inter,Arial}.searchable-dropdown-wrapper .css-b8ldur-Input,.searchable-dropdown-wrapper .react-select-input-group-xsmall__input{width:100%!important}.searchable-dropdown-wrapper .react-select-input-group-smaller__menu,.searchable-dropdown-wrapper .react-select-input-group-xsmall__menu,.searchable-dropdown-wrapper .react-select-input-group__menu{z-index:10050;position:absolute!important;right:0;left:0}.searchable-dropdown-wrapper .react-select-input-group-smaller__menu .react-select-input-group-smaller__menu-list,.searchable-dropdown-wrapper .react-select-input-group-smaller__menu .react-select-input-group-xsmall__menu-list,.searchable-dropdown-wrapper .react-select-input-group-smaller__menu .react-select-input-group__menu-list,.searchable-dropdown-wrapper .react-select-input-group-xsmall__menu .react-select-input-group-smaller__menu-list,.searchable-dropdown-wrapper .react-select-input-group-xsmall__menu .react-select-input-group-xsmall__menu-list,.searchable-dropdown-wrapper .react-select-input-group-xsmall__menu .react-select-input-group__menu-list,.searchable-dropdown-wrapper .react-select-input-group__menu .react-select-input-group-smaller__menu-list,.searchable-dropdown-wrapper .react-select-input-group__menu .react-select-input-group-xsmall__menu-list,.searchable-dropdown-wrapper .react-select-input-group__menu .react-select-input-group__menu-list{background-color:#fff}.searchable-dropdown-wrapper .react-select-input-group-xsmall__input input{min-height:auto!important;height:20px!important;width:100%!important;font-size:1.2rem!important}.searchable-dropdown-wrapper .react-select-input-group-smaller__input input,.searchable-dropdown-wrapper .react-select-input-group__input input{min-height:auto!important;height:43px!important;font-size:1.2rem}.searchable-dropdown-wrapper .line-breaks{white-space:pre-line}iframe[title="Plaid Link"]{z-index:1147483647!important}.force-pre-wrap{white-space:pre-wrap!important}.e-grid .e-gridfooter{background-color:#fff}.e-grid .e-summaryrow .e-summarycell{padding:1em;font-weight:700;color:#000;background-color:#fff;font-size:1rem}.sortable-chosen{border:1px solid #d9edf7}.sortable-ghost{background-color:#d9edf7}.rank-highlight{background-color:#d9edf7!important}#login-button-wrapper-link .dashboard-link{display:none}.header-tag{padding:.5rem;border-radius:3px;margin-left:1rem}.header-tag.inactive{background-color:#d3d3d3}.header-tag.active{background-color:#00ca95}.list-item-line-height-large li,li.list-item-line-height-large{line-height:2.5rem!important}.selectable-list{color:#001433;overflow:auto;background-color:#eceeef;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.selectable-list .selectable-list-item{cursor:pointer;padding:.5rem;font-size:1.2rem}.selectable-list .selectable-list-item.selected,.selectable-list .selectable-list-item:hover{background-color:#d3d3d3;font-weight:700}.selectable-list .selectable-list-item .selectable-list-item-label{display:inline-block;padding:0 .5rem}.spread-container select{overflow:auto}.hide-checkbox-text .sv_q_checkbox_control_label{display:none}.hide-checkbox-text td{text-align:center!important}.upload-area{border:2px dashed #ccc;padding:20px;text-align:center;margin-bottom:20px}.upload-area button{background-color:#e2e3e5!important;color:#383d41!important;border:none!important;padding:10px 20px!important;cursor:pointer!important}.document-type-selector select{padding:0!important;font-size:1rem!important;border:1px solid #ccc!important}.lw-card .lw-card-item{background:#f0f0f0;border:0;padding:1.5rem;margin-bottom:1rem;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:-webkit-box-shadow .2s ease;transition:-webkit-box-shadow .2s ease;transition:box-shadow .2s ease;transition:box-shadow .2s ease,-webkit-box-shadow .2s ease}.lw-card .lw-card-item:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.15);box-shadow:0 2px 5px rgba(0,0,0,.15)}.lw-card .lw-card-item .btn{min-width:80px}.lw-card .lw-card-elements{gap:16px;font-size:1rem;color:#1a2233}@media (max-width:992px){.lw-card .lw-card-elements{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.lw-wide-card .lw-card-item{max-width:100%;padding:.75rem}.lw-navbar{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 1.5rem;background-color:#fafbfa;min-height:80px}.lw-navbar,.lw-navbar .navbar-contents{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.lw-navbar .navbar-contents{max-width:1400px;margin:0 auto;width:100%}.lw-navbar .navbar-brand{padding:0;margin-right:2.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.lw-navbar .navbar-brand img{height:38px;width:auto}.lw-navbar .nav-link{color:#495057;font-size:.95rem;padding:.5rem 1rem;text-decoration:none;font-weight:500}.lw-navbar .nav-link:hover{color:#0056b3}.lw-navbar .nav-link.dropdown-toggle{background:none;border:none;padding:.5rem 1rem}.lw-navbar .nav-link.dropdown-toggle:after{margin-left:.5rem;vertical-align:middle}.lw-navbar .dropdown{position:relative}.lw-navbar .dropdown .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.95rem;color:#495057;text-align:left;background-color:#fff;border:1px solid #e9ecef;border-radius:.25rem;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.1);box-shadow:0 2px 4px rgba(0,0,0,.1)}.lw-navbar .dropdown .dropdown-menu.show{display:block}.lw-navbar .dropdown .dropdown-menu.dropdown-menu-end{right:0;left:auto}.lw-navbar .dropdown .dropdown-menu .dropdown-item{display:block;width:100%;padding:.5rem 1rem;clear:both;font-weight:400;color:#495057;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;cursor:pointer}.lw-navbar .dropdown .dropdown-menu .dropdown-item:hover{color:#0056b3;background-color:#f8f9fa}.lw-navbar .dropdown .dropdown-menu .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.lw-navbar .navbar-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:0;margin-left:0;margin-right:0;top:auto;right:auto}.lw-navbar .navbar-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .btn-group{position:relative}.lw-navbar .navbar-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .dashboard-new-agreement-btn--nav-tone{background:rgba(0,0,0,0)!important;border-color:rgba(0,0,0,0)!important;-webkit-box-shadow:none!important;box-shadow:none!important;color:#495057!important;font-size:.95rem;font-weight:500;padding:.5rem 1rem}.lw-navbar .navbar-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .dashboard-new-agreement-btn--nav-tone:hover{color:#0056b3!important}.lw-navbar .navbar-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .dropdown-menu1{z-index:100001}.lw-btn{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;border-radius:20px!important;font-weight:600!important;height:40px!important;padding:0 20px!important}.lw-btn,.lw-btn.hover-fix:hover{background-color:#00465a!important;color:#fff!important;border:0!important}.lw-btn.hover-fix:hover{opacity:.6}.lw-btn.lw-btn-pill{height:30px!important;width:100px!important}.lw-btn.lw-btn-alt-pill,.lw-btn.lw-btn-pill-small{height:30px!important;padding:0 20px!important}.lw-btn.lw-btn-round{border-radius:50%!important;min-width:40px!important;padding:0!important}.lw-btn.lw-btn-white{background-color:#fff!important;color:#000!important;font-weight:400!important}.lw-btn.lw-btn-dark{background-color:#001433!important;color:#fff!important}.lw-btn.lw-btn-light{background-color:#e0e0e0!important;color:#000!important}.lw-btn.lw-btn-dark:hover{background-color:#888!important;color:#000!important}.lw-btn.lw-btn-danger{color:#dc3545!important;background-color:#f8d7da!important;border:0!important}.lw-btn.lw-btn-danger:hover{background-color:#c82333!important;color:#f8d7da!important}.lw-verified{color:#28a745!important}.lw-light-container .lw-appointment-container{background-color:#e4eaee}.lw-appointment-container{max-width:300px;background-color:#fff;border-radius:4px;padding:60px;min-height:230px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.lw-appointment-container,.lw-circle-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.lw-circle-icon{background-color:#e4eaee;width:48px;height:48px;border-radius:50%;background-color:#adb5bd}.lw-tr td{padding:1rem!important;vertical-align:middle!important}.flex-padding{max-width:1200px;margin-left:auto;margin-right:auto}@media (min-width:400px){.flex-padding{padding:0}}@media (min-width:768px){.flex-padding{padding:0 3rem}}@media (min-width:992px){.flex-padding{padding:0 9rem}}@media (min-width:1200px){.flex-padding{padding:0}}.flex-padding-no-max{margin-left:auto;margin-right:auto}@media (min-width:400px){.flex-padding-no-max{padding:0}}@media (min-width:768px){.flex-padding-no-max{padding:0 3rem}}@media (min-width:992px){.flex-padding-no-max{padding:0 3rem}}@media (min-width:1200px){.flex-padding-no-max{padding:0 10rem}}.lw-page-header{background-color:#001433;padding:1.5rem 0;border-radius:0;margin-bottom:1rem;margin-top:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff}.lw-page-header h1{margin:0;text-align:left}.lw-top-spacer{margin-top:150px}.lw-color-main-color{color:#00465a!important}.d-flex{display:-webkit-box;display:-ms-flexbox;display:flex}.flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-grow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.justify-content-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-content-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-content-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.align-items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.align-self-start{-ms-flex-item-align:start;align-self:flex-start}.underline{text-decoration:underline}.text-bold{font-weight:600}.text-extra-bold{font-weight:800}.text-black{color:#000}.text-md{font-size:16px}.gap-2{gap:.5rem}.gap-3{gap:1rem}.gap-5{gap:3rem}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.p-2{padding:.5rem!important}.p-4{padding:1.5rem!important}.py-1{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.ml-5{margin-left:3rem!important}.mr-2{margin-right:.5rem!important}.mr-4{margin-right:1.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.5rem!important}.mb-2{margin-bottom:1rem!important}.mb-3,.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mt-1{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-5{margin-top:3rem!important}.my-1{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-2{margin-top:1rem!important;margin-bottom:1rem!important}.my-3{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.w-1-2{width:50%!important}.expandable-progress-group-header{padding:.1rem;max-width:700px}.expandable-progress-group-header h2{font-weight:700;font-size:1.25rem}.expandable-progress-group-header a{font-weight:500;font-size:.875rem;color:#222;text-decoration:underline}.expandable-progress-group{background:#f0f0f0;padding:.1rem;border-radius:.25rem}.expandable-progress-group .empty-progress-bar{background:#cacaca;border-radius:10px}.expandable-progress-group .progress-bar{background:#28a745;min-width:10px;border-radius:10px;-webkit-box-shadow:none;box-shadow:none}.expandable-progress-group .expandable-progress-group-item{background:#fff;border-radius:4px;border:1px solid #cacaca;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media (max-width:992px){.expandable-progress-group .expandable-progress-group-item{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:10px 0;gap:10px}.expandable-progress-group .expandable-progress-group-item div{text-align:center!important;padding:0!important}}.lw-progress-bar{background:#28a745;min-width:10px;border-radius:10px;-webkit-box-shadow:none;box-shadow:none}.lw-empty-progress-bar{background:#cacaca;border-radius:10px}.lw-white-checkbox{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:16px;height:16px;border:1px solid #000;border-radius:4px;background:#fff;cursor:pointer;position:relative;vertical-align:middle}.lw-white-checkbox:checked{background:#fff}.lw-white-checkbox:checked:after{content:"";display:block;position:absolute;left:4px;top:0;width:5px;height:10px;border:solid #000;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.business-info-card .items-container{background-color:#e4eaee}.business-info-card .divider{width:calc(100% - 6rem);margin:0 auto;border-bottom:1px solid #adb5bd}.business-info-card .info-row:last-child .divider{display:none}.business-info-card a{color:#000}.lw-comment{max-width:600px;margin:0 auto 2rem}.lw-comment .textarea{resize:none;border-radius:6px;border:1px solid #ccc;background:#fff}.lw-listing{max-width:340px;margin:0 auto 2rem}.lw-listing .card{background:#f0f0f0;border:none}.lw-listing a{color:#000}.lw-history{max-width:700px;background-color:#fff}.lw-history .th{font-weight:700;border:none;background:rgba(0,0,0,0);font-size:1rem}.lw-history .row{border:none}.lw-history .date{font-weight:500;width:120px;border:none;vertical-align:top;font-size:1rem}.lw-history .sub{color:#888;font-size:.95em;margin-top:.2em}.lw-history .lw-history-timeline{width:100%;margin:0 auto}.lw-history .lw-history-timeline .header{font-weight:700;margin-bottom:.5rem}.lw-history .lw-history-timeline .date-col{width:120px;min-width:100px;text-align:left}.lw-history .lw-history-timeline .desc-col{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:left}.lw-history .lw-history-timeline .spacer{width:40px;min-width:40px}.lw-history .lw-history-timeline .row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;min-height:60px;margin:0!important;padding:0!important}.lw-history .lw-history-timeline .center{position:relative;width:40px;min-width:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.lw-history .lw-history-timeline .dot{width:10px;height:10px;background:#bbb;border-radius:50%;margin:5px 0 0;z-index:1}.lw-history .lw-history-timeline .line{width:2px;background:#e0e0e0;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-top:-1px;margin-bottom:-5px;min-height:55px;z-index:0}.lw-history .lw-history-timeline .desc-main{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:350px}.lw-key-result{max-width:700px;margin:3rem auto 0}.lw-key-result .card{background:#f0f0f0}.lw-key-result .menu-btn{position:absolute;top:18px;right:18px;background:none;border:none;font-size:24px;cursor:pointer;z-index:2}.lw-key-result .menu-popup{position:absolute;top:48px;right:0;background:#fff;border-radius:12px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.13);box-shadow:0 2px 8px rgba(0,0,0,.13);padding:.5rem 0;min-width:180px;z-index:10}.lw-key-result .menu-item{padding:1.5rem 2rem;cursor:pointer;white-space:nowrap}.lw-key-result .menu-item:hover{background:#f7f7f7}.lw-key-result input[type=radio]{accent-color:#000}.pill-selector-wrap{max-width:700px;margin-left:auto;margin-right:auto}.lw-sidebar-title{color:#fff;padding:1rem 3rem;position:fixed;top:80px;left:0}.lw-sidebar-title,.questionnaire-sidebar-header{background-color:#dee2e6;width:100%;height:120px}@media (max-width:768px){.questionnaire-sidebar-header{display:none!important}}.questionnaire-sidebar-content{background:#adb5bd;height:calc(100vh - 200px);overflow-y:auto}.questionnaire-sidebar-expandable-section{border:1px solid #e9ecef;border-radius:4px;background-color:#f8f8f8;cursor:pointer;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}@media (min-width:768px){.questionnaire-sidebar-expandable-section{display:none}}.questionnaire-sidebar-expandable-section:hover{background-color:#f8f9fa}@media (min-width:768px){.questionnaire-sidebar-expandable-section-mobile{display:none}}.sidebar-mobile-toggle-btn{display:none!important}@media (max-width:768px){.sidebar-mobile-toggle-btn{display:block!important;margin:20px auto}}.questionnaire-sidebar-container{display:block}.questionnaire-sidebar{width:320px;max-width:320px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:70vh;border:0!important;background:rgba(0,0,0,0)}@media (min-width:1024px){.questionnaire-sidebar{position:fixed;top:80px;right:0;overflow-y:auto}}.questionnaire-sidebar .mobile-close-btn{display:none;-ms-flex-item-align:end;align-self:flex-end}@media (max-width:768px){.questionnaire-sidebar .mobile-close-btn{display:block;position:sticky;top:0;text-align:right;margin-bottom:16px;padding:8px 0;z-index:10}}.questionnaire-sidebar .mobile-overlay{display:none}@media (max-width:768px){.questionnaire-sidebar .mobile-overlay{display:block;position:fixed;top:0;left:0;right:0;bottom:0;z-index:999;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease,visibility .3s ease;transition:opacity .3s ease,visibility .3s ease}.questionnaire-sidebar .mobile-overlay.visible{opacity:1;visibility:visible}}@media (min-width:768px){.questionnaire-sidebar .extra-questions-container .mobile-content{display:none}}@media (max-width:768px){.questionnaire-sidebar .extra-questions-container .desktop-content{display:none}}@media (max-width:768px){.questionnaire-sidebar-enter{right:-100%}}@media (max-width:768px){.questionnaire-sidebar-enter-active{right:0;-webkit-transition:right .3s ease-in-out;transition:right .3s ease-in-out}}@media (max-width:768px){.questionnaire-sidebar-exit{right:0}}@media (max-width:768px){.questionnaire-sidebar-exit-active{right:-100%;-webkit-transition:right .3s ease-in-out;transition:right .3s ease-in-out}}.plaid-container{position:relative;background:#f2f2f2;border-radius:12px;padding:2rem;max-width:480px}.borrower-sidebar{width:320px;max-width:320px;background:#f0f0f0}.navbar-drop-wrapper{margin-bottom:80px}.navbar-drop-wrapper .navbar-login-cta{font-weight:600}.navbar-drop-mobile{position:fixed;top:0;right:0;z-index:100000;width:100%;border-bottom:1px solid #d0d0d0}.navbar-drop-mobile .mobile-menu-toggle{background:none;border:none;padding:8px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:40px;height:40px;border-radius:4px;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.navbar-drop-mobile .mobile-menu-toggle:hover{background-color:rgba(0,0,0,.05)}.navbar-drop-mobile .mobile-menu-toggle:focus{outline:none;background-color:rgba(0,0,0,.1)}.navbar-drop-mobile .hamburger-line{width:20px;height:2px;background-color:#495057;margin:2px 0;-webkit-transition:all .3s ease;transition:all .3s ease;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center}.navbar-drop-mobile .hamburger-line.open:first-child{-webkit-transform:rotate(45deg) translate(5px,5px);-ms-transform:rotate(45deg) translate(5px,5px);transform:rotate(45deg) translate(5px,5px)}.navbar-drop-mobile .hamburger-line.open:nth-child(2){opacity:0}.navbar-drop-mobile .hamburger-line.open:nth-child(3){-webkit-transform:rotate(-45deg) translate(7px,-6px);-ms-transform:rotate(-45deg) translate(7px,-6px);transform:rotate(-45deg) translate(7px,-6px)}.navbar-drop-mobile .mobile-menu-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:1040;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease,visibility .3s ease;transition:opacity .3s ease,visibility .3s ease}.navbar-drop-mobile .mobile-menu-overlay.show{opacity:1;visibility:visible}.navbar-drop-mobile .mobile-menu{position:fixed;top:0;right:-300px;width:300px;height:100vh;background-color:#fff;z-index:1050;-webkit-transition:right .3s ease;transition:right .3s ease;-webkit-box-shadow:-2px 0 10px rgba(0,0,0,.1);box-shadow:-2px 0 10px rgba(0,0,0,.1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.navbar-drop-mobile .mobile-menu.show{right:0}.navbar-drop-mobile .mobile-menu-header{padding:1rem;border-bottom:1px solid #e9ecef;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.navbar-drop-mobile .mobile-menu-close{background:none;border:none;font-size:1.5rem;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:4px;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.navbar-drop-mobile .mobile-menu-close:hover{background-color:#f8f9fa;color:#495057}.navbar-drop-mobile .mobile-menu-close:focus{outline:none;background-color:#e9ecef}.navbar-drop-mobile .mobile-menu-content{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:1rem;overflow-y:auto}.navbar-drop-mobile .mobile-menu-new-agreement-wrap{margin-bottom:.25rem}.navbar-drop-mobile .mobile-menu-new-agreement-wrap .mobile-menu-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper{margin-top:0;margin-left:0;margin-right:0}.navbar-drop-mobile .mobile-menu-new-agreement-wrap .mobile-menu-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .btn-group{width:100%}.navbar-drop-mobile .mobile-menu-new-agreement-wrap .mobile-menu-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .dashboard-new-agreement-btn--nav-tone{width:100%;text-align:left;font-weight:500;border:1px solid #e9ecef!important;border-radius:4px;background-color:#f8f9fa!important;color:#495057!important;padding:.75rem 1rem;margin-bottom:.25rem}.navbar-drop-mobile .mobile-menu-new-agreement-wrap .mobile-menu-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .dashboard-new-agreement-btn--nav-tone:hover{background-color:#e9ecef!important;border-color:#dee2e6!important;color:#0056b3!important}.navbar-drop-mobile .mobile-menu-new-agreement-wrap .mobile-menu-new-agreement-dropdown.dashboard-new-agreement-btn-wrapper .dropdown-menu1{position:static!important;left:auto!important;right:auto;margin-top:0;margin-bottom:.5rem;-webkit-box-shadow:none;box-shadow:none}.navbar-drop-mobile .mobile-menu-item{display:block;width:100%;padding:.75rem 1rem;color:#495057;text-decoration:none;border:none;background:none;text-align:left;font-size:1rem;border-radius:4px;-webkit-transition:background-color .2s ease;transition:background-color .2s ease;margin-bottom:.25rem}.navbar-drop-mobile .mobile-menu-item:hover{background-color:#f8f9fa;color:#0056b3;text-decoration:none}.navbar-drop-mobile .mobile-menu-item:focus{outline:none;background-color:#e9ecef}.navbar-drop-mobile .mobile-menu-item.mobile-menu-logout{color:#dc3545}.navbar-drop-mobile .mobile-menu-item.mobile-menu-logout:hover{background-color:#f8d7da;color:#721c24}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-toggle{font-weight:500;border:1px solid #e9ecef;background-color:#f8f9fa}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-toggle:hover{background-color:#e9ecef;border-color:#dee2e6}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-toggle i{font-size:.875rem;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-toggle i.fa-chevron-up{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-item{padding-left:2rem;font-size:.95rem;color:#6c757d;border-left:2px solid #e9ecef;margin-left:.5rem;margin-bottom:.125rem}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-item:hover{color:#0056b3;border-left-color:#0056b3;background-color:#f8f9fa}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-item.mobile-menu-logout{color:#dc3545;border-left-color:#dc3545}.navbar-drop-mobile .mobile-menu-item.mobile-dropdown-item.mobile-menu-logout:hover{background-color:#f8d7da;color:#721c24;border-left-color:#721c24}.navbar-drop-mobile .mobile-dropdown{margin-bottom:.5rem}.navbar-drop-mobile .mobile-dropdown-items{margin-top:.25rem;margin-bottom:.5rem;-webkit-animation:slideDown .2s ease-out;animation:slideDown .2s ease-out}.navbar-drop-mobile .mobile-menu-divider{height:1px;background-color:#e9ecef;margin:1rem 0}.navbar-drop-mobile .mobile-user-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1rem;margin-top:1rem;background-color:#f8f9fa;border-radius:4px;border:1px solid #e9ecef}.navbar-drop-mobile .mobile-user-info span{color:#6c757d;font-size:.9rem;word-break:break-all}@-webkit-keyframes slideDown{0%{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.lw-counters-bar{-ms-flex-wrap:wrap;flex-wrap:wrap}.lw-counter-card,.lw-counters-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.lw-counter-card{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:4px;padding:12px 16px;font-weight:600;cursor:pointer;position:relative}.lw-data-table .control-pane,.lw-data-table .control-section{padding:0!important;margin:0!important}.lw-data-table .control-section{overflow:visible!important}.lw-data-table.loaded-here.data-table{margin:0!important;padding:0!important}.lw-data-table .e-grid{border:1px solid #e1e5e9!important;border-radius:8px!important;overflow:hidden!important;background:#fff!important;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}.lw-data-table .e-grid .e-content,.lw-data-table .e-grid .e-gridcontent{background:#fff!important;border:none!important}.lw-data-table .e-grid .e-table{border-collapse:separate!important;border-spacing:0!important;border:none!important;height:auto!important}.lw-data-table .e-grid .e-gridheader{background:#f8f9fa!important;border-bottom:1px solid #e1e5e9!important}.lw-data-table .e-grid .e-gridheader .e-headercell,.lw-data-table .e-grid .e-gridheader th{background:#f8f9fa!important;border:none!important;border-right:1px solid #e1e5e9!important;font-weight:600!important;font-size:16px!important;color:#374151!important;padding:24px 16px!important;text-align:left!important;height:auto!important;line-height:1.2!important;white-space:nowrap!important}.lw-data-table .e-grid .e-gridheader .e-headercell:last-child,.lw-data-table .e-grid .e-gridheader th:last-child{border-right:none!important}.lw-data-table .e-grid .e-gridheader .e-headercelldiv{font-weight:600!important;color:#374151!important;padding:0!important;line-height:1.2!important;white-space:nowrap!important;font-size:16px!important}.lw-data-table .e-grid .e-gridcontent .e-row,.lw-data-table .e-grid .e-gridcontent tr{border-bottom:1px solid #f3f4f6!important;border-top:none!important;-webkit-transition:background-color .2s ease!important;transition:background-color .2s ease!important;background:#fff!important}.lw-data-table .e-grid .e-gridcontent .e-row:hover,.lw-data-table .e-grid .e-gridcontent tr:hover{background-color:#f0f0f0!important}.lw-data-table .e-grid .e-gridcontent .e-rowcell,.lw-data-table .e-grid .e-gridcontent td{padding:24px 16px!important;font-size:16px!important;color:#374151!important;border:none!important;border-right:1px solid #f3f4f6!important;vertical-align:middle!important;max-width:none!important;overflow:hidden!important;text-overflow:ellipsis!important;line-height:1.4!important;white-space:nowrap!important}.lw-data-table .e-grid .e-gridcontent .e-rowcell:last-child,.lw-data-table .e-grid .e-gridcontent td:last-child{border-right:none!important}.lw-data-table .e-grid .e-gridcontent .e-altrow,.lw-data-table .e-grid .e-gridcontent .e-row.e-altrow{background:#f0f0f0!important}.lw-data-table .e-grid .e-gridcontent .e-altrow:hover{background-color:#f0f0f0!important}.lw-data-table .e-css.e-checkbox-wrapper .e-frame.e-check,.lw-data-table .e-grid .e-gridcontent .e-checkbox-wrapper .e-frame.e-check{background-color:#000!important}.lw-data-table .e-grid .e-table,.lw-data-table .e-grid .e-table tbody,.lw-data-table .e-grid .e-table thead{border:none!important}.lw-data-table .e-gridcontent .e-content .e-table{margin:0!important}.lw-data-table .e-grid .e-gridcontent .e-table tbody{height:auto!important}.lw-data-table .e-grid .e-gridcontent .e-emptyrow{display:none!important}.lw-data-table .e-grid .e-pager .e-currentitem{background-color:#000!important;color:#fff!important}.lw-data-table .e-input-group.e-control-wrapper.e-float-icon-left:not(.e-float-input) .e-input-in-wrap:after,.lw-data-table .e-input-group.e-control-wrapper.e-float-icon-left:not(.e-float-input) .e-input-in-wrap:before,.lw-data-table .e-input-group.e-control-wrapper:not(.e-float-icon-left):not(.e-float-input):after,.lw-data-table .e-input-group.e-control-wrapper:not(.e-float-icon-left):not(.e-float-input):before,.lw-data-table .e-input-group.e-float-icon-left:not(.e-float-input) .e-input-in-wrap:after,.lw-data-table .e-input-group.e-float-icon-left:not(.e-float-input) .e-input-in-wrap:before,.lw-data-table .e-input-group:not(.e-float-icon-left):not(.e-float-input):after,.lw-data-table .e-input-group:not(.e-float-icon-left):not(.e-float-input):before{background:#000}.lw-data-table .e-float-input.e-control-wrapper.e-input-group.e-float-icon-left .e-input-in-wrap .e-float-line:after,.lw-data-table .e-float-input.e-control-wrapper.e-input-group.e-float-icon-left .e-input-in-wrap .e-float-line:before,.lw-data-table .e-float-input.e-control-wrapper.e-input-group:not(.e-float-icon-left) .e-float-line:after,.lw-data-table .e-float-input.e-control-wrapper.e-input-group:not(.e-float-icon-left) .e-float-line:before,.lw-data-table .e-float-input.e-input-group.e-float-icon-left .e-input-in-wrap .e-float-line:after,.lw-data-table .e-float-input.e-input-group.e-float-icon-left .e-input-in-wrap .e-float-line:before,.lw-data-table .e-float-input.e-input-group:not(.e-float-icon-left) .e-float-line:after,.lw-data-table .e-float-input.e-input-group:not(.e-float-icon-left) .e-float-line:before{background:#000}.lw-data-table .e-cc.e-control.e-btn.e-lib.e-cc_okbtn.e-primary.e-flat{color:#000!important}@media (max-width:768px){.lw-data-table .e-grid .e-gridcontent .e-rowcell,.lw-data-table .e-grid .e-gridcontent td,.lw-data-table .e-grid .e-gridheader .e-headercell,.lw-data-table .e-grid .e-gridheader th{padding:8px 12px!important;font-size:13px!important}}.e-dropdownbase .e-list-item.e-active,.e-dropdownbase .e-list-item.e-active.e-hover{color:#000!important;font-weight:600!important}.saved-filters-button{position:relative;display:inline-block}.custom-dropdown-panel{position:absolute!important;top:100%!important;left:0!important;z-index:1100!important;background-color:#fff!important;border:1px solid #e9ecef!important;border-radius:8px!important;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08)!important;box-shadow:0 4px 20px rgba(0,0,0,.08)!important;display:block!important;visibility:visible!important;opacity:1!important;min-width:320px!important;width:400px!important;max-width:calc(100vw - 32px)!important;margin-top:.5rem!important;padding:0!important;pointer-events:auto!important}.custom-dropdown-panel.align-right{left:auto!important;right:0!important}.saved-filters-panel .btn{-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.saved-filters-panel .btn:hover{-webkit-transform:translateY(-1px);-ms-transform:translateY(-1px);transform:translateY(-1px)}.saved-filters-panel .form-control{border-radius:6px}.saved-filters-panel .form-control:focus{border-color:#80bdff;-webkit-box-shadow:0 0 0 .2rem rgba(0,123,255,.25);box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 12px;margin:4px 0;border-radius:4px;cursor:pointer;-webkit-transition:background-color .2s ease;transition:background-color .2s ease;border:1px solid rgba(0,0,0,0)}.page-item:hover{background-color:#f8f9fa;border-color:#dee2e6}.page-item:focus{outline:2px solid #007bff;outline-offset:2px}.page-item.active{background-color:#e3f2fd;border-color:#2196f3}.page-item a{color:inherit;width:100%}.page-item a,.page-item a:hover{text-decoration:none}.page-icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;font-weight:600;margin-right:8px}.page-icon.completed{background-color:#28a745;color:#fff}.page-icon.current{background-color:#007bff;color:#fff}.page-icon.pending{background-color:#6c757d;color:#fff}.page-text{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:14px;color:#495057}.page-text.completed{color:#28a745;font-weight:500}.page-text.current{color:#007bff;font-weight:600}.page-text.active{color:#1976d2;font-weight:600}.new-experience-sidebar .autosave-widget{padding:8px 16px;background-color:#f8f9fa;border-bottom:1px solid #e9ecef}.new-experience-sidebar .autosave-widget .autosave-status{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:14px;color:#6c757d}.new-experience-sidebar .autosave-widget .autosave-status .autosave-icon{color:#adb5bd;font-weight:300}.new-experience-sidebar .autosave-widget .autosave-status .autosave-clock{font-size:12px;color:#adb5bd}.new-experience-sidebar .autosave-widget .autosave-status .autosave-text{color:#495057;font-weight:400}.standalone-landing{font-family:Inter,Circular Book,Arial,sans-serif;color:#001433;min-height:100vh;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.standalone-landing,.standalone-landing__header{display:-webkit-box;display:-ms-flexbox;display:flex;background:#fff}.standalone-landing__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 2.5rem;border-bottom:1px solid #eee}.standalone-landing__logo{height:28px}.standalone-landing__nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.5rem}.standalone-landing__nav a{color:#001433;text-decoration:none;font-size:.9rem;font-weight:500;-webkit-transition:color .15s;transition:color .15s}.standalone-landing__nav a:hover{color:#00a5fa}.standalone-landing__cta{display:inline-block;background:#00a5fa;color:#fff!important;padding:.75rem 1.75rem;border-radius:6px;font-size:1rem;font-weight:600;text-decoration:none;-webkit-transition:background .2s,-webkit-transform .15s;transition:background .2s,-webkit-transform .15s;transition:background .2s,transform .15s;transition:background .2s,transform .15s,-webkit-transform .15s}.standalone-landing__cta:hover{background:#008ad1;-webkit-transform:translateY(-1px);-ms-transform:translateY(-1px);transform:translateY(-1px);text-decoration:none;color:#fff}.standalone-landing__cta--nav{font-size:.875rem!important;padding:.5rem 1.25rem!important}.standalone-landing__hero{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center;padding:5rem 2rem 4rem;background:linear-gradient(165deg,#f8fbff,#eef6ff 50%,#fff)}.standalone-landing__headline{font-family:Inter,Circular Bold,Arial,sans-serif;font-size:2.75rem;font-weight:700;line-height:1.2;color:#001433;max-width:640px;margin:0 0 1.25rem}@media (max-width:768px){.standalone-landing__headline{font-size:2rem}}.standalone-landing__description{font-size:1.15rem;line-height:1.6;color:#4b5563;max-width:520px;margin:0 0 2rem}.standalone-landing__features{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;padding:4rem 2.5rem;max-width:1100px;margin:0 auto}@media (max-width:768px){.standalone-landing__features{grid-template-columns:1fr;padding:2rem 1.5rem}}.standalone-landing__feature{text-align:center;padding:2rem 1.5rem;border-radius:10px;background:#f9fafb;border:1px solid #f0f0f0;-webkit-transition:-webkit-box-shadow .2s;transition:-webkit-box-shadow .2s;transition:box-shadow .2s;transition:box-shadow .2s,-webkit-box-shadow .2s}.standalone-landing__feature:hover{-webkit-box-shadow:0 4px 16px rgba(0,0,0,.06);box-shadow:0 4px 16px rgba(0,0,0,.06)}.standalone-landing__feature h3{font-family:Inter,Circular Bold,Arial,sans-serif;font-size:1.15rem;color:#001433;margin:0 0 .5rem}.standalone-landing__feature p{font-size:.925rem;color:#6b7280;line-height:1.5;margin:0}.standalone-landing__footer{text-align:center;padding:2rem;font-size:.85rem;color:#8b9197;border-top:1px solid #eee}.standalone-signup{min-height:calc(100vh - 80px);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:linear-gradient(165deg,#f8fbff,#eef6ff);padding:2rem 1rem;font-family:Inter,Circular Book,Arial,sans-serif}.standalone-setup__card,.standalone-signup__card{background:#fff;border-radius:12px;-webkit-box-shadow:0 4px 24px rgba(0,20,51,.08);box-shadow:0 4px 24px rgba(0,20,51,.08);padding:2.5rem;width:100%;max-width:440px}.standalone-signup__logo{display:block;height:28px;margin:0 auto 1.5rem}.standalone-setup__title,.standalone-signup__title{font-family:Inter,Circular Bold,Arial,sans-serif;font-size:1.5rem;font-weight:700;color:#001433;text-align:center;margin:0 0 .25rem}.standalone-setup__subtitle,.standalone-signup__subtitle{font-size:.925rem;color:#6b7280;text-align:center;margin:0 0 1.5rem}.standalone-signup__error{background:#fef2f2;color:#dc2626;border:1px solid #fecaca;border-radius:6px;padding:.625rem .875rem;font-size:.875rem;margin-bottom:1rem}.standalone-setup__field,.standalone-signup__field{margin-bottom:1.25rem}.standalone-setup__field label,.standalone-signup__field label{display:block;font-size:.85rem;font-weight:600;color:#001433;margin-bottom:.375rem}.standalone-setup__field input,.standalone-setup__field select,.standalone-signup__field input,.standalone-signup__field select{display:block;width:100%;padding:.625rem .75rem;font-size:.925rem;font-family:Inter,Circular Book,Arial,sans-serif;color:#001433;background:#fff;border:1px solid #d1d5db;border-radius:6px;-webkit-transition:border-color .15s,-webkit-box-shadow .15s;transition:border-color .15s,-webkit-box-shadow .15s;transition:border-color .15s,box-shadow .15s;transition:border-color .15s,box-shadow .15s,-webkit-box-shadow .15s;-webkit-box-sizing:border-box;box-sizing:border-box}.standalone-setup__field input::-webkit-input-placeholder,.standalone-setup__field select::-webkit-input-placeholder,.standalone-signup__field input::-webkit-input-placeholder,.standalone-signup__field select::-webkit-input-placeholder{color:#9ca3af}.standalone-setup__field input::-moz-placeholder,.standalone-setup__field select::-moz-placeholder,.standalone-signup__field input::-moz-placeholder,.standalone-signup__field select::-moz-placeholder{color:#9ca3af}.standalone-setup__field input:-ms-input-placeholder,.standalone-setup__field select:-ms-input-placeholder,.standalone-signup__field input:-ms-input-placeholder,.standalone-signup__field select:-ms-input-placeholder{color:#9ca3af}.standalone-setup__field input::-ms-input-placeholder,.standalone-setup__field select::-ms-input-placeholder,.standalone-signup__field input::-ms-input-placeholder,.standalone-signup__field select::-ms-input-placeholder{color:#9ca3af}.standalone-setup__field input::placeholder,.standalone-setup__field select::placeholder,.standalone-signup__field input::placeholder,.standalone-signup__field select::placeholder{color:#9ca3af}.standalone-setup__field input:focus,.standalone-setup__field select:focus,.standalone-signup__field input:focus,.standalone-signup__field select:focus{outline:none;border-color:#00a5fa;-webkit-box-shadow:0 0 0 3px rgba(0,165,250,.12);box-shadow:0 0 0 3px rgba(0,165,250,.12)}.standalone-signup__slug-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #d1d5db;border-radius:6px;overflow:hidden;-webkit-transition:border-color .15s,-webkit-box-shadow .15s;transition:border-color .15s,-webkit-box-shadow .15s;transition:border-color .15s,box-shadow .15s;transition:border-color .15s,box-shadow .15s,-webkit-box-shadow .15s}.standalone-signup__slug-wrapper:focus-within{border-color:#00a5fa;-webkit-box-shadow:0 0 0 3px rgba(0,165,250,.12);box-shadow:0 0 0 3px rgba(0,165,250,.12)}.standalone-signup__slug-wrapper .slug-suffix{padding:.625rem .75rem .625rem .625rem;font-size:.85rem;color:#6b7280;background:#f9fafb;border-left:1px solid #d1d5db;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.standalone-signup__slug-wrapper input{border:none!important;border-radius:0!important;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.standalone-signup__slug-status{font-size:.8rem;margin-top:.375rem}.standalone-signup__slug-status.available{color:#059669}.standalone-signup__slug-status.unavailable{color:#dc2626}.standalone-signup__slug-status.checking{color:#6b7280}.standalone-setup__submit,.standalone-signup__submit{display:block;width:100%;padding:.75rem;background:#00a5fa;color:#fff;font-family:Inter,Circular Bold,Arial,sans-serif;font-size:1rem;font-weight:600;border:none;border-radius:6px;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;margin-top:.5rem}.standalone-setup__submit:hover:not(:disabled),.standalone-signup__submit:hover:not(:disabled){background:#008ad1}.standalone-setup__submit:disabled,.standalone-signup__submit:disabled{opacity:.6;cursor:not-allowed}.standalone-signup__login-link{text-align:center;margin-top:1.25rem;font-size:.875rem;color:#6b7280}.standalone-signup__login-link a{color:#00a5fa;text-decoration:none;font-weight:500}.standalone-signup__login-link a:hover{text-decoration:underline}.standalone-setup{min-height:100vh;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:linear-gradient(165deg,#f8fbff,#eef6ff);padding:2rem 1rem;font-family:Inter,Circular Book,Arial,sans-serif}.standalone-setup__card{max-width:480px}.standalone-setup__logo-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:120px;border:2px dashed #d1d5db;border-radius:8px;cursor:pointer;-webkit-transition:border-color .15s;transition:border-color .15s;background:#f9fafb}.standalone-setup__logo-upload:hover{border-color:#00a5fa}.standalone-setup__logo-upload input[type=file]{display:none}.standalone-setup__logo-upload__preview{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain;border-radius:4px}.standalone-setup__logo-upload__text{font-size:.875rem;color:#9ca3af}.standalone-billing-complete__card{text-align:center}.standalone-billing-complete__spinner{width:40px;height:40px;margin:2rem auto;border:3px solid #e5e7eb;border-top-color:#00a5fa;border-radius:50%;-webkit-animation:sa-spin .7s linear infinite;animation:sa-spin .7s linear infinite}@-webkit-keyframes sa-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes sa-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.standalone-billing-complete__icon{width:56px;height:56px;margin:0 auto 1rem;background:#10b981;color:#fff;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:1.75rem;line-height:1}.standalone-billing-complete__help{margin-top:1rem;font-size:.85rem;color:#6b7280}.standalone-account{font-family:Inter,Circular Book,Arial,sans-serif;color:#001433;min-height:100vh;background:#f7f7f7;padding-bottom:3rem}.standalone-account__container{max-width:1200px;margin:0 auto;padding:0 1rem}.standalone-account__card{background:#fff;border-radius:10px;-webkit-box-shadow:0 2px 12px rgba(0,20,51,.06);box-shadow:0 2px 12px rgba(0,20,51,.06);padding:1.5rem;margin-bottom:1.5rem;height:100%}.standalone-account__card-title{font-family:Inter,Circular Bold,Arial,sans-serif;font-size:1.1rem;color:#001433;margin:0 0 1rem;padding-bottom:.75rem;border-bottom:1px solid #eee}.standalone-account__info-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:0}.standalone-account__info-grid>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.standalone-account__info-grid dt{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;margin-bottom:.2rem;font-weight:500}.standalone-account__info-grid dd{font-size:.95rem;color:#001433;font-weight:500;margin:0}@media (max-width:576px){.standalone-account__info-grid{grid-template-columns:1fr}}.standalone-account__badge{display:inline-block;padding:.2em .7em;border-radius:999px;font-size:.8rem;font-weight:600;text-transform:capitalize}.standalone-account__badge--active{background:#dcfce7;color:#166534}.standalone-account__badge--pending{background:#fef3c7;color:#92400e}.standalone-account__badge--inactive{background:#f3f4f6;color:#6b7280}.standalone-account__stat-group{display:-webkit-box;display:-ms-flexbox;display:flex;gap:1rem;margin-bottom:1.25rem}.standalone-account__stat{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;padding:1rem .5rem;background:#f7f7f7;border-radius:8px}.standalone-account__stat-value{font-family:Inter,Circular Bold,Arial,sans-serif;font-size:2rem;color:#00a5fa;line-height:1;margin-bottom:.25rem}.standalone-account__stat-label{font-size:.8rem;color:#6b7280;text-transform:uppercase;letter-spacing:.03em}.standalone-account__feature-list{list-style:none;padding:0;margin:0}.standalone-account__feature-list li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.6rem;padding:.5rem 0;border-bottom:1px solid #f3f4f6;font-size:.92rem}.standalone-account__feature-list li:last-child{border-bottom:none}.standalone-account__check-icon{color:#00a5fa;font-size:1.1rem;-ms-flex-negative:0;flex-shrink:0}.standalone-account__addons{margin-top:1.25rem;padding-top:1.25rem;border-top:1px solid #e5e7eb}.standalone-account__addons-title{font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;margin:0 0 .75rem}.standalone-account__addon-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:.6rem;background:#fafbfc;-webkit-transition:border-color .15s,background .15s;transition:border-color .15s,background .15s}.standalone-account__addon-card:hover{border-color:#d1d5db;background:#f3f4f6}.standalone-account__addon-card--enabled{border-color:#bbf7d0;background:#f0fdf4}.standalone-account__addon-card--enabled:hover{background:#ecfdf5}.standalone-account__addon-info{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.standalone-account__addon-name{font-weight:600;font-size:.92rem;color:#1f2937}.standalone-account__addon-desc{font-size:.8rem;color:#6b7280;margin-top:.15rem;line-height:1.3}.standalone-account__addon-action{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;gap:.4rem;-ms-flex-negative:0;flex-shrink:0}.standalone-account__addon-price{font-size:1rem;font-weight:700;color:#1f2937}.standalone-account__addon-price span{font-size:.75rem;font-weight:400;color:#9ca3af}.standalone-account__addon-btn{font-size:.8rem!important;padding:.3rem 1rem!important;min-width:70px}.standalone-account__invoice-table{width:100%;border-collapse:collapse}.standalone-account__invoice-table th{text-align:left;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;padding:.6rem .75rem;border-bottom:2px solid #e5e7eb;font-weight:600}.standalone-account__invoice-table td{padding:.7rem .75rem;border-bottom:1px solid #f3f4f6;font-size:.92rem}.standalone-account__invoice-table tbody tr:hover{background:#fafbfc}.standalone-account__invoice-total{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem .75rem 0;margin-top:.5rem;border-top:2px solid #001433;font-family:Inter,Circular Bold,Arial,sans-serif;font-size:1rem}.standalone-account__payment-method{background:#f7f7f7;border-radius:8px;padding:1rem 1.25rem;margin-top:1rem}.standalone-account__payment-method-label{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;font-weight:500;margin-bottom:.35rem}.standalone-account__payment-method-detail{font-size:.95rem;font-weight:500;color:#001433}.standalone-account__payment-method-exp{color:#6b7280;font-weight:400}.standalone-account__placeholder{border:2px dashed #d1d5db;border-radius:8px;padding:1.25rem;text-align:center;color:#9ca3af;font-size:.9rem;margin:1rem 0}.standalone-account__empty{text-align:center;padding:2rem 1rem;color:#9ca3af;font-size:.92rem}.sa-trigger-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:0}.sa-trigger-item{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:.625rem;overflow:hidden;-webkit-transition:-webkit-box-shadow .15s;transition:-webkit-box-shadow .15s;transition:box-shadow .15s;transition:box-shadow .15s,-webkit-box-shadow .15s}.sa-trigger-item:hover{-webkit-box-shadow:0 2px 8px rgba(0,20,51,.06);box-shadow:0 2px 8px rgba(0,20,51,.06)}.sa-trigger-item--expanded{border-color:#00a5fa;-webkit-box-shadow:0 2px 12px rgba(0,165,250,.1);box-shadow:0 2px 12px rgba(0,165,250,.1)}.sa-trigger-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.875rem 1rem;cursor:pointer;gap:1rem}.sa-trigger-item__header:hover{background:#fafbfc}.sa-trigger-item__left{-ms-flex-align:center;gap:.75rem;min-width:0;-webkit-box-flex:1;-ms-flex:1;flex:1}.sa-trigger-item__icon,.sa-trigger-item__left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center}.sa-trigger-item__icon{width:32px;height:32px;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:rgba(0,165,250,.1);color:#00a5fa;border-radius:6px;font-size:.9rem;-ms-flex-negative:0;flex-shrink:0}.sa-trigger-item__name{font-weight:600;font-size:.92rem;color:#001433;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem}.sa-trigger-item__default-badge{display:inline-block;padding:.1em .5em;border-radius:4px;font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:#ede9fe;color:#7c3aed}.sa-trigger-item__condition{font-size:.8rem;color:#6b7280;margin-top:2px}.sa-trigger-item__right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.75rem;-ms-flex-negative:0;flex-shrink:0}.sa-trigger-item__app{font-size:.8rem;color:#374151;background:#f3f4f6;padding:.25em .6em;border-radius:4px;white-space:nowrap}.sa-trigger-item__fired-count{font-size:.8rem;color:#059669;font-weight:500}.sa-trigger-item__body{border-top:1px solid #e5e7eb;padding:.875rem 1rem;background:#fafbfc}.sa-trigger-item__config-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:.75rem;font-size:.85rem;color:#4b5563}.sa-trigger-item__executions{margin-top:.5rem}.sa-trigger-item__exec-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;margin-bottom:.5rem;font-weight:600}.sa-trigger-item__exec-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.75rem;padding:.5rem .625rem;border-radius:6px;cursor:pointer;-webkit-transition:background .1s;transition:background .1s}.sa-trigger-item__exec-row:hover{background:#e5e7eb}.sa-trigger-item__exec-summary{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.82rem;color:#374151;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sa-trigger-item__exec-time{font-size:.75rem;color:#9ca3af;white-space:nowrap}.sa-activity-feed{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.sa-activity-feed,.sa-activity-item{display:-webkit-box;display:-ms-flexbox;display:flex}.sa-activity-item{gap:.75rem;padding:.625rem 0;border-bottom:1px solid #f3f4f6;cursor:pointer;-webkit-transition:background .1s;transition:background .1s}.sa-activity-item:last-child{border-bottom:none}.sa-activity-item:hover{background:#fafbfc}.sa-activity-item__dot{width:8px;height:8px;border-radius:50%;-ms-flex-negative:0;flex-shrink:0;margin-top:6px}.sa-activity-item__dot--success{background:#059669}.sa-activity-item__dot--failed{background:#dc2626}.sa-activity-item__content{min-width:0;-webkit-box-flex:1;-ms-flex:1;flex:1}.sa-activity-item__title{font-size:.85rem;font-weight:600;color:#001433;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem}.sa-activity-item__app-tag{font-size:.7rem;font-weight:500;color:#6b7280;background:#f3f4f6;padding:.1em .45em;border-radius:3px}.sa-activity-item__summary{font-size:.8rem;color:#4b5563;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sa-activity-item__time{font-size:.72rem;color:#9ca3af;margin-top:2px}.sa-execution-detail{position:fixed;top:0;right:0;width:420px;max-width:90vw;height:100vh;background:#fff;-webkit-box-shadow:-4px 0 24px rgba(0,20,51,.12);box-shadow:-4px 0 24px rgba(0,20,51,.12);z-index:1050;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.sa-execution-detail,.sa-execution-detail__header{display:-webkit-box;display:-ms-flexbox;display:flex}.sa-execution-detail__header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid #e5e7eb}.sa-execution-detail__header h3{margin:0;font-family:Inter,Circular Bold,Arial,sans-serif;font-size:1.1rem;color:#001433}.sa-execution-detail__close{background:none;border:none;font-size:1.5rem;color:#6b7280;cursor:pointer;padding:0;line-height:1}.sa-execution-detail__close:hover{color:#001433}.sa-execution-detail__body{padding:1.5rem;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1;flex:1}.sa-execution-detail__config,.sa-execution-detail__summary{margin-top:1.25rem}.sa-execution-detail__config dt,.sa-execution-detail__summary dt{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;margin-bottom:.35rem;font-weight:600}.sa-execution-detail__config dd,.sa-execution-detail__summary dd{font-size:.9rem;color:#001433;margin:0}.sa-execution-detail__config pre,.sa-execution-detail__summary pre{background:#f3f4f6;border-radius:6px;padding:.75rem;font-size:.8rem;overflow-x:auto;margin:0}.sa-trigger-type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem}.sa-trigger-type-option{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem;padding:1.25rem .75rem;border:2px solid #e5e7eb;border-radius:8px;background:#fff;cursor:pointer;-webkit-transition:border-color .15s,background .15s;transition:border-color .15s,background .15s}.sa-trigger-type-option i{font-size:1.25rem;color:#6b7280}.sa-trigger-type-option span{font-size:.82rem;font-weight:600;color:#001433}.sa-trigger-type-option:hover{border-color:#00a5fa;background:rgba(0,165,250,.03)}.sa-trigger-type-option--selected{border-color:#00a5fa;background:rgba(0,165,250,.06)}.sa-trigger-type-option--selected i{color:#00a5fa}.sa-app-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.5rem}.sa-app-list,.sa-app-option{display:-webkit-box;display:-ms-flexbox;display:flex}.sa-app-option{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.75rem;padding:.75rem 1rem;border:2px solid #e5e7eb;border-radius:8px;background:#fff;cursor:pointer;text-align:left;width:100%;-webkit-transition:border-color .15s;transition:border-color .15s}.sa-app-option i{font-size:1.1rem;color:#6b7280;width:28px;text-align:center;-ms-flex-negative:0;flex-shrink:0}.sa-app-option:hover{border-color:#00a5fa}.sa-app-option--selected{border-color:#00a5fa;background:rgba(0,165,250,.04)}.sa-app-option--selected i{color:#00a5fa}.sa-app-option__name{font-weight:600;font-size:.88rem;color:#001433}.sa-app-option__desc{font-size:.78rem;color:#6b7280;margin-top:1px}.lw-skeleton{display:block;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e9edf1),color-stop(37%,#f3f6f9),color-stop(63%,#e9edf1));background:linear-gradient(90deg,#e9edf1 25%,#f3f6f9 37%,#e9edf1 63%);background-size:400% 100%;border-radius:4px;-webkit-animation:lw-skeleton-shimmer 1.4s ease infinite;animation:lw-skeleton-shimmer 1.4s ease infinite;height:12px}.lw-skeleton-line,.lw-skeleton.line{width:100%}.lw-skeleton-line.sm{height:10px}.lw-skeleton-line.md{height:14px}.lw-skeleton-line.lg{height:18px}@-webkit-keyframes lw-skeleton-shimmer{0%{background-position:100% 0}to{background-position:0 0}}@keyframes lw-skeleton-shimmer{0%{background-position:100% 0}to{background-position:0 0}}.workflow-step-item{list-style:none}.workflow-step-link{border-radius:8px;-webkit-transition:background-color .15s ease-in-out,color .15s ease-in-out,border-color .15s ease-in-out;transition:background-color .15s ease-in-out,color .15s ease-in-out,border-color .15s ease-in-out}.workflow-step-link:hover{background-color:#f5f7fb!important;color:#0a0a0a!important;border-color:#cfd6df!important}.workflow-step-link:hover .workflow-step-arrow,.workflow-step-link:hover .workflow-step-percent{color:#0a0a0a}.workflow-step-link.active{background-color:#f5f7fb!important}.calendly-overlay .calendly-popup{background:#fafafa!important}.progress{background:#fff;border-radius:1rem}.container-wide{padding-left:2rem;padding-right:2rem;max-width:992px}@media (min-width:1200px){.container-wide{padding-left:1rem;padding-right:1rem;max-width:1200px}}@media (min-width:1400px){.container-wide{padding-left:1rem;padding-right:1rem;max-width:1400px}}.system-banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;padding:.625rem 1rem;font-size:.875rem;font-weight:500;line-height:1.4;border-bottom:1px solid rgba(0,0,0,0);position:relative}.system-banner__message{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;padding:0 2rem}.system-banner__dismiss{position:absolute;right:1rem;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);background:none;border:none;padding:.25rem .5rem;cursor:pointer;opacity:.6;font-size:.875rem;color:inherit}.system-banner__dismiss:focus,.system-banner__dismiss:hover{opacity:1}.system-banner__dismiss:focus{outline:2px solid currentColor;outline-offset:2px;border-radius:2px}.system-banner--success{background-color:#d4edda;border-bottom-color:#c3e6cb;color:#155724}.system-banner--warning{background-color:#fff3cd;border-bottom-color:#ffeeba;color:#856404}.system-banner--error{background-color:#f8d7da;border-bottom-color:#f5c6cb;color:#721c24}.container-wide.container-wide--modern{max-width:80vw}.dynamic-sidebar-container{background-color:#f0f0f0;margin-top:-1rem;margin-bottom:1rem;padding:0}@media (min-width:992px){.dynamic-sidebar-container{margin-top:1rem;padding:2rem 3rem}}.dynamic-sidebar-container.dynamic-sidebar-container--non-a4cb{background-color:rgba(0,0,0,0);margin-top:0;margin-bottom:0;padding:0}@media (min-width:992px){.dynamic-sidebar-container.dynamic-sidebar-container--non-a4cb{margin-top:1rem;padding:.5rem 0 1rem}}.dynamic-sidebar-container .dynamic-sidebar-assistant-frame{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-left:0;margin-right:0;width:100%;min-width:0;height:min(70dvh,max(20rem,100dvh - 14rem))}@media (min-width:768px){.dynamic-sidebar-container .dynamic-sidebar-assistant-frame{height:min(70dvh,max(22rem,100dvh - 12rem))}}@media (min-width:992px){.dynamic-sidebar-container .dynamic-sidebar-assistant-frame{height:min(70vh,max(24rem,100vh - 8rem))}}@media (min-width:1200px){.dynamic-sidebar-container .dynamic-sidebar-assistant-frame{height:min(70vh,max(24rem,100vh - 7.5rem))}}body.lw-assistant-embedded-fullscreen-active .agreement-questionnaire-dynamic-sidebar-column-wrap{z-index:100002!important}.assistant-opt-in-flow img.assistant-opt-in-screenshot-img{background:rgba(0,0,0,0)!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;outline:none!important}.assistant-opt-in-flow ul.assistant-opt-in-key-things-list{list-style-type:disc!important;list-style-position:outside;padding-left:1.5rem}.assistant-opt-in-flow ul.assistant-opt-in-key-things-list li{display:list-item}.dc-criteria-panel,.dc-criteria-risk-legend{font-size:1.2rem}.dc-criteria-risk-legend .dc-criteria-risk-badge,.dc-criteria-risk-legend .sv_q,.dc-criteria-risk-legend .sv_q *,.dc-criteria-risk-legend table,.dc-criteria-risk-legend table div,.dc-criteria-risk-legend table p,.dc-criteria-risk-legend table td,.dc-criteria-risk-legend table th{font-size:1.2rem!important;line-height:1.45}.dc-criteria-risk-legend table p,.dc-criteria-risk-legend table td,.dc-criteria-risk-legend table th{white-space:normal!important}.dc-criteria-panel{overflow-x:visible!important;padding-bottom:1rem}.dc-criteria-panel .sv_q{min-height:auto!important;height:auto!important}.dc-criteria-panel .panel-body,.dc-criteria-panel .sv_p_container,.dc-criteria-panel .sv_panel_content,.dc-criteria-panel .sv_pcontent{display:block!important;min-width:0!important}.dc-criteria-panel .dc-criterion-slot{float:none!important;width:100%!important;max-width:none!important;min-width:0!important;margin:0!important;padding:0!important}.dc-criteria-panel .dc-criterion-block,.dc-criteria-panel .dc-criterion-block *,.dc-criteria-panel .sv_q_description,.dc-criteria-panel .sv_q_title{font-size:1.2rem!important;line-height:1.45;white-space:normal!important}.dc-criteria-panel .dc-criterion-block{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;overflow-wrap:anywhere;background:#fff}.dc-criteria-panel .dc-criterion-slot:not([class*=dc-criterion--]){display:none!important}.dc-criteria-panel .dc-criterion-slot[class*=dc-criterion--]{border-left:1px solid #d9e2ec;border-right:1px solid #d9e2ec;background:#fff}.dc-criteria-panel .dc-criterion-slot--category[class*=dc-criterion--]{margin-top:2rem!important;border-top:1px solid #d9e2ec;border-top-left-radius:1.2rem;border-top-right-radius:1.2rem;overflow:hidden;-webkit-box-shadow:0 2px 8px rgba(15,23,42,.06);box-shadow:0 2px 8px rgba(15,23,42,.06)}.dc-criteria-panel .dc-criterion-slot--verified[class*=dc-criterion--]{border-bottom:1px solid #d9e2ec;border-bottom-left-radius:1.2rem;border-bottom-right-radius:1.2rem;overflow:hidden;-webkit-box-shadow:0 2px 8px rgba(15,23,42,.06);box-shadow:0 2px 8px rgba(15,23,42,.06);margin-bottom:.5rem}.dc-criteria-panel .dc-criterion-slot--category[class*=dc-criterion--] .dc-criterion-block,.dc-criteria-panel .dc-criterion-slot--eval[class*=dc-criterion--] .dc-criterion-block,.dc-criteria-panel .dc-criterion-slot--notes[class*=dc-criterion--] .dc-criterion-block,.dc-criteria-panel .dc-criterion-slot--process[class*=dc-criterion--] .dc-criterion-block,.dc-criteria-panel .dc-criterion-slot--risk[class*=dc-criterion--] .dc-criterion-block{padding:1.2rem!important}.dc-criteria-panel .dc-criterion-slot--category[class*=dc-criterion--] .dc-criterion-block:before,.dc-criteria-panel .dc-criterion-slot--eval[class*=dc-criterion--] .dc-criterion-block:before,.dc-criteria-panel .dc-criterion-slot--notes[class*=dc-criterion--] .dc-criterion-block:before,.dc-criteria-panel .dc-criterion-slot--process[class*=dc-criterion--] .dc-criterion-block:before,.dc-criteria-panel .dc-criterion-slot--risk[class*=dc-criterion--] .dc-criterion-block:before,.dc-criteria-panel .dc-criterion-slot--verified[class*=dc-criterion--]:before{display:block;margin-bottom:.75rem;color:#486581;font-size:1rem!important;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.dc-criteria-panel .dc-criterion-slot--category[class*=dc-criterion--] .dc-criterion-block:before{content:"Loan Criteria Category"}.dc-criteria-panel .dc-criterion-slot--risk[class*=dc-criterion--] .dc-criterion-block:before{content:"Risk Levels / Action Steps"}.dc-criteria-panel .dc-criterion-slot--process[class*=dc-criterion--] .dc-criterion-block:before{content:"Review Process"}.dc-criteria-panel .dc-criterion-slot--notes[class*=dc-criterion--] .dc-criterion-block:before{content:"Additional Review Notes"}.dc-criteria-panel .dc-criterion-slot--eval[class*=dc-criterion--] .dc-criterion-block:before{content:"Evaluation Data"}.dc-criteria-panel .dc-criterion-slot--verified[class*=dc-criterion--]:before{content:"Verified";padding:1.2rem 1.2rem 0}.dc-criteria-panel .dc-criterion-slot--verified[class*=dc-criterion--] .sv_q{width:100%;padding:0 1.2rem 1.2rem;border-top:1px solid #eee}.dc-criteria-panel .dc-criterion-slot--verified[class*=dc-criterion--] .sv_q_title{display:none!important}.dc-criteria-panel .dc-criterion-slot--verified .form-control,.dc-criteria-panel .dc-criterion-slot--verified .react-select-input-group,.dc-criteria-panel .dc-criterion-slot--verified .react-select-input-group-xsmall__control,.dc-criteria-panel .dc-criterion-slot--verified .react-select-input-group__control,.dc-criteria-panel .dc-criterion-slot--verified select{width:100%;font-size:1.2rem!important;min-height:4.4rem}.dc-criteria-panel .dc-indicator-green{background:#28a745!important;color:#fff!important}.dc-criteria-panel .dc-indicator-yellow{background:#ffc107!important;color:#1a1a1a!important}.dc-criteria-panel .dc-indicator-orange{background:#fd7e14!important;color:#fff!important}.dc-criteria-panel .dc-indicator-red{background:#dc3545!important;color:#fff!important}.dc-criteria-panel .dc-indicator-notevaluated,.dc-criteria-panel .dc-indicator-notEvaluated{background:#6c757d!important;color:#fff!important}.root{text-align:center}.toolbar{display:inline-block}.Toastify__toast-container{z-index:9999;-webkit-transform:translateZ(9999px);position:fixed;padding:4px;width:320px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff}.Toastify__toast-container--top-left{top:1em;left:1em}.Toastify__toast-container--top-center{top:1em;left:50%;margin-left:-160px}.Toastify__toast-container--top-right{top:1em;right:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;margin-left:-160px}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{width:100vw;padding:0;left:0;margin:0}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0}.Toastify__toast-container--rtl{right:0;left:auto}}.Toastify__toast{position:relative;min-height:64px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:1rem;padding:8px;border-radius:1px;-webkit-box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-pack:justify;-webkit-box-pack:justify;justify-content:space-between;max-height:800px;overflow:hidden;font-family:sans-serif;cursor:pointer;direction:ltr}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--default{background:#fff;color:#aaa}.Toastify__toast--info{background:#3498db}.Toastify__toast--success{background:#07bc0c}.Toastify__toast--warning{background:#f1c40f}.Toastify__toast--error{background:#e74c3c}.Toastify__toast-body{margin:auto 0;-ms-flex:1;-webkit-box-flex:1;flex:1}@media only screen and (max-width:480px){.Toastify__toast{margin-bottom:0}}.Toastify__close-button{color:#fff;font-weight:700;font-size:14px;background:rgba(0,0,0,0);outline:none;border:none;padding:0;cursor:pointer;opacity:.7;-webkit-transition:.3s ease;transition:.3s ease;-ms-flex-item-align:start;align-self:flex-start}.Toastify__close-button--default{color:#000;opacity:.3}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:9999;opacity:.7;background-color:hsla(0,0%,100%,.7);-webkit-transform-origin:left;-ms-transform-origin:left;transform-origin:left}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{right:0;left:auto;-webkit-transform-origin:right;-ms-transform-origin:right;transform-origin:right}.Toastify__progress-bar--default{background:-webkit-gradient(linear,left top,right top,from(#4cd964),color-stop(#5ac8fa),color-stop(#007aff),color-stop(#34aadc),color-stop(#5856d6),to(#ff2d55));background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55)}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0)}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0)}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0)}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0)}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0)}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0)}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0)}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0)}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}.pretty *{-webkit-box-sizing:border-box;box-sizing:border-box}.pretty input:not([type=checkbox]):not([type=radio]){display:none}.pretty{position:relative;display:inline-block;margin-right:1em;white-space:nowrap;line-height:1}.pretty input{position:absolute;left:0;top:0;min-width:1em;width:100%;height:100%;z-index:2;opacity:0;margin:0;padding:0;cursor:pointer}.pretty .state label{position:static;display:inline-block;font-weight:400;margin:0;text-indent:1.5em;min-width:calc(1em + 2px)}.pretty .state label:after,.pretty .state label:before{content:"";width:calc(1em + 2px);height:calc(1em + 2px);display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:0;border:1px solid rgba(0,0,0,0);z-index:0;position:absolute;left:0;top:calc(-108% + 1em);background-color:rgba(0,0,0,0)}.pretty .state label:before{border-color:#bdc3c7}.pretty .state.p-is-hover,.pretty .state.p-is-indeterminate{display:none}@-webkit-keyframes zoom{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes zoom{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@-webkit-keyframes tada{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:scale(7);transform:scale(7)}38%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;opacity:1;-webkit-transform:scale(1);transform:scale(1)}55%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.5);transform:scale(1.5)}72%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}81%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.24);transform:scale(1.24)}89%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}95%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.04);transform:scale(1.04)}to{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}}@keyframes tada{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:scale(7);transform:scale(7)}38%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;opacity:1;-webkit-transform:scale(1);transform:scale(1)}55%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.5);transform:scale(1.5)}72%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}81%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.24);transform:scale(1.24)}89%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}95%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.04);transform:scale(1.04)}to{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes jelly{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}40%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}50%{-webkit-transform:scale3d(.85,1.15,1);transform:scale3d(.85,1.15,1)}65%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}75%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes jelly{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}40%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}50%{-webkit-transform:scale3d(.85,1.15,1);transform:scale3d(.85,1.15,1)}65%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}75%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes rotate{0%{opacity:0;-webkit-transform:translateZ(-200px) rotate(-45deg);transform:translateZ(-200px) rotate(-45deg)}to{opacity:1;-webkit-transform:translateZ(0) rotate(0);transform:translateZ(0) rotate(0)}}@keyframes rotate{0%{opacity:0;-webkit-transform:translateZ(-200px) rotate(-45deg);transform:translateZ(-200px) rotate(-45deg)}to{opacity:1;-webkit-transform:translateZ(0) rotate(0);transform:translateZ(0) rotate(0)}}@-webkit-keyframes pulse{0%{-webkit-box-shadow:0 0 0 0 #bdc3c7;box-shadow:0 0 0 0 #bdc3c7}to{-webkit-box-shadow:0 0 0 1.5em rgba(189,195,199,0);box-shadow:0 0 0 1.5em rgba(189,195,199,0)}}@keyframes pulse{0%{-webkit-box-shadow:0 0 0 0 #bdc3c7;box-shadow:0 0 0 0 #bdc3c7}to{-webkit-box-shadow:0 0 0 1.5em rgba(189,195,199,0);box-shadow:0 0 0 1.5em rgba(189,195,199,0)}}.pretty.p-default.p-fill .state label:after{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.pretty.p-default .state label:after{-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.pretty.p-default input:checked~.state label:after{background-color:#bdc3c7!important}.pretty.p-default.p-thick .state label:after,.pretty.p-default.p-thick .state label:before{border-width:.1428571429em}.pretty.p-default.p-thick .state label:after{-webkit-transform:scale(.4)!important;-ms-transform:scale(.4)!important;transform:scale(.4)!important}.pretty.p-icon .state .icon{position:absolute;font-size:1em;width:calc(1em + 2px);height:calc(1em + 2px);left:0;z-index:1;text-align:center;line-height:normal;top:calc(-108% + 1em);border:1px solid rgba(0,0,0,0);opacity:0}.pretty.p-icon .state .icon:before{margin:0;width:100%;height:100%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1}.pretty.p-icon input:checked~.state .icon{opacity:1}.pretty.p-icon input:checked~.state label:before{border-color:#5a656b}.pretty.p-svg .state .svg{position:absolute;font-size:1em;width:calc(1em + 2px);height:calc(1em + 2px);left:0;z-index:1;text-align:center;line-height:normal;top:calc(-108% + 1em);border:1px solid rgba(0,0,0,0);opacity:0}.pretty.p-svg .state svg{margin:0;width:100%;height:100%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1}.pretty.p-svg input:checked~.state .svg{opacity:1}.pretty.p-image .state img{opacity:0;position:absolute;width:calc(1em + 2px);height:calc(1em + 2px);top:0;top:calc(-108% + 1em);left:0;z-index:0;text-align:center;line-height:normal;-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-image input:checked~.state img{opacity:1}.pretty.p-switch input{min-width:2em}.pretty.p-switch .state{position:relative}.pretty.p-switch .state:before{content:"";border:1px solid #bdc3c7;border-radius:60px;width:2em;-webkit-box-sizing:unset;box-sizing:unset;height:calc(1em + 2px);position:absolute;top:0;top:calc(-116% + 1em);z-index:0;-webkit-transition:all .5s ease;transition:all .5s ease}.pretty.p-switch .state label{text-indent:2.5em}.pretty.p-switch .state label:after,.pretty.p-switch .state label:before{-webkit-transition:all .5s ease;transition:all .5s ease;border-radius:100%;left:0;border-color:rgba(0,0,0,0);-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-switch .state label:after{background-color:#bdc3c7!important}.pretty.p-switch input:checked~.state:before{border-color:#5a656b}.pretty.p-switch input:checked~.state label:before{opacity:0}.pretty.p-switch input:checked~.state label:after{background-color:#5a656b!important;left:1em}.pretty.p-switch.p-fill input:checked~.state:before{border-color:#5a656b;background-color:#5a656b!important}.pretty.p-switch.p-fill input:checked~.state label:before{opacity:0}.pretty.p-switch.p-fill input:checked~.state label:after{background-color:#fff!important;left:1em}.pretty.p-switch.p-slim .state:before{height:.1em;background:#bdc3c7!important;top:calc(50% - .1em)}.pretty.p-switch.p-slim input:checked~.state:before{border-color:#5a656b;background-color:#5a656b!important}.pretty.p-has-hover input:hover~.state:not(.p-is-hover){display:none}.pretty.p-has-hover input:hover~.state.p-is-hover{display:block}.pretty.p-has-hover input:hover~.state.p-is-hover .icon{display:block}.pretty.p-has-focus input:focus~.state label:before{-webkit-box-shadow:0 0 3px 0 #bdc3c7;box-shadow:0 0 3px 0 #bdc3c7}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state:not(.p-is-indeterminate){display:none}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state.p-is-indeterminate{display:block}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state.p-is-indeterminate .icon{display:block;opacity:1}.pretty.p-toggle .state.p-on{opacity:0;display:none}.pretty.p-toggle .state .icon,.pretty.p-toggle .state.p-off,.pretty.p-toggle .state .svg,.pretty.p-toggle .state img{opacity:1;display:inherit}.pretty.p-toggle .state.p-off .icon{color:#bdc3c7}.pretty.p-toggle input:checked~.state.p-on{opacity:1;display:inherit}.pretty.p-toggle input:checked~.state.p-off{opacity:0;display:none}.pretty.p-plain.p-toggle .state label:before,.pretty.p-plain input:checked~.state label:before{content:none}.pretty.p-plain.p-plain .icon{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.pretty.p-round .state label:after,.pretty.p-round .state label:before{border-radius:100%}.pretty.p-round.p-icon .state .icon{border-radius:100%;overflow:hidden}.pretty.p-round.p-icon .state .icon:before{-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-curve .state label:after,.pretty.p-curve .state label:before{border-radius:20%}.pretty.p-smooth .icon,.pretty.p-smooth .svg,.pretty.p-smooth label:after,.pretty.p-smooth label:before{-webkit-transition:all .5s ease;transition:all .5s ease}.pretty.p-smooth input:checked+.state label:after{-webkit-transition:all .3s ease;transition:all .3s ease}.pretty.p-smooth input:checked+.state .icon,.pretty.p-smooth input:checked+.state .svg,.pretty.p-smooth input:checked+.state img{-webkit-animation:zoom .2s ease;animation:zoom .2s ease}.pretty.p-smooth.p-default input:checked+.state label:after{-webkit-animation:zoom .2s ease;animation:zoom .2s ease}.pretty.p-smooth.p-plain input:checked+.state label:before{content:"";-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:all .5s ease;transition:all .5s ease}.pretty.p-tada:not(.p-default) input:checked+.state .icon,.pretty.p-tada:not(.p-default) input:checked+.state .svg,.pretty.p-tada:not(.p-default) input:checked+.state img,.pretty.p-tada:not(.p-default) input:checked+.state label:after,.pretty.p-tada:not(.p-default) input:checked+.state label:before{-webkit-animation:tada .7s cubic-bezier(.25,.46,.45,.94) 1 alternate;animation:tada .7s cubic-bezier(.25,.46,.45,.94) 1 alternate;opacity:1}.pretty.p-jelly:not(.p-default) input:checked+.state .icon,.pretty.p-jelly:not(.p-default) input:checked+.state .svg,.pretty.p-jelly:not(.p-default) input:checked+.state img,.pretty.p-jelly:not(.p-default) input:checked+.state label:after,.pretty.p-jelly:not(.p-default) input:checked+.state label:before{-webkit-animation:jelly .7s cubic-bezier(.25,.46,.45,.94);animation:jelly .7s cubic-bezier(.25,.46,.45,.94);opacity:1}.pretty.p-jelly:not(.p-default) input:checked+.state label:before{border-color:rgba(0,0,0,0)}.pretty.p-rotate:not(.p-default) input:checked~.state .icon,.pretty.p-rotate:not(.p-default) input:checked~.state .svg,.pretty.p-rotate:not(.p-default) input:checked~.state img,.pretty.p-rotate:not(.p-default) input:checked~.state label:after,.pretty.p-rotate:not(.p-default) input:checked~.state label:before{-webkit-animation:rotate .7s cubic-bezier(.25,.46,.45,.94);animation:rotate .7s cubic-bezier(.25,.46,.45,.94);opacity:1}.pretty.p-rotate:not(.p-default) input:checked~.state label:before{border-color:rgba(0,0,0,0)}.pretty.p-pulse:not(.p-switch) input:checked~.state label:before{-webkit-animation:pulse 1s;animation:pulse 1s}.pretty input[disabled]{cursor:not-allowed;display:none}.pretty input[disabled]~*{opacity:.5}.pretty.p-locked input{display:none;cursor:not-allowed}.pretty.p-toggle .state.p-primary label:after,.pretty input:checked~.state.p-primary label:after{background-color:#428bca!important}.pretty.p-toggle .state.p-primary .icon,.pretty.p-toggle .state.p-primary .svg,.pretty input:checked~.state.p-primary .icon,.pretty input:checked~.state.p-primary .svg{color:#fff;stroke:#fff}.pretty.p-toggle .state.p-primary-o label:before,.pretty input:checked~.state.p-primary-o label:before{border-color:#428bca}.pretty.p-toggle .state.p-primary-o label:after,.pretty input:checked~.state.p-primary-o label:after{background-color:rgba(0,0,0,0)}.pretty.p-toggle .state.p-primary-o .icon,.pretty.p-toggle .state.p-primary-o .svg,.pretty.p-toggle .state.p-primary-o svg,.pretty input:checked~.state.p-primary-o .icon,.pretty input:checked~.state.p-primary-o .svg,.pretty input:checked~.state.p-primary-o svg{color:#428bca;stroke:#428bca}.pretty.p-default:not(.p-fill) input:checked~.state.p-primary-o label:after{background-color:#428bca!important}.pretty.p-switch input:checked~.state.p-primary:before{border-color:#428bca}.pretty.p-switch.p-fill input:checked~.state.p-primary:before{background-color:#428bca!important}.pretty.p-switch.p-slim input:checked~.state.p-primary:before{border-color:#245682;background-color:#245682!important}.pretty.p-toggle .state.p-info label:after,.pretty input:checked~.state.p-info label:after{background-color:#5bc0de!important}.pretty.p-toggle .state.p-info .icon,.pretty.p-toggle .state.p-info .svg,.pretty input:checked~.state.p-info .icon,.pretty input:checked~.state.p-info .svg{color:#fff;stroke:#fff}.pretty.p-toggle .state.p-info-o label:before,.pretty input:checked~.state.p-info-o label:before{border-color:#5bc0de}.pretty.p-toggle .state.p-info-o label:after,.pretty input:checked~.state.p-info-o label:after{background-color:rgba(0,0,0,0)}.pretty.p-toggle .state.p-info-o .icon,.pretty.p-toggle .state.p-info-o .svg,.pretty.p-toggle .state.p-info-o svg,.pretty input:checked~.state.p-info-o .icon,.pretty input:checked~.state.p-info-o .svg,.pretty input:checked~.state.p-info-o svg{color:#5bc0de;stroke:#5bc0de}.pretty.p-default:not(.p-fill) input:checked~.state.p-info-o label:after{background-color:#5bc0de!important}.pretty.p-switch input:checked~.state.p-info:before{border-color:#5bc0de}.pretty.p-switch.p-fill input:checked~.state.p-info:before{background-color:#5bc0de!important}.pretty.p-switch.p-slim input:checked~.state.p-info:before{border-color:#2390b0;background-color:#2390b0!important}.pretty.p-toggle .state.p-success label:after,.pretty input:checked~.state.p-success label:after{background-color:#5cb85c!important}.pretty.p-toggle .state.p-success .icon,.pretty.p-toggle .state.p-success .svg,.pretty input:checked~.state.p-success .icon,.pretty input:checked~.state.p-success .svg{color:#fff;stroke:#fff}.pretty.p-toggle .state.p-success-o label:before,.pretty input:checked~.state.p-success-o label:before{border-color:#5cb85c}.pretty.p-toggle .state.p-success-o label:after,.pretty input:checked~.state.p-success-o label:after{background-color:rgba(0,0,0,0)}.pretty.p-toggle .state.p-success-o .icon,.pretty.p-toggle .state.p-success-o .svg,.pretty.p-toggle .state.p-success-o svg,.pretty input:checked~.state.p-success-o .icon,.pretty input:checked~.state.p-success-o .svg,.pretty input:checked~.state.p-success-o svg{color:#5cb85c;stroke:#5cb85c}.pretty.p-default:not(.p-fill) input:checked~.state.p-success-o label:after{background-color:#5cb85c!important}.pretty.p-switch input:checked~.state.p-success:before{border-color:#5cb85c}.pretty.p-switch.p-fill input:checked~.state.p-success:before{background-color:#5cb85c!important}.pretty.p-switch.p-slim input:checked~.state.p-success:before{border-color:#357935;background-color:#357935!important}.pretty.p-toggle .state.p-warning label:after,.pretty input:checked~.state.p-warning label:after{background-color:#f0ad4e!important}.pretty.p-toggle .state.p-warning .icon,.pretty.p-toggle .state.p-warning .svg,.pretty input:checked~.state.p-warning .icon,.pretty input:checked~.state.p-warning .svg{color:#fff;stroke:#fff}.pretty.p-toggle .state.p-warning-o label:before,.pretty input:checked~.state.p-warning-o label:before{border-color:#f0ad4e}.pretty.p-toggle .state.p-warning-o label:after,.pretty input:checked~.state.p-warning-o label:after{background-color:rgba(0,0,0,0)}.pretty.p-toggle .state.p-warning-o .icon,.pretty.p-toggle .state.p-warning-o .svg,.pretty.p-toggle .state.p-warning-o svg,.pretty input:checked~.state.p-warning-o .icon,.pretty input:checked~.state.p-warning-o .svg,.pretty input:checked~.state.p-warning-o svg{color:#f0ad4e;stroke:#f0ad4e}.pretty.p-default:not(.p-fill) input:checked~.state.p-warning-o label:after{background-color:#f0ad4e!important}.pretty.p-switch input:checked~.state.p-warning:before{border-color:#f0ad4e}.pretty.p-switch.p-fill input:checked~.state.p-warning:before{background-color:#f0ad4e!important}.pretty.p-switch.p-slim input:checked~.state.p-warning:before{border-color:#c77c11;background-color:#c77c11!important}.pretty.p-toggle .state.p-danger label:after,.pretty input:checked~.state.p-danger label:after{background-color:#d9534f!important}.pretty.p-toggle .state.p-danger .icon,.pretty.p-toggle .state.p-danger .svg,.pretty input:checked~.state.p-danger .icon,.pretty input:checked~.state.p-danger .svg{color:#fff;stroke:#fff}.pretty.p-toggle .state.p-danger-o label:before,.pretty input:checked~.state.p-danger-o label:before{border-color:#d9534f}.pretty.p-toggle .state.p-danger-o label:after,.pretty input:checked~.state.p-danger-o label:after{background-color:rgba(0,0,0,0)}.pretty.p-toggle .state.p-danger-o .icon,.pretty.p-toggle .state.p-danger-o .svg,.pretty.p-toggle .state.p-danger-o svg,.pretty input:checked~.state.p-danger-o .icon,.pretty input:checked~.state.p-danger-o .svg,.pretty input:checked~.state.p-danger-o svg{color:#d9534f;stroke:#d9534f}.pretty.p-default:not(.p-fill) input:checked~.state.p-danger-o label:after{background-color:#d9534f!important}.pretty.p-switch input:checked~.state.p-danger:before{border-color:#d9534f}.pretty.p-switch.p-fill input:checked~.state.p-danger:before{background-color:#d9534f!important}.pretty.p-switch.p-slim input:checked~.state.p-danger:before{border-color:#a02622;background-color:#a02622!important}.pretty.p-bigger .icon,.pretty.p-bigger .img,.pretty.p-bigger .svg,.pretty.p-bigger label:after,.pretty.p-bigger label:before{font-size:1.2em!important;top:calc(-135% + 1em)!important}.pretty.p-bigger label{text-indent:1.7em}@media print{.pretty .state .icon,.pretty .state:before,.pretty .state label:after,.pretty .state label:before{color-adjust:exact;-webkit-print-color-adjust:exact;print-color-adjust:exact}}@font-face{font-family:e-icons;font-style:normal;font-weight:400;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMjeaTzgAAAEoAAAAVmNtYXDI+c/1AAAMlAAACtxnbHlmx9zPtgAAIogAAmRYaGVhZCSDYpYAAADQAAAANmhoZWEIXgaGAAAArAAAACRobXR4FAb+rAAAAYAAAAsUbG9jYQMTheAAABdwAAALGG1heHAD8ALMAAABCAAAACBuYW1lc0cOBgAChuAAAAIlcG9zdPHwElUAAokIAAAsvAABAAAEAAAAAFwEAP/A/8AEQAABAAAAAAAAAAAAAAAAAAACxQABAAAAAQAAumidFl8PPPUACwQAAAAAAOCyDswAAAAA4LIOzP/A/+QEQAQcAAAACAACAAEAAAAAAAEAAALFAsAAIQAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA4RHsKgQAAAAAXAQcABwAAAABAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQA/+QEAP/kBAAAAAQA/+QEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQA/8AEAAAABAAAAAQAAAAEAAAABAAAAAQA/8AEAAAABAD/wAQAAAAEAAAABAAAAAQAAAAEAAAABAD/wAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAA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BIYEogUGBQYFBgUGBQwFDAUMBQ4FDgUOBQ4FIgUkBSQFKgUsBTAFMAU0BTQFNAU0BTYFOAU4BTgFOAU4BTgFOgU6BToFOgU6BToFOgU6BT4FPgAAAhUCMgI9AiQCAgIIAgkCCgILAgwCDQIPAhACEQISAhMCFAIbAhwCHQIeAiUCJgItAjQCNQIqAhcCIQIOAcQBugG7AbwBvQG+Ab8BwAHBAcIBwwHFAcYBxwHIAckBygBoAcsBzABpAGoAawBsAG0AbgBvAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAUIAcwB0AHUAdgB3AHgAeQB6AHsAfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiAAQABEAEgATABQAFQAWABcAGAAaABsAHAAdAB4AGQBxAHIAygCbAJwAnQCeAJ8AoAChAKIAowCkAKUApgCnAKgAqQCqAKsArACtAK4ArwCwALEAsgCzALQAtQC2ALcAuAC5ALoAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkANgHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAAHwAgAHAAywHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQIDAgQCBQIGAgcBawCJAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYAlwCYAJkAmgEMAQ0BDgEPARABEQESARMBFQEWARcBGAEZAWUBZgFnAWgBaQFqARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBbAFtAW4BbwFwAXEBcgFzAXQBlQGUAZMBkgGXAZEBmAGZAZYBmgGbAZwBnQGeAXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBtAG1AbYBtwG4ATIBMwE0ATUAJQE3ATgBOQE6ACYBPAE9AT4BPwFAAUEBNgE7AYUAJwGGAYcBiQGKAYsBjAGPAYgBjQGOAZABnwGgAaEBogAoAagBpwGwAaoBqwGsAa0BrgGvAbEBsgGzACkAKgArACwALQAuAC8AMAAxADIBowGkAaUBpgG5ADMANAGpADUCIwA3ADgCJwIoAikAOQIrAiwCLgIvADoAOwA8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AAGhVAABofgAAaLQAAGjnAABpBwAAaSIAAGlMAABpewAAaaQAAGnOAABp7gAAagsAAGo0AABqVAAAan0AAGrCAABq6QAAawkAAGs0AABrVQAAa34AAGunAABrvQAAbAYAAGxDAABssgAAbNYAAG0LAABtNAAAbWQAAG2PAABuhwAAbp4AAG61AABvLQAAb2AAAG9wAABviAAAcEkAAHB0AABwgwAAcPYAAHE7AABxUwAAcWAAAHGCAABxpgAAcckAAHIpAAByfAAAcsQAAHLfAABzHQAAc0YAAHNuAABzkQAAc74AAHQCAAB0IQAAdDYAAHRqAAB0gAAAdJ8AAHS7AAB00AAAdQ8AAHXrAAB1/gAAdh8AAHYyAAB2ZAAAdncAAHagAAB2sAAAdzEAAHd5AAB3ngAAeCAAAHhOAAB4YgAAeH4AAHibAAB4wwAAeSwAAHlEAAB5twAAehUAAHpWAAB6qgAAevIAAHs7AAB7UwAAe3IAAHuQAAB7sAAAe8UAAHveAAB8uwAAfO4AAH07AAB9SQAAfV0AAH4LAAB+GwAAfmQAAH6uAAB+/QAAf0YAAH+UAAB/vwAAf9MAAH/hAAB/+gAAgBMAAIAhAACALgAAgEcAAICRAACA2wAAgX4AAIIZAACCtQAAg1EAAIOmAACDuAAAg+oAAIP4AACEuwAAhTUAAIVSAACFxAAAhc8AAIXsAACGVAAAhsgAAId0AACIAQAAiH4AAIiLAACImQAAiR0AAImjAACJtgAAizcAAItdAACLaAAAi3MAAIt+AACLiQAAi5QAAIufAACLwgAAi8wAAIwKAACMXgAAjH8AAIybAACMvgAAjccAAI7QAACPYwAAkHEAAJHjAACSGgAAkjMAAJJDAACSjgAAkvEAAJMaAACTQwAAk3AAAJPnAACUBgAAlBoAAJQuAACVEAAAlVsAAJafAACWugAAl5AAAJgAAACYUwAAmOMAAJkEAACZFgABwAAAAAD1AP0ABkAIgA3AEMAWADGANIAAAEPBisBLwE9AT8KMwUXIxUzBxc3LwEfBRUPBCMvBDczJw8EPwEfAycPAS8CNT8GMx8FJyMPCR8DDxEfBzsBPw8fBjsBPwc1LwoPAi8GPwEvCAEhNSERIRcRMxEnIQEjBAMXCQgHBAMDBQMCBAQFBgYNBgcGBgQB+jfz8zg5g4OvBAMGAwIB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AQICBggJCwYGBgcHBgYGCwkIBgICAf7AAQICBggJCwYGBgcHBgYGCwkIBgICAQECAgYICQsGBgYHBwYGBgsJCAYCAgEBQAECAgYICQsGBgYHBwYGBgsJCAYCAgEBAgIGCAkLBgYGBwcGBgYLCQgGAgIB/sABAgIGCAkLBgYGBwcGBgYLCQgGAgIBAQICBggJCwYGBgcHBgYGCwkIBgICAQFAAQICBggJCwYGBgcHBgYGCwkIBgICAQECAgYICQsGBgYHBwYGBgsJCAYCAgH+wAECAgYICQsGBgYHBwYGBgsJCAYCAgEBAgIGCAkLBgYGBwcGBgYLCQgGAgIBgAcGBgYLCQgGAgIBAQICBggJCwYGBgcHBgYGCwkIBgICAQECAgYICQsGBgYHBwYGBgsJCAYCAgEBAgIGCAkLBgYGBwcGBgYLCQgGAgIBAQICBggJCwYGBvkHBgYGCwkIBgICAQECAgYICQsGBgYHBwYGBgsJCAYCAgEBAgIGCAkLBgYGBwcGBgYLCQgGAgIBAQICBggJCwYGBgcHBgYGCwkIBgICAQECAgYICQsGBgb5BwYGBgsJCAYCAgEBAgIGCAkLBgYGBwcGBgYLCQgGAgIBAQICBggJCwYGBgcHBgYGCwkIBgICAQECAgYICQsGBgYHBwYGBgsJCAYCAgEBAgIGCAkLBgYG+QcGBgYLCQgGAgIBAQICBggJCwYGBgcHBgYGCwkIBgICAQECAgYICQsGBgYHBwYGBgsJCAYCAgEBAgIGCAkLBgYGBwcGBgYLCQgGAgIBAQICBggJCwYGBgABAAAAAAP4AvwAAgAAEyEBCAPw/ggBBAH4AAAAAQAAAAAD+AL8AAIAAAkBIQIAAfj8EAEEAfgAAAEAAAAAAvwD+AACAAAlCQEBBAH4/ggIAfgB+AABAAAAAAL8A/gAAgAACQERAQQB+AIA/ggD8AAAAwAAAAACfgP4AD8AfwC/AAAlHw8/Dy8PDw4DHw8/Dy8PDw4DHw8/Dy8PDw4BggECAwQFBwcICQoKCwwMDA0NDAwMCwoKCQgHBwUEAwIBAQIDBAUHBwgJCgoLDAwMDQ0MDAwLCgoJCAcHBQQDAgEBAgMEBQcHCAkKCgsMDAwNDQwMDAsKCgkIBwcFBAMCAQECAwQFBwcICQoKCwwMDA0NDAwMCwoKCQgHBwUEAwIBAQIDBAUHBwgJ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AxAJBQUGBgYHBwkJCVACAgMFCBwFAgEBAgFDPFEBAQECBAUHEQgGBAIBRRQJCAcHBwYFBgQKDgIDAwQFBgoGBwYEAgIDAwQxHv79IkMDAwIMAgkMDAv9jgsMDAsC+QEDBQYHCQkLCgkJCAYEAwEBAwQGCAkJCgsJCQcGBQP85wEBAgUGCAgKCgoKCQcGBQMBAQMFBgcJCQsKCQkIBgUCnAEDBQYJCQsMDAsJCAcFAwEBAQMDBQUGBwgICQkKCgsLDw4ODAwKCQgCXggJCgwNDQ4PCwsKCgkJCAgHBgUFAwMBAQEDBQYJCQsMDAsJCQYFAwEBAQMDBQUGBwgICQkKCgsLDw4NDQwKCQQE/aIICQoMDQ0ODwsLCgoJCQgIBwYFBQMDAXAFBAkJBwYEAwEBAwQGBwkJCQoJCAgGBAMBAQMFBQgICQoFBAkJBwYEAwEBAwQGBwkJCQoJCAgGBAMBAQMFBQgICQKHBAQTJg4gBQEBAQIeDgYFBQQEAwICAQH+bwcGBQQDAgYCAgQFCwMDAwMLBQQDAQIDAwQEBQUBmAEBAgIDBAQFBQYOGwMCAQEBAQQRHR8aCAMCAQEDAgEDAQJMAwkK/YwKDAwKAnQKDEAFBQkICAUFAwEBAwUFCAgJCgkJCQcGBAMBAQMEBgcJCQkFBQkICAUFAwEBAwUFCAgJCgkJCQcGBAMBAQMEBgcJCQkIBw4NDAwKCQf9mAcJCgsNDQ4PCgsKCQkJCAcHBgUFAwMBAQEDBQYICQsNDQsJCAYFAwEBAQMDBQUGBwcICQkJCgsKDw4NDQsKCQcCaAcJCgwMDQ4PCgsKCQkJCAcHBgUFAwMBAQEDBQYICQsGBw0LCQgGBQMBAQEDAwUFBgcHCAkJCQoLAAADAAAAAAPAA8AABQAJAE0AAAEnBxcBJzcRIREnDwYVERUfDTMhMz8NNRE1Lw0jISMPBQGVhS6zAYgtbP1ISAcFBQQDAgICAgMEBQYHCAgICQkJCgoCuAoKCQoICAgIBwYFBAMCAgICAwQFBgcICAgICgkKCv1ICgsKCQkICAGBhS6zAYgugf1IArhIBwgICQkKCwr9SAoKCQkJCAgIBwYFBAMCAgICAwQFBgcICAgJCQkKCgK4CgsKCQkICAcHBQUEAwICAgIDBAUGAAAGAAAAAAPAA/gAAwAnACsATwBTAHUAAAEVITUnFR8H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BccFBQMCEwIEBa4FBAICBAWrBQUD/QIEBa4FBAICBAWrBQUD/ucCBAXKBQQCAgQFxwUFAwITAgQFrgUEAgIEBasFBQP9AgQFrgUEAgIEBasFBQP+5wIEBcoFBAICBAXHBQUDAhMCBAWuBQQCAgQFqwUFA/0CBAWuBQQCAgQFqwUFA/7nAgQFygUEAgIEBccFBQMCEwIEBa4FBAICBAWrBQUD/QIEBa4FBAICBAWrBQUD/ucCBAXKBQQCAgQFxwUFAwFrHAHA/EgcAQEDAwQFBQYDuAYFBQQDAwEBAQEDAwQFBQb8SAYFBQQDAwGGAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVPAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwUFAwUEAgIEBQYFBAIBAwVd/EgDuPxIBgUFBAMDAQEBAQMDBAUFBgO4BgUFBAMDAQEBAQMDBAUFAAAAAwAAAAADzgPCAAMAOABWAAATESERJSEzHw0VESchLw41ETU/DiEzHw4RIxEvByGGAkz9tAJMCQgICAcHBgYGBQQDAwICyv4qCQgICAcHBgYGBQQDAwICAgIDAwQFBgYGBwcICAgzAqANDAwMCwoKCQgHBwUEAwIBVAECBAUHBwQI/VwCxv5cAaRUAQIDBAQFBQYHBwcICAgJ/XiQAQECAwMFBQUGBgcIBwgJ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AZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGAApleHBvcnQtcGRmCmV4cG9ydC1jc3YMZXhwb3J0LWV4Y2VsCmRhdGUtcmFuZ2UMZmlsdGVyLWNsZWFyBmZpbHRlcghidWxsZXQtNghidWxsZXQtMQRub25lCGJ1bGxldC01EWJvcmRlci1kaWFnb25hbC0yEWJvcmRlci1kaWFnb25hbC0xCGJ1bGxldC00CGJ1bGxldC0yCGJ1bGxldC0zFGNoZXZyb24tcmlnaHQtZG91YmxlE2NoZXZyb24tbGVmdC1kb3VibGUTY2hldnJvbi1kb3duLWRvdWJsZRFjaGV2cm9uLXVwLWRvdWJsZQZyZXBlYXQPcmVjdXJyZW5jZS1lZGl0CGxvY2F0aW9uC2Rlc2NyaXB0aW9uCXRpbWUtem9uZQhjYWxlbmRhcg90aW1lbGluZS1hZ2VuZGEJd29yay13ZWVrBHdlZWsDZGF5EWFnZW5kYS1kYXRlLXJhbmdlCWRhdGUtdGltZQZwZW9wbGUMdGltZWxpbmUtZGF5DXRpbWVsaW5lLXdlZWsSdGltZWxpbmUtd29yay13ZWVrDnRpbWVsaW5lLW1vbnRoBXRhYmxlBGNvcHkIdGgtc21hbGwGc2F2ZS0yC3BhcmFncmFwaC0yBmVkaXQtNg1jbG9zZS1sYXJnZS0xC2V4cG9ydC13b3JkDGNpcmNsZS1jbG9zZQhmaWx0ZXItMgpwbHVzLXNtYWxsBWNsb3NlBWNoZWNrB3ByaW50LTIGZWRpdC0yBHBsdXMNY2xvc2UtbGFyZ2UtMhFjaGV2cm9uLWRvd24tdGhpbhFjaGV2cm9uLXVwLWZpbGwtMhFjaGV2cm9uLWRvd24tZmlsbA9jaGV2cm9uLXVwLWZpbGwTY2hldnJvbi1kb3duLWZpbGwtMgphcnJvdy1kb3duCGFycm93LXVwFGNoZXZyb24tcmlnaHQtZmlsbC0zE2NoZXZyb24tbGVmdC1maWxsLTIIZGVsZXRlLTERY2hldnJvbi1sZWZ0LWZpbGwSY2hldnJvbi1yaWdodC1maWxsCmFycm93LWxlZnQLYXJyb3ctcmlnaHQJc29ydGluZy0xBGVkaXQKZmlyc3QtcGFnZQlsYXN0LXBhZ2UOdGltZWxpbmUtdG9kYXkMY2hldnJvbi1sZWZ0CGZpbHRlci0xCmNoZXZyb24tdXANY2hldnJvbi1yaWdodAxjaGV2cm9uLWRvd24OY2lyY2xlLWNsb3NlLTIRY2hldnJvbi11cC1maWxsLTMTY2hldnJvbi1kb3duLWZpbGwtMw1maWx0ZXItY2FuY2VsDmNoZXZyb24tbGVmdC0yCmdyb3VwLWljb24Jc2VsZWN0aW9uB2Nsb3NlLTIHY2hlY2stMhJpbnRlcm1lZGlhdGUtc3RhdGUOY2hldnJvbi1sZWZ0LTMGZWRpdC0zB2Nsb3NlLTMPY2hldnJvbi1yaWdodC0yBnBsdXMtMhNjaGV2cm9uLWRvd24tZmlsbC01DWNpcmNsZS1yZW1vdmUMYXJyb3ctbGVmdC0yD21vcmUtdmVydGljYWwtMQZzZWFyY2gFbW9udGgFdHJhc2gOY2hldnJvbi1kb3duLTIEc2F2ZQRtZW51B3JlZnJlc2gTY2lyY2xlLWNsb3NlLWZpbGwtMwVjbG9jaw1mcmVlemUtY29sdW1uDmVycm9yLXRyZWV2aWV3D2NpcmNsZS1yZW1vdmUtMgpjaXJjbGUtYWRkF2RyYWctYW5kLWRyb3AtaW5kaWNhdG9yD2NoZXZyb24tcmlnaHQtMw9jaGV2cm9uLXJpZ2h0LTQEcGxheQVwYXVzZRBwYXJhLW9wdGlvbi1kb3duCHNlYXJjaC0yDWJvcmRlci1jZW50ZXIMcmVzdGFydC1hdC0xDmh5cGVybGluay1vcGVuBWN1dC0yBmNvcHktMgpib3JkZXItdG9wDWRlbGV0ZS1jb2x1bW4KZGVsZXRlLXJvdwxpbnNlcnQtcmlnaHQLaW5zZXJ0LWxlZnQQaHlwZXJsaW5rLXJlbW92ZQ1ib3JkZXItbWlkZGxlDGJvcmRlci1yaWdodA5oeXBlcmxpbmstZWRpdAZsaW5rLTILYm9yZGVyLWxlZnQMdGFibGUtZGVsZXRlEHRhYmxlLXByb3BlcnRpZXMOaHlwZXJsaW5rLWNvcHkNYm9yZGVyLWJvdHRvbQdwYXN0ZS0yEmNvbnRpbnVlLW51bWJlcmluZwxpbnNlcnQtYmVsb3cMaW5zZXJ0LWFib3ZlD3RhYmxlLWNlbGwtbm9uZQNib3gDYWxsEXRhYmxlLWFsaWduLXJpZ2h0E3RhYmxlLWJvcmRlci1jdXN0b20QdGFibGUtYWxpZ24tbGVmdBJ0YWJsZS1hbGlnbi1jZW50ZXIPbGluZS12ZXJ5LXNtYWxsC2xpbmUtbm9ybWFsCmxpbmUtc21hbGwOcGFyYS1vcHRpb24tdXAVdmVydGljYWwtYWxpZ24tYm90dG9tFXZlcnRpY2FsLWFsaWduLWNlbnRlchJ2ZXJ0aWNhbC1hbGlnbi10b3AMY2xlYXItZm9ybWF0DXN0cmlrZXRocm91Z2gKdXBwZXItY2FzZQdqdXN0aWZ5BWltYWdlBnJlc2l6ZRBleGl0LWZ1bGwtc2NyZWVuBmVkaXQtNARib2xkCmFsaWduLWxlZnQDY3V0EHRleHQtYWx0ZXJuYXRpdmUGY29weS0xCGRlbGV0ZS0yD2luY3JlYXNlLWluZGVudAVlcmFzZQR1bmRvC2Z1bGwtc2NyZWVuCXVuZGVybGluZQ5saXN0LXVub3JkZXJlZANleWUMbGlzdC1vcmRlcmVkCmxvd2VyLWNhc2ULbGluay1yZW1vdmUHem9vbS1pbglvcGVuLWxpbmsFcHJpbnQKZm9udC1jb2xvcgthbGlnbi1yaWdodARsaW5rCXZpZXctc2lkZQljb2RlLXZpZXcIem9vbS1vdXQLc3VwZXJzY3JpcHQJcGFyYWdyYXBoBHJlZG8FcGFzdGULaW5zZXJ0LWNvZGUJc3Vic2NyaXB0B2Rpc3BsYXkHcmVwbGFjZQZpdGFsaWMHY2FwdGlvbgxwYWludC1idWNrZXQPZGVjcmVhc2UtaW5kZW50DGFsaWduLWNlbnRlcglmb250LW5hbWUPZHJhZy1hbmQtZHJvcC0yDmZpZWxkLXNldHRpbmdzCnR3by1jb2x1bW4HdHdvLXJvdwNzdW0IZmlsdGVyLTMLY2xvc2UtbGFyZ2UOZmlsdGVyLWNsZWFyLTIMY2lyY2xlLWNoZWNrDGFsaWduLWJvdHRvbQ5pbnNlcnQtYWJvdmUtMg5pbnNlcnQtYmVsb3ctMgxhbGlnbi1taWRkbGUPZGVsZXRlLWNvbHVtbi0yDGRlbGV0ZS1yb3ctMg1pbnNlcnQtbGVmdC0yCWFsaWduLXRvcA5pbnNlcnQtcmlnaHQtMgZlZGl0LTUOYWxpZ24tbWlkZGxlLTIPZnJlZXplLWNvbHVtbi0yBXN0eWxlCGRlbGV0ZS0zCmZyZWV6ZS1yb3cLdGV4dC1oZWFkZXIRbW9yZS1ob3Jpem9udGFsLTEHcmVzaXplcgZmb2xkZXIMZmlyc3QtcGFnZS0yCHByZXZpb3VzBG5leHQLbGFzdC1wYWdlLTIKem9vbS1vdXQtMgl6b29tLWluLTIIZG93bmxvYWQIYm9va21hcmsIc2VhcmNoLTMPdGV4dC1hbm5vdGF0aW9uB2Nsb3NlLTQIY29tbWVudHMGc2F2ZS0zDGFsaWduLWxlZnQtMgdzdHlsZS0yBnVuZG8tMg9oaWdobGlnaHQtY29sb3IPbW9yZS12ZXJ0aWNhbC0zC3VuZGVybGluZS0yD3N0cmlrZXRocm91Z2gtMg5wYWludC1idWNrZXQtMgNwYW4Hb3BhY2l0eQhkZWxldGUtNA1tb3VzZS1wb2ludGVyE2NoZXZyb24tcmlnaHQtc21hbGwMc3Ryb2tlLWNvbG9yB3ByaW50LTMGcmVkby0yDGZvbnQtY29sb3ItMgZzaGFwZXMSY2hldnJvbi1sZWZ0LXNtYWxsDHN0cm9rZS13aWR0aA9hbm5vdGF0aW9uLWVkaXQJdGh1bWJuYWlsBXN0YW1wCmJyZWFrLXBhZ2UEZmlsZQpjb2xsYXBzZS0yBmV4cGFuZA9kb3VibGUtcmVzaXplLTIPZG91YmxlLXJlc2l6ZS0xD3NpbmdsZS1yZXNpemUtMQ9zaW5nbGUtcmVzaXplLTIPc2luZ2xlLXJlc2l6ZS0zD3NpbmdsZS1yZXNpemUtNA1kcmFnLWFuZC1kcm9wEWNoZXZyb24tdXAtZmlsbC00E2NoZXZyb24tZG93bi1maWxsLTQUY2hldnJvbi1yaWdodC1maWxsLTITY2hldnJvbi1sZWZ0LWZpbGwtMw9tb3JlLXZlcnRpY2FsLTQNZmlsdGVyLWFjdGl2ZQtjb2RlLXZpZXctMglncmlkLXZpZXcHcGFzdGUtMwd0cmFzaC0yCmRvd25sb2FkLTIFY3V0LTMQbGlzdC11bm9yZGVyZWQtMglyZWZyZXNoLTILY2lyY2xlLWluZm8SY2hldnJvbi1yaWdodC10aGluCGZvbGRlci0yB2Nsb3NlLTULZm9sZGVyLWZpbGwGcmVuYW1lBmNvcHktMwhzZWFyY2gtNAh1cGxvYWQtMQRiYWNrCnNlbGVjdC1hbGwJc29ydGluZy0yD21vcmUtdmVydGljYWwtNQdjaGVjay0zEW1vcmUtaG9yaXpvbnRhbC0zDmV4cG9ydC1leGNlbC0yDGV4cG9ydC1jc3YtMgZzYXZlLTQHc2F2ZS1hcwZleHBvcnQIZGVsZXRlLTULZ3JhbmQtdG90YWwHdGFibGUtMglzdWItdG90YWwIZmlsZS1uZXcRbnVtYmVyLWZvcm1hdHRpbmcIcmVuYW1lLTIMZXhwb3J0LXBkZi0yDWZ1bGwtc2NyZWVuLTIFY2hhcnQIdXBsb2FkLTIJZm9udC10eXBlB2Nsb3NlLTYMbGluZS1zcGFjaW5nBGxvY2sMYm9yZGVyLW91dGVyBmxpbmstMw5hbGlnbi1ib3R0b20tMgxib3JkZXItYWxsLTIQdGFibGUtb2YtY29udGVudA5wYWdlLW51bWJlcmluZwZib2xkLTILYWxpZ24tdG9wLTIOYWxpZ24tbWlkZGxlLTMKcGFnZS1zZXR1cAxzdHJva2Utc3R5bGUHaW1hZ2UtMg1ib29rbWFyay1maWxsBmhlYWRlchBsaXN0LXVub3JkZXJlZC0zD3Nob3ctaGlkZS1wYW5lbA1hbGlnbi1yaWdodC0yBmZvb3Rlcgpib3JkZXItYWxsDGJvcmRlci1pbm5lcgRjZWxsC2FsaWduLXRvcC0zDmFsaWduLWJvdHRvbS0zDmFsaWduLW1pZGRsZS00B2NoZWNrLTQFYnJlYWsMYnJlYWstcGFnZS0yDWJyZWFrLXNlY3Rpb24QYXV0by1maXQtY29udGVudBJmaXhlZC1jb2x1bW4td2lkdGgPYXV0by1maXQtd2luZG93DWJyaW5nLWZvcndhcmQOYnJpbmctdG8tZnJvbnQMc2VuZC10by1iYWNrDXNlbmQtYmFja3dhcmQJdW5ncm91cC0xB2dyb3VwLTEFb3JkZXISY2hldnJvbi11cC1zbWFsbC0yFGNoZXZyb24tZG93bi1zbWFsbC0yFWNoZXZyb24tcmlnaHQtc21hbGwtMhRjaGV2cm9uLWxlZnQtc21hbGwtMhZjaGV2cm9uLXJpZ2h0LWRvdWJsZS0yFWNoZXZyb24tbGVmdC1kb3VibGUtMgt6b29tLXRvLWZpdAlhZGQtYWJvdmUJYWRkLWJlbG93BGxpbmUOYXJyb3ctcmlnaHQtdXAJcmVjdGFuZ2xlBmNpcmNsZQhwZW50YWdhbgZsZW5ndGgJcGVyaW1ldGVyBGFyZWEGcmFkaXVzBnZvbHVtZRJjaGFuZ2Utc2NhbGUtcmF0aW8Ic2V0dGluZ3MJY29tbWVudC0yDXRodW1icy1kb3duLTEJdGh1bWJzLXVwDXRodW1icy1kb3duLTIKZXhwb3J0LWpwZwpleHBvcnQtcG5nCmV4cG9ydC1zdmcWY29uZGl0aW9uYWwtZm9ybWF0dGluZxBoaWRlLWZvcm11bGEtYmFyDWhpZGUtaGVhZGluZ3MOaGlkZS1ncmlkbGluZXMJZXllLXNsYXNoCmV4cG9ydC14bHMMZXhwb3J0LWNzdi0zA21keAhyZW5hbWUtMwtmb2xkZXItb3BlbgluYW1lZC1zZXQNZ3JpcC12ZXJ0aWNhbAlkaW1lbnNpb24HbGV2ZWwtMQdsZXZlbC0yB2xldmVsLTMHbGV2ZWwtNAdsZXZlbC01DHVzZXItZGVmaW5lZANrcGkJc29ydC1kb3duCXNvcnRpbmctMwdzb3J0LXVwEWNhbGN1bGF0ZWQtbWVtYmVyC2N1c3RvbS1zb3J0D3NvcnQtZGVzY2VuZGluZw5zb3J0LWFzY2VuZGluZwtjb21tZW50LWFkZAVyZXBseQZzZW5kLTEMY29tbWVudC1zaG93CXNpZ25hdHVyZQtmaWx0ZXItbWFpbgl0ZXh0LXdyYXAKdW5maWx0ZXJlZBhmaWx0ZXJlZC1zb3J0LWRlc2NlbmRpbmcRc29ydC1kZXNjZW5kaW5nLTIQc29ydC1hc2NlbmRpbmctMhdmaWx0ZXJlZC1zb3J0LWFzY2VuZGluZwhmaWx0ZXJlZA5maWx0ZXItY2xlYXItMwdyZWFwcGx5B2dyb3VwLTIJdW5ncm91cC0yD3Bhc3RlLXRleHQtb25seQtwYXN0ZS1zdHlsZQ1wYXN0ZS1zcGVjaWFsF3Bhc3RlLW1hdGNoLWRlc3RpbmF0aW9uC3NwZWxsLWNoZWNrDmNvbW1lbnQtcmVvcGVuCndlYi1sYXlvdXQMcHJpbnQtbGF5b3V0C2JvcmRlci1ub25lD2RhdGEtdmFsaWRhdGlvbg1wcm90ZWN0LXNoZWV0CXRleHQtZm9ybQxwcm9wZXJ0aWVzLTIKY2xlYXItZm9ybQlkcm9wLWRvd24KZm9ybS1maWVsZAljaGVjay1ib3gMdGFibGUtdXBkYXRlDmNoYW5nZXMtYWNjZXB0EmRpc3BsYXktZm9yLXJldmlldw5jaGFuZ2VzLXJlamVjdBBjaGFuZ2VzLXByZXZpb3VzC3Nob3ctbWFya3VwDGNoYW5nZXMtbmV4dA1jaGFuZ2VzLXRyYWNrHGNvbmRpdGlvbmFsLWZvcm1hdHRpbmctbGFyZ2UJaGlnaGxpZ2h0EHRvcC1ib3R0b20tcnVsZXMJZGF0YS1iYXJzDGNvbG9yLXNjYWxlcwhpY29uc2V0cwtjbGVhci1ydWxlcwluZXctcnVsZXMMZ3JlYXRlci10aGFuCWxlc3MtdGhhbgdiZXR3ZWVuB2VxdWFsdG8SdGV4dC10aGF0LWNvbnRhaW5zDmRhdGUtb2NjdXJyaW5nBnRvcC0xMA9ib3R0b20tMTAtaXRlbXMJYm90dG9tLTEwDWFib3ZlLWF2ZXJhZ2UNYmVsb3ctYXZlcmFnZQ5kdXBsaWNhdGUtY2VsbAhmb290bm90ZQxlbmQtZm9vdG5vdGUTY2hhcnQtaW5zZXJ0LWNvbHVtbhBjaGFydC1kYXRhLXRhYmxlDGNoYXJ0LWxlZ2VuZBhjaGFydC1pbnNlcnQteC15LXNjYXR0ZXIWY2hhcnQtaW5zZXJ0LXdhdGVyZmFsbBFjaGFydC11cGRvd24tYmFycxFhZGQtY2hhcnQtZWxlbWVudA9jaGFydC1ncmlkbGluZXMXaW5zZXJ0LWhpZXJhcmNoeS1jaGFydHMRY2hhcnQtaW5zZXJ0LWxpbmUXY2hhcnQtc3dpdGNoLXJvdy1jb2x1bW4QY2hhcnQtZXJyb3ItYmFycw9jaGFydC10cmVuZGxpbmUKY2hhcnQtYXhlcxFjaGFydC1zZWxlY3QtZGF0YQtjaGFydC1saW5lcxFjaGFydC1heGlzLXRpdGxlcwtjaGFydC10aXRsZRBjaGFydC1pbnNlcnQtcGllEWNoYW5nZS1jaGFydC10eXBlFmluc2VydC1zdGF0aXN0aWMtY2hhcnQRY2hhcnQtZGF0YS1sYWJlbHMSY2hhcnQtaW5zZXJ0LWNvbWJvJGNoYXJ0LWF4aXMtdGl0bGVzLXByaW1hcnktaG9yaXpvbnRhbBVjaGFydC1saW5lYXItZm9yZWNhc3QRY2hhcnQtbGVnZW5kLW5vbmUSY2hhcnQtbGVnZW5kLXJpZ2h0EmNoYXJ0LWRhdGEtY2FsbG91dBxjaGFydC1wcmltYXJ5LW1pbm9yLXZlcnRpY2FsG2NoYXJ0LWF4ZXMtcHJpbWFyeS12ZXJ0aWNhbBhjaGFydC1kYXRhLWxhYmVscy1jZW50ZXIVY2hhcnQtZGF0YS10YWJsZS1ub25lFmNoYXJ0LWRhdGEtbGFiZWxzLW5vbmUcY2hhcnQtcHJpbWFyeS1tYWpvci12ZXJ0aWNhbBNjaGFydC1sZWdlbmQtbGluZWFyG2NoYXJ0LWVycm9yLWJhcnMtcGVyY2VudGFnZRRjaGFydC1uby1sZWdlbmQta2V5cxdjaGFydC10aXRsZS1hYm92ZS1jaGFydBRjaGFydC10cmVuZGxpbmUtbm9uZRZjaGFydC13aXRoLWxlZ2VuZC1rZXlzHWNoYXJ0LWF4ZXMtcHJpbWFyeS1ob3Jpem9udGFsI2NoYXJ0LWVycm9yLWJhcnMtc3RhbmRhcmQtZGV2aWF0aW9uEGNoYXJ0LWxlZ2VuZC10b3AeY2hhcnQtcHJpbWFyeS1taW5vci1ob3Jpem9udGFsFWNoYXJ0LWVycm9yLWJhcnMtbm9uZRRjaGFydC11cC1kb3duLWJhcnMtMhBjaGFydC1kcm9wLWxpbmVzEGNoYXJ0LWxpbmVzLW5vbmUeY2hhcnQtcHJpbWFyeS1tYWpvci1ob3Jpem9udGFsE2NoYXJ0LWxlZ2VuZC1ib3R0b20SY2hhcnQtdXAtZG93bi1ub25lHWNoYXJ0LWRhdGEtbGFiZWxzLW91dHNpZGUtZW5kImNoYXJ0LWF4aXMtdGl0bGVzLXByaW1hcnktdmVydGljYWwRY2hhcnQtbGVnZW5kLWxlZnQdY2hhcnQtZGF0YS1sYWJlbHMtaW5zaWRlLWJhc2UUY2hhcnQtaGlnaC1sb3ctbGluZXMbY2hhcnQtdHJlbmRsaW5lLWV4cG9uZW50aWFsHmNoYXJ0LXRyZW5kbGluZS1tb3ZpbmctYXZlcmFnZRxjaGFydC1kYXRhLWxhYmVscy1pbnNpZGUtZW5kEGNoYXJ0LXRpdGxlLW5vbmUcY2hhcnQtdGl0bGUtY2VudGVyZWQtb3ZlcmxheR9jaGFydC1lcnJvci1iYXJzLXN0YW5kYXJkLWVycm9yD2NoYXJ0LTNkLWFyZWEtMRRjaGFydC0yZC1zdGFja2VkLWJhchJjaGFydC0zZC1zdXJmYWNlLTEWY2hhcnQtaGlzdG9ncmFtLXBhcmV0byZjaGFydC1zdG9jay12b2x1bW4tb3Blbi1oaWdoLWxvdy1jbG9zZRpjaGFydC1zdG9jay1oaWdoLWxvdy1jbG9zZR9jaGFydC1zdG9jay1vcGVuLWhpZ2gtbG93LWNsb3NlK2NoYXJ0LTJkLWxpbmUtMTAwLXN0YWNrZWQtbGluZS13aXRoLW1hcmtlcnMSY2hhcnQtZmlsbGVkLXJhZGFyGWNoYXJ0LTNkLWNsdXN0ZXJlZC1jb2x1bW4OY2hhcnQtc3VuYnVyc3QNY2hhcnQtdHJlZW1hcCFjaGFydC0zZC0xMDAtcGVyY2VudC1zdGFja2VkLWFyZWEMY2hhcnQtM2QtcGllEWNoYXJ0LTNkLWNvbHVtbi00Em1vcmUtY29sdW1uLWNoYXJ0cxVjaGFydC0yZC1zdGFja2VkLWxpbmULY2hhcnQtZG9udXQWY2hhcnQtM2QtY2x1c3RlcmVkLWJhcgxjaGFydC1mdW5uZWwOY2hhcnQtMmQtcGllLTINY2hhcnQtM2QtbGluZRljaGFydC0yZC1jbHVzdGVyZWQtY29sdW1uIWNoYXJ0LTJkLTEwMC1wZXJjZW50LXN0YWNrZWQtYXJlYRBtb3JlLWxpbmUtY2hhcnRzIGNoYXJ0LTNkLTEwMC1wZXJjZW50LXN0YWNrZWQtYmFyEW1vcmUtc3RvY2stY2hhcnRzIWNoYXJ0LXN0b2NrLXZvbHVtbi1oaWdoLWxvdy1jbG9zZRBjaGFydC1iYXItb2YtcGllLWNoYXJ0LWNsdXN0ZXJlZC1jb2x1bW4tbGluZS1vbi1zZWNvbmRhcnktYXhpcxZjaGFydC0yZC1jbHVzdGVyZWQtYmFyC2NoYXJ0LXJhZGFyI2NoYXJ0LTNkLTEwMC1wZXJjZW50LXN0YWNrZWQtY29sdW1uH2NoYXJ0LXN0YWNrZWRsaW5lcy13aXRoLW1hcmtlcnMaY2hhcnQtd2lyZWZyYW1lLTNkLXN1cmZhY2UaY2hhcnQtMmQtbGluZS13aXRoLW1hcmtlcnMVY2hhcnQtYm94LWFuZC13aGlza2VyGWNyZWF0ZS1jdXN0b20tY29tYm8tY2hhcnQgY2hhcnQtMmQtMTAwLXBlcmNlbnQtc3RhY2tlZC1iYXIhY2hhcnQtc2NhdHRlci13aXRoLXN0cmFpZ2h0LWxpbmVzF21vcmUtc3RhdGlzdGljYWwtY2hhcnRzFWNoYXJ0LTNkLXN0YWNrZWQtYXJlYQ1jaGFydC0yZC1saW5lI2NoYXJ0LTJkLTEwMC1wZXJjZW50LXN0YWNrZWQtY29sdW1uD21vcmUtcGllLWNoYXJ0cw5jaGFydC1idWJibGUtMSFjaGFydC0yZC0xMDAtcGVyY2VudC1zdGFja2VkLWxpbmUPY2hhcnQtaGlzdG9ncmFtFW1vcmUtaGllcmFyY2h5LWNoYXJ0cyFjaGFydC1jb21iby1jbHVzdGVyZWQtY29sdW1uLWxpbmUVY2hhcnQtMmQtc3RhY2tlZC1hcmVhF2NoYXJ0LTNkLXN0YWNrZWQtY29sdW1uEGNoYXJ0LWluc2VydC1iYXIfY2hhcnQtc2NhdHRlci13aXRoLXNtb290aC1saW5lcx9jaGFydC1zdXJmYWNlLXdpcmVmcmFtZS1jb250b3VyFGNoYXJ0LTNkLXN0YWNrZWQtYmFyE2NoYXJ0LTJkLXBpZS1vZi1waWUSY2hhcnQtM2Qtc3VyZmFjZS0yDWNoYXJ0LTJkLWFyZWEpY2hhcnQtY29tYm8tc3RhY2tlZC1hcmVhLWNsdXN0ZXJlZC1jb2x1bW4PY2hhcnQtd2F0ZXJmYWxsFWNoYXJ0LXN1cmZhY2UtY29udG91chNtb3JlLXNjYXR0ZXItY2hhcnRzF2NoYXJ0LTJkLXN0YWNrZWQtY29sdW1uEHByb3RlY3Qtd29ya2Jvb2sLY2hhbmdlLWNhc2UMZXhwb3J0LXBkZi0zC2ZyZWV6ZS1wYW5lE2ZyZWV6ZS1maXJzdC1jb2x1bW4OZnJlZXplLXRvcC1yb3cLbWVyZ2UtY2VsbHMOc3BsaXQtdmVydGljYWwKdGFibGUtY2VsbBBzcGxpdC1ob3Jpem9udGFsCGxpc3QtYm94C3RleHQtZm9ybS0yBWxhYmVsC2NoZWNrLWJveC0yE2FkZC1lZGl0LWZvcm0tZmllbGQGYnV0dG9uC2Ryb3AtZG93bi0yDHJhZGlvLWJ1dHRvbghwYXNzd29yZBN0YWJsZS1pbnNlcnQtY29sdW1uEHRhYmxlLWluc2VydC1yb3cVdGFibGUtb3ZlcndyaXRlLWNlbGxzDHRhYmxlLW5lc3RlZAt0YWJsZS1tZXJnZQlkcmFnLWZpbGwEaG9tZQ1nYW50dC1ncmlwcGVyDWJyaW5nLXRvLXZpZXcPYnJpbmctdG8tY2VudGVyB3dhcm5pbmcNY3JpdGljYWwtcGF0aA9ib3JkZXItc2hhZG93LTISYm9yZGVyLWRpYWdvbmFsLXVwFGJvcmRlci1kaWFnb25hbC1kb3duDWJvcmRlci1jdXN0b20NYm9yZGVyLW5vbmUtMQpib3JkZXItYm94D2JvcmRlci1zaGFkb3ctMQVhdWRpbwV2aWRlbwRjcm9wC3N0YXItZmlsbGVkB2ZpbHRlcnMKYWRqdXN0bWVudAlwYWdlLXNpemUFcmVzZXQIdHJpYW5nbGUMcGFnZS1jb2x1bW5zBHRpbnQKYnJpZ2h0bmVzcwhjb250cmFzdApzYXR1cmF0aW9uBGZhZGUNZmxpcC12ZXJ0aWNhbA9mbGlwLWhvcml6b250YWwOdHJhbnNmb3JtLWxlZnQPdHJhbnNmb3JtLXJpZ2h0CXNoYXJwbmVzcwVncmFpbgxmcmFtZS1jdXN0b20HZnJhbWUtMQdmcmFtZS0yB2ZyYW1lLTMHZnJhbWUtNAdmcmFtZS01B2ZyYW1lLTYJdHJhbnNmb3JtCmNoZWNrLXRpY2sPZXZlbi1wYWdlLWJyZWFrDm9kZC1wYWdlLWJyZWFrC3BhZ2UtY29sdW1uFWNvbnRpbnVvdXMtcGFnZS1icmVhaw5wYWdlLXRleHQtd3JhcBFwYWdlLWNvbHVtbi1yaWdodBBwYWdlLWNvbHVtbi1sZWZ0D3BhZ2UtY29sdW1uLW9uZQ9wYWdlLWNvbHVtbi10d28RcGFnZS1jb2x1bW4tdGhyZWUQbXVsdGlwbGUtY29tbWVudA5mb3JtYXQtcGFpbnRlcghsYXVuY2hlcg9jaGFyYWN0ZXItc3R5bGUMbGlua2VkLXN0eWxlHGNoYXJ0LTJkLXN0YWNrZWQtbGluZS1tYXJrZWQoY2hhcnQtMmQtMTAwLXBlcmNlbnQtc3RhY2tlZC1saW5lLW1hcmtlZBRjaGFydC0yZC1saW5lLW1hcmtlZBJsaXN0LXVub3JkZXJlZC1ydGwQbGlzdC1vcmRlcmVkLXJ0bBNpbmNyZWFzZS1pbmRlbnQtcnRsE2RlY3JlYXNlLWluZGVudC1ydGwFZW1vamkRdHJhdmVsLWFuZC1wbGFjZXMGbmF0dXJlD2Zvb2QtYW5kLWRyaW5rcwdhbmltYWxzB29iamVjdHMKYWN0aXZpdGllcw1oYW5kLWdlc3R1cmVzB3N5bWJvbHMFZmxhZ3MAAA==) format("truetype")}.e-icons{font-family:e-icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.e-icons.e-small{font-size:8px}.e-icons.e-medium{font-size:16px}.e-icons.e-large{font-size:24px}.e-icons.e-export-pdf:before{content:"\E240"}.e-icons.e-export-csv:before{content:"\E241"}.e-icons.e-export-excel:before{content:"\E242"}.e-icons.e-date-range:before{content:"\E245"}.e-icons.e-filter-clear:before{content:"\E248"}.e-icons.e-filter:before{content:"\E251"}.e-icons.e-bullet-6:before{content:"\E253"}.e-icons.e-bullet-1:before{content:"\E254"}.e-icons.e-none:before{content:"\E256"}.e-icons.e-bullet-5:before{content:"\E259"}.e-icons.e-border-diagonal-2:before{content:"\E262"}.e-icons.e-border-diagonal-1:before{content:"\E265"}.e-icons.e-bullet-4:before{content:"\E267"}.e-icons.e-bullet-2:before{content:"\E270"}.e-icons.e-bullet-3:before{content:"\E271"}.e-icons.e-chevron-right-double:before{content:"\E300"}.e-icons.e-chevron-left-double:before{content:"\E302"}.e-icons.e-chevron-down-double:before{content:"\E304"}.e-icons.e-chevron-up-double:before{content:"\E306"}.e-icons.e-repeat:before{content:"\E308"}.e-icons.e-recurrence-edit:before{content:"\E30A"}.e-icons.e-location:before{content:"\E30C"}.e-icons.e-description:before{content:"\E30D"}.e-icons.e-time-zone:before{content:"\E30E"}.e-icons.e-calendar:before{content:"\E322"}.e-icons.e-timeline-agenda:before{content:"\E313"}.e-icons.e-work-week:before{content:"\E314"}.e-icons.e-week:before{content:"\E315"}.e-icons.e-day:before{content:"\E31B"}.e-icons.e-agenda-date-range:before{content:"\E31D"}.e-icons.e-date-time:before{content:"\E421"}.e-icons.e-people:before{content:"\E424"}.e-icons.e-timeline-day:before{content:"\EA85"}.e-icons.e-timeline-week:before{content:"\EA88"}.e-icons.e-timeline-work-week:before{content:"\EA8B"}.e-icons.e-timeline-month:before{content:"\EA8E"}.e-icons.e-table:before{content:"\E705"}.e-icons.e-copy:before{content:"\E70A"}.e-icons.e-th-small:before{content:"\E714"}.e-icons.e-save-2:before{content:"\E735"}.e-icons.e-paragraph-2:before{content:"\E75E"}.e-icons.e-edit-6:before{content:"\E7A3"}.e-icons.e-close-large-1:before{content:"\E7A7"}.e-icons.e-export-word:before{content:"\E7B0"}.e-icons.e-circle-close:before{content:"\E7E9"}.e-icons.e-filter-2:before{content:"\E7EE"}.e-icons.e-plus-small:before{content:"\E7F9"}.e-icons.e-close:before{content:"\E7FC"}.e-icons.e-check:before{content:"\E7FF"}.e-icons.e-print-2:before{content:"\E813"}.e-icons.e-edit-2:before{content:"\E81E"}.e-icons.e-plus:before{content:"\E823"}.e-icons.e-close-large-2:before{content:"\E825"}.e-icons.e-chevron-down-thin:before{content:"\E36A"}.e-icons.e-chevron-up-fill-2:before{content:"\E82A"}.e-icons.e-chevron-down-fill:before{content:"\E82E"}.e-icons.e-chevron-up-fill:before{content:"\E834"}.e-icons.e-chevron-down-fill-2:before{content:"\E83D"}.e-icons.e-arrow-down:before{content:"\E83F"}.e-icons.e-arrow-up:before{content:"\E840"}.e-icons.e-chevron-right-fill-3:before{content:"\E848"}.e-icons.e-chevron-left-fill-2:before{content:"\E84B"}.e-icons.e-delete-1:before{content:"\E84E"}.e-icons.e-chevron-left-fill:before{content:"\E854"}.e-icons.e-chevron-right-fill:before{content:"\E859"}.e-icons.e-arrow-left:before{content:"\E85B"}.e-icons.e-arrow-right:before{content:"\E85F"}.e-icons.e-sorting-1:before{content:"\E890"}.e-icons.e-edit:before{content:"\E891"}.e-icons.e-first-page:before{content:"\E896"}.e-icons.e-last-page:before{content:"\E897"}.e-icons.e-timeline-today:before{content:"\E901"}.e-icons.e-chevron-left:before{content:"\E904"}.e-icons.e-filter-1:before{content:"\E909"}.e-icons.e-chevron-up:before{content:"\E910"}.e-icons.e-chevron-right:before{content:"\E913"}.e-icons.e-chevron-down:before{content:"\E916"}.e-icons.e-circle-close-2:before{content:"\E917"}.e-icons.e-chevron-up-fill-3:before{content:"\E918"}.e-icons.e-chevron-down-fill-3:before{content:"\E919"}.e-icons.e-filter-cancel:before{content:"\E920"}.e-icons.e-chevron-left-2:before{content:"\E921"}.e-icons.e-group-icon:before{content:"\E926"}.e-icons.e-selection:before{content:"\E930"}.e-icons.e-close-2:before{content:"\E932"}.e-icons.e-check-2:before{content:"\E933"}.e-icons.e-intermediate-state:before{content:"\E934"}.e-icons.e-chevron-left-3:before{content:"\E937"}.e-icons.e-edit-3:before{content:"\E944"}.e-icons.e-close-3:before{content:"\E945"}.e-icons.e-chevron-right-2:before{content:"\E956"}.e-icons.e-plus-2:before{content:"\E963"}.e-icons.e-chevron-down-fill-5:before{content:"\E969"}.e-icons.e-circle-remove:before{content:"\E974"}.e-icons.e-arrow-left-2:before{content:"\E977"}.e-icons.e-more-vertical-1:before{content:"\E984"}.e-icons.e-search:before{content:"\E993"}.e-icons.e-month:before{content:"\E93C"}.e-icons.e-trash:before{content:"\E94A"}.e-icons.e-chevron-down-2:before{content:"\E94D"}.e-icons.e-save:before{content:"\E98E"}.e-icons.e-menu:before{content:"\E99A"}.e-icons.e-refresh:before{content:"\E99D"}.e-icons.e-circle-close-fill-3:before{content:"\E208"}.e-icons.e-clock:before{content:"\E20C"}.e-icons.e-freeze-column:before{content:"\E21E"}.e-icons.e-error-treeview:before{content:"\E22A"}.e-icons.e-circle-remove-2:before{content:"\E22B"}.e-icons.e-circle-add:before{content:"\E22C"}.e-icons.e-drag-and-drop-indicator:before{content:"\E22D"}.e-icons.e-chevron-right-3:before{content:"\E22F"}.e-icons.e-chevron-right-4:before{content:"\E430"}.e-icons.e-play:before{content:"\E324"}.e-icons.e-pause:before{content:"\E326"}.e-icons.e-para-option-down:before{content:"\E274"}.e-icons.e-search-2:before{content:"\E275"}.e-icons.e-border-center:before{content:"\E276"}.e-icons.e-restart-at-1:before{content:"\E277"}.e-icons.e-hyperlink-open:before{content:"\E278"}.e-icons.e-cut-2:before{content:"\E279"}.e-icons.e-copy-2:before{content:"\E280"}.e-icons.e-border-top:before{content:"\E281"}.e-icons.e-delete-column:before{content:"\E282"}.e-icons.e-delete-row:before{content:"\E283"}.e-icons.e-insert-right:before{content:"\E284"}.e-icons.e-insert-left:before{content:"\E285"}.e-icons.e-hyperlink-remove:before{content:"\E286"}.e-icons.e-border-middle:before{content:"\E287"}.e-icons.e-border-right:before{content:"\E288"}.e-icons.e-hyperlink-edit:before{content:"\E289"}.e-icons.e-link-2:before{content:"\E290"}.e-icons.e-border-left:before{content:"\E291"}.e-icons.e-table-delete:before{content:"\E292"}.e-icons.e-table-properties:before{content:"\E294"}.e-icons.e-hyperlink-copy:before{content:"\E295"}.e-icons.e-border-bottom:before{content:"\E298"}.e-icons.e-paste-2:before{content:"\E501"}.e-icons.e-continue-numbering:before{content:"\E503"}.e-icons.e-insert-below:before{content:"\E505"}.e-icons.e-insert-above:before{content:"\E506"}.e-icons.e-table-cell-none:before{content:"\E507"}.e-icons.e-box:before{content:"\E509"}.e-icons.e-all:before{content:"\E511"}.e-icons.e-table-align-right:before{content:"\E515"}.e-icons.e-table-border-custom:before{content:"\E516"}.e-icons.e-table-align-left:before{content:"\E517"}.e-icons.e-table-align-center:before{content:"\E518"}.e-icons.e-line-very-small:before{content:"\E520"}.e-icons.e-line-normal:before{content:"\E521"}.e-icons.e-line-small:before{content:"\E522"}.e-icons.e-para-option-up:before{content:"\E523"}.e-icons.e-vertical-align-bottom:before{content:"\E525"}.e-icons.e-vertical-align-center:before{content:"\E526"}.e-icons.e-vertical-align-top:before{content:"\E527"}.e-icons.e-clear-format:before{content:"\E331"}.e-icons.e-strikethrough:before{content:"\E332"}.e-icons.e-upper-case:before{content:"\E333"}.e-icons.e-justify:before{content:"\E334"}.e-icons.e-image:before{content:"\E335"}.e-icons.e-resize:before{content:"\E336"}.e-icons.e-exit-full-screen:before{content:"\E337"}.e-icons.e-edit-4:before{content:"\E338"}.e-icons.e-bold:before{content:"\E339"}.e-icons.e-align-left:before{content:"\E33A"}.e-icons.e-cut:before{content:"\E33B"}.e-icons.e-text-alternative:before{content:"\E33C"}.e-icons.e-copy-1:before{content:"\E33D"}.e-icons.e-delete-2:before{content:"\E33E"}.e-icons.e-increase-indent:before{content:"\E33F"}.e-icons.e-erase:before{content:"\E340"}.e-icons.e-undo:before{content:"\E341"}.e-icons.e-full-screen:before{content:"\E342"}.e-icons.e-underline:before{content:"\E343"}.e-icons.e-list-unordered:before{content:"\E344"}.e-icons.e-eye:before{content:"\E345"}.e-icons.e-list-ordered:before{content:"\E346"}.e-icons.e-lower-case:before{content:"\E347"}.e-icons.e-link-remove:before{content:"\E348"}.e-icons.e-zoom-in:before{content:"\E349"}.e-icons.e-open-link:before{content:"\E34A"}.e-icons.e-print:before{content:"\E34B"}.e-icons.e-font-color:before{content:"\E34C"}.e-icons.e-align-right:before{content:"\E34D"}.e-icons.e-link:before{content:"\E34E"}.e-icons.e-view-side:before{content:"\E34F"}.e-icons.e-code-view:before{content:"\E350"}.e-icons.e-zoom-out:before{content:"\E351"}.e-icons.e-superscript:before{content:"\E352"}.e-icons.e-paragraph:before{content:"\E353"}.e-icons.e-redo:before{content:"\E354"}.e-icons.e-paste:before{content:"\E355"}.e-icons.e-insert-code:before{content:"\E356"}.e-icons.e-subscript:before{content:"\E357"}.e-icons.e-display:before{content:"\E358"}.e-icons.e-replace:before{content:"\E359"}.e-icons.e-italic:before{content:"\E35A"}.e-icons.e-caption:before{content:"\E35B"}.e-icons.e-paint-bucket:before{content:"\E35C"}.e-icons.e-decrease-indent:before{content:"\E35D"}.e-icons.e-align-center:before{content:"\E35E"}.e-icons.e-font-name:before{content:"\E35F"}.e-icons.e-drag-and-drop-2:before{content:"\E330"}.e-icons.e-field-settings:before{content:"\E434"}.e-icons.e-two-column:before{content:"\EA74"}.e-icons.e-two-row:before{content:"\EA75"}.e-icons.e-sum:before{content:"\EA76"}.e-icons.e-filter-3:before{content:"\EA77"}.e-icons.e-close-large:before{content:"\EA7F"}.e-icons.e-filter-clear-2:before{content:"\EA82"}.e-icons.e-circle-check:before{content:"\EA84"}.e-icons.e-align-bottom:before{content:"\EA91"}.e-icons.e-insert-above-2:before{content:"\EA92"}.e-icons.e-insert-below-2:before{content:"\EA93"}.e-icons.e-align-middle:before{content:"\EA94"}.e-icons.e-delete-column-2:before{content:"\EA95"}.e-icons.e-delete-row-2:before{content:"\EA96"}.e-icons.e-insert-left-2:before{content:"\EA97"}.e-icons.e-align-top:before{content:"\EA98"}.e-icons.e-insert-right-2:before{content:"\EA99"}.e-icons.e-edit-5:before{content:"\EA9A"}.e-icons.e-align-middle-2:before{content:"\EA9B"}.e-icons.e-freeze-column-2:before{content:"\EA9E"}.e-icons.e-style:before{content:"\EA9F"}.e-icons.e-delete-3:before{content:"\EB00"}.e-icons.e-freeze-row:before{content:"\EB02"}.e-icons.e-text-header:before{content:"\EB03"}.e-icons.e-more-horizontal-1:before{content:"\EB04"}.e-icons.e-resizer:before{content:"\EB05"}.e-icons.e-folder:before{content:"\EC04"}.e-icons.e-first-page-2:before{content:"\EC05"}.e-icons.e-previous:before{content:"\EC06"}.e-icons.e-next:before{content:"\EC07"}.e-icons.e-last-page-2:before{content:"\EC08"}.e-icons.e-zoom-out-2:before{content:"\EC09"}.e-icons.e-zoom-in-2:before{content:"\EC0A"}.e-icons.e-download:before{content:"\EC0B"}.e-icons.e-bookmark:before{content:"\EC0C"}.e-icons.e-search-3:before{content:"\EC0D"}.e-icons.e-text-annotation:before{content:"\EC0E"}.e-icons.e-close-4:before{content:"\EC0F"}.e-icons.e-comments:before{content:"\EC10"}.e-icons.e-save-3:before{content:"\EC11"}.e-icons.e-align-left-2:before{content:"\EC12"}.e-icons.e-style-2:before{content:"\EC13"}.e-icons.e-undo-2:before{content:"\EC14"}.e-icons.e-highlight-color:before{content:"\EC15"}.e-icons.e-more-vertical-3:before{content:"\EC16"}.e-icons.e-underline-2:before{content:"\EC17"}.e-icons.e-strikethrough-2:before{content:"\EC18"}.e-icons.e-paint-bucket-2:before{content:"\EC19"}.e-icons.e-pan:before{content:"\EC1A"}.e-icons.e-opacity:before{content:"\EC1B"}.e-icons.e-delete-4:before{content:"\EC1C"}.e-icons.e-mouse-pointer:before{content:"\EC1D"}.e-icons.e-chevron-right-small:before{content:"\EC1E"}.e-icons.e-stroke-color:before{content:"\EC1F"}.e-icons.e-print-3:before{content:"\EC20"}.e-icons.e-redo-2:before{content:"\EC21"}.e-icons.e-font-color-2:before{content:"\EC22"}.e-icons.e-shapes:before{content:"\EC23"}.e-icons.e-chevron-left-small:before{content:"\EC24"}.e-icons.e-stroke-width:before{content:"\EC25"}.e-icons.e-annotation-edit:before{content:"\EC26"}.e-icons.e-thumbnail:before{content:"\EC27"}.e-icons.e-stamp:before{content:"\EC28"}.e-icons.e-break-page:before{content:"\EC29"}.e-icons.e-file:before{content:"\EC2A"}.e-icons.e-collapse-2:before{content:"\E554"}.e-icons.e-expand:before{content:"\E556"}.e-icons.e-double-resize-2:before{content:"\E557"}.e-icons.e-double-resize-1:before{content:"\E558"}.e-icons.e-single-resize-1:before{content:"\E559"}.e-icons.e-single-resize-2:before{content:"\E56A"}.e-icons.e-single-resize-3:before{content:"\E56B"}.e-icons.e-single-resize-4:before{content:"\E56C"}.e-icons.e-drag-and-drop:before{content:"\E903"}.e-icons.e-chevron-up-fill-4:before{content:"\E56D"}.e-icons.e-chevron-down-fill-4:before{content:"\E56E"}.e-icons.e-chevron-right-fill-2:before{content:"\E56F"}.e-icons.e-chevron-left-fill-3:before{content:"\E570"}.e-icons.e-more-vertical-4:before{content:"\E571"}.e-icons.e-filter-active:before{content:"\EBB3"}.e-icons.e-code-view-2:before{content:"\E907"}.e-icons.e-grid-view:before{content:"\E600"}.e-icons.e-paste-3:before{content:"\E601"}.e-icons.e-trash-2:before{content:"\E602"}.e-icons.e-download-2:before{content:"\E603"}.e-icons.e-cut-3:before{content:"\E604"}.e-icons.e-list-unordered-2:before{content:"\E605"}.e-icons.e-refresh-2:before{content:"\E606"}.e-icons.e-circle-info:before{content:"\E607"}.e-icons.e-chevron-right-thin:before{content:"\E608"}.e-icons.e-folder-2:before{content:"\E609"}.e-icons.e-close-5:before{content:"\E60A"}.e-icons.e-folder-fill:before{content:"\E60B"}.e-icons.e-rename:before{content:"\E60C"}.e-icons.e-copy-3:before{content:"\E60D"}.e-icons.e-search-4:before{content:"\E60E"}.e-icons.e-upload-1:before{content:"\E60F"}.e-icons.e-back:before{content:"\E610"}.e-icons.e-select-all:before{content:"\E611"}.e-icons.e-sorting-2:before{content:"\E612"}.e-icons.e-more-vertical-5:before{content:"\E613"}.e-icons.e-check-3:before{content:"\E614"}.e-icons.e-more-horizontal-3:before{content:"\E615"}.e-icons.e-export-excel-2:before{content:"\E700"}.e-icons.e-export-csv-2:before{content:"\E701"}.e-icons.e-save-4:before{content:"\E703"}.e-icons.e-save-as:before{content:"\E704"}.e-icons.e-export:before{content:"\E711"}.e-icons.e-delete-5:before{content:"\E706"}.e-icons.e-grand-total:before{content:"\E707"}.e-icons.e-table-2:before{content:"\E708"}.e-icons.e-sub-total:before{content:"\E709"}.e-icons.e-file-new:before{content:"\E712"}.e-icons.e-number-formatting:before{content:"\E70B"}.e-icons.e-rename-2:before{content:"\E70C"}.e-icons.e-export-pdf-2:before{content:"\E70D"}.e-icons.e-full-screen-2:before{content:"\E70E"}.e-icons.e-chart:before{content:"\E70F"}.e-icons.e-upload-2:before{content:"\E710"}.e-icons.e-font-type:before{content:"\E273"}.e-icons.e-close-6:before{content:"\EB36"}.e-icons.e-line-spacing:before{content:"\EB37"}.e-icons.e-lock:before{content:"\EB3A"}.e-icons.e-border-outer:before{content:"\EB66"}.e-icons.e-link-3:before{content:"\EB3C"}.e-icons.e-align-bottom-2:before{content:"\EB3D"}.e-icons.e-border-all-2:before{content:"\EB3E"}.e-icons.e-table-of-content:before{content:"\EB41"}.e-icons.e-page-numbering:before{content:"\EB43"}.e-icons.e-bold-2:before{content:"\EB47"}.e-icons.e-align-top-2:before{content:"\EB49"}.e-icons.e-align-middle-3:before{content:"\EB4A"}.e-icons.e-page-setup:before{content:"\EB4C"}.e-icons.e-stroke-style:before{content:"\EB4D"}.e-icons.e-image-2:before{content:"\EB4F"}.e-icons.e-bookmark-fill:before{content:"\EB51"}.e-icons.e-header:before{content:"\EB53"}.e-icons.e-list-unordered-3:before{content:"\EB5B"}.e-icons.e-show-hide-panel:before{content:"\EB5D"}.e-icons.e-align-right-2:before{content:"\EB5F"}.e-icons.e-footer:before{content:"\EB60"}.e-icons.e-border-all:before{content:"\EB95"}.e-icons.e-border-inner:before{content:"\EB88"}.e-icons.e-cell:before{content:"\EB93"}.e-icons.e-align-top-3:before{content:"\EB35"}.e-icons.e-align-bottom-3:before{content:"\EB0E"}.e-icons.e-align-middle-4:before{content:"\EB0D"}.e-icons.e-check-4:before{content:"\E935"}.e-icons.e-break:before{content:"\EBA6"}.e-icons.e-break-page-2:before{content:"\EBA0"}.e-icons.e-break-section:before{content:"\EBA2"}.e-icons.e-auto-fit-content:before{content:"\EBA8"}.e-icons.e-fixed-column-width:before{content:"\EBA9"}.e-icons.e-auto-fit-window:before{content:"\EBAA"}.e-icons.e-bring-forward:before{content:"\E5A1"}.e-icons.e-bring-to-front:before{content:"\E5A2"}.e-icons.e-send-to-back:before{content:"\E5A3"}.e-icons.e-send-backward:before{content:"\E5A4"}.e-icons.e-ungroup-1:before{content:"\E5A6"}.e-icons.e-group-1:before{content:"\E5A7"}.e-icons.e-order:before{content:"\E4A4"}.e-icons.e-chevron-up-small-2:before{content:"\E651"}.e-icons.e-chevron-down-small-2:before{content:"\E652"}.e-icons.e-chevron-right-small-2:before{content:"\E653"}.e-icons.e-chevron-left-small-2:before{content:"\E654"}.e-icons.e-chevron-right-double-2:before{content:"\E655"}.e-icons.e-chevron-left-double-2:before{content:"\E656"}.e-icons.e-zoom-to-fit:before{content:"\E657"}.e-icons.e-add-above:before{content:"\E658"}.e-icons.e-add-below:before{content:"\E659"}.e-icons.e-line:before{content:"\E668"}.e-icons.e-arrow-right-up:before{content:"\E669"}.e-icons.e-rectangle:before{content:"\E670"}.e-icons.e-circle:before{content:"\E671"}.e-icons.e-pentagan:before{content:"\E672"}.e-icons.e-length:before{content:"\E673"}.e-icons.e-perimeter:before{content:"\E674"}.e-icons.e-area:before{content:"\E675"}.e-icons.e-radius:before{content:"\E676"}.e-icons.e-volume:before{content:"\E677"}.e-icons.e-change-scale-ratio:before{content:"\E678"}.e-icons.e-settings:before{content:"\E679"}.e-icons.e-comment-2:before{content:"\E680"}.e-icons.e-thumbs-down-1:before{content:"\E681"}.e-icons.e-thumbs-up:before{content:"\E682"}.e-icons.e-thumbs-down-2:before{content:"\E683"}.e-icons.e-export-jpg:before{content:"\E713"}.e-icons.e-export-png:before{content:"\E715"}.e-icons.e-export-svg:before{content:"\E716"}.e-icons.e-conditional-formatting:before{content:"\E725"}.e-icons.e-hide-formula-bar:before{content:"\E717"}.e-icons.e-hide-headings:before{content:"\E718"}.e-icons.e-hide-gridlines:before{content:"\E719"}.e-icons.e-eye-slash:before{content:"\E721"}.e-icons.e-export-xls:before{content:"\E726"}.e-icons.e-export-csv-3:before{content:"\E727"}.e-icons.e-mdx:before{content:"\E724"}.e-icons.e-rename-3:before{content:"\E728"}.e-icons.e-folder-open:before{content:"\E65F"}.e-icons.e-named-set:before{content:"\E65D"}.e-icons.e-grip-vertical:before{content:"\E65C"}.e-icons.e-dimension:before{content:"\E65B"}.e-icons.e-level-1:before{content:"\E65A"}.e-icons.e-level-2:before{content:"\E662"}.e-icons.e-level-3:before{content:"\E65E"}.e-icons.e-level-4:before{content:"\E660"}.e-icons.e-level-5:before{content:"\E661"}.e-icons.e-user-defined:before{content:"\E663"}.e-icons.e-kpi:before{content:"\E664"}.e-icons.e-sort-down:before{content:"\E665"}.e-icons.e-sorting-3:before{content:"\E666"}.e-icons.e-sort-up:before{content:"\E667"}.e-icons.e-calculated-member:before{content:"\E729"}.e-icons.e-custom-sort:before{content:"\E732"}.e-icons.e-sort-descending:before{content:"\E733"}.e-icons.e-sort-ascending:before{content:"\E734"}.e-icons.e-comment-add:before{content:"\E814"}.e-icons.e-reply:before{content:"\E815"}.e-icons.e-send-1:before{content:"\E816"}.e-icons.e-comment-show:before{content:"\E817"}.e-icons.e-signature:before{content:"\E737"}.e-icons.e-filter-main:before{content:"\E736"}.e-icons.e-text-wrap:before{content:"\E824"}.e-icons.e-unfiltered:before{content:"\E73A"}.e-icons.e-filtered-sort-descending:before{content:"\E73B"}.e-icons.e-sort-descending-2:before{content:"\E73C"}.e-icons.e-sort-ascending-2:before{content:"\E73D"}.e-icons.e-filtered-sort-ascending:before{content:"\E73E"}.e-icons.e-filtered:before{content:"\E73F"}.e-icons.e-filter-clear-3:before{content:"\E738"}.e-icons.e-reapply:before{content:"\E74A"}.e-icons.e-group-2:before{content:"\E74B"}.e-icons.e-ungroup-2:before{content:"\E74C"}.e-icons.e-paste-text-only:before{content:"\E685"}.e-icons.e-paste-style:before{content:"\E686"}.e-icons.e-paste-special:before{content:"\E687"}.e-icons.e-paste-match-destination:before{content:"\E688"}.e-icons.e-spell-check:before{content:"\E689"}.e-icons.e-comment-reopen:before{content:"\E818"}.e-icons.e-web-layout:before{content:"\E193"}.e-icons.e-print-layout:before{content:"\E194"}.e-icons.e-border-none:before{content:"\E195"}.e-icons.e-data-validation:before{content:"\E196"}.e-icons.e-protect-sheet:before{content:"\E197"}.e-icons.e-text-form:before{content:"\E198"}.e-icons.e-properties-2:before{content:"\E199"}.e-icons.e-clear-form:before{content:"\E19A"}.e-icons.e-drop-down:before{content:"\E19B"}.e-icons.e-form-field:before{content:"\E19C"}.e-icons.e-check-box:before{content:"\E192"}.e-icons.e-table-update:before{content:"\E19E"}.e-icons.e-changes-accept:before{content:"\E19F"}.e-icons.e-display-for-review:before{content:"\E203"}.e-icons.e-changes-reject:before{content:"\E204"}.e-icons.e-changes-previous:before{content:"\E205"}.e-icons.e-show-markup:before{content:"\E206"}.e-icons.e-changes-next:before{content:"\E209"}.e-icons.e-changes-track:before{content:"\E20A"}.e-icons.e-conditional-formatting-large:before{content:"\E401"}.e-icons.e-highlight:before{content:"\E402"}.e-icons.e-top-bottom-rules:before{content:"\E403"}.e-icons.e-data-bars:before{content:"\E404"}.e-icons.e-color-scales:before{content:"\E405"}.e-icons.e-iconsets:before{content:"\E406"}.e-icons.e-clear-rules:before{content:"\E407"}.e-icons.e-new-rules:before{content:"\E408"}.e-icons.e-greater-than:before{content:"\E409"}.e-icons.e-less-than:before{content:"\E410"}.e-icons.e-between:before{content:"\E411"}.e-icons.e-equalto:before{content:"\E412"}.e-icons.e-text-that-contains:before{content:"\E413"}.e-icons.e-date-occurring:before{content:"\E414"}.e-icons.e-top-10:before{content:"\E415"}.e-icons.e-bottom-10-items:before{content:"\E416"}.e-icons.e-bottom-10:before{content:"\E417"}.e-icons.e-above-average:before{content:"\E418"}.e-icons.e-below-average:before{content:"\E419"}.e-icons.e-duplicate-cell:before{content:"\E420"}.e-icons.e-footnote:before{content:"\E435"}.e-icons.e-end-footnote:before{content:"\E436"}.e-icons.e-chart-insert-column:before{content:"\E440"}.e-icons.e-chart-data-table:before{content:"\E441"}.e-icons.e-chart-legend:before{content:"\E442"}.e-icons.e-chart-insert-x-y-scatter:before{content:"\E443"}.e-icons.e-chart-insert-waterfall:before{content:"\E444"}.e-icons.e-chart-updown-bars:before{content:"\E445"}.e-icons.e-add-chart-element:before{content:"\E446"}.e-icons.e-chart-gridlines:before{content:"\E447"}.e-icons.e-insert-hierarchy-charts:before{content:"\E448"}.e-icons.e-chart-insert-line:before{content:"\E449"}.e-icons.e-chart-switch-row-column:before{content:"\E450"}.e-icons.e-chart-error-bars:before{content:"\E451"}.e-icons.e-chart-trendline:before{content:"\E452"}.e-icons.e-chart-axes:before{content:"\E453"}.e-icons.e-chart-select-data:before{content:"\E454"}.e-icons.e-chart-lines:before{content:"\E455"}.e-icons.e-chart-axis-titles:before{content:"\E456"}.e-icons.e-chart-title:before{content:"\E457"}.e-icons.e-chart-insert-pie:before{content:"\E458"}.e-icons.e-change-chart-type:before{content:"\E459"}.e-icons.e-insert-statistic-chart:before{content:"\E460"}.e-icons.e-chart-data-labels:before{content:"\E461"}.e-icons.e-chart-insert-combo:before{content:"\E462"}.e-icons.e-chart-axis-titles-primary-horizontal:before{content:"\E486"}.e-icons.e-chart-linear-forecast:before{content:"\E487"}.e-icons.e-chart-legend-none:before{content:"\E488"}.e-icons.e-chart-legend-right:before{content:"\E489"}.e-icons.e-chart-data-callout:before{content:"\E490"}.e-icons.e-chart-primary-minor-vertical:before{content:"\E491"}.e-icons.e-chart-axes-primary-vertical:before{content:"\E492"}.e-icons.e-chart-data-labels-center:before{content:"\E493"}.e-icons.e-chart-data-table-none:before{content:"\E115"}.e-icons.e-chart-data-labels-none:before{content:"\E495"}.e-icons.e-chart-primary-major-vertical:before{content:"\E496"}.e-icons.e-chart-legend-linear:before{content:"\E497"}.e-icons.e-chart-error-bars-percentage:before{content:"\E498"}.e-icons.e-chart-no-legend-keys:before{content:"\E499"}.e-icons.e-chart-title-above-chart:before{content:"\E121"}.e-icons.e-chart-trendline-none:before{content:"\E122"}.e-icons.e-chart-with-legend-keys:before{content:"\E123"}.e-icons.e-chart-axes-primary-horizontal:before{content:"\E124"}.e-icons.e-chart-error-bars-standard-deviation:before{content:"\E125"}.e-icons.e-chart-legend-top:before{content:"\E126"}.e-icons.e-chart-primary-minor-horizontal:before{content:"\E145"}.e-icons.e-chart-error-bars-none:before{content:"\E127"}.e-icons.e-chart-up-down-bars-2:before{content:"\E128"}.e-icons.e-chart-drop-lines:before{content:"\E129"}.e-icons.e-chart-lines-none:before{content:"\E130"}.e-icons.e-chart-primary-major-horizontal:before{content:"\E131"}.e-icons.e-chart-legend-bottom:before{content:"\E132"}.e-icons.e-chart-up-down-none:before{content:"\E111"}.e-icons.e-chart-data-labels-outside-end:before{content:"\E905"}.e-icons.e-chart-axis-titles-primary-vertical:before{content:"\E143"}.e-icons.e-chart-legend-left:before{content:"\E892"}.e-icons.e-chart-data-labels-inside-base:before{content:"\E893"}.e-icons.e-chart-high-low-lines:before{content:"\E894"}.e-icons.e-chart-trendline-exponential:before{content:"\E133"}.e-icons.e-chart-trendline-moving-average:before{content:"\E134"}.e-icons.e-chart-data-labels-inside-end:before{content:"\E135"}.e-icons.e-chart-title-none:before{content:"\E136"}.e-icons.e-chart-title-centered-overlay:before{content:"\E895"}.e-icons.e-chart-error-bars-standard-error:before{content:"\E911"}.e-icons.e-chart-3d-area-1:before{content:"\E144"}.e-icons.e-chart-2d-stacked-bar:before{content:"\E889"}.e-icons.e-chart-3d-surface-1:before{content:"\E827"}.e-icons.e-chart-histogram-pareto:before{content:"\E114"}.e-icons.e-chart-stock-volumn-open-high-low-close:before{content:"\E137"}.e-icons.e-chart-stock-high-low-close:before{content:"\E138"}.e-icons.e-chart-stock-open-high-low-close:before{content:"\E831"}.e-icons.e-chart-2d-line-100-stacked-line-with-markers:before{content:"\E832"}.e-icons.e-chart-filled-radar:before{content:"\E833"}.e-icons.e-chart-3d-clustered-column:before{content:"\E142"}.e-icons.e-chart-sunburst:before{content:"\E835"}.e-icons.e-chart-treemap:before{content:"\E836"}.e-icons.e-chart-3d-100-percent-stacked-area:before{content:"\E139"}.e-icons.e-chart-3d-pie:before{content:"\E838"}.e-icons.e-chart-3d-column-4:before{content:"\E839"}.e-icons.e-more-column-charts:before{content:"\E899"}.e-icons.e-chart-2d-stacked-line:before{content:"\E841"}.e-icons.e-chart-donut:before{content:"\E112"}.e-icons.e-chart-3d-clustered-bar:before{content:"\E843"}.e-icons.e-chart-funnel:before{content:"\E140"}.e-icons.e-chart-2d-pie-2:before{content:"\E141"}.e-icons.e-chart-3d-line:before{content:"\E846"}.e-icons.e-chart-2d-clustered-column:before{content:"\E847"}.e-icons.e-chart-2d-100-percent-stacked-area:before{content:"\E900"}.e-icons.e-more-line-charts:before{content:"\E849"}.e-icons.e-chart-3d-100-percent-stacked-bar:before{content:"\E850"}.e-icons.e-more-stock-charts:before{content:"\E851"}.e-icons.e-chart-stock-volumn-high-low-close:before{content:"\E852"}.e-icons.e-chart-bar-of-pie:before{content:"\E113"}.e-icons.e-chart-clustered-column-line-on-secondary-axis:before{content:"\E912"}.e-icons.e-chart-2d-clustered-bar:before{content:"\E855"}.e-icons.e-chart-radar:before{content:"\E856"}.e-icons.e-chart-3d-100-percent-stacked-column:before{content:"\E857"}.e-icons.e-chart-stackedlines-with-markers:before{content:"\E858"}.e-icons.e-chart-wireframe-3d-surface:before{content:"\E902"}.e-icons.e-chart-2d-line-with-markers:before{content:"\E860"}.e-icons.e-chart-box-and-whisker:before{content:"\E861"}.e-icons.e-create-custom-combo-chart:before{content:"\E862"}.e-icons.e-chart-2d-100-percent-stacked-bar:before{content:"\E863"}.e-icons.e-chart-scatter-with-straight-lines:before{content:"\E864"}.e-icons.e-more-statistical-charts:before{content:"\E865"}.e-icons.e-chart-3d-stacked-area:before{content:"\E866"}.e-icons.e-chart-2d-line:before{content:"\E867"}.e-icons.e-chart-2d-100-percent-stacked-column:before{content:"\E868"}.e-icons.e-more-pie-charts:before{content:"\E869"}.e-icons.e-chart-bubble-1:before{content:"\E870"}.e-icons.e-chart-2d-100-percent-stacked-line:before{content:"\E871"}.e-icons.e-chart-histogram:before{content:"\E872"}.e-icons.e-more-hierarchy-charts:before{content:"\E873"}.e-icons.e-chart-combo-clustered-column-line:before{content:"\E874"}.e-icons.e-chart-2d-stacked-area:before{content:"\E875"}.e-icons.e-chart-3d-stacked-column:before{content:"\E876"}.e-icons.e-chart-insert-bar:before{content:"\E877"}.e-icons.e-chart-scatter-with-smooth-lines:before{content:"\E878"}.e-icons.e-chart-surface-wireframe-contour:before{content:"\E879"}.e-icons.e-chart-3d-stacked-bar:before{content:"\E880"}.e-icons.e-chart-2d-pie-of-pie:before{content:"\E881"}.e-icons.e-chart-3d-surface-2:before{content:"\E882"}.e-icons.e-chart-2d-area:before{content:"\E883"}.e-icons.e-chart-combo-stacked-area-clustered-column:before{content:"\E884"}.e-icons.e-chart-waterfall:before{content:"\E885"}.e-icons.e-chart-surface-contour:before{content:"\E886"}.e-icons.e-more-scatter-charts:before{content:"\E887"}.e-icons.e-chart-2d-stacked-column:before{content:"\E888"}.e-icons.e-protect-workbook:before{content:"\E88A"}.e-icons.e-change-case:before{content:"\E88C"}.e-icons.e-export-pdf-3:before{content:"\E88B"}.e-icons.e-freeze-pane:before{content:"\E88D"}.e-icons.e-freeze-first-column:before{content:"\E88E"}.e-icons.e-freeze-top-row:before{content:"\E88F"}.e-icons.e-merge-cells:before{content:"\E89A"}.e-icons.e-split-vertical:before{content:"\E89B"}.e-icons.e-table-cell:before{content:"\E89C"}.e-icons.e-split-horizontal:before{content:"\E89D"}.e-icons.e-list-box:before{content:"\E89E"}.e-icons.e-text-form-2:before{content:"\E89F"}.e-icons.e-label:before{content:"\E90A"}.e-icons.e-check-box-2:before{content:"\E90B"}.e-icons.e-add-edit-form-field:before{content:"\E90C"}.e-icons.e-button:before{content:"\E90D"}.e-icons.e-drop-down-2:before{content:"\E90E"}.e-icons.e-radio-button:before{content:"\E90F"}.e-icons.e-password:before{content:"\E91A"}.e-icons.e-table-insert-column:before{content:"\E91B"}.e-icons.e-table-insert-row:before{content:"\E91C"}.e-icons.e-table-overwrite-cells:before{content:"\E91D"}.e-icons.e-table-nested:before{content:"\E91E"}.e-icons.e-table-merge:before{content:"\E91F"}.e-icons.e-drag-fill:before{content:"\E92A"}.e-icons.e-home:before{content:"\E92B"}.e-icons.e-gantt-gripper:before{content:"\E92C"}.e-icons.e-bring-to-view:before{content:"\E92D"}.e-icons.e-bring-to-center:before{content:"\E92E"}.e-icons.e-warning:before{content:"\E92F"}.e-icons.e-critical-path:before{content:"\E93A"}.e-icons.e-border-shadow-2:before{content:"\E93B"}.e-icons.e-border-diagonal-up:before{content:"\E947"}.e-icons.e-border-diagonal-down:before{content:"\E93D"}.e-icons.e-border-custom:before{content:"\E946"}.e-icons.e-border-none-1:before{content:"\E93F"}.e-icons.e-border-box:before{content:"\E940"}.e-icons.e-border-shadow-1:before{content:"\E942"}.e-icons.e-audio:before{content:"\E949"}.e-icons.e-video:before{content:"\E94B"}.e-icons.e-crop:before{content:"\E94C"}.e-icons.e-star-filled:before{content:"\E94F"}.e-icons.e-filters:before{content:"\E950"}.e-icons.e-adjustment:before{content:"\E951"}.e-icons.e-page-size:before{content:"\E952"}.e-icons.e-reset:before{content:"\E953"}.e-icons.e-triangle:before{content:"\E954"}.e-icons.e-page-columns:before{content:"\E955"}.e-icons.e-tint:before{content:"\E957"}.e-icons.e-brightness:before{content:"\E958"}.e-icons.e-contrast:before{content:"\E959"}.e-icons.e-saturation:before{content:"\E95A"}.e-icons.e-fade:before{content:"\E95B"}.e-icons.e-flip-vertical:before{content:"\E95C"}.e-icons.e-flip-horizontal:before{content:"\E95D"}.e-icons.e-transform-left:before{content:"\E95F"}.e-icons.e-transform-right:before{content:"\E960"}.e-icons.e-sharpness:before{content:"\E961"}.e-icons.e-grain:before{content:"\E962"}.e-icons.e-frame-custom:before{content:"\E964"}.e-icons.e-frame-1:before{content:"\E965"}.e-icons.e-frame-2:before{content:"\E966"}.e-icons.e-frame-3:before{content:"\E967"}.e-icons.e-frame-4:before{content:"\E968"}.e-icons.e-frame-5:before{content:"\E96A"}.e-icons.e-frame-6:before{content:"\E96B"}.e-icons.e-transform:before{content:"\E96C"}.e-icons.e-check-tick:before{content:"\E96D"}.e-icons.e-even-page-break:before{content:"\E96E"}.e-icons.e-odd-page-break:before{content:"\E96F"}.e-icons.e-page-column:before{content:"\E970"}.e-icons.e-continuous-page-break:before{content:"\E971"}.e-icons.e-page-text-wrap:before{content:"\E972"}.e-icons.e-page-column-right:before{content:"\E973"}.e-icons.e-page-column-left:before{content:"\E975"}.e-icons.e-page-column-one:before{content:"\E976"}.e-icons.e-page-column-two:before{content:"\E978"}.e-icons.e-page-column-three:before{content:"\E979"}.e-icons.e-multiple-comment:before{content:"\E97A"}.e-icons.e-format-painter:before{content:"\E97B"}.e-icons.e-launcher:before{content:"\E97C"}.e-icons.e-character-style:before{content:"\E97D"}.e-icons.e-linked-style:before{content:"\E97E"}.e-icons.e-chart-2d-stacked-line-marked:before{content:"\E97F"}.e-icons.e-chart-2d-100-percent-stacked-line-marked:before{content:"\E980"}.e-icons.e-chart-2d-line-marked:before{content:"\E981"}.e-icons.e-list-unordered-rtl:before{content:"\E982"}.e-icons.e-list-ordered-rtl:before{content:"\E983"}.e-icons.e-increase-indent-rtl:before{content:"\E985"}.e-icons.e-decrease-indent-rtl:before{content:"\E986"}.e-icons.e-emoji:before{content:"\E987"}.e-icons.e-travel-and-places:before{content:"\E988"}.e-icons.e-nature:before{content:"\E989"}.e-icons.e-food-and-drinks:before{content:"\E98A"}.e-icons.e-animals:before{content:"\E98B"}.e-icons.e-objects:before{content:"\E98C"}.e-icons.e-activities:before{content:"\E98D"}.e-icons.e-hand-gestures:before{content:"\E98F"}.e-icons.e-symbols:before{content:"\E990"}.e-icons.e-flags:before{content:"\E991"}.e-control,.e-css,.e-error{font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:12px;font-weight:400}.e-error{color:#f44336}.e-control,.e-control [class*=" e-"],.e-control [class^=e-]{-webkit-box-sizing:border-box;box-sizing:border-box}.e-control:focus,.e-control :focus{outline:none}.e-rtl{direction:rtl;text-align:right}.e-overlay{background-color:#383838;filter:alpha(opacity=50);height:100%;opacity:.5;pointer-events:none;-ms-touch-action:none;touch-action:none;width:100%}.e-hidden{display:none}.e-blazor-hidden{visibility:hidden}.e-disabled{background-image:none;cursor:default;filter:alpha(Opacity=35);opacity:.35}.e-ul{list-style-type:none}.e-prevent-select{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-warning{color:#ffca1c}.e-success{color:#22b24b}.e-information{color:#489bd5}.e-block-touch{-ms-touch-action:pinch-zoom;touch-action:pinch-zoom}.e-license{color:#ff0;text-decoration:none}.e-license-banner{position:absolute;right:10px;top:27%;cursor:pointer}@-webkit-keyframes SlideLeftOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes SlideLeftOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@-webkit-keyframes SlideLeftIn{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes SlideLeftIn{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes SlideRightIn{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes SlideRightIn{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes SlideRightOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes SlideRightOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@-webkit-keyframes SlideBottomIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes SlideBottomIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes SlideBottomOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes SlideBottomOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes SlideTopIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes SlideTopIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes SlideTopOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes SlideTopOut{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes SlideRight{0%{width:0}to{width:100%}}@keyframes SlideRight{0%{width:0}to{width:100%}}@-webkit-keyframes SlideLeft{0%{width:100%}to{width:0}}@keyframes SlideLeft{0%{width:100%}to{width:0}}@-webkit-keyframes SlideDown{0%{height:0}to{height:100%}}@keyframes SlideDown{0%{height:0}to{height:100%}}@-webkit-keyframes SlideUp{0%{height:100%}to{height:0}}@keyframes SlideUp{0%{height:100%}to{height:0}}@-webkit-keyframes FadeIn{0%{filter:alpha(opacity=0);opacity:0}to{filter:alpha(opacity=100);opacity:1}}@keyframes FadeIn{0%{filter:alpha(opacity=0);opacity:0}to{filter:alpha(opacity=100);opacity:1}}@-webkit-keyframes FadeOut{0%{filter:alpha(opacity=100);opacity:1}to{filter:alpha(opacity=0);opacity:0}}@keyframes FadeOut{0%{filter:alpha(opacity=100);opacity:1}to{filter:alpha(opacity=0);opacity:0}}@-webkit-keyframes ZoomIn{0%{-webkit-transform:translate(0) scale(0);transform:translate(0) scale(0)}to{-webkit-transform:translate(0) scale(1);transform:translate(0) scale(1)}}@keyframes ZoomIn{0%{-webkit-transform:translate(0) scale(0);transform:translate(0) scale(0)}to{-webkit-transform:translate(0) scale(1);transform:translate(0) scale(1)}}@-webkit-keyframes ZoomOut{0%{-webkit-transform:translate(0) scale(1);transform:translate(0) scale(1)}to{-webkit-transform:translate(0) scale(0);transform:translate(0) scale(0)}}@keyframes ZoomOut{0%{-webkit-transform:translate(0) scale(1);transform:translate(0) scale(1)}to{-webkit-transform:translate(0) scale(0);transform:translate(0) scale(0)}}@-webkit-keyframes FadeZoomIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes FadeZoomIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes FadeZoomOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes FadeZoomOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@-webkit-keyframes FlipRightDownIn{0%{-webkit-transform:perspective(400px) rotateY(-180deg);transform:perspective(400px) rotateY(-180deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipRightDownIn{0%{-webkit-transform:perspective(400px) rotateY(-180deg);transform:perspective(400px) rotateY(-180deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipRightDownOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipRightDownOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipRightUpIn{0%{-webkit-transform:perspective(400px) rotateY(135deg);transform:perspective(400px) rotateY(135deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipRightUpIn{0%{-webkit-transform:perspective(400px) rotateY(135deg);transform:perspective(400px) rotateY(135deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipRightUpOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(135deg);transform:rotateY(135deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipRightUpOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(135deg);transform:rotateY(135deg);-webkit-transform-origin:right center;transform-origin:right center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipLeftDownIn{0%{-webkit-transform:perspective(400px) rotateY(-180deg);transform:perspective(400px) rotateY(-180deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipLeftDownIn{0%{-webkit-transform:perspective(400px) rotateY(-180deg);transform:perspective(400px) rotateY(-180deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipLeftDownOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(135deg);transform:rotateY(135deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipLeftDownOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(135deg);transform:rotateY(135deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipLeftUpIn{0%{-webkit-transform:perspective(400px) rotateY(-135deg);transform:perspective(400px) rotateY(-135deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipLeftUpIn{0%{-webkit-transform:perspective(400px) rotateY(-135deg);transform:perspective(400px) rotateY(-135deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipLeftUpOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(135deg) perspective(200px);transform:rotateY(135deg) perspective(200px);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipLeftUpOut{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}to{-webkit-transform:rotateY(135deg) perspective(200px);transform:rotateY(135deg) perspective(200px);-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipYLeftIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateY(180deg);transform:perspective(400px) rotateY(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(90deg);transform:perspective(700px) rotateY(90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipYLeftIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateY(180deg);transform:perspective(400px) rotateY(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(90deg);transform:perspective(700px) rotateY(90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipYLeftOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(90deg);transform:perspective(700px) rotateY(90deg)}75%{-webkit-transform:perspective(850px) rotateY(125deg);transform:perspective(850px) rotateY(125deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateY(180deg);transform:rotateY(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipYLeftOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(90deg);transform:perspective(700px) rotateY(90deg)}75%{-webkit-transform:perspective(850px) rotateY(125deg);transform:perspective(850px) rotateY(125deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateY(180deg);transform:rotateY(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipYRightIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateY(-180deg);transform:perspective(400px) rotateY(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(-90deg);transform:perspective(700px) rotateY(-90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipYRightIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateY(-180deg);transform:perspective(400px) rotateY(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(-90deg);transform:perspective(700px) rotateY(-90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateY(0deg);transform:rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipYRightOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(-90deg);transform:perspective(700px) rotateY(-90deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipYRightOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateY(-90deg);transform:perspective(700px) rotateY(-90deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipXDownIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateX(180deg);transform:perspective(400px) rotateX(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(90deg);transform:perspective(700px) rotateX(90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateX(0deg);transform:rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipXDownIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateX(180deg);transform:perspective(400px) rotateX(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(90deg);transform:perspective(700px) rotateX(90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateX(0deg);transform:rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipXDownOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(90deg);transform:perspective(700px) rotateX(90deg)}75%{-webkit-transform:perspective(850px) rotateX(125deg);transform:perspective(850px) rotateX(125deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateX(180deg);transform:rotateX(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipXDownOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(90deg);transform:perspective(700px) rotateX(90deg)}75%{-webkit-transform:perspective(850px) rotateX(125deg);transform:perspective(850px) rotateX(125deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateX(180deg);transform:rotateX(180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipXUpIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateX(-180deg);transform:perspective(400px) rotateX(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(-90deg);transform:perspective(700px) rotateX(-90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateX(0deg);transform:rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipXUpIn{0%{filter:alpha(opacity=0);opacity:0;-webkit-transform:perspective(400px) rotateX(-180deg);transform:perspective(400px) rotateX(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(-90deg);transform:perspective(700px) rotateX(-90deg)}to{filter:alpha(opacity=100);opacity:1;-webkit-transform:rotateX(0deg);transform:rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@-webkit-keyframes FlipXUpOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(-90deg);transform:perspective(700px) rotateX(-90deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateX(-180deg);transform:rotateX(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}@keyframes FlipXUpOut{0%{filter:alpha(opacity=100);opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}50%{-webkit-transform:perspective(700px) rotateX(-90deg);transform:perspective(700px) rotateX(-90deg)}to{filter:alpha(opacity=0);opacity:0;-webkit-transform:rotateX(-180deg);transform:rotateX(-180deg);-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}}.e-ripple,.e-ripple-style{overflow:hidden;position:relative;-webkit-transform:translateZ(0);transform:translateZ(0)}.e-ripple-element,.e-ripple-style:after{background-color:rgba(0,0,0,.1);border-radius:0;overflow:hidden;pointer-events:none;position:absolute;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:opacity,-webkit-transform 0ms cubic-bezier(0,.1,.2,1);transition:opacity,-webkit-transform 0ms cubic-bezier(0,.1,.2,1);transition:opacity,transform 0ms cubic-bezier(0,.1,.2,1);transition:opacity,transform 0ms cubic-bezier(0,.1,.2,1),-webkit-transform 0ms cubic-bezier(0,.1,.2,1)}.e-ripple-style:after{background:rgba(0,0,0,.3);content:"";display:block;height:50%;left:25%;opacity:0;top:25%;-webkit-transform:scale(3);-ms-transform:scale(3);transform:scale(3);-webkit-transition:opacity .5s,-webkit-transform .5s;transition:opacity .5s,-webkit-transform .5s;transition:transform .5s,opacity .5s;transition:transform .5s,opacity .5s,-webkit-transform .5s;width:50%}.e-ripple-style:active:after{opacity:1;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:0s;transition:0s}.e-btn,.e-css.e-btn{-webkit-font-smoothing:antialiased;border:1px solid;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:14px;font-weight:500;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;line-height:1.143em;outline:none;padding:6px 12px 4px;text-align:center;text-decoration:none;text-transform:uppercase;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.e-btn:disabled,.e-css.e-btn:disabled{cursor:default}.e-btn:focus,.e-btn:hover,.e-css.e-btn:focus,.e-css.e-btn:hover{text-decoration:none}.e-btn::-moz-focus-inner,.e-css.e-btn::-moz-focus-inner{border:0;padding:0}.e-btn .e-btn-icon,.e-css.e-btn .e-btn-icon{display:inline-block;font-size:12px;margin-top:-2px;vertical-align:middle;width:1em}.e-btn .e-btn-icon.e-icon-left,.e-css.e-btn .e-btn-icon.e-icon-left{margin-left:-.6667em;width:2.25em}.e-btn .e-btn-icon.e-icon-right,.e-css.e-btn .e-btn-icon.e-icon-right{margin-right:-.6667em;width:2.25em}.e-btn .e-btn-icon.e-icon-top,.e-css.e-btn .e-btn-icon.e-icon-top{display:block;margin-top:0;padding-bottom:6px;width:auto}.e-btn .e-btn-icon.e-icon-bottom,.e-css.e-btn .e-btn-icon.e-icon-bottom{display:block;margin-top:0;padding-top:6px;width:auto}.e-btn.e-icon-btn,.e-css.e-btn.e-icon-btn{padding:6px 7px 4px}.e-btn.e-bottom-icon-btn,.e-btn.e-top-icon-btn,.e-css.e-btn.e-bottom-icon-btn,.e-css.e-btn.e-top-icon-btn{line-height:1;padding:12px}.e-btn.e-round,.e-css.e-btn.e-round{border-radius:50%;height:3em;line-height:1;padding:0;width:3em}.e-btn.e-round .e-btn-icon,.e-css.e-btn.e-round .e-btn-icon{font-size:14px;line-height:2.8572em;margin-top:0;width:auto}.e-btn.e-rtl .e-icon-right,.e-css.e-btn.e-rtl .e-icon-right{margin-left:-.6667em;margin-right:0}.e-btn.e-rtl .e-icon-left,.e-css.e-btn.e-rtl .e-icon-left{margin-left:0;margin-right:-.6667em}.e-btn.e-flat,.e-css.e-btn.e-flat{border:1px solid}.e-btn.e-small,.e-css.e-btn.e-small{font-size:12px;line-height:1.5834em;padding:2px 12px 1px}.e-btn.e-small .e-btn-icon,.e-css.e-btn.e-small .e-btn-icon{font-size:11px;width:1.091em}.e-btn.e-small .e-btn-icon.e-icon-left,.e-css.e-btn.e-small .e-btn-icon.e-icon-left{margin-left:-.7273em;width:2.182em}.e-btn.e-small .e-btn-icon.e-icon-right,.e-css.e-btn.e-small .e-btn-icon.e-icon-right{margin-right:-.7273em;width:2.182em}.e-btn.e-small .e-btn-icon.e-icon-top,.e-css.e-btn.e-small .e-btn-icon.e-icon-top{padding-bottom:6px;width:auto}.e-btn.e-small .e-btn-icon.e-icon-bottom,.e-css.e-btn.e-small .e-btn-icon.e-icon-bottom{padding-top:6px;width:auto}.e-btn.e-small.e-icon-btn,.e-css.e-btn.e-small.e-icon-btn{padding:2px 5px 1px}.e-btn.e-small.e-bottom-icon-btn,.e-btn.e-small.e-top-icon-btn,.e-css.e-btn.e-small.e-bottom-icon-btn,.e-css.e-btn.e-small.e-top-icon-btn{line-height:1;padding:12px}.e-btn.e-small.e-round,.e-css.e-btn.e-small.e-round{height:2.5em;line-height:1;padding:0;width:2.5em}.e-btn.e-small.e-round .e-btn-icon,.e-css.e-btn.e-small.e-round .e-btn-icon{font-size:12px;line-height:2.3334em;width:auto}.e-btn.e-small.e-rtl .e-icon-right,.e-css.e-btn.e-small.e-rtl .e-icon-right{margin-left:-.7273em;margin-right:0}.e-btn.e-small.e-rtl .e-icon-left,.e-css.e-btn.e-small.e-rtl .e-icon-left{margin-left:0;margin-right:-.7273em}.e-btn.e-block,.e-css.e-btn.e-block{display:block;width:100%}.e-small.e-btn,.e-small .e-btn,.e-small.e-css.e-btn,.e-small .e-css.e-btn{font-size:12px;line-height:1.5834em;padding:2px 12px 1px}.e-small.e-btn .e-btn-icon,.e-small .e-btn .e-btn-icon,.e-small.e-css.e-btn .e-btn-icon,.e-small .e-css.e-btn .e-btn-icon{font-size:11px;width:1.091em}.e-small.e-btn .e-btn-icon.e-icon-left,.e-small .e-btn .e-btn-icon.e-icon-left,.e-small.e-css.e-btn .e-btn-icon.e-icon-left,.e-small .e-css.e-btn .e-btn-icon.e-icon-left{margin-left:-.7273em;width:2.182em}.e-small.e-btn .e-btn-icon.e-icon-right,.e-small .e-btn .e-btn-icon.e-icon-right,.e-small.e-css.e-btn .e-btn-icon.e-icon-right,.e-small .e-css.e-btn .e-btn-icon.e-icon-right{margin-right:-.7273em;width:2.182em}.e-small.e-btn .e-btn-icon.e-icon-top,.e-small .e-btn .e-btn-icon.e-icon-top,.e-small.e-css.e-btn .e-btn-icon.e-icon-top,.e-small .e-css.e-btn .e-btn-icon.e-icon-top{padding-bottom:6px;width:auto}.e-small.e-btn .e-btn-icon.e-icon-bottom,.e-small .e-btn .e-btn-icon.e-icon-bottom,.e-small.e-css.e-btn .e-btn-icon.e-icon-bottom,.e-small .e-css.e-btn .e-btn-icon.e-icon-bottom{padding-top:6px;width:auto}.e-small.e-btn.e-icon-btn,.e-small .e-btn.e-icon-btn,.e-small.e-css.e-btn.e-icon-btn,.e-small .e-css.e-btn.e-icon-btn{padding:2px 5px 1px}.e-small.e-btn.e-bottom-icon-btn,.e-small .e-btn.e-bottom-icon-btn,.e-small.e-btn.e-top-icon-btn,.e-small .e-btn.e-top-icon-btn,.e-small.e-css.e-btn.e-bottom-icon-btn,.e-small .e-css.e-btn.e-bottom-icon-btn,.e-small.e-css.e-btn.e-top-icon-btn,.e-small .e-css.e-btn.e-top-icon-btn{line-height:1;padding:12px}.e-small.e-btn.e-round,.e-small .e-btn.e-round,.e-small.e-css.e-btn.e-round,.e-small .e-css.e-btn.e-round{height:2.5em;line-height:1;padding:0;width:2.5em;border-radius:50%}.e-small.e-btn.e-round .e-btn-icon,.e-small .e-btn.e-round .e-btn-icon,.e-small.e-css.e-btn.e-round .e-btn-icon,.e-small .e-css.e-btn.e-round .e-btn-icon{font-size:12px;line-height:2.3334em;width:auto}.e-small.e-btn.e-rtl .e-icon-right,.e-small .e-btn.e-rtl .e-icon-right,.e-small.e-css.e-btn.e-rtl .e-icon-right,.e-small .e-css.e-btn.e-rtl .e-icon-right{margin-left:-.7273em;margin-right:0}.e-small.e-btn.e-rtl .e-icon-left,.e-small .e-btn.e-rtl .e-icon-left,.e-small.e-css.e-btn.e-rtl .e-icon-left,.e-small .e-css.e-btn.e-rtl .e-icon-left{margin-left:0;margin-right:-.7273em}.e-bigger.e-small .e-btn,.e-bigger.e-small.e-css.e-btn,.e-bigger.e-small .e-css.e-btn{font-size:14px;line-height:2em;padding:3px 16px 1px}.e-bigger.e-small .e-btn .e-btn-icon,.e-bigger.e-small.e-css.e-btn .e-btn-icon,.e-bigger.e-small .e-css.e-btn .e-btn-icon{font-size:12px;width:1em}.e-bigger.e-small .e-btn .e-btn-icon.e-icon-left,.e-bigger.e-small.e-css.e-btn .e-btn-icon.e-icon-left,.e-bigger.e-small .e-css.e-btn .e-btn-icon.e-icon-left{margin-left:-1em;width:2.6667em}.e-bigger.e-small .e-btn .e-btn-icon.e-icon-right,.e-bigger.e-small.e-css.e-btn .e-btn-icon.e-icon-right,.e-bigger.e-small .e-css.e-btn .e-btn-icon.e-icon-right{margin-right:-1em;width:2.6667em}.e-bigger.e-small .e-btn .e-btn-icon.e-icon-top,.e-bigger.e-small.e-css.e-btn .e-btn-icon.e-icon-top,.e-bigger.e-small .e-css.e-btn .e-btn-icon.e-icon-top{padding-bottom:6px;width:auto}.e-bigger.e-small .e-btn .e-btn-icon.e-icon-bottom,.e-bigger.e-small.e-css.e-btn .e-btn-icon.e-icon-bottom,.e-bigger.e-small .e-css.e-btn .e-btn-icon.e-icon-bottom{padding-top:6px;width:auto}.e-bigger.e-small .e-btn.e-icon-btn,.e-bigger.e-small.e-css.e-btn.e-icon-btn,.e-bigger.e-small .e-css.e-btn.e-icon-btn{padding:3px 10px 1px}.e-bigger.e-small .e-btn.e-bottom-icon-btn,.e-bigger.e-small .e-btn.e-top-icon-btn,.e-bigger.e-small.e-css.e-btn.e-bottom-icon-btn,.e-bigger.e-small .e-css.e-btn.e-bottom-icon-btn,.e-bigger.e-small.e-css.e-btn.e-top-icon-btn,.e-bigger.e-small .e-css.e-btn.e-top-icon-btn{line-height:1;padding:16px}.e-bigger.e-small .e-btn.e-round,.e-bigger.e-small.e-css.e-btn.e-round,.e-bigger.e-small .e-css.e-btn.e-round{height:2.8572em;line-height:1;padding:0;width:2.8572em}.e-bigger.e-small .e-btn.e-round .e-btn-icon,.e-bigger.e-small.e-css.e-btn.e-round .e-btn-icon,.e-bigger.e-small .e-css.e-btn.e-round .e-btn-icon{font-size:14px;line-height:2.7143em;width:auto}.e-bigger.e-small .e-btn.e-rtl .e-icon-right,.e-bigger.e-small.e-css.e-btn.e-rtl .e-icon-right,.e-bigger.e-small .e-css.e-btn.e-rtl .e-icon-right{margin-left:-1em;margin-right:0}.e-bigger.e-small .e-btn.e-rtl .e-icon-left,.e-bigger.e-small.e-css.e-btn.e-rtl .e-icon-left,.e-bigger.e-small .e-css.e-btn.e-rtl .e-icon-left{margin-left:0;margin-right:-1em}.e-bigger .e-btn,.e-bigger.e-css.e-btn,.e-bigger .e-css.e-btn{font-size:14px;line-height:2em;padding:4px 16px 2px}.e-bigger .e-btn .e-btn-icon,.e-bigger.e-css.e-btn .e-btn-icon,.e-bigger .e-css.e-btn .e-btn-icon{font-size:12px;width:1em}.e-bigger .e-btn .e-btn-icon.e-icon-left,.e-bigger.e-css.e-btn .e-btn-icon.e-icon-left,.e-bigger .e-css.e-btn .e-btn-icon.e-icon-left{margin-left:-1em;width:3em}.e-bigger .e-btn .e-btn-icon.e-icon-right,.e-bigger.e-css.e-btn .e-btn-icon.e-icon-right,.e-bigger .e-css.e-btn .e-btn-icon.e-icon-right{margin-right:-1em;width:3em}.e-bigger .e-btn .e-btn-icon.e-icon-top,.e-bigger.e-css.e-btn .e-btn-icon.e-icon-top,.e-bigger .e-css.e-btn .e-btn-icon.e-icon-top{padding-bottom:8px;width:auto}.e-bigger .e-btn .e-btn-icon.e-icon-bottom,.e-bigger.e-css.e-btn .e-btn-icon.e-icon-bottom,.e-bigger .e-css.e-btn .e-btn-icon.e-icon-bottom{padding-top:8px;width:auto}.e-bigger .e-btn.e-icon-btn,.e-bigger.e-css.e-btn.e-icon-btn,.e-bigger .e-css.e-btn.e-icon-btn{padding:4px 11px 2px}.e-bigger .e-btn.e-bottom-icon-btn,.e-bigger .e-btn.e-top-icon-btn,.e-bigger.e-css.e-btn.e-bottom-icon-btn,.e-bigger .e-css.e-btn.e-bottom-icon-btn,.e-bigger.e-css.e-btn.e-top-icon-btn,.e-bigger .e-css.e-btn.e-top-icon-btn{line-height:1;padding:16px}.e-bigger .e-btn.e-round,.e-bigger.e-css.e-btn.e-round,.e-bigger .e-css.e-btn.e-round{height:3.7143em;line-height:1;padding:0;width:3.7143em}.e-bigger .e-btn.e-round .e-btn-icon,.e-bigger.e-css.e-btn.e-round .e-btn-icon,.e-bigger .e-css.e-btn.e-round .e-btn-icon{font-size:16px;line-height:3.125em;width:auto}.e-bigger .e-btn.e-rtl .e-icon-right,.e-bigger.e-css.e-btn.e-rtl .e-icon-right,.e-bigger .e-css.e-btn.e-rtl .e-icon-right{margin-left:-1em;margin-right:0}.e-bigger .e-btn.e-rtl .e-icon-left,.e-bigger.e-css.e-btn.e-rtl .e-icon-left,.e-bigger .e-css.e-btn.e-rtl .e-icon-left{margin-left:0;margin-right:-1em}.e-bigger .e-btn.e-small,.e-bigger.e-css.e-btn.e-small,.e-bigger .e-css.e-btn.e-small{font-size:14px;line-height:2em;padding:3px 16px 1px}.e-bigger .e-btn.e-small .e-btn-icon,.e-bigger.e-css.e-btn.e-small .e-btn-icon,.e-bigger .e-css.e-btn.e-small .e-btn-icon{font-size:12px;width:1em}.e-bigger .e-btn.e-small .e-btn-icon.e-icon-left,.e-bigger.e-css.e-btn.e-small .e-btn-icon.e-icon-left,.e-bigger .e-css.e-btn.e-small .e-btn-icon.e-icon-left{margin-left:-1em;width:2.6667em}.e-bigger .e-btn.e-small .e-btn-icon.e-icon-right,.e-bigger.e-css.e-btn.e-small .e-btn-icon.e-icon-right,.e-bigger .e-css.e-btn.e-small .e-btn-icon.e-icon-right{margin-right:-1em;width:2.6667em}.e-bigger .e-btn.e-small .e-btn-icon.e-icon-top,.e-bigger.e-css.e-btn.e-small .e-btn-icon.e-icon-top,.e-bigger .e-css.e-btn.e-small .e-btn-icon.e-icon-top{padding-bottom:6px;width:auto}.e-bigger .e-btn.e-small .e-btn-icon.e-icon-bottom,.e-bigger.e-css.e-btn.e-small .e-btn-icon.e-icon-bottom,.e-bigger .e-css.e-btn.e-small .e-btn-icon.e-icon-bottom{padding-top:6px;width:auto}.e-bigger .e-btn.e-small.e-icon-btn,.e-bigger.e-css.e-btn.e-small.e-icon-btn,.e-bigger .e-css.e-btn.e-small.e-icon-btn{padding:3px 10px 1px}.e-bigger .e-btn.e-small.e-bottom-icon-btn,.e-bigger .e-btn.e-small.e-top-icon-btn,.e-bigger.e-css.e-btn.e-small.e-bottom-icon-btn,.e-bigger .e-css.e-btn.e-small.e-bottom-icon-btn,.e-bigger.e-css.e-btn.e-small.e-top-icon-btn,.e-bigger .e-css.e-btn.e-small.e-top-icon-btn{line-height:1;padding:16px}.e-bigger .e-btn.e-small.e-round,.e-bigger.e-css.e-btn.e-small.e-round,.e-bigger .e-css.e-btn.e-small.e-round{height:2.8572em;line-height:1;padding:0;width:2.8572em}.e-bigger .e-btn.e-small.e-round .e-btn-icon,.e-bigger.e-css.e-btn.e-small.e-round .e-btn-icon,.e-bigger .e-css.e-btn.e-small.e-round .e-btn-icon{font-size:14px;line-height:2.7143em;width:auto}.e-bigger .e-btn.e-small.e-rtl .e-icon-right,.e-bigger.e-css.e-btn.e-small.e-rtl .e-icon-right,.e-bigger .e-css.e-btn.e-small.e-rtl .e-icon-right{margin-left:-1em;margin-right:0}.e-bigger .e-btn.e-small.e-rtl .e-icon-left,.e-bigger.e-css.e-btn.e-small.e-rtl .e-icon-left,.e-bigger .e-css.e-btn.e-small.e-rtl .e-icon-left{margin-left:0;margin-right:-1em}.e-btn,.e-css.e-btn{-webkit-tap-highlight-color:transparent;background:#fafafa;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);color:rgba(0,0,0,.87);-webkit-transition:-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);transition:box-shadow .28s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1)}.e-btn:hover,.e-css.e-btn:hover{background:hsla(0,0%,88.6%,.9844)}.e-btn:focus,.e-btn:hover,.e-css.e-btn:focus,.e-css.e-btn:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);color:rgba(0,0,0,.87)}.e-btn:focus,.e-css.e-btn:focus{background:rgba(0,0,0,.18);outline:0 solid #fafafa;outline-offset:0}.e-btn:active,.e-css.e-btn:active{outline:0 solid #fafafa;outline-offset:0}.e-btn.e-active,.e-btn:active,.e-css.e-btn.e-active,.e-css.e-btn:active{background:hsla(0,0%,72.2%,.9584);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.e-btn.e-disabled,.e-btn:disabled,.e-css.e-btn.e-disabled,.e-css.e-btn:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn .e-ripple-element,.e-css.e-btn .e-ripple-element{background:rgba(0,0,0,.24)}.e-btn.e-round,.e-btn.e-round-edge,.e-css.e-btn.e-round,.e-css.e-btn.e-round-edge{background:#fafafa;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87)}.e-btn.e-round-edge:hover,.e-btn.e-round:hover,.e-css.e-btn.e-round-edge:hover,.e-css.e-btn.e-round:hover{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,.12);color:rgba(0,0,0,.87)}.e-btn.e-round-edge:focus,.e-btn.e-round:focus,.e-css.e-btn.e-round-edge:focus,.e-css.e-btn.e-round:focus{background:rgba(0,0,0,.18);border-color:rgba(0,0,0,0);-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);color:rgba(0,0,0,.87);outline:0 solid #fafafa;outline-offset:0}.e-btn.e-round-edge:active,.e-btn.e-round:active,.e-css.e-btn.e-round-edge:active,.e-css.e-btn.e-round:active{background:hsla(0,0%,72.2%,.9584);border-color:rgba(0,0,0,0);-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);color:rgba(0,0,0,.87);outline:0 solid #fafafa;outline-offset:0}.e-btn.e-round-edge.e-disabled,.e-btn.e-round-edge:disabled,.e-btn.e-round.e-disabled,.e-btn.e-round:disabled,.e-css.e-btn.e-round-edge.e-disabled,.e-css.e-btn.e-round-edge:disabled,.e-css.e-btn.e-round.e-disabled,.e-css.e-btn.e-round:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-round-edge.e-primary:hover,.e-btn.e-round.e-primary:hover,.e-css.e-btn.e-round-edge.e-primary:hover,.e-css.e-btn.e-round.e-primary:hover{border-color:#e3165b}.e-btn.e-round-edge.e-primary:focus,.e-btn.e-round.e-primary:focus,.e-css.e-btn.e-round-edge.e-primary:focus,.e-css.e-btn.e-round.e-primary:focus{outline:0 solid #fafafa}.e-btn.e-round-edge.e-success:hover,.e-btn.e-round.e-success:hover,.e-css.e-btn.e-round-edge.e-success:hover,.e-css.e-btn.e-round.e-success:hover{border-color:#4d841d}.e-btn.e-round-edge.e-success:focus,.e-btn.e-round.e-success:focus,.e-css.e-btn.e-round-edge.e-success:focus,.e-css.e-btn.e-round.e-success:focus{outline:0 solid #fafafa}.e-btn.e-round-edge.e-info:hover,.e-btn.e-round.e-info:hover,.e-css.e-btn.e-round-edge.e-info:hover,.e-css.e-btn.e-round.e-info:hover{border-color:#0378d5}.e-btn.e-round-edge.e-info:focus,.e-btn.e-round.e-info:focus,.e-css.e-btn.e-round-edge.e-info:focus,.e-css.e-btn.e-round.e-info:focus{outline:0 solid #fafafa}.e-btn.e-round-edge.e-warning:hover,.e-btn.e-round.e-warning:hover,.e-css.e-btn.e-round-edge.e-warning:hover,.e-css.e-btn.e-round.e-warning:hover{border-color:#c15700}.e-btn.e-round-edge.e-warning:focus,.e-btn.e-round.e-warning:focus,.e-css.e-btn.e-round-edge.e-warning:focus,.e-css.e-btn.e-round.e-warning:focus{outline:0 solid #fafafa}.e-btn.e-round-edge.e-danger:hover,.e-btn.e-round.e-danger:hover,.e-css.e-btn.e-round-edge.e-danger:hover,.e-css.e-btn.e-round.e-danger:hover{border-color:#d64113}.e-btn.e-round-edge.e-danger:focus,.e-btn.e-round.e-danger:focus,.e-css.e-btn.e-round-edge.e-danger:focus,.e-css.e-btn.e-round.e-danger:focus{outline:0 solid #fafafa}.e-btn.e-primary,.e-css.e-btn.e-primary{background:#e3165b;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-primary:hover,.e-css.e-btn.e-primary:hover{background:#e6326f}.e-btn.e-primary:focus,.e-btn.e-primary:hover,.e-css.e-btn.e-primary:focus,.e-css.e-btn.e-primary:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);color:#fff}.e-btn.e-primary:focus,.e-css.e-btn.e-primary:focus{background:#ea4e82;outline:0 solid #fafafa}.e-btn.e-primary:active,.e-css.e-btn.e-primary:active{outline:0 solid #fafafa}.e-btn.e-primary.e-active,.e-btn.e-primary:active,.e-css.e-btn.e-primary.e-active,.e-css.e-btn.e-primary:active{background:#ec618f;border-color:rgba(0,0,0,0);color:#fff;-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.e-btn.e-primary.e-disabled,.e-btn.e-primary:disabled,.e-css.e-btn.e-primary.e-disabled,.e-css.e-btn.e-primary:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-primary .e-ripple-element,.e-css.e-btn.e-primary .e-ripple-element{background:hsla(0,0%,100%,.24)}.e-btn.e-success,.e-css.e-btn.e-success{background:#4d841d;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-success:hover,.e-css.e-btn.e-success:hover{background:#629338}.e-btn.e-success:focus,.e-btn.e-success:hover,.e-css.e-btn.e-success:focus,.e-css.e-btn.e-success:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);color:#fff}.e-btn.e-success:focus,.e-css.e-btn.e-success:focus{background:#78a253}.e-btn.e-success.e-active,.e-btn.e-success:active,.e-css.e-btn.e-success.e-active,.e-css.e-btn.e-success:active{background:#86ab65;border-color:rgba(0,0,0,0);color:#fff;-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.e-btn.e-success.e-disabled,.e-btn.e-success:disabled,.e-css.e-btn.e-success.e-disabled,.e-css.e-btn.e-success:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-success .e-ripple-element,.e-css.e-btn.e-success .e-ripple-element{background:hsla(0,0%,100%,.24)}.e-btn.e-info,.e-css.e-btn.e-info{background:#0378d5;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-info:hover,.e-css.e-btn.e-info:hover{background:#2188da}.e-btn.e-info:focus,.e-btn.e-info:hover,.e-css.e-btn.e-info:focus,.e-css.e-btn.e-info:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);color:#fff}.e-btn.e-info:focus,.e-css.e-btn.e-info:focus{background:#3f98df}.e-btn.e-info.e-active,.e-btn.e-info:active,.e-css.e-btn.e-info.e-active,.e-css.e-btn.e-info:active{background:#54a3e2;color:#fff;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.e-btn.e-info.e-disabled,.e-btn.e-info:disabled,.e-css.e-btn.e-info.e-disabled,.e-css.e-btn.e-info:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-info .e-ripple-element,.e-css.e-btn.e-info .e-ripple-element{background:hsla(0,0%,100%,.24)}.e-btn.e-warning,.e-css.e-btn.e-warning{background:#c15700;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-warning:hover,.e-css.e-btn.e-warning:hover{background:#c86b1f}.e-btn.e-warning:focus,.e-btn.e-warning:hover,.e-css.e-btn.e-warning:focus,.e-css.e-btn.e-warning:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);color:#fff}.e-btn.e-warning:focus,.e-css.e-btn.e-warning:focus{background:#d07f3d}.e-btn.e-warning.e-active,.e-btn.e-warning:active,.e-css.e-btn.e-warning.e-active,.e-css.e-btn.e-warning:active{background:#d58d52;border-color:rgba(0,0,0,0);color:#fff;-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.e-btn.e-warning.e-disabled,.e-btn.e-warning:disabled,.e-css.e-btn.e-warning.e-disabled,.e-css.e-btn.e-warning:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-warning .e-ripple-element,.e-css.e-btn.e-warning .e-ripple-element{background:hsla(0,0%,100%,.24)}.e-btn.e-danger,.e-css.e-btn.e-danger{background:#d64113;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-danger:hover,.e-css.e-btn.e-danger:hover{background:#db582f}.e-btn.e-danger:focus,.e-btn.e-danger:hover,.e-css.e-btn.e-danger:focus,.e-css.e-btn.e-danger:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);color:#fff}.e-btn.e-danger:focus,.e-css.e-btn.e-danger:focus{background:#e06f4c}.e-btn.e-danger.e-active,.e-btn.e-danger:active,.e-css.e-btn.e-danger.e-active,.e-css.e-btn.e-danger:active{background:#e37e5f;border-color:rgba(0,0,0,0);color:#fff;-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.e-btn.e-danger.e-disabled,.e-btn.e-danger:disabled,.e-css.e-btn.e-danger.e-disabled,.e-css.e-btn.e-danger:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-danger .e-ripple-element,.e-css.e-btn.e-danger .e-ripple-element{background:hsla(0,0%,100%,.24)}.e-btn.e-flat,.e-css.e-btn.e-flat{background:rgba(0,0,0,0)}.e-btn.e-flat,.e-btn.e-flat:hover,.e-css.e-btn.e-flat,.e-css.e-btn.e-flat:hover{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.87)}.e-btn.e-flat:hover,.e-css.e-btn.e-flat:hover{background:rgba(0,0,0,.0348)}.e-btn.e-flat:focus,.e-css.e-btn.e-flat:focus{background:rgba(0,0,0,.1044);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-active,.e-btn.e-flat:active,.e-css.e-btn.e-flat.e-active,.e-css.e-btn.e-flat:active{background:rgba(0,0,0,.2088);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-disabled,.e-btn.e-flat:disabled,.e-css.e-btn.e-flat.e-disabled,.e-css.e-btn.e-flat:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-flat .e-ripple-element,.e-css.e-btn.e-flat .e-ripple-element{background:rgba(0,0,0,.12)}.e-btn.e-flat.e-primary,.e-css.e-btn.e-flat.e-primary{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#e3165b}.e-btn.e-flat.e-primary:hover,.e-css.e-btn.e-flat.e-primary:hover{background:rgba(227,22,91,.04);border-color:rgba(0,0,0,0);color:#e3165b}.e-btn.e-flat.e-primary:focus,.e-css.e-btn.e-flat.e-primary:focus{background:rgba(227,22,91,.12);border-color:rgba(0,0,0,0);color:#e3165b}.e-btn.e-flat.e-primary.e-active,.e-btn.e-flat.e-primary:active,.e-css.e-btn.e-flat.e-primary.e-active,.e-css.e-btn.e-flat.e-primary:active{background:rgba(227,22,91,.24);border-color:rgba(0,0,0,0);color:#e3165b}.e-btn.e-flat.e-primary.e-disabled,.e-btn.e-flat.e-primary:disabled,.e-css.e-btn.e-flat.e-primary.e-disabled,.e-css.e-btn.e-flat.e-primary:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-flat.e-primary .e-ripple-element,.e-css.e-btn.e-flat.e-primary .e-ripple-element{background:rgba(227,22,91,.12)}.e-btn.e-flat.e-success,.e-css.e-btn.e-flat.e-success{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#4d841d}.e-btn.e-flat.e-success:hover,.e-css.e-btn.e-flat.e-success:hover{background:rgba(77,132,29,.04);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#4d841d}.e-btn.e-flat.e-success:focus,.e-css.e-btn.e-flat.e-success:focus{background:rgba(77,132,29,.12);border-color:rgba(0,0,0,0);color:#4d841d;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-success.e-active,.e-btn.e-flat.e-success:active,.e-css.e-btn.e-flat.e-success.e-active,.e-css.e-btn.e-flat.e-success:active{background:rgba(77,132,29,.24);border-color:rgba(0,0,0,0);color:#4d841d;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-success.e-disabled,.e-btn.e-flat.e-success:disabled,.e-css.e-btn.e-flat.e-success.e-disabled,.e-css.e-btn.e-flat.e-success:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-btn.e-flat.e-success .e-ripple-element,.e-css.e-btn.e-flat.e-success .e-ripple-element{background:rgba(77,132,29,.12)}.e-btn.e-flat.e-info,.e-css.e-btn.e-flat.e-info{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#0378d5}.e-btn.e-flat.e-info:hover,.e-css.e-btn.e-flat.e-info:hover{background:rgba(3,120,213,.04);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#0378d5}.e-btn.e-flat.e-info:focus,.e-css.e-btn.e-flat.e-info:focus{background:rgba(3,120,213,.12);border-color:rgba(0,0,0,0);color:#0378d5;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-info.e-active,.e-btn.e-flat.e-info:active,.e-css.e-btn.e-flat.e-info.e-active,.e-css.e-btn.e-flat.e-info:active{background:rgba(3,120,213,.24);border-color:rgba(0,0,0,0);color:#0378d5;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-info.e-disabled,.e-btn.e-flat.e-info:disabled,.e-css.e-btn.e-flat.e-info.e-disabled,.e-css.e-btn.e-flat.e-info:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-btn.e-flat.e-info .e-ripple-element,.e-css.e-btn.e-flat.e-info .e-ripple-element{background:rgba(3,120,213,.12)}.e-btn.e-flat.e-warning,.e-css.e-btn.e-flat.e-warning{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#c15700}.e-btn.e-flat.e-warning:hover,.e-css.e-btn.e-flat.e-warning:hover{background:rgba(193,87,0,.04);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#c15700}.e-btn.e-flat.e-warning:focus,.e-css.e-btn.e-flat.e-warning:focus{background:rgba(193,87,0,.12);border-color:rgba(0,0,0,0);color:#c15700;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-warning.e-active,.e-btn.e-flat.e-warning:active,.e-css.e-btn.e-flat.e-warning.e-active,.e-css.e-btn.e-flat.e-warning:active{background:rgba(193,87,0,.24);border-color:rgba(0,0,0,0);color:#c15700;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-warning.e-disabled,.e-btn.e-flat.e-warning:disabled,.e-css.e-btn.e-flat.e-warning.e-disabled,.e-css.e-btn.e-flat.e-warning:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-btn.e-flat.e-warning .e-ripple-element,.e-css.e-btn.e-flat.e-warning .e-ripple-element{background:rgba(193,87,0,.12)}.e-btn.e-flat.e-danger,.e-css.e-btn.e-flat.e-danger{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#d64113}.e-btn.e-flat.e-danger:hover,.e-css.e-btn.e-flat.e-danger:hover{background:rgba(214,65,19,.04);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#d64113}.e-btn.e-flat.e-danger:focus,.e-css.e-btn.e-flat.e-danger:focus{background:rgba(214,65,19,.12);border-color:rgba(0,0,0,0);color:#d64113;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-danger.e-active,.e-btn.e-flat.e-danger:active,.e-css.e-btn.e-flat.e-danger.e-active,.e-css.e-btn.e-flat.e-danger:active{background:rgba(214,65,19,.24);border-color:rgba(0,0,0,0);color:#d64113;-webkit-box-shadow:none;box-shadow:none}.e-btn.e-flat.e-danger.e-disabled,.e-btn.e-flat.e-danger:disabled,.e-css.e-btn.e-flat.e-danger.e-disabled,.e-css.e-btn.e-flat.e-danger:disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-btn.e-flat.e-danger .e-ripple-element,.e-css.e-btn.e-flat.e-danger .e-ripple-element{background:rgba(214,65,19,.12)}.e-btn.e-outline,.e-css.e-btn.e-outline{background:rgba(0,0,0,0);border-color:#adadad;-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.87)}.e-btn.e-outline:hover,.e-css.e-btn.e-outline:hover{background:rgba(0,0,0,.12);border-color:#adadad;-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.87)}.e-btn.e-outline:focus,.e-css.e-btn.e-outline:focus{-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.e-btn.e-outline.e-active,.e-btn.e-outline:active,.e-css.e-btn.e-outline.e-active,.e-css.e-btn.e-outline:active{background:rgba(0,0,0,.32);border-color:#adadad;-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.87)}.e-btn.e-outline:disabled,.e-css.e-btn.e-outline:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-outline.e-primary,.e-css.e-btn.e-outline.e-primary{background:rgba(0,0,0,0);border-color:#e3165b;color:#e3165b}.e-btn.e-outline.e-primary:hover,.e-css.e-btn.e-outline.e-primary:hover{background:#e6326f;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-outline.e-primary.e-active,.e-btn.e-outline.e-primary:active,.e-css.e-btn.e-outline.e-primary.e-active,.e-css.e-btn.e-outline.e-primary:active{background:#ec618f;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-btn.e-outline.e-primary.e-disabled,.e-btn.e-outline.e-primary:disabled,.e-css.e-btn.e-outline.e-primary.e-disabled,.e-css.e-btn.e-outline.e-primary:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-outline.e-success,.e-css.e-btn.e-outline.e-success{background:rgba(0,0,0,0);border-color:#4d841d;color:#4d841d}.e-btn.e-outline.e-success:hover,.e-css.e-btn.e-outline.e-success:hover{background:#629338;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-outline.e-success.e-active,.e-btn.e-outline.e-success:active,.e-css.e-btn.e-outline.e-success.e-active,.e-css.e-btn.e-outline.e-success:active{background:#86ab65;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-btn.e-outline.e-success.e-disabled,.e-btn.e-outline.e-success:disabled,.e-css.e-btn.e-outline.e-success.e-disabled,.e-css.e-btn.e-outline.e-success:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-outline.e-info,.e-css.e-btn.e-outline.e-info{background:rgba(0,0,0,0);border-color:#0378d5;color:#0378d5}.e-btn.e-outline.e-info:hover,.e-css.e-btn.e-outline.e-info:hover{background:#2188da;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-outline.e-info.e-active,.e-btn.e-outline.e-info:active,.e-css.e-btn.e-outline.e-info.e-active,.e-css.e-btn.e-outline.e-info:active{background:#54a3e2;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-btn.e-outline.e-info.e-disabled,.e-btn.e-outline.e-info:disabled,.e-css.e-btn.e-outline.e-info.e-disabled,.e-css.e-btn.e-outline.e-info:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-outline.e-warning,.e-css.e-btn.e-outline.e-warning{background:rgba(0,0,0,0);border-color:#c15700;color:#c15700}.e-btn.e-outline.e-warning:hover,.e-css.e-btn.e-outline.e-warning:hover{background:#c86b1f;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-outline.e-warning.e-active,.e-btn.e-outline.e-warning:active,.e-css.e-btn.e-outline.e-warning.e-active,.e-css.e-btn.e-outline.e-warning:active{background:#d58d52;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-btn.e-outline.e-warning.e-disabled,.e-btn.e-outline.e-warning:disabled,.e-css.e-btn.e-outline.e-warning.e-disabled,.e-css.e-btn.e-outline.e-warning:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-outline.e-danger,.e-css.e-btn.e-outline.e-danger{background:rgba(0,0,0,0);border-color:#d64113;color:#d64113}.e-btn.e-outline.e-danger:hover,.e-css.e-btn.e-outline.e-danger:hover{background:#db582f;border-color:rgba(0,0,0,0);color:#fff}.e-btn.e-outline.e-danger.e-active,.e-btn.e-outline.e-danger:active,.e-css.e-btn.e-outline.e-danger.e-active,.e-css.e-btn.e-outline.e-danger:active{background:#e37e5f;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-btn.e-outline.e-danger.e-disabled,.e-btn.e-outline.e-danger:disabled,.e-css.e-btn.e-outline.e-danger.e-disabled,.e-css.e-btn.e-outline.e-danger:disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.26)}.e-btn.e-link,.e-css.e-btn.e-link{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);border-radius:0;-webkit-box-shadow:none;box-shadow:none;color:#0d47a1}.e-btn.e-link:focus,.e-btn.e-link:hover,.e-css.e-btn.e-link:focus,.e-css.e-btn.e-link:hover{border-radius:0;color:#0a3576;text-decoration:underline}.e-btn.e-link:focus:not(:focus-visible),.e-css.e-btn.e-link:focus:not(:focus-visible){outline:none!important}.e-btn.e-link:disabled,.e-css.e-btn.e-link:disabled{color:rgba(0,0,0,.26);background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.e-btn.e-inherit,.e-css.e-btn.e-inherit{color:inherit;background:inherit;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.e-btn.e-inherit.e-active,.e-btn.e-inherit:active,.e-btn.e-inherit:focus,.e-btn.e-inherit:hover,.e-css.e-btn.e-inherit.e-active,.e-css.e-btn.e-inherit:active,.e-css.e-btn.e-inherit:focus,.e-css.e-btn.e-inherit:hover{background:rgba(0,0,0,.056);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:inherit;outline:none}.e-btn.e-inherit:disabled,.e-css.e-btn.e-inherit:disabled{background:inherit;color:inherit;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;opacity:.5}.e-checkbox-wrapper .e-check:before,.e-css.e-checkbox-wrapper .e-check:before{content:"\E933"}.e-checkbox-wrapper .e-stop:before,.e-css.e-checkbox-wrapper .e-stop:before{content:"\E934"}.e-checkbox-wrapper,.e-css.e-checkbox-wrapper{cursor:pointer;display:inline-block;line-height:1;outline:none;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-checkbox-wrapper label,.e-css.e-checkbox-wrapper label{cursor:pointer;display:inline-block;line-height:0;margin:0;position:relative;white-space:nowrap}.e-checkbox-wrapper.e-focus .e-frame,.e-checkbox-wrapper:focus .e-frame,.e-css.e-checkbox-wrapper.e-focus .e-frame,.e-css.e-checkbox-wrapper:focus .e-frame{-webkit-box-shadow:none;box-shadow:none}.e-checkbox-wrapper .e-ripple-container,.e-css.e-checkbox-wrapper .e-ripple-container{border-radius:50%;bottom:-9px;height:36px;left:-9px;pointer-events:none;position:absolute;right:-9px;top:-9px;width:36px;z-index:1}.e-checkbox-wrapper .e-label,.e-css.e-checkbox-wrapper .e-label{cursor:pointer;display:inline-block;font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:13px;font-weight:400;line-height:18px;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:normal}.e-checkbox-wrapper .e-checkbox,.e-css.e-checkbox-wrapper .e-checkbox{height:1px;opacity:0;position:absolute;width:1px}.e-checkbox-wrapper .e-checkbox+.e-label,.e-css.e-checkbox-wrapper .e-checkbox+.e-label{margin-right:10px}.e-checkbox-wrapper .e-frame,.e-css.e-checkbox-wrapper .e-frame{border:2px solid;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:e-icons;height:18px;line-height:10px;padding:2px 0;text-align:center;vertical-align:middle;width:18px}.e-checkbox-wrapper .e-frame+.e-label,.e-css.e-checkbox-wrapper .e-frame+.e-label{margin-left:10px}.e-checkbox-wrapper .e-frame+.e-ripple-container,.e-css.e-checkbox-wrapper .e-frame+.e-ripple-container{left:auto}.e-checkbox-wrapper .e-check,.e-css.e-checkbox-wrapper .e-check{font-size:12px}.e-checkbox-wrapper .e-stop,.e-css.e-checkbox-wrapper .e-stop{font-size:10px;line-height:10px}.e-checkbox-wrapper.e-checkbox-disabled,.e-css.e-checkbox-wrapper.e-checkbox-disabled{cursor:default;pointer-events:none}.e-checkbox-wrapper.e-checkbox-disabled .e-frame,.e-checkbox-wrapper.e-checkbox-disabled .e-label,.e-css.e-checkbox-wrapper.e-checkbox-disabled .e-frame,.e-css.e-checkbox-wrapper.e-checkbox-disabled .e-label{cursor:default}.e-checkbox-wrapper.e-rtl .e-ripple-container,.e-css.e-checkbox-wrapper.e-rtl .e-ripple-container{right:-9px}.e-checkbox-wrapper.e-rtl .e-frame,.e-css.e-checkbox-wrapper.e-rtl .e-frame{margin:0}.e-checkbox-wrapper.e-rtl .e-frame:hover,.e-css.e-checkbox-wrapper.e-rtl .e-frame:hover{background-color:#fff;border-color:#757575}.e-checkbox-wrapper.e-rtl .e-frame+.e-ripple-container,.e-css.e-checkbox-wrapper.e-rtl .e-frame+.e-ripple-container{left:-9px;right:auto}.e-checkbox-wrapper.e-rtl .e-label,.e-css.e-checkbox-wrapper.e-rtl .e-label{margin-left:0;margin-right:10px}.e-checkbox-wrapper.e-rtl .e-label+.e-frame,.e-css.e-checkbox-wrapper.e-rtl .e-label+.e-frame{margin:0}.e-checkbox-wrapper.e-rtl .e-checkbox+.e-label,.e-css.e-checkbox-wrapper.e-rtl .e-checkbox+.e-label{margin-left:10px;margin-right:0}.e-checkbox-wrapper.e-small .e-frame,.e-css.e-checkbox-wrapper.e-small .e-frame{height:14px;line-height:6px;width:14px}.e-checkbox-wrapper.e-small .e-check,.e-css.e-checkbox-wrapper.e-small .e-check{font-size:10px}.e-checkbox-wrapper.e-small .e-stop,.e-css.e-checkbox-wrapper.e-small .e-stop{font-size:8px;line-height:6px}.e-checkbox-wrapper.e-small .e-label,.e-css.e-checkbox-wrapper.e-small .e-label{font-size:13px;line-height:14px}.e-checkbox-wrapper.e-small .e-ripple-container,.e-css.e-checkbox-wrapper.e-small .e-ripple-container{bottom:-9px;height:32px;left:-9px;right:-9px;top:-9px;width:32px}.e-checkbox-wrapper[readonly]{pointer-events:none}.e-small.e-checkbox-wrapper .e-frame,.e-small .e-checkbox-wrapper .e-frame,.e-small.e-css.e-checkbox-wrapper .e-frame,.e-small .e-css.e-checkbox-wrapper .e-frame{height:14px;line-height:6px;width:14px}.e-small.e-checkbox-wrapper .e-frame:hover,.e-small .e-checkbox-wrapper .e-frame:hover,.e-small.e-css.e-checkbox-wrapper .e-frame:hover,.e-small .e-css.e-checkbox-wrapper .e-frame:hover{background-color:#fff;border-color:#757575}.e-small.e-checkbox-wrapper .e-check,.e-small .e-checkbox-wrapper .e-check,.e-small.e-css.e-checkbox-wrapper .e-check,.e-small .e-css.e-checkbox-wrapper .e-check{font-size:10px}.e-small.e-checkbox-wrapper .e-stop,.e-small .e-checkbox-wrapper .e-stop,.e-small.e-css.e-checkbox-wrapper .e-stop,.e-small .e-css.e-checkbox-wrapper .e-stop{font-size:8px;line-height:6px}.e-small.e-checkbox-wrapper .e-label,.e-small .e-checkbox-wrapper .e-label,.e-small.e-css.e-checkbox-wrapper .e-label,.e-small .e-css.e-checkbox-wrapper .e-label{font-size:13px;line-height:14px}.e-small.e-checkbox-wrapper .e-ripple-container,.e-small .e-checkbox-wrapper .e-ripple-container,.e-small.e-css.e-checkbox-wrapper .e-ripple-container,.e-small .e-css.e-checkbox-wrapper .e-ripple-container{bottom:-9px;height:32px;left:-9px;right:-9px;top:-9px;width:32px}.e-bigger.e-small.e-checkbox-wrapper .e-frame,.e-bigger.e-small .e-checkbox-wrapper .e-frame,.e-bigger.e-small.e-css.e-checkbox-wrapper .e-frame,.e-bigger.e-small .e-css.e-checkbox-wrapper .e-frame{height:20px;line-height:12px;width:20px}.e-bigger.e-small.e-checkbox-wrapper .e-frame:hover,.e-bigger.e-small .e-checkbox-wrapper .e-frame:hover,.e-bigger.e-small.e-css.e-checkbox-wrapper .e-frame:hover,.e-bigger.e-small .e-css.e-checkbox-wrapper .e-frame:hover{background-color:#fff;border-color:#757575}.e-bigger.e-small.e-checkbox-wrapper .e-check,.e-bigger.e-small .e-checkbox-wrapper .e-check,.e-bigger.e-small.e-css.e-checkbox-wrapper .e-check,.e-bigger.e-small .e-css.e-checkbox-wrapper .e-check{font-size:12px}.e-bigger.e-small.e-checkbox-wrapper .e-stop,.e-bigger.e-small .e-checkbox-wrapper .e-stop,.e-bigger.e-small.e-css.e-checkbox-wrapper .e-stop,.e-bigger.e-small .e-css.e-checkbox-wrapper .e-stop{font-size:10px;line-height:12px}.e-bigger.e-small.e-checkbox-wrapper .e-label,.e-bigger.e-small .e-checkbox-wrapper .e-label,.e-bigger.e-small.e-css.e-checkbox-wrapper .e-label,.e-bigger.e-small .e-css.e-checkbox-wrapper .e-label{font-size:14px;line-height:20px}.e-bigger.e-small.e-checkbox-wrapper .e-ripple-container,.e-bigger.e-small .e-checkbox-wrapper .e-ripple-container,.e-bigger.e-small.e-css.e-checkbox-wrapper .e-ripple-container,.e-bigger.e-small .e-css.e-checkbox-wrapper .e-ripple-container{bottom:-9px;height:38px;left:-9px;right:-9px;top:-9px;width:38px}.e-bigger.e-checkbox-wrapper .e-frame,.e-bigger .e-checkbox-wrapper .e-frame,.e-bigger.e-css.e-checkbox-wrapper .e-frame,.e-bigger .e-css.e-checkbox-wrapper .e-frame{height:22px;line-height:14px;width:22px}.e-bigger.e-checkbox-wrapper .e-frame:hover,.e-bigger .e-checkbox-wrapper .e-frame:hover,.e-bigger.e-css.e-checkbox-wrapper .e-frame:hover,.e-bigger .e-css.e-checkbox-wrapper .e-frame:hover{background-color:#fff;border-color:#757575}.e-bigger.e-checkbox-wrapper .e-frame+.e-label,.e-bigger .e-checkbox-wrapper .e-frame+.e-label,.e-bigger.e-css.e-checkbox-wrapper .e-frame+.e-label,.e-bigger .e-css.e-checkbox-wrapper .e-frame+.e-label{font-size:14px;line-height:22px;margin-left:12px}.e-bigger.e-checkbox-wrapper .e-frame+.e-ripple-container,.e-bigger .e-checkbox-wrapper .e-frame+.e-ripple-container,.e-bigger.e-css.e-checkbox-wrapper .e-frame+.e-ripple-container,.e-bigger .e-css.e-checkbox-wrapper .e-frame+.e-ripple-container{left:auto}.e-bigger.e-checkbox-wrapper .e-check,.e-bigger .e-checkbox-wrapper .e-check,.e-bigger.e-css.e-checkbox-wrapper .e-check,.e-bigger .e-css.e-checkbox-wrapper .e-check{font-size:16px}.e-bigger.e-checkbox-wrapper .e-stop,.e-bigger .e-checkbox-wrapper .e-stop,.e-bigger.e-css.e-checkbox-wrapper .e-stop,.e-bigger .e-css.e-checkbox-wrapper .e-stop{font-size:12px;line-height:14px}.e-bigger.e-checkbox-wrapper .e-label,.e-bigger .e-checkbox-wrapper .e-label,.e-bigger.e-css.e-checkbox-wrapper .e-label,.e-bigger .e-css.e-checkbox-wrapper .e-label{font-size:14px}.e-bigger.e-checkbox-wrapper .e-ripple-container,.e-bigger .e-checkbox-wrapper .e-ripple-container,.e-bigger.e-css.e-checkbox-wrapper .e-ripple-container,.e-bigger .e-css.e-checkbox-wrapper .e-ripple-container{bottom:-9px;height:40px;left:-9px;right:-9px;top:-9px;width:40px}.e-bigger.e-checkbox-wrapper.e-rtl .e-frame,.e-bigger .e-checkbox-wrapper.e-rtl .e-frame,.e-bigger.e-css.e-checkbox-wrapper.e-rtl .e-frame,.e-bigger .e-css.e-checkbox-wrapper.e-rtl .e-frame{margin:0}.e-bigger.e-checkbox-wrapper.e-rtl .e-frame:hover,.e-bigger .e-checkbox-wrapper.e-rtl .e-frame:hover,.e-bigger.e-css.e-checkbox-wrapper.e-rtl .e-frame:hover,.e-bigger .e-css.e-checkbox-wrapper.e-rtl .e-frame:hover{background-color:#fff;border-color:#757575}.e-bigger.e-checkbox-wrapper.e-rtl .e-frame+.e-label,.e-bigger .e-checkbox-wrapper.e-rtl .e-frame+.e-label,.e-bigger.e-css.e-checkbox-wrapper.e-rtl .e-frame+.e-label,.e-bigger .e-css.e-checkbox-wrapper.e-rtl .e-frame+.e-label{margin-left:0;margin-right:12px}.e-bigger.e-checkbox-wrapper.e-rtl .e-frame+.e-ripple-container,.e-bigger .e-checkbox-wrapper.e-rtl .e-frame+.e-ripple-container,.e-bigger.e-css.e-checkbox-wrapper.e-rtl .e-frame+.e-ripple-container,.e-bigger .e-css.e-checkbox-wrapper.e-rtl .e-frame+.e-ripple-container{left:auto;right:auto}.e-bigger.e-checkbox-wrapper.e-small .e-frame,.e-bigger .e-checkbox-wrapper.e-small .e-frame,.e-bigger.e-css.e-checkbox-wrapper.e-small .e-frame,.e-bigger .e-css.e-checkbox-wrapper.e-small .e-frame{height:20px;line-height:12px;width:20px}.e-bigger.e-checkbox-wrapper.e-small .e-check,.e-bigger .e-checkbox-wrapper.e-small .e-check,.e-bigger.e-css.e-checkbox-wrapper.e-small .e-check,.e-bigger .e-css.e-checkbox-wrapper.e-small .e-check{font-size:12px}.e-bigger.e-checkbox-wrapper.e-small .e-stop,.e-bigger .e-checkbox-wrapper.e-small .e-stop,.e-bigger.e-css.e-checkbox-wrapper.e-small .e-stop,.e-bigger .e-css.e-checkbox-wrapper.e-small .e-stop{font-size:10px;line-height:12px}.e-bigger.e-checkbox-wrapper.e-small .e-label,.e-bigger .e-checkbox-wrapper.e-small .e-label,.e-bigger.e-css.e-checkbox-wrapper.e-small .e-label,.e-bigger .e-css.e-checkbox-wrapper.e-small .e-label{font-size:14px;line-height:20px}.e-bigger.e-checkbox-wrapper.e-small .e-ripple-container,.e-bigger .e-checkbox-wrapper.e-small .e-ripple-container,.e-bigger.e-css.e-checkbox-wrapper.e-small .e-ripple-container,.e-bigger .e-css.e-checkbox-wrapper.e-small .e-ripple-container{bottom:-9px;height:38px;left:-9px;right:-9px;top:-9px;width:38px}.e-checkbox-wrapper,.e-css.e-checkbox-wrapper{-webkit-tap-highlight-color:transparent}.e-checkbox-wrapper .e-frame,.e-css.e-checkbox-wrapper .e-frame{background-color:#fff;border-color:#757575}.e-checkbox-wrapper .e-frame.e-check,.e-css.e-checkbox-wrapper .e-frame.e-check{background-color:#e3165b;border-color:rgba(0,0,0,0);color:#fff}.e-checkbox-wrapper .e-frame.e-stop,.e-css.e-checkbox-wrapper .e-frame.e-stop{background-color:#fff;border-color:#757575;color:#757575}.e-checkbox-wrapper .e-ripple-element,.e-css.e-checkbox-wrapper .e-ripple-element{background:rgba(227,22,91,.26)}.e-checkbox-wrapper .e-ripple-check .e-ripple-element,.e-checkbox-wrapper:active .e-ripple-element,.e-css.e-checkbox-wrapper .e-ripple-check .e-ripple-element,.e-css.e-checkbox-wrapper:active .e-ripple-element{background:rgba(0,0,0,.26)}.e-checkbox-wrapper:active .e-ripple-check .e-ripple-element,.e-css.e-checkbox-wrapper:active .e-ripple-check .e-ripple-element{background:rgba(227,22,91,.26)}.e-checkbox-wrapper .e-label,.e-css.e-checkbox-wrapper .e-label{color:rgba(0,0,0,.87)}.e-checkbox-wrapper .e-checkbox:focus+.e-frame,.e-css.e-checkbox-wrapper .e-checkbox:focus+.e-frame{background-color:#fff;border-color:#757575;-webkit-box-shadow:none;box-shadow:none}.e-checkbox-wrapper .e-checkbox:focus+.e-frame.e-check,.e-css.e-checkbox-wrapper .e-checkbox:focus+.e-frame.e-check{background-color:#e3165b;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-checkbox-wrapper .e-checkbox:focus+.e-frame.e-stop,.e-css.e-checkbox-wrapper .e-checkbox:focus+.e-frame.e-stop{-webkit-box-shadow:none;box-shadow:none;color:#757575}.e-checkbox-wrapper .e-checkbox:active+.e-frame,.e-css.e-checkbox-wrapper .e-checkbox:active+.e-frame{background-color:#fff;border-color:#757575;-webkit-box-shadow:none;box-shadow:none}.e-checkbox-wrapper .e-checkbox:active+.e-frame.e-check,.e-css.e-checkbox-wrapper .e-checkbox:active+.e-frame.e-check{background-color:#e3165b;border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;color:#fff}.e-checkbox-wrapper .e-checkbox:active+.e-frame.e-stop,.e-css.e-checkbox-wrapper .e-checkbox:active+.e-frame.e-stop{-webkit-box-shadow:none;box-shadow:none;color:#757575}.e-checkbox-wrapper:hover .e-frame,.e-css.e-checkbox-wrapper:hover .e-frame{background-color:#fff;border-color:#757575}.e-checkbox-wrapper:hover .e-frame.e-check,.e-css.e-checkbox-wrapper:hover .e-frame.e-check{background-color:#e3165b;border-color:rgba(0,0,0,0);color:#fff}.e-checkbox-wrapper:hover .e-frame.e-stop,.e-css.e-checkbox-wrapper:hover .e-frame.e-stop{color:#757575}.e-checkbox-wrapper:hover .e-label,.e-css.e-checkbox-wrapper:hover .e-label{color:rgba(0,0,0,.87)}.e-checkbox-wrapper.e-checkbox-disabled .e-frame,.e-css.e-checkbox-wrapper.e-checkbox-disabled .e-frame{background-color:#fff;border-color:#bdbdbd;color:#bdbdbd}.e-checkbox-wrapper.e-checkbox-disabled .e-frame.e-check,.e-css.e-checkbox-wrapper.e-checkbox-disabled .e-frame.e-check{background-color:#bdbdbd;border-color:#bdbdbd;color:#fff}.e-checkbox-wrapper.e-checkbox-disabled .e-frame.e-stop,.e-css.e-checkbox-wrapper.e-checkbox-disabled .e-frame.e-stop{background-color:#fff;border-color:#bdbdbd;color:#bdbdbd}.e-checkbox-wrapper.e-checkbox-disabled .e-label,.e-css.e-checkbox-wrapper.e-checkbox-disabled .e-label{color:#bdbdbd}.e-checkbox-wrapper.e-focus .e-ripple-container,.e-css.e-checkbox-wrapper.e-focus .e-ripple-container{background-color:rgba(0,0,0,.12)}.e-checkbox-wrapper.e-focus .e-ripple-container.e-ripple-check,.e-css.e-checkbox-wrapper.e-focus .e-ripple-container.e-ripple-check{background-color:rgba(227,22,91,.26)}.e-checkbox-wrapper.e-focus .e-frame,.e-checkbox-wrapper.e-focus .e-frame.e-check,.e-css.e-checkbox-wrapper.e-focus .e-frame,.e-css.e-checkbox-wrapper.e-focus .e-frame.e-check{outline:0 solid #fff;outline-offset:0}.e-radio-wrapper{display:inline-block;line-height:1;position:relative}.e-radio{-webkit-appearance:none;height:1px;opacity:0;position:absolute;width:1px}.e-radio:not(:checked):not(:disabled):hover+label.e-right:after,.e-radio:not(:checked):not(:disabled):hover+label.e-rtl:after{left:auto}.e-radio+label{-webkit-tap-highlight-color:transparent;cursor:pointer;display:inline-block;margin:0;position:relative;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.e-radio+label .e-label{display:inline-block;font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:13px;font-weight:400;line-height:18px;padding-left:28px;vertical-align:text-top;white-space:normal}.e-radio+label:before{border:2px solid;border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;content:"";height:18px;position:absolute;left:0;width:18px}.e-radio+label:focus:before{-webkit-box-shadow:none;box-shadow:none}.e-radio+label:after{border:1px solid;border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;content:"";height:8px;left:5px;position:absolute;top:5px;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);width:8px}.e-radio+label .e-ripple-container{border-radius:50%;height:34px;left:-8px;position:absolute;top:-8px;width:34px;z-index:1}.e-radio+label.e-right .e-label,.e-radio+label.e-rtl .e-label{padding-left:0;padding-right:28px}.e-radio+label.e-right:before,.e-radio+label.e-rtl:before{left:auto;right:0}.e-radio+label.e-right:after,.e-radio+label.e-rtl:after{left:auto;right:5px}.e-radio+label.e-right .e-ripple-container,.e-radio+label.e-rtl .e-ripple-container{left:auto;right:-8px}.e-radio+label.e-right.e-rtl .e-label{padding-left:28px;padding-right:0}.e-radio+label.e-right.e-rtl:before{left:0;right:auto}.e-radio+label.e-right.e-rtl:after{left:5px;right:auto}.e-radio+label.e-right.e-rtl .e-ripple-container{left:-8px;right:auto}.e-radio+label.e-small .e-label{line-height:14px;padding-left:24px}.e-radio+label.e-small:before{height:14px;width:14px}.e-radio+label.e-small:after{height:6px;left:4px;top:4px;width:6px}.e-radio+label.e-small .e-ripple-container{left:-10px;top:-10px}.e-radio+label.e-small.e-right .e-label,.e-radio+label.e-small.e-rtl .e-label{padding-left:0;padding-right:24px}.e-radio+label.e-small.e-right:after,.e-radio+label.e-small.e-rtl:after{left:auto;right:4px}.e-radio+label.e-small.e-right .e-ripple-container,.e-radio+label.e-small.e-rtl .e-ripple-container{left:auto;right:-10px}.e-radio+label.e-small.e-right.e-rtl .e-label{padding-left:24px;padding-right:0}.e-radio+label.e-small.e-right.e-rtl:after{left:4px;right:auto}.e-radio+label.e-small.e-right.e-rtl .e-ripple-container{left:-10px;right:auto}.e-radio:checked+label:after{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);-webkit-transition:background-color .28s ease,-webkit-transform .28s ease;transition:background-color .28s ease,-webkit-transform .28s ease;transition:transform .28s ease,background-color .28s ease;transition:transform .28s ease,background-color .28s ease,-webkit-transform .28s ease}.e-radio+label.e-small .e-label,.e-small .e-radio+label .e-label{line-height:14px;padding-left:24px}.e-radio+label.e-small:before,.e-small .e-radio+label:before{height:14px;width:14px}.e-radio+label.e-small:after,.e-small .e-radio+label:after{height:6px;left:4px;top:4px;width:6px}.e-radio+label.e-small .e-ripple-container,.e-small .e-radio+label .e-ripple-container{left:-10px;top:-10px}.e-radio+label.e-small.e-right .e-label,.e-radio+label.e-small.e-rtl .e-label,.e-small .e-radio+label.e-right .e-label,.e-small .e-radio+label.e-rtl .e-label{padding-left:0;padding-right:24px}.e-radio+label.e-small.e-right:after,.e-radio+label.e-small.e-rtl:after,.e-small .e-radio+label.e-right:after,.e-small .e-radio+label.e-rtl:after{left:auto;right:4px}.e-radio+label.e-small.e-right .e-ripple-container,.e-radio+label.e-small.e-rtl .e-ripple-container,.e-small .e-radio+label.e-right .e-ripple-container,.e-small .e-radio+label.e-rtl .e-ripple-container{left:auto;right:-10px}.e-radio+label.e-small.e-right.e-rtl .e-label,.e-small .e-radio+label.e-right.e-rtl .e-label{padding-left:24px;padding-right:0}.e-radio+label.e-small.e-right.e-rtl:after,.e-small .e-radio+label.e-right.e-rtl:after{left:4px;right:auto}.e-radio+label.e-small.e-right.e-rtl .e-ripple-container,.e-small .e-radio+label.e-right.e-rtl .e-ripple-container{left:-10px;right:auto}.e-bigger.e-small .e-radio+label .e-label,.e-radio+label.e-bigger.e-small .e-label{line-height:20px;padding-left:32px}.e-bigger.e-small .e-radio+label:before,.e-radio+label.e-bigger.e-small:before{height:20px;width:20px}.e-bigger.e-small .e-radio+label:after,.e-radio+label.e-bigger.e-small:after{height:8px;left:6px;top:6px;width:8px}.e-bigger.e-small .e-radio+label .e-ripple-container,.e-radio+label.e-bigger.e-small .e-ripple-container{height:40px;left:-10px;top:-10px;width:40px}.e-bigger.e-small .e-radio+label.e-right .e-label,.e-bigger.e-small .e-radio+label.e-rtl .e-label,.e-radio+label.e-bigger.e-small.e-right .e-label,.e-radio+label.e-bigger.e-small.e-rtl .e-label{padding-left:0;padding-right:32px}.e-bigger.e-small .e-radio+label.e-right:after,.e-bigger.e-small .e-radio+label.e-rtl:after,.e-radio+label.e-bigger.e-small.e-right:after,.e-radio+label.e-bigger.e-small.e-rtl:after{left:auto;right:6px}.e-bigger.e-small .e-radio+label.e-right .e-ripple-container,.e-bigger.e-small .e-radio+label.e-rtl .e-ripple-container,.e-radio+label.e-bigger.e-small.e-right .e-ripple-container,.e-radio+label.e-bigger.e-small.e-rtl .e-ripple-container{left:auto;right:-10px}.e-bigger.e-small .e-radio+label.e-right.e-rtl .e-label,.e-radio+label.e-bigger.e-small.e-right.e-rtl .e-label{padding-left:32px;padding-right:0}.e-bigger.e-small .e-radio+label.e-right.e-rtl:after,.e-radio+label.e-bigger.e-small.e-right.e-rtl:after{left:6px;right:auto}.e-bigger.e-small .e-radio+label.e-right.e-rtl .e-ripple-container,.e-radio+label.e-bigger.e-small.e-right.e-rtl .e-ripple-container{left:-10px;right:auto}.e-bigger .e-radio:not(:checked):hover+label.e-right:after,.e-bigger .e-radio:not(:checked):hover+label.e-rtl:after{left:auto}.e-bigger .e-radio+label .e-label,.e-radio+label.e-bigger .e-label{font-size:14px;line-height:22px;padding-left:34px}.e-bigger .e-radio+label:before,.e-radio+label.e-bigger:before{height:22px;width:22px}.e-bigger .e-radio+label:after,.e-radio+label.e-bigger:after{height:10px;left:6px;top:6px;width:10px}.e-bigger .e-radio+label .e-ripple-container,.e-radio+label.e-bigger .e-ripple-container{height:42px;left:-10px;top:-10px;width:42px}.e-bigger .e-radio+label.e-right .e-label,.e-bigger .e-radio+label.e-rtl .e-label,.e-radio+label.e-bigger.e-right .e-label,.e-radio+label.e-bigger.e-rtl .e-label{padding-left:0;padding-right:34px}.e-bigger .e-radio+label.e-right:after,.e-bigger .e-radio+label.e-rtl:after,.e-radio+label.e-bigger.e-right:after,.e-radio+label.e-bigger.e-rtl:after{left:auto;right:6px}.e-bigger .e-radio+label.e-right .e-ripple-container,.e-bigger .e-radio+label.e-rtl .e-ripple-container,.e-radio+label.e-bigger.e-right .e-ripple-container,.e-radio+label.e-bigger.e-rtl .e-ripple-container{left:auto;right:-10px}.e-bigger .e-radio+label.e-right.e-rtl .e-label,.e-radio+label.e-bigger.e-right.e-rtl .e-label{padding-left:34px;padding-right:0}.e-bigger .e-radio+label.e-right.e-rtl:after,.e-radio+label.e-bigger.e-right.e-rtl:after{left:6px;right:auto}.e-bigger .e-radio+label.e-right.e-rtl .e-ripple-container,.e-radio+label.e-bigger.e-right.e-rtl .e-ripple-container{left:-12px;right:auto}.e-bigger .e-radio+label.e-small .e-label,.e-radio+label.e-bigger.e-small .e-label{line-height:20px;padding-left:32px}.e-bigger .e-radio+label.e-small:before,.e-radio+label.e-bigger.e-small:before{height:20px;width:20px}.e-bigger .e-radio+label.e-small:after,.e-radio+label.e-bigger.e-small:after{height:8px;left:6px;top:6px;width:8px}.e-bigger .e-radio+label.e-small .e-ripple-container,.e-radio+label.e-bigger.e-small .e-ripple-container{height:40px;left:-10px;top:-10px;width:40px}.e-bigger .e-radio+label.e-small.e-right .e-label,.e-bigger .e-radio+label.e-small.e-rtl .e-label,.e-radio+label.e-bigger.e-small.e-right .e-label,.e-radio+label.e-bigger.e-small.e-rtl .e-label{padding-left:0;padding-right:32px}.e-bigger .e-radio+label.e-small.e-right:after,.e-bigger .e-radio+label.e-small.e-rtl:after,.e-radio+label.e-bigger.e-small.e-right:after,.e-radio+label.e-bigger.e-small.e-rtl:after{left:auto;right:6px}.e-bigger .e-radio+label.e-small.e-right .e-ripple-container,.e-bigger .e-radio+label.e-small.e-rtl .e-ripple-container,.e-radio+label.e-bigger.e-small.e-right .e-ripple-container,.e-radio+label.e-bigger.e-small.e-rtl .e-ripple-container{left:auto;right:-10px}.e-bigger .e-radio+label.e-small.e-right.e-rtl .e-label,.e-radio+label.e-bigger.e-small.e-right.e-rtl .e-label{padding-left:32px;padding-right:0}.e-bigger .e-radio+label.e-small.e-right.e-rtl:after,.e-radio+label.e-bigger.e-small.e-right.e-rtl:after{left:6px;right:auto}.e-bigger .e-radio+label.e-small.e-right.e-rtl .e-ripple-container,.e-radio+label.e-bigger.e-small.e-right.e-rtl .e-ripple-container{left:-10px;right:auto}.e-radio+label:before{background-color:#fff;border-color:#757575}.e-radio+label.e-focus .e-ripple-container{background-color:rgba(0,0,0,.12)}.e-radio+label .e-label{color:rgba(0,0,0,.87)}.e-radio+label .e-ripple-element{background-color:rgba(227,22,91,.26)}.e-radio+label:active .e-ripple-element{background-color:rgba(0,0,0,.12)}.e-radio:focus+label:before{border-color:#e3165b}.e-radio:focus+label:before{border-color:#757575;-webkit-box-shadow:none;box-shadow:none}.e-radio:hover+label:before{border-color:#757575}.e-radio:checked+label:before{background-color:#fff;border-color:#e3165b}.e-radio:checked+label:after{background-color:#e3165b;color:#e3165b}.e-radio:checked+label:active .e-ripple-element{background-color:rgba(227,22,91,.26)}.e-radio:checked+.e-focus .e-ripple-container{background-color:rgba(227,22,91,.26)}.e-radio:checked+.e-focus:before{outline:0 solid #fff;outline-offset:0}.e-radio:checked:focus+label:before{border-color:#e3165b}.e-radio:checked:focus+label:after{background-color:#e3165b}.e-radio:checked+label:hover:before{border-color:#e3165b}.e-radio:checked+label:hover:after{background-color:#e3165b}.e-radio:disabled+label{cursor:default;pointer-events:none}.e-radio:disabled+label:before{border-color:#bdbdbd;cursor:default}.e-radio:disabled+label .e-ripple-container{background-color:rgba(0,0,0,0)}.e-radio:disabled+label .e-ripple-container:after{background-color:rgba(0,0,0,0);cursor:default}.e-radio:disabled+label .e-label{color:#bdbdbd}.e-radio:disabled:checked+label:before{background-color:rgba(0,0,0,0);border-color:#bdbdbd}.e-radio:disabled:checked+label:after{background-color:#bdbdbd;border-color:#bdbdbd;cursor:default}.e-radio:disabled:checked+label .e-ripple-container{background-color:rgba(0,0,0,0)}.e-radio:disabled:checked+label .e-ripple-container:after{background-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper,.e-switch-wrapper{cursor:pointer;display:inline-block;height:12px;position:relative;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;width:34px}.e-css.e-switch-wrapper .e-switch,.e-switch-wrapper .e-switch{-moz-appearance:none;height:1px;opacity:0;position:absolute;width:1px}.e-css.e-switch-wrapper .e-switch-inner,.e-switch-wrapper .e-switch-inner{-ms-transition:all .08s linear;-webkit-transition:all .08s linear;border:none;border-radius:20px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;left:0;overflow:hidden;position:absolute;top:0;transition:all .08s linear;width:100%}.e-css.e-switch-wrapper .e-switch-off,.e-css.e-switch-wrapper .e-switch-on,.e-switch-wrapper .e-switch-off,.e-switch-wrapper .e-switch-on{-ms-transition:transform 90ms cubic-bezier(.4,0,.2,1);-webkit-transition:transform 90ms cubic-bezier(.4,0,.2,1);-ms-flex-align:center;-webkit-box-align:center;align-items:center;border-radius:inherit;display:-ms-flexbox;display:-webkit-box;display:flex;font-size:small;height:100%;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;left:0;position:absolute;-webkit-transition:-webkit-transform 90ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 90ms cubic-bezier(.4,0,.2,1);transition:transform 90ms cubic-bezier(.4,0,.2,1);transition:transform 90ms cubic-bezier(.4,0,.2,1),-webkit-transform 90ms cubic-bezier(.4,0,.2,1);width:100%}.e-css.e-switch-wrapper .e-switch-on,.e-switch-wrapper .e-switch-on{left:-100%;text-indent:-9999px}.e-css.e-switch-wrapper .e-switch-off,.e-switch-wrapper .e-switch-off{left:0;opacity:.42;text-indent:-9999px}.e-css.e-switch-wrapper .e-switch-handle,.e-switch-wrapper .e-switch-handle{-ms-transition:all .2s linear;-webkit-transition:all .2s linear;border-radius:50%;bottom:0;height:18px;left:0;margin:auto 0;position:absolute;top:0;transition:all .2s linear;width:18px}.e-css.e-switch-wrapper .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper .e-switch-inner.e-switch-active .e-switch-on{left:0;opacity:.54}.e-css.e-switch-wrapper .e-switch-inner.e-switch-active .e-switch-off,.e-switch-wrapper .e-switch-inner.e-switch-active .e-switch-off{left:100%}.e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-switch-wrapper .e-switch-handle.e-switch-active{left:100%;margin-left:-18px}.e-css.e-switch-wrapper.e-switch-disabled,.e-switch-wrapper.e-switch-disabled{cursor:default}.e-css.e-switch-wrapper .e-ripple-container,.e-switch-wrapper .e-ripple-container{border-radius:50%;bottom:-9px;height:52px;left:-17px;pointer-events:none;position:absolute;top:-17px;width:52px;z-index:1}.e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-switch-wrapper.e-rtl .e-switch-handle{left:100%;margin-left:-18px}.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on{left:0}.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off{left:-100%}.e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-switch-wrapper.e-rtl .e-switch-on{left:100%}.e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-switch-wrapper.e-rtl .e-switch-off{left:0}.e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active{border-radius:50%;height:18px;left:0;margin:auto 0;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:18px}.e-css.e-switch-wrapper.e-small,.e-switch-wrapper.e-small{height:10px;width:26px}.e-css.e-switch-wrapper.e-small .e-switch-handle,.e-switch-wrapper.e-small .e-switch-handle{height:16px;width:16px}.e-css.e-switch-wrapper.e-small .e-ripple-container,.e-switch-wrapper.e-small .e-ripple-container{border-radius:50%;height:36px;left:-10px;pointer-events:none;position:absolute;top:-10px;width:36px;z-index:1}.e-css.e-switch-wrapper.e-small .e-switch-handle.e-switch-active,.e-switch-wrapper.e-small .e-switch-handle.e-switch-active{left:100%;margin-left:-16px}.e-css.e-switch-wrapper.e-small .e-switch-off,.e-css.e-switch-wrapper.e-small .e-switch-on,.e-switch-wrapper.e-small .e-switch-off,.e-switch-wrapper.e-small .e-switch-on{font-size:9px}.e-css.e-switch-wrapper.e-small .e-switch-off,.e-css.e-switch-wrapper.e-small .e-switch-on,.e-switch-wrapper.e-small .e-switch-off,.e-switch-wrapper.e-small .e-switch-on{text-indent:-9999px}.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-handle,.e-switch-wrapper.e-small.e-rtl .e-switch-handle{left:100%;margin-left:-16px;height:16px;width:16px}.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-on,.e-switch-wrapper.e-small.e-rtl .e-switch-on{left:100%;opacity:.54}.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-off,.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper.e-small.e-rtl .e-switch-off{left:0}.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-off{left:-100%}.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-handle.e-switch-active,.e-switch-wrapper.e-small.e-rtl .e-switch-handle.e-switch-active{left:16px}.e-small.e-css.e-switch-wrapper,.e-small .e-css.e-switch-wrapper,.e-small.e-switch-wrapper,.e-small .e-switch-wrapper{height:10px;width:26px}.e-small.e-css.e-switch-wrapper .e-switch-handle,.e-small .e-css.e-switch-wrapper .e-switch-handle,.e-small.e-switch-wrapper .e-switch-handle,.e-small .e-switch-wrapper .e-switch-handle{height:16px;width:16px}.e-small.e-css.e-switch-wrapper .e-ripple-container,.e-small .e-css.e-switch-wrapper .e-ripple-container,.e-small.e-switch-wrapper .e-ripple-container,.e-small .e-switch-wrapper .e-ripple-container{border-radius:50%;height:36px;left:-10px;pointer-events:none;position:absolute;top:-10px;width:36px;z-index:1}.e-small.e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-small .e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-small.e-switch-wrapper .e-switch-handle.e-switch-active,.e-small .e-switch-wrapper .e-switch-handle.e-switch-active{left:100%;margin-left:-16px}.e-small.e-css.e-switch-wrapper .e-switch-off,.e-small .e-css.e-switch-wrapper .e-switch-off,.e-small.e-css.e-switch-wrapper .e-switch-on,.e-small .e-css.e-switch-wrapper .e-switch-on,.e-small.e-switch-wrapper .e-switch-off,.e-small .e-switch-wrapper .e-switch-off,.e-small.e-switch-wrapper .e-switch-on,.e-small .e-switch-wrapper .e-switch-on{font-size:9px}.e-small.e-css.e-switch-wrapper .e-switch-off,.e-small .e-css.e-switch-wrapper .e-switch-off,.e-small.e-css.e-switch-wrapper .e-switch-on,.e-small .e-css.e-switch-wrapper .e-switch-on,.e-small.e-switch-wrapper .e-switch-off,.e-small .e-switch-wrapper .e-switch-off,.e-small.e-switch-wrapper .e-switch-on,.e-small .e-switch-wrapper .e-switch-on{text-indent:-9999px}.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-small.e-switch-wrapper.e-rtl .e-switch-handle,.e-small .e-switch-wrapper.e-rtl .e-switch-handle{left:100%;margin-left:-16px;height:16px;width:16px}.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-small.e-switch-wrapper.e-rtl .e-switch-on,.e-small .e-switch-wrapper.e-rtl .e-switch-on{left:100%;opacity:.54}.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-small.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-small .e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-small.e-switch-wrapper.e-rtl .e-switch-off,.e-small .e-switch-wrapper.e-rtl .e-switch-off{left:0}.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-small.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-small .e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off{left:-100%}.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-small.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-small .e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active{left:16px}.e-bigger.e-small.e-css.e-switch-wrapper,.e-bigger.e-small .e-css.e-switch-wrapper,.e-bigger.e-small.e-switch-wrapper,.e-bigger.e-small .e-switch-wrapper{height:12px;width:34px}.e-bigger.e-small.e-css.e-switch-wrapper .e-switch-handle,.e-bigger.e-small .e-css.e-switch-wrapper .e-switch-handle,.e-bigger.e-small.e-switch-wrapper .e-switch-handle,.e-bigger.e-small .e-switch-wrapper .e-switch-handle{height:18px;left:0;top:0;width:18px}.e-bigger.e-small.e-css.e-switch-wrapper .e-ripple-container,.e-bigger.e-small .e-css.e-switch-wrapper .e-ripple-container,.e-bigger.e-small.e-switch-wrapper .e-ripple-container,.e-bigger.e-small .e-switch-wrapper .e-ripple-container{border-radius:50%;height:50px;left:-16px;pointer-events:none;position:absolute;top:-16px;width:50px;z-index:1}.e-bigger.e-small.e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-bigger.e-small .e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-bigger.e-small.e-switch-wrapper .e-switch-handle.e-switch-active,.e-bigger.e-small .e-switch-wrapper .e-switch-handle.e-switch-active{left:100%;margin-left:-18px}.e-bigger.e-small.e-css.e-switch-wrapper .e-switch-off,.e-bigger.e-small .e-css.e-switch-wrapper .e-switch-off,.e-bigger.e-small.e-css.e-switch-wrapper .e-switch-on,.e-bigger.e-small .e-css.e-switch-wrapper .e-switch-on,.e-bigger.e-small.e-switch-wrapper .e-switch-off,.e-bigger.e-small .e-switch-wrapper .e-switch-off,.e-bigger.e-small.e-switch-wrapper .e-switch-on,.e-bigger.e-small .e-switch-wrapper .e-switch-on{font-size:9px}.e-bigger.e-small.e-css.e-switch-wrapper .e-switch-off,.e-bigger.e-small .e-css.e-switch-wrapper .e-switch-off,.e-bigger.e-small.e-css.e-switch-wrapper .e-switch-on,.e-bigger.e-small .e-css.e-switch-wrapper .e-switch-on,.e-bigger.e-small.e-switch-wrapper .e-switch-off,.e-bigger.e-small .e-switch-wrapper .e-switch-off,.e-bigger.e-small.e-switch-wrapper .e-switch-on,.e-bigger.e-small .e-switch-wrapper .e-switch-on{text-indent:-9999px}.e-bigger.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-bigger.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-bigger.e-small.e-switch-wrapper.e-rtl .e-switch-handle,.e-bigger.e-small .e-switch-wrapper.e-rtl .e-switch-handle{left:100%;margin-left:-18px;height:18px;width:18px}.e-bigger.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-bigger.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-bigger.e-small.e-switch-wrapper.e-rtl .e-switch-on,.e-bigger.e-small .e-switch-wrapper.e-rtl .e-switch-on{left:100%;opacity:.54}.e-bigger.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-bigger.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-bigger.e-small.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-small .e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-small.e-switch-wrapper.e-rtl .e-switch-off,.e-bigger.e-small .e-switch-wrapper.e-rtl .e-switch-off{left:0}.e-bigger.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger.e-small.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger.e-small .e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off{left:-100%}.e-bigger.e-small.e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-bigger.e-small .e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-bigger.e-small.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-bigger.e-small .e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active{left:18px}.e-bigger.e-css.e-switch-wrapper,.e-bigger .e-css.e-switch-wrapper,.e-bigger.e-switch-wrapper,.e-bigger .e-switch-wrapper{height:14px;width:36px}.e-bigger.e-css.e-switch-wrapper .e-switch-handle,.e-bigger .e-css.e-switch-wrapper .e-switch-handle,.e-bigger.e-switch-wrapper .e-switch-handle,.e-bigger .e-switch-wrapper .e-switch-handle{height:20px;left:0;top:0;width:20px}.e-bigger.e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-bigger .e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-bigger.e-switch-wrapper .e-switch-handle.e-switch-active,.e-bigger .e-switch-wrapper .e-switch-handle.e-switch-active{left:100%;margin-left:-20px}.e-bigger.e-css.e-switch-wrapper .e-switch-off,.e-bigger .e-css.e-switch-wrapper .e-switch-off,.e-bigger.e-css.e-switch-wrapper .e-switch-on,.e-bigger .e-css.e-switch-wrapper .e-switch-on,.e-bigger.e-switch-wrapper .e-switch-off,.e-bigger .e-switch-wrapper .e-switch-off,.e-bigger.e-switch-wrapper .e-switch-on,.e-bigger .e-switch-wrapper .e-switch-on{font-size:0}.e-bigger.e-css.e-switch-wrapper .e-switch-off,.e-bigger .e-css.e-switch-wrapper .e-switch-off,.e-bigger.e-css.e-switch-wrapper .e-switch-on,.e-bigger .e-css.e-switch-wrapper .e-switch-on,.e-bigger.e-switch-wrapper .e-switch-off,.e-bigger .e-switch-wrapper .e-switch-off,.e-bigger.e-switch-wrapper .e-switch-on,.e-bigger .e-switch-wrapper .e-switch-on{text-indent:-9999px}.e-bigger.e-css.e-switch-wrapper .e-ripple-container,.e-bigger .e-css.e-switch-wrapper .e-ripple-container,.e-bigger.e-switch-wrapper .e-ripple-container,.e-bigger .e-switch-wrapper .e-ripple-container{height:52px;left:-16px;top:-16px;width:52px}.e-bigger.e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-bigger .e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-bigger.e-switch-wrapper.e-rtl .e-switch-handle,.e-bigger .e-switch-wrapper.e-rtl .e-switch-handle{height:20px;left:100%;margin-left:-20px;top:0;width:20px}.e-bigger.e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-bigger .e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-bigger.e-switch-wrapper.e-rtl .e-switch-on,.e-bigger .e-switch-wrapper.e-rtl .e-switch-on{left:100%;opacity:.54}.e-bigger.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger .e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-bigger .e-css.e-switch-wrapper.e-rtl .e-switch-off,.e-bigger.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger .e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-switch-wrapper.e-rtl .e-switch-off,.e-bigger .e-switch-wrapper.e-rtl .e-switch-off{left:0}.e-bigger.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger .e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger .e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off{left:-100%}.e-bigger.e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-bigger .e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-bigger.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-bigger .e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active{left:20px}.e-bigger.e-css.e-switch-wrapper.e-small,.e-bigger .e-css.e-switch-wrapper.e-small,.e-bigger.e-switch-wrapper.e-small,.e-bigger .e-switch-wrapper.e-small{height:12px;width:34px}.e-bigger.e-css.e-switch-wrapper.e-small .e-switch-handle,.e-bigger .e-css.e-switch-wrapper.e-small .e-switch-handle,.e-bigger.e-switch-wrapper.e-small .e-switch-handle,.e-bigger .e-switch-wrapper.e-small .e-switch-handle{height:18px;left:0;top:0;width:18px}.e-bigger.e-css.e-switch-wrapper.e-small .e-ripple-container,.e-bigger .e-css.e-switch-wrapper.e-small .e-ripple-container,.e-bigger.e-switch-wrapper.e-small .e-ripple-container,.e-bigger .e-switch-wrapper.e-small .e-ripple-container{border-radius:50%;height:50px;left:-16px;pointer-events:none;position:absolute;top:-16px;width:50px;z-index:1}.e-bigger.e-css.e-switch-wrapper.e-small .e-switch-handle.e-switch-active,.e-bigger .e-css.e-switch-wrapper.e-small .e-switch-handle.e-switch-active,.e-bigger.e-switch-wrapper.e-small .e-switch-handle.e-switch-active,.e-bigger .e-switch-wrapper.e-small .e-switch-handle.e-switch-active{left:100%;margin-left:-18px}.e-bigger.e-css.e-switch-wrapper.e-small .e-switch-off,.e-bigger .e-css.e-switch-wrapper.e-small .e-switch-off,.e-bigger.e-css.e-switch-wrapper.e-small .e-switch-on,.e-bigger .e-css.e-switch-wrapper.e-small .e-switch-on,.e-bigger.e-switch-wrapper.e-small .e-switch-off,.e-bigger .e-switch-wrapper.e-small .e-switch-off,.e-bigger.e-switch-wrapper.e-small .e-switch-on,.e-bigger .e-switch-wrapper.e-small .e-switch-on{font-size:9px}.e-bigger.e-css.e-switch-wrapper.e-small .e-switch-off,.e-bigger .e-css.e-switch-wrapper.e-small .e-switch-off,.e-bigger.e-css.e-switch-wrapper.e-small .e-switch-on,.e-bigger .e-css.e-switch-wrapper.e-small .e-switch-on,.e-bigger.e-switch-wrapper.e-small .e-switch-off,.e-bigger .e-switch-wrapper.e-small .e-switch-off,.e-bigger.e-switch-wrapper.e-small .e-switch-on,.e-bigger .e-switch-wrapper.e-small .e-switch-on{text-indent:-9999px}.e-bigger.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-handle,.e-bigger .e-css.e-switch-wrapper.e-small.e-rtl .e-switch-handle,.e-bigger.e-switch-wrapper.e-small.e-rtl .e-switch-handle,.e-bigger .e-switch-wrapper.e-small.e-rtl .e-switch-handle{left:100%;margin-left:-18px;height:18px;width:18px}.e-bigger.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-on,.e-bigger .e-css.e-switch-wrapper.e-small.e-rtl .e-switch-on,.e-bigger.e-switch-wrapper.e-small.e-rtl .e-switch-on,.e-bigger .e-switch-wrapper.e-small.e-rtl .e-switch-on{left:100%;opacity:.54}.e-bigger.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger .e-css.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-off,.e-bigger .e-css.e-switch-wrapper.e-small.e-rtl .e-switch-off,.e-bigger.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger .e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-on,.e-bigger.e-switch-wrapper.e-small.e-rtl .e-switch-off,.e-bigger .e-switch-wrapper.e-small.e-rtl .e-switch-off{left:0}.e-bigger.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger .e-css.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger.e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-bigger .e-switch-wrapper.e-small.e-rtl .e-switch-inner.e-switch-active .e-switch-off{left:-100%}.e-bigger.e-css.e-switch-wrapper.e-small.e-rtl .e-switch-handle.e-switch-active,.e-bigger .e-css.e-switch-wrapper.e-small.e-rtl .e-switch-handle.e-switch-active,.e-bigger.e-switch-wrapper.e-small.e-rtl .e-switch-handle.e-switch-active,.e-bigger .e-switch-wrapper.e-small.e-rtl .e-switch-handle.e-switch-active{left:18px}.e-css.e-switch-wrapper,.e-switch-wrapper{-webkit-tap-highlight-color:transparent}.e-css.e-switch-wrapper .e-switch-off,.e-switch-wrapper .e-switch-off{background-color:#000;color:#fff}.e-css.e-switch-wrapper .e-switch-handle,.e-switch-wrapper .e-switch-handle{background-color:#f5f5f5;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.e-css.e-switch-wrapper .e-switch-on,.e-switch-wrapper .e-switch-on{background-color:#e3165b;color:#fff}.e-css.e-switch-wrapper .e-switch-handle.e-switch-active,.e-switch-wrapper .e-switch-handle.e-switch-active{background-color:#e3165b}.e-css.e-switch-wrapper .e-switch-inner.e-switch-active,.e-switch-wrapper .e-switch-inner.e-switch-active{background-color:#fff;border-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper .e-switch-inner,.e-switch-wrapper .e-switch-inner{background-color:initial}.e-css.e-switch-wrapper .e-ripple-element,.e-switch-wrapper .e-ripple-element{background-color:rgba(0,0,0,.12)}.e-css.e-switch-wrapper .e-ripple-check .e-ripple-element,.e-switch-wrapper .e-ripple-check .e-ripple-element{background-color:rgba(227,22,91,.12)}.e-css.e-switch-wrapper.e-switch-disabled .e-switch-handle.e-switch-active,.e-switch-wrapper.e-switch-disabled .e-switch-handle.e-switch-active{-webkit-box-shadow:none;box-shadow:none}.e-css.e-switch-wrapper.e-switch-disabled .e-switch-handle,.e-switch-wrapper.e-switch-disabled .e-switch-handle{background-color:#bdbdbd;-webkit-box-shadow:none;box-shadow:none}.e-css.e-switch-wrapper.e-switch-disabled .e-switch-inner .e-switch-off,.e-switch-wrapper.e-switch-disabled .e-switch-inner .e-switch-off{opacity:.12;background-color:#000;border-color:#bdbdbd;color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-switch-disabled .e-switch-inner .e-switch-on,.e-switch-wrapper.e-switch-disabled .e-switch-inner .e-switch-on{color:rgba(0,0,0,0);opacity:.12;background-color:#000}.e-css.e-switch-wrapper.e-switch-disabled .e-switch-inner,.e-switch-wrapper.e-switch-disabled .e-switch-inner{background-color:#000;border-color:rgba(0,0,0,0);opacity:.12}.e-css.e-switch-wrapper.e-switch-disabled:hover .e-switch-inner.e-switch-active,.e-switch-wrapper.e-switch-disabled:hover .e-switch-inner.e-switch-active{background-color:#000;border-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-switch-disabled:hover .e-switch-inner,.e-switch-wrapper.e-switch-disabled:hover .e-switch-inner{border-color:rgba(0,0,0,0);color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-switch-disabled:hover .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper.e-switch-disabled:hover .e-switch-inner.e-switch-active .e-switch-on{color:rgba(0,0,0,0);background-color:#000}.e-css.e-switch-wrapper.e-switch-disabled:hover .e-switch-handle,.e-css.e-switch-wrapper.e-switch-disabled:hover .e-switch-handle.e-switch-active,.e-switch-wrapper.e-switch-disabled:hover .e-switch-handle,.e-switch-wrapper.e-switch-disabled:hover .e-switch-handle.e-switch-active{background-color:#bdbdbd}.e-css.e-switch-wrapper:hover .e-switch-inner.e-switch-active,.e-switch-wrapper:hover .e-switch-inner.e-switch-active{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper:hover .e-switch-inner,.e-switch-wrapper:hover .e-switch-inner{background-color:rgba(0,0,0,0);border-color:inherit}.e-css.e-switch-wrapper:hover .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper:hover .e-switch-inner.e-switch-active .e-switch-on{background-color:#e3165b;color:#fff}.e-css.e-switch-wrapper:hover .e-switch-handle.e-switch-active,.e-switch-wrapper:hover .e-switch-handle.e-switch-active{background-color:#e3165b}.e-css.e-switch-wrapper:hover .e-switch-handle.e-switch-active .e-ripple-container,.e-switch-wrapper:hover .e-switch-handle.e-switch-active .e-ripple-container{background-color:rgba(0,0,0,.12)}.e-css.e-switch-wrapper:hover .e-switch-handle.e-switch-active .e-ripple-check.e-ripple-container,.e-switch-wrapper:hover .e-switch-handle.e-switch-active .e-ripple-check.e-ripple-container{background-color:rgba(227,22,91,.12)}.e-css.e-switch-wrapper:not(.e-switch-disabled):hover .e-switch-handle:not(.e-switch-active),.e-switch-wrapper:not(.e-switch-disabled):hover .e-switch-handle:not(.e-switch-active){background-color:#f5f5f5}.e-css.e-switch-wrapper.e-focus .e-switch-inner,.e-css.e-switch-wrapper:focus .e-switch-inner,.e-switch-wrapper.e-focus .e-switch-inner,.e-switch-wrapper:focus .e-switch-inner{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;outline:none;outline-offset:0}.e-css.e-switch-wrapper.e-focus .e-switch-inner.e-switch-active,.e-css.e-switch-wrapper:focus .e-switch-inner.e-switch-active,.e-switch-wrapper.e-focus .e-switch-inner.e-switch-active,.e-switch-wrapper:focus .e-switch-inner.e-switch-active{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);outline:none}.e-css.e-switch-wrapper.e-focus .e-ripple-container,.e-css.e-switch-wrapper:focus .e-ripple-container,.e-switch-wrapper.e-focus .e-ripple-container,.e-switch-wrapper:focus .e-ripple-container{background-color:rgba(0,0,0,.12)}.e-css.e-switch-wrapper.e-focus .e-ripple-check.e-ripple-container,.e-css.e-switch-wrapper:focus .e-ripple-check.e-ripple-container,.e-switch-wrapper.e-focus .e-ripple-check.e-ripple-container,.e-switch-wrapper:focus .e-ripple-check.e-ripple-container{background-color:rgba(227,22,91,.12)}.e-css.e-switch-wrapper.e-active .e-switch-inner,.e-css.e-switch-wrapper:active .e-switch-inner,.e-switch-wrapper.e-active .e-switch-inner,.e-switch-wrapper:active .e-switch-inner{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;outline:none;outline-offset:0}.e-css.e-switch-wrapper.e-active .e-switch-inner.e-switch-active,.e-css.e-switch-wrapper:active .e-switch-inner.e-switch-active,.e-switch-wrapper.e-active .e-switch-inner.e-switch-active,.e-switch-wrapper:active .e-switch-inner.e-switch-active{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);outline:none}.e-css.e-switch-wrapper.e-active .e-ripple-container,.e-css.e-switch-wrapper:active .e-ripple-container,.e-switch-wrapper.e-active .e-ripple-container,.e-switch-wrapper:active .e-ripple-container{background-color:rgba(0,0,0,.12)}.e-css.e-switch-wrapper.e-active .e-ripple-check.e-ripple-container,.e-css.e-switch-wrapper:active .e-ripple-check.e-ripple-container,.e-switch-wrapper.e-active .e-ripple-check.e-ripple-container,.e-switch-wrapper:active .e-ripple-check.e-ripple-container{background-color:rgba(227,22,91,.12)}.e-css.e-switch-wrapper.e-rtl.e-focus .e-switch-off,.e-css.e-switch-wrapper.e-rtl.e-focus .e-switch-on,.e-switch-wrapper.e-rtl.e-focus .e-switch-off,.e-switch-wrapper.e-rtl.e-focus .e-switch-on{background-color:rgba(227,22,91,.54)}.e-css.e-switch-wrapper.e-rtl.e-focus .e-switch-inner.e-switch-active,.e-switch-wrapper.e-rtl.e-focus .e-switch-inner.e-switch-active{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#fff;outline:none}.e-css.e-switch-wrapper.e-rtl .e-switch-on,.e-switch-wrapper.e-rtl .e-switch-on{background-color:#e3165b}.e-css.e-switch-wrapper.e-rtl .e-switch-handle,.e-switch-wrapper.e-rtl .e-switch-handle{background-color:#f5f5f5;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off,.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active .e-switch-off{background-color:#000}.e-css.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active,.e-switch-wrapper.e-rtl .e-switch-handle.e-switch-active{background-color:#e3165b}.e-css.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active,.e-switch-wrapper.e-rtl .e-switch-inner.e-switch-active{background-color:#fff;border-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-rtl:hover .e-switch-inner.e-switch-active,.e-switch-wrapper.e-rtl:hover .e-switch-inner.e-switch-active{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-rtl:hover .e-switch-inner,.e-switch-wrapper.e-rtl:hover .e-switch-inner{border-color:inherit}.e-css.e-switch-wrapper.e-rtl:hover .e-switch-handle.e-switch-active,.e-css.e-switch-wrapper.e-rtl:hover .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper.e-rtl:hover .e-switch-handle.e-switch-active,.e-switch-wrapper.e-rtl:hover .e-switch-inner.e-switch-active .e-switch-on{background-color:#e3165b}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-inner .e-switch-off,.e-css.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-inner .e-switch-on,.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-inner .e-switch-off,.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-inner .e-switch-on{color:rgba(0,0,0,0);opacity:.12;background-color:#000}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-handle,.e-css.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-handle.e-switch-active,.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-handle,.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-handle.e-switch-active{background-color:#bdbdbd;-webkit-box-shadow:none;box-shadow:none}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-inner,.e-switch-wrapper.e-rtl.e-switch-disabled .e-switch-inner{background-color:#000;border-color:rgba(0,0,0,0);opacity:.12}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-inner.e-switch-active .e-switch-on,.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-inner.e-switch-active .e-switch-on{color:rgba(0,0,0,0);background-color:#000}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-inner.e-switch-active,.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-inner.e-switch-active{background-color:#000;border-color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-inner,.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-inner{border-color:rgba(0,0,0,0);color:rgba(0,0,0,0)}.e-css.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-handle,.e-css.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-handle.e-switch-active,.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-handle,.e-switch-wrapper.e-rtl.e-switch-disabled:hover .e-switch-handle.e-switch-active{background-color:#bdbdbd}.e-css.e-switch-wrapper .e-switch:focus,.e-switch-wrapper .e-switch:focus{-webkit-box-shadow:none;box-shadow:none}.e-css.e-switch-wrapper.e-small.e-rtl.e-switch-disabled:hover .e-switch-inner.e-switch-active,.e-switch-wrapper.e-small.e-rtl.e-switch-disabled:hover .e-switch-inner.e-switch-active{background-color:#000}.e-chip-list .e-chip-delete.e-dlt-btn:before{content:"\E208"}.e-chip-list.e-multi-selection .e-chip:before{content:"\E933"}.e-chip-list{display:-ms-flexbox;display:-webkit-box;display:flex;padding:4px}.e-chip-list.e-chip,.e-chip-list .e-chip{-webkit-tap-highlight-color:transparent;border:0 solid;border-radius:14px;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex;font-weight:400;line-height:1.5em;margin:4px;outline:none;padding:0 10px;position:relative;-webkit-transition:-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:box-shadow .3s cubic-bezier(.4,0,.2,1);transition:box-shadow .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-chip-list.e-chip,.e-chip-list .e-chip,.e-chip-list.e-chip .e-chip-avatar,.e-chip-list .e-chip .e-chip-avatar{-ms-flex-align:center;-webkit-box-align:center;align-items:center;font-size:13px;height:28px;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;overflow:hidden}.e-chip-list.e-chip .e-chip-avatar,.e-chip-list .e-chip .e-chip-avatar{background-size:cover;border-radius:50%;display:-ms-flexbox;display:-webkit-box;display:flex;line-height:1;margin:0 8px 0 -10px;width:28px}.e-chip-list.e-chip.e-chip-avatar-wrap,.e-chip-list.e-chip .e-chip-avatar-wrap,.e-chip-list .e-chip.e-chip-avatar-wrap,.e-chip-list .e-chip .e-chip-avatar-wrap{border-radius:14px}.e-chip-list.e-chip .e-chip-icon,.e-chip-list .e-chip .e-chip-icon{-ms-flex-align:center;-webkit-box-align:center;align-items:center;background-size:cover;border-radius:50%;display:-ms-flexbox;display:-webkit-box;display:flex;font-size:14px;height:20px;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;line-height:1;margin:0 8px 0 -6px;overflow:hidden;width:20px}.e-chip-list.e-chip .e-chip-text,.e-chip-list .e-chip .e-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.e-chip-list.e-chip .e-chip-delete,.e-chip-list .e-chip .e-chip-delete{-ms-flex-align:center;-webkit-box-align:center;align-items:center;background-size:cover;border-radius:50%;display:-ms-flexbox;display:-webkit-box;display:flex;font-size:14px;height:14px;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;line-height:1;margin:0 -2px 0 8px;overflow:hidden;width:14px}.e-chip-list.e-chip .e-chip-delete.e-dlt-btn:before,.e-chip-list .e-chip .e-chip-delete.e-dlt-btn:before{font-family:e-icons}.e-chip-list.e-chip .image-url,.e-chip-list .e-chip .image-url{height:20px;margin:0 8px 0 -6px;width:20px}.e-chip-list.e-chip .image-url,.e-chip-list .e-chip .image-url,.e-chip-list.e-chip .trailing-icon-url,.e-chip-list .e-chip .trailing-icon-url{-ms-flex-align:center;-webkit-box-align:center;align-items:center;background-size:cover;border-radius:50%;display:-ms-flexbox;display:-webkit-box;display:flex;font-size:14px;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;line-height:1;overflow:hidden}.e-chip-list.e-chip .trailing-icon-url,.e-chip-list .e-chip .trailing-icon-url{font-family:e-icons;height:14px;margin:0 -2px 0 8px;width:14px}.e-chip-list:not(.e-chip){-ms-flex-wrap:wrap;flex-wrap:wrap}.e-chip-list.e-multi-selection .e-chip:before{-ms-flex-align:center;-webkit-box-align:center;align-items:center;display:-ms-flexbox;display:-webkit-box;display:flex;font-family:e-icons;height:20px;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;line-height:1;margin:0 4px 0 -6px;overflow:hidden;-webkit-transition:width .3s cubic-bezier(.4,0,.2,1);transition:width .3s cubic-bezier(.4,0,.2,1);width:20px}.e-chip-list.e-multi-selection .e-chip:not(.e-chip-icon-wrap):not(.e-chip-avatar-wrap):before{width:0}.e-chip-list.e-multi-selection .e-chip.e-chip-avatar-wrap:before,.e-chip-list.e-multi-selection .e-chip.e-chip-icon-wrap:before{display:none}.e-chip-list.e-multi-selection .e-chip.e-chip-avatar-wrap:before{height:28px;margin:0 8px 0 -10px;width:28px}.e-chip-list.e-multi-selection .e-chip.e-active .e-chip-avatar,.e-chip-list.e-multi-selection .e-chip.e-active .e-chip-icon{display:none}.e-chip-list.e-multi-selection .e-chip.e-active.e-chip-avatar-wrap:before,.e-chip-list.e-multi-selection .e-chip.e-active.e-chip-icon-wrap:before{display:-ms-flexbox;display:-webkit-box;display:flex}.e-chip-list.e-multi-selection .e-chip.e-active:not(.e-chip-icon-wrap):not(.e-chip-avatar-wrap):before{width:20px}.e-chip-list.e-rtl.e-chip .e-chip-avatar,.e-chip-list.e-rtl .e-chip .e-chip-avatar{margin:0 -10px 0 8px}.e-chip-list.e-rtl.e-chip .e-chip-icon,.e-chip-list.e-rtl .e-chip .e-chip-icon{margin:0 -6px 0 8px}.e-chip-list.e-rtl.e-chip .e-chip-delete,.e-chip-list.e-rtl .e-chip .e-chip-delete{margin:0 8px 0 -2px}.e-chip-list.e-rtl.e-chip.e-chip-avatar-wrap,.e-chip-list.e-rtl.e-chip .e-chip-avatar-wrap,.e-chip-list.e-rtl .e-chip.e-chip-avatar-wrap,.e-chip-list.e-rtl .e-chip .e-chip-avatar-wrap{border-radius:14px}.e-chip-list.e-rtl.e-chip .trailing-icon-url,.e-chip-list.e-rtl .e-chip .trailing-icon-url{margin:0 8px 0 -2px}.e-chip-list.e-rtl.e-multi-selection .e-chip:before{margin:0 -6px 0 8px}.e-chip-list.e-rtl.e-multi-selection .e-chip.e-chip-avatar-wrap:before{margin:0 -10px 0 8px}.e-bigger.e-chip-list.e-chip,.e-bigger .e-chip-list.e-chip,.e-bigger.e-chip-list .e-chip,.e-bigger .e-chip-list .e-chip{border-radius:16px;font-size:14px;height:32px;padding:0 12px}.e-bigger.e-chip-list .e-chip-avatar,.e-bigger .e-chip-list .e-chip-avatar{font-size:15px;height:32px;margin:0 8px 0 -12px;width:32px}.e-bigger.e-chip-list.e-chip-avatar-wrap,.e-bigger .e-chip-list.e-chip-avatar-wrap,.e-bigger.e-chip-list .e-chip-avatar-wrap,.e-bigger .e-chip-list .e-chip-avatar-wrap{border-radius:16px}.e-bigger.e-chip-list .e-chip-icon,.e-bigger .e-chip-list .e-chip-icon{font-size:16px;height:24px;margin:0 8px 0 -8px;width:24px}.e-bigger.e-chip-list .e-chip-delete,.e-bigger .e-chip-list .e-chip-delete,.e-bigger.e-chip-list .trailing-icon-url,.e-bigger .e-chip-list .trailing-icon-url{font-size:16px;height:18px;margin:0 -4px 0 8px;width:18px}.e-bigger.e-chip-list.e-multi-selection .e-chip:before,.e-bigger .e-chip-list.e-multi-selection .e-chip:before{height:24px;margin:0 4px 0 -8px;width:24px}.e-bigger.e-chip-list.e-multi-selection .e-chip.e-chip-avatar-wrap:before,.e-bigger .e-chip-list.e-multi-selection .e-chip.e-chip-avatar-wrap:before{height:32px;margin:0 8px 0 -12px;width:32px}.e-bigger.e-chip-list.e-multi-selection .e-chip.e-active:not(.e-chip-icon-wrap):not(.e-chip-avatar-wrap):before,.e-bigger .e-chip-list.e-multi-selection .e-chip.e-active:not(.e-chip-icon-wrap):not(.e-chip-avatar-wrap):before{width:24px}.e-bigger.e-chip-list.e-rtl.e-chip .e-chip-avatar,.e-bigger .e-chip-list.e-rtl.e-chip .e-chip-avatar,.e-bigger.e-chip-list.e-rtl .e-chip .e-chip-avatar,.e-bigger .e-chip-list.e-rtl .e-chip .e-chip-avatar{margin:0 -12px 0 8px}.e-bigger.e-chip-list.e-rtl.e-chip .e-chip-icon,.e-bigger .e-chip-list.e-rtl.e-chip .e-chip-icon,.e-bigger.e-chip-list.e-rtl .e-chip .e-chip-icon,.e-bigger .e-chip-list.e-rtl .e-chip .e-chip-icon{margin:0 -8px 0 8px}.e-bigger.e-chip-list.e-rtl.e-chip .e-chip-delete,.e-bigger .e-chip-list.e-rtl.e-chip .e-chip-delete,.e-bigger.e-chip-list.e-rtl .e-chip .e-chip-delete,.e-bigger .e-chip-list.e-rtl .e-chip .e-chip-delete{margin:0 8px 0 -4px}.e-bigger.e-chip-list.e-rtl.e-chip.e-chip-avatar-wrap,.e-bigger .e-chip-list.e-rtl.e-chip.e-chip-avatar-wrap,.e-bigger.e-chip-list.e-rtl.e-chip .e-chip-avatar-wrap,.e-bigger.e-chip-list.e-rtl .e-chip.e-chip-avatar-wrap,.e-bigger .e-chip-list.e-rtl.e-chip .e-chip-avatar-wrap,.e-bigger .e-chip-list.e-rtl .e-chip.e-chip-avatar-wrap,.e-bigger.e-chip-list.e-rtl .e-chip .e-chip-avatar-wrap,.e-bigger .e-chip-list.e-rtl .e-chip .e-chip-avatar-wrap{border-radius:16px}.e-bigger.e-chip-list.e-rtl.e-multi-selection .e-chip:before,.e-bigger .e-chip-list.e-rtl.e-multi-selection .e-chip:before{margin:0 -8px 0 8px}.e-bigger.e-chip-list.e-rtl.e-multi-selection .e-chip.e-chip-avatar-wrap:before,.e-bigger .e-chip-list.e-rtl.e-multi-selection .e-chip.e-chip-avatar-wrap:before{margin:0 -12px 0 8px}.e-bigger.e-chip-list.e-rtl .trailing-icon-url,.e-bigger .e-chip-list.e-rtl .trailing-icon-url{margin:0 8px 0 -4px}.e-chip-list.e-chip,.e-chip-list .e-chip{background:#e0e0e0;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87)}.e-chip-list.e-chip .e-chip-delete,.e-chip-list .e-chip .e-chip-delete,.e-chip-list.e-chip .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip .e-chip-delete.e-dlt-btn,.e-chip-list.e-chip .e-chip-icon,.e-chip-list .e-chip .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip .e-chip-avatar,.e-chip-list .e-chip .e-chip-avatar{background-color:#c1c1c1;color:rgba(0,0,0,.54)}.e-chip-list.e-chip:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:rgba(0,0,0,.7)}.e-chip-list.e-chip:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#000}.e-chip-list.e-chip:hover,.e-chip-list .e-chip:hover{background:#d6d6d6;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87)}.e-chip-list.e-chip:hover .e-chip-delete,.e-chip-list .e-chip:hover .e-chip-delete,.e-chip-list.e-chip:hover .e-chip-icon,.e-chip-list .e-chip:hover .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip:hover .e-chip-avatar,.e-chip-list .e-chip:hover .e-chip-avatar{background-color:#b7b7b7;color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-focused,.e-chip-list .e-chip.e-focused{background:#c1c1c1;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.e-chip-list.e-chip.e-focused .e-chip-delete,.e-chip-list .e-chip.e-focused .e-chip-delete,.e-chip-list.e-chip.e-focused .e-chip-icon,.e-chip-list .e-chip.e-focused .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-focused .e-chip-avatar{background-color:#b7b7b7;color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-active,.e-chip-list .e-chip.e-active{background:#bcbcbc;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.e-chip-list.e-chip.e-active .e-chip-delete,.e-chip-list .e-chip.e-active .e-chip-delete,.e-chip-list.e-chip.e-active .e-chip-icon,.e-chip-list .e-chip.e-active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-active .e-chip-avatar,.e-chip-list .e-chip.e-active .e-chip-avatar{background-color:#9e9e9e;color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-focused.e-active,.e-chip-list .e-chip.e-focused.e-active{background:#c1c1c1;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.e-chip-list.e-chip.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-focused.e-active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-focused.e-active .e-chip-avatar{background-color:#a3a3a3;color:rgba(0,0,0,.54)}.e-chip-list.e-chip:active,.e-chip-list .e-chip:active{background:#b7b7b7;border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87);-webkit-box-shadow:0 2px 1px -6px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12);box-shadow:0 2px 1px -6px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.e-chip-list.e-chip:active .e-chip-delete,.e-chip-list .e-chip:active .e-chip-delete,.e-chip-list.e-chip:active .e-chip-icon,.e-chip-list .e-chip:active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip:active .e-chip-avatar,.e-chip-list .e-chip:active .e-chip-avatar{background-color:#999;color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-disabled,.e-chip-list .e-chip.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26);opacity:1;pointer-events:none}.e-chip-list.e-chip.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-outline,.e-chip-list .e-chip.e-outline{background:rgba(0,0,0,0);border-color:#bdbdbd;color:rgba(0,0,0,.87);border-width:1px}.e-chip-list.e-chip.e-outline .e-chip-delete,.e-chip-list .e-chip.e-outline .e-chip-delete,.e-chip-list.e-chip.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list.e-chip.e-outline .e-chip-icon,.e-chip-list .e-chip.e-outline .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline .e-chip-avatar,.e-chip-list .e-chip.e-outline .e-chip-avatar{background-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:rgba(0,0,0,.7)}.e-chip-list.e-chip.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#000}.e-chip-list.e-chip.e-outline:hover,.e-chip-list .e-chip.e-outline:hover{background:rgba(0,0,0,.04);border-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline:hover .e-chip-delete,.e-chip-list .e-chip.e-outline:hover .e-chip-delete,.e-chip-list.e-chip.e-outline:hover .e-chip-icon,.e-chip-list .e-chip.e-outline:hover .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline:hover .e-chip-avatar,.e-chip-list .e-chip.e-outline:hover .e-chip-avatar{background-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline.e-focused,.e-chip-list .e-chip.e-outline.e-focused{background:rgba(0,0,0,.12);border-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline.e-focused .e-chip-delete,.e-chip-list .e-chip.e-outline.e-focused .e-chip-delete,.e-chip-list.e-chip.e-outline.e-focused .e-chip-icon,.e-chip-list .e-chip.e-outline.e-focused .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-outline.e-focused .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline.e-active,.e-chip-list .e-chip.e-outline.e-active{background:rgba(0,0,0,.14);border-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline.e-active .e-chip-delete,.e-chip-list .e-chip.e-outline.e-active .e-chip-delete,.e-chip-list.e-chip.e-outline.e-active .e-chip-icon,.e-chip-list .e-chip.e-outline.e-active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline.e-active .e-chip-avatar,.e-chip-list .e-chip.e-outline.e-active .e-chip-avatar{background-color:rgba(0,0,0,.14);color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline.e-focused.e-active,.e-chip-list .e-chip.e-outline.e-focused.e-active{background:rgba(0,0,0,.12);border-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-outline.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-outline.e-focused.e-active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-outline.e-focused.e-active .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline:active,.e-chip-list .e-chip.e-outline:active{background:rgba(0,0,0,.16);border-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-chip.e-outline:active .e-chip-delete,.e-chip-list .e-chip.e-outline:active .e-chip-delete,.e-chip-list.e-chip.e-outline:active .e-chip-icon,.e-chip-list .e-chip.e-outline:active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline:active .e-chip-avatar,.e-chip-list .e-chip.e-outline:active .e-chip-avatar{background-color:rgba(0,0,0,.16);color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-outline.e-disabled,.e-chip-list .e-chip.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-outline.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-outline.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-outline.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip.e-active{background:#e3165b;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-selection .e-chip.e-active .e-chip-delete,.e-chip-list.e-selection .e-chip.e-active .e-chip-icon{color:#fff}.e-chip-list.e-selection .e-chip.e-active .e-chip-avatar{background-color:#ab1145;color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-focused{background:#ed4980;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-focused .e-chip-delete,.e-chip-list.e-selection .e-chip.e-active.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-focused .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip.e-active.e-disabled .e-chip-delete,.e-chip-list.e-selection .e-chip.e-active.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip.e-active.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip.e-active.e-outline{background:#e3165b;border-color:#e3165b;color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-outline .e-chip-delete,.e-chip-list.e-selection .e-chip.e-active.e-outline .e-chip-icon{color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-outline .e-chip-avatar{background-color:#ab1145;color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-outline.e-focused{background:#ed4980;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-outline.e-focused .e-chip-delete,.e-chip-list.e-selection .e-chip.e-active.e-outline.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-outline.e-focused .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-selection .e-chip.e-active.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip.e-active.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-selection .e-chip.e-active.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip.e-active.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-selection .e-chip:active{background:rgba(227,22,91,.16);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.87)}.e-chip-list.e-selection .e-chip:active .e-chip-delete,.e-chip-list.e-selection .e-chip:active .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-selection .e-chip:active .e-chip-avatar{background-color:rgba(171,17,69,.16);color:rgba(0,0,0,.54)}.e-chip-list.e-selection .e-chip:active.e-outline{background:rgba(227,22,91,.16);border-color:#bdbdbd;color:rgba(0,0,0,.87)}.e-chip-list.e-selection .e-chip:active.e-outline .e-chip-delete,.e-chip-list.e-selection .e-chip:active.e-outline .e-chip-icon{color:rgba(0,0,0,.54)}.e-chip-list.e-selection .e-chip:active.e-outline .e-chip-avatar{background-color:rgba(171,17,69,.16);color:rgba(0,0,0,.54)}.e-chip-list.e-chip.e-primary,.e-chip-list .e-chip.e-primary{background:#e3165b;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary .e-chip-delete,.e-chip-list .e-chip.e-primary .e-chip-delete,.e-chip-list.e-chip.e-primary .e-chip-icon,.e-chip-list .e-chip.e-primary .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-primary .e-chip-delete.e-dlt-btn{color:hsla(0,0%,100%,.8)}.e-chip-list.e-chip.e-primary .e-chip-avatar,.e-chip-list .e-chip.e-primary .e-chip-avatar{background-color:#ab1145;color:#fff}.e-chip-list.e-chip.e-primary:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-primary:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#fff}.e-chip-list.e-chip.e-primary:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-primary:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-primary:hover,.e-chip-list .e-chip.e-primary:hover{background:#ec3673;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary:hover .e-chip-delete,.e-chip-list .e-chip.e-primary:hover .e-chip-delete,.e-chip-list.e-chip.e-primary:hover .e-chip-icon,.e-chip-list .e-chip.e-primary:hover .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary:hover .e-chip-avatar,.e-chip-list .e-chip.e-primary:hover .e-chip-avatar{background-color:#d01454;color:#fff}.e-chip-list.e-chip.e-primary.e-focused,.e-chip-list .e-chip.e-primary.e-focused{background:#ed4980;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-focused .e-chip-delete,.e-chip-list .e-chip.e-primary.e-focused .e-chip-delete,.e-chip-list.e-chip.e-primary.e-focused .e-chip-icon,.e-chip-list .e-chip.e-primary.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-focused .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-chip.e-primary.e-active,.e-chip-list .e-chip.e-primary.e-active{background:#ef5b8d;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-active .e-chip-delete,.e-chip-list .e-chip.e-primary.e-active .e-chip-delete,.e-chip-list.e-chip.e-primary.e-active .e-chip-icon,.e-chip-list .e-chip.e-primary.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-active .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-active .e-chip-avatar{background-color:#ea2466;color:#fff}.e-chip-list.e-chip.e-primary.e-focused.e-active,.e-chip-list .e-chip.e-primary.e-focused.e-active{background:#ed4980;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-primary.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-primary.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-primary.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-focused.e-active .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-chip.e-primary:active,.e-chip-list .e-chip.e-primary:active{background:#ef5b8d;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary:active .e-chip-delete,.e-chip-list .e-chip.e-primary:active .e-chip-delete,.e-chip-list.e-chip.e-primary:active .e-chip-icon,.e-chip-list .e-chip.e-primary:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary:active .e-chip-avatar,.e-chip-list .e-chip.e-primary:active .e-chip-avatar{background-color:#ea2466;color:#fff}.e-chip-list.e-chip.e-primary.e-disabled,.e-chip-list .e-chip.e-primary.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-primary.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-primary.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-primary.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-primary.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-primary.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-primary.e-outline,.e-chip-list .e-chip.e-primary.e-outline{background:rgba(0,0,0,0);border-color:#e3165b;color:#e3165b}.e-chip-list.e-chip.e-primary.e-outline .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline .e-chip-icon{color:#e3165b}.e-chip-list.e-chip.e-primary.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-primary.e-outline .e-chip-delete.e-dlt-btn{color:rgba(227,22,91,.8)}.e-chip-list.e-chip.e-primary.e-outline .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-chip.e-primary.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-primary.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#e3165b}.e-chip-list.e-chip.e-primary.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-primary.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-primary.e-outline:hover,.e-chip-list .e-chip.e-primary.e-outline:hover{background:rgba(227,22,91,.12);border-color:#e3165b;color:#e3165b}.e-chip-list.e-chip.e-primary.e-outline:hover .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline:hover .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline:hover .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline:hover .e-chip-icon{color:#e3165b}.e-chip-list.e-chip.e-primary.e-outline:hover .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline:hover .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-focused,.e-chip-list .e-chip.e-primary.e-outline.e-focused{background:#ed4980;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-focused .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline.e-focused .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline.e-focused .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline.e-focused .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-active,.e-chip-list .e-chip.e-primary.e-outline.e-active{background:#ef5b8d;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-active .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline.e-active .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline.e-active .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-active .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline.e-active .e-chip-avatar{background-color:#ea2466;color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-focused.e-active,.e-chip-list .e-chip.e-primary.e-outline.e-focused.e-active{background:#ed4980;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline.e-focused.e-active .e-chip-avatar{background-color:#e3165b;color:#fff}.e-chip-list.e-chip.e-primary.e-outline:active,.e-chip-list .e-chip.e-primary.e-outline:active{background:#ef5b8d;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-primary.e-outline:active .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline:active .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline:active .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-primary.e-outline:active .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline:active .e-chip-avatar{background-color:#ea2466;color:#fff}.e-chip-list.e-chip.e-primary.e-outline.e-disabled,.e-chip-list .e-chip.e-primary.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-primary.e-outline.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-primary.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-primary.e-outline.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-primary.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-primary.e-outline.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-primary.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-success,.e-chip-list .e-chip.e-success{background:#4d841d;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success .e-chip-delete,.e-chip-list .e-chip.e-success .e-chip-delete,.e-chip-list.e-chip.e-success .e-chip-icon,.e-chip-list .e-chip.e-success .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-success .e-chip-delete.e-dlt-btn{color:hsla(0,0%,100%,.8)}.e-chip-list.e-chip.e-success .e-chip-avatar,.e-chip-list .e-chip.e-success .e-chip-avatar{background-color:#305212;color:#fff}.e-chip-list.e-chip.e-success:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-success:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#fff}.e-chip-list.e-chip.e-success:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-success:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-success:hover,.e-chip-list .e-chip.e-success:hover{background:#61a524;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success:hover .e-chip-delete,.e-chip-list .e-chip.e-success:hover .e-chip-delete,.e-chip-list.e-chip.e-success:hover .e-chip-icon,.e-chip-list .e-chip.e-success:hover .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success:hover .e-chip-avatar,.e-chip-list .e-chip.e-success:hover .e-chip-avatar{background-color:#437319;color:#fff}.e-chip-list.e-chip.e-success.e-focused,.e-chip-list .e-chip.e-success.e-focused{background:#6ab628;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-focused .e-chip-delete,.e-chip-list .e-chip.e-success.e-focused .e-chip-delete,.e-chip-list.e-chip.e-success.e-focused .e-chip-icon,.e-chip-list .e-chip.e-success.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-success.e-focused .e-chip-avatar{background-color:#4d841d;color:#fff}.e-chip-list.e-chip.e-success.e-active,.e-chip-list .e-chip.e-success.e-active{background:#74c72c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-active .e-chip-delete,.e-chip-list .e-chip.e-success.e-active .e-chip-delete,.e-chip-list.e-chip.e-success.e-active .e-chip-icon,.e-chip-list .e-chip.e-success.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-active .e-chip-avatar,.e-chip-list .e-chip.e-success.e-active .e-chip-avatar{background-color:#579521;color:#fff}.e-chip-list.e-chip.e-success.e-focused.e-active,.e-chip-list .e-chip.e-success.e-focused.e-active{background:#6ab628;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-success.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-success.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-success.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-success.e-focused.e-active .e-chip-avatar{background-color:#4d841d;color:#fff}.e-chip-list.e-chip.e-success:active,.e-chip-list .e-chip.e-success:active{background:#74c72c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success:active .e-chip-delete,.e-chip-list .e-chip.e-success:active .e-chip-delete,.e-chip-list.e-chip.e-success:active .e-chip-icon,.e-chip-list .e-chip.e-success:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success:active .e-chip-avatar,.e-chip-list .e-chip.e-success:active .e-chip-avatar{background-color:#579521;color:#fff}.e-chip-list.e-chip.e-success.e-disabled,.e-chip-list .e-chip.e-success.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-success.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-success.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-success.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-success.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-success.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-success.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-success.e-outline,.e-chip-list .e-chip.e-success.e-outline{background:rgba(0,0,0,0);border-color:#4d841d;color:#4d841d}.e-chip-list.e-chip.e-success.e-outline .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline .e-chip-icon{color:#4d841d}.e-chip-list.e-chip.e-success.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-success.e-outline .e-chip-delete.e-dlt-btn{color:rgba(77,132,29,.8)}.e-chip-list.e-chip.e-success.e-outline .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline .e-chip-avatar{background-color:#4d841d;color:#fff}.e-chip-list.e-chip.e-success.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-success.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#4d841d}.e-chip-list.e-chip.e-success.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-success.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-success.e-outline:hover,.e-chip-list .e-chip.e-success.e-outline:hover{background:rgba(77,132,29,.12);border-color:#4d841d;color:#4d841d}.e-chip-list.e-chip.e-success.e-outline:hover .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline:hover .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline:hover .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline:hover .e-chip-icon{color:#4d841d}.e-chip-list.e-chip.e-success.e-outline:hover .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline:hover .e-chip-avatar{background-color:#4d841d;color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-focused,.e-chip-list .e-chip.e-success.e-outline.e-focused{background:#6ab628;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-focused .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline.e-focused .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline.e-focused .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline.e-focused .e-chip-avatar{background-color:#4d841d;color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-active,.e-chip-list .e-chip.e-success.e-outline.e-active{background:#74c72c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-active .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline.e-active .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline.e-active .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-active .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline.e-active .e-chip-avatar{background-color:#579521;color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-focused.e-active,.e-chip-list .e-chip.e-success.e-outline.e-focused.e-active{background:#6ab628;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline.e-focused.e-active .e-chip-avatar{background-color:#4d841d;color:#fff}.e-chip-list.e-chip.e-success.e-outline:active,.e-chip-list .e-chip.e-success.e-outline:active{background:#74c72c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-success.e-outline:active .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline:active .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline:active .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-success.e-outline:active .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline:active .e-chip-avatar{background-color:#579521;color:#fff}.e-chip-list.e-chip.e-success.e-outline.e-disabled,.e-chip-list .e-chip.e-success.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-success.e-outline.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-success.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-success.e-outline.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-success.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-success.e-outline.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-success.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-info,.e-chip-list .e-chip.e-info{background:#0378d5;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info .e-chip-delete,.e-chip-list .e-chip.e-info .e-chip-delete,.e-chip-list.e-chip.e-info .e-chip-icon,.e-chip-list .e-chip.e-info .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-info .e-chip-delete.e-dlt-btn{color:hsla(0,0%,100%,.8)}.e-chip-list.e-chip.e-info .e-chip-avatar,.e-chip-list .e-chip.e-info .e-chip-avatar{background-color:#025699;color:#fff}.e-chip-list.e-chip.e-info:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-info:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#fff}.e-chip-list.e-chip.e-info:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-info:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-info:hover,.e-chip-list .e-chip.e-info:hover{background:#058efb;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info:hover .e-chip-delete,.e-chip-list .e-chip.e-info:hover .e-chip-delete,.e-chip-list.e-chip.e-info:hover .e-chip-icon,.e-chip-list .e-chip.e-info:hover .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info:hover .e-chip-avatar,.e-chip-list .e-chip.e-info:hover .e-chip-avatar{background-color:#036dc1;color:#fff}.e-chip-list.e-chip.e-info.e-focused,.e-chip-list .e-chip.e-info.e-focused{background:#1998fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-focused .e-chip-delete,.e-chip-list .e-chip.e-info.e-focused .e-chip-delete,.e-chip-list.e-chip.e-info.e-focused .e-chip-icon,.e-chip-list .e-chip.e-info.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-info.e-focused .e-chip-avatar{background-color:#0378d5;color:#fff}.e-chip-list.e-chip.e-info.e-active,.e-chip-list .e-chip.e-info.e-active{background:#2ea1fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-active .e-chip-delete,.e-chip-list .e-chip.e-info.e-active .e-chip-delete,.e-chip-list.e-chip.e-info.e-active .e-chip-icon,.e-chip-list .e-chip.e-info.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-active .e-chip-avatar,.e-chip-list .e-chip.e-info.e-active .e-chip-avatar{background-color:#0383e9;color:#fff}.e-chip-list.e-chip.e-info.e-focused.e-active,.e-chip-list .e-chip.e-info.e-focused.e-active{background:#1998fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-info.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-info.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-info.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-info.e-focused.e-active .e-chip-avatar{background-color:#0378d5;color:#fff}.e-chip-list.e-chip.e-info:active,.e-chip-list .e-chip.e-info:active{background:#2ea1fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info:active .e-chip-delete,.e-chip-list .e-chip.e-info:active .e-chip-delete,.e-chip-list.e-chip.e-info:active .e-chip-icon,.e-chip-list .e-chip.e-info:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info:active .e-chip-avatar,.e-chip-list .e-chip.e-info:active .e-chip-avatar{background-color:#0383e9;color:#fff}.e-chip-list.e-chip.e-info.e-disabled,.e-chip-list .e-chip.e-info.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-info.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-info.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-info.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-info.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-info.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-info.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-info.e-outline,.e-chip-list .e-chip.e-info.e-outline{background:rgba(0,0,0,0);border-color:#0378d5;color:#0378d5}.e-chip-list.e-chip.e-info.e-outline .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline .e-chip-icon{color:#0378d5}.e-chip-list.e-chip.e-info.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-info.e-outline .e-chip-delete.e-dlt-btn{color:rgba(3,120,213,.8)}.e-chip-list.e-chip.e-info.e-outline .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline .e-chip-avatar{background-color:#0378d5;color:#fff}.e-chip-list.e-chip.e-info.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-info.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#0378d5}.e-chip-list.e-chip.e-info.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-info.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-info.e-outline:hover,.e-chip-list .e-chip.e-info.e-outline:hover{background:rgba(3,120,213,.12);border-color:#0378d5;color:#0378d5}.e-chip-list.e-chip.e-info.e-outline:hover .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline:hover .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline:hover .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline:hover .e-chip-icon{color:#0378d5}.e-chip-list.e-chip.e-info.e-outline:hover .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline:hover .e-chip-avatar{background-color:#0378d5;color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-focused,.e-chip-list .e-chip.e-info.e-outline.e-focused{background:#1998fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-focused .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline.e-focused .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline.e-focused .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline.e-focused .e-chip-avatar{background-color:#0378d5;color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-active,.e-chip-list .e-chip.e-info.e-outline.e-active{background:#2ea1fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-active .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline.e-active .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline.e-active .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-active .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline.e-active .e-chip-avatar{background-color:#0383e9;color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-focused.e-active,.e-chip-list .e-chip.e-info.e-outline.e-focused.e-active{background:#1998fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline.e-focused.e-active .e-chip-avatar{background-color:#0378d5;color:#fff}.e-chip-list.e-chip.e-info.e-outline:active,.e-chip-list .e-chip.e-info.e-outline:active{background:#2ea1fc;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-info.e-outline:active .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline:active .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline:active .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-info.e-outline:active .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline:active .e-chip-avatar{background-color:#0383e9;color:#fff}.e-chip-list.e-chip.e-info.e-outline.e-disabled,.e-chip-list .e-chip.e-info.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-info.e-outline.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-info.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-info.e-outline.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-info.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-info.e-outline.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-info.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-warning,.e-chip-list .e-chip.e-warning{background:#c15700;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning .e-chip-delete,.e-chip-list .e-chip.e-warning .e-chip-delete,.e-chip-list.e-chip.e-warning .e-chip-icon,.e-chip-list .e-chip.e-warning .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-warning .e-chip-delete.e-dlt-btn{color:hsla(0,0%,100%,.8)}.e-chip-list.e-chip.e-warning .e-chip-avatar,.e-chip-list .e-chip.e-warning .e-chip-avatar{background-color:#843b00;color:#fff}.e-chip-list.e-chip.e-warning:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-warning:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#fff}.e-chip-list.e-chip.e-warning:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-warning:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-warning:hover,.e-chip-list .e-chip.e-warning:hover{background:#ea6900;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning:hover .e-chip-delete,.e-chip-list .e-chip.e-warning:hover .e-chip-delete,.e-chip-list.e-chip.e-warning:hover .e-chip-icon,.e-chip-list .e-chip.e-warning:hover .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning:hover .e-chip-avatar,.e-chip-list .e-chip.e-warning:hover .e-chip-avatar{background-color:#ad4e00;color:#fff}.e-chip-list.e-chip.e-warning.e-focused,.e-chip-list .e-chip.e-warning.e-focused{background:#fe7300;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-focused .e-chip-delete,.e-chip-list .e-chip.e-warning.e-focused .e-chip-delete,.e-chip-list.e-chip.e-warning.e-focused .e-chip-icon,.e-chip-list .e-chip.e-warning.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-focused .e-chip-avatar{background-color:#c15700;color:#fff}.e-chip-list.e-chip.e-warning.e-active,.e-chip-list .e-chip.e-warning.e-active{background:#ff7e14;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-active .e-chip-delete,.e-chip-list .e-chip.e-warning.e-active .e-chip-delete,.e-chip-list.e-chip.e-warning.e-active .e-chip-icon,.e-chip-list .e-chip.e-warning.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-active .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-active .e-chip-avatar{background-color:#d56000;color:#fff}.e-chip-list.e-chip.e-warning.e-focused.e-active,.e-chip-list .e-chip.e-warning.e-focused.e-active{background:#fe7300;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-warning.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-warning.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-warning.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-focused.e-active .e-chip-avatar{background-color:#c15700;color:#fff}.e-chip-list.e-chip.e-warning:active,.e-chip-list .e-chip.e-warning:active{background:#ff7e14;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning:active .e-chip-delete,.e-chip-list .e-chip.e-warning:active .e-chip-delete,.e-chip-list.e-chip.e-warning:active .e-chip-icon,.e-chip-list .e-chip.e-warning:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning:active .e-chip-avatar,.e-chip-list .e-chip.e-warning:active .e-chip-avatar{background-color:#d56000;color:#fff}.e-chip-list.e-chip.e-warning.e-disabled,.e-chip-list .e-chip.e-warning.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-warning.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-warning.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-warning.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-warning.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-warning.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-warning.e-outline,.e-chip-list .e-chip.e-warning.e-outline{background:rgba(0,0,0,0);border-color:#c15700;color:#c15700}.e-chip-list.e-chip.e-warning.e-outline .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline .e-chip-icon{color:#c15700}.e-chip-list.e-chip.e-warning.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-warning.e-outline .e-chip-delete.e-dlt-btn{color:rgba(193,87,0,.8)}.e-chip-list.e-chip.e-warning.e-outline .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline .e-chip-avatar{background-color:#c15700;color:#fff}.e-chip-list.e-chip.e-warning.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-warning.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#c15700}.e-chip-list.e-chip.e-warning.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-warning.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-warning.e-outline:hover,.e-chip-list .e-chip.e-warning.e-outline:hover{background:rgba(193,87,0,.12);border-color:#c15700;color:#c15700}.e-chip-list.e-chip.e-warning.e-outline:hover .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline:hover .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline:hover .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline:hover .e-chip-icon{color:#c15700}.e-chip-list.e-chip.e-warning.e-outline:hover .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline:hover .e-chip-avatar{background-color:#c15700;color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-focused,.e-chip-list .e-chip.e-warning.e-outline.e-focused{background:#fe7300;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-focused .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline.e-focused .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline.e-focused .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline.e-focused .e-chip-avatar{background-color:#c15700;color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-active,.e-chip-list .e-chip.e-warning.e-outline.e-active{background:#ff7e14;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-active .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline.e-active .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline.e-active .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-active .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline.e-active .e-chip-avatar{background-color:#d56000;color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-focused.e-active,.e-chip-list .e-chip.e-warning.e-outline.e-focused.e-active{background:#fe7300;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline.e-focused.e-active .e-chip-avatar{background-color:#c15700;color:#fff}.e-chip-list.e-chip.e-warning.e-outline:active,.e-chip-list .e-chip.e-warning.e-outline:active{background:#ff7e14;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-warning.e-outline:active .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline:active .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline:active .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-warning.e-outline:active .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline:active .e-chip-avatar{background-color:#d56000;color:#fff}.e-chip-list.e-chip.e-warning.e-outline.e-disabled,.e-chip-list .e-chip.e-warning.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-warning.e-outline.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-warning.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-warning.e-outline.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-warning.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-warning.e-outline.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-warning.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-danger,.e-chip-list .e-chip.e-danger{background:#d64113;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger .e-chip-delete,.e-chip-list .e-chip.e-danger .e-chip-delete,.e-chip-list.e-chip.e-danger .e-chip-icon,.e-chip-list .e-chip.e-danger .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-danger .e-chip-delete.e-dlt-btn{color:hsla(0,0%,100%,.8)}.e-chip-list.e-chip.e-danger .e-chip-avatar,.e-chip-list .e-chip.e-danger .e-chip-avatar{background-color:#9e300e;color:#fff}.e-chip-list.e-chip.e-danger:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-danger:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#fff}.e-chip-list.e-chip.e-danger:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-danger:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-danger:hover,.e-chip-list .e-chip.e-danger:hover{background:#ec5526;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger:hover .e-chip-delete,.e-chip-list .e-chip.e-danger:hover .e-chip-delete,.e-chip-list.e-chip.e-danger:hover .e-chip-icon,.e-chip-list .e-chip.e-danger:hover .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger:hover .e-chip-avatar,.e-chip-list .e-chip.e-danger:hover .e-chip-avatar{background-color:#c33b11;color:#fff}.e-chip-list.e-chip.e-danger.e-focused,.e-chip-list .e-chip.e-danger.e-focused{background:#ed6339;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-focused .e-chip-delete,.e-chip-list .e-chip.e-danger.e-focused .e-chip-delete,.e-chip-list.e-chip.e-danger.e-focused .e-chip-icon,.e-chip-list .e-chip.e-danger.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-focused .e-chip-avatar{background-color:#d64113;color:#fff}.e-chip-list.e-chip.e-danger.e-active,.e-chip-list .e-chip.e-danger.e-active{background:#ef724c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-active .e-chip-delete,.e-chip-list .e-chip.e-danger.e-active .e-chip-delete,.e-chip-list.e-chip.e-danger.e-active .e-chip-icon,.e-chip-list .e-chip.e-danger.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-active .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-active .e-chip-avatar{background-color:#e94715;color:#fff}.e-chip-list.e-chip.e-danger.e-focused.e-active,.e-chip-list .e-chip.e-danger.e-focused.e-active{background:#ed6339;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-danger.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-danger.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-danger.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-focused.e-active .e-chip-avatar{background-color:#d64113;color:#fff}.e-chip-list.e-chip.e-danger:active,.e-chip-list .e-chip.e-danger:active{background:#ef724c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger:active .e-chip-delete,.e-chip-list .e-chip.e-danger:active .e-chip-delete,.e-chip-list.e-chip.e-danger:active .e-chip-icon,.e-chip-list .e-chip.e-danger:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger:active .e-chip-avatar,.e-chip-list .e-chip.e-danger:active .e-chip-avatar{background-color:#e94715;color:#fff}.e-chip-list.e-chip.e-danger.e-disabled,.e-chip-list .e-chip.e-danger.e-disabled{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-danger.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-danger.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-danger.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-danger.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-danger.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-danger.e-outline,.e-chip-list .e-chip.e-danger.e-outline{background:rgba(0,0,0,0);border-color:#d64113;color:#d64113}.e-chip-list.e-chip.e-danger.e-outline .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline .e-chip-icon{color:#d64113}.e-chip-list.e-chip.e-danger.e-outline .e-chip-delete.e-dlt-btn,.e-chip-list .e-chip.e-danger.e-outline .e-chip-delete.e-dlt-btn{color:rgba(214,65,19,.8)}.e-chip-list.e-chip.e-danger.e-outline .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline .e-chip-avatar{background-color:#d64113;color:#fff}.e-chip-list.e-chip.e-danger.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover,.e-chip-list .e-chip.e-danger.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:hover{color:#d64113}.e-chip-list.e-chip.e-danger.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active,.e-chip-list .e-chip.e-danger.e-outline:not(.e-active) .e-chip-delete.e-dlt-btn:active{color:#fff}.e-chip-list.e-chip.e-danger.e-outline:hover,.e-chip-list .e-chip.e-danger.e-outline:hover{background:rgba(214,65,19,.12);border-color:#d64113;color:#d64113}.e-chip-list.e-chip.e-danger.e-outline:hover .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline:hover .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline:hover .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline:hover .e-chip-icon{color:#d64113}.e-chip-list.e-chip.e-danger.e-outline:hover .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline:hover .e-chip-avatar{background-color:#d64113;color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-focused,.e-chip-list .e-chip.e-danger.e-outline.e-focused{background:#ed6339;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-focused .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline.e-focused .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline.e-focused .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline.e-focused .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-focused .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline.e-focused .e-chip-avatar{background-color:#d64113;color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-active,.e-chip-list .e-chip.e-danger.e-outline.e-active{background:#ef724c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-active .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline.e-active .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline.e-active .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-active .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline.e-active .e-chip-avatar{background-color:#e94715;color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-focused.e-active,.e-chip-list .e-chip.e-danger.e-outline.e-focused.e-active{background:#ed6339;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline.e-focused.e-active .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline.e-focused.e-active .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline.e-focused.e-active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-focused.e-active .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline.e-focused.e-active .e-chip-avatar{background-color:#d64113;color:#fff}.e-chip-list.e-chip.e-danger.e-outline:active,.e-chip-list .e-chip.e-danger.e-outline:active{background:#ef724c;border-color:rgba(0,0,0,0);color:#fff}.e-chip-list.e-chip.e-danger.e-outline:active .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline:active .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline:active .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline:active .e-chip-icon{color:#fff}.e-chip-list.e-chip.e-danger.e-outline:active .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline:active .e-chip-avatar{background-color:#e94715;color:#fff}.e-chip-list.e-chip.e-danger.e-outline.e-disabled,.e-chip-list .e-chip.e-danger.e-outline.e-disabled{background:rgba(0,0,0,0);border-color:rgba(0,0,0,.26);color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-danger.e-outline.e-disabled .e-chip-delete,.e-chip-list .e-chip.e-danger.e-outline.e-disabled .e-chip-delete,.e-chip-list.e-chip.e-danger.e-outline.e-disabled .e-chip-icon,.e-chip-list .e-chip.e-danger.e-outline.e-disabled .e-chip-icon{color:rgba(0,0,0,.26)}.e-chip-list.e-chip.e-danger.e-outline.e-disabled .e-chip-avatar,.e-chip-list .e-chip.e-danger.e-outline.e-disabled .e-chip-avatar{background-color:rgba(0,0,0,0);color:rgba(0,0,0,.26)}.e-fab.e-btn{-ms-flex-align:center;-webkit-box-align:center;align-items:center;border-radius:9999px;display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex;min-height:40px;min-width:40px;padding:0 15px;position:absolute;z-index:100000}.e-fab.e-btn .e-btn-icon{margin-top:0;font-size:14px}.e-fab.e-btn.e-icon-btn{padding:0}.e-fab.e-btn.e-fab-fixed{position:fixed}.e-fab.e-btn.e-fab-top{top:16px}.e-fab.e-btn.e-fab-top.e-fab-middle{top:var(--fabVertDist)}.e-fab.e-btn.e-fab-bottom{bottom:16px}.e-fab.e-btn.e-fab-bottom.e-fab-middle{bottom:var(--fabVertDist)}.e-fab.e-btn.e-fab-left{left:16px}.e-fab.e-btn.e-fab-left.e-fab-center{left:var(--fabHorzDist)}.e-fab.e-btn.e-fab-right{right:16px}.e-fab.e-btn.e-fab-right.e-fab-center{right:var(--fabHorzDist)}.e-fab-hidden{visibility:hidden}.e-small.e-fab.e-btn,.e-small .e-fab.e-btn{border-radius:9999px;min-height:32px;min-width:32px;padding:0 11px}.e-small.e-fab.e-btn.e-icon-btn,.e-small .e-fab.e-btn.e-icon-btn{padding:0}.e-small.e-fab.e-btn .e-btn-icon,.e-small .e-fab.e-btn .e-btn-icon{font-size:12px}.e-bigger.e-fab.e-btn,.e-bigger .e-fab.e-btn{border-radius:9999px;min-height:52px;min-width:52px;padding:0 21px}.e-bigger.e-fab.e-btn.e-icon-btn,.e-bigger .e-fab.e-btn.e-icon-btn{padding:0}.e-bigger.e-fab.e-btn .e-btn-icon,.e-bigger .e-fab.e-btn .e-btn-icon{font-size:16px}.e-bigger.e-small.e-fab.e-btn,.e-bigger.e-small .e-fab.e-btn,.e-bigger .e-small.e-fab.e-btn,.e-small .e-bigger.e-fab.e-btn{border-radius:9999px;min-height:46px;min-width:46px;padding:0 17px}.e-bigger.e-small.e-fab.e-btn.e-icon-btn,.e-bigger.e-small .e-fab.e-btn.e-icon-btn,.e-bigger .e-small.e-fab.e-btn.e-icon-btn,.e-small .e-bigger.e-fab.e-btn.e-icon-btn{padding:0}.e-bigger.e-small.e-fab.e-btn .e-btn-icon,.e-bigger.e-small .e-fab.e-btn .e-btn-icon,.e-bigger .e-small.e-fab.e-btn .e-btn-icon,.e-small .e-bigger.e-fab.e-btn .e-btn-icon{font-size:14px}.e-fab.e-btn{-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12)}.e-fab.e-btn.e-active,.e-fab.e-btn:active,.e-fab.e-btn:disabled,.e-fab.e-btn:hover:not(:focus){-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12)}.e-fab.e-btn:focus{-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12)}.e-speeddial-popup{position:absolute;z-index:100000;pointer-events:none}.e-speeddial-popup.e-speeddial-top{top:16px}.e-speeddial-popup.e-speeddial-top.e-speeddial-radial .e-speeddial-li{top:0}.e-speeddial-popup.e-speeddial-top.e-speeddial-radial.e-speeddial-middle .e-speeddial-li{top:calc(var(--speeddialRadialMinWidth)*0.5 + var(--speeddialRadialOffset))}.e-speeddial-popup.e-speeddial-top.e-speeddial-linear,.e-speeddial-popup.e-speeddial-top.e-speeddial-middle{top:var(--speeddialVertDist)}.e-speeddial-popup.e-speeddial-bottom{bottom:16px}.e-speeddial-popup.e-speeddial-bottom.e-speeddial-radial .e-speeddial-li{bottom:0}.e-speeddial-popup.e-speeddial-bottom.e-speeddial-radial.e-speeddial-middle .e-speeddial-li{bottom:calc(var(--speeddialRadialMinWidth)*0.5 + var(--speeddialRadialOffset))}.e-speeddial-popup.e-speeddial-bottom.e-speeddial-linear,.e-speeddial-popup.e-speeddial-bottom.e-speeddial-middle{bottom:var(--speeddialVertDist)}.e-speeddial-popup.e-speeddial-left{left:16px}.e-speeddial-popup.e-speeddial-left.e-speeddial-radial .e-speeddial-li{left:0}.e-speeddial-popup.e-speeddial-left.e-speeddial-radial.e-speeddial-center .e-speeddial-li{left:calc(var(--speeddialRadialMinWidth)*0.5 + var(--speeddialRadialOffset))}.e-speeddial-popup.e-speeddial-left.e-speeddial-center,.e-speeddial-popup.e-speeddial-left.e-speeddial-linear{left:var(--speeddialHorzDist)}.e-speeddial-popup.e-speeddial-right{right:16px}.e-speeddial-popup.e-speeddial-right.e-speeddial-radial .e-speeddial-li{right:0}.e-speeddial-popup.e-speeddial-right.e-speeddial-radial.e-speeddial-center .e-speeddial-li{right:calc(var(--speeddialRadialMinWidth)*0.5 + var(--speeddialRadialOffset))}.e-speeddial-popup.e-speeddial-right.e-speeddial-center,.e-speeddial-popup.e-speeddial-right.e-speeddial-linear{right:var(--speeddialHorzDist)}.e-speeddial-popup.e-speeddial-template{outline:none;pointer-events:auto;z-index:100001}.e-speeddial-popup.e-speeddial-linear .e-speeddial-li{margin:5px 0}.e-speeddial-popup .e-speeddial-ul{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;list-style-type:none;margin:0;padding:5px}.e-speeddial-popup .e-speeddial-li,.e-speeddial-popup .e-speeddial-ul{display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex}.e-speeddial-popup .e-speeddial-li{-ms-flex-align:center;-webkit-box-align:center;align-items:center;cursor:pointer;pointer-events:auto;position:relative;z-index:100001}.e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text{margin:0 8px}.e-speeddial-popup .e-speeddial-li-text{border-radius:2px;border:1px solid;padding:0 5px;white-space:nowrap;height:26px;line-height:26px}.e-speeddial-popup .e-speeddial-li-icon{border-radius:99999px;border:1px solid;font-size:12px;height:28px;width:28px;display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center}.e-speeddial-popup.e-speeddial-fixed{position:fixed}.e-speeddial-popup.e-speeddial-vert-right .e-speeddial-li{-ms-flex-direction:row-reverse;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;flex-direction:row-reverse}.e-speeddial-popup.e-speeddial-vert-bottom .e-speeddial-ul{-ms-flex-direction:column-reverse;-webkit-box-orient:vertical;-webkit-box-direction:reverse;flex-direction:column-reverse}.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul{-ms-flex-direction:row-reverse;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;flex-direction:row-reverse}.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul.e-speeddial-horz-top{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul.e-speeddial-horz-top{-ms-flex-direction:row-reverse;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;flex-direction:row-reverse}.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul{padding:5px}.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li{margin:0 5px}.e-speeddial-popup.e-speeddial-overflow .e-speeddial-ul{overflow:auto;scroll-behavior:smooth;-ms-overflow-style:none;scrollbar-width:none}.e-speeddial-popup.e-speeddial-overflow .e-speeddial-ul::-webkit-scrollbar{display:none}.e-speeddial-popup.e-speeddial-overflow.e-speeddial-vert-overflow .e-speeddial-ul{max-height:var(--speeddialOverflowLimit)}.e-speeddial-popup.e-speeddial-overflow.e-speeddial-horz-overflow .e-speeddial-ul{max-width:var(--speeddialOverflowLimit)}.e-speeddial-popup.e-speeddial-radial{height:calc(var(--speeddialRadialOffset) + var(--speeddialRadialMinHeight)*2);width:calc(var(--speeddialRadialOffset) + var(--speeddialRadialMinWidth)*2)}.e-speeddial-popup.e-speeddial-radial.e-speeddial-middle{height:calc(var(--speeddialRadialOffset)*2 + var(--speeddialRadialMinHeight)*2)}.e-speeddial-popup.e-speeddial-radial.e-speeddial-center{width:calc(var(--speeddialRadialOffset)*2 + var(--speeddialRadialMinWidth)*2)}.e-speeddial-popup.e-speeddial-radial.e-speeddial-top-left{border-bottom-right-radius:100%}.e-speeddial-popup.e-speeddial-radial.e-speeddial-top-right{border-bottom-left-radius:100%}.e-speeddial-popup.e-speeddial-radial.e-speeddial-bottom-left{border-top-right-radius:100%}.e-speeddial-popup.e-speeddial-radial.e-speeddial-bottom-right{border-top-left-radius:100%}.e-speeddial-popup.e-speeddial-radial .e-speeddial-ul{border-radius:inherit;height:inherit;width:inherit;padding:0;position:relative}.e-speeddial-popup.e-speeddial-radial .e-speeddial-li{position:absolute;-webkit-transform:rotate(var(--speeddialRadialAngle)) translate(var(--speeddialRadialOffset)) rotate(calc(var(--speeddialRadialAngle)*-1));-ms-transform:rotate(var(--speeddialRadialAngle)) translate(var(--speeddialRadialOffset)) rotate(calc(var(--speeddialRadialAngle)*-1));transform:rotate(var(--speeddialRadialAngle)) translate(var(--speeddialRadialOffset)) rotate(calc(var(--speeddialRadialAngle)*-1))}.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li-text,.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li-text,.e-speeddial-popup.e-speeddial-radial .e-speeddial-li-text{position:absolute;visibility:hidden}.e-small.e-speeddial-popup .e-speeddial-ul,.e-small .e-speeddial-popup .e-speeddial-ul{padding:5px 3px}.e-small.e-speeddial-popup.e-speeddial-linear .e-speeddial-li,.e-small .e-speeddial-popup.e-speeddial-linear .e-speeddial-li{margin:5px 0}.e-small.e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text,.e-small .e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text{margin:0 8px}.e-small.e-speeddial-popup .e-speeddial-li-text,.e-small .e-speeddial-popup .e-speeddial-li-text{height:22px;line-height:22px}.e-small.e-speeddial-popup .e-speeddial-li-icon,.e-small .e-speeddial-popup .e-speeddial-li-icon{height:24px;width:24px;font-size:12px}.e-small.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-small .e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-small.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul,.e-small .e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul{padding:3px 5px}.e-small.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-small .e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-small.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li,.e-small .e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li{margin:0 5px}.e-bigger.e-speeddial-popup .e-speeddial-ul,.e-bigger .e-speeddial-popup .e-speeddial-ul{padding:6px 7px}.e-bigger.e-speeddial-popup.e-speeddial-linear .e-speeddial-li,.e-bigger .e-speeddial-popup.e-speeddial-linear .e-speeddial-li{margin:6px 0}.e-bigger.e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text,.e-bigger .e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text{margin:0 12px}.e-bigger.e-speeddial-popup .e-speeddial-li-text,.e-bigger .e-speeddial-popup .e-speeddial-li-text{height:32px;line-height:32px}.e-bigger.e-speeddial-popup .e-speeddial-li-icon,.e-bigger .e-speeddial-popup .e-speeddial-li-icon{height:36px;width:36px;font-size:14px}.e-bigger.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-bigger .e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-bigger.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul,.e-bigger .e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul{padding:7px 6px}.e-bigger.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-bigger .e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-bigger.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li,.e-bigger .e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li{margin:0 6px}.e-bigger.e-small.e-speeddial-popup .e-speeddial-ul,.e-bigger.e-small .e-speeddial-popup .e-speeddial-ul,.e-bigger .e-small.e-speeddial-popup .e-speeddial-ul,.e-small .e-bigger.e-speeddial-popup .e-speeddial-ul{padding:5px}.e-bigger.e-small.e-speeddial-popup.e-speeddial-linear .e-speeddial-li,.e-bigger.e-small .e-speeddial-popup.e-speeddial-linear .e-speeddial-li,.e-bigger .e-small.e-speeddial-popup.e-speeddial-linear .e-speeddial-li,.e-small .e-bigger.e-speeddial-popup.e-speeddial-linear .e-speeddial-li{margin:5px 0}.e-bigger.e-small.e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text,.e-bigger.e-small .e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text,.e-bigger .e-small.e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text,.e-small .e-bigger.e-speeddial-popup .e-speeddial-li:not(.e-speeddial-text-li) .e-speeddial-li-text{margin:0 12px}.e-bigger.e-small.e-speeddial-popup .e-speeddial-li-text,.e-bigger.e-small .e-speeddial-popup .e-speeddial-li-text,.e-bigger .e-small.e-speeddial-popup .e-speeddial-li-text,.e-small .e-bigger.e-speeddial-popup .e-speeddial-li-text{height:30px;line-height:30px}.e-bigger.e-small.e-speeddial-popup .e-speeddial-li-icon,.e-bigger.e-small .e-speeddial-popup .e-speeddial-li-icon,.e-bigger .e-small.e-speeddial-popup .e-speeddial-li-icon,.e-small .e-bigger.e-speeddial-popup .e-speeddial-li-icon{height:34px;width:34px;font-size:14px}.e-bigger.e-small.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-bigger.e-small .e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-bigger .e-small.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-bigger.e-small.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul,.e-bigger.e-small .e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul,.e-bigger .e-small.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul,.e-small .e-bigger.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-ul,.e-small .e-bigger.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-ul{padding:5px}.e-bigger.e-small.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-bigger.e-small .e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-bigger .e-small.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-bigger.e-small.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li,.e-bigger.e-small .e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li,.e-bigger .e-small.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li,.e-small .e-bigger.e-speeddial-popup.e-speeddial-horz-left .e-speeddial-li,.e-small .e-bigger.e-speeddial-popup.e-speeddial-horz-right .e-speeddial-li{margin:0 5px}.e-speeddial-overlay{height:100%;left:0;position:absolute;top:0;width:100%;z-index:99998}.e-speeddial-overlay.e-speeddial-fixed{height:100vh;position:fixed;width:100vw}.e-speeddial-hidden{visibility:hidden}.e-speeddial-overlay{background-color:rgba(107,114,128,.5)}.e-speeddial-popup .e-speeddial-li{color:#000}.e-speeddial-popup .e-speeddial-li .e-speeddial-li-icon,.e-speeddial-popup .e-speeddial-li .e-speeddial-li-text{-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12);background:#fff;border-color:#fff}.e-speeddial-popup .e-speeddial-li.e-disabled{color:#000}.e-speeddial-popup .e-speeddial-li.e-disabled .e-speeddial-li-icon,.e-speeddial-popup .e-speeddial-li.e-disabled .e-speeddial-li-text{background:#fafafa;border-color:#fafafa}.e-speeddial-popup .e-speeddial-li.e-speeddial-li-active:not(.e-disabled),.e-speeddial-popup .e-speeddial-li:focus:not(.e-disabled){color:#000}.e-speeddial-popup .e-speeddial-li.e-speeddial-li-active:not(.e-disabled) .e-speeddial-li-icon,.e-speeddial-popup .e-speeddial-li.e-speeddial-li-active:not(.e-disabled) .e-speeddial-li-text,.e-speeddial-popup .e-speeddial-li:focus:not(.e-disabled) .e-speeddial-li-icon,.e-speeddial-popup .e-speeddial-li:focus:not(.e-disabled) .e-speeddial-li-text{background:#e0e0e0;border-color:#e0e0e0}.e-speeddial-popup .e-speeddial-li:not(.e-disabled):hover{color:#000}.e-speeddial-popup .e-speeddial-li:not(.e-disabled):hover .e-speeddial-li-icon,.e-speeddial-popup .e-speeddial-li:not(.e-disabled):hover .e-speeddial-li-text{background:#e0e0e0;border-color:#e0e0e0}.e-speeddial-popup .e-speeddial-li:not(.e-disabled):active{color:#000}.e-speeddial-popup .e-speeddial-li:not(.e-disabled):active .e-speeddial-li-icon,.e-speeddial-popup .e-speeddial-li:not(.e-disabled):active .e-speeddial-li-text{background:#bdbdbd;border-color:#bdbdbd}@-webkit-keyframes e-input-ripple{to{opacity:0;-webkit-transform:scale(4);transform:scale(4)}}@-webkit-keyframes slideTopUp{0%{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}to{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}}.e-ddl.e-control-wrapper .e-ddl-icon:before{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.e-ddl.e-control-wrapper.e-icon-anim .e-ddl-icon:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.e-dropdownbase .e-list-item.e-active.e-hover{color:#e3165b}.e-input-group:not(.e-disabled) .e-back-icon:active,.e-input-group:not(.e-disabled) .e-back-icon:hover,.e-input-group:not(.e-disabled) .e-control.e-dropdownlist~.e-ddl-icon:active,.e-input-group:not(.e-disabled) .e-control.e-dropdownlist~.e-ddl-icon:hover,.e-popup.e-ddl .e-input-group:not(.e-disabled) .e-clear-icon:active,.e-popup.e-ddl .e-input-group:not(.e-disabled) .e-clear-icon:hover{background:rgba(0,0,0,0)}.e-input-group .e-ddl-icon:not(:active):after{-webkit-animation:none;animation:none}.e-ddl.e-popup{border:0;-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);margin-top:2px}.e-popup.e-ddl .e-dropdownbase{min-height:26px}.e-bigger .e-popup.e-ddl-device-filter .e-input-group.e-input-focus:not(.e-success):not(.e-warning):not(.e-error){border-color:#e0e0e0}.e-bigger .e-popup.e-ddl-device-filter{margin-top:0}.e-bigger .e-ddl-device .e-input-group,.e-bigger .e-ddl-device .e-input-group.e-input-focus:not(.e-success):not(.e-warning):not(.e-error){background:#f5f5f5;border-width:0;-webkit-box-shadow:none;box-shadow:none;margin-bottom:0}.e-bigger .e-ddl-device .e-input-group .e-back-icon,.e-bigger .e-ddl-device .e-input-group .e-clear-icon,.e-bigger .e-ddl-device .e-input-group input.e-input{background-color:#f5f5f5}.e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon{margin:6px 6px 5px;min-height:12px;min-width:12px;padding:6px}.e-bigger.e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon,.e-bigger .e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon{min-height:16px;min-width:16px}.e-bigger.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-filter,.e-bigger .e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-filter{padding:8px 16px 8px 0}.e-input-group.e-ddl,.e-input-group.e-ddl .e-ddl-icon,.e-input-group.e-ddl .e-input{background:rgba(0,0,0,0)}.e-ddl.e-ddl-device.e-ddl-device-filter .e-input-group.e-control-wrapper:hover:not(.e-disabled):not(.e-float-icon-left),.e-ddl.e-ddl-device.e-ddl-device-filter .e-input-group:hover:not(.e-disabled):not(.e-float-icon-left){border-bottom-width:0}.e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-input-focus.e-small .e-clear-icon,.e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-small .e-clear-icon,.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon,.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon,.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-input-focus .e-clear-icon,.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-input-focus .e-clear-icon{margin:0}.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-small .e-input-filter,.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-small.e-input-focus .e-input-filter,.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group .e-input-filter,.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group .e-input-filter,.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-input-focus .e-input-filter,.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-input-focus .e-input-filter{padding:5px 5px 5px 12px}.e-bigger.e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-small .e-clear-icon,.e-bigger .e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-small .e-clear-icon,.e-bigger.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon,.e-bigger.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-input-group .e-clear-icon,.e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-bigger.e-small .e-clear-icon,.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-bigger .e-clear-icon,.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-input-group.e-bigger .e-clear-icon{min-height:18px;min-width:18px}.e-bigger.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-small .e-input-filter,.e-bigger .e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-small .e-input-filter,.e-bigger.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group .e-input-filter,.e-bigger.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group .e-input-filter,.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-bigger.e-small .e-input-filter,.e-small.e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-bigger .e-input-filter,.e-small .e-popup.e-ddl:not(.e-ddl-device) .e-filter-parent .e-input-group.e-bigger .e-input-filter{padding:8px 16px}.e-ddl.e-popup.e-outline .e-filter-parent{padding:4px 8px}@-webkit-keyframes material-spinner-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes fabric-spinner-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.e-excelfilter .e-icon-filter:before{content:"\E7EE"}.e-excelfilter .e-excl-filter-icon:before{content:"\E251"}.e-excelfilter .e-excl-filter-icon.e-filtered:before{content:"\E248"}.e-excelfilter .e-search-icon:before{content:"\E993"}.e-excelfilter .e-chkcancel-icon:before{content:"\E7A7"}.e-excelfilter .e-sortascending:before{content:"\E734"}.e-excelfilter .e-sortdescending:before{content:"\E733"}.sf-grid .e-excelfilter .e-dlg-content{overflow:visible;padding:0}.sf-grid .e-excelfilter .e-searchcontainer{padding:4px 18px 18px}.sf-grid .e-excelfilter .e-contextmenu-container.e-sfcontextmenu .e-ul .e-menu-item .e-menu-icon{height:26px;line-height:26px}.sf-grid .e-excelfilter .e-contextmenu-container.e-sfcontextmenu .e-ul .e-menu-item:not(.e-separator){height:26px;line-height:26px}.sf-grid .e-excelfilter .e-searchbox{padding-left:0}.sf-grid .e-excelfilter .e-contextmenu-container.e-sfcontextmenu .e-ul .e-separator{height:auto}.sf-grid .e-excelfilter .e-contextmenu-container.e-sfcontextmenu .e-ul{position:absolute}.sf-grid .e-excelfilter .e-contextmenu-container.e-sfcontextmenu{display:inline-block;position:relative;width:100%}.sf-grid-dlg.e-xlflmenu .e-xlfl-radiodiv{width:unset}.e-xlflmenu{min-height:295px}.e-xlflmenu .e-xlfl-dlgfields{font-size:17px}.e-xlflmenu .e-xlfl-fieldset{font-size:14px;padding-top:15px}.e-xlflmenu .e-xlfl-mtcase,.e-xlflmenu .e-xlfl-optr,.e-xlflmenu .e-xlfl-radio,.e-xlflmenu .e-xlfl-value{padding-top:12px}.e-xlflmenu .e-xlfl-optr:first-child{padding-right:12px}.e-xlflmenu .e-xlfl-table{border-spacing:0;table-layout:fixed;width:100%}.e-xlflmenu .e-radio+label .e-label{margin-top:0;padding-left:23px;padding-right:13px}.e-xlflmenu .e-checkbox-wrapper .e-frame+.e-label{margin-bottom:1px;margin-left:6px}.e-xlflmenu .e-checkbox-wrapper .e-frame{margin-bottom:1px}.e-xlflmenu .e-dlg-content{padding-bottom:6px}.e-xlflmenu .e-xlfl-radiodiv{width:117px}.e-xlflmenu .e-xlfl-matchcasediv{margin-left:0;margin-right:13px}.e-xlfl-matchcasediv,.e-xlfl-radio-or{margin-left:13px}.e-xlflmenu.e-rtl .e-xlfl-optr{padding-left:12px;padding-right:0}.e-xlflmenu.e-rtl .e-radio+label .e-label{padding-left:0;padding-right:25px}.e-xlflmenu.e-rtl .e-xlfl-radio-or{margin-left:0;margin-right:13px}.e-bigger .e-xlflmenu.e-rtl .e-radio+label .e-label{padding-left:0;padding-right:25px}.e-bigger .e-xlflmenu{min-height:396px}.e-bigger .e-xlflmenu .e-xlfl-table{border-spacing:0;width:100%}.e-bigger .e-xlflmenu .e-dlg-content{padding-bottom:8px}.e-bigger .e-xlflmenu .e-radio+label .e-label{padding-left:28px;padding-right:5px}.e-bigger .e-xlflmenu .e-checkbox-wrapper .e-frame+.e-label{margin-left:8px}.e-bigger .e-xlflmenu .e-xlfl-radiodiv{width:137px}.e-bigger .e-xlflmenu .e-xlfl-matchcasediv,.e-bigger .e-xlflmenu .e-xlfl-radio-or{margin-left:18px}.e-bigger .e-xlflmenu .e-xlfl-optr:first-child{padding-right:16px}.e-bigger .e-xlflmenu .e-xlfl-dlgfields{font-size:18px}.e-bigger .e-xlflmenu .e-xlfl-fieldset{font-size:15px;padding-top:20px}.e-bigger .e-xlflmenu .e-xlfl-mtcase,.e-bigger .e-xlflmenu .e-xlfl-optr,.e-bigger .e-xlflmenu .e-xlfl-radio,.e-bigger .e-xlflmenu .e-xlfl-value{padding-top:16px}.e-bigger .e-excelfilter .e-xlflmenu,.e-excelfilter.e-bigger .e-xlflmenu{min-height:396px}.e-bigger .e-excelfilter .e-ftrchk,.e-excelfilter.e-bigger .e-ftrchk{padding-bottom:13px;padding-top:13px}.e-bigger .e-excelfilter .e-contextmenu-container ul li,.e-bigger .e-excelfilter .e-contextmenu-wrapper ul li,.e-excelfilter.e-bigger .e-contextmenu-container ul li,.e-excelfilter.e-bigger .e-contextmenu-wrapper ul li{height:48px;line-height:48px}.e-bigger .e-excelfilter .e-contextmenu-container ul li .e-menu-icon,.e-bigger .e-excelfilter .e-contextmenu-wrapper ul li .e-menu-icon,.e-excelfilter.e-bigger .e-contextmenu-container ul li .e-menu-icon,.e-excelfilter.e-bigger .e-contextmenu-wrapper ul li .e-menu-icon{height:48px;line-height:48px;margin-right:15px}.e-bigger .e-excelfilter .e-contextmenu-wrapper ul .e-menu-item .e-caret,.e-excelfilter.e-bigger .e-contextmenu-wrapper ul .e-menu-item .e-caret{height:48px;line-height:48px;margin-right:0}.e-bigger .e-excelfilter.e-rtl .e-contextmenu-wrapper ul .e-menu-item .e-caret,.e-excelfilter.e-bigger.e-rtl .e-contextmenu-wrapper ul .e-menu-item .e-caret{margin-left:0}.e-bigger .e-excelfilter.e-dialog .e-dlg-content,.e-excelfilter.e-bigger.e-dialog .e-dlg-content{padding-left:11px}.e-bigger .e-excelfilter .e-ftrchk,.e-bigger .e-excelfilter .e-searchbox,.e-excelfilter.e-bigger .e-ftrchk,.e-excelfilter.e-bigger .e-searchbox{padding-left:13px}.e-bigger .e-excelfilter.e-rtl .e-dlg-content,.e-excelfilter.e-bigger.e-rtl .e-dlg-content{padding-left:24px;padding-right:11px}.e-bigger .e-excelfilter.e-rtl .e-ftrchk,.e-bigger .e-excelfilter.e-rtl .e-searchbox,.e-excelfilter.e-bigger.e-rtl .e-ftrchk,.e-excelfilter.e-bigger.e-rtl .e-searchbox{padding-left:0;padding-right:13px}.e-excelfilter .e-checkboxlist{height:200px;margin-top:5px;min-height:160px;overflow-y:auto}.e-excelfilter .e-checkboxfiltertext{width:150px;word-break:normal}.e-excelfilter .e-chk-hidden{-moz-appearance:none;height:1px;opacity:0;width:1px}.e-excelfilter .e-contextmenu-container ul li,.e-excelfilter .e-contextmenu-wrapper ul li{height:36px;line-height:36px}.e-excelfilter .e-contextmenu-container ul:not(.e-ul),.e-excelfilter .e-contextmenu-wrapper ul{border:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;max-width:300px;padding-bottom:4px;position:static}.e-excelfilter .e-dlg-content{background-color:#fff}.e-excelfilter .e-contextmenu-wrapper,.e-excelfilter .e-contextmenu-wrapper ul{display:block}.e-excelfilter .e-contextmenu-wrapper ul{padding-bottom:4px;position:static}.e-excelfilter .e-contextmenu-wrapper ul li .e-contextmenu-container ul li{height:36px;line-height:36px}.e-excelfilter .e-contextmenu-container ul li .e-menu-icon,.e-excelfilter .e-contextmenu-wrapper ul li .e-menu-icon{height:36px;line-height:36px;margin-right:12px}.e-excelfilter.e-rtl .e-contextmenu-wrapper ul li .e-menu-icon{margin-right:0}.e-excelfilter .e-contextmenu-wrapper ul .e-menu-item .e-caret{height:36px;line-height:36px;margin-right:0}.e-excelfilter.e-rtl .e-contextmenu-wrapper ul .e-menu-item .e-caret{margin-left:0}.e-excelfilter .e-footer-content{border-style:solid;border-width:1px 0 0}.e-excelfilter .e-excel-menu{z-index:1000}.e-excelfilter .e-dlg-content{padding-top:0}.e-excelfilter .e-xlsel{border:0 solid;position:absolute;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-excelfilter.e-dialog .e-dlg-content,.e-excelfilter .e-ftrchk,.e-excelfilter .e-searchbox{padding-left:9px}.e-excelfilter.e-rtl .e-dlg-content{padding-left:18px;padding-right:9px}.e-excelfilter.e-rtl .e-ftrchk,.e-excelfilter.e-rtl .e-searchbox{padding-left:0;padding-right:9px}.e-excelfilter .e-searchbox{display:block}.e-ftrchk{padding-bottom:9px;padding-top:9px}.e-excel-menu.e-contextmenu.e-menu-parent{max-height:298px;overflow-y:auto}.e-bigger .e-excel-menu.e-contextmenu.e-menu-parent{max-height:355px}.e-excelfilter .e-footer-content{border-color:rgba(0,0,0,.12);opacity:1}.e-excelfilter .e-filtered:before{color:#e3165b}.e-excelfilter .e-dlg-content{padding-bottom:0}li.e-separator.e-menu-item.e-excel-separator{margin-bottom:4px;margin-top:4px}.e-xlsel{background-color:#e3165b;border-color:#e3165b}@keyframes e-input-ripple{to{opacity:0;-webkit-transform:scale(4);transform:scale(4)}}@keyframes slideTopUp{0%{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}to{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}}@keyframes material-spinner-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fabric-spinner-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes tbar-popup-shadow{0%{border-color:hsla(0,0%,100%,.5);-webkit-box-shadow:0 0 0 0 hsla(0,0%,100%,.5);box-shadow:0 0 0 0 hsla(0,0%,100%,.5)}to{-webkit-box-shadow:0 0 0 200px hsla(0,0%,100%,.12);box-shadow:0 0 0 200px hsla(0,0%,100%,.12)}}@keyframes tbar-popup-shadow{0%{border-color:hsla(0,0%,100%,.5);-webkit-box-shadow:0 0 0 0 hsla(0,0%,100%,.5);box-shadow:0 0 0 0 hsla(0,0%,100%,.5)}to{-webkit-box-shadow:0 0 0 200px hsla(0,0%,100%,.12);box-shadow:0 0 0 200px hsla(0,0%,100%,.12)}}.e-icon-check:before{content:"\E7FF"}.e-grid-menu .e-group-animate .e-drag.e-icon-drag:before,.e-grid .e-group-animate .e-drag.e-icon-drag:before{content:"\E330"}.e-grid-menu .e-group-animate .e-nextgroup.e-icon-next:before,.e-grid .e-group-animate .e-nextgroup.e-icon-next:before{content:"\EC07"}.e-grid-menu .e-icon-ascending:before,.e-grid .e-icon-ascending:before{content:"\E840"}.e-grid-menu .e-icon-descending:before,.e-grid .e-icon-descending:before{content:"\E83F"}.e-grid-menu .e-icon-hide:before,.e-grid .e-icon-hide:before{content:"\E825"}.e-grid-menu .e-ungroupbutton.e-icon-hide:before,.e-grid .e-ungroupbutton.e-icon-hide:before{content:"\E917"}.e-grid-menu .e-icon-rowselect:before,.e-grid .e-icon-rowselect:before{content:"\E930"}.e-grid-menu .e-icon-sortdirect:before,.e-grid .e-icon-sortdirect:before{content:"\E890"}.e-grid-menu .e-icon-gdownarrow:before,.e-grid .e-icon-gdownarrow:before{content:"\E83D"}.e-grid-menu .e-icon-grightarrow:before,.e-grid .e-icon-grightarrow:before{content:"\E859"}.e-grid-menu .e-icon-filter.e-filtered:before,.e-grid-menu .e-icon-filter:before,.e-grid .e-icon-filter.e-filtered:before,.e-grid .e-icon-filter:before{content:"\E7EE"}.e-grid-menu .e-resfilter-icon:before,.e-grid .e-resfilter-icon:before{content:"\E251"}.e-grid-menu .e-ressort-icon:before,.e-grid .e-ressort-icon:before{content:"\E612"}.e-grid-menu .e-excl-filter-icon:before,.e-grid .e-excl-filter-icon:before{content:"\E251"}.e-grid-menu .e-excl-filter-icon.e-filtered:before,.e-grid .e-excl-filter-icon.e-filtered:before{content:"\E248"}.e-grid-menu.e-rtl .e-icon-grightarrow:before,.e-grid.e-rtl .e-icon-grightarrow:before{content:"\E854"}.e-grid-menu .e-icon-group:before,.e-grid .e-icon-group:before{content:"\E926"}.e-grid-menu .e-icon-ungroup:before,.e-grid .e-icon-ungroup:before{content:"\E926"}.e-grid-menu .e-icon-reorderuparrow:before,.e-grid .e-icon-reorderuparrow:before{content:"\E918"}.e-grid-menu .e-icon-reorderdownarrow:before,.e-grid .e-icon-reorderdownarrow:before{content:"\E919"}.e-grid-menu .e-print:before,.e-grid .e-print:before{content:"\E813"}.e-grid-menu .e-add:before,.e-grid .e-add:before{content:"\E7F9"}.e-grid-menu .e-resback-icon:before,.e-grid .e-resback-icon:before{content:"\E977"}.e-grid-menu .e-wordexport:before,.e-grid .e-wordexport:before{content:"\E7B0"}.e-grid-menu .e-pdfexport:before,.e-grid .e-pdfexport:before{content:"\E240"}.e-grid-menu .e-csvexport:before,.e-grid .e-csvexport:before{content:"\E241"}.e-grid-menu .e-excelexport:before,.e-grid .e-excelexport:before{content:"\E242"}.e-grid-menu .e-edit:before,.e-grid .e-edit:before{content:"\E81E"}.e-grid-menu .e-columnmenu.e-filtered:before,.e-grid-menu .e-columnmenu:before,.e-grid .e-columnmenu.e-filtered:before,.e-grid .e-columnmenu:before{content:"\E984"}.e-grid-menu .e-delete:before,.e-grid .e-delete:before{content:"\E84E"}.e-grid-menu .e-cancel:before,.e-grid .e-cancel:before{content:"\E825"}.e-grid-menu .e-copy:before,.e-grid .e-copy:before{content:"\E70A"}.e-grid-menu .e-save:before,.e-grid .e-save:before{content:"\E98E"}.e-grid-menu .e-update:before,.e-grid .e-update:before{content:"\E735"}.e-grid-menu .e-search-icon:before,.e-grid .e-search-icon:before{content:"\E993"}.e-grid-menu .e-cancel-icon:before,.e-grid .e-cancel-icon:before{content:"\E825"}.e-grid-menu .e-columnchooserdiv:before,.e-grid .e-columnchooserdiv:before{content:"\E714"}.e-grid-menu .e-ccsearch-icon:before,.e-grid .e-ccsearch-icon:before{content:"\E993"}.e-grid-menu .e-columnchooser:before,.e-grid .e-columnchooser:before{content:"\E21E"}.e-grid-menu .e-columnchooser-btn:before,.e-grid .e-columnchooser-btn:before{content:"\E969"}.e-grid-menu .e-cc-icon:before,.e-grid .e-cc-icon:before{content:"\E82E"}.e-grid-menu .e-icon-rowdragicon:before,.e-grid .e-icon-rowdragicon:before{content:"\E330"}.e-grid-menu.e-rtl .e-icon-rowdragicon:before,.e-grid.e-rtl .e-icon-rowdragicon:before{content:"\E330"}.e-grid-menu .e-ccsearch-icon.e-cc-cancel:before,.e-grid-menu .e-chkcancel-icon:before,.e-grid .e-ccsearch-icon.e-cc-cancel:before,.e-grid .e-chkcancel-icon:before{content:"\E7A7"}.e-responsive-dialog .e-resfilterback:before{content:"\E977"}.e-responsive-dialog .e-filterset:before{content:"\E7EE"}.e-responsive-dialog .e-search-icon:before{content:"\E993"}.e-responsive-dialog .e-chkcancel-icon:before{content:"\E7A7"}.e-responsive-dialog .e-icon-filter-clear:before{content:"\E248"}.e-row-responsive-filter .e-dlg-closeicon-btn .e-icon-dlg-close:before{content:"\E977"}.e-disableuserselect{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-contextmenu-container.e-sfcontextmenu.e-hide-menu{visibility:hidden}.e-emptyicon{opacity:0}.e-device .e-flmenu-valuediv{padding:24px 0 0}.e-bigger .e-grid,.e-grid.e-bigger{font-size:13px}.e-bigger .e-grid .e-gridheader thead .e-icons:not(.e-check):not(.e-stop),.e-grid.e-bigger .e-gridheader thead .e-icons:not(.e-check):not(.e-stop){font-size:10px}.e-bigger .e-grid .e-row .e-icon-rowdragicon:before,.e-grid.e-bigger .e-row .e-icon-rowdragicon:before{font-size:10px}.e-bigger .e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper,.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper{padding:5px}.e-bigger .e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-input.e-search,.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-input.e-search{width:100%}.e-bigger .e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-input-group-icon.e-icons.e-sicon.e-clear-icon,.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-input-group-icon.e-icons.e-sicon.e-clear-icon{margin:13px 14px 5px 0}.e-bigger .e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon:before,.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon:before{font-size:17px}.e-bigger .e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search .e-search-icon,.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search .e-search-icon{padding-left:0}.e-bigger .e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper,.e-grid.e-bigger .e-toolbar-items .e-toolbar-item.e-search-wrapper{padding-bottom:8px;padding-top:2px}.e-bigger .e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search .e-search-icon,.e-grid.e-bigger .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search .e-search-icon{min-width:20px}.e-bigger .e-grid .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon,.e-grid.e-bigger .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon{margin:0 8px 0 0;min-width:20px;padding:0}.e-bigger .e-grid .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon:before,.e-grid.e-bigger .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon:before{font-size:12px}.e-bigger .e-grid.e-rtl .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon,.e-grid.e-bigger.e-rtl .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon{margin:6px 0 5px 6px;min-width:20px;padding:0}.e-bigger .e-grid .e-toolbar .e-toolbar-items .e-tbar-btn.e-btn .e-btn-icon.e-icons,.e-grid.e-bigger .e-toolbar .e-toolbar-items .e-tbar-btn.e-btn .e-btn-icon.e-icons{font-size:18px}.e-bigger .e-grid .e-flmenu-valuediv,.e-grid.e-bigger .e-flmenu-valuediv{padding:24px 0 0}.e-bigger .e-grid .e-headercell,.e-grid.e-bigger .e-headercell{height:56px;padding:0 28px}.e-bigger .e-grid .e-headercelldiv,.e-grid.e-bigger .e-headercelldiv{height:29px;line-height:30px}.e-bigger .e-grid .e-detailheadercell,.e-bigger .e-grid .e-headercell,.e-grid.e-bigger .e-detailheadercell,.e-grid.e-bigger .e-headercell{font-size:12px}.e-bigger .e-grid .e-icons,.e-grid.e-bigger .e-icons{font-size:14px}.e-bigger .e-grid .e-gridheader thead .e-icons,.e-grid.e-bigger .e-gridheader thead .e-icons{font-size:16px}.e-bigger .e-grid .e-icon-gdownarrow,.e-bigger .e-grid .e-icon-grightarrow,.e-bigger .e-grid .e-toolbar .e-tbar-btn.e-btn .e-btn-icon.e-icons.e-columnchooser-btn,.e-grid.e-bigger .e-icon-gdownarrow,.e-grid.e-bigger .e-icon-grightarrow,.e-grid.e-bigger .e-toolbar .e-tbar-btn.e-btn .e-btn-icon.e-icons.e-columnchooser-btn{font-size:12px}.e-bigger .e-grid .e-gridheader tr th:last-child,.e-grid.e-bigger .e-gridheader tr th:last-child{padding-right:28px}.e-bigger .e-grid .e-gridheader tr th:last-child.e-filterbarcell,.e-grid.e-bigger .e-gridheader tr th:last-child.e-filterbarcell{padding-left:21px}.e-bigger .e-grid .e-gridheader tr th:first-child,.e-grid.e-bigger .e-gridheader tr th:first-child{padding-left:28px}.e-bigger .e-grid .e-gridheader tr th:first-child.e-filterbarcell,.e-grid.e-bigger .e-gridheader tr th:first-child.e-filterbarcell{padding-left:21px}.e-bigger .e-grid .e-headercelldiv,.e-grid.e-bigger .e-headercelldiv{font-size:12px}.e-bigger .e-grid .e-groupcaption,.e-bigger .e-grid .e-rowcell,.e-bigger .e-grid .e-summarycell,.e-grid.e-bigger .e-groupcaption,.e-grid.e-bigger .e-rowcell,.e-grid.e-bigger .e-summarycell{font-size:13px;padding:11px 28px}.e-bigger .e-grid .e-rowcell:first-child,.e-bigger .e-grid .e-summarycell:first-child,.e-grid.e-bigger .e-rowcell:first-child,.e-grid.e-bigger .e-summarycell:first-child{padding-left:28px}.e-bigger .e-grid .e-rowcell:last-child,.e-bigger .e-grid .e-summarycell:last-child,.e-grid.e-bigger .e-rowcell:last-child,.e-grid.e-bigger .e-summarycell:last-child{padding-right:28px}.e-bigger .e-grid .e-filterbarcell,.e-bigger .e-grid .e-filterbarcelldisabled,.e-grid.e-bigger .e-filterbarcell,.e-grid.e-bigger .e-filterbarcelldisabled{height:56px;padding:0 28px}.e-bigger .e-grid .e-filterbarcell input,.e-grid.e-bigger .e-filterbarcell input{height:26px}.e-bigger .e-grid .e-ftrchk,.e-grid.e-bigger .e-ftrchk{padding-bottom:13px;padding-top:13px}.e-bigger .e-grid .e-columnmenu,.e-grid.e-bigger .e-columnmenu{bottom:31px;top:35px}.e-bigger .e-grid.e-device.e-noselect,.e-grid.e-bigger.e-device.e-noselect{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-bigger .e-grid .e-dialog.e-checkboxfilter,.e-bigger .e-grid .e-dialog.e-flmenu,.e-grid.e-bigger .e-dialog.e-checkboxfilter,.e-grid.e-bigger .e-dialog.e-flmenu{min-width:260px}.e-bigger .e-grid .e-dialog.e-checkboxfilter,.e-grid.e-bigger .e-dialog.e-checkboxfilter{min-height:352px}.e-bigger .e-grid .e-checkboxfilter .e-dlg-content,.e-grid.e-bigger .e-checkboxfilter .e-dlg-content{padding-left:11px}.e-bigger .e-grid .e-checkboxfilter .e-ftrchk,.e-bigger .e-grid .e-checkboxfilter .e-searchbox,.e-grid.e-bigger .e-checkboxfilter .e-ftrchk,.e-grid.e-bigger .e-checkboxfilter .e-searchbox{padding-left:13px}.e-bigger .e-grid.e-rtl .e-checkboxfilter .e-dlg-content,.e-grid.e-bigger.e-rtl .e-checkboxfilter .e-dlg-content{padding-left:24px;padding-right:11px}.e-bigger .e-grid.e-rtl .e-checkboxfilter .e-ftrchk,.e-bigger .e-grid.e-rtl .e-checkboxfilter .e-searchbox,.e-grid.e-bigger.e-rtl .e-checkboxfilter .e-ftrchk,.e-grid.e-bigger.e-rtl .e-checkboxfilter .e-searchbox{padding-left:0;padding-right:13px}.e-bigger .e-grid .e-filtermenudiv,.e-grid.e-bigger .e-filtermenudiv{margin:-18px -7px}.e-bigger .e-grid .e-sortfilterdiv,.e-grid.e-bigger .e-sortfilterdiv{margin:-17px 8px}.e-bigger .e-grid .e-gridheader .e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-fltr-icon .e-sortfilterdiv{margin:-15px 24px}.e-bigger .e-grid.e-rtl .e-gridheader .e-headercell .e-headercelldiv.e-headerchkcelldiv,.e-grid.e-bigger.e-rtl .e-gridheader .e-headercell .e-headercelldiv.e-headerchkcelldiv{padding:0 .6em 0 1.15em}.e-bigger .e-grid .e-gridheader .e-columnheader.e-wrap .e-sortfilterdiv,.e-bigger .e-grid .e-wrap .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-columnheader.e-wrap .e-sortfilterdiv,.e-grid.e-bigger .e-wrap .e-sortfilterdiv{margin:-20px 8px}.e-bigger .e-grid .e-gridheader .e-columnheader.e-wrap .e-rightalign .e-sortfilterdiv .e-wrap .e-rightalign .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-columnheader.e-wrap .e-rightalign .e-sortfilterdiv .e-wrap .e-rightalign .e-sortfilterdiv{margin:-20px 2px}.e-bigger .e-grid .e-gridheader .e-columnheader.e-wrap .e-fltr-icon .e-sortfilterdiv .e-wrap .e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-columnheader.e-wrap .e-fltr-icon .e-sortfilterdiv .e-wrap .e-fltr-icon .e-sortfilterdiv{margin:-10px 18px}.e-bigger .e-grid .e-gridheader .e-columnheader.e-wrap .e-rightalign.e-fltr-icon .e-sortfilterdiv,.e-bigger .e-grid .e-wrap .e-rightalign.e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-columnheader.e-wrap .e-rightalign.e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger .e-wrap .e-rightalign.e-fltr-icon .e-sortfilterdiv{margin:-12px 2px}.e-bigger .e-grid.e-wrap .e-columnheader .e-headercelldiv,.e-bigger .e-grid.e-wrap .e-columnheader .e-stackedheadercelldiv,.e-bigger .e-grid.e-wrap .e-rowcell,.e-grid.e-bigger.e-wrap .e-columnheader .e-headercelldiv,.e-grid.e-bigger.e-wrap .e-columnheader .e-stackedheadercelldiv,.e-grid.e-bigger.e-wrap .e-rowcell{line-height:18px}.e-bigger .e-grid .e-gridheader .e-rightalign .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-rightalign .e-sortfilterdiv{margin:-16px 4px}.e-bigger .e-grid .e-gridheader .e-rightalign.e-fltr-icon .e-sortnumber,.e-bigger .e-grid .e-gridheader .e-rightalign .e-sortnumber,.e-grid.e-bigger .e-gridheader .e-rightalign.e-fltr-icon .e-sortnumber,.e-grid.e-bigger .e-gridheader .e-rightalign .e-sortnumber{float:left;margin:7px 2px 0 5px}.e-bigger .e-grid .e-sortnumber,.e-grid.e-bigger .e-sortnumber{border-radius:65%;display:inline-block;float:right;font-size:9px;height:15px;line-height:16px;margin:7px 5px 0 2px;text-align:center;width:15px}.e-bigger .e-grid .e-gridheader .e-fltr-icon .e-sortnumber,.e-grid.e-bigger .e-gridheader .e-fltr-icon .e-sortnumber{margin:7px 5px 0 2px}.e-bigger .e-grid .e-gridheader .e-rightalign.e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger .e-gridheader .e-rightalign.e-fltr-icon .e-sortfilterdiv{margin:-15px -4px}.e-bigger .e-grid.e-rtl .e-detailheadercell .e-sortfilterdiv,.e-bigger .e-grid.e-rtl .e-gridheader .e-rightalign .e-sortfilterdiv,.e-bigger .e-grid.e-rtl .e-headercell .e-sortfilterdiv,.e-grid.e-bigger.e-rtl .e-detailheadercell .e-sortfilterdiv,.e-grid.e-bigger.e-rtl .e-gridheader .e-rightalign .e-sortfilterdiv,.e-grid.e-bigger.e-rtl .e-headercell .e-sortfilterdiv{margin:-17px 10px}.e-bigger .e-grid.e-rtl .e-gridheader .e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger.e-rtl .e-gridheader .e-fltr-icon .e-sortfilterdiv{margin:-17px 30px 0 14px}.e-bigger .e-grid.e-rtl .e-gridheader .e-rightalign.e-fltr-icon .e-sortfilterdiv,.e-grid.e-bigger.e-rtl .e-gridheader .e-rightalign.e-fltr-icon .e-sortfilterdiv{margin:-17px 14px}.e-bigger .e-grid.e-rtl .e-filtermenudiv,.e-bigger .e-grid.e-rtl .e-rightalign .e-filtermenudiv,.e-grid.e-bigger.e-rtl .e-filtermenudiv,.e-grid.e-bigger.e-rtl .e-rightalign .e-filtermenudiv{margin:-20px 0 -18px -11px}.e-bigger .e-grid.e-rtl .e-detailheadercell .e-headercelldiv .e-sortnumber,.e-bigger .e-grid.e-rtl .e-detailheadercell.e-rightalign .e-headercelldiv .e-sortnumber,.e-bigger .e-grid.e-rtl .e-headercell.e-fltr-icon .e-headercelldiv .e-sortnumber,.e-bigger .e-grid.e-rtl .e-headercell .e-headercelldiv .e-sortnumber,.e-bigger .e-grid.e-rtl .e-headercell.e-rightalign .e-headercelldiv .e-sortnumber,.e-grid.e-bigger.e-rtl .e-detailheadercell .e-headercelldiv .e-sortnumber,.e-grid.e-bigger.e-rtl .e-detailheadercell.e-rightalign .e-headercelldiv .e-sortnumber,.e-grid.e-bigger.e-rtl .e-headercell.e-fltr-icon .e-headercelldiv .e-sortnumber,.e-grid.e-bigger.e-rtl .e-headercell .e-headercelldiv .e-sortnumber,.e-grid.e-bigger.e-rtl .e-headercell.e-rightalign .e-headercelldiv .e-sortnumber{margin:6px 0 0 10px}.e-bigger .e-grid .e-emptyrow td,.e-bigger .e-grid .e-frozencontent table tr td:first-child:empty,.e-bigger .e-grid .e-movablecontent table tr td:first-child:empty,.e-bigger .e-grid .e-rowcell,.e-bigger .e-grid .e-summarycell,.e-bigger .e-grid:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-bigger .e-grid:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty,.e-grid.e-bigger .e-emptyrow td,.e-grid.e-bigger .e-frozencontent table tr td:first-child:empty,.e-grid.e-bigger .e-movablecontent table tr td:first-child:empty,.e-grid.e-bigger .e-rowcell,.e-grid.e-bigger .e-summarycell,.e-grid.e-bigger:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-grid.e-bigger:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty{line-height:27px}.e-bigger .e-grid .e-filterbarcell input,.e-grid.e-bigger .e-filterbarcell input{font-size:13px}.e-bigger .e-grid .e-groupdroparea,.e-grid.e-bigger .e-groupdroparea{font-size:19px;min-height:64px;padding:22px 24px}.e-bigger .e-grid .e-cloneproperties,.e-grid.e-bigger .e-cloneproperties{padding:4px 5px}.e-bigger .e-grid .e-cloneproperties.e-draganddrop,.e-grid.e-bigger .e-cloneproperties.e-draganddrop{padding:0}.e-bigger .e-grid .e-headerclone,.e-grid.e-bigger .e-headerclone{font-size:12px}.e-bigger .e-grid .e-groupdroparea.e-grouped,.e-grid.e-bigger .e-groupdroparea.e-grouped{padding:11px 0 12px}.e-bigger .e-grid .e-frozenheader table tr td.e-rowcell,.e-grid.e-bigger .e-frozenheader table tr td.e-rowcell{height:49px -6}.e-bigger .e-grid .e-frozencontent table tr td:first-child:empty,.e-bigger .e-grid .e-frozenhdrcont table tr td:first-child:empty,.e-bigger .e-grid .e-movablecontent table tr td:first-child:empty,.e-bigger .e-grid:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-bigger .e-grid:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty,.e-grid.e-bigger .e-frozencontent table tr td:first-child:empty,.e-grid.e-bigger .e-frozenhdrcont table tr td:first-child:empty,.e-grid.e-bigger .e-movablecontent table tr td:first-child:empty,.e-grid.e-bigger:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-grid.e-bigger:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty{height:49px}.e-bigger .e-grid.e-bigger .e-columnmenu,.e-grid.e-bigger.e-bigger .e-columnmenu{bottom:16px;margin:-18.5px -18px}.e-bigger .e-grid.e-device .e-columnmenu,.e-grid.e-bigger.e-device .e-columnmenu{margin:-18px}.e-bigger .e-grid .e-columnmenu,.e-grid.e-bigger .e-columnmenu{right:23px}.e-bigger .e-grid .e-groupheadercell,.e-bigger .e-grid .e-groupheadercell:hover,.e-grid.e-bigger .e-groupheadercell,.e-grid.e-bigger .e-groupheadercell:hover{border-radius:16px;height:32px;margin:4px 0 0 24px;padding:0 8px 0 12px;font-size:13px}.e-bigger .e-grid.e-device .e-groupheadercell,.e-bigger .e-grid .e-groupheadercell:hover,.e-grid.e-bigger.e-device .e-groupheadercell,.e-grid.e-bigger .e-groupheadercell:hover{padding:0 8px 0 12px}.e-bigger .e-grid .e-gdclone,.e-grid.e-bigger .e-gdclone{border-radius:17px;padding:6px}.e-bigger .e-grid .e-groupheadercell span,.e-grid.e-bigger .e-groupheadercell span{height:32px;line-height:32px;padding:0}.e-bigger .e-grid .e-groupheadercell .e-ungroupbutton,.e-grid.e-bigger .e-groupheadercell .e-ungroupbutton{font-size:16px}.e-bigger .e-grid .e-groupheadercell .e-grouptext,.e-grid.e-bigger .e-groupheadercell .e-grouptext{line-height:32px}.e-bigger .e-grid .e-row .e-input-focus .e-input.e-field,.e-bigger .e-grid .e-row .e-input-group .e-input.e-field,.e-grid.e-bigger .e-row .e-input-focus .e-input.e-field,.e-grid.e-bigger .e-row .e-input-group .e-input.e-field{font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:13px;padding-bottom:9px;padding-top:13px}.e-bigger .e-grid.e-device .e-row .e-input-focus .e-input.e-field,.e-bigger .e-grid.e-device .e-row .e-input-group .e-input.e-field,.e-grid.e-bigger.e-device .e-row .e-input-focus .e-input.e-field,.e-grid.e-bigger.e-device .e-row .e-input-group .e-input.e-field{padding-bottom:5px;padding-top:12px}.e-bigger .e-grid .e-row .e-input-group,.e-grid.e-bigger .e-row .e-input-group{margin-bottom:5px;vertical-align:middle}.e-bigger .e-grid.e-device .e-headercell,.e-grid.e-bigger.e-device .e-headercell{padding:0 21px}.e-bigger .e-grid.e-device .e-headercell:first-child,.e-grid.e-bigger.e-device .e-headercell:first-child{padding:0 12px 0 16px}.e-bigger .e-grid.e-device .e-headercell:last-child,.e-grid.e-bigger.e-device .e-headercell:last-child{padding:0 16px 0 12px}.e-bigger .e-grid.e-device .e-groupheadercell span,.e-grid.e-bigger.e-device .e-groupheadercell span{line-height:30px;padding:0}.e-bigger .e-grid.e-device .e-rowcell,.e-bigger .e-grid.e-device .e-summarycell,.e-grid.e-bigger.e-device .e-rowcell,.e-grid.e-bigger.e-device .e-summarycell{padding:8px 12px}.e-bigger .e-grid:not(.e-row-responsive).e-device .e-rowcell:first-child,.e-bigger .e-grid:not(.e-row-responsive).e-device .e-summarycell:first-child,.e-grid.e-bigger:not(.e-row-responsive).e-device .e-rowcell:first-child,.e-grid.e-bigger:not(.e-row-responsive).e-device .e-summarycell:first-child{padding:8px 12px 8px 16px}.e-bigger .e-grid:not(.e-row-responsive).e-device .e-rowcell:last-child,.e-bigger .e-grid:not(.e-row-responsive).e-device .e-summarycell:last-child,.e-grid.e-bigger:not(.e-row-responsive).e-device .e-rowcell:last-child,.e-grid.e-bigger:not(.e-row-responsive).e-device .e-summarycell:last-child{padding:8px 16px 8px 12px}.e-bigger .e-grid.e-device .e-filterbarcell,.e-grid.e-bigger.e-device .e-filterbarcell{padding:8px 12px}.e-bigger .e-grid.e-device .e-filterbarcell:first-child,.e-grid.e-bigger.e-device .e-filterbarcell:first-child{padding:8px 12px 8px 16px}.e-bigger .e-grid.e-device .e-filterbarcell:last-child,.e-grid.e-bigger.e-device .e-filterbarcell:last-child{padding:8px 16px 8px 12px}.e-bigger .e-grid.e-device .e-groupheadercell .e-ungroupbutton,.e-grid.e-bigger.e-device .e-groupheadercell .e-ungroupbutton{line-height:30px}.e-bigger .e-grid.e-device .e-editedbatchcell.e-rowcell,.e-bigger .e-grid.e-device .e-normaledit .e-rowcell,.e-grid.e-bigger.e-device .e-editedbatchcell.e-rowcell,.e-grid.e-bigger.e-device .e-normaledit .e-rowcell{padding-bottom:0;padding-top:0}.e-bigger .e-grid .e-addedrow .e-normaledit .e-unboundcell,.e-bigger .e-grid .e-editedrow .e-normaledit .e-unboundcell,.e-bigger .e-grid .e-unboundcell,.e-grid.e-bigger .e-addedrow .e-normaledit .e-unboundcell,.e-grid.e-bigger .e-editedrow .e-normaledit .e-unboundcell,.e-grid.e-bigger .e-unboundcell{padding-bottom:6px;padding-top:6px}.e-bigger .e-grid .e-grouptext,.e-grid.e-bigger .e-grouptext{margin-right:8px;width:76px}.e-bigger .e-grid.e-device .e-gridheader table th[rowspan],.e-bigger .e-grid .e-gridheader table th[rowspan],.e-grid.e-bigger.e-device .e-gridheader table th[rowspan],.e-grid.e-bigger .e-gridheader table th[rowspan]{padding-bottom:20px}.e-bigger .e-grid .e-groupsort,.e-bigger .e-grid .e-toggleungroup,.e-bigger .e-grid span.e-ungroupbutton,.e-grid.e-bigger .e-groupsort,.e-grid.e-bigger .e-toggleungroup,.e-grid.e-bigger span.e-ungroupbutton{margin-left:8px;margin-top:0}.e-bigger .e-grid span.e-ungroupbutton.e-icons,.e-grid.e-bigger span.e-ungroupbutton.e-icons{font-size:16px;margin-left:0;padding-top:0;margin-top:0;margin-right:0}.e-bigger .e-grid.e-device span.e-ungroupbutton.e-icons,.e-grid.e-bigger.e-device span.e-ungroupbutton.e-icons{margin-top:0}.e-bigger .e-grid span.e-groupsort.e-icons,.e-grid.e-bigger span.e-groupsort.e-icons{margin-right:0;margin-top:0}.e-bigger .e-grid.e-device span.e-groupsort.e-icons,.e-grid.e-bigger.e-device span.e-groupsort.e-icons{margin-top:0}.e-bigger .e-grid.e-rtl .e-groupheadercell,.e-bigger .e-grid.e-rtl .e-groupheadercell:hover,.e-grid.e-bigger.e-rtl .e-groupheadercell,.e-grid.e-bigger.e-rtl .e-groupheadercell:hover{margin:3px 24px 0 0;padding:0 12px 0 8px}.e-bigger .e-grid.e-rtl span.e-ungroupbutton.e-icons,.e-grid.e-bigger.e-rtl span.e-ungroupbutton.e-icons{margin-left:0;margin-right:6px;margin-top:0;padding-left:0}.e-bigger .e-grid .e-groupcaption,.e-grid.e-bigger .e-groupcaption{line-height:32px}.e-bigger .e-grid .e-ccdlg .e-dlg-content,.e-grid.e-bigger .e-ccdlg .e-dlg-content{margin:20px 0 0;padding:17px 24px 5px 12px}.e-bigger .e-grid .e-ccdlg .e-ccul-ele,.e-grid.e-bigger .e-ccdlg .e-ccul-ele{padding:0}.e-bigger .e-grid .e-ccdlg .e-cc-searchdiv,.e-grid.e-bigger .e-ccdlg .e-cc-searchdiv{padding-left:6px}.e-bigger .e-grid .e-ccdlg .e-checkbox-wrapper.e-control.e-keyboard,.e-grid.e-bigger .e-ccdlg .e-checkbox-wrapper.e-control.e-keyboard{padding-left:12px}.e-bigger .e-grid .e-ccdlg li.e-cclist,.e-grid.e-bigger .e-ccdlg li.e-cclist{padding:11px 0}.e-bigger .e-grid .e-ccdlg .e-toolbar .e-ccdiv,.e-grid.e-bigger .e-ccdlg .e-toolbar .e-ccdiv{margin-top:0}.e-bigger .e-grid .e-filterbarcell.e-frozen-right-border,.e-bigger .e-grid .e-headercell.e-frozen-right-border,.e-bigger .e-grid .e-rowcell.e-frozen-right-border,.e-grid.e-bigger .e-filterbarcell.e-frozen-right-border,.e-grid.e-bigger .e-headercell.e-frozen-right-border,.e-grid.e-bigger .e-rowcell.e-frozen-right-border{border-right:2px solid rgba(227,22,91,.6)}.e-bigger .e-grid .e-filterbarcell.e-frozen-left-border,.e-bigger .e-grid .e-headercell.e-frozen-left-border,.e-bigger .e-grid .e-rowcell.e-frozen-left-border,.e-grid.e-bigger .e-filterbarcell.e-frozen-left-border,.e-grid.e-bigger .e-headercell.e-frozen-left-border,.e-grid.e-bigger .e-rowcell.e-frozen-left-border{border-left:2px solid rgba(227,22,91,.6)}.e-bigger .e-grid .e-gridheader .e-filterbarcell.e-freezeline,.e-bigger .e-grid .e-rowcell.e-freezeline,.e-grid.e-bigger .e-gridheader .e-filterbarcell.e-freezeline,.e-grid.e-bigger .e-rowcell.e-freezeline{position:relative}.e-bigger .e-grid .e-gridheader .e-filterbarcell .e-frozen-left-cursor,.e-bigger .e-grid .e-gridheader .e-filterbarcell .e-frozen-right-cursor,.e-bigger .e-grid .e-gridheader .e-headercell .e-frozen-left-cursor,.e-bigger .e-grid .e-gridheader .e-headercell .e-frozen-right-cursor,.e-bigger .e-grid .e-rowcell .e-frozen-left-cursor,.e-bigger .e-grid .e-rowcell .e-frozen-right-cursor,.e-grid.e-bigger .e-gridheader .e-filterbarcell .e-frozen-left-cursor,.e-grid.e-bigger .e-gridheader .e-filterbarcell .e-frozen-right-cursor,.e-grid.e-bigger .e-gridheader .e-headercell .e-frozen-left-cursor,.e-grid.e-bigger .e-gridheader .e-headercell .e-frozen-right-cursor,.e-grid.e-bigger .e-rowcell .e-frozen-left-cursor,.e-grid.e-bigger .e-rowcell .e-frozen-right-cursor{cursor:move;height:100%;position:absolute;top:0;width:4px}.e-bigger .e-grid .e-gridheader .e-filterbarcell .e-frozen-left-cursor,.e-bigger .e-grid .e-gridheader .e-headercell .e-frozen-left-cursor,.e-bigger .e-grid .e-rowcell .e-frozen-left-cursor,.e-grid.e-bigger .e-gridheader .e-filterbarcell .e-frozen-left-cursor,.e-grid.e-bigger .e-gridheader .e-headercell .e-frozen-left-cursor,.e-grid.e-bigger .e-rowcell .e-frozen-left-cursor{right:0}.e-bigger .e-grid .e-gridheader .e-filterbarcell .e-frozen-right-cursor,.e-bigger .e-grid .e-gridheader .e-headercell .e-frozen-right-cursor,.e-bigger .e-grid .e-rowcell .e-frozen-right-cursor,.e-grid.e-bigger .e-gridheader .e-filterbarcell .e-frozen-right-cursor,.e-grid.e-bigger .e-gridheader .e-headercell .e-frozen-right-cursor,.e-grid.e-bigger .e-rowcell .e-frozen-right-cursor{left:0}.e-bigger .e-grid .e-gridheader .e-filterbarcell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-bigger .e-grid .e-gridheader .e-headercell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-bigger .e-grid .e-rowcell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-grid.e-bigger .e-gridheader .e-filterbarcell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-grid.e-bigger .e-gridheader .e-headercell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-grid.e-bigger .e-rowcell .e-frozen-left-cursor.e-frozen-resize-cursor{right:3px}.e-bigger .e-grid .e-gridheader .e-filterbarcell .e-frozen-right-cursor.e-frozen-resize-cursor:not(.e-frozen-default-cursor),.e-bigger .e-grid .e-gridheader .e-headercell .e-frozen-right-cursor.e-frozen-resize-cursor:not(.e-frozen-default-cursor),.e-grid.e-bigger .e-gridheader .e-filterbarcell .e-frozen-right-cursor.e-frozen-resize-cursor:not(.e-frozen-default-cursor),.e-grid.e-bigger .e-gridheader .e-headercell .e-frozen-right-cursor.e-frozen-resize-cursor:not(.e-frozen-default-cursor){left:3px}.e-bigger .e-grid .e-frozen-helper,.e-grid.e-bigger .e-frozen-helper{border-left:2px solid rgba(227,22,91,.6);cursor:move;position:absolute;z-index:2}.e-bigger .e-grid .e-content.e-freezeline-moving,.e-grid.e-bigger .e-content.e-freezeline-moving{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-grid{border-radius:0;border-style:none solid solid;border-width:1px;display:block;font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:13px;height:auto;position:relative}.e-grid .e-gridheader{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-grid .e-gridheader.e-sticky,.e-grid .e-groupdroparea.e-sticky,.e-grid .e-toolbar.e-sticky{position:sticky;z-index:10}.e-grid .e-ccdlg.e-sticky,.e-grid .e-gridheader.e-sticky .e-headercontent .e-reorderdownarrow,.e-grid .e-gridheader.e-sticky .e-headercontent .e-reorderuparrow{position:fixed;z-index:10}.e-grid .e-groupdroparea.e-sticky{opacity:1}.e-grid .e-gridcontent .e-lastrow-dragborder,.e-grid .e-gridheader .e-firstrow-dragborder,.e-grid.e-rtl .e-gridcontent .e-lastrow-dragborder,.e-grid.e-rtl .e-gridheader .e-firstrow-dragborder{bottom:0;background-color:#e3165b;height:2px;position:absolute}.e-grid .e-grid-relative{position:relative}.e-grid .e-dropitemscount{border:1px solid #fff;border-radius:17px;-webkit-box-sizing:content-box;box-sizing:content-box;font-size:13px;line-height:normal;margin-left:-8px;min-width:12px;padding:3px 7px 4px;position:absolute;text-align:center;top:-10px;z-index:5}.e-grid.e-rtl .e-dropitemscount{left:-6px!important}.e-grid.e-rtl .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon{padding:0;margin:4px 0 4px 6px}.e-grid.e-bothlines .e-cloneproperties.e-draganddrop .e-rowdragdrop,.e-grid.e-verticallines .e-cloneproperties.e-draganddrop .e-rowdragdrop{border-top:1px solid #e0e0e0;border-right:1px solid #e0e0e0;border-bottom:0}.e-grid .e-gridcontent .e-detailrowcollapse.e-dragborder,.e-grid .e-gridcontent .e-rowcell.e-dragborder,.e-grid .e-gridcontent .e-rowdragdrop.e-dragborder,.e-grid .e-gridcontent tr.e-row:first-child .e-rowcell.e-dragborder,.e-grid .e-gridheader .e-detailrowcollapse.e-dragborder,.e-grid .e-gridheader .e-rowcell.e-dragborder,.e-grid .e-gridheader .e-rowdragdrop.e-dragborder,.e-grid .e-gridheader tr.e-row:first-child .e-rowcell.e-dragborder,.e-grid.e-rtl .e-gridcontent .e-detailrowcollapse.e-dragborder,.e-grid.e-rtl .e-gridcontent .e-rowcell.e-dragborder,.e-grid.e-rtl .e-gridcontent .e-rowdragdrop.e-dragborder,.e-grid.e-rtl .e-gridcontent tr.e-row:first-child .e-rowcell.e-dragborder,.e-grid.e-rtl .e-gridheader .e-detailrowcollapse.e-dragborder,.e-grid.e-rtl .e-gridheader .e-rowcell.e-dragborder,.e-grid.e-rtl .e-gridheader .e-rowdragdrop.e-dragborder,.e-grid.e-rtl .e-gridheader tr.e-row:first-child .e-rowcell.e-dragborder{-webkit-box-shadow:0 2px 0 0 #e3165b;box-shadow:0 2px 0 0 #e3165b;position:relative;z-index:5}.e-grid .e-gridheader thead .e-icons:not(.e-check):not(.e-stop){font-size:10px}.e-grid .e-row .e-icon-rowdragicon:before{display:block;text-indent:10px;font-size:12px;font-weight:700;color:#000;opacity:.54}.e-grid .e-row .e-icon-rowdragmoveicon:before{font-size:12px;font-weight:700}.e-grid .e-row .e-icon-rowdragmoveicon{padding-left:10px}.e-grid .e-draganddrop .e-rowcell,.e-grid.e-rtl .e-draganddrop .e-rowcell{padding-left:6px;padding-right:6px}.e-grid .e-gridcontent .e-rowdragdrop,.e-grid .e-gridheader .e-rowdragdrop{border:solid #e0e0e0;border-width:1px 0 0}.e-grid .e-gridcontent .e-groupcaption.e-lastrowcell,.e-grid .e-gridcontent .e-indentcell.e-lastrowcell,.e-grid .e-gridcontent .e-recordpluscollapse.e-lastrowcell,.e-grid .e-gridcontent .e-rowdragdrop.e-lastrowcell{border-bottom-width:1px}.e-grid .e-cloneproperties.e-draganddrop .e-row .e-icon-rowdragicon:before{position:relative;left:-5px}.e-grid .e-icon-rowdragicon{font-size:10px;text-indent:12px}.e-grid .e-toolbar{border:0;border-top:1px solid #e0e0e0;border-radius:0}.e-grid .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon{padding:0;min-width:18px;margin-right:8px}.e-grid .e-toolbar .e-toolbar-item.e-search-wrapper .e-sicon.e-clear-icon:before{font-size:12px}.e-grid .e-toolbar-items .e-input-group-icon.e-icons.e-sicon:active:not(.e-clear-icon),.e-grid .e-toolbar-items .e-input-group-icon.e-icons.e-sicon:focus:not(.e-clear-icon),.e-grid .e-toolbar-items .e-input-group-icon.e-icons.e-sicon:hover:not(.e-clear-icon){background:none;-webkit-box-shadow:none;box-shadow:none}.e-grid .e-toolbar-items .e-input-group-icon.e-icons.e-sicon:not(.e-clear-icon){border:none}.e-grid .e-res-toolbar{border-bottom:1px solid #e0e0e0}.e-grid .e-res-toolbar .e-toolbar-items{min-height:0}.e-grid .e-res-toolbar .e-toolbar-items .e-search-icon:active,.e-grid .e-res-toolbar .e-toolbar-items .e-search-icon:focus,.e-grid .e-res-toolbar .e-toolbar-items .e-search-icon:hover,.e-grid .e-res-toolbar .e-toolbar-items .e-sicon.e-clear-icon:active,.e-grid .e-res-toolbar .e-toolbar-items .e-sicon.e-clear-icon:focus,.e-grid .e-res-toolbar .e-toolbar-items .e-sicon.e-clear-icon:hover,.e-grid .e-res-toolbar .e-toolbar-items .e-tbar-btn:active,.e-grid .e-res-toolbar .e-toolbar-items .e-tbar-btn:focus,.e-grid .e-res-toolbar .e-toolbar-items .e-tbar-btn:hover{background:none}.e-grid .e-res-toolbar .e-toolbar-items .e-icons{color:#000}.e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-left .e-toolbar-item .e-tbar-btn .e-resfilter-icon{font-size:22px}.e-grid .e-res-toolbar .e-toolbar-items .e-responsive-right{width:calc(100% - 50px)}.e-grid .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper .e-input-group:after,.e-grid .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper .e-input-group:before{background:none}.e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-right .e-search-wrapper{width:100%;padding-left:18px;padding-right:0}.e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-right .e-search-wrapper .e-search-icon{font-size:18px;margin-top:8px}.e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-right .e-search-wrapper .e-input-group{border:0;opacity:1;padding:0 9px 0 6px;width:100%}.e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-right .e-search-wrapper .e-input-group .e-input{margin-top:8px}.e-grid .e-res-toolbar .e-toolbar-items .e-toolbar-right .e-search-wrapper .e-input-group .e-search-icon{margin-top:14px;padding-left:0}.e-grid .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper{padding-left:0}.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper .e-sicon.e-clear-icon{margin:14px 8px 5px 0}.e-grid.e-bigger .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper .e-sicon.e-clear-icon:before{font-size:18px}.e-grid.e-rtl .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper{padding-left:26px}.e-grid.e-rtl .e-res-toolbar .e-toolbar-items .e-responsive-right .e-search-wrapper .e-sicon.e-clear-icon{margin:14px 0 5px 8px}.e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper{padding-bottom:6px;padding-top:1px}.e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search:focus{opacity:1}.e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search{margin-bottom:0;opacity:.6;width:230px}.e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search.e-input-focus{opacity:1}.e-grid .e-toolbar-items .e-toolbar-item.e-search-wrapper .e-search .e-search-icon{min-width:18px}.e-bigger .e-grid .e-group-animator .e-groupheadercell,.e-bigger .e-grid .e-group-animator .e-groupheadercell:hover{margin:15px 0;border-bottom-width:1px}.e-grid .e-groupdroparea.e-group-animate.e-grouped{height:54px}.e-bigger .e-grid .e-group-animate.e-groupdroparea .e-nextgroup{margin-top:15px}.e-grid .e-group-animator .e-groupheadercell,.e-grid .e-group-animator .e-groupheadercell:hover{margin:12px 0;border-bottom-width:1px}.e-grid .e-group-animator:last-child .e-nextgroup.e-icons.e-icon-next{display:none}.e-grid .e-groupdroparea.e-group-animate.e-grouped{overflow:hidden;padding:0;height:48px;border-bottom-width:0}.e-grid.e-rtl .e-group-animator{float:right}.e-grid.e-rtl .e-group-animate .e-groupheadercell,.e-grid.e-rtl .e-group-animate .e-groupheadercell:hover{margin-right:0;margin-left:0}.e-grid.e-rtl .e-group-animate.e-groupdroparea .e-nextgroup{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);margin-top:16px}.e-grid.e-rtl .e-group-animator:first-child .e-groupheadercell{margin:12px 16px 12px 0}.e-grid .e-group-animator:first-child .e-groupheadercell{margin:12px 0 12px 16px}.e-grid .e-group-animate.e-groupdroparea .e-nextgroup{margin-top:9px}.e-grid .e-groupdroparea.e-group-animate .e-drag.e-icon-drag{display:inline-block;height:24px;font-size:11px;line-height:25px;padding:0;vertical-align:middle}.e-grid .e-group-animator .e-icon-drag.e-icons{margin-left:0}.e-grid .e-groupdroparea.e-group-animate span.e-drag.e-icons.e-icon-drag{cursor:move}.e-grid .e-group-animate .e-drag.e-icon-drag:before{opacity:.7}.e-grid .e-group-animate span.e-nextgroup.e-icons.e-icon-next{display:inline-block;float:left;height:24px;line-height:32px;padding:0;vertical-align:middle}.e-grid .e-groupdroparea.e-grouped{padding:9px 0 10px}.e-grid.e-default .e-gridheader.e-stackedfilter .e-grouptopleftcell,.e-grid.e-default.e-horizontallines .e-gridheader.e-stackedfilter .e-grouptopleftcell{border-top:0}.e-grid.e-default .e-gridheader.e-stackedfilter tr:first-child th.e-grouptopleftcell,.e-grid.e-default.e-horizontallines .e-gridheader.e-stackedfilter tr:first-child th.e-grouptopleftcell{border-bottom:1px solid}.e-grid.e-default.e-hidelines .e-gridheader.e-stackedfilter tr:first-child th.e-grouptopleftcell,.e-grid.e-default.e-verticallines .e-gridheader.e-stackedfilter tr:first-child th.e-grouptopleftcell{border-bottom:0}.e-grid.e-default .e-gridheader.e-stackedfilter tr:last-child th.e-grouptopleftcell,.e-grid.e-default.e-horizontallines .e-gridheader.e-stackedfilter tr:last-child th.e-grouptopleftcell{border-top:1px solid}.e-grid.e-default.e-hidelines .e-gridheader.e-stackedfilter tr:last-child th.e-grouptopleftcell,.e-grid.e-default.e-verticallines .e-gridheader.e-stackedfilter tr:last-child th.e-grouptopleftcell{border-top:0}.e-grid.e-default .e-grouptopleftcell{border-top:1px solid}.e-grid.e-default .e-gridheader .e-headercell.e-firstheader,.e-grid.e-default.e-horizontallines .e-headercell.e-firstheader{border-left:1px solid}.e-grid.e-default.e-hidelines .e-headercell.e-firstheader{border-left:0}.e-grid.e-default.e-bothlines .e-grouptopleftcell,.e-grid.e-default.e-hidelines .e-detailrowcollapse,.e-grid.e-default.e-hidelines .e-detailrowexpand,.e-grid.e-default.e-hidelines .e-grouptopleftcell,.e-grid.e-default.e-hidelines .e-rowdragdrop,.e-grid.e-default.e-verticallines .e-detailrowcollapse,.e-grid.e-default.e-verticallines .e-detailrowexpand,.e-grid.e-default.e-verticallines .e-grouptopleftcell,.e-grid.e-default.e-verticallines .e-rowdragdrop{border-top-width:0}.e-grid.e-default.e-horizontallines .e-grouptopleftcell{border-top:1px solid}.e-grid .e-gridheader .e-headercell .e-rhandler,.e-grid .e-gridheader .e-headercell .e-rsuppress{height:100%;position:absolute;right:0;top:0;width:4px}.e-grid .e-gridheader .e-frozenheader .e-headercell:last-child .e-rhandler:last-of-type,.e-grid .e-gridheader .e-frozenheader .e-headercell:last-child .e-rsuppress:last-of-type{border-right:0}.e-grid .e-gridheader .e-frozenheader.e-frozen-right-header .e-headercell .e-rhandler,.e-grid .e-gridheader .e-frozenheader.e-frozen-right-header .e-headercell .e-rsuppress{left:0}.e-grid.e-device .e-gridheader .e-headercell .e-rhandler{width:14px}.e-grid.e-rtl .e-gridheader .e-headercell .e-rhandler,.e-grid.e-rtl .e-gridheader .e-headercell .e-rsuppress{left:0;right:auto}.e-grid.e-resize-lines .e-gridheader .e-frozen-right-header th.e-headercell .e-rhandler,.e-grid.e-resize-lines .e-gridheader th.e-headercell.e-lastcell .e-rhandler{border-right-width:0}.e-grid.e-rtl .e-gridheader .e-frozenheader.e-frozen-right-header .e-headercell .e-rhandler,.e-grid.e-rtl .e-gridheader .e-frozenheader.e-frozen-right-header .e-headercell .e-rsuppress{right:0}.e-grid.e-rtl.e-resize-lines .e-gridheader .e-frozen-right-header th.e-headercell .e-rhandler{border-right-width:1px;border-left-width:0}.e-grid .e-rhelper{position:absolute;width:1px}.e-grid .e-virtual-rhandler{z-index:1}.e-grid.e-device .e-ricon:before{border-bottom:6px solid rgba(0,0,0,0);border-right:6px solid;border-top:6px solid rgba(0,0,0,0);content:"";display:block;height:0;position:absolute;right:4px;top:4px;width:20px}.e-grid.e-device .e-ricon:after{border-bottom:6px solid rgba(0,0,0,0);border-left:6px solid;border-top:6px solid rgba(0,0,0,0);content:"";display:block;height:0;left:4px;position:absolute;top:4px;width:20px;z-index:3}.e-grid .e-gridheader .e-rcursor,.e-grid .e-gridheader .e-stackedheadercell.e-rcursor,.e-grid.e-rcursor{cursor:col-resize}.e-grid.e-editing .e-gridheader .e-rcursor{cursor:default}.e-grid .e-table{border-collapse:separate;table-layout:fixed;width:100%}.e-grid .e-tableborder{border-right:1px solid}.e-grid .e-virtualtable{will-change:transform;z-index:1}.e-grid .e-headercelldiv{border:0;display:block;font-size:12px;font-weight:500;height:29px;line-height:30px;margin:-7px;overflow:hidden;padding:0 .6em;text-align:left;text-transform:none;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-grid .e-headercelldiv.e-headerchkcelldiv{overflow:visible}.e-grid .e-gridheader .e-headercontent .e-centeralign .e-headercelldiv.e-headerchkcelldiv,.e-grid .e-gridheader .e-headercontent .e-rightalign .e-headercelldiv.e-headerchkcelldiv{padding:0 .6em}.e-grid .e-headercell,.e-grid .e-headercell.e-defaultcursor,.e-grid .e-headercell.e-stackedheadercell{cursor:default}.e-grid .e-headercell.e-mousepointer,.e-grid .e-headercell.e-stackedheadercell.e-mousepointer{cursor:pointer}.e-grid .e-gridheader .e-detailheadercell,.e-grid .e-gridheader .e-headercell{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-grid .e-gridcontent tr:first-child td,.e-grid .e-gridheader tr:first-child th{border-top:0}.e-grid .e-gridheader tr th:last-child.e-filterbarcell{padding-right:21px}.e-grid .e-gridheader tr th:last-child{padding-right:21px}.e-grid .e-gridheader tr th:first-child,.e-grid .e-gridheader tr th:first-child.e-filterbarcell{padding-left:21px}.e-grid .e-gridheader{border-bottom-style:solid;border-bottom-width:1px;border-top-style:solid;border-top-width:1px}.e-grid .e-frozenhdrcont{border-bottom-width:0}.e-grid .e-frozenhdrcont table tr:not(.e-editedrow):first-child td{border-top-style:solid;border-top-width:1px}.e-grid.e-bothlines .e-filterbarcell,.e-grid.e-bothlines .e-filterbarcelldisabled{border-width:1px 0 0 1px}.e-grid .e-detailheadercell,.e-grid .e-headercell{border-style:solid;border-width:0;font-size:12px;font-weight:500;height:42px;overflow:hidden;padding:0 21px;position:relative;text-align:left}.e-grid.e-device .e-headercell{padding:0 21px}.e-grid.e-device .e-headercell:first-child{padding:0 12px 0 16px}.e-grid.e-device .e-headercell:last-child{padding:0 16px 0 12px}.e-grid .e-rowcell{border-style:solid;border-width:1px 0 0;display:table-cell;font-size:13px;line-height:20px;overflow:hidden;padding:8px 21px;vertical-align:middle;white-space:nowrap;width:auto}.e-grid .e-frozencontent table .e-insertedrow td.e-rowcell,.e-grid .e-frozenheader table .e-insertedrow td.e-rowcell,.e-grid .e-movablecontent table .e-insertedrow td.e-rowcell,.e-grid .e-movableheader table .e-insertedrow td.e-rowcell,.e-grid .e-row.e-emptyrow,.e-grid:not(.e-grid-min-height) .e-gridcontent .e-content tr.e-insertedrow .e-rowcell:empty{height:37px}.e-grid .e-addedrow .e-input-group.e-control-wrapper input.e-input,.e-grid .e-addedrow .e-input-group input.e-input,.e-grid .e-editedrow .e-input-group.e-control-wrapper input.e-input,.e-grid .e-editedrow .e-input-group input.e-input{min-height:unset}.e-grid:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-grid:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty{height:36px}.e-grid.e-afenabled .e-frozencontent,.e-grid.e-afenabled .e-frozenheader,.e-grid.e-afenabled .e-headercontent,.e-grid.e-afenabled .e-movablecontent,.e-grid.e-afenabled .e-movableheader,.e-grid.e-enabledboxbdr .e-frozencontent,.e-grid.e-enabledboxbdr .e-frozenheader,.e-grid.e-enabledboxbdr .e-headercontent,.e-grid.e-enabledboxbdr .e-movablecontent,.e-grid.e-enabledboxbdr .e-movableheader{position:relative}.e-grid .e-rowcell:first-child,.e-grid .e-summarycell:first-child{padding-left:21px}.e-grid .e-rowcell:last-child,.e-grid .e-summarycell:last-child{padding-right:21px}.e-grid .e-addedrow .e-normaledit .e-unboundcell,.e-grid .e-editedrow .e-normaledit .e-unboundcell,.e-grid .e-unboundcell{padding-bottom:4px;padding-top:4px}.e-grid .e-unboundcelldiv>button{margin:0 3.5px}.e-grid .e-unboundcelldiv{margin:0 -3.5px}.e-grid .e-summarycell{border-style:solid;border-width:1px 0 0;font-size:13px;font-weight:500;height:auto;line-height:18px;padding:8px 21px;white-space:normal;word-wrap:break-word}.e-grid .e-summarycontent{display:-ms-flexbox;display:-webkit-box;display:flex}.e-grid .e-summarycontent .e-frozenfootercontent{float:left;width:-webkit-min-content;width:-moz-min-content;width:min-content}.e-grid .e-summarycontent .e-frozen-right-footercontent{float:right}.e-grid .e-summarycontent .e-frozen-right-footercontent .e-firstsummarycell{border-left:1px solid;border-color:#e0e0e0}.e-grid .e-summarycontent .e-movablefootercontent{height:inherit;overflow:hidden;-ms-flex:1;-webkit-box-flex:1;flex:1}.e-grid .e-summarycontent .e-detailindentcelltop,.e-grid .e-summarycontent .e-indentcell{border-width:1px 0 0}.e-grid.e-device .e-rowcell,.e-grid.e-device .e-summarycell{padding:8px 12px}.e-grid.e-device .e-rowcell:first-child,.e-grid.e-device .e-summarycell:first-child{padding:8px 12px 8px 16px}.e-grid.e-device .e-rowcell:last-child,.e-grid.e-device .e-summarycell:last-child{padding:8px 16px 8px 12px}.e-grid td.e-rowcell.e-checkbox{padding:6px 21px}.e-grid td.e-rowcell.e-checkbox input[type=checkbox]{margin-top:5px}.e-grid.e-default .e-detailrowcollapse.e-lastrowcell,.e-grid.e-default .e-rowcell.e-lastrowcell{border-bottom-width:1px}.e-grid.e-default .e-detailrow .e-lastrowcell{border-bottom:1px solid #e0e0e0}.e-grid.e-bothlines .e-rowcell.e-lastrowcell{border-bottom-width:1px}.e-grid.e-bothlines .e-rowcell{border-width:1px 0 0 1px}.e-grid.e-device .e-gridheader table th[rowspan],.e-grid .e-gridheader table th[rowspan]{padding-bottom:13px;vertical-align:bottom}.e-grid .e-emptyrow td{line-height:20px;padding:.7em}.e-grid.e-responsive .e-headercelldiv,.e-grid.e-responsive .e-rowcell{text-overflow:ellipsis;white-space:nowrap}.e-grid.e-responsive .e-headercelldiv.e-headerchkcelldiv,.e-grid.e-responsive .e-rowcell.e-gridchkbox,.e-grid.e-responsive .e-rowcell.e-gridchkbox-cell{text-overflow:clip}.e-grid.e-default .e-detailheadercell,.e-grid.e-default .e-headercell{border-width:0}.e-grid [aria-selected]+tr .e-detailindentcell{border-top-style:solid;border-top-width:1px}.e-grid.e-default.e-verticallines .e-detailheadercell,.e-grid.e-default.e-verticallines .e-headercell{border-width:0 0 0 1px}.e-grid.e-default.e-verticallines .e-headercell.e-stackedheadercell{border-bottom:1px solid}.e-grid.e-default .e-stackedheadercell{border-width:0 0 1px 1px}.e-grid.e-default.e-verticallines tr th:first-child:not(.e-firstcell){border-left-width:0}.e-grid.e-default.e-bothlines .e-detailheadercell,.e-grid.e-default.e-bothlines .e-headercell,.e-grid.e-default table th[rowspan]{border-width:0 0 0 1px}.e-grid tr th.e-firstcell{border-left-style:solid;border-left-width:1px}.e-grid.e-default tr :not(.e-rtl) th.e-headercell:first-child:not(.e-firstcell):not(.e-headercell.e-frozen-left-border),.e-grid.e-default tr td:first-child,.e-grid.e-default tr th.e-detailheadercell:first-child,.e-grid.e-default tr th.e-filterbarcell:first-child:not(.e-filterbarcell.e-frozen-left-border){border-left-width:0}.e-grid.e-default .e-gridheader th.e-firstcell.e-movablefirst{border-left-width:0}.e-grid .e-hide{display:none}.e-grid .e-gridcontent,.e-grid .e-gridfooter,.e-grid .e-gridheader,.e-grid .e-groupdroparea,.e-grid .e-headercontent,.e-grid .e-rowcell,.e-grid .e-summarycontent{overflow:hidden;vertical-align:middle}.e-grid .e-sortfilterdiv{float:right;height:10px;margin:-16px 10px;padding:3px;width:10px}.e-grid .e-gridheader .e-rightalign .e-sortfilterdiv{float:left;margin:-16px 5px}.e-grid .e-gridheader .e-rightalign .e-stackedheadercelldiv,.e-grid .e-gridheader .e-sortfilter .e-rightalign .e-headercelldiv{padding:0 .6em 0 1.9em}.e-grid .e-gridheader .e-sortfilter .e-fltr-icon .e-headercelldiv,.e-grid .e-gridheader .e-sortfilter .e-rightalign.e-fltr-icon .e-headercelldiv{margin:-7px 15px -7px -7px}.e-grid .e-gridheader .e-headercell .e-headercelldiv.e-headerchkcelldiv,.e-grid .e-gridheader .e-sortfilter .e-headercelldiv,.e-grid .e-gridheader .e-stackedheadercelldiv{padding:0 1.8em 0 .6em}.e-grid.e-rtl .e-gridheader .e-headercell .e-headercelldiv.e-headerchkcelldiv{padding:0 .6em 0 .55em}.e-grid .e-filtermenudiv{float:right;margin:-18px -7px;padding:6px;text-align:right}.e-grid .e-filtermenudiv:hover{cursor:pointer}.e-grid.e-print-grid-layout .e-filterbar,.e-grid.e-print-grid-layout .e-grouptopleftcell,.e-grid.e-print-grid-layout .e-icons:not(.e-frame),.e-grid.e-print-grid-layout .e-indentcell,.e-grid.e-print-grid-layout .e-pager,.e-grid.e-print-grid-layout .e-recordpluscollapse,.e-grid.e-print-grid-layout .e-recordplusexpand{display:none}.e-grid.e-print-grid-layout .e-indentcell.e-detailindentcelltop{display:table-cell}.e-grid.e-print-grid-layout .e-content{overflow-y:hidden}.e-grid.e-print-grid-layout .e-grouptext{width:auto}.e-grid.e-print-grid-layout .e-detailcell{padding:.8em .6em}.e-grid.e-print-grid{left:-1000px;top:-1000px}.e-grid .e-flmenu-valuediv{padding:24px 0 0}.e-grid .e-flbldcontent{padding:18px 18px 0}.e-grid .e-flblbtn{width:110px}.e-grid .e-sortnumber{border-radius:65%;display:inline-block;float:right;font-size:9px;height:15px;line-height:16px;margin:7px 5px 0 2px;text-align:center;width:15px}.e-grid .e-gridheader .e-fltr-icon .e-sortnumber{margin:7px 5px 0 2px}.e-grid .e-gridheader .e-rightalign.e-fltr-icon .e-sortnumber{float:left;margin:7px 2px 0 10px}.e-grid .e-gridheader .e-rightalign .e-sortnumber{float:left;margin:7px 2px 0 5px}.e-grid .e-gridheader .e-fltr-icon .e-sortfilterdiv{margin:-16px 24px}.e-grid .e-gridheader .e-rightalign.e-fltr-icon .e-sortfilterdiv{margin:-16px 5px}.e-grid.e-wrap .e-gridheader .e-rightalign .e-sortnumber{margin:1px 2px 0 15px}.e-grid.e-wrap .e-gridheader .e-sortnumber{margin:2px -5px 0 2px}.e-grid.e-wrap .e-gridheader .e-sortfilterdiv{margin:-9px 10px}.e-grid .e-frozenheader .e-editcell.e-normaledit,.e-grid .e-movableheader .e-editcell.e-normaledit{border-top-color:rgba(0,0,0,0)}.e-grid .e-columnmenu{position:absolute;right:23px;float:right;margin:-18.5px -18px;padding:6px}.e-grid.e-wrap .e-columnmenu{line-height:3px}.e-grid.e-rtl .e-columnmenu{left:5px;right:auto;margin:-18px -18px -18px 3px}.e-grid.e-wrap.e-rtl .e-columnmenu{line-height:3px}.e-grid [class^=e-]{-webkit-box-sizing:border-box;box-sizing:border-box}.e-grid .e-rowdragdropcell{border-style:solid;border-width:1px 0 0}.e-grid .e-detailrowcollapse,.e-grid .e-detailrowexpand{border-style:solid;border-width:1px 0 0;cursor:pointer}.e-grid .e-detailindentcell{border-right-style:solid;border-right-width:1px}.e-grid .e-detailcell{border-top-style:solid;border-top-width:1px;padding:.3em;font-weight:400;text-align:left}.e-grid th.e-detailcell .e-gridpager,.e-grid th.e-detailcell .e-rowcell{text-align:left}.e-grid.e-rtl th.e-detailcell .e-gridpager,.e-grid.e-rtl th.e-detailcell .e-rowcell,.e-grid th.e-detailcell .e-rtl .e-gridpager,.e-grid th.e-detailcell .e-rtl .e-rowcell{text-align:right}.e-grid.e-verticallines .e-filterbarcell,.e-grid.e-verticallines .e-rowcell{border-width:0 0 0 1px}.e-grid.e-hidelines .e-detailheadercell,.e-grid.e-hidelines .e-filterbarcell,.e-grid.e-hidelines .e-headercell,.e-grid.e-hidelines .e-rowcell,.e-grid.e-hidelines tr th.e-firstcell,.e-grid.e-horizontallines .e-detailheadercell,.e-grid.e-horizontallines .e-headercell{border-width:0}.e-grid.e-horizontallines .e-headercell.e-stackedheadercell{border-width:0 0 1px 1px}.e-grid.e-horizontallines .e-filterbarcell,.e-grid.e-horizontallines .e-rowcell{border-width:1px 0 0}.e-grid.e-hidelines .e-rowcell.e-lastrowcell,.e-grid.e-horizontallines .e-rowcell.e-lastrowcell,.e-grid.e-verticallines .e-rowcell.e-lastrowcell{border-bottom-width:1px}.e-grid.e-bothlines .e-detailrowvisible,.e-grid.e-hidelines .e-detailrowvisible,.e-grid.e-horizontallines .e-detailrowvisible,.e-grid.e-verticallines .e-detailrowvisible{border-left-width:0}.e-grid.e-hidelines .e-firstchildrow .e-detailrowcollapse,.e-grid.e-hidelines .e-firstchildrow .e-detailrowexpand,.e-grid.e-hidelines .e-firstchildrow .e-rowcell,.e-grid.e-verticallines .e-firstchildrow .e-detailrowcollapse,.e-grid.e-verticallines .e-firstchildrow .e-detailrowexpand,.e-grid.e-verticallines .e-firstchildrow .e-rowcell{border-top-width:1px}.e-grid .e-filterbarcell .e-icons:before{display:block;margin:0 auto}.e-grid .e-filterbarcell .e-filtertext::-webkit-search-cancel-button,.e-grid .e-search input::-webkit-search-cancel-button{display:none}.e-grid .e-filterbarcell .e-filtertext::-ms-clear,.e-grid .e-search input::-ms-clear{display:none}.e-grid .e-filterbarcell,.e-grid .e-filterbarcelldisabled{border-collapse:collapse;border-style:solid;border-width:1px 0 0;cursor:default;height:42px;overflow:hidden;padding:0 21px;vertical-align:middle}.e-grid .e-rowdragheader{border:solid #e0e0e0;border-width:1px 0 0}.e-grid .e-filterbarcell input{border-radius:0;border-style:solid;border-width:0 0 2px;font-size:13px;font-weight:400;height:26px;padding-right:24px;text-indent:0;width:100%}.e-grid.e-device .e-filterbarcell{padding:8px 12px}.e-grid.e-device .e-filterbarcell:first-child{padding:8px 12px 8px 16px}.e-grid.e-device .e-filterbarcell:last-child{padding:8px 16px 8px 12px}.e-grid .e-searchclear{float:right;position:relative}.e-grid.e-rtl .e-searchclear{float:left;position:relative}.e-grid .e-checkboxlist{height:200px;margin-top:5px;min-height:160px;overflow-y:auto}.e-grid .e-checkfltrnmdiv{height:60px;padding:23px;text-align:center}.e-grid .e-checkboxlist>span{padding-left:9px}.e-grid .e-chk-hidden{-moz-appearance:none;height:1px;opacity:0;width:1px}.e-grid .e-checkselect,.e-grid .e-checkselectall{margin:0;opacity:0;position:absolute;width:0}.e-grid .e-rowcell .e-checkbox-wrapper,.e-grid .e-rowcell .e-css.e-checkbox-wrapper{-webkit-user-select:auto;height:20px;line-height:20px;position:relative;top:0;-ms-user-select:auto;-moz-user-select:auto;user-select:auto}.e-grid .e-dialog.e-checkboxfilter,.e-grid .e-dialog.e-flmenu{min-width:250px}.e-grid .e-dialog.e-checkboxfilter .e-dlg-content,.e-grid .e-dialog.e-flmenu .e-dlg-content{border-radius:0}.e-grid .e-dialog.e-checkboxfilter{min-height:322px}.e-grid .e-checkboxfilter .e-searchbox{display:block}.e-grid .e-checkboxfilter .e-dlg-content,.e-grid .e-checkboxfilter .e-ftrchk,.e-grid .e-checkboxfilter .e-searchbox{padding-left:9px}.e-grid .e-ftrchk{padding-bottom:9px;padding-top:9px}.e-grid .e-filterdiv,.e-grid .e-fltrtempdiv{padding:0;position:relative;text-align:center;width:100%}.e-grid .e-pager{border-bottom:rgba(0,0,0,0);border-left:rgba(0,0,0,0);border-right:rgba(0,0,0,0)}.e-grid .e-gridpopup{font-weight:400;position:absolute;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;z-index:99999}.e-grid .e-gridpopup .e-content{border-radius:4px;border-style:solid;border-width:1px;font-size:14px;padding:4px}.e-grid .e-footerpadding .e-lastsummarycell{border-left:none;border-right:1px solid}.e-grid.e-rtl .e-footerpadding tr.e-summaryrow td.e-lastsummarycell:last-child{border-right:none;border-left:1px solid #e0e0e0}.e-grid .e-footerpadding{padding-left:0;padding-right:14px}.e-grid.e-rtl .e-footerpadding{padding-left:14px;padding-right:0}.e-grid .e-gridpopup span{border:1px solid rgba(0,0,0,0);cursor:pointer;display:inline-block;height:26px;padding:4px;width:26px}.e-grid .e-gridpopup .e-tail:after,.e-grid .e-gridpopup .e-tail:before{border:10px solid rgba(0,0,0,0);content:"";height:0;left:8px;position:absolute;width:0}.e-grid .e-gridpopup .e-downtail:after{top:34px}.e-grid .e-gridpopup .e-uptail:after{top:-17px}.e-grid .e-gridpopup .e-uptail:before{top:-19px}.e-grid .e-gridpopup .e-rowselect,.e-grid .e-gridpopup .e-sortdirect{line-height:18px;text-indent:7%}.e-grid .e-cloneproperties{border-style:solid;border-width:1px;-webkit-box-shadow:0 0;box-shadow:0 0;font-size:12px;font-weight:500;opacity:1;overflow:hidden;padding:4px 5px;text-align:center;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;z-index:10}.e-grid .e-cloneproperties.e-draganddrop{border-spacing:0;font-size:12px;font-weight:400}.e-grid .e-cloneproperties.e-draganddrop table{border-spacing:0}.e-grid .e-defaultcur{cursor:default}.e-grid .e-notallowedcur{cursor:not-allowed}.e-grid .e-grabcur{cursor:-webkit-grabbing;cursor:grabbing}.e-grid .e-cloneproperties.e-headerclone table{border-spacing:0}.e-grid .e-headerclone{border-radius:12px;font-size:12px;font-weight:500;line-height:29px}.e-grid .e-draganddrop{border-width:0 1px 1px;font-weight:400;padding:0}.e-grid .e-draganddrop .e-rowcell{opacity:.95}.e-grid.e-default .e-gridheader th.e-firstcell,.e-grid.e-default .e-gridheader th.e-laststackcell{border-left-style:solid;border-left-width:1px}.e-grid.e-bothlines .e-gridheader th.e-stackedheadercell{border-bottom-style:solid;border-bottom-width:1px;border-left-style:solid;border-left-width:1px}.e-grid.e-default.e-hidelines .e-gridheader th.e-firstcell{border-left-width:0}.e-grid .e-gridheader .e-headercontent .e-reorderdownarrow,.e-grid .e-gridheader .e-headercontent .e-reorderdownarrow-virtual,.e-grid .e-gridheader .e-headercontent .e-reorderuparrow,.e-grid .e-gridheader .e-headercontent .e-reorderuparrow-virtual{font-size:8px;margin-left:-1px;margin-top:-4.5px;position:absolute;z-index:10}.e-grid .e-gridheader .e-headercontent .e-reorderuparrow{margin-top:-4.5px}.e-grid .e-gridheader .e-headercontent .e-reorderdownarrow{margin-top:4.5px}.e-grid td.e-active{font-weight:400}.e-grid:not(.e-row-responsive) .e-gridcontent tr.e-row:first-child td.e-cellselectionbackground,.e-grid td.e-cellselectionbackground{font-weight:400}.e-grid .e-groupdroparea{height:auto;line-height:normal;min-height:48px}.e-grid .e-griddragarea{border:1px solid;opacity:.6;position:absolute}.e-grid .e-gdclone{border-radius:13px;padding:2px}.e-grid .e-content{-webkit-overflow-scrolling:touch;overflow-x:auto;overflow-y:scroll;position:relative}.e-grid.e-rowdrag .e-columnheader,.e-grid.e-rowdrag .e-groupdroparea,.e-grid.e-ungroupdrag .e-columnheader,.e-grid.e-ungroupdrag .e-groupdroparea{cursor:not-allowed}.e-grid .e-groupdroparea,.e-grid.e-rowdrag .e-gridcontent,.e-grid.e-ungroupdrag .e-gridcontent{cursor:default}.e-grid .e-groupdroparea{border-style:solid none;border-width:1px 0 0;border-top-width:1px;font-size:14px;font-weight:lighter;opacity:.87;padding:14px 24px;text-align:left;text-indent:1pt;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;width:100%}.e-grid .e-grouptext{display:inline-block;margin-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:57px}.e-grid .e-grid-icon{float:left}.e-grid .e-groupheadercell,.e-grid .e-groupheadercell:hover{border:0;border-collapse:collapse;border-radius:12px;cursor:pointer;font-size:13px;font-weight:400;height:24px;margin:3px 0 0 18px;overflow:hidden;padding:0 6px 0 9px;vertical-align:middle}.e-grid .e-groupheadercell:hover{border:0;padding:0 6px 0 9px}.e-grid .e-groupheadercell span{display:inline-block;float:left;height:24px;line-height:26px;padding:0;vertical-align:middle}.e-grid .e-groupheadercell .e-grouptext{line-height:24px}.e-grid .e-groupheadercell .e-ungroupbutton{font-size:13px;line-height:26px}.e-grid.e-device .e-groupheadercell span{line-height:26px}.e-grid.e-device .e-groupheadercell .e-ungroupbutton{line-height:25px}.e-grid.e-device .e-groupheadercell .e-groupsort{margin-top:0}.e-grid .e-groupheadercell .e-cancel{padding-right:10px}.e-grid .e-groupheadercell .e-icons:before{display:inline}.e-grid .e-groupsort,.e-grid .e-toggleungroup,.e-grid .e-ungroupbutton{font-size:10px;margin-left:6px}.e-grid .e-groupsort{margin-right:0;margin-top:0}.e-grid span.e-ungroupbutton.e-icons{margin-left:6px;margin-top:0;padding-top:0;padding-right:0}.e-grid .e-grptogglebtn{padding:7px}.e-grid .e-icon-gdownarrow{font-size:11px;padding:14px 9px 12px;text-decoration:none}.e-grid .e-icon-grightarrow{font-size:10px;padding:14px 9px 14px 10px;text-decoration:none}.e-grid .e-recordplusexpand{padding-top:5px}.e-grid .e-indentcell{border-style:solid;border-width:0 1px 0 0}.e-grid .e-indentcell.e-detailindentcelltop,.e-grid .e-indentcell.e-indentcelltop{border-width:1px 0 0}.e-grid .e-recordpluscollapse,.e-grid .e-recordplusexpand{border-style:solid;border-width:1px 0 0;cursor:pointer}.e-grid .e-disablepointer{cursor:default}.e-grid .e-groupcaption{border-style:solid;border-width:1px 0 0;display:table-cell;font-size:12px;line-height:20px;overflow:hidden;padding:.7em;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;width:auto}.e-grid .e-virtualtable .e-groupcaption{line-height:20px;padding:8px 21px}.e-grid .e-autofill{border:1px solid;height:8px;position:absolute;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;width:8px}.e-grid .e-headercontent{border-style:solid;border-width:0}.e-grid .e-stackedheadercell{border-width:0 0 1px 1px;white-space:nowrap}.e-grid .e-noselect{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-grid .e-toolbar .e-tbar-btn.e-btn .e-btn-icon.e-icons.e-columnchooser-btn{font-size:9px}.e-grid .e-toolbar .e-toolbar-items .e-toolbar-right .e-cc-toolbar .e-tbar-btn .e-columnchooser-btn{margin-top:1px}.e-grid .e-toolbar-item.e-cc.e-ccdiv.e-cc-toolbar{margin-top:0;padding:3px 0 0}.e-grid .e-edit-dialog .e-dlg-content{position:relative}.e-grid .e-edit-dialog{min-height:350px}.e-grid .e-griderror label{display:inline!important}.e-grid .e-tooltip-wrap.e-griderror{z-index:1000}.e-grid .e-tooltip-wrap.e-griderror .e-arrow-tip.e-tip-top{left:44%}.e-grid .e-normaledit .e-rowcell{padding-bottom:0;padding-top:0}.e-grid.e-device .e-normaledit .e-rowcell{padding-bottom:4px;padding-top:4px}.e-grid .e-gridcontent .e-normaledit .e-rowcell.e-lastrowadded{border-bottom:1px solid #e0e0e0;border-top:0 #e0e0e0}.e-grid .e-normaledit{border-top:0;padding:0}.e-grid .e-gridcontent .e-normaledit .e-rowcell{border-top:1px solid}.e-grid:not(.e-row-responsive) .e-gridcontent tr.e-row:first-child .e-rowcell{border-top:0}.e-grid.e-device .e-editedbatchcell.e-rowcell,.e-grid.e-device .e-gridcontent .e-normaledit .e-rowcell,.e-grid .e-editedbatchcell.e-rowcell{padding-bottom:0;padding-top:0}.e-grid .e-editedbatchcell,.e-grid td.e-boolcell{padding-left:21px;padding-right:21px}.e-grid td.e-boolcell input{margin:3px 3px 3px 4px}.e-grid td.e-boolcell.e-rowcell{padding-bottom:5px;padding-top:5px}.e-grid .e-dialog .e-gridform .e-rowcell{border:0;padding:0}.e-grid .e-row .e-input-focus .e-input.e-field,.e-grid .e-row .e-input-group .e-input.e-field{font-family:Roboto,Segoe UI,GeezaPro,"DejaVu Serif","sans-serif",-apple-system,BlinkMacSystemFont;font-size:13px;padding-bottom:6px;padding-top:9px}.e-grid .e-row .e-input-group{margin-bottom:2px;margin-top:0;vertical-align:middle}.e-grid .e-defaultcell.e-ralign,.e-grid .e-defaultcell.e-ralign:focus,.e-grid .e-editedrow .e-defaultcell.e-ralign,.e-grid .e-editedrow .e-defaultcell.e-ralign:focus{padding-right:10px}.e-grid .e-dlg-content .e-defaultcell.e-ralign,.e-grid .e-dlg-content .e-defaultcell.e-ralign:focus{padding-right:0}.e-grid .e-hiddenrow{display:none}.e-grid .e-columnchooserdiv{float:right;margin:-12px}.e-grid .e-ccdlg .e-dlg-content{margin:20px 0 0;overflow:visible;padding:16px 18px 13px 9px}.e-grid .e-ccdlg .e-checkbox-wrapper.e-control.e-keyboard{padding-left:9px}.e-grid .e-ccdlg .e-main-div{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.e-grid .e-ccdlg .e-ccul-ele{margin:13px 0;padding:0}.e-grid .e-ccdlg li.e-cclist{padding:9px 0}.e-grid .e-ccdlg .e-checkbox-wrapper .e-frame{margin-left:0}.e-grid .e-ccdlg label.e-cc{margin:0}.e-grid .e-ccdlg .e-footer-content{border-style:solid;border-width:1px 0 0}.e-grid .e-ccdlg .e-cc-contentdiv{height:196px;overflow-y:auto}.e-grid .e-ccdlg .e-cc-searchdiv{border-style:solid;border-width:0 0 2px;left:4px;opacity:.6;position:absolute;right:0;top:-46px}.e-grid .e-ccdlg .e-cc-searchdiv span.e-ccsearch-icon.e-icons{float:right;opacity:.6;padding:5px 2px}.e-grid .e-ccdlg .e-cc-searchdiv span.e-ccsearch-icon.e-cc-cancel{font-size:11px;padding:5px 2px 6px}.e-grid .e-ccdlg .e-cc-searchdiv.e-input-focus,.e-grid .e-ccdlg .e-cc-searchdiv.e-input-focus span.e-ccsearch-icon.e-icons{opacity:1}.e-grid .e-ccdlg .e-innerdiv.e-ccnmdiv{height:60px;padding:23px;text-align:center}.e-grid .e-ccdlg .e-checkbox-wrapper .e-label{text-overflow:ellipsis}.e-grid .e-ccdlg .e-cc-chbox{margin:3px;vertical-align:middle}.e-grid .e-ccdlg .e-cc-lab-name{padding:7px;text-overflow:ellipsis;vertical-align:middle}.e-grid .e-ccdlg .e-cc.e-input,.e-grid .e-ccdlg .e-cc.e-input:focus{border:0;padding-bottom:8px;padding-left:4px;padding-top:4px}.e-grid .e-checkboxfiltertext{width:150px;word-break:normal}.e-grid .e-frozenhdrcont .e-frozenheader>.e-table,.e-grid .e-frozenhdrcont .e-headercontent .e-virtualtable>.e-table,.e-grid .e-frozenhdrcont .e-headercontent>.e-table,.e-grid .e-frozenhdrcont .e-movableheader>.e-table{border-bottom:2px solid}.e-grid .e-frozencontent .e-virtualtable>.e-table,.e-grid .e-frozencontent>.e-table,.e-grid .e-frozenheader .e-virtualtable>.e-table,.e-grid .e-frozenheader>.e-table{border-left:0;border-right:2px solid}.e-grid .e-frozencontent.e-frozen-right-content>.e-table,.e-grid .e-frozenheader.e-frozen-right-header>.e-table,.e-grid .e-gridheader .e-filterbarcell .e-frozen-default-cursor,.e-grid .e-gridheader .e-headercell .e-frozen-default-cursor,.e-grid .e-rowcell .e-frozen-default-cursor{border-left:2px solid;border-right:0}.e-grid .e-frozenheader{float:left;width:-webkit-min-content;width:-moz-min-content;width:min-content}.e-grid .e-frozenheader.e-frozen-right-header{float:right}.e-grid.e-rtl .e-frozencontent .e-virtualtable>.e-table,.e-grid.e-rtl .e-frozencontent>.e-table,.e-grid.e-rtl .e-frozenheader .e-virtualtable>.e-table,.e-grid.e-rtl .e-frozenheader>.e-table{border-left:2px solid;border-right:0}.e-grid.e-rtl .e-frozencontent.e-frozen-right-content>.e-table,.e-grid.e-rtl .e-frozenheader.e-frozen-right-header>.e-table{border-left:0;border-right:2px solid}.e-grid.e-rtl .e-frozenheader{float:right}.e-grid.e-rtl .e-frozenheader.e-frozen-right-header{float:left}.e-grid.e-rtl .e-frozencontent{float:right}.e-grid.e-rtl .e-frozen-right-content{float:left}.e-grid.e-rtl .e-frozenfootercontent{float:right}.e-grid.e-rtl .e-frozen-right-footercontent{float:left}.e-grid .e-movableheader{overflow:hidden}.e-grid .e-frozenhdrcont{-ms-touch-action:none}.e-grid .e-frozencontent{-ms-touch-action:none;border-bottom-width:1px;float:left;width:-webkit-min-content;width:-moz-min-content;width:min-content}.e-grid .e-frozen-right-content{float:right}.e-grid .e-movablecontent{-ms-overflow-style:none;-ms-flex:1;-webkit-box-flex:1;flex:1;overflow-x:auto;overflow-y:hidden}.e-grid:not(.sf-grid) .e-movablecontent::-webkit-scrollbar{display:none}.e-grid .e-content.e-mac-safari::-webkit-scrollbar{width:7px}.e-grid .e-content.e-mac-safari::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.5);border-radius:4px}.e-grid .e-frozenscrollbar{border-top:1px solid #e0e0e0}.e-grid .e-movablescrollbar{-ms-flex:1;-webkit-box-flex:1;flex:1;overflow:hidden;overflow-x:scroll}.e-grid .e-columnchooser:before{line-height:1.9}.e-grid .e-toolbar .e-ccdiv .e-columnchooser.e-cctbn-icon{font-size:15px;vertical-align:middle}.e-grid .e-toolbar .e-ccdiv{margin-top:-1px;padding:0 10px}.e-grid.e-rtl .e-tableborder{border-left:1px solid;border-right:0}.e-grid.e-rtl .e-checkboxfilter .e-dlg-content{padding-left:18px;padding-right:9px}.e-grid.e-rtl .e-checkboxfilter .e-ftrchk,.e-grid.e-rtl .e-checkboxfilter .e-searchbox{padding-left:0;padding-right:9px}.e-grid.e-rtl .e-detailheadercell,.e-grid.e-rtl .e-headercell{border-width:0;text-align:right}.e-grid.e-rtl .e-detailheadercell.e-fltr-icon .e-headercelldiv,.e-grid.e-rtl .e-detailheadercell.e-fltr-icon .e-headercelldiv.e-headerchkcelldiv,.e-grid.e-rtl .e-headercell.e-fltr-icon .e-headercelldiv,.e-grid.e-rtl .e-headercell.e-fltr-icon .e-headercelldiv.e-headerchkcelldiv{padding:0 .6em 0 1.8em;text-align:right}.e-grid.e-rtl .e-detailheadercell.e-fltr-icon .e-headercelldiv.e-headerchkcelldiv .e-sortnumber,.e-grid.e-rtl .e-detailheadercell.e-fltr-icon .e-headercelldiv .e-sortnumber,.e-grid.e-rtl .e-headercell.e-fltr-icon .e-headercelldiv.e-headerchkcelldiv .e-sortnumber,.e-grid.e-rtl .e-headercell.e-fltr-icon .e-headercelldiv .e-sortnumber{float:left;margin:7px 0 0 5px}.e-grid.e-rtl .e-detailheadercell .e-headercelldiv,.e-grid.e-rtl .e-detailheadercell .e-headercelldiv.e-headerchkcelldiv,.e-grid.e-rtl .e-headercell .e-headercelldiv,.e-grid.e-rtl .e-headercell .e-headercelldiv.e-headerchkcelldiv{padding:0 .6em 0 1.8em;text-align:right}.e-grid.e-rtl .e-detailheadercell .e-headercelldiv.e-headerchkcelldiv .e-sortnumber,.e-grid.e-rtl .e-detailheadercell .e-headercelldiv .e-sortnumber,.e-grid.e-rtl .e-headercell .e-headercelldiv.e-headerchkcelldiv .e-sortnumber,.e-grid.e-rtl .e-headercell .e-headercelldiv .e-sortnumber{float:left;margin:7px 0 0 5px}.e-grid.e-rtl .e-detailheadercell .e-filterbarcell input,.e-grid.e-rtl .e-headercell .e-filterbarcell input{border-width:0 0 2px}.e-grid.e-rtl .e-detailheadercell .e-sortfilterdiv,.e-grid.e-rtl .e-headercell .e-sortfilterdiv{float:left;margin:-16px 10px}.e-grid.e-rtl .e-detailheadercell.e-leftalign.e-headercell.e-fltr-icon .e-headercelldiv,.e-grid.e-rtl .e-headercell.e-leftalign.e-headercell.e-fltr-icon .e-headercelldiv{margin-left:10px}.e-grid.e-rtl .e-detailheadercell.e-leftalign.e-headercell.e-fltr-icon .e-headercelldiv .e-sortnumber,.e-grid.e-rtl .e-headercell.e-leftalign.e-headercell.e-fltr-icon .e-headercelldiv .e-sortnumber{margin:6px -4px 0 0}.e-grid.e-rtl .e-detailheadercell.e-leftalign.e-headercell.e-fltr-icon .e-filtermenudiv,.e-grid.e-rtl .e-headercell.e-leftalign.e-headercell.e-fltr-icon .e-filtermenudiv{margin-left:-5px}.e-grid.e-rtl .e-detailheadercell.e-leftalign .e-sortfilterdiv,.e-grid.e-rtl .e-headercell.e-leftalign .e-sortfilterdiv{float:right;margin:-16px 3px}.e-grid.e-rtl .e-detailheadercell.e-leftalign .e-headercelldiv,.e-grid.e-rtl .e-headercell.e-leftalign .e-headercelldiv{padding:0 25px 0 .7em}.e-grid.e-rtl .e-detailheadercell.e-leftalign .e-headercelldiv .e-sortnumber,.e-grid.e-rtl .e-headercell.e-leftalign .e-headercelldiv .e-sortnumber{float:right;margin:6px 2px 0 0}.e-grid.e-rtl .e-detailheadercell.e-fltr-icon.e-rightalign .e-sortnumber,.e-grid.e-rtl .e-detailheadercell.e-rightalign .e-sortnumber,.e-grid.e-rtl .e-headercell.e-fltr-icon.e-rightalign .e-sortnumber,.e-grid.e-rtl .e-headercell.e-rightalign .e-sortnumber{float:left;margin:7px 0 0 5px}.e-grid.e-rtl .e-rowcell:first-child,.e-grid.e-rtl .e-summarycell:first-child{padding-right:21px}.e-grid.e-rtl .e-rowcell:last-child,.e-grid.e-rtl .e-summarycell:last-child{padding-left:21px}.e-grid.e-rtl.e-wrap .e-gridheader .e-rightalign .e-sortnumber,.e-grid.e-rtl.e-wrap .e-gridheader .e-sortnumber{margin:3px 5px 0 2px}.e-grid.e-rtl.e-wrap .e-gridheader .e-sortfilterdiv{margin:-17px 4px}.e-grid.e-rtl.e-wrap .e-gridheader .e-rightalign .e-sortfilterdiv{margin:-17px 5px}.e-grid.e-rtl .e-gridheader .e-fltr-icon .e-sortfilterdiv,.e-grid.e-rtl .e-gridheader .e-rightalign.e-fltr-icon .e-sortfilterdiv{margin:-16px 0 0 11px}.e-grid.e-rtl .e-gridheader .e-sortfilter .e-rightalign.e-fltr-icon .e-headercelldiv{margin:-7px}.e-grid.e-rtl .e-columnheader.e-wrap .e-rightalign.e-fltr-icon .e-headercelldiv,.e-grid.e-rtl.e-wrap .e-columnheader .e-rightalign.e-fltr-icon .e-headercelldiv{height:auto;margin-bottom:2px;margin-top:0}.e-grid.e-rtl .e-gridheader .e-sortfilter .e-fltr-icon .e-headercelldiv{margin:-7px}.e-grid.e-rtl.e-bothlines .e-grouptopleftcell,.e-grid.e-rtl.e-hidelines .e-grouptopleftcell,.e-grid.e-rtl.e-verticallines .e-grouptopleftcell{border-top:0}.e-grid.e-rtl .e-grouptopleftcell{border-top:1px solid}.e-grid.e-rtl .e-groupheadercell span.e-grouptext{margin-left:3px;margin-right:0}.e-grid.e-rtl .e-groupheadercell span{float:right;padding:0}.e-grid.e-rtl.e-horizontallines .e-grouptopleftcell{border-top:1px solid}.e-grid.e-rtl .e-filterbarcell,.e-grid.e-rtl .e-filterbarcelldisabled,.e-grid.e-rtl .e-rowcell{border-width:1px 0 0}.e-grid.e-rtl .e-lastrowcell{border-width:1px 1px 1px 0}.e-grid.e-rtl .e-gridheader .e-rightalign .e-sortfilterdiv{margin:-16px 10px}.e-grid.e-rtl .e-cloneproperties{border-width:1px 1px 3px}.e-grid.e-rtl tr td:first-child,.e-grid.e-rtl tr th:first-child{border-left-width:0}.e-grid.e-rtl.e-default.e-bothlines tr td:first-child:not(.e-summarycell),.e-grid.e-rtl.e-default.e-bothlines tr th:first-child{border-left-width:1px}.e-grid.e-rtl.e-default.e-bothlines tr td:first-child.e-detailrowcollapse,.e-grid.e-rtl.e-default.e-bothlines tr td:first-child.e-detailrowexpand{border-left-width:0}.e-grid.e-rtl.e-default tr td:last-child,.e-grid.e-rtl.e-default tr th:last-child{border-left:0}.e-grid.e-rtl.e-default.e-verticallines tr th:last-child{border-left:1px solid}.e-grid.e-rtl.e-default .e-gridheader tr th:last-child{padding-left:21px;padding-right:21px}.e-grid.e-rtl.e-default .e-gridheader tr th:first-child{padding-left:21px;padding-right:21px}.e-grid.e-rtl.e-default .e-detailheadercell,.e-grid.e-rtl.e-default th:first-child .e-grid.e-rtl.e-default .e-headercell{border-width:0}.e-grid.e-rtl.e-default .e-rowcell{border-width:1px 0 0}.e-grid.e-rtl.e-default.e-verticallines .e-detailheadercell,.e-grid.e-rtl.e-default.e-verticallines .e-filterbarcell,.e-grid.e-rtl.e-default.e-verticallines .e-gridheader th.e-firstcell,.e-grid.e-rtl.e-default.e-verticallines .e-headercell,.e-grid.e-rtl.e-default.e-verticallines .e-rowcell{border-width:0 0 0 1px}.e-grid.e-rtl.e-default.e-verticallines tr th:first-child:not(.e-firstcell){border-left-width:1px}.e-grid.e-rtl.e-default.e-horizontallines .e-stackedheadercell,.e-grid.e-rtl.e-default .e-stackedheadercell{border-width:0 1px 1px 0}.e-grid.e-rtl.e-default .e-gridheader th.e-firstcell,.e-grid.e-rtl.e-default.e-horizontallines .e-gridheader th.e-firstcell{border-left-width:0;border-right-width:1px}.e-grid.e-rtl.e-default.e-bothlines .e-gridheader th.e-firstcell{border-left-width:1px;border-right-width:0}.e-grid.e-rtl.e-default .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-horizontallines .e-headercell.e-firstheader{border-left:0}.e-grid.e-rtl.e-default.e-hidelines .e-gridheader th.e-firstcell{border-left:0;border-right:0}.e-grid.e-rtl.e-default .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-horizontallines .e-gridheader .e-headercell.e-firstheader{border-right:1px solid}.e-grid.e-rtl.e-default.e-verticallines .e-gridheader .e-headercell.e-firstheader{border-right:0}.e-grid.e-rtl.e-default.e-verticallines .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-verticallines .e-gridheader th.e-grouptopleftcell.e-lastgrouptopleftcell{border-left:1px solid}.e-grid.e-rtl.e-default.e-verticallines .e-headercell.e-stackedheadercell{border-bottom:1px solid}.e-grid.e-rtl.e-default.e-bothlines .e-detailcell,.e-grid.e-rtl.e-default .e-detailcell{border-right-style:solid;border-right-width:1px;text-align:right}.e-grid.e-rtl .e-cc-searchdiv span.e-ccsearch-icon.e-icons{float:left}.e-grid.e-rtl .e-groupsort,.e-grid.e-rtl .e-toggleungroup,.e-grid.e-rtl .e-ungroupbutton{margin-left:0;margin-right:6px}.e-grid.e-rtl span.e-ungroupbutton.e-icons{margin-left:0;margin-right:6px;padding-top:0}.e-grid.e-rtl.e-default.e-bothlines .e-detailheadercell,.e-grid.e-rtl.e-default.e-bothlines .e-headercell{border-width:0 0 0 1px}.e-grid.e-rtl.e-default.e-bothlines .e-cloneproperties.e-draganddrop td.e-rowdragdrop,.e-grid.e-rtl.e-default.e-bothlines .e-dragheadercell,.e-grid.e-rtl.e-default.e-bothlines .e-rowdragheader,.e-grid.e-rtl.e-default.e-verticallines .e-cloneproperties.e-draganddrop td.e-rowdragdrop{border-left:1px solid #e0e0e0;padding-left:3px}.e-grid.e-rtl .e-cloneproperties.e-draganddrop .e-row .e-icon-rowdragicon:before{left:4px;position:relative}.e-grid.e-rtl.e-default table th[rowspan]{border-width:0 1px 0 0}.e-grid.e-rtl.e-default.e-bothlines .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-bothlines .e-gridheader th.e-grouptopleftcell.e-lastgrouptopleftcell{border-left:1px solid;border-right:0}.e-grid.e-rtl.e-bothlines .e-gridheader th.e-stackedheadercell{border-bottom-style:solid;border-bottom-width:1px}.e-grid.e-rtl.e-bothlines .e-filterbarcell,.e-grid.e-rtl.e-bothlines .e-filterbarcelldisabled,.e-grid.e-rtl.e-bothlines .e-rowcell,.e-grid.e-rtl.e-bothlines .e-rowcell.e-lastrowcell,.e-grid.e-rtl.e-verticallines .e-filterbarcell,.e-grid.e-rtl.e-verticallines .e-rowcell{border-width:1px 0 0 1px}.e-grid.e-rtl.e-hidelines .e-detailheadercell,.e-grid.e-rtl.e-hidelines .e-filterbarcell,.e-grid.e-rtl.e-hidelines .e-headercell,.e-grid.e-rtl.e-hidelines .e-rowcell{border-width:0}.e-grid.e-rtl.e-horizontallines .e-filterbarcell,.e-grid.e-rtl.e-horizontallines .e-rowcell{border-width:1px 0 0}.e-grid.e-rtl.e-hidelines .e-rowcell.e-lastrowcell,.e-grid.e-rtl.e-horizontallines .e-rowcell.e-lastrowcell,.e-grid.e-rtl.e-verticallines .e-rowcell.e-lastrowcell{border-bottom-width:1px}.e-grid.e-rtl.e-hidelines .e-firstchildrow .e-rowcell,.e-grid.e-rtl.e-verticallines .e-firstchildrow .e-rowcell{border-top-width:1px}.e-grid.e-rtl .e-groupheadercell .e-icons:before{display:inline-block}.e-grid.e-rtl .e-groupheadercell .e-cancel{padding-left:23px;padding-right:0;padding-top:2px}.e-grid.e-rtl .e-groupheadercell,.e-grid.e-rtl .e-groupheadercell:hover{margin-left:10px;margin-right:18px;padding:0 9px 0 6px;float:right}.e-grid.e-rtl .e-groupdroparea{text-align:right}.e-grid.e-rtl .e-ungroupbutton{float:left}.e-grid.e-rtl tr:not(.e-summaryrow) td.e-indentcell{border-style:solid;border-width:0 0 0 1px}.e-grid.e-rtl .e-defaultcell.e-ralign,.e-grid.e-rtl .e-defaultcell.e-ralign:focus,.e-grid.e-rtl .e-editedrow .e-defaultcell.e-ralign:focus,.e-grid.e-rtl .e-row .e-input.e-defaultcell.e-ralign{padding-left:10px}.e-grid.e-rtl .e-detailindentcell{border-left-style:solid;border-left-width:1px;border-right-width:0}.e-grid.e-rtl .e-filtermenudiv{float:left;margin:-18px 0 -18px -11px;padding:6px}.e-grid.e-wrap .e-columnheader .e-headercell.e-fltr-icon .e-headercelldiv,.e-grid.e-wrap .e-columnheader .e-headercelldiv,.e-grid.e-wrap .e-columnheader .e-stackedheadercelldiv,.e-grid.e-wrap .e-rowcell{height:Auto;line-height:18px;overflow-wrap:break-word;text-overflow:clip;white-space:normal;word-wrap:break-word}.e-grid.e-wrap .e-stackedheader .e-columnheader .e-headercelldiv,.e-grid.e-wrap .e-stackedheader .e-columnheader .e-stackedheadercelldiv{max-height:36px}.e-grid .e-columnheader.e-wrap .e-headercell.e-fltr-icon .e-headercelldiv,.e-grid .e-columnheader.e-wrap .e-headercelldiv,.e-grid.e-wrap .e-columnheader .e-headercell.e-fltr-icon .e-headercelldiv,.e-grid.e-wrap .e-columnheader .e-headercelldiv{margin-bottom:2px;margin-top:0}.e-grid .e-columnheader.e-wrap .e-filtermenudiv,.e-grid .e-columnheader.e-wrap .e-sortfilterdiv .e-filtermenudiv,.e-grid.e-wrap .e-columnheader .e-filtermenudiv,.e-grid.e-wrap .e-columnheader .e-sortfilterdiv .e-filtermenudiv{line-height:3px}.e-grid .e-columnheader.e-wrap .e-headercell.e-fltr-icon .e-headercelldiv,.e-grid .e-columnheader.e-wrap .e-headercelldiv,.e-grid .e-columnheader.e-wrap .e-stackedheadercelldiv,.e-grid .e-frozenhdrcont.e-wrap .e-rowcell,.e-grid .e-gridcontent.e-wrap .e-rowcell{height:Auto;line-height:18px;overflow-wrap:break-word;text-overflow:clip;white-space:normal;word-wrap:break-word}.e-grid .e-stackedheadercelldiv{overflow:hidden;text-overflow:ellipsis}.e-grid .e-columnheader.e-wrap .e-sortfilterdiv,.e-grid.e-wrap .e-columnheader .e-sortfilterdiv{margin:-18px 10px}.e-grid .e-columnheader.e-wrap .e-rightalign .e-sortfilterdiv,.e-grid.e-wrap .e-columnheader .e-rightalign .e-sortfilterdiv{margin:-18px 5px}.e-grid .e-columnheader.e-wrap .e-fltr-icon .e-sortfilterdiv,.e-grid.e-wrap .e-columnheader .e-fltr-icon .e-sortfilterdiv{margin:-20px 18px}.e-grid .e-columnheader.e-wrap .e-fltr-icon.e-rightalign .e-sortfilterdiv,.e-grid.e-wrap .e-columnheader .e-fltr-icon.e-rightalign .e-sortfilterdiv{margin:-20px 14px}.e-grid .e-columnheader.e-wrap .e-icon-group:before,.e-grid.e-wrap .e-columnheader .e-icon-group:before{display:inline-block}.e-grid.e-responsive .e-gridclip .e-headercelldiv,.e-grid.e-responsive .e-gridclip .e-stackedheadercelldiv,.e-grid.e-responsive .e-rowcell.e-gridclip{text-overflow:clip}.e-grid .e-clipboard{cursor:default;height:1px;left:-1000px;overflow:hidden;position:fixed;resize:none;top:-1000px;width:1px}.e-grid.e-resize-lines.e-rtl th.e-headercell.e-firstcell,.e-grid.e-resize-lines.e-rtl th.e-headercell.e-stackedheadercell,.e-grid.e-resize-lines th.e-headercell.e-firstcell,.e-grid.e-resize-lines th.e-headercell.e-stackedheadercell{border-left:0;border-right:0;border-top:0}.e-grid.e-resize-lines.e-rtl tr.e-columnheader th:last-child.e-stackedheadercell .e-rhandler.e-rcursor :not(.e-laststackcell),.e-grid.e-resize-lines tr.e-columnheader th:last-child.e-stackedheadercell .e-rhandler.e-rcursor :not(.e-laststackcell){border-right:0}.e-grid.e-resize-lines.e-default table th[rowspan],.e-grid.e-resize-lines.e-rtl.e-default table th[rowspan]{border-left:0}.e-grid.e-resize-lines.e-rtl tr.e-columnheader th.e-lastcell .e-rhandler.e-rcursor,.e-grid.e-resize-lines.e-rtl tr.e-columnheader th.e-laststackcell .e-rhandler.e-rcursor,.e-grid.e-resize-lines.e-rtl tr.e-columnheader th:last-child.e-stackedheadercell .e-rhandler.e-rcursor{border-left:0}.e-grid.e-resize-lines.e-rtl.e-default table th[rowspan]{border-right:0}.e-grid .e-mask{display:inline-block;height:10px;width:80%}.e-grid .e-mask.e-mask-group-intent{margin-left:7px;width:16px}.e-grid .e-mask.e-mask-detail-intent{width:16px}.e-grid .e-mask.e-mask-checkbox-intent{margin-left:3px;margin-right:16px;width:20px}.e-grid .e-mask.e-mask-checkbox-filter-intent{width:13px}.e-grid .e-mask.e-mask-checkbox-filter-span-intent{margin-left:8px}.e-grid .e-mask.e-mask-drag-intent{margin-left:12px;width:12px}.e-grid.sf-grid span.e-ungroupbutton.e-icons{margin-left:6px}.e-grid.sf-grid .e-filterbarcell.e-frozen-right-border,.e-grid.sf-grid .e-headercell.e-frozen-right-border,.e-grid.sf-grid .e-rowcell.e-frozen-right-border{border-right:2px solid rgba(227,22,91,.6)}.e-grid.sf-grid .e-filterbarcell.e-frozen-left-border,.e-grid.sf-grid .e-headercell.e-frozen-left-border,.e-grid.sf-grid .e-rowcell.e-frozen-left-border{border-left:2px solid rgba(227,22,91,.6)}.e-grid.sf-grid .e-gridheader .e-filterbarcell.e-freezeline,.e-grid.sf-grid .e-rowcell.e-freezeline{position:relative}.e-grid.sf-grid .e-gridheader .e-filterbarcell .e-frozen-left-cursor,.e-grid.sf-grid .e-gridheader .e-filterbarcell .e-frozen-right-cursor,.e-grid.sf-grid .e-gridheader .e-headercell .e-frozen-left-cursor,.e-grid.sf-grid .e-gridheader .e-headercell .e-frozen-right-cursor,.e-grid.sf-grid .e-rowcell .e-frozen-left-cursor,.e-grid.sf-grid .e-rowcell .e-frozen-right-cursor{cursor:move;height:100%;position:absolute;top:0;width:4px}.e-grid.sf-grid .e-gridheader .e-filterbarcell .e-frozen-left-cursor,.e-grid.sf-grid .e-gridheader .e-headercell .e-frozen-left-cursor,.e-grid.sf-grid .e-rowcell .e-frozen-left-cursor{right:0}.e-grid.sf-grid .e-gridheader .e-filterbarcell .e-frozen-right-cursor,.e-grid.sf-grid .e-gridheader .e-headercell .e-frozen-right-cursor,.e-grid.sf-grid .e-rowcell .e-frozen-right-cursor{left:0}.e-grid.sf-grid .e-gridheader .e-filterbarcell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-grid.sf-grid .e-gridheader .e-headercell .e-frozen-left-cursor.e-frozen-resize-cursor,.e-grid.sf-grid .e-rowcell .e-frozen-left-cursor.e-frozen-resize-cursor{right:3px}.e-grid.sf-grid .e-gridheader .e-filterbarcell .e-frozen-right-cursor.e-frozen-resize-cursor:not(.e-frozen-default-cursor),.e-grid.sf-grid .e-gridheader .e-headercell .e-frozen-right-cursor.e-frozen-resize-cursor:not(.e-frozen-default-cursor){left:3px}.e-grid.sf-grid .e-frozen-helper{border-left:2px solid rgba(227,22,91,.6);cursor:move;position:absolute;z-index:2}.e-grid.sf-grid .e-content.e-freezeline-moving{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.e-grid.sf-grid .e-gridheader .e-headercontent .e-reorderuparrow,.e-grid.sf-grid .e-gridheader .e-headercontent .e-reorderuparrow-virtual{margin-top:1px}.e-grid.sf-grid .e-gridheader .e-headercontent .e-reorderdownarrow,.e-grid.sf-grid .e-gridheader .e-headercontent .e-reorderdownarrow-virtual{margin-top:-1px}.e-grid.sf-grid .e-masked-cell.e-rowcell .e-virtualcell{background-color:rgba(0,0,0,.1);display:inline-block;height:10px;width:80%}.e-grid.sf-grid .e-movablecontent{height:inherit;overflow-x:auto;scrollbar-width:none}.e-grid.sf-grid .e-movablecontent::-webkit-scrollbar{display:none}.e-grid.sf-grid .e-frozencontent{border-bottom-style:solid;height:inherit}.e-grid.sf-grid .e-gridcontent .e-content,.e-grid.sf-grid .e-gridcontent .e-content .e-movablecontent{overflow-y:auto}.e-grid.sf-grid .e-gridcontent .e-content.e-yscroll{overflow-y:scroll}.e-grid.sf-grid .e-gridcontent .e-content .e-movablecontent.e-noscroll,.e-grid.sf-grid .e-gridcontent .e-content .e-movablecontent.e-yscroll,.e-grid.sf-grid .e-gridcontent .e-content.e-noscroll{overflow-y:hidden}.e-grid.sf-grid .e-label.e-choosercheck,.e-grid.sf-grid .e-label.e-fltrcheck{width:0}.e-grid.sf-grid .e-cc-contentdiv .e-choosercheck,.e-grid.sf-grid .e-checkboxlist .e-fltrcheck{white-space:nowrap}.e-grid.sf-grid .e-filterdiv .e-multiselect.e-input-group:not(.e-rtl),.e-grid.sf-grid .e-fltrtempdiv .e-multiselect.e-input-group:not(.e-rtl){text-align:left}.e-bigger.e-grid .e-gridheader .e-headercontent .e-reorderdownarrow,.e-bigger .e-grid .e-gridheader .e-headercontent .e-reorderdownarrow,.e-bigger.e-grid .e-gridheader .e-headercontent .e-reorderuparrow,.e-bigger .e-grid .e-gridheader .e-headercontent .e-reorderuparrow{font-size:8px}.e-bigger.e-grid .e-gridheader thead .e-icons,.e-bigger .e-grid .e-gridheader thead .e-icons{font-size:16px}.e-bigger.e-grid .e-ccdlg .e-cc-searchdiv,.e-bigger .e-grid .e-ccdlg .e-cc-searchdiv{padding-left:0;padding-right:6px}.e-bigger.e-grid .e-columnmenu,.e-bigger .e-grid .e-columnmenu{margin:-18.5px -18px}.e-bigger.e-grid.e-rtl .e-columnmenu,.e-bigger .e-grid.e-rtl .e-columnmenu,.e-bigger.e-grid.e-rtl.e-device .e-columnmenu,.e-bigger .e-grid.e-rtl.e-device .e-columnmenu{margin:-19px -18px -18px 3px}.e-bigger.e-grid.e-device.e-rtl .e-groupheadercell span,.e-bigger .e-grid.e-device.e-rtl .e-groupheadercell span,.e-bigger.e-grid.e-rtl .e-groupheadercell span,.e-bigger .e-grid.e-rtl .e-groupheadercell span{padding:0}.e-grid-min-height .e-icon-gdownarrow,.e-grid-min-height .e-icon-grightarrow,.e-grid-min-height .e-rowcell{line-height:0;padding-bottom:0;padding-top:0}.e-grid-min-height .e-gridheader .e-detailheadercell,.e-grid-min-height .e-gridheader .e-headercell,.e-grid-min-height .e-gridheader .e-headercell .e-headercelldiv{height:auto}.e-grid-min-height .e-gridcontent .e-groupcaption{line-height:normal;padding:0 .7em}.e-grid-min-height .e-summarycell{line-height:normal;padding:0 8px}.e-grid-min-height .e-grid-height .e-rowcell{line-height:20px;padding:8px 21px}.e-grid-min-height .e-grid-height .e-gridheader .e-detailheadercell,.e-grid-min-height .e-grid-height .e-gridheader .e-headercell,.e-grid-min-height .e-grid-height .e-gridheader .e-headercell .e-headercelldiv{height:29px}.e-grid-min-height .e-grid-height .e-gridcontent .e-groupcaption{line-height:20px;padding:.7em}.e-grid-min-height .e-grid-height .e-summarycell{line-height:18px;padding:8px 21px}.e-device.e-grid-min-height .e-grid-height .e-rowcell{padding:8px 12px}.e-device.e-grid-min-height .e-grid-height .e-rowcell:first-child{padding:8px 12px 8px 16px}.e-device.e-grid-min-height .e-grid-height .e-rowcell:last-child{padding:8px 16px 8px 12px}.e-device.e-grid-min-height .e-rowcell,.e-device.e-grid-min-height .e-rowcell:first-child,.e-device.e-grid-min-height .e-rowcell:last-child{padding-bottom:0;padding-top:0}.e-bigger .e-grid.e-grid-min-height .e-grid-height .e-rowcell{line-height:27px;padding:11px 28px}.e-bigger .e-grid.e-grid-min-height .e-grid-height .e-rowcell:first-child{line-height:28px;padding-left:28px}.e-bigger .e-grid.e-grid-min-height .e-grid-height .e-rowcell:last-child{line-height:28px;padding-right:28px}.e-bigger .e-grid.e-grid-min-height .e-rowcell,.e-bigger .e-grid.e-grid-min-height .e-rowcell:first-child,.e-bigger .e-grid.e-grid-min-height .e-rowcell:last-child{line-height:0;padding-bottom:0;padding-top:0}.e-bigger .e-wrap.e-grid-min-height .e-grid-height .e-rowcell{line-height:18px}.e-bigger .e-wrap.e-grid-min-height .e-grid-height .e-frozencontent table tr td:first-child:empty,.e-bigger .e-wrap.e-grid-min-height .e-grid-height .e-frozenhdrcont table tr td:first-child:empty,.e-bigger .e-wrap.e-grid-min-height .e-grid-height .e-movablecontent table tr td:first-child:empty,.e-bigger .e-wrap.e-grid-min-height .e-grid-height:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-bigger .e-wrap.e-grid-min-height .e-grid-height:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty{height:49px}.e-bigger .e-wrap.e-grid-min-height .e-rowcell{line-height:18px}.e-bigger .e-wrap.e-grid-min-height .e-frozencontent table tr td:first-child:empty,.e-bigger .e-wrap.e-grid-min-height .e-frozenhdrcont table tr td:first-child:empty,.e-bigger .e-wrap.e-grid-min-height .e-movablecontent table tr td:first-child:empty,.e-bigger .e-wrap.e-grid-min-height:not(.e-grid-min-height) .e-gridcontent tr.e-row .e-rowcell:empty,.e-bigger .e-wrap.e-grid-min-height:not(.e-grid-min-height) .e-gridcontent tr td:not(.e-indentcell):first-child:empty{height:18px}.e-rtl .e-grid .e-detailheadercell,.e-rtl .e-grid .e-headercell,.e-rtl .e-grid .e-headercelldiv,.e-rtl .e-grid .e-headercelldiv.e-headerchkcelldiv{text-align:right}.e-edit-dialog .e-gridform .e-table{border-collapse:separate;border-spacing:11px;width:100%}.e-edit-dialog .e-dlg-content{position:relative}.e-bigger.e-grid.e-row-responsive .e-toolbar .e-tbar-btn:active,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-tbar-btn:active,.e-bigger.e-grid.e-row-responsive .e-toolbar .e-tbar-btn:focus,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-tbar-btn:focus,.e-bigger.e-grid.e-row-responsive .e-toolbar .e-tbar-btn:hover,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-tbar-btn:hover{background:none}.e-bigger.e-grid.e-row-responsive .e-toolbar .e-tbar-btn:active .e-icons,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-tbar-btn:active .e-icons,.e-bigger.e-grid.e-row-responsive .e-toolbar .e-tbar-btn:focus .e-icons,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-tbar-btn:focus .e-icons,.e-bigger.e-grid.e-row-responsive .e-toolbar .e-tbar-btn:hover .e-icons,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-tbar-btn:hover .e-icons{padding-bottom:0}.e-bigger.e-grid.e-row-responsive .e-toolbar .e-search-icon,.e-bigger .e-grid.e-row-responsive .e-toolbar .e-search-icon{background:none}.e-bigger.e-grid.e-row-responsive .e-responsive-header,.e-bigger .e-grid.e-row-responsive .e-responsive-header{border-top:1px solid #e0e0e0}.e-bigger.e-grid.e-row-responsive .e-gridcontent td:before,.e-bigger .e-grid.e-row-responsive .e-gridcontent td:before,.e-bigger.e-grid.e-row-responsive .e-summarycontent td:before,.e-bigger .e-grid.e-row-responsive .e-summarycontent td:before{content:attr(data-cell);font-weight:500;left:13px;padding-right:10px;position:absolute;top:6px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:45%}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-verticalwrap td:before,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-verticalwrap td:before,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-verticalwrap td:before,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-verticalwrap td:before{line-height:18px;white-space:normal;word-wrap:break-word}.e-bigger.e-grid.e-row-responsive .e-gridcontent td[data-cell],.e-bigger .e-grid.e-row-responsive .e-gridcontent td[data-cell],.e-bigger.e-grid.e-row-responsive .e-summarycontent td[data-cell],.e-bigger .e-grid.e-row-responsive .e-summarycontent td[data-cell]{padding-bottom:5px;padding-left:55%;padding-top:5px;position:relative}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-input,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-input,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-input,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-input{display:block}.e-bigger.e-grid.e-row-responsive .e-gridcontent td,.e-bigger .e-grid.e-row-responsive .e-gridcontent td,.e-bigger.e-grid.e-row-responsive .e-summarycontent td,.e-bigger .e-grid.e-row-responsive .e-summarycontent td{border:0}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-row,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-row,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-row,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-row{border-bottom:1px solid #e0e0e0}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-normaledit .e-rowcell,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-normaledit .e-rowcell,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-normaledit .e-rowcell,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-normaledit .e-rowcell{height:auto;padding-left:1%;padding-right:1%}.e-bigger.e-grid.e-row-responsive .e-gridcontent td.e-rowcell,.e-bigger .e-grid.e-row-responsive .e-gridcontent td.e-rowcell,.e-bigger.e-grid.e-row-responsive .e-summarycontent td.e-rowcell,.e-bigger .e-grid.e-row-responsive .e-summarycontent td.e-rowcell{border-bottom:0;border-bottom-color:#e0e0e0;height:auto}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-emptyrow td.e-lastrowcell,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-emptyrow td.e-lastrowcell,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-emptyrow td.e-lastrowcell,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-emptyrow td.e-lastrowcell{border-bottom:0}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-normaledit :not(.e-responsive-editcell).e-rowcell,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-normaledit :not(.e-responsive-editcell).e-rowcell,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-normaledit :not(.e-responsive-editcell).e-rowcell,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-normaledit :not(.e-responsive-editcell).e-rowcell{border-top-width:0}.e-bigger.e-grid.e-row-responsive .e-gridcontent .e-normaledit .e-rowcell:before,.e-bigger .e-grid.e-row-responsive .e-gridcontent .e-normaledit .e-rowcell:before,.e-bigger.e-grid.e-row-responsive .e-summarycontent .e-normaledit .e-rowcell:before,.e-bigger .e-grid.e-row-responsive .e-summarycontent .e-normaledit .e-rowcell:before{bottom:6px;position:static}.e-bigger.e-grid.e-row-responsive .e-table,.e-bigger .e-grid.e-row-responsive .e-table{display:block}.e-bigger.e-grid.e-row-responsive .e-table tbody,.e-bigger .e-grid.e-row-responsive .e-table tbody,.e-bigger.e-grid.e-row-responsive .e-table td:not(.e-hide),.e-bigger .e-grid.e-row-responsive .e-table td:not(.e-hide),.e-bigger.e-grid.e-row-responsive .e-table tfoot,.e-bigger .e-grid.e-row-responsive .e-table tfoot,.e-bigger.e-grid.e-row-responsive .e-table tr,.e-bigger .e-grid.e-row-responsive .e-table tr{display:block}.e-bigger.e-grid.e-row-responsive>.e-gridheader,.e-bigger .e-grid.e-row-responsive>.e-gridheader{display:none}.e-bigger.e-grid.e-row-responsive .e-gridfooter,.e-bigger .e-grid.e-row-responsive .e-gridfooter{padding-right:0}.e-bigger.e-grid.e-row-responsive.e-hidelines .e-gridcontent .e-rowcell:last-child,.e-bigger .e-grid.e-row-responsive.e-hidelines .e-gridcontent .e-rowcell:last-child,.e-bigger.e-grid.e-row-responsive.e-verticallines .e-gridcontent .e-rowcell:last-child,.e-bigger .e-grid.e-row-responsive.e-verticallines .e-gridcontent .e-rowcell:last-child{border:0}.e-bigger.e-responsive-dialog.e-customfilter .e-responsivecoldiv,.e-bigger .e-responsive-dialog.e-customfilter .e-responsivecoldiv{cursor:pointer}.e-bigger.e-responsive-dialog .e-btn.e-ripple,.e-bigger .e-responsive-dialog .e-btn.e-ripple{overflow:initial}.e-bigger.e-responsive-dialog .e-dlg-header-content,.e-bigger .e-responsive-dialog .e-dlg-header-content{background:#fff;border-bottom:1px solid #e0e0e0;padding:16px;width:100%}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-btn{background:none;-webkit-box-shadow:none;box-shadow:none;outline:none;position:static}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn{background-color:rgba(0,0,0,0)}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-btn .e-btn-icon,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-btn .e-btn-icon{color:#000;font-size:14px;margin-top:0}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-btn:focus .e-btn-icon,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-btn:focus .e-btn-icon,.e-bigger.e-responsive-dialog .e-dlg-header-content .e-btn:hover .e-btn-icon,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-btn:hover .e-btn-icon{color:#000}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn{float:left;padding-left:0;padding-right:40px}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header{width:auto}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element{display:-ms-flexbox;display:-webkit-box;display:flex}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-dlg-custom-header,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-dlg-custom-header{padding-top:5px;width:100%;font-weight:500}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-filter-clear-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-filter-clear-btn{color:#e3165b;margin-top:3px;padding:0}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-filter-clear-btn .e-icon-filter-clear,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-filter-clear-btn .e-icon-filter-clear{font-size:18px}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-sort-clear-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-sort-clear-btn{color:#e3165b;font-size:15px;font-weight:500;padding-top:5px}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-apply-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-apply-btn{font-size:15px;font-weight:500;padding:3px 0 0 20px}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-apply-btn:disabled,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-apply-btn:disabled{color:rgba(0,0,0,.12)}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-btn{background:none;border:0;color:#e3165b}.e-bigger.e-responsive-dialog .e-dlg-header-content .e-res-back-btn,.e-bigger .e-responsive-dialog .e-dlg-header-content .e-res-back-btn{background:none;-webkit-box-shadow:none;box-shadow:none;padding-left:0}.e-bigger.e-responsive-dialog.e-rtl .e-dlg-header-content .e-res-back-btn,.e-bigger .e-responsive-dialog.e-rtl .e-dlg-header-content .e-res-back-btn{padding-left:15px;padding-right:0}.e-bigger.e-responsive-dialog .e-dlg-content,.e-bigger .e-responsive-dialog .e-dlg-content{padding:0 16px 16px}.e-bigger.e-responsive-dialog .e-dlg-content .e-checkfltrnmdiv,.e-bigger .e-responsive-dialog .e-dlg-content .e-checkfltrnmdiv{text-align:center}.e-bigger.e-responsive-dialog .e-dlg-content .e-filtersetdiv,.e-bigger .e-responsive-dialog .e-dlg-content .e-filtersetdiv{float:right;margin-right:1%;margin-top:1%}.e-bigger.e-responsive-dialog .e-dlg-content .e-filtersetdiv .e-filterset,.e-bigger .e-responsive-dialog .e-dlg-content .e-filtersetdiv .e-filterset{color:#e3165b}.e-bigger.e-responsive-dialog .e-dlg-content .e-dialog,.e-bigger .e-responsive-dialog .e-dlg-content .e-dialog{-webkit-box-shadow:none;box-shadow:none}.e-bigger.e-responsive-dialog .e-dlg-content .e-excelfilter,.e-bigger .e-responsive-dialog .e-dlg-content .e-excelfilter{border:rgba(0,0,0,0)}.e-bigger.e-responsive-dialog .e-dlg-content .e-excelfilter .e-dlg-content,.e-bigger .e-responsive-dialog .e-dlg-content .e-excelfilter .e-dlg-content{background-color:#fff;padding:8px 16px 8px 8px}.e-bigger.e-responsive-dialog .e-dlg-content .e-excelfilter .e-checkboxlist>span,.e-bigger .e-responsive-dialog .e-dlg-content .e-excelfilter .e-checkboxlist>span{padding-left:9px}.e-bigger.e-responsive-dialog .e-dlg-content .e-xlflmenu,.e-bigger .e-responsive-dialog .e-dlg-content .e-xlflmenu{border:rgba(0,0,0,0)}.e-bigger.e-responsive-dialog .e-dlg-content .e-xlflmenu .e-dlg-content,.e-bigger .e-responsive-dialog .e-dlg-content .e-xlflmenu .e-dlg-content{padding:16px}.e-bigger.e-responsive-dialog .e-dlg-content .e-ressortbutton-parent,.e-bigger .e-responsive-dialog .e-dlg-content .e-ressortbutton-parent{float:right;margin-top:-9px}.e-bigger.e-responsive-dialog .e-dlg-content .e-ressortbutton-parent .e-ressortbutton,.e-bigger .e-responsive-dialog .e-dlg-content .e-ressortbutton-parent .e-ressortbutton{background:none;width:120px}.e-bigger.e-responsive-dialog .e-dlg-content .e-responsivecoldiv,.e-bigger .e-responsive-dialog .e-dlg-content .e-responsivecoldiv{font-size:16px;margin-bottom:26px;margin-top:26px;width:100%}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog{bottom:0;-webkit-box-shadow:none;box-shadow:none;width:100%}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul{background-color:#fff;max-width:100%}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul li,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul li{color:rgba(0,0,0,.87)}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu.e-selected,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu.e-selected{background-color:#fff}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu{padding:0}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu .e-menu-icon,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu .e-menu-icon{margin-right:4px;margin-left:15px}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu .e-caret,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-contextmenu-wrapper ul .e-submenu .e-caret{padding:0 8px 0 0}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer{height:88%}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox{padding-left:10px}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox .e-search-icon:active,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox .e-search-icon:active,.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox .e-search-icon:focus,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox .e-search-icon:focus,.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox .e-search-icon:hover,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-searchbox .e-search-icon:hover{background:none}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner{height:100%}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner .e-chk-hidden,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner .e-chk-hidden{-moz-appearance:none;height:1px;opacity:0;width:1px}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner .e-checkboxlist,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner .e-checkboxlist{height:100%;min-height:160px;overflow-y:auto}.e-bigger.e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner .e-checkboxlist .e-ftrchk,.e-bigger .e-responsive-dialog .e-dlg-content .e-mainfilterdiv .e-dialog .e-searchcontainer .e-spinner .e-checkboxlist .e-ftrchk{padding-bottom:13px;padding-top:13px}.e-bigger.e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content,.e-bigger .e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content{padding:8px}.e-bigger.e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content .e-searchcontainer,.e-bigger .e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content .e-searchcontainer{padding-left:8px;margin-right:7px}.e-bigger.e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content .e-searchcontainer .e-searchbox,.e-bigger .e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content .e-searchcontainer .e-searchbox{padding-left:0}.e-bigger.e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content .e-searchcontainer .e-spinner .e-checkboxlist,.e-bigger .e-responsive-dialog .e-dlg-content .e-checkboxfilter .e-dlg-content .e-searchcontainer .e-spinner .e-checkboxlist{margin-left:-7px}.e-bigger.e-responsive-dialog .e-res-contextmenu-wrapper .e-contextmenu,.e-bigger .e-responsive-dialog .e-res-contextmenu-wrapper .e-contextmenu{background-color:#fff;border:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;margin-top:23px;max-width:100%;min-width:100%;overflow-y:auto;padding:0 16px 16px}.e-bigger.e-responsive-dialog .e-res-contextmenu-wrapper .e-contextmenu .e-menu-item,.e-bigger .e-responsive-dialog .e-res-contextmenu-wrapper .e-contextmenu .e-menu-item{padding:0}.e-bigger.e-responsive-dialog .e-res-contextmenu-wrapper .e-contextmenu .e-menu-item.e-focused,.e-bigger .e-responsive-dialog .e-res-contextmenu-wrapper .e-contextmenu .e-menu-item.e-focused{background-color:rgba(0,0,0,0)}.e-bigger.e-responsive-dialog .e-defaultcell.e-ralign,.e-bigger .e-responsive-dialog .e-defaultcell.e-ralign,.e-bigger.e-responsive-dialog .e-defaultcell.e-ralign:focus,.e-bigger .e-responsive-dialog .e-defaultcell.e-ralign:focus,.e-bigger.e-responsive-dialog .e-editedrow .e-defaultcell.e-ralign,.e-bigger .e-responsive-dialog .e-editedrow .e-defaultcell.e-ralign,.e-bigger.e-responsive-dialog .e-insertedrow .e-defaultcell.e-ralign,.e-bigger .e-responsive-dialog .e-insertedrow .e-defaultcell.e-ralign,.e-bigger.e-responsive-dialog .e-insertedrow .e-defaultcell.e-ralign:focus .e-bigger.e-responsive-dialog .e-editedrow .e-defaultcell.e-ralign:focus,.e-bigger .e-responsive-dialog .e-insertedrow .e-defaultcell.e-ralign:focus .e-bigger.e-responsive-dialog .e-editedrow .e-defaultcell.e-ralign:focus,.e-bigger.e-responsive-dialog .e-insertedrow .e-defaultcell.e-ralign:focus .e-bigger .e-responsive-dialog .e-editedrow .e-defaultcell.e-ralign:focus,.e-bigger .e-responsive-dialog .e-insertedrow .e-defaultcell.e-ralign:focus .e-bigger .e-responsive-dialog .e-editedrow .e-defaultcell.e-ralign:focus{padding-right:10px}.e-bigger.e-responsive-dialog.e-ressortdiv .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-apply-btn,.e-bigger .e-responsive-dialog.e-ressortdiv .e-dlg-header-content .e-dlg-header .e-res-custom-element .e-res-apply-btn{padding-top:0}.e-bigger.e-responsive-dialog.e-rtl .e-btn.e-dlg-closeicon-btn,.e-bigger .e-responsive-dialog.e-rtl .e-btn.e-dlg-closeicon-btn{float:right;padding-left:40px;padding-right:0}.e-bigger.e-responsive-dialog.e-rtl .e-res-apply-btn,.e-bigger .e-responsive-dialog.e-rtl .e-res-apply-btn{padding-left:0;padding-right:20px}.e-bigger.e-responsive-dialog.e-rtl .e-ressortbutton-parent,.e-bigger .e-responsive-dialog.e-rtl .e-ressortbutton-parent{float:left}.e-ddl.e-popup.e-popup-flbar .e-dropdownbase,.e-ddl.e-popup.e-popup-flmenu .e-dropdownbase{max-height:298px!important}@-moz-document url-prefix(){.e-grid-min-height .e-icon-gdownarrow,.e-grid-min-height .e-icon-grightarrow,.e-grid-min-height .e-rowcell{line-height:normal}.e-bigger .e-grid.e-grid-min-height .e-rowcell,.e-bigger .e-grid.e-grid-min-height .e-rowcell:first-child,.e-bigger .e-grid.e-grid-min-height .e-rowcell:last-child{line-height:normal}}.e-grid{border-color:#e0e0e0}.e-grid .e-content{background-color:#fff}.e-grid .e-icons:not(.e-btn-icon){color:#000}.e-grid .e-unboundcelldiv .e-icons:not(.e-btn-icon){color:#000}.e-grid .e-table{background-color:#fff}.e-grid .e-focused:not(.e-menu-item){-webkit-box-shadow:0 0 0 1px #9e9e9e inset;box-shadow:inset 0 0 0 1px #9e9e9e}.e-grid .e-gridheader .e-icons:not(.e-icon-hide):not(.e-check):not(.e-stop):not(.e-icon-reorderuparrow):not(.e-icon-reorderdownarrow){color:#212121}.e-grid .e-gridheader .e-headercontent .e-icon-reorderdownarrow,.e-grid .e-gridheader .e-headercontent .e-icon-reorderuparrow{color:#212121}.e-grid .e-groupdroparea .e-icons{color:#fff}.e-grid .e-tableborder{border-right-color:#e0e0e0}.e-grid .e-autofill{background-color:#e3165b}.e-grid .e-autofill,.e-grid .e-xlsel{border-color:#e3165b;z-index:1}.e-grid .e-xlsel{background-color:rgba(0,0,0,0);border-style:solid;pointer-events:none;position:absolute}.e-grid .e-xlselaf{background-color:#e3165b;border-color:#e3165b;position:absolute}.e-grid .e-gridcontent .e-groupcaption.e-dragborder,.e-grid .e-gridcontent .e-rowcell.e-dragborder,.e-grid .e-gridcontent .e-rowdragdrop.e-dragborder,.e-grid .e-gridcontent .e-summarycell.e-dragborder,.e-grid .e-gridcontent tr.e-row:first-child .e-rowcell.e-dragborder,.e-grid .e-gridheader thead tr th.e-firstrowdragborder,.e-grid.e-rtl .e-gridcontent .e-rowcell.e-dragborder,.e-grid.e-rtl .e-gridcontent .e-rowdragdrop.e-dragborder,.e-grid.e-rtl .e-gridcontent tr.e-row:first-child .e-rowcell.e-dragborder{-webkit-box-shadow:0 2px 0 0 #e3165b;box-shadow:0 2px 0 0 #e3165b;position:relative;z-index:5}.e-grid .e-gridheader{background-color:#fff;border-bottom-color:#e0e0e0;border-top-color:#e0e0e0;color:rgba(0,0,0,.54)}.e-grid .e-gridcontent tr:first-child td{border-top-color:rgba(0,0,0,0)}.e-grid th.e-headercell[aria-sort=ascending] .e-headertext,.e-grid th.e-headercell[aria-sort=ascending] .e-sortfilterdiv,.e-grid th.e-headercell[aria-sort=descending] .e-headertext,.e-grid th.e-headercell[aria-sort=descending] .e-sortfilterdiv{color:#000;opacity:1}.e-grid.e-default.e-horizontallines .e-grouptopleftcell,.e-grid.e-default.e-verticallines .e-headercell.e-stackedheadercell{border-color:#e0e0e0}.e-grid.e-default .e-gridheader.e-stackedfilter tr:first-child th.e-grouptopleftcell,.e-grid.e-default .e-gridheader.e-stackedfilter tr:last-child th.e-grouptopleftcell,.e-grid.e-default.e-horizontallines .e-gridheader.e-stackedfilter tr:first-child th.e-grouptopleftcell,.e-grid.e-default.e-horizontallines .e-gridheader.e-stackedfilter tr:last-child th.e-grouptopleftcell{border-color:#e0e0e0}.e-grid.e-default .e-gridheader .e-headercell.e-firstheader,.e-grid.e-default.e-horizontallines .e-headercell.e-firstheader,.e-grid .e-filterbarcell input{border-color:#e0e0e0}.e-grid .e-gridcontent{background-color:#fff}.e-grid .e-gridfooter{background-color:#f6f6f6}.e-grid .e-headercontent{border-color:#e0e0e0}.e-grid .e-rowdragheader{background-color:#fff}.e-grid .e-detailheadercell,.e-grid .e-headercell{background-color:#fff;border-color:#e0e0e0}.e-grid [aria-selected]+tr .e-detailindentcell{border-color:#e0e0e0}.e-grid tr th.e-firstcell{border-left-color:#e0e0e0;border-right-color:#e0e0e0}.e-grid .e-detailrowcollapse:not(.e-editedbatchcell):not(.e-updatedtd),.e-grid .e-detailrowexpand:not(.e-editedbatchcell):not(.e-updatedtd),.e-grid .e-emptyrow:not(.e-editedbatchcell):not(.e-updatedtd),.e-grid .e-gridcontent .e-rowdragdrop:not(.e-editedbatchcell):not(.e-updatedtd),.e-grid .e-gridheader .e-rowdragdrop:not(.e-editedbatchcell):not(.e-updatedtd),.e-grid .e-rowcell:not(.e-editedbatchcell):not(.e-updatedtd){color:rgba(0,0,0,.87)}.e-grid .e-summarycell{background-color:#fafafa;border-color:#e0e0e0;color:rgba(0,0,0,.54)}.e-grid .e-groupfooterrow.e-summaryrow .e-indentcell.e-indentcelltop,.e-grid .e-indentcell.e-detailindentcelltop,.e-grid .e-summarycontent .e-indentcell,.e-grid .e-summaryrow .e-summarycell,.e-grid .e-summaryrow .e-templatecell{background-color:#f6f6f6;border-color:#e0e0e0;color:rgba(0,0,0,.54)}.e-grid.e-default .e-grouptopleftcell,.e-grid .e-detailcell,.e-grid .e-detailindentcell,.e-grid .e-detailrowcollapse,.e-grid .e-detailrowexpand,.e-grid .e-groupcaption,.e-grid .e-indentcell,.e-grid .e-recordpluscollapse,.e-grid .e-recordplusexpand,.e-grid .e-rowcell,.e-grid .e-rowdragdropcell{border-color:#e0e0e0}.e-grid .e-frozenhdrcont .e-frozenheader>.e-table,.e-grid .e-frozenhdrcont .e-headercontent .e-virtualtable>.e-table,.e-grid .e-frozenhdrcont .e-headercontent>.e-table,.e-grid .e-frozenhdrcont .e-movableheader>.e-table{border-bottom-color:#e3165b}.e-grid .e-frozencontent{border-bottom-color:#e0e0e0}.e-grid .e-frozencontent .e-virtualtable>.e-table,.e-grid .e-frozencontent>.e-table,.e-grid .e-frozenheader .e-virtualtable>.e-table,.e-grid .e-frozenheader>.e-table{border-right-color:#e3165b}.e-grid .e-frozencontent.e-frozenborderdisabled .e-virtualtable>.e-table,.e-grid .e-frozencontent.e-frozenborderdisabled>.e-table,.e-grid .e-frozenheader.e-frozenborderdisabled .e-virtualtable>.e-table,.e-grid .e-frozenheader.e-frozenborderdisabled>.e-table{border-right-color:#fff}.e-grid .e-frozencontent.e-frozen-right-content>.e-table,.e-grid .e-frozenheader.e-frozen-right-header>.e-table,.e-grid .e-gridheader .e-filterbarcell .e-frozen-default-cursor,.e-grid .e-gridheader .e-headercell .e-frozen-default-cursor,.e-grid .e-rowcell .e-frozen-default-cursor{border-left-color:#e3165b}.e-grid .e-frozencontent.e-frozen-right-content.e-frozenborderdisabled>.e-table,.e-grid .e-frozenheader.e-frozen-right-header.e-frozenborderdisabled>.e-table{border-left-color:#fff}.e-grid.e-rtl .e-frozencontent .e-virtualtable>.e-table,.e-grid.e-rtl .e-frozencontent>.e-table,.e-grid.e-rtl .e-frozenheader .e-virtualtable>.e-table,.e-grid.e-rtl .e-frozenheader>.e-table{border-left-color:#e3165b}.e-grid.e-rtl .e-frozencontent.e-frozen-right-content>.e-table,.e-grid.e-rtl .e-frozenheader.e-frozen-right-header>.e-table{border-right-color:#e3165b}.e-grid.e-gridhover .e-row:not(.e-disable-gridhover):not(.e-detailrow):hover .e-detailrowcollapse:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell),.e-grid.e-gridhover .e-row:not(.e-disable-gridhover):not(.e-detailrow):hover .e-detailrowexpand:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell),.e-grid.e-gridhover .e-row:not(.e-disable-gridhover):not(.e-detailrow):hover .e-rowdragdrop:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell),.e-grid.e-gridhover .e-row:not(.e-disable-gridhover):not(.e-editedrow):not(.e-detailrow):hover .e-rowcell:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell),.e-grid.e-gridhover .e-row tr:not(.e-disable-gridhover):not(.e-editedrow):not(.e-detailrow):hover .e-rowcell:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell),.e-grid.e-rtl .e-gridhover .e-row:not(.e-disable-gridhover):not(.e-detailrow):hover .e-rowdragdrop:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell){background-color:#eee;color:#000}.e-grid .e-row:hover .e-rowdragdrop{cursor:move}.e-grid .e-sortnumber{background-color:#bbbdc0;color:#000}.e-grid.e-gridhover .e-frozenhover{background-color:#eee;color:#000}.e-grid .e-col-menu.e-filter-popup{-webkit-box-shadow:0 8px 10px 0 rgba(0,0,0,.24);box-shadow:0 8px 10px 0 rgba(0,0,0,.24)}.e-grid td.e-active .e-icon-rowdragicon:before{color:#000}.e-grid td.e-active{background:#e0e0e0;color:#000}.e-grid .e-columnselection{background-color:#e0e0e0}.e-grid td.e-cellselectionbackground{background:#e0e0e0;color:#000}.e-grid .e-filterbarcell,.e-grid .e-filterbarcelldisabled{background-color:#fff;background-image:none;border-color:#e0e0e0}.e-grid .e-filtered:before{color:#e3165b}.e-grid .e-gridpopup .e-content{background-color:#fff;border-color:#e0e0e0}.e-grid .e-gridpopup .e-spanclicked,.e-grid .e-gridpopup span:hover{border-color:#000}.e-grid .e-gridpopup .e-downtail,.e-grid .e-gridpopup .e-downtail:before{border-top-color:#e0e0e0}.e-grid .e-gridpopup .e-downtail:after{border-top-color:#fff}.e-grid .e-gridpopup .e-uptail,.e-grid .e-gridpopup .e-uptail:before{border-bottom-color:#e0e0e0}.e-grid .e-gridpopup .e-uptail:after{border-bottom-color:#fff}.e-grid .e-cloneproperties{background-color:#eee;border-color:#e0e0e0;color:rgba(0,0,0,.54)}.e-grid .e-rhelper{background-color:#000;cursor:col-resize;opacity:.87}.e-grid.e-device .e-rcursor:before{border-right-color:#000;opacity:.87}.e-grid.e-device .e-rcursor:after{border-left-color:#000;opacity:.87}.e-grid.e-resize-lines .e-headercell .e-rhandler,.e-grid.e-resize-lines .e-headercell .e-rsuppress{border-right:1px solid #e0e0e0}.e-grid.e-resize-lines .e-frozen-right-header .e-headercell .e-rhandler,.e-grid.e-resize-lines .e-frozen-right-header .e-headercell .e-rsuppress{border-left:1px solid #e0e0e0}.e-grid.e-resize-lines .e-focused .e-rhandler{border:0}.e-grid.e-resize-lines .e-headercell.e-stackedheadercell{border-bottom:1px solid #e0e0e0;border-right:1px solid #e0e0e0}.e-grid.e-resize-lines .e-frozen-right-header .e-headercell.e-stackedheadercell{border-left:1px solid #e0e0e0}.e-grid.e-rtl.e-resize-lines .e-headercell .e-rhandler,.e-grid.e-rtl.e-resize-lines .e-headercell .e-rsuppress,.e-grid.e-rtl.e-resize-lines .e-headercell.e-stackedheadercell{border-left:1px solid #e0e0e0;border-right-width:0}.e-grid.e-rtl.e-resize-lines .e-frozen-right-header .e-headercell .e-rhandler,.e-grid.e-rtl.e-resize-lines .e-frozen-right-header .e-headercell .e-rsuppress,.e-grid.e-rtl.e-resize-lines .e-frozen-right-header .e-headercell.e-stackedheadercell{border-left-width:0;border-right:1px solid #e0e0e0}.e-grid.e-resize-lines .e-filterbarcell,.e-grid.e-rtl.e-resize-lines .e-filterbarcell{border-top:1px solid #e0e0e0}.e-grid .e-cloneproperties.e-draganddrop{-webkit-box-shadow:0 3px 8px 0 rgba(0,0,0,.26);box-shadow:0 3px 8px 0 rgba(0,0,0,.26);opacity:.95;overflow:visible}.e-grid .e-row .e-dragstartrow:before,.e-grid .e-row .e-selectionbackground .e-dragstartrow:before{color:#e3165b}.e-grid .e-griddragarea{background-color:#eee;border-color:#eee;color:#000}.e-grid .e-groupdroparea{background-color:#e8eaf6;border-top-color:#e0e0e0;color:#000}.e-grid .e-groupdroparea.e-hover{background-color:#c5cae9}.e-grid .e-groupdroparea.e-grouped{background-color:#7986cb}.e-grid .e-groupheadercell{background-color:#3f51b5;border-color:#e0e0e0;border-radius:12px;color:#fff}.e-grid .e-groupheadercell:hover{background-color:#3f51b5;border-color:#000}.e-grid .e-ungroupbutton:hover{color:#fff;opacity:1}.e-grid .e-ungroupbutton{opacity:.7}.e-grid .e-groupcaption,.e-grid .e-indentcell,.e-grid .e-recordpluscollapse,.e-grid .e-recordplusexpand{background-color:#fafafa;color:#000}.e-grid .e-grouptopleftcell{background-color:#fff;border-color:#e0e0e0}.e-grid .e-stackedheadercell{border-bottom-color:#e0e0e0}.e-grid .e-verticallines tr th{border-color:#e0e0e0}.e-grid td.e-updatedtd{background-color:#d7f9c7;color:#000}.e-grid .e-gridcontent .e-normaledit .e-rowcell{border-top-color:#e0e0e0}.e-grid .e-gridcontent .e-normaledit .e-detailrowcollapse,.e-grid .e-gridcontent .e-normaledit .e-dragindentcell{border-top:1px solid #e0e0e0}.e-grid .e-ccdlg .e-footer-content{border-color:rgba(0,0,0,.12);opacity:1}.e-grid .e-ccdlg .e-cc-searchdiv{border-color:#212121}.e-grid .e-ccdlg .e-cc-searchdiv.e-input-focus{border-color:#ff4081}.e-grid .e-cloneproperties.e-draganddrop .e-rowcell{color:#000}.e-grid .e-cloneproperties.e-draganddrop table,.e-grid .e-cloneproperties.e-draganddrop table .e-selectionbackground{background-color:#fff;height:30px}.e-grid.e-rtl .e-verticallines tr th:first-child:not(.e-firstcell){border-color:#e0e0e0}.e-grid.e-rtl.e-default.e-bothlines .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-bothlines .e-gridheader th.e-grouptopleftcell.e-lastgrouptopleftcell,.e-grid.e-rtl.e-default .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-horizontallines .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-verticallines .e-gridheader .e-headercell.e-firstheader,.e-grid.e-rtl.e-default.e-verticallines .e-gridheader th.e-grouptopleftcell,.e-grid.e-rtl.e-default.e-verticallines .e-gridheader th.e-grouptopleftcell.e-lastgrouptopleftcell,.e-grid.e-rtl.e-default.e-verticallines .e-headercell.e-stackedheadercell,.e-grid.e-rtl.e-default.e-verticallines tr th:last-child{border-color:#e0e0e0}.e-grid.e-rtl .e-tableborder{border-left-color:#e0e0e0}.e-grid.e-rtl .e-filterbardropdown{margin-left:15px}.e-grid.sf-grid .e-gridfooter .e-summarycontent{border-right:0 solid #e0e0e0}.e-grid .e-ftrchk.e-chkfocus,.e-grid li.e-cclist.e-colfocus{background-color:#eee}.e-control.e-tooltip-wrap.e-popup.e-griderror,.e-tooltip-wrap.e-griderror{background-color:#fcdbe4;border-color:#fcdbe4}.e-tooltip-wrap.e-griderror .e-arrow-tip-inner.e-tip-top,.e-tooltip-wrap.e-griderror .e-arrow-tip-outer.e-tip-top{border-bottom:8px solid #fcdbe4;color:#fcdbe4}.e-tooltip-wrap.e-griderror .e-arrow-tip-inner.e-tip-bottom,.e-tooltip-wrap.e-griderror .e-arrow-tip-outer.e-tip-bottom{border-top:8px solid #fcdbe4;color:#fcdbe4}.e-tooltip-wrap.e-griderror .e-tip-content,.e-tooltip-wrap.e-griderror .e-tip-content label{color:#f44336}.e-dropitemscount{background-color:#e3165b;color:#fff}.e-filterbaroperator.e-dropdownlist{position:absolute}.e-filterbardropdown:not(.e-rtl){margin-right:15px}.e-headercontent .e-filterbar .e-filterbarcell .e-fltrinputdiv .e-input-group .e-filterbardropdown{border:rgba(0,0,0,0)}.e-headercontent .e-filterbar .e-filterbarcell .e-fltrinputdiv .e-input-group .e-filterbardropdown.e-input-focus,.e-headercontent .e-filterbar .e-filterbarcell .e-fltrinputdiv .e-input-group .e-filterbardropdown:active{-webkit-box-shadow:none;box-shadow:none}__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Compression", function() { return Br; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_PRODUCT_TOUR_APPEARANCE", function() { return Ar; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DisplaySurveyType", function() { return Fr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PostHog", function() { return _n; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ProductTourEventName", function() { return Mr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ProductTourEventProperties", function() { return Dr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEventName", function() { return Ir; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEventProperties", function() { return Cr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEventType", function() { return Sr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPosition", function() { return Tr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionBranchingType", function() { return Pr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionType", function() { return Rr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveySchedule", function() { return Or; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyTabPosition", function() { return $r; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyType", function() { return kr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyWidgetType", function() { return xr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return sa; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "posthog", function() { return sa; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "severityLevels", function() { return zr; });
var t="undefined"!=typeof window?window:void 0,i="undefined"!=typeof globalThis?globalThis:t;"undefined"==typeof self&&(i.self=i),"undefined"==typeof File&&(i.File=function(){});var e=null==i?void 0:i.navigator,r=null==i?void 0:i.document,s=null==i?void 0:i.location,n=null==i?void 0:i.fetch,o=null!=i&&i.XMLHttpRequest&&"withCredentials"in new i.XMLHttpRequest?i.XMLHttpRequest:void 0,a=null==i?void 0:i.AbortController,l=null==i?void 0:i.CompressionStream,u=null==e?void 0:e.userAgent,h=null!=t?t:{},d="1.365.0",v={DEBUG:!1,LIB_VERSION:d,LIB_NAME:"web",JS_SDK_VERSION:d};function c(t,i,e,r,s,n,o){try{var a=t[n](o),l=a.value}catch(t){return void e(t)}a.done?i(l):Promise.resolve(l).then(r,s)}function f(t){return function(){var i=this,e=arguments;return new Promise((function(r,s){var n=t.apply(i,e);function o(t){c(n,r,s,o,a,"next",t)}function a(t){c(n,r,s,o,a,"throw",t)}o(void 0)}))}}function p(){return p=Object.assign?Object.assign.bind():function(t){for(var i=1;arguments.length>i;i++){var e=arguments[i];for(var r in e)({}).hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},p.apply(null,arguments)}function _(t,i){if(null==t)return{};var e={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==i.indexOf(r))continue;e[r]=t[r]}return e}function g(){return(g=f((function*(t,i){void 0===i&&(i=!0);try{var e=new Blob([t],{type:"text/plain"}).stream().pipeThrough(new CompressionStream("gzip"));return yield new Response(e).blob()}catch(t){return i&&console.error("Failed to gzip compress data",t),null}}))).apply(this,arguments)}var m=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],b=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],y=function(t,i){if(void 0===i&&(i=[]),!t)return!1;var e=t.toLowerCase();return b.concat(i).some((t=>{var i=t.toLowerCase();return-1!==e.indexOf(i)}))};function w(t,i){return-1!==t.indexOf(i)}var E=function(t){return t.trim()},S=function(t){return t.replace(/^\$/,"")},x=Object.prototype,T=x.hasOwnProperty,k=x.toString,R=Array.isArray||function(t){return"[object Array]"===k.call(t)},P=t=>"function"==typeof t,O=t=>t===Object(t)&&!R(t),I=t=>{if(O(t)){for(var i in t)if(T.call(t,i))return!1;return!0}return!1},C=t=>void 0===t,F=t=>"[object String]"==k.call(t),A=t=>F(t)&&0===t.trim().length,M=t=>null===t,D=t=>C(t)||M(t),L=t=>"[object Number]"==k.call(t)&&t==t,U=t=>L(t)&&t>0,N=t=>"[object Boolean]"===k.call(t),j=t=>t instanceof FormData,z=t=>w(m,t);function B(t){return null===t||"object"!=typeof t}function H(t,i){return{}.toString.call(t)==="[object "+i+"]"}function q(t){return"undefined"!=typeof Event&&function(t,i){try{return t instanceof i}catch(t){return!1}}(t,Event)}var W=[!0,"true",1,"1","yes"],V=t=>w(W,t),Y=[!1,"false",0,"0","no"];function G(t,i,e,r,s){return i>e&&(r.warn("min cannot be greater than max."),i=e),L(t)?t>e?(r.warn(" cannot be  greater than max: "+e+". Using max value instead."),e):i>t?(r.warn(" cannot be less than min: "+i+". Using min value instead."),i):t:(r.warn(" must be a number. using max or fallback. max: "+e+", fallback: "+s),G(s||e,i,e,r))}class J{constructor(t){this.Pt={},this.Dt=t.Dt,this.jt=G(t.bucketSize,0,100,t.qt),this.$t=G(t.refillRate,0,this.jt,t.qt),this.Ht=G(t.refillInterval,0,864e5,t.qt)}Vt(t,i){var e=Math.floor((i-t.lastAccess)/this.Ht);e>0&&(t.tokens=Math.min(t.tokens+e*this.$t,this.jt),t.lastAccess=t.lastAccess+e*this.Ht)}consumeRateLimit(t){var i,e=Date.now(),r=String(t),s=this.Pt[r];return s?this.Vt(s,e):this.Pt[r]=s={tokens:this.jt,lastAccess:e},0===s.tokens||(s.tokens--,0===s.tokens&&(null==(i=this.Dt)||i.call(this,t)),0===s.tokens)}stop(){this.Pt={}}}var K,X,Q,Z="Mobile",tt="iOS",it="Android",et="Tablet",rt=it+" "+et,st="iPad",nt="Apple",ot=nt+" Watch",at="Safari",lt="BlackBerry",ut="Samsung",ht=ut+"Browser",dt=ut+" Internet",vt="Chrome",ct=vt+" OS",ft=vt+" "+tt,pt="Internet Explorer",_t=pt+" "+Z,gt="Opera",mt=gt+" Mini",bt="Edge",yt="Microsoft "+bt,wt="Firefox",Et=wt+" "+tt,St="Nintendo",xt="PlayStation",Tt="Xbox",$t=it+" "+Z,kt=Z+" "+at,Rt="Windows",Pt=Rt+" Phone",Ot="Nokia",It="Ouya",Ct="Generic",Ft=Ct+" "+Z.toLowerCase(),At=Ct+" "+et.toLowerCase(),Mt="Konqueror",Dt="(\\d+(\\.\\d+)?)",Lt=new RegExp("Version/"+Dt),Ut=new RegExp(Tt,"i"),Nt=new RegExp(xt+" \\w+","i"),jt=new RegExp(St+" \\w+","i"),zt=new RegExp(lt+"|PlayBook|BB10","i"),Bt={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},Ht=function(t,i){return i=i||"",w(t," OPR/")&&w(t,"Mini")?mt:w(t," OPR/")?gt:zt.test(t)?lt:w(t,"IE"+Z)||w(t,"WPDesktop")?_t:w(t,ht)?dt:w(t,bt)||w(t,"Edg/")?yt:w(t,"FBIOS")?"Facebook "+Z:w(t,"UCWEB")||w(t,"UCBrowser")?"UC Browser":w(t,"CriOS")?ft:w(t,"CrMo")||w(t,vt)?vt:w(t,it)&&w(t,at)?$t:w(t,"FxiOS")?Et:w(t.toLowerCase(),Mt.toLowerCase())?Mt:((t,i)=>i&&w(i,nt)||function(t){return w(t,at)&&!w(t,vt)&&!w(t,it)}(t))(t,i)?w(t,Z)?kt:at:w(t,wt)?wt:w(t,"MSIE")||w(t,"Trident/")?pt:w(t,"Gecko")?wt:""},qt={[_t]:[new RegExp("rv:"+Dt)],[yt]:[new RegExp(bt+"?\\/"+Dt)],[vt]:[new RegExp("("+vt+"|CrMo)\\/"+Dt)],[ft]:[new RegExp("CriOS\\/"+Dt)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+Dt)],[at]:[Lt],[kt]:[Lt],[gt]:[new RegExp("(Opera|OPR)\\/"+Dt)],[wt]:[new RegExp(wt+"\\/"+Dt)],[Et]:[new RegExp("FxiOS\\/"+Dt)],[Mt]:[new RegExp("Konqueror[:/]?"+Dt,"i")],[lt]:[new RegExp(lt+" "+Dt),Lt],[$t]:[new RegExp("android\\s"+Dt,"i")],[dt]:[new RegExp(ht+"\\/"+Dt)],[pt]:[new RegExp("(rv:|MSIE )"+Dt)],Mozilla:[new RegExp("rv:"+Dt)]},Wt=function(t,i){var e=Ht(t,i),r=qt[e];if(C(r))return null;for(var s=0;r.length>s;s++){var n=t.match(r[s]);if(n)return parseFloat(n[n.length-2])}return null},Vt=[[new RegExp(Tt+"; "+Tt+" (.*?)[);]","i"),t=>[Tt,t&&t[1]||""]],[new RegExp(St,"i"),[St,""]],[new RegExp(xt,"i"),[xt,""]],[zt,[lt,""]],[new RegExp(Rt,"i"),(t,i)=>{if(/Phone/.test(i)||/WPDesktop/.test(i))return[Pt,""];if(new RegExp(Z).test(i)&&!/IEMobile\b/.test(i))return[Rt+" "+Z,""];var e=/Windows NT ([0-9.]+)/i.exec(i);if(e&&e[1]){var r=Bt[e[1]]||"";return/arm/i.test(i)&&(r="RT"),[Rt,r]}return[Rt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[tt,[t[3],t[4],t[5]||"0"].join(".")]:[tt,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var i="";return t&&t.length>=3&&(i=C(t[2])?t[3]:t[2]),["watchOS",i]}],[new RegExp("("+it+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+it+")","i"),t=>t&&t[2]?[it,[t[2],t[3],t[4]||"0"].join(".")]:[it,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var i=["Mac OS X",""];return t&&t[1]&&(i[1]=[t[1],t[2],t[3]||"0"].join(".")),i}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[ct,""]],[/Linux|debian/i,["Linux",""]]],Yt=function(t){return jt.test(t)?St:Nt.test(t)?xt:Ut.test(t)?Tt:new RegExp(It,"i").test(t)?It:new RegExp("("+Pt+"|WPDesktop)","i").test(t)?Pt:/iPad/.test(t)?st:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?ot:zt.test(t)?lt:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(Ot,"i").test(t)?Ot:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Z).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?it:rt:new RegExp("(pda|"+Z+")","i").test(t)?Ft:new RegExp(et,"i").test(t)&&!new RegExp(et+" pc","i").test(t)?At:""},Gt=t=>t instanceof Error;function Jt(t){var i=globalThis._posthogChunkIds;if(i){var e=Object.keys(i);return Q&&e.length===X||(X=e.length,Q=e.reduce(((e,r)=>{K||(K={});var s=K[r];if(s)e[s[0]]=s[1];else for(var n=t(r),o=n.length-1;o>=0;o--){var a=n[o],l=null==a?void 0:a.filename,u=i[r];if(l&&u){e[l]=u,K[r]=[l,u];break}}return e}),{})),Q}}class Kt{constructor(t,i,e){void 0===e&&(e=[]),this.coercers=t,this.stackParser=i,this.modifiers=e}buildFromUnknown(t,i){void 0===i&&(i={});var e=i&&i.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(e,i,0).apply(t),s=this.buildParsingContext(i),n=this.parseStacktrace(r,s);return{$exception_list:this.convertToExceptionList(n,e),$exception_level:"error"}}modifyFrames(t){var i=this;return f((function*(){for(var e of t)e.stacktrace&&e.stacktrace.frames&&R(e.stacktrace.frames)&&(e.stacktrace.frames=yield i.applyModifiers(e.stacktrace.frames));return t}))()}coerceFallback(t){var i;return{type:"Error",value:"Unknown error",stack:null==(i=t.syntheticException)?void 0:i.stack,synthetic:!0}}parseStacktrace(t,i){var e,r;return null!=t.cause&&(e=this.parseStacktrace(t.cause,i)),""!=t.stack&&null!=t.stack&&(r=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?i.skipFirstLines:0),i.chunkIdMap)),p({},t,{cause:e,stack:r})}applyChunkIds(t,i){return t.map((t=>(t.filename&&i&&(t.chunk_id=i[t.filename]),t)))}applyCoercers(t,i){for(var e of this.coercers)if(e.match(t))return e.coerce(t,i);return this.coerceFallback(i)}applyModifiers(t){var i=this;return f((function*(){var e=t;for(var r of i.modifiers)e=yield r(e);return e}))()}convertToExceptionList(t,i){var e,r,s,n={type:t.type,value:t.value,mechanism:{type:null!==(e=i.type)&&void 0!==e?e:"generic",handled:null===(r=i.handled)||void 0===r||r,synthetic:null!==(s=t.synthetic)&&void 0!==s&&s}};t.stack&&(n.stacktrace={type:"raw",frames:t.stack});var o=[n];return null!=t.cause&&o.push(...this.convertToExceptionList(t.cause,p({},i,{handled:!0}))),o}buildParsingContext(t){var i;return{chunkIdMap:Jt(this.stackParser),skipFirstLines:null!==(i=t.skipFirstLines)&&void 0!==i?i:1}}buildCoercingContext(t,i,e){void 0===e&&(e=0);var r=(e,r)=>{if(4>=r){var s=this.buildCoercingContext(t,i,r);return this.applyCoercers(e,s)}};return p({},i,{syntheticException:0==e?i.syntheticException:void 0,mechanism:t,apply:t=>r(t,e),next:t=>r(t,e+1)})}}var Xt="?";function Qt(t,i,e,r,s){var n={platform:t,filename:i,function:"<anonymous>"===e?Xt:e,in_app:!0};return C(r)||(n.lineno=r),C(s)||(n.colno=s),n}var Zt=(t,i)=>{var e=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return e||r?[-1!==t.indexOf("@")?t.split("@")[0]:Xt,e?"safari-extension:"+i:"safari-web-extension:"+i]:[t,i]},ti=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,ii=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,ei=/\((\S*)(?::(\d+))(?::(\d+))\)/,ri=(t,i)=>{var e=ti.exec(t);if(e){var[,r,s,n]=e;return Qt(i,r,Xt,+s,+n)}var o=ii.exec(t);if(o){if(o[2]&&0===o[2].indexOf("eval")){var a=ei.exec(o[2]);a&&(o[2]=a[1],o[3]=a[2],o[4]=a[3])}var[l,u]=Zt(o[1]||Xt,o[2]);return Qt(i,u,l,o[3]?+o[3]:void 0,o[4]?+o[4]:void 0)}},si=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,ni=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,oi=(t,i)=>{var e=si.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){var r=ni.exec(e[3]);r&&(e[1]=e[1]||"eval",e[3]=r[1],e[4]=r[2],e[5]="")}var s=e[3],n=e[1]||Xt;return[n,s]=Zt(n,s),Qt(i,s,n,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}},ai=/\(error: (.*)\)/;class li{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,i){var e=F(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:e?t.stack:void 0,cause:t.cause?i.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){var i=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?i+": "+t.message:i}isDOMException(t){return H(t,"DOMException")}isDOMError(t){return H(t,"DOMError")}}class ui{match(t){return(t=>t instanceof Error)(t)}coerce(t,i){return{type:this.getType(t),value:this.getMessage(t,i),stack:this.getStack(t),cause:t.cause?i.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,i){var e=t.message;return String(e.error&&"string"==typeof e.error.message?e.error.message:e)}getStack(t){return t.stacktrace||t.stack||void 0}}class hi{constructor(){}match(t){return H(t,"ErrorEvent")&&null!=t.error}coerce(t,i){var e;return i.apply(t.error)||{type:"ErrorEvent",value:t.message,stack:null==(e=i.syntheticException)?void 0:e.stack,synthetic:!0}}}var di=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class vi{match(t){return"string"==typeof t}coerce(t,i){var e,[r,s]=this.getInfos(t);return{type:null!=r?r:"Error",value:null!=s?s:t,stack:null==(e=i.syntheticException)?void 0:e.stack,synthetic:!0}}getInfos(t){var i="Error",e=t,r=t.match(di);return r&&(i=r[1],e=r[2]),[i,e]}}var ci=["fatal","error","warning","log","info","debug"];function fi(t,i){void 0===i&&(i=40);var e=Object.keys(t);if(e.sort(),!e.length)return"[object has no keys]";for(var r=e.length;r>0;r--){var s=e.slice(0,r).join(", ");if(i>=s.length)return r===e.length?s:s.length>i?s.slice(0,i)+"...":s}return""}class pi{match(t){return"object"==typeof t&&null!==t}coerce(t,i){var e,r=this.getErrorPropertyFromObject(t);return r?i.apply(r):{type:this.getType(t),value:this.getValue(t),stack:null==(e=i.syntheticException)?void 0:e.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return q(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&"string"==typeof t.name){var i="'"+t.name+"' captured as exception";return"message"in t&&"string"==typeof t.message&&(i+=" with message: '"+t.message+"'"),i}if("message"in t&&"string"==typeof t.message)return t.message;var e=this.getObjectClassName(t);return(e&&"Object"!==e?"'"+e+"'":"Object")+" captured as exception with keys: "+fi(t)}isSeverityLevel(t){return F(t)&&!A(t)&&ci.indexOf(t)>=0}getErrorPropertyFromObject(t){for(var i in t)if({}.hasOwnProperty.call(t,i)){var e=t[i];if(Gt(e))return e}}getObjectClassName(t){try{var i=Object.getPrototypeOf(t);return i?i.constructor.name:void 0}catch(t){return}}}class _i{match(t){return q(t)}coerce(t,i){var e,r=t.constructor.name;return{type:r,value:r+" captured as exception with keys: "+fi(t),stack:null==(e=i.syntheticException)?void 0:e.stack,synthetic:!0}}}class gi{match(t){return B(t)}coerce(t,i){var e;return{type:"Error",value:"Primitive value captured as exception: "+String(t),stack:null==(e=i.syntheticException)?void 0:e.stack,synthetic:!0}}}class mi{match(t){return H(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!q(t))return!1;try{var i=t.detail;return null!=i&&"object"==typeof i&&"reason"in i}catch(t){return!1}}coerce(t,i){var e,r=this.getUnhandledRejectionReason(t);return B(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:null==(e=i.syntheticException)?void 0:e.stack,synthetic:!0}:i.apply(r)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&null!=t.detail&&"object"==typeof t.detail&&"reason"in t.detail)return t.detail.reason}catch(t){}return t}}var bi=function(i,e){var{debugEnabled:r}=void 0===e?{}:e,s={C(e){if(t&&(v.DEBUG||h.POSTHOG_DEBUG||r)&&!C(t.console)&&t.console){for(var s=("__rrweb_original__"in t.console[e]?t.console[e].__rrweb_original__:t.console[e]),n=arguments.length,o=new Array(n>1?n-1:0),a=1;n>a;a++)o[a-1]=arguments[a];s(i,...o)}},info(){for(var t=arguments.length,i=new Array(t),e=0;t>e;e++)i[e]=arguments[e];s.C("log",...i)},warn(){for(var t=arguments.length,i=new Array(t),e=0;t>e;e++)i[e]=arguments[e];s.C("warn",...i)},error(){for(var t=arguments.length,i=new Array(t),e=0;t>e;e++)i[e]=arguments[e];s.C("error",...i)},critical(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];console.error(i,...e)},uninitializedWarning(t){s.error("You must initialize PostHog before calling "+t)},createLogger:(t,e)=>bi(i+" "+t,e)};return s},yi=bi("[PostHog.js]"),wi=yi.createLogger,Ei=wi("[ExternalScriptsLoader]"),Si=(t,i,e)=>{if(t.config.disable_external_dependency_loading)return Ei.warn(i+" was requested but loading of external scripts is disabled."),e("Loading of external scripts is disabled");var s=null==r?void 0:r.querySelectorAll("script");if(s)for(var n,o=function(){if(s[a].src===i){var t=s[a];return t.__posthog_loading_callback_fired?{v:e()}:(t.addEventListener("load",(i=>{t.__posthog_loading_callback_fired=!0,e(void 0,i)})),t.onerror=t=>e(t),{v:void 0})}},a=0;s.length>a;a++)if(n=o())return n.v;var l=()=>{if(!r)return e("document not found");var s=r.createElement("script");if(s.type="text/javascript",s.crossOrigin="anonymous",s.src=i,s.onload=t=>{s.__posthog_loading_callback_fired=!0,e(void 0,t)},s.onerror=t=>e(t),t.config.prepare_external_dependency_script&&(s=t.config.prepare_external_dependency_script(s)),!s)return e("prepare_external_dependency_script returned null");if("head"===t.config.external_scripts_inject_target)r.head.appendChild(s);else{var n,o=r.querySelectorAll("body > script");o.length>0?null==(n=o[0].parentNode)||n.insertBefore(s,o[0]):r.body.appendChild(s)}};null!=r&&r.body?l():null==r||r.addEventListener("DOMContentLoaded",l)};h.__PosthogExtensions__=h.__PosthogExtensions__||{},h.__PosthogExtensions__.loadExternalDependency=(t,i,e)=>{var r="/static/"+i+".js?v="+t.version;if("remote-config"===i&&(r="/array/"+t.config.token+"/config.js"),"toolbar"===i){var s=3e5;r=r+"&t="+Math.floor(Date.now()/s)*s}var n=t.requestRouter.endpointFor("assets",r);Si(t,n,e)},h.__PosthogExtensions__.loadSiteApp=(t,i,e)=>{var r=t.requestRouter.endpointFor("api",i);Si(t,r,e)};var xi="$people_distinct_id",Ti="$device_id",$i="__alias",ki="__timers",Ri="$autocapture_disabled_server_side",Pi="$heatmaps_enabled_server_side",Oi="$exception_capture_enabled_server_side",Ii="$error_tracking_suppression_rules",Ci="$error_tracking_capture_extension_exceptions",Fi="$web_vitals_enabled_server_side",Ai="$dead_clicks_enabled_server_side",Mi="$product_tours_enabled_server_side",Di="$web_vitals_allowed_metrics",Li="$session_recording_remote_config",Ui="$sesid",Ni="$session_is_sampled",ji="$enabled_feature_flags",zi="$early_access_features",Bi="$feature_flag_details",Hi="$stored_person_properties",qi="$stored_group_properties",Wi="$surveys",Vi="$flag_call_reported",Yi="$flag_call_reported_session_id",Gi="$feature_flag_errors",Ji="$feature_flag_evaluated_at",Ki="$user_state",Xi="$client_session_props",Qi="$capture_rate_limit",Zi="$initial_campaign_params",te="$initial_referrer_info",ie="$initial_person_info",ee="$epp",re="__POSTHOG_TOOLBAR__",se="$posthog_cookieless",ne=[xi,$i,"__cmpns",ki,"$session_recording_enabled_server_side",Pi,Ui,ji,Ii,Ki,zi,Bi,qi,Hi,Wi,Vi,Yi,Gi,Ji,Xi,Qi,Zi,te,ee,ie],oe="PostHog loadExternalDependency extension not found.",ae="on_reject",le="always",ue="anonymous",he="identified",de="identified_only",ve="visibilitychange",ce="beforeunload",fe="$pageview",pe="$pageleave",_e="$identify",ge="$groupidentify";function me(t,i){R(t)&&t.forEach(i)}function be(t,i){if(!D(t))if(R(t))t.forEach(i);else if(j(t))t.forEach(((t,e)=>i(t,e)));else for(var e in t)T.call(t,e)&&i(t[e],e)}var ye=function(t){for(var i=arguments.length,e=new Array(i>1?i-1:0),r=1;i>r;r++)e[r-1]=arguments[r];for(var s of e)for(var n in s)void 0!==s[n]&&(t[n]=s[n]);return t};function we(t){for(var i=Object.keys(t),e=i.length,r=new Array(e);e--;)r[e]=[i[e],t[i[e]]];return r}var Ee=function(t){try{return t()}catch(t){return}},Se=function(t){return function(){try{for(var i=arguments.length,e=new Array(i),r=0;i>r;r++)e[r]=arguments[r];return t.apply(this,e)}catch(t){yi.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),yi.critical(t)}}},xe=function(t){var i={};return be(t,(function(t,e){(F(t)&&t.length>0||L(t))&&(i[e]=t)})),i};var Te=["herokuapp.com","vercel.app","netlify.app"];function $e(t){var i=null==t?void 0:t.hostname;if(!F(i))return!1;var e=i.split(".").slice(-2).join(".");for(var r of Te)if(e===r)return!1;return!0}function ke(t,i,e,r){var{capture:s=!1,passive:n=!0}=null!=r?r:{};null==t||t.addEventListener(i,e,{capture:s,passive:n})}function Re(t){return"ph_toolbar_internal"===t.name}Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return L(t)&&isFinite(t)&&Math.floor(t)===t});class Pe{constructor(t){if(this.bytes=t,16!==t.length)throw new TypeError("not 128-bit length")}static fromFieldsV7(t,i,e,r){if(!Number.isInteger(t)||!Number.isInteger(i)||!Number.isInteger(e)||!Number.isInteger(r)||0>t||0>i||0>e||0>r||t>0xffffffffffff||i>4095||e>1073741823||r>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=t/Math.pow(2,40),s[1]=t/Math.pow(2,32),s[2]=t/Math.pow(2,24),s[3]=t/Math.pow(2,16),s[4]=t/Math.pow(2,8),s[5]=t,s[6]=112|i>>>8,s[7]=i,s[8]=128|e>>>24,s[9]=e>>>16,s[10]=e>>>8,s[11]=e,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new Pe(s)}toString(){for(var t="",i=0;this.bytes.length>i;i++)t=t+(this.bytes[i]>>>4).toString(16)+(15&this.bytes[i]).toString(16),3!==i&&5!==i&&7!==i&&9!==i||(t+="-");if(36!==t.length)throw new Error("Invalid UUIDv7 was generated");return t}clone(){return new Pe(this.bytes.slice(0))}equals(t){return 0===this.compareTo(t)}compareTo(t){for(var i=0;16>i;i++){var e=this.bytes[i]-t.bytes[i];if(0!==e)return Math.sign(e)}return 0}}class Oe{constructor(){this.I=0,this.S=0,this.k=new Fe}generate(){var t=this.generateOrAbort();if(C(t)){this.I=0;var i=this.generateOrAbort();if(C(i))throw new Error("Could not generate UUID after timestamp reset");return i}return t}generateOrAbort(){var t=Date.now();if(t>this.I)this.I=t,this.A();else{if(this.I>=t+1e4)return;this.S++,this.S>4398046511103&&(this.I++,this.A())}return Pe.fromFieldsV7(this.I,Math.trunc(this.S/Math.pow(2,30)),this.S&Math.pow(2,30)-1,this.k.nextUint32())}A(){this.S=1024*this.k.nextUint32()+(1023&this.k.nextUint32())}}var Ie,Ce=t=>{if("undefined"!=typeof UUIDV7_DENY_WEAK_RNG&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var i=0;t.length>i;i++)t[i]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};t&&!C(t.crypto)&&crypto.getRandomValues&&(Ce=t=>crypto.getRandomValues(t));class Fe{constructor(){this.T=new Uint32Array(8),this.N=1/0}nextUint32(){return this.T.length>this.N||(Ce(this.T),this.N=0),this.T[this.N++]}}var Ae=()=>Me().toString(),Me=()=>(Ie||(Ie=new Oe)).generate(),De="",Le=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i;var Ue={Yt:()=>!!r,Ut(t){yi.error("cookieStore error: "+t)},Wt(t){if(r){try{for(var i=t+"=",e=r.cookie.split(";").filter((t=>t.length)),s=0;e.length>s;s++){for(var n=e[s];" "==n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(i))return decodeURIComponent(n.substring(i.length,n.length))}}catch(t){}return null}},Gt(t){var i;try{i=JSON.parse(Ue.Wt(t))||{}}catch(t){}return i},Xt(t,i,e,s,n){if(r)try{var o="",a="",l=function(t,i){if(i){var e=function(t,i){if(void 0===i&&(i=r),De)return De;if(!i)return"";if(["localhost","127.0.0.1"].includes(t))return"";for(var e=t.split("."),s=Math.min(e.length,8),n="dmn_chk_"+Ae();!De&&s--;){var o=e.slice(s).join("."),a=n+"=1;domain=."+o+";path=/";i.cookie=a+";max-age=3",i.cookie.includes(n)&&(i.cookie=a+";max-age=0",De=o)}return De}(t);if(!e){var s=(t=>{var i=t.match(Le);return i?i[0]:""})(t);s!==e&&yi.info("Warning: cookie subdomain discovery mismatch",s,e),e=s}return e?"; domain=."+e:""}return""}(r.location.hostname,s);if(e){var u=new Date;u.setTime(u.getTime()+864e5*e),o="; expires="+u.toUTCString()}n&&(a="; secure");var h=t+"="+encodeURIComponent(JSON.stringify(i))+o+"; SameSite=Lax; path=/"+l+a;return h.length>3686.4&&yi.warn("cookieStore warning: large cookie, len="+h.length),r.cookie=h,h}catch(t){return}},Jt(t,i){if(null!=r&&r.cookie)try{Ue.Xt(t,"",-1,i)}catch(t){return}}},Ne=null,je={Yt(){if(!M(Ne))return Ne;var i=!0;if(C(t))i=!1;else try{var e="__mplssupport__";je.Xt(e,"xyz"),'"xyz"'!==je.Wt(e)&&(i=!1),je.Jt(e)}catch(t){i=!1}return i||yi.error("localStorage unsupported; falling back to cookie store"),Ne=i,i},Ut(t){yi.error("localStorage error: "+t)},Wt(i){try{return null==t?void 0:t.localStorage.getItem(i)}catch(t){je.Ut(t)}return null},Gt(t){try{return JSON.parse(je.Wt(t))||{}}catch(t){}return null},Xt(i,e){try{null==t||t.localStorage.setItem(i,JSON.stringify(e))}catch(t){je.Ut(t)}},Jt(i){try{null==t||t.localStorage.removeItem(i)}catch(t){je.Ut(t)}}},ze=[Ti,"distinct_id",Ui,Ni,ee,ie,Ki],Be={},He={Yt:()=>!0,Ut(t){yi.error("memoryStorage error: "+t)},Wt:t=>Be[t]||null,Gt:t=>Be[t]||null,Xt(t,i){Be[t]=i},Jt(t){delete Be[t]}},qe=null,We={Yt(){if(!M(qe))return qe;if(qe=!0,C(t))qe=!1;else try{var i="__support__";We.Xt(i,"xyz"),'"xyz"'!==We.Wt(i)&&(qe=!1),We.Jt(i)}catch(t){qe=!1}return qe},Ut(t){yi.error("sessionStorage error: ",t)},Wt(i){try{return null==t?void 0:t.sessionStorage.getItem(i)}catch(t){We.Ut(t)}return null},Gt(t){try{return JSON.parse(We.Wt(t))||null}catch(t){}return null},Xt(i,e){try{null==t||t.sessionStorage.setItem(i,JSON.stringify(e))}catch(t){We.Ut(t)}},Jt(i){try{null==t||t.sessionStorage.removeItem(i)}catch(t){We.Ut(t)}}};class Ve{constructor(t){this._instance=t}get Rt(){return this._instance.config}get consent(){return this.Kt()?0:this.Qt}isOptedOut(){return this.Rt.cookieless_mode===le||0===this.consent||-1===this.consent&&(this.Rt.opt_out_capturing_by_default||this.Rt.cookieless_mode===ae)}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return 0===this.consent}optInOut(t){this.tr.Xt(this.er,t?1:0,this.Rt.cookie_expiration,this.Rt.cross_subdomain_cookie,this.Rt.secure_cookie)}reset(){this.tr.Jt(this.er,this.Rt.cross_subdomain_cookie)}get er(){var{token:t,opt_out_capturing_cookie_prefix:i,consent_persistence_name:e}=this._instance.config;return e||(i?i+t:"__ph_opt_in_out_"+t)}get Qt(){var t=this.tr.Wt(this.er);return V(t)?1:w(Y,t)?0:-1}get tr(){if(!this.rr){var t=this.Rt.opt_out_capturing_persistence_type;this.rr="localStorage"===t?je:Ue;var i="localStorage"===t?Ue:je;i.Wt(this.er)&&(this.rr.Wt(this.er)||this.optInOut(V(i.Wt(this.er))),i.Jt(this.er,this.Rt.cross_subdomain_cookie))}return this.rr}Kt(){return!!this.Rt.respect_dnt&&[null==e?void 0:e.doNotTrack,null==e?void 0:e.msDoNotTrack,h.doNotTrack].some((t=>V(t)))}}var Ye=wi("[Dead Clicks]"),Ge=()=>!0,Je=t=>{var i,e=!(null==(i=t.instance.persistence)||!i.get_property(Ai)),r=t.instance.config.capture_dead_clicks;return N(r)?r:!!O(r)||e};class Ke{get lazyLoadedDeadClicksAutocapture(){return this.ir}constructor(t,i,e){this.instance=t,this.isEnabled=i,this.onCapture=e,this.startIfEnabledOrStop()}onRemoteConfig(t){"captureDeadClicks"in t&&(this.instance.persistence&&this.instance.persistence.register({[Ai]:t.captureDeadClicks}),this.startIfEnabledOrStop())}startIfEnabledOrStop(){this.isEnabled(this)?this.nr((()=>{this.sr()})):this.stop()}nr(t){var i,e;null!=(i=h.__PosthogExtensions__)&&i.initDeadClicksAutocapture&&t(),null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this.instance,"dead-clicks-autocapture",(i=>{i?Ye.error("failed to load script",i):t()}))}sr(){var t;if(r){if(!this.ir&&null!=(t=h.__PosthogExtensions__)&&t.initDeadClicksAutocapture){var i=O(this.instance.config.capture_dead_clicks)?this.instance.config.capture_dead_clicks:{};i.__onCapture=this.onCapture,this.ir=h.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,i),this.ir.start(r),Ye.info("starting...")}}else Ye.error("`document` not found. Cannot start.")}stop(){this.ir&&(this.ir.stop(),this.ir=void 0,Ye.info("stopping..."))}}var Xe=wi("[SegmentIntegration]");var Qe="posthog-js";function Ze(t,i){var{organization:e,projectId:r,prefix:s,severityAllowList:n=["error"],sendExceptionsToPostHog:o=!0}=void 0===i?{}:i;return i=>{var a,l,u,h,d;if("*"!==n&&!n.includes(i.level)||!t.__loaded)return i;i.tags||(i.tags={});var v=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());i.tags["PostHog Person URL"]=v,t.sessionRecordingStarted()&&(i.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var c,f=(null==(a=i.exception)?void 0:a.values)||[],_=f.map((t=>p({},t,{stacktrace:t.stacktrace?p({},t.stacktrace,{type:"raw",frames:(t.stacktrace.frames||[]).map((t=>p({},t,{platform:"web:javascript"})))}):void 0}))),g={$exception_message:(null==(l=f[0])?void 0:l.value)||i.message,$exception_type:null==(u=f[0])?void 0:u.type,$exception_level:i.level,$exception_list:_,$sentry_event_id:i.event_id,$sentry_exception:i.exception,$sentry_exception_message:(null==(h=f[0])?void 0:h.value)||i.message,$sentry_exception_type:null==(d=f[0])?void 0:d.type,$sentry_tags:i.tags};return e&&r&&(g.$sentry_url=(s||"https://sentry.io/organizations/")+e+"/issues/?project="+r+"&query="+i.event_id),o&&(null==(c=t.exceptions)||c.sendExceptionEvent(g)),i}}class tr{constructor(t,i,e,r,s,n){this.name=Qe,this.setupOnce=function(o){o(Ze(t,{organization:i,projectId:e,prefix:r,severityAllowList:s,sendExceptionsToPostHog:null==n||n}))}}}class ir{constructor(t){this.ar=(t,i,e)=>{e&&(e.noSessionId||e.activityTimeout||e.sessionPastMaximumLength)&&(yi.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:t,changeReason:e}),this.lr=void 0,this._instance.scrollManager.resetContext())},this._instance=t,this.ur()}ur(){var t;this.hr=null==(t=this._instance.sessionManager)?void 0:t.onSessionId(this.ar)}destroy(){var t;null==(t=this.hr)||t.call(this),this.hr=void 0}doPageView(i,e){var r,s=this.cr(i,e);return this.lr={pathname:null!==(r=null==t?void 0:t.location.pathname)&&void 0!==r?r:"",pageViewId:e,timestamp:i},this._instance.scrollManager.resetContext(),s}doPageLeave(t){var i;return this.cr(t,null==(i=this.lr)?void 0:i.pageViewId)}doEvent(){var t;return{$pageview_id:null==(t=this.lr)?void 0:t.pageViewId}}cr(t,i){var e=this.lr;if(!e)return{$pageview_id:i};var r={$pageview_id:i,$prev_pageview_id:e.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var{maxScrollHeight:n,lastScrollY:o,maxScrollY:a,maxContentHeight:l,lastContentY:u,maxContentY:h}=s;if(!(C(n)||C(o)||C(a)||C(l)||C(u)||C(h))){n=Math.ceil(n),o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),h=Math.ceil(h);var d=n>1?G(o/n,0,1,yi):1,v=n>1?G(a/n,0,1,yi):1,c=l>1?G(u/l,0,1,yi):1,f=l>1?G(h/l,0,1,yi):1;r=ye(r,{$prev_pageview_last_scroll:o,$prev_pageview_last_scroll_percentage:d,$prev_pageview_max_scroll:a,$prev_pageview_max_scroll_percentage:v,$prev_pageview_last_content:u,$prev_pageview_last_content_percentage:c,$prev_pageview_max_content:h,$prev_pageview_max_content_percentage:f})}}return e.pathname&&(r.$prev_pageview_pathname=e.pathname),e.timestamp&&(r.$prev_pageview_duration=(t.getTime()-e.timestamp.getTime())/1e3),r}}var er=t=>{var i=null==r?void 0:r.createElement("a");return C(i)?null:(i.href=t,i)},rr=function(t,i){for(var e,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),s=0;r.length>s;s++){var n=r[s].split("=");if(n[0]===i){e=n;break}}if(!R(e)||2>e.length)return"";var o=e[1];try{o=decodeURIComponent(o)}catch(t){yi.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},sr=function(t,i,e){if(!t||!i||!i.length)return t;for(var r=t.split("#"),s=r[1],n=(r[0]||"").split("?"),o=n[1],a=n[0],l=(o||"").split("&"),u=[],h=0;l.length>h;h++){var d=l[h].split("=");R(d)&&(i.includes(d[0])?u.push(d[0]+"="+e):u.push(l[h]))}var v=a;return null!=o&&(v+="?"+u.join("&")),null!=s&&(v+="#"+s),v},nr=function(t,i){var e=t.match(new RegExp(i+"=([^&]*)"));return e?e[1]:null},or="https?://(.*)",ar=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],lr=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...ar],ur="<masked>",hr=["li_fat_id"];function dr(t,i,e){if(!r)return{};var s,n=i?[...ar,...e||[]]:[],o=vr(sr(r.URL,n,ur),t),a=(s={},be(hr,(function(t){var i=Ue.Wt(t);s[t]=i||null})),s);return ye(a,o)}function vr(t,i){var e=lr.concat(i||[]),r={};return be(e,(function(i){var e=rr(t,i);r[i]=e||null})),r}function cr(t){var i=function(t){return t?0===t.search(or+"google.([^/?]*)")?"google":0===t.search(or+"bing.com")?"bing":0===t.search(or+"yahoo.com")?"yahoo":0===t.search(or+"duckduckgo.com")?"duckduckgo":null:null}(t),e="yahoo"!=i?"q":"p",s={};if(!M(i)){s.$search_engine=i;var n=r?rr(r.referrer,e):"";n.length&&(s.ph_keyword=n)}return s}function fr(){return navigator.language||navigator.userLanguage}var pr="$direct";function _r(){return(null==r?void 0:r.referrer)||pr}function gr(t,i){var e=t?[...ar,...i||[]]:[],r=null==s?void 0:s.href.substring(0,1e3);return{r:_r().substring(0,1e3),u:r?sr(r,e,ur):void 0}}function mr(t){var i,{r:e,u:r}=t,s={$referrer:e,$referring_domain:null==e?void 0:e==pr?pr:null==(i=er(e))?void 0:i.host};if(r){s.$current_url=r;var n=er(r);s.$host=null==n?void 0:n.host,s.$pathname=null==n?void 0:n.pathname;var o=vr(r);ye(s,o)}if(e){var a=cr(e);ye(s,a)}return s}function br(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(t){return}}function yr(){try{return(new Date).getTimezoneOffset()}catch(t){return}}var wr=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"];class Er{constructor(t,i){this.Rt=t,this.props={},this.dr=!1,this.vr=(t=>{var i="";return t.token&&(i=t.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),t.persistence_name?"ph_"+t.persistence_name:"ph_"+i+"_posthog"})(t),this.tr=this.pr(t),this.load(),t.debug&&yi.info("Persistence loaded",t.persistence,p({},this.props)),this.update_config(t,t,i),this.save()}isDisabled(){return!!this.gr}pr(i){-1===wr.indexOf(i.persistence.toLowerCase())&&(yi.critical("Unknown persistence type "+i.persistence+"; falling back to localStorage+cookie"),i.persistence="localStorage+cookie");var e=function(i){void 0===i&&(i=[]);var e=[...ze,...i];return p({},je,{Gt(t){try{var i={};try{i=Ue.Gt(t)||{}}catch(t){}var e=ye(i,JSON.parse(je.Wt(t)||"{}"));return je.Xt(t,e),e}catch(t){}return null},Xt(t,i,r,s,n,o){try{je.Xt(t,i,void 0,void 0,o);var a={};e.forEach((t=>{i[t]&&(a[t]=i[t])})),Object.keys(a).length&&Ue.Xt(t,a,r,s,n,o)}catch(t){je.Ut(t)}},Jt(i,e){try{null==t||t.localStorage.removeItem(i),Ue.Jt(i,e)}catch(t){je.Ut(t)}}})}(i.cookie_persisted_properties||[]),r=i.persistence.toLowerCase();return"localstorage"===r&&je.Yt()?je:"localstorage+cookie"===r&&e.Yt()?e:"sessionstorage"===r&&We.Yt()?We:"memory"===r?He:"cookie"===r?Ue:e.Yt()?e:Ue}mr(t){var i=null!=t?t:this.Rt.feature_flag_cache_ttl_ms;if(!i||0>=i)return!1;var e=this.props[Ji];return!e||"number"!=typeof e||Date.now()-e>i}properties(){var t={};return be(this.props,((i,e)=>{if(e===ji&&O(i)){if(!this.mr())for(var r=Object.keys(i),s=0;r.length>s;s++)t["$feature/"+r[s]]=i[r[s]]}else-1===ne.indexOf(e)&&(t[e]=i)})),t}load(){if(!this.gr){var t=this.tr.Gt(this.vr);t&&(this.props=ye({},t))}}save(){this.gr||this.tr.Xt(this.vr,this.props,this.yr,this.br,this.wr,this.Rt.debug)}remove(){this.tr.Jt(this.vr,!1),this.tr.Jt(this.vr,!0)}clear(){this.remove(),this.props={}}register_once(t,i,e){if(O(t)){C(i)&&(i="None"),this.yr=C(e)?this._r:e;var r=!1;if(be(t,((t,e)=>{this.props.hasOwnProperty(e)&&this.props[e]!==i||(this.props[e]=t,r=!0)})),r)return this.save(),!0}return!1}register(t,i){if(O(t)){this.yr=C(i)?this._r:i;var e=!1;if(be(t,((i,r)=>{t.hasOwnProperty(r)&&this.props[r]!==i&&(this.props[r]=i,e=!0)})),e)return this.save(),!0}return!1}unregister(t){t in this.props&&(delete this.props[t],this.save())}update_campaign_params(){if(!this.dr){var t=dr(this.Rt.custom_campaign_params,this.Rt.mask_personal_data_properties,this.Rt.custom_personal_data_properties);I(xe(t))||this.register(t),this.dr=!0}}update_search_keyword(){var t;this.register((t=null==r?void 0:r.referrer)?cr(t):{})}update_referrer_info(){var t;this.register_once({$referrer:_r(),$referring_domain:null!=r&&r.referrer&&(null==(t=er(r.referrer))?void 0:t.host)||pr},void 0)}set_initial_person_info(){this.props[Zi]||this.props[te]||this.register_once({[ie]:gr(this.Rt.mask_personal_data_properties,this.Rt.custom_personal_data_properties)},void 0)}get_initial_props(){var t={};be([te,Zi],(i=>{var e=this.props[i];e&&be(e,(function(i,e){t["$initial_"+S(e)]=i}))}));var i,e,r=this.props[ie];if(r){var s=(i=mr(r),e={},be(i,(function(t,i){e["$initial_"+S(i)]=t})),e);ye(t,s)}return t}safe_merge(t){return be(this.props,(function(i,e){e in t||(t[e]=i)})),t}update_config(t,i,e){if(this._r=this.yr=t.cookie_expiration,this.set_disabled(t.disable_persistence||!!e),this.set_cross_subdomain(t.cross_subdomain_cookie),this.set_secure(t.secure_cookie),t.persistence!==i.persistence||!((t,i)=>{if(t.length!==i.length)return!1;var e=[...t].sort(),r=[...i].sort();return e.every(((t,i)=>t===r[i]))})(t.cookie_persisted_properties||[],i.cookie_persisted_properties||[])){var r=this.pr(t),s=this.props;this.clear(),this.tr=r,this.props=s,this.save()}}set_disabled(t){this.gr=t,this.gr?this.remove():this.save()}set_cross_subdomain(t){t!==this.br&&(this.br=t,this.remove(),this.save())}set_secure(t){t!==this.wr&&(this.wr=t,this.remove(),this.save())}set_event_timer(t,i){var e=this.props[ki]||{};e[t]=i,this.props[ki]=e,this.save()}remove_event_timer(t){var i=(this.props[ki]||{})[t];return C(i)||(delete this.props[ki][t],this.save()),i}get_property(t){return this.props[t]}set_property(t,i){this.props[t]=i,this.save()}}var Sr={Activation:"events",Cancellation:"cancelEvents"},xr={Button:"button",Tab:"tab",Selector:"selector"},Tr={TopLeft:"top_left",TopRight:"top_right",TopCenter:"top_center",MiddleLeft:"middle_left",MiddleRight:"middle_right",MiddleCenter:"middle_center",Left:"left",Center:"center",Right:"right",NextToTrigger:"next_to_trigger"},$r={Top:"top",Left:"left",Right:"right",Bottom:"bottom"},kr={Popover:"popover",API:"api",Widget:"widget",ExternalSurvey:"external_survey"},Rr={Open:"open",MultipleChoice:"multiple_choice",SingleChoice:"single_choice",Rating:"rating",Link:"link"},Pr={NextQuestion:"next_question",End:"end",ResponseBased:"response_based",SpecificQuestion:"specific_question"},Or={Once:"once",Recurring:"recurring",Always:"always"},Ir={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent",ABANDONED:"survey abandoned"},Cr={SURVEY_ID:"$survey_id",SURVEY_NAME:"$survey_name",SURVEY_RESPONSE:"$survey_response",SURVEY_ITERATION:"$survey_iteration",SURVEY_ITERATION_START_DATE:"$survey_iteration_start_date",SURVEY_PARTIALLY_COMPLETED:"$survey_partially_completed",SURVEY_SUBMISSION_ID:"$survey_submission_id",SURVEY_QUESTIONS:"$survey_questions",SURVEY_COMPLETED:"$survey_completed",PRODUCT_TOUR_ID:"$product_tour_id",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Fr={Popover:"popover",Inline:"inline"},Ar={backgroundColor:"#ffffff",textColor:"#1d1f27",buttonColor:"#1d1f27",borderRadius:8,buttonBorderRadius:6,borderColor:"#e5e7eb",fontFamily:"system-ui",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",showOverlay:!0,whiteLabel:!1,dismissOnClickOutside:!0,zIndex:2147483646},Mr={SHOWN:"product tour shown",DISMISSED:"product tour dismissed",COMPLETED:"product tour completed",STEP_SHOWN:"product tour step shown",STEP_COMPLETED:"product tour step completed",BUTTON_CLICKED:"product tour button clicked",STEP_SELECTOR_FAILED:"product tour step selector failed",BANNER_CONTAINER_SELECTOR_FAILED:"product tour banner container selector failed",BANNER_ACTION_CLICKED:"product tour banner action clicked"},Dr={TOUR_ID:"$product_tour_id",TOUR_NAME:"$product_tour_name",TOUR_ITERATION:"$product_tour_iteration",TOUR_RENDER_REASON:"$product_tour_render_reason",TOUR_STEP_ID:"$product_tour_step_id",TOUR_STEP_ORDER:"$product_tour_step_order",TOUR_STEP_TYPE:"$product_tour_step_type",TOUR_DISMISS_REASON:"$product_tour_dismiss_reason",TOUR_BUTTON_TEXT:"$product_tour_button_text",TOUR_BUTTON_ACTION:"$product_tour_button_action",TOUR_BUTTON_LINK:"$product_tour_button_link",TOUR_BUTTON_TOUR_ID:"$product_tour_button_tour_id",TOUR_STEPS_COUNT:"$product_tour_steps_count",TOUR_STEP_SELECTOR:"$product_tour_step_selector",TOUR_STEP_SELECTOR_FOUND:"$product_tour_step_selector_found",TOUR_STEP_ELEMENT_TAG:"$product_tour_step_element_tag",TOUR_STEP_ELEMENT_ID:"$product_tour_step_element_id",TOUR_STEP_ELEMENT_CLASSES:"$product_tour_step_element_classes",TOUR_STEP_ELEMENT_TEXT:"$product_tour_step_element_text",TOUR_ERROR:"$product_tour_error",TOUR_MATCHES_COUNT:"$product_tour_matches_count",TOUR_FAILURE_PHASE:"$product_tour_failure_phase",TOUR_WAITED_FOR_ELEMENT:"$product_tour_waited_for_element",TOUR_WAIT_DURATION_MS:"$product_tour_wait_duration_ms",TOUR_BANNER_SELECTOR:"$product_tour_banner_selector",TOUR_LINKED_SURVEY_ID:"$product_tour_linked_survey_id",USE_MANUAL_SELECTOR:"$use_manual_selector",INFERENCE_DATA_PRESENT:"$inference_data_present",TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},Lr=wi("[RateLimiter]");class Ur{constructor(t){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=t=>{var i=t.text;if(i&&i.length)try{(JSON.parse(i).quota_limited||[]).forEach((t=>{Lr.info((t||"events")+" is quota limited."),this.serverLimits[t]=(new Date).getTime()+6e4}))}catch(t){return void Lr.warn('could not rate limit - continuing. Error: "'+(null==t?void 0:t.message)+'"',{text:i})}},this.instance=t,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var t;return(null==(t=this.instance.config.rate_limiting)?void 0:t.events_per_second)||10}get captureEventsBurstLimit(){var t;return Math.max((null==(t=this.instance.config.rate_limiting)?void 0:t.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(t){var i,e,r;void 0===t&&(t=!1);var{captureEventsBurstLimit:s,captureEventsPerSecond:n}=this,o=(new Date).getTime(),a=null!==(i=null==(e=this.instance.persistence)?void 0:e.get_property(Qi))&&void 0!==i?i:{tokens:s,last:o};a.tokens+=(o-a.last)/1e3*n,a.last=o,a.tokens>s&&(a.tokens=s);var l=1>a.tokens;return l||t||(a.tokens=Math.max(0,a.tokens-1)),!l||this.lastEventRateLimited||t||this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited. Config is set to "+n+" events per second and "+s+" events burst limit."},{skip_client_rate_limiting:!0}),this.lastEventRateLimited=l,null==(r=this.instance.persistence)||r.set_property(Qi,a),{isRateLimited:l,remainingTokens:a.tokens}}isServerRateLimited(t){var i=this.serverLimits[t||"events"]||!1;return!1!==i&&(new Date).getTime()<i}}var Nr=wi("[RemoteConfig]");class jr{constructor(t){this._instance=t}get remoteConfig(){var t;return null==(t=h._POSTHOG_REMOTE_CONFIG)||null==(t=t[this._instance.config.token])?void 0:t.config}Ir(t){var i,e;null!=(i=h.__PosthogExtensions__)&&i.loadExternalDependency?null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,"remote-config",(()=>t(this.remoteConfig))):t()}Cr(t){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback(i){t(i.json)}})}load(){try{if(this.remoteConfig)return Nr.info("Using preloaded remote config",this.remoteConfig),this.Sr(this.remoteConfig),void this.kr();if(this._instance.Tr())return void Nr.warn("Remote config is disabled. Falling back to local config.");this.Ir((t=>{if(!t)return Nr.info("No config found after loading remote JS config. Falling back to JSON."),void this.Cr((t=>{this.Sr(t),this.kr()}));this.Sr(t),this.kr()}))}catch(t){Nr.error("Error loading remote config",t)}}stop(){this.Ar&&(clearInterval(this.Ar),this.Ar=void 0)}refresh(){this._instance.Tr()||"hidden"===(null==r?void 0:r.visibilityState)||this._instance.reloadFeatureFlags()}kr(){var t;if(!this.Ar){var i=null!==(t=this._instance.config.remote_config_refresh_interval_ms)&&void 0!==t?t:3e5;0!==i&&(this.Ar=setInterval((()=>{this.refresh()}),i))}}Sr(t){var i;t||Nr.error("Failed to fetch remote config from PostHog."),this._instance.Sr(null!=t?t:{}),!1!==(null==t?void 0:t.hasFeatureFlags)&&(this._instance.config.advanced_disable_feature_flags_on_first_load||null==(i=this._instance.featureFlags)||i.ensureFlagsLoaded())}}var zr=["fatal","error","warning","log","info","debug"],Br={GZipJS:"gzip-js",Base64:"base64"},Hr=Uint8Array,qr=Uint16Array,Wr=Uint32Array,Vr=new Hr([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Yr=new Hr([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Gr=new Hr([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Jr=function(t,i){for(var e=new qr(31),r=0;31>r;++r)e[r]=i+=1<<t[r-1];var s=new Wr(e[30]);for(r=1;30>r;++r)for(var n=e[r];e[r+1]>n;++n)s[n]=n-e[r]<<5|r;return[e,s]},Kr=Jr(Vr,2),Xr=Kr[1];Kr[0][28]=258,Xr[258]=28;for(var Qr=Jr(Yr,0)[1],Zr=new qr(32768),ts=0;32768>ts;++ts){var is=(43690&ts)>>>1|(21845&ts)<<1;Zr[ts]=((65280&(is=(61680&(is=(52428&is)>>>2|(13107&is)<<2))>>>4|(3855&is)<<4))>>>8|(255&is)<<8)>>>1}var es=function(t,i,e){for(var r=t.length,s=0,n=new qr(i);r>s;++s)++n[t[s]-1];var o,a=new qr(i);for(s=0;i>s;++s)a[s]=a[s-1]+n[s-1]<<1;if(e){o=new qr(1<<i);var l=15-i;for(s=0;r>s;++s)if(t[s])for(var u=s<<4|t[s],h=i-t[s],d=a[t[s]-1]++<<h,v=d|(1<<h)-1;v>=d;++d)o[Zr[d]>>>l]=u}else for(o=new qr(r),s=0;r>s;++s)o[s]=Zr[a[t[s]-1]++]>>>15-t[s];return o},rs=new Hr(288);for(ts=0;144>ts;++ts)rs[ts]=8;for(ts=144;256>ts;++ts)rs[ts]=9;for(ts=256;280>ts;++ts)rs[ts]=7;for(ts=280;288>ts;++ts)rs[ts]=8;var ss=new Hr(32);for(ts=0;32>ts;++ts)ss[ts]=5;var ns=es(rs,9,0),os=es(ss,5,0),as=function(t){return(t/8>>0)+(7&t&&1)},ls=function(t,i,e){(null==e||e>t.length)&&(e=t.length);var r=new(t instanceof qr?qr:t instanceof Wr?Wr:Hr)(e-i);return r.set(t.subarray(i,e)),r},us=function(t,i,e){var r=i/8>>0;t[r]|=e<<=7&i,t[r+1]|=e>>>8},hs=function(t,i,e){var r=i/8>>0;t[r]|=e<<=7&i,t[r+1]|=e>>>8,t[r+2]|=e>>>16},ds=function(t,i){for(var e=[],r=0;t.length>r;++r)t[r]&&e.push({s:r,f:t[r]});var s=e.length,n=e.slice();if(!s)return[new Hr(0),0];if(1==s){var o=new Hr(e[0].s+1);return o[e[0].s]=1,[o,1]}e.sort((function(t,i){return t.f-i.f})),e.push({s:-1,f:25001});var a=e[0],l=e[1],u=0,h=1,d=2;for(e[0]={s:-1,f:a.f+l.f,l:a,r:l};h!=s-1;)a=e[e[d].f>e[u].f?u++:d++],l=e[u!=h&&e[d].f>e[u].f?u++:d++],e[h++]={s:-1,f:a.f+l.f,l:a,r:l};var v=n[0].s;for(r=1;s>r;++r)n[r].s>v&&(v=n[r].s);var c=new qr(v+1),f=vs(e[h-1],c,0);if(f>i){r=0;var p=0,_=f-i,g=1<<_;for(n.sort((function(t,i){return c[i.s]-c[t.s]||t.f-i.f}));s>r;++r){var m=n[r].s;if(i>=c[m])break;p+=g-(1<<f-c[m]),c[m]=i}for(p>>>=_;p>0;){var b=n[r].s;i>c[b]?p-=1<<i-c[b]++-1:++r}for(;r>=0&&p;--r){var y=n[r].s;c[y]==i&&(--c[y],++p)}f=i}return[new Hr(c),f]},vs=function(t,i,e){return-1==t.s?Math.max(vs(t.l,i,e+1),vs(t.r,i,e+1)):i[t.s]=e},cs=function(t){for(var i=t.length;i&&!t[--i];);for(var e=new qr(++i),r=0,s=t[0],n=1,o=function(t){e[r++]=t},a=1;i>=a;++a)if(t[a]==s&&a!=i)++n;else{if(!s&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(s),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(s);n=1,s=t[a]}return[e.subarray(0,r),i]},fs=function(t,i){for(var e=0,r=0;i.length>r;++r)e+=t[r]*i[r];return e},ps=function(t,i,e){var r=e.length,s=as(i+2);t[s]=255&r,t[s+1]=r>>>8,t[s+2]=255^t[s],t[s+3]=255^t[s+1];for(var n=0;r>n;++n)t[s+n+4]=e[n];return 8*(s+4+r)},_s=function(t,i,e,r,s,n,o,a,l,u,h){us(i,h++,e),++s[256];for(var d=ds(s,15),v=d[0],c=d[1],f=ds(n,15),p=f[0],_=f[1],g=cs(v),m=g[0],b=g[1],y=cs(p),w=y[0],E=y[1],S=new qr(19),x=0;m.length>x;++x)S[31&m[x]]++;for(x=0;w.length>x;++x)S[31&w[x]]++;for(var T=ds(S,7),k=T[0],R=T[1],P=19;P>4&&!k[Gr[P-1]];--P);var O,I,C,F,A=u+5<<3,M=fs(s,rs)+fs(n,ss)+o,D=fs(s,v)+fs(n,p)+o+14+3*P+fs(S,k)+(2*S[16]+3*S[17]+7*S[18]);if(M>=A&&D>=A)return ps(i,h,t.subarray(l,l+u));if(us(i,h,1+(M>D)),h+=2,M>D){O=es(v,c,0),I=v,C=es(p,_,0),F=p;var L=es(k,R,0);for(us(i,h,b-257),us(i,h+5,E-1),us(i,h+10,P-4),h+=14,x=0;P>x;++x)us(i,h+3*x,k[Gr[x]]);h+=3*P;for(var U=[m,w],N=0;2>N;++N){var j=U[N];for(x=0;j.length>x;++x)us(i,h,L[z=31&j[x]]),h+=k[z],z>15&&(us(i,h,j[x]>>>5&127),h+=j[x]>>>12)}}else O=ns,I=rs,C=os,F=ss;for(x=0;a>x;++x)if(r[x]>255){var z;hs(i,h,O[257+(z=r[x]>>>18&31)]),h+=I[z+257],z>7&&(us(i,h,r[x]>>>23&31),h+=Vr[z]);var B=31&r[x];hs(i,h,C[B]),h+=F[B],B>3&&(hs(i,h,r[x]>>>5&8191),h+=Yr[B])}else hs(i,h,O[r[x]]),h+=I[r[x]];return hs(i,h,O[256]),h+I[256]},gs=new Wr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),ms=function(){for(var t=new Wr(256),i=0;256>i;++i){for(var e=i,r=9;--r;)e=(1&e&&3988292384)^e>>>1;t[i]=e}return t}(),bs=function(t,i,e){for(;e;++i)t[i]=e,e>>>=8};function ys(t,i){void 0===i&&(i={});var e=function(){var t=4294967295;return{p(i){for(var e=t,r=0;i.length>r;++r)e=ms[255&e^i[r]]^e>>>8;t=e},d(){return 4294967295^t}}}(),r=t.length;e.p(t);var s,n,o,a,l,u=(a=10+((s=i).filename&&s.filename.length+1||0),l=8,function(t,i,e,r,s,n){var o=t.length,a=new Hr(r+o+5*(1+Math.floor(o/7e3))+s),l=a.subarray(r,a.length-s),u=0;if(!i||8>o)for(var h=0;o>=h;h+=65535){var d=h+65535;o>d?u=ps(l,u,t.subarray(h,d)):(l[h]=!0,u=ps(l,u,t.subarray(h,o)))}else{for(var v=gs[i-1],c=v>>>13,f=8191&v,p=(1<<e)-1,_=new qr(32768),g=new qr(p+1),m=Math.ceil(e/3),b=2*m,y=function(i){return(t[i]^t[i+1]<<m^t[i+2]<<b)&p},w=new Wr(25e3),E=new qr(288),S=new qr(32),x=0,T=0,k=(h=0,0),R=0,P=0;o>h;++h){var O=y(h),I=32767&h,C=g[O];if(_[I]=C,g[O]=I,h>=R){var F=o-h;if((x>7e3||k>24576)&&F>423){u=_s(t,l,0,w,E,S,T,k,P,h-P,u),k=x=T=0,P=h;for(var A=0;286>A;++A)E[A]=0;for(A=0;30>A;++A)S[A]=0}var M=2,D=0,L=f,U=I-C&32767;if(F>2&&O==y(h-U))for(var N=Math.min(c,F)-1,j=Math.min(32767,h),z=Math.min(258,F);j>=U&&--L&&I!=C;){if(t[h+M]==t[h+M-U]){for(var B=0;z>B&&t[h+B]==t[h+B-U];++B);if(B>M){if(M=B,D=U,B>N)break;var H=Math.min(U,B-2),q=0;for(A=0;H>A;++A){var W=h-U+A+32768&32767,V=W-_[W]+32768&32767;V>q&&(q=V,C=W)}}}U+=(I=C)-(C=_[I])+32768&32767}if(D){w[k++]=268435456|Xr[M]<<18|Qr[D];var Y=31&Xr[M],G=31&Qr[D];T+=Vr[Y]+Yr[G],++E[257+Y],++S[G],R=h+M,++x}else w[k++]=t[h],++E[t[h]]}}u=_s(t,l,!0,w,E,S,T,k,P,h-P,u)}return ls(a,0,r+as(u)+s)}(n=t,null==(o=i).level?6:o.level,null==o.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),h=u.length;return function(t,i){var e=i.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=2>i.level?4:9==i.level?2:0,t[9]=3,0!=i.mtime&&bs(t,4,Math.floor(new Date(i.mtime||Date.now())/1e3)),e){t[3]=8;for(var r=0;e.length>=r;++r)t[r+10]=e.charCodeAt(r)}}(u,i),bs(u,h-8,e.d()),bs(u,h-4,r),u}var ws=!!o||!!n,Es="text/plain",Ss=function(t,i,e){var r;void 0===e&&(e=!0);var[s,n]=t.split("?"),o=p({},i),a=null!==(r=null==n?void 0:n.split("&").map((t=>{var i,[r,s]=t.split("="),n=e&&null!==(i=o[r])&&void 0!==i?i:s;return delete o[r],r+"="+n})))&&void 0!==r?r:[],l=function(t,i){var e,r;void 0===i&&(i="&");var s=[];return be(t,(function(t,i){C(t)||C(i)||"undefined"===i||(e=encodeURIComponent((t=>t instanceof File)(t)?t.name:t.toString()),r=encodeURIComponent(i),s[s.length]=r+"="+e)})),s.join(i)}(o);return l&&a.push(l),s+"?"+a.join("&")},xs=(t,i)=>JSON.stringify(t,((t,i)=>"bigint"==typeof i?i.toString():i),i),Ts=t=>{if(t.zt)return t.zt;var{data:i,compression:e}=t;if(i){if(e===Br.GZipJS){var r=ys(function(t,i){var e=t.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(t);for(var r=new Hr(t.length+(t.length>>>1)),s=0,n=function(t){r[s++]=t},o=0;e>o;++o){if(s+5>r.length){var a=new Hr(s+8+(e-o<<1));a.set(r),r=a}var l=t.charCodeAt(o);128>l?n(l):2048>l?(n(192|l>>>6),n(128|63&l)):l>55295&&57344>l?(n(240|(l=65536+(1047552&l)|1023&t.charCodeAt(++o))>>>18),n(128|l>>>12&63),n(128|l>>>6&63),n(128|63&l)):(n(224|l>>>12),n(128|l>>>6&63),n(128|63&l))}return ls(r,0,s)}(xs(i)),{mtime:0});return{contentType:Es,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(e===Br.Base64){var s=function(t){return t?btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,((t,i)=>String.fromCharCode(parseInt(i,16))))):t}(xs(i)),n=(t=>"data="+encodeURIComponent("string"==typeof t?t:xs(t)))(s);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=xs(i);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},$s=function(){var t=f((function*(t){var i=xs(t.data),e=yield function(t,i){return g.apply(this,arguments)}(i,v.DEBUG);if(!e)return t;var r=yield e.arrayBuffer();return p({},t,{zt:{contentType:Es,body:r,estimatedSize:r.byteLength}})}));return function(i){return t.apply(this,arguments)}}(),ks=[];n&&ks.push({transport:"fetch",method(t){var i,e,{contentType:r,body:s,estimatedSize:o}=null!==(i=Ts(t))&&void 0!==i?i:{},l=new Headers;be(t.headers,(function(t,i){l.append(i,t)})),r&&l.append("Content-Type",r);var u=t.url,h=null;if(a){var d=new a;h={signal:d.signal,timeout:setTimeout((()=>d.abort()),t.timeout)}}n(u,p({method:(null==t?void 0:t.method)||"GET",headers:l,keepalive:"POST"===t.method&&52428.8>(o||0),body:s,signal:null==(e=h)?void 0:e.signal},t.fetchOptions)).then((i=>i.text().then((e=>{var r={statusCode:i.status,text:e};if(200===i.status)try{r.json=JSON.parse(e)}catch(t){yi.error(t)}null==t.callback||t.callback(r)})))).catch((i=>{yi.error(i),null==t.callback||t.callback({statusCode:0,error:i})})).finally((()=>h?clearTimeout(h.timeout):null))}}),o&&ks.push({transport:"XHR",method(t){var i,e=new o;e.open(t.method||"GET",t.url,!0);var{contentType:r,body:s}=null!==(i=Ts(t))&&void 0!==i?i:{};be(t.headers,(function(t,i){e.setRequestHeader(i,t)})),r&&e.setRequestHeader("Content-Type",r),t.timeout&&(e.timeout=t.timeout),t.disableXHRCredentials||(e.withCredentials=!0),e.onreadystatechange=()=>{if(4===e.readyState){var i={statusCode:e.status,text:e.responseText};if(200===e.status)try{i.json=JSON.parse(e.responseText)}catch(t){}null==t.callback||t.callback(i)}},e.send(s)}}),null!=e&&e.sendBeacon&&ks.push({transport:"sendBeacon",method(t){var i=Ss(t.url,{beacon:"1"});try{var r,{contentType:s,body:n}=null!==(r=Ts(t))&&void 0!==r?r:{};if(!n)return;var o=n instanceof Blob?n:new Blob([n],{type:s});e.sendBeacon(i,o)}catch(t){}}});var Rs=3e3;class Ps{constructor(t,i){this.Er=!0,this.Rr=[],this.Nr=G((null==i?void 0:i.flush_interval_ms)||Rs,250,5e3,yi.createLogger("flush interval"),Rs),this.Mr=t}enqueue(t){this.Rr.push(t),this.Fr||this.Or()}unload(){this.Pr();var t=this.Rr.length>0?this.Lr():{},i=Object.values(t);[...i.filter((t=>0===t.url.indexOf("/e"))),...i.filter((t=>0!==t.url.indexOf("/e")))].map((t=>{this.Mr(p({},t,{transport:"sendBeacon"}))}))}enable(){this.Er=!1,this.Or()}Or(){var t=this;this.Er||(this.Fr=setTimeout((()=>{if(this.Pr(),this.Rr.length>0){var i=this.Lr(),e=function(){var e=i[r],s=(new Date).getTime();e.data&&R(e.data)&&be(e.data,(t=>{t.offset=Math.abs(t.timestamp-s),delete t.timestamp})),t.Mr(e)};for(var r in i)e()}}),this.Nr))}Pr(){clearTimeout(this.Fr),this.Fr=void 0}Lr(){var t={};return be(this.Rr,(i=>{var e,r=i,s=(r?r.batchKey:null)||r.url;C(t[s])&&(t[s]=p({},r,{data:[]})),null==(e=t[s].data)||e.push(r.data)})),this.Rr=[],t}}var Os=["retriesPerformedSoFar"];class Is{constructor(i){this.Dr=!1,this.Br=3e3,this.Rr=[],this._instance=i,this.Rr=[],this.jr=!0,!C(t)&&"onLine"in t.navigator&&(this.jr=t.navigator.onLine,this.qr=()=>{this.jr=!0,this.Zr()},this.$r=()=>{this.jr=!1},ke(t,"online",this.qr),ke(t,"offline",this.$r))}get length(){return this.Rr.length}retriableRequest(t){var{retriesPerformedSoFar:i}=t,e=_(t,Os);U(i)&&(e.url=Ss(e.url,{retry_count:i})),this._instance._send_request(p({},e,{callback:t=>{200===t.statusCode||t.statusCode>=400&&500>t.statusCode||(null!=i?i:0)>=10?null==e.callback||e.callback(t):this.Hr(p({retriesPerformedSoFar:i},e))}}))}Hr(t){var i=t.retriesPerformedSoFar||0;t.retriesPerformedSoFar=i+1;var e=function(t){var i=3e3*Math.pow(2,t),e=i/2,r=Math.min(18e5,i),s=Math.random()-.5;return Math.ceil(r+s*(r-e))}(i),r=Date.now()+e;this.Rr.push({retryAt:r,requestOptions:t});var s="Enqueued failed request for retry in "+e;navigator.onLine||(s+=" (Browser is offline)"),yi.warn(s),this.Dr||(this.Dr=!0,this.Vr())}Vr(){if(this.zr&&clearTimeout(this.zr),0===this.Rr.length)return this.Dr=!1,void(this.zr=void 0);this.zr=setTimeout((()=>{this.jr&&this.Rr.length>0&&this.Zr(),this.Vr()}),this.Br)}Zr(){var t=Date.now(),i=[],e=this.Rr.filter((e=>t>e.retryAt||(i.push(e),!1)));if(this.Rr=i,e.length>0)for(var{requestOptions:r}of e)this.retriableRequest(r)}unload(){for(var{requestOptions:i}of(this.zr&&(clearTimeout(this.zr),this.zr=void 0),this.Dr=!1,C(t)||(this.qr&&(t.removeEventListener("online",this.qr),this.qr=void 0),this.$r&&(t.removeEventListener("offline",this.$r),this.$r=void 0)),this.Rr))try{this._instance._send_request(p({},i,{transport:"sendBeacon"}))}catch(t){yi.error(t)}this.Rr=[]}}class Cs{constructor(t){this.Yr=()=>{var t,i,e,r;this.Ur||(this.Ur={});var s=this.scrollElement(),n=this.scrollY(),o=s?Math.max(0,s.scrollHeight-s.clientHeight):0,a=n+((null==s?void 0:s.clientHeight)||0),l=(null==s?void 0:s.scrollHeight)||0;this.Ur.lastScrollY=Math.ceil(n),this.Ur.maxScrollY=Math.max(n,null!==(t=this.Ur.maxScrollY)&&void 0!==t?t:0),this.Ur.maxScrollHeight=Math.max(o,null!==(i=this.Ur.maxScrollHeight)&&void 0!==i?i:0),this.Ur.lastContentY=a,this.Ur.maxContentY=Math.max(a,null!==(e=this.Ur.maxContentY)&&void 0!==e?e:0),this.Ur.maxContentHeight=Math.max(l,null!==(r=this.Ur.maxContentHeight)&&void 0!==r?r:0)},this._instance=t}get Wr(){return this._instance.config.scroll_root_selector}getContext(){return this.Ur}resetContext(){var t=this.Ur;return setTimeout(this.Yr,0),t}startMeasuringScrollPosition(){ke(t,"scroll",this.Yr,{capture:!0}),ke(t,"scrollend",this.Yr,{capture:!0}),ke(t,"resize",this.Yr)}scrollElement(){if(!this.Wr)return null==t?void 0:t.document.documentElement;var i=R(this.Wr)?this.Wr:[this.Wr];for(var e of i){var r=null==t?void 0:t.document.querySelector(e);if(r)return r}}scrollY(){if(this.Wr){var i=this.scrollElement();return i&&i.scrollTop||0}return t&&(t.scrollY||t.pageYOffset||t.document.documentElement.scrollTop)||0}scrollX(){if(this.Wr){var i=this.scrollElement();return i&&i.scrollLeft||0}return t&&(t.scrollX||t.pageXOffset||t.document.documentElement.scrollLeft)||0}}var Fs=t=>gr(null==t?void 0:t.config.mask_personal_data_properties,null==t?void 0:t.config.custom_personal_data_properties);class As{constructor(t,i,e,r){this.Gr=t=>{var i=this.Xr();if(!i||i.sessionId!==t){var e={sessionId:t,props:this.Jr(this._instance)};this.Kr.register({[Xi]:e})}},this._instance=t,this.Qr=i,this.Kr=e,this.Jr=r||Fs,this.Qr.onSessionId(this.Gr)}Xr(){return this.Kr.props[Xi]}getSetOnceProps(){var t,i=null==(t=this.Xr())?void 0:t.props;return i?"r"in i?mr(i):{$referring_domain:i.referringDomain,$pathname:i.initialPathName,utm_source:i.utm_source,utm_campaign:i.utm_campaign,utm_medium:i.utm_medium,utm_content:i.utm_content,utm_term:i.utm_term}:{}}getSessionProps(){var t={};return be(xe(this.getSetOnceProps()),((i,e)=>{"$current_url"===e&&(e="url"),t["$session_entry_"+S(e)]=i})),t}}class Ms{constructor(){this.ti={}}on(t,i){return this.ti[t]||(this.ti[t]=[]),this.ti[t].push(i),()=>{this.ti[t]=this.ti[t].filter((t=>t!==i))}}emit(t,i){for(var e of this.ti[t]||[])e(i);for(var r of this.ti["*"]||[])r(t,i)}}var Ds=wi("[SessionId]");class Ls{on(t,i){return this.ei.on(t,i)}constructor(t,i,e){var r;if(this.ri=[],this.ii=void 0,this.ei=new Ms,this.ni=(t,i)=>!(!U(t)||!U(i))&&Math.abs(t-i)>this.sessionTimeoutMs,!t.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(t.config.cookieless_mode===le)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Rt=t.config,this.Kr=t.persistence,this.si=void 0,this.oi=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.ai=i||Ae,this.li=e||Ae;var s=this.Rt.persistence_name||this.Rt.token;if(this._sessionTimeoutMs=1e3*G(this.Rt.session_idle_timeout_seconds||1800,60,36e3,Ds.createLogger("session_idle_timeout_seconds"),1800),t.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.ui(),this.hi="ph_"+s+"_window_id",this.ci="ph_"+s+"_primary_window_exists",this.di()){var n=We.Gt(this.hi),o=We.Gt(this.ci);n&&!o?this.si=n:We.Jt(this.hi),We.Xt(this.ci,!0)}if(null!=(r=this.Rt.bootstrap)&&r.sessionID)try{var a=(t=>{var i=this.Rt.bootstrap.sessionID.replace(/-/g,"");if(32!==i.length)throw new Error("Not a valid UUID");if("7"!==i[12])throw new Error("Not a UUIDv7");return parseInt(i.substring(0,12),16)})();this.vi(this.Rt.bootstrap.sessionID,(new Date).getTime(),a)}catch(t){Ds.error("Invalid sessionID in bootstrap",t)}this.fi()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(t){return C(this.ri)&&(this.ri=[]),this.ri.push(t),this.oi&&t(this.oi,this.si),()=>{this.ri=this.ri.filter((i=>i!==t))}}di(){return"memory"!==this.Rt.persistence&&!this.Kr.gr&&We.Yt()}pi(t){t!==this.si&&(this.si=t,this.di()&&We.Xt(this.hi,t))}gi(){return this.si?this.si:this.di()?We.Gt(this.hi):null}vi(t,i,e){t===this.oi&&i===this._sessionActivityTimestamp&&e===this._sessionStartTimestamp||(this._sessionStartTimestamp=e,this._sessionActivityTimestamp=i,this.oi=t,this.Kr.register({[Ui]:[i,t,e]}))}mi(){var t=this.Kr.props[Ui];return R(t)&&2===t.length&&t.push(t[0]),t||[0,null,0]}resetSessionId(){this.vi(null,null,null)}destroy(){clearTimeout(this.yi),this.yi=void 0,this.ii&&t&&(t.removeEventListener(ce,this.ii,{capture:!1}),this.ii=void 0),this.ri=[]}fi(){this.ii=()=>{this.di()&&We.Jt(this.ci)},ke(t,ce,this.ii,{capture:!1})}checkAndGetSessionAndWindowId(t,i){if(void 0===t&&(t=!1),void 0===i&&(i=null),this.Rt.cookieless_mode===le)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var e=i||(new Date).getTime(),[r,s,n]=this.mi(),o=this.gi(),a=U(n)&&Math.abs(e-n)>864e5,l=!1,u=!s,h=!u&&!t&&this.ni(e,r);u||h||a?(s=this.ai(),o=this.li(),Ds.info("new session ID generated",{sessionId:s,windowId:o,changeReason:{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}}),n=e,l=!0):o||(o=this.li(),l=!0);var d=U(r)&&t&&!a?r:e,v=U(n)?n:(new Date).getTime();return this.pi(o),this.vi(s,d,v),t||this.ui(),l&&this.ri.forEach((t=>t(s,o,l?{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}:void 0))),{sessionId:s,windowId:o,sessionStartTimestamp:v,changeReason:l?{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}:void 0,lastActivityTimestamp:r}}ui(){clearTimeout(this.yi),this.yi=setTimeout((()=>{var[t]=this.mi();if(this.ni((new Date).getTime(),t)){var i=this.oi;this.resetSessionId(),this.ei.emit("forcedIdleReset",{idleSessionId:i})}}),1.1*this.sessionTimeoutMs)}}var Us=function(t,i){if(!t)return!1;var e=t.userAgent;if(e&&y(e,i))return!0;try{var r=null==t?void 0:t.userAgentData;if(null!=r&&r.brands&&r.brands.some((t=>y(null==t?void 0:t.brand,i))))return!0}catch(t){}return!!t.webdriver},Ns=function(t,i){if(!function(t){try{new RegExp(t)}catch(t){return!1}return!0}(i))return!1;try{return new RegExp(i).test(t)}catch(t){return!1}};function js(t,i,e){return xs({distinct_id:t,userPropertiesToSet:i,userPropertiesToSetOnce:e})}var zs={exact:(t,i)=>i.some((i=>t.some((t=>i===t)))),is_not:(t,i)=>i.every((i=>t.every((t=>i!==t)))),regex:(t,i)=>i.some((i=>t.some((t=>Ns(i,t))))),not_regex:(t,i)=>i.every((i=>t.every((t=>!Ns(i,t))))),icontains:(t,i)=>i.map(Bs).some((i=>t.map(Bs).some((t=>i.includes(t))))),not_icontains:(t,i)=>i.map(Bs).every((i=>t.map(Bs).every((t=>!i.includes(t))))),gt:(t,i)=>i.some((i=>{var e=parseFloat(i);return!isNaN(e)&&t.some((t=>e>parseFloat(t)))})),lt:(t,i)=>i.some((i=>{var e=parseFloat(i);return!isNaN(e)&&t.some((t=>e<parseFloat(t)))}))},Bs=t=>t.toLowerCase();function Hs(t,i){return!t||Object.entries(t).every((t=>{var[e,r]=t,s=null==i?void 0:i[e];if(C(s)||M(s))return!1;var n=[String(s)],o=zs[r.operator];return!!o&&o(r.values,n)}))}var qs="custom",Ws="i.posthog.com";class Vs{constructor(t){this.bi={},this.instance=t}get apiHost(){var t=this.instance.config.api_host.trim().replace(/\/$/,"");return"https://app.posthog.com"===t?"https://us.i.posthog.com":t}get flagsApiHost(){var t=this.instance.config.flags_api_host;return t?t.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var t,i=null==(t=this.instance.config.ui_host)?void 0:t.replace(/\/$/,"");return i||(i=this.apiHost.replace("."+Ws,".posthog.com")),"https://app.posthog.com"===i?"https://us.posthog.com":i}get region(){return this.bi[this.apiHost]||(this.bi[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":qs),this.bi[this.apiHost]}endpointFor(t,i){if(void 0===i&&(i=""),i&&(i="/"===i[0]?i:"/"+i),"ui"===t)return this.uiHost+i;if("flags"===t)return this.flagsApiHost+i;if(this.region===qs)return this.apiHost+i;var e=Ws+i;switch(t){case"assets":return"https://"+this.region+"-assets."+e;case"api":return"https://"+this.region+"."+e}}}var Ys=wi("[Surveys]"),Gs="seenSurvey_",Js=(t,i)=>{var e="$survey_"+i+"/"+t.id;return t.current_iteration&&t.current_iteration>0&&(e="$survey_"+i+"/"+t.id+"/"+t.current_iteration),e},Ks=t=>((t,i)=>{var e=""+Gs+i.id;return i.current_iteration&&i.current_iteration>0&&(e=""+Gs+i.id+"_"+i.current_iteration),e})(0,t),Xs=[kr.Popover,kr.Widget,kr.API],Qs={ignoreConditions:!1,ignoreDelay:!1,displayType:Fr.Popover},Zs=wi("[PostHog ExternalIntegrations]"),tn={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class en{constructor(t){this._instance=t}nr(t,i){var e;null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,t,(t=>{if(t)return Zs.error("failed to load script",t);i()}))}startIfEnabledOrStop(){var t=this,i=function(i){var e,s,n;!r||null!=(e=h.__PosthogExtensions__)&&null!=(e=e.integrations)&&e[i]||t.nr(tn[i],(()=>{var e;null==(e=h.__PosthogExtensions__)||null==(e=e.integrations)||null==(e=e[i])||e.start(t._instance)})),!r&&null!=(s=h.__PosthogExtensions__)&&null!=(s=s.integrations)&&s[i]&&(null==(n=h.__PosthogExtensions__)||null==(n=n.integrations)||null==(n=n[i])||n.stop())};for(var[e,r]of Object.entries(null!==(s=this._instance.config.integrations)&&void 0!==s?s:{})){var s;i(e)}}}var rn={},sn=0,nn=()=>{},on='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',an="Surveys module not available",ln="sanitize_properties is deprecated. Use before_send instead",un="Invalid value for property_denylist config: ",hn="posthog",dn=!ws&&-1===(null==u?void 0:u.indexOf("MSIE"))&&-1===(null==u?void 0:u.indexOf("Mozilla")),vn=i=>{var e;return p({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,token:"",autocapture:!0,cross_subdomain_cookie:$e(null==r?void 0:r.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:nn,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:null!=i?i:"unset",__preview_deferred_init_extensions:!1,debug:s&&F(null==s?void 0:s.search)&&-1!==s.search.indexOf("__posthog_debug=true")||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disable_external_dependency_loading:!1,enable_recording_console_log:void 0,secure_cookie:"https:"===(null==t||null==(e=t.location)?void 0:e.protocol),ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(t){yi.error("Bad HTTP status: "+t.statusCode+" "+t.text)},get_device_id:t=>t,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:de,before_send:void 0,request_queue_config:{flush_interval_ms:Rs},error_tracking:{},_onCapture:nn,__preview_eager_load_replay:!1},(t=>({rageclick:!t||"2025-11-30">t||{content_ignorelist:!0},capture_pageview:!t||"2025-05-24">t||"history_change",session_recording:t&&t>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:t&&t>="2026-01-30"?"head":"body",internal_or_test_user_hostname:t&&t>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0}))(i))},cn=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["store_google","save_campaign_params"],["verbose","debug"]],fn=t=>{var i={};for(var[e,r]of cn)C(t[e])||(i[r]=t[e]);var s=ye({},i,t);return R(t.property_blacklist)&&(C(t.property_denylist)?s.property_denylist=t.property_blacklist:R(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:yi.error(un+t.property_denylist)),s};class pn{constructor(){this.__forceAllowLocalhost=!1}get wi(){return this.__forceAllowLocalhost}set wi(t){yi.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=t}}class _n{Ii(t,i){if(t){var e=this.Ci.indexOf(t);-1!==e&&this.Ci.splice(e,1)}return this.Ci.push(i),null==i.initialize||i.initialize(),i}get decideEndpointWasHit(){var t,i;return null!==(t=null==(i=this.featureFlags)?void 0:i.hasLoadedFlags)&&void 0!==t&&t}get flagsEndpointWasHit(){var t,i;return null!==(t=null==(i=this.featureFlags)?void 0:i.hasLoadedFlags)&&void 0!==t&&t}constructor(){var t;this.webPerformance=new pn,this.Si=!1,this.version=v.LIB_VERSION,this.ki=new Ms,this.Ci=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=vn(),this.SentryIntegration=tr,this.sentryIntegration=t=>function(t,i){var e=Ze(t,i);return{name:Qe,processEvent:t=>e(t)}}(this,t),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.xi=!1,this.Ti=null,this.Ai=null,this.Ei=null,this.scrollManager=new Cs(this),this.pageViewManager=new ir(this),this.rateLimiter=new Ur(this),this.requestRouter=new Vs(this),this.consent=new Ve(this),this.externalIntegrations=new en(this);var i=null!==(t=_n.__defaultExtensionClasses)&&void 0!==t?t:{};this.featureFlags=i.featureFlags&&new i.featureFlags(this),this.toolbar=i.toolbar&&new i.toolbar(this),this.surveys=i.surveys&&new i.surveys(this),this.conversations=i.conversations&&new i.conversations(this),this.logs=i.logs&&new i.logs(this),this.experiments=i.experiments&&new i.experiments(this),this.exceptions=i.exceptions&&new i.exceptions(this),this.people={set:(t,i,e)=>{var r=F(t)?{[t]:i}:t;this.setPersonProperties(r),null==e||e({})},set_once:(t,i,e)=>{var r=F(t)?{[t]:i}:t;this.setPersonProperties(void 0,r),null==e||e({})}},this.on("eventCaptured",(t=>yi.info('send "'+(null==t?void 0:t.event)+'"',t)))}init(t,i,e){if(e&&e!==hn){var r,s=null!==(r=rn[e])&&void 0!==r?r:new _n;return s._init(t,i,e),rn[e]=s,rn[hn][e]=s,s}return this._init(t,i,e)}_init(i,e,r){var s;if(void 0===e&&(e={}),C(i)||A(i))return yi.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config={},e.debug=this.Ri(e.debug),this.Ni=e,this.Mi=[],e.person_profiles?this.Ai=e.person_profiles:e.process_person&&(this.Ai=e.process_person),this.set_config(ye({},vn(e.defaults),fn(e),{name:r,token:i})),this.config.on_xhr_error&&yi.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=e.disable_compression?void 0:Br.GZipJS;var n=this.Fi();this.persistence=new Er(this.config,n),this.sessionPersistence="sessionStorage"===this.config.persistence||"memory"===this.config.persistence?this.persistence:new Er(p({},this.config,{persistence:"sessionStorage"}),n);var o=p({},this.persistence.props),a=p({},this.sessionPersistence.props);this.register({$initialization_time:(new Date).toISOString()}),this.Oi=new Ps((t=>this.Pi(t)),this.config.request_queue_config),this.Li=new Is(this),this.__request_queue=[];var l=this.config.cookieless_mode===le||this.config.cookieless_mode===ae&&this.consent.isExplicitlyOptedOut();if(l||(this.sessionManager=new Ls(this),this.sessionPropsManager=new As(this,this.sessionManager,this.persistence)),this.config.__preview_deferred_init_extensions?(yi.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Di(l)}),0)):(yi.info("Initializing extensions synchronously"),this.Di(l)),v.DEBUG=v.DEBUG||this.config.debug,v.DEBUG&&yi.info("Starting in debug mode",{this:this,config:e,thisC:p({},this.config),p:o,s:a}),void 0!==(null==(s=e.bootstrap)?void 0:s.distinctID)){var u=e.bootstrap.distinctID,h=this.get_distinct_id(),d=this.persistence.get_property(Ki);if(e.bootstrap.isIdentifiedID&&null!=h&&h!==u&&d===ue)this.identify(u);else if(e.bootstrap.isIdentifiedID&&null!=h&&h!==u&&d===he)yi.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var c=this.config.get_device_id(Ae()),f=e.bootstrap.isIdentifiedID?c:u;this.persistence.set_property(Ki,e.bootstrap.isIdentifiedID?he:ue),this.register({distinct_id:u,$device_id:f})}}if(l)this.register_once({distinct_id:se,$device_id:null},"");else if(!this.get_distinct_id()){var _=this.config.get_device_id(Ae());this.register_once({distinct_id:_,$device_id:_},""),this.persistence.set_property(Ki,ue)}return ke(t,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),e.segment?function(t,i){var e=t.config.segment;if(!e)return i();!function(t,i){var e=t.config.segment;if(!e)return i();var r=e=>{var r=()=>e.anonymousId()||Ae();t.config.get_device_id=r,e.id()&&(t.register({distinct_id:e.id(),$device_id:r()}),t.persistence.set_property(Ki,he)),i()},s=e.user();"then"in s&&P(s.then)?s.then(r):r(s)}(t,(()=>{e.register((t=>{Promise&&Promise.resolve||Xe.warn("This browser does not have Promise support, and can not use the segment integration");var i=(i,e)=>{if(!e)return i;i.event.userId||i.event.anonymousId===t.get_distinct_id()||(Xe.info("No userId set, resetting PostHog"),t.reset()),i.event.userId&&i.event.userId!==t.get_distinct_id()&&(Xe.info("UserId set, identifying with PostHog"),t.identify(i.event.userId));var r=t.calculateEventProperties(e,i.event.properties);return i.event.properties=Object.assign({},r,i.event.properties),i};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:t=>i(t,t.event.event),page:t=>i(t,fe),identify:t=>i(t,_e),screen:t=>i(t,"$screen")}})(t)).then((()=>{i()}))}))}(this,(()=>this.Bi())):this.Bi(),P(this.config._onCapture)&&this.config._onCapture!==nn&&(yi.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(t=>this.config._onCapture(t.event,t)))),this.config.ip&&yi.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this}Di(t){var i,e,r,s,n,o,a,l=performance.now(),u=p({},_n.__defaultExtensionClasses,this.config.__extensionClasses),h=[];u.featureFlags&&this.Ci.push(this.featureFlags=null!==(i=this.featureFlags)&&void 0!==i?i:new u.featureFlags(this)),u.exceptions&&this.Ci.push(this.exceptions=null!==(e=this.exceptions)&&void 0!==e?e:new u.exceptions(this)),u.historyAutocapture&&this.Ci.push(this.historyAutocapture=new u.historyAutocapture(this)),u.tracingHeaders&&this.Ci.push(new u.tracingHeaders(this)),u.siteApps&&this.Ci.push(this.siteApps=new u.siteApps(this)),u.sessionRecording&&!t&&this.Ci.push(this.sessionRecording=new u.sessionRecording(this)),this.config.disable_scroll_properties||h.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),u.autocapture&&this.Ci.push(this.autocapture=new u.autocapture(this)),u.surveys&&this.Ci.push(this.surveys=null!==(r=this.surveys)&&void 0!==r?r:new u.surveys(this)),u.logs&&this.Ci.push(this.logs=null!==(s=this.logs)&&void 0!==s?s:new u.logs(this)),u.conversations&&this.Ci.push(this.conversations=null!==(n=this.conversations)&&void 0!==n?n:new u.conversations(this)),u.productTours&&this.Ci.push(this.productTours=new u.productTours(this)),u.heatmaps&&this.Ci.push(this.heatmaps=new u.heatmaps(this)),u.webVitalsAutocapture&&this.Ci.push(this.webVitalsAutocapture=new u.webVitalsAutocapture(this)),u.exceptionObserver&&this.Ci.push(this.exceptionObserver=new u.exceptionObserver(this)),u.deadClicksAutocapture&&this.Ci.push(this.deadClicksAutocapture=new u.deadClicksAutocapture(this,Je)),u.toolbar&&this.Ci.push(this.toolbar=null!==(o=this.toolbar)&&void 0!==o?o:new u.toolbar(this)),u.experiments&&this.Ci.push(this.experiments=null!==(a=this.experiments)&&void 0!==a?a:new u.experiments(this)),this.Ci.forEach((t=>{t.initialize&&h.push((()=>{null==t.initialize||t.initialize()}))})),h.push((()=>{if(this.ji){var t=this.ji;this.ji=void 0,this.Sr(t)}})),this.qi(h,l)}qi(t,i){for(;t.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-i>=30&&t.length>0)return void setTimeout((()=>{this.qi(t,i)}),0);var e=t.shift();if(e)try{e()}catch(t){yi.error("Error initializing extension:",t)}}var r=Math.round(performance.now()-i);this.register_for_session({$sdk_debug_extensions_init_method:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",$sdk_debug_extensions_init_time_ms:r}),this.config.__preview_deferred_init_extensions&&yi.info("PostHog extensions initialized ("+r+"ms)")}Sr(t){var i;if(!r||!r.body)return yi.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Sr(t)}),500);this.config.__preview_deferred_init_extensions&&(this.ji=t),this.compression=void 0,t.supportedCompression&&!this.config.disable_compression&&(this.compression=w(t.supportedCompression,Br.GZipJS)?Br.GZipJS:w(t.supportedCompression,Br.Base64)?Br.Base64:void 0),null!=(i=t.analytics)&&i.endpoint&&(this.analyticsDefaultEndpoint=t.analytics.endpoint),this.set_config({person_profiles:this.Ai?this.Ai:de}),this.Ci.forEach((i=>null==i.onRemoteConfig?void 0:i.onRemoteConfig(t)))}Bi(){try{this.config.loaded(this)}catch(t){yi.critical("`loaded` function failed",t)}if(this.Zi(),this.config.internal_or_test_user_hostname&&null!=s&&s.hostname){var t=s.hostname,i=this.config.internal_or_test_user_hostname;("string"==typeof i?t===i:i.test(t))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.config.cookieless_mode===le)&&this.$i()}),1),this.Hi=new jr(this),this.Hi.load()}Zi(){var t;this.is_capturing()&&this.config.request_batching&&(null==(t=this.Oi)||t.enable())}_dom_loaded(){this.is_capturing()&&me(this.__request_queue,(t=>this.Pi(t))),this.__request_queue=[],this.Zi()}_handle_unload(){var t,i,e;null==(t=this.surveys)||t.handlePageUnload(),this.config.request_batching?(this.Vi()&&this.capture(pe),null==(i=this.Oi)||i.unload(),null==(e=this.Li)||e.unload()):this.Vi()&&this.capture(pe,null,{transport:"sendBeacon"})}_send_request(t){this.__loaded&&(dn?this.__request_queue.push(t):this.rateLimiter.isServerRateLimited(t.batchKey)||(t.transport=t.transport||this.config.api_transport,t.url=Ss(t.url,{ip:this.config.ip?1:0}),t.headers=p({},this.config.request_headers,t.headers),t.compression="best-available"===t.compression?this.compression:t.compression,t.disableXHRCredentials=this.config.__preview_disable_xhr_credentials,this.config.__preview_disable_beacon&&(t.disableTransport=["sendBeacon"]),t.fetchOptions=t.fetchOptions||this.config.fetch_options,(t=>{var i,e,r,s=p({},t);s.timeout=s.timeout||6e4,s.url=Ss(s.url,{_:(new Date).getTime().toString(),ver:v.JS_SDK_VERSION,compression:s.compression});var n=null!==(i=s.transport)&&void 0!==i?i:"fetch",o=ks.filter((t=>!s.disableTransport||!t.transport||!s.disableTransport.includes(t.transport))),a=null!==(e=null==(r=function(t,i){for(var e=0;t.length>e;e++)if(t[e].transport===n)return t[e]}(o))?void 0:r.method)&&void 0!==e?e:o[0].method;if(!a)throw new Error("No available transport method");"sendBeacon"!==n&&s.data&&s.compression===Br.GZipJS&&l?$s(s).then((t=>{a(t)})).catch((()=>{a(s)})):a(s)})(p({},t,{callback:i=>{var e,r;this.rateLimiter.checkForLimiting(i),400>i.statusCode||null==(e=(r=this.config).on_request_error)||e.call(r,i),null==t.callback||t.callback(i)}}))))}Pi(t){this.Li?this.Li.retriableRequest(t):this._send_request(t)}_execute_array(t){sn++;try{var i,e=[],r=[],s=[];me(t,(t=>{t&&(R(i=t[0])?s.push(t):P(t)?t.call(this):R(t)&&"alias"===i?e.push(t):R(t)&&-1!==i.indexOf("capture")&&P(this[i])?s.push(t):r.push(t))}));var n=function(t,i){me(t,(function(t){if(R(t[0])){var e=i;be(t,(function(t){e=e[t[0]].apply(e,t.slice(1))}))}else i[t[0]].apply(i,t.slice(1))}))};n(e,this),n(r,this),n(s,this)}finally{sn--}}push(t){if(sn>0&&R(t)&&F(t[0])){var i=_n.prototype[t[0]];P(i)&&i.apply(this,t.slice(1))}else this._execute_array([t])}capture(t,i,e){var r,s,n,o,a;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.Oi){if(this.is_capturing())if(!C(t)&&F(t)){var l=!this.config.opt_out_useragent_filter&&this._is_bot();if(!l||this.config.__preview_capture_bot_pageviews){var u=null!=e&&e.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(null==u||!u.isRateLimited){null!=i&&i.$current_url&&!F(null==i?void 0:i.$current_url)&&(yi.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),null==i||delete i.$current_url),"$exception"!==t||null!=e&&e.zi||yi.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var h=new Date,d=(null==e?void 0:e.timestamp)||h,v=Ae(),c={uuid:v,event:t,properties:this.calculateEventProperties(t,i||{},d,v)};t===fe&&this.config.__preview_capture_bot_pageviews&&l&&(c.event="$bot_pageview",c.properties.$browser_type="bot"),u&&(c.properties.$lib_rate_limit_remaining_tokens=u.remainingTokens),(null==e?void 0:e.$set)&&(c.$set=null==e?void 0:e.$set);var f,_=this.Yi(null==e?void 0:e.$set_once,t!==ge,t===_e);if(_&&(c.$set_once=_),null!=e&&e._noTruncate||(s=this.config.properties_string_max_length,n=c,o=t=>F(t)?t.slice(0,s):t,a=new Set,c=function t(i,e){return i!==Object(i)?o?o(i):i:a.has(i)?void 0:(a.add(i),R(i)?(r=[],me(i,(i=>{r.push(t(i))}))):(r={},be(i,((i,e)=>{a.has(i)||(r[e]=t(i,e))}))),r);var r}(n)),c.timestamp=d,C(null==e?void 0:e.timestamp)||(c.properties.$event_time_override_provided=!0,c.properties.$event_time_override_system_time=h),t===Ir.DISMISSED||t===Ir.SENT){var g=null==i?void 0:i[Cr.SURVEY_ID],m=null==i?void 0:i[Cr.SURVEY_ITERATION];f={id:g,current_iteration:m},localStorage.getItem(Ks(f))||localStorage.setItem(Ks(f),"true"),c.$set=p({},c.$set,{[Js({id:g,current_iteration:m},t===Ir.SENT?"responded":"dismissed")]:!0})}else t===Ir.SHOWN&&(c.$set=p({},c.$set,{[Cr.SURVEY_LAST_SEEN_DATE]:(new Date).toISOString()}));if(t===Mr.SHOWN){var b=null==i?void 0:i[Dr.TOUR_TYPE];b&&(c.$set=p({},c.$set,{[Dr.TOUR_LAST_SEEN_DATE+"/"+b]:(new Date).toISOString()}))}var y=p({},c.properties.$set,c.$set);if(I(y)||this.setPersonPropertiesForFlags(y),!D(this.config.before_send)){var w=this.Ui(c);if(!w)return;c=w}this.ki.emit("eventCaptured",c);var E={method:"POST",url:null!==(r=null==e?void 0:e._url)&&void 0!==r?r:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),data:c,compression:"best-available",batchKey:null==e?void 0:e._batchKey};return!this.config.request_batching||e&&(null==e||!e._batchKey)||null!=e&&e.send_instantly?this.Pi(E):this.Oi.enqueue(E),c}yi.critical("This capture call is ignored due to client rate limiting.")}}else yi.error("No event name provided to posthog.capture")}else yi.uninitializedWarning("posthog.capture")}_addCaptureHook(t){return this.on("eventCaptured",(i=>t(i.event,i)))}calculateEventProperties(i,e,n,o,a){if(n=n||new Date,!this.persistence||!this.sessionPersistence)return e;var l=a?void 0:this.persistence.remove_event_timer(i),h=p({},e);if(h.token=this.config.token,h.$config_defaults=this.config.defaults,(this.config.cookieless_mode==le||this.config.cookieless_mode==ae&&this.consent.isExplicitlyOptedOut())&&(h.$cookieless_mode=!0),"$snapshot"===i){var d=p({},this.persistence.properties(),this.sessionPersistence.properties());return h.distinct_id=d.distinct_id,(!F(h.distinct_id)&&!L(h.distinct_id)||A(h.distinct_id))&&yi.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),h}var c,f=function(i,e){var r,n,o,a;if(!u)return{};var l,h,d,c,f,p,_,g,m=i?[...ar,...e||[]]:[],[b,y]=function(t){for(var i=0;Vt.length>i;i++){var[e,r]=Vt[i],s=e.exec(t),n=s&&(P(r)?r(s,t):r);if(n)return n}return["",""]}(u);return ye(xe({$os:b,$os_version:y,$browser:Ht(u,navigator.vendor),$device:Yt(u),$device_type:(h=u,d={userAgentDataPlatform:null==(r=navigator)||null==(r=r.userAgentData)?void 0:r.platform,maxTouchPoints:null==(n=navigator)?void 0:n.maxTouchPoints,screenWidth:null==t||null==(o=t.screen)?void 0:o.width,screenHeight:null==t||null==(a=t.screen)?void 0:a.height,devicePixelRatio:null==t?void 0:t.devicePixelRatio},g=Yt(h),g===st||g===rt||"Kobo"===g||"Kindle Fire"===g||g===At?et:g===St||g===Tt||g===xt||g===It?"Console":g===ot?"Wearable":g?Z:"Android"===(null==d?void 0:d.userAgentDataPlatform)&&(null!==(c=null==d?void 0:d.maxTouchPoints)&&void 0!==c?c:0)>0?600>Math.min(null!==(f=null==d?void 0:d.screenWidth)&&void 0!==f?f:0,null!==(p=null==d?void 0:d.screenHeight)&&void 0!==p?p:0)/(null!==(_=null==d?void 0:d.devicePixelRatio)&&void 0!==_?_:1)?Z:et:"Desktop"),$timezone:br(),$timezone_offset:yr()}),{$current_url:sr(null==s?void 0:s.href,m,ur),$host:null==s?void 0:s.host,$pathname:null==s?void 0:s.pathname,$raw_user_agent:u.length>1e3?u.substring(0,997)+"...":u,$browser_version:Wt(u,navigator.vendor),$browser_language:fr(),$browser_language_prefix:(l=fr(),"string"==typeof l?l.split("-")[0]:void 0),$screen_height:null==t?void 0:t.screen.height,$screen_width:null==t?void 0:t.screen.width,$viewport_height:null==t?void 0:t.innerHeight,$viewport_width:null==t?void 0:t.innerWidth,$lib:v.LIB_NAME,$lib_version:v.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3})}(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties);if(this.sessionManager){var{sessionId:_,windowId:g}=this.sessionManager.checkAndGetSessionAndWindowId(a,n.getTime());h.$session_id=_,h.$window_id=g}this.sessionPropsManager&&ye(h,this.sessionPropsManager.getSessionProps());try{var m;this.sessionRecording&&ye(h,this.sessionRecording.sdkDebugProperties),h.$sdk_debug_retry_queue_size=null==(m=this.Li)?void 0:m.length}catch(t){h.$sdk_debug_error_capturing_properties=String(t)}if(this.requestRouter.region===qs&&(h.$lib_custom_api_host=this.config.api_host),c=i!==fe||a?i!==pe||a?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(n):this.pageViewManager.doPageView(n,o),h=ye(h,c),i===fe&&r&&(h.title=r.title),!C(l)){var b=n.getTime()-l;h.$duration=parseFloat((b/1e3).toFixed(3))}u&&this.config.opt_out_useragent_filter&&(h.$browser_type=this._is_bot()?"bot":"browser"),(h=ye({},f,this.persistence.properties(),this.sessionPersistence.properties(),h)).$is_identified=this._isIdentified(),R(this.config.property_denylist)?be(this.config.property_denylist,(function(t){delete h[t]})):yi.error(un+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var y=this.config.sanitize_properties;y&&(yi.error(ln),h=y(h,i));var w=this.Wi();return h.$process_person_profile=w,w&&!a&&this.Gi("_calculate_event_properties"),h}Yi(t,i,e){var r;if(void 0===i&&(i=!0),void 0===e&&(e=!1),!this.persistence||!this.Wi())return t;if(this.Si&&!e)return t;var s=this.persistence.get_initial_props(),n=null==(r=this.sessionPropsManager)?void 0:r.getSetOnceProps(),o=ye({},s,n||{},t||{}),a=this.config.sanitize_properties;return a&&(yi.error(ln),o=a(o,"$set_once")),i&&(this.Si=!0),I(o)?void 0:o}register(t,i){var e;null==(e=this.persistence)||e.register(t,i)}register_once(t,i,e){var r;null==(r=this.persistence)||r.register_once(t,i,e)}register_for_session(t){var i;null==(i=this.sessionPersistence)||i.register(t)}unregister(t){var i;null==(i=this.persistence)||i.unregister(t)}unregister_for_session(t){var i;null==(i=this.sessionPersistence)||i.unregister(t)}Xi(t,i){this.register({[t]:i})}getFeatureFlag(t,i){var e;return null==(e=this.featureFlags)?void 0:e.getFeatureFlag(t,i)}getFeatureFlagPayload(t){var i;return null==(i=this.featureFlags)?void 0:i.getFeatureFlagPayload(t)}getFeatureFlagResult(t,i){var e;return null==(e=this.featureFlags)?void 0:e.getFeatureFlagResult(t,i)}isFeatureEnabled(t,i){var e;return null==(e=this.featureFlags)?void 0:e.isFeatureEnabled(t,i)}reloadFeatureFlags(){var t;null==(t=this.featureFlags)||t.reloadFeatureFlags()}updateFlags(t,i,e){var r;null==(r=this.featureFlags)||r.updateFlags(t,i,e)}updateEarlyAccessFeatureEnrollment(t,i,e){var r;null==(r=this.featureFlags)||r.updateEarlyAccessFeatureEnrollment(t,i,e)}getEarlyAccessFeatures(t,i,e){var r;return void 0===i&&(i=!1),null==(r=this.featureFlags)?void 0:r.getEarlyAccessFeatures(t,i,e)}on(t,i){return this.ki.on(t,i)}onFeatureFlags(t){return this.featureFlags?this.featureFlags.onFeatureFlags(t):(t([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(t){return this.surveys?this.surveys.onSurveysLoaded(t):(t([],{isLoaded:!1,error:an}),()=>{})}onSessionId(t){var i,e;return null!==(i=null==(e=this.sessionManager)?void 0:e.onSessionId(t))&&void 0!==i?i:()=>{}}getSurveys(t,i){void 0===i&&(i=!1),this.surveys?this.surveys.getSurveys(t,i):t([],{isLoaded:!1,error:an})}getActiveMatchingSurveys(t,i){void 0===i&&(i=!1),this.surveys?this.surveys.getActiveMatchingSurveys(t,i):t([],{isLoaded:!1,error:an})}renderSurvey(t,i){var e;null==(e=this.surveys)||e.renderSurvey(t,i)}displaySurvey(t,i){var e;void 0===i&&(i=Qs),null==(e=this.surveys)||e.displaySurvey(t,i)}cancelPendingSurvey(t){var i;null==(i=this.surveys)||i.cancelPendingSurvey(t)}canRenderSurvey(t){var i,e;return null!==(i=null==(e=this.surveys)?void 0:e.canRenderSurvey(t))&&void 0!==i?i:{visible:!1,disabledReason:an}}canRenderSurveyAsync(t,i){var e,r;return void 0===i&&(i=!1),null!==(e=null==(r=this.surveys)?void 0:r.canRenderSurveyAsync(t,i))&&void 0!==e?e:Promise.resolve({visible:!1,disabledReason:an})}Ji(t){return!t||A(t)?(yi.critical("Unique user id has not been set in posthog.identify"),!1):t===se?(yi.critical('The string "'+t+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(t.toLowerCase())&&!["undefined","null"].includes(t.toLowerCase())||(yi.critical('The string "'+t+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(t,i,e){if(!this.__loaded||!this.persistence)return yi.uninitializedWarning("posthog.identify");if(L(t)&&(t=t.toString(),yi.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Ji(t)&&this.Gi("posthog.identify")){var r=this.get_distinct_id();this.register({$user_id:t}),this.get_property(Ti)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),t!==r&&t!==this.get_property($i)&&(this.unregister($i),this.register({distinct_id:t}));var s,n=(this.persistence.get_property(Ki)||ue)===ue;t!==r&&n?(this.persistence.set_property(Ki,he),this.setPersonPropertiesForFlags({$set:i||{},$set_once:e||{}},!1),this.capture(_e,{distinct_id:t,$anon_distinct_id:r},{$set:i||{},$set_once:e||{}}),this.Ei=js(t,i,e),null==(s=this.featureFlags)||s.setAnonymousDistinctId(r)):(i||e)&&this.setPersonProperties(i,e),t!==r&&(this.reloadFeatureFlags(),this.unregister(Vi))}}setPersonProperties(t,i){if((t||i)&&this.Gi("posthog.setPersonProperties")){var e=js(this.get_distinct_id(),t,i);this.Ei!==e?(this.setPersonPropertiesForFlags({$set:t||{},$set_once:i||{}},!0),this.capture("$set",{$set:t||{},$set_once:i||{}}),this.Ei=e):yi.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}group(t,i,e){if(t&&i){var r=this.getGroups(),s=r[t]!==i;if(s&&this.resetGroupPropertiesForFlags(t),this.register({$groups:p({},r,{[t]:i})}),s||e){var n={$group_type:t,$group_key:i};e&&(n.$group_set=e),this.capture(ge,n)}e&&this.setGroupPropertiesForFlags({[t]:e}),s&&!e&&this.reloadFeatureFlags()}else yi.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(t,i){var e;void 0===i&&(i=!0),null==(e=this.featureFlags)||e.setPersonPropertiesForFlags(t,i)}resetPersonPropertiesForFlags(){var t;null==(t=this.featureFlags)||t.resetPersonPropertiesForFlags()}setGroupPropertiesForFlags(t,i){var e;void 0===i&&(i=!0),this.Gi("posthog.setGroupPropertiesForFlags")&&(null==(e=this.featureFlags)||e.setGroupPropertiesForFlags(t,i))}resetGroupPropertiesForFlags(t){var i;null==(i=this.featureFlags)||i.resetGroupPropertiesForFlags(t)}reset(t){var i,e,r,s,n,o,a;if(yi.info("reset"),!this.__loaded)return yi.uninitializedWarning("posthog.reset");var l=this.get_property(Ti);if(this.consent.reset(),null==(i=this.persistence)||i.clear(),null==(e=this.sessionPersistence)||e.clear(),null==(r=this.surveys)||r.reset(),null==(s=this.Hi)||s.stop(),null==(n=this.featureFlags)||n.reset(),null==(o=this.persistence)||o.set_property(Ki,ue),null==(a=this.sessionManager)||a.resetSessionId(),this.Ei=null,this.config.cookieless_mode===le)this.register_once({distinct_id:se,$device_id:null},"");else{var u=this.config.get_device_id(Ae());this.register_once({distinct_id:u,$device_id:t?u:l},"")}this.register({$last_posthog_reset:(new Date).toISOString()},1),this.reloadFeatureFlags()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var t,i;return null!==(t=null==(i=this.sessionManager)?void 0:i.checkAndGetSessionAndWindowId(!0).sessionId)&&void 0!==t?t:""}get_session_replay_url(t){if(!this.sessionManager)return"";var{sessionId:i,sessionStartTimestamp:e}=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+i);if(null!=t&&t.withTimestamp&&e){var s,n=null!==(s=t.timestampLookBack)&&void 0!==s?s:10;if(!e)return r;r+="?t="+Math.max(Math.floor(((new Date).getTime()-e)/1e3)-n,0)}return r}alias(t,i){return t===this.get_property(xi)?(yi.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gi("posthog.alias")?(C(i)&&(i=this.get_distinct_id()),t!==i?(this.Xi($i,t),this.capture("$create_alias",{alias:t,distinct_id:i})):(yi.warn("alias matches current distinct_id - skipping api call."),this.identify(t),-1)):void 0}set_config(t){var i=p({},this.config);if(O(t)){var e,r,s,n,o,a,l,u,h;ye(this.config,fn(t));var d=this.Fi();null==(e=this.persistence)||e.update_config(this.config,i,d),this.sessionPersistence="sessionStorage"===this.config.persistence||"memory"===this.config.persistence?this.persistence:new Er(p({},this.config,{persistence:"sessionStorage"}),d);var c=this.Ri(this.config.debug);N(c)&&(this.config.debug=c),N(this.config.debug)&&(this.config.debug?(v.DEBUG=!0,je.Yt()&&je.Xt("ph_debug",!0),yi.info("set_config",{config:t,oldConfig:i,newConfig:p({},this.config)})):(v.DEBUG=!1,je.Yt()&&je.Jt("ph_debug"))),null==(r=this.exceptionObserver)||r.onConfigChange(),null==(s=this.sessionRecording)||s.startIfEnabledOrStop(),null==(n=this.autocapture)||n.startIfEnabled(),null==(o=this.heatmaps)||o.startIfEnabled(),null==(a=this.exceptionObserver)||a.startIfEnabledOrStop(),null==(l=this.deadClicksAutocapture)||l.startIfEnabledOrStop(),null==(u=this.surveys)||u.loadIfEnabled(),this.Ki(),null==(h=this.externalIntegrations)||h.startIfEnabledOrStop()}}_overrideSDKInfo(t,i){v.LIB_NAME=t,v.LIB_VERSION=i}startSessionRecording(t){var i,e,r,s,n,o=!0===t,a={sampling:o||!(null==t||!t.sampling),linked_flag:o||!(null==t||!t.linked_flag),url_trigger:o||!(null==t||!t.url_trigger),event_trigger:o||!(null==t||!t.event_trigger)};Object.values(a).some(Boolean)&&(null==(i=this.sessionManager)||i.checkAndGetSessionAndWindowId(),a.sampling&&(null==(e=this.sessionRecording)||e.overrideSampling()),a.linked_flag&&(null==(r=this.sessionRecording)||r.overrideLinkedFlag()),a.url_trigger&&(null==(s=this.sessionRecording)||s.overrideTrigger("url")),a.event_trigger&&(null==(n=this.sessionRecording)||n.overrideTrigger("event")));this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var t;return!(null==(t=this.sessionRecording)||!t.started)}captureException(t,i){if(this.exceptions){var e=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(t,{handled:!0,syntheticException:e});return this.exceptions.sendExceptionEvent(p({},r,i))}}startExceptionAutocapture(t){this.set_config({capture_exceptions:null==t||t})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(t){var i,e;return null!==(i=null==(e=this.toolbar)?void 0:e.loadToolbar(t))&&void 0!==i&&i}get_property(t){var i;return null==(i=this.persistence)?void 0:i.props[t]}getSessionProperty(t){var i;return null==(i=this.sessionPersistence)?void 0:i.props[t]}toString(){var t,i=null!==(t=this.config.name)&&void 0!==t?t:hn;return i!==hn&&(i=hn+"."+i),i}_isIdentified(){var t,i;return(null==(t=this.persistence)?void 0:t.get_property(Ki))===he||(null==(i=this.sessionPersistence)?void 0:i.get_property(Ki))===he}Wi(){var t,i;return!("never"===this.config.person_profiles||this.config.person_profiles===de&&!this._isIdentified()&&I(this.getGroups())&&(null==(t=this.persistence)||null==(t=t.props)||!t[$i])&&(null==(i=this.persistence)||null==(i=i.props)||!i[ee]))}Vi(){return!0===this.config.capture_pageleave||"if_capture_pageview"===this.config.capture_pageleave&&(!0===this.config.capture_pageview||"history_change"===this.config.capture_pageview)}createPersonProfile(){this.Wi()||this.Gi("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gi("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gi(t){return"never"===this.config.person_profiles?(yi.error(t+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Xi(ee,!0),!0)}Fi(){if("always"===this.config.cookieless_mode)return!0;var t=this.consent.isOptedOut();return this.config.disable_persistence||t&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==ae)}Ki(){var t,i,e,r,s=this.Fi();return(null==(t=this.persistence)?void 0:t.gr)!==s&&(null==(e=this.persistence)||e.set_disabled(s)),(null==(i=this.sessionPersistence)?void 0:i.gr)!==s&&(null==(r=this.sessionPersistence)||r.set_disabled(s)),s}opt_in_capturing(t){var i;if(this.config.cookieless_mode!==le){if(this.config.cookieless_mode===ae&&this.consent.isExplicitlyOptedOut()){var e,r,s,n,o;this.reset(!0),null==(e=this.sessionManager)||e.destroy(),null==(r=this.pageViewManager)||r.destroy(),this.sessionManager=new Ls(this),this.pageViewManager=new ir(this),this.persistence&&(this.sessionPropsManager=new As(this,this.sessionManager,this.persistence));var a=null!==(s=null==(n=this.config.__extensionClasses)?void 0:n.sessionRecording)&&void 0!==s?s:null==(o=_n.__defaultExtensionClasses)?void 0:o.sessionRecording;a&&(this.sessionRecording=this.Ii(this.sessionRecording,new a(this)))}var l,u;this.consent.optInOut(!0),this.Ki(),this.Zi(),null==(i=this.sessionRecording)||i.startIfEnabledOrStop(),this.config.cookieless_mode==ae&&(null==(l=this.surveys)||l.loadIfEnabled()),(C(null==t?void 0:t.captureEventName)||null!=t&&t.captureEventName)&&this.capture(null!==(u=null==t?void 0:t.captureEventName)&&void 0!==u?u:"$opt_in",null==t?void 0:t.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.$i()}else yi.warn(on)}opt_out_capturing(){var t,i,e;this.config.cookieless_mode!==le?(this.config.cookieless_mode===ae&&this.consent.isOptedIn()&&this.reset(!0),this.consent.optInOut(!1),this.Ki(),this.config.cookieless_mode===ae&&(this.register({distinct_id:se,$device_id:null}),null==(t=this.sessionManager)||t.destroy(),null==(i=this.pageViewManager)||i.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,null==(e=this.sessionRecording)||e.stopRecording(),this.sessionRecording=void 0,this.$i())):yi.warn(on)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var t=this.consent.consent;return 1===t?"granted":0===t?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===le||(this.config.cookieless_mode===ae?this.consent.isExplicitlyOptedOut()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.Ki()}_is_bot(){return e?Us(e,this.config.custom_blocked_useragents):void 0}$i(){r&&("visible"===r.visibilityState?this.xi||(this.xi=!0,this.capture(fe,{title:r.title},{send_instantly:!0}),this.Ti&&(r.removeEventListener(ve,this.Ti),this.Ti=null)):this.Ti||(this.Ti=this.$i.bind(this),ke(r,ve,this.Ti)))}debug(i){!1===i?(null==t||t.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(null==t||t.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Tr(){var t,i,e,r,s,n,o=this.Ni||{};return"advanced_disable_flags"in o?!!o.advanced_disable_flags:!1!==this.config.advanced_disable_flags?!!this.config.advanced_disable_flags:!0===this.config.advanced_disable_decide?(yi.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(e="advanced_disable_decide",!1,r=yi,s=(i="advanced_disable_flags")in(t=o)&&!D(t[i]),n=e in t&&!D(t[e]),s?t[i]:!!n&&(r&&r.warn("Config field '"+e+"' is deprecated. Please use '"+i+"' instead. The old field will be removed in a future major version."),t[e]))}Ui(t){if(D(this.config.before_send))return t;var i=R(this.config.before_send)?this.config.before_send:[this.config.before_send],e=t;for(var r of i){if(e=r(e),D(e)){var s="Event '"+t.event+"' was rejected in beforeSend function";return z(t.event)?yi.warn(s+". This can cause unexpected behavior."):yi.info(s),null}e.properties&&!I(e.properties)||yi.warn("Event '"+t.event+"' has no properties after beforeSend function, this is likely an error.")}return e}getPageViewId(){var t;return null==(t=this.pageViewManager.lr)?void 0:t.pageViewId}captureTraceFeedback(t,i){this.capture("$ai_feedback",{$ai_trace_id:String(t),$ai_feedback_text:i})}captureTraceMetric(t,i,e){this.capture("$ai_metric",{$ai_trace_id:String(t),$ai_metric_name:i,$ai_metric_value:String(e)})}Ri(t){var i=N(t)&&!t,e=je.Yt()&&"true"===je.Wt("ph_debug");return!i&&(!!e||t)}}function gn(t){return t instanceof Element&&(t.id===re||!(null==t.closest||!t.closest(".toolbar-global-fade-container")))}function mn(t){return!!t&&1===t.nodeType}function bn(t,i){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===i.toLowerCase()}function yn(t){return!!t&&3===t.nodeType}function wn(t){return!!t&&11===t.nodeType}function En(t){return t?E(t).split(/\s+/):[]}function Sn(i){var e=null==t?void 0:t.location.href;return!!(e&&i&&i.some((t=>e.match(t))))}function xn(t){var i="";switch(typeof t.className){case"string":i=t.className;break;case"object":i=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:i=""}return En(i)}function Tn(t){return D(t)?null:E(t).split(/(\s+)/).filter((t=>Hn(t))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function $n(t){var i="";return Mn(t)&&!Dn(t)&&t.childNodes&&t.childNodes.length&&be(t.childNodes,(function(t){var e;yn(t)&&t.textContent&&(i+=null!==(e=Tn(t.textContent))&&void 0!==e?e:"")})),E(i)}function kn(t){return C(t.target)?t.srcElement||null:null!=(i=t.target)&&i.shadowRoot?t.composedPath()[0]||null:t.target||null;var i}_n.__defaultExtensionClasses={},function(t,i){for(var e=0;i.length>e;e++)t.prototype[i[e]]=Se(t.prototype[i[e]])}(_n,["identify"]);var Rn=["a","button","form","input","select","textarea","label"];function Pn(t,i){if(C(i))return!0;var e,r=function(t){if(i.some((i=>t.matches(i))))return{v:!0}};for(var s of t)if(e=r(s))return e.v;return!1}function On(t){var i=t.parentNode;return!(!i||!mn(i))&&i}var In=["next","previous","prev",">","<"],Cn=[".ph-no-rageclick",".ph-no-capture"];var Fn=t=>!t||bn(t,"html")||!mn(t),An=(i,e)=>{if(!t||Fn(i))return{parentIsUsefulElement:!1,targetElementList:[]};for(var r=!1,s=[i],n=i;n.parentNode&&!bn(n,"body");)if(wn(n.parentNode))s.push(n.parentNode.host),n=n.parentNode.host;else{var o=On(n);if(!o)break;if(e||Rn.indexOf(o.tagName.toLowerCase())>-1)r=!0;else{var a=t.getComputedStyle(o);a&&"pointer"===a.getPropertyValue("cursor")&&(r=!0)}s.push(o),n=o}return{parentIsUsefulElement:r,targetElementList:s}};function Mn(t){for(var i=t;i.parentNode&&!bn(i,"body");i=i.parentNode){var e=xn(i);if(w(e,"ph-sensitive")||w(e,"ph-no-capture"))return!1}if(w(xn(t),"ph-include"))return!0;var r=t.type||"";if(F(r))switch(r.toLowerCase()){case"hidden":case"password":return!1}var s=t.name||t.id||"";return!F(s)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(s.replace(/[^a-zA-Z0-9]/g,""))}function Dn(t){return!!(bn(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||bn(t,"select")||bn(t,"textarea")||"true"===t.getAttribute("contenteditable"))}var Ln="(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})",Un=new RegExp("^(?:"+Ln+")$"),Nn=new RegExp(Ln),jn="\\d{3}-?\\d{2}-?\\d{4}",zn=new RegExp("^("+jn+")$"),Bn=new RegExp("("+jn+")");function Hn(t,i){if(void 0===i&&(i=!0),D(t))return!1;if(F(t)){if(t=E(t),(i?Un:Nn).test((t||"").replace(/[- ]/g,"")))return!1;if((i?zn:Bn).test(t))return!1}return!0}function qn(t){var i=$n(t);return Hn(i=(i+" "+Wn(t)).trim())?i:""}function Wn(t){var i="";return t&&t.childNodes&&t.childNodes.length&&be(t.childNodes,(function(t){var e;if(t&&"span"===(null==(e=t.tagName)?void 0:e.toLowerCase()))try{var r=$n(t);i=(i+" "+r).trim(),t.childNodes&&t.childNodes.length&&(i=(i+" "+Wn(t)).trim())}catch(t){yi.error("[AutoCapture]",t)}})),i}function Vn(t){return t.replace(/"|\\"/g,'\\"')}function Yn(t){var i=t.attr__class;return i?R(i)?i:En(i):void 0}class Gn{constructor(t){this.disabled=!1===t;var i=O(t)?t:{};this.thresholdPx=i.threshold_px||30,this.timeoutMs=i.timeout_ms||1e3,this.clickCount=i.click_count||3,this.clicks=[]}isRageClick(t,i,e){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(t-r.x)+Math.abs(i-r.y)<this.thresholdPx&&this.timeoutMs>e-r.timestamp){if(this.clicks.push({x:t,y:i,timestamp:e}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:t,y:i,timestamp:e}];return!1}}var Jn="$copy_autocapture",Kn=wi("[AutoCapture]");function Xn(t,i){return i.length>t?i.slice(0,t)+"...":i}function Qn(t){if(t.previousElementSibling)return t.previousElementSibling;var i=t;do{i=i.previousSibling}while(i&&!mn(i));return i}function Zn(i,e){for(var r,s,{e:n,maskAllElementAttributes:o,maskAllText:a,elementAttributeIgnoreList:l,elementsChainAsString:u}=e,h=[i],d=i;d.parentNode&&!bn(d,"body");)wn(d.parentNode)?(h.push(d.parentNode.host),d=d.parentNode.host):(h.push(d.parentNode),d=d.parentNode);var v,c,f=[],_={},g=!1,m=!1;if(be(h,(t=>{var i=Mn(t);"a"===t.tagName.toLowerCase()&&(g=t.getAttribute("href"),g=i&&g&&Hn(g)&&g),w(xn(t),"ph-no-capture")&&(m=!0),f.push(function(t,i,e,r){var s=t.tagName.toLowerCase(),n={tag_name:s};Rn.indexOf(s)>-1&&!e&&(n.$el_text="a"===s.toLowerCase()||"button"===s.toLowerCase()?Xn(1024,qn(t)):Xn(1024,$n(t)));var o=xn(t);o.length>0&&(n.classes=o.filter((function(t){return""!==t}))),be(t.attributes,(function(e){var s;if((!Dn(t)||-1!==["name","id","class","aria-label"].indexOf(e.name))&&(null==r||!r.includes(e.name))&&!i&&Hn(e.value)&&(!F(s=e.name)||"_ngcontent"!==s.substring(0,10)&&"_nghost"!==s.substring(0,7))){var o=e.value;"class"===e.name&&(o=En(o).join(" ")),n["attr__"+e.name]=Xn(1024,o)}}));for(var a=1,l=1,u=t;u=Qn(u);)a++,u.tagName===t.tagName&&l++;return n.nth_child=a,n.nth_of_type=l,n}(t,o,a,l));var e=function(t){if(!Mn(t))return{};var i={};return be(t.attributes,(function(t){if(t.name&&0===t.name.indexOf("data-ph-capture-attribute")){var e=t.name.replace("data-ph-capture-attribute-",""),r=t.value;e&&r&&Hn(r)&&(i[e]=r)}})),i}(t);ye(_,e)})),m)return{props:{},explicitNoCapture:m};if(a||(f[0].$el_text="a"===i.tagName.toLowerCase()||"button"===i.tagName.toLowerCase()?qn(i):$n(i)),g){var b,y;f[0].attr__href=g;var E=null==(b=er(g))?void 0:b.host,S=null==t||null==(y=t.location)?void 0:y.host;E&&S&&E!==S&&(v=g)}return{props:ye({$event_type:n.type,$ce_version:1},u?{}:{$elements:f},{$elements_chain:(c=f,function(t){return t.map((t=>{var i,e,r="";if(t.tag_name&&(r+=t.tag_name),t.attr_class)for(var s of(t.attr_class.sort(),t.attr_class))r+="."+s.replace(/"/g,"");var n=p({},t.text?{text:t.text}:{},{"nth-child":null!==(i=t.nth_child)&&void 0!==i?i:0,"nth-of-type":null!==(e=t.nth_of_type)&&void 0!==e?e:0},t.href?{href:t.href}:{},t.attr_id?{attr_id:t.attr_id}:{},t.attributes),o={};return we(n).sort(((t,i)=>{var[e]=t,[r]=i;return e.localeCompare(r)})).forEach((t=>{var[i,e]=t;return o[Vn(i.toString())]=Vn(e.toString())})),(r+=":")+we(o).map((t=>{var[i,e]=t;return i+'="'+e+'"'})).join("")})).join(";")}(function(t){return t.map((t=>{var i,e,r={text:null==(i=t.$el_text)?void 0:i.slice(0,400),tag_name:t.tag_name,href:null==(e=t.attr__href)?void 0:e.slice(0,2048),attr_class:Yn(t),attr_id:t.attr__id,nth_child:t.nth_child,nth_of_type:t.nth_of_type,attributes:{}};return we(t).filter((t=>{var[i]=t;return 0===i.indexOf("attr__")})).forEach((t=>{var[i,e]=t;return r.attributes[i]=e})),r}))}(c)))},null!=(r=f[0])&&r.$el_text?{$el_text:null==(s=f[0])?void 0:s.$el_text}:{},v&&"click"===n.type?{$external_click_url:v}:{},_)}}var to=wi("[ExceptionAutocapture]");function io(t,i,e){try{if(!(i in t))return()=>{};var r=t[i],s=e(r);return P(s)&&(s.prototype=s.prototype||{},Object.defineProperties(s,{__posthog_wrapped__:{enumerable:!1,value:!0}})),t[i]=s,()=>{t[i]=r}}catch(t){return()=>{}}}var eo=wi("[TracingHeaders]"),ro=wi("[Web Vitals]"),so=9e5,no="disabled",oo="lazy_loading",ao="awaiting_config",lo="missing_config";wi("[SessionRecording]");var uo="[SessionRecording]",ho=wi(uo),vo=wi("[Heatmaps]");function co(t){return O(t)&&"clientX"in t&&"clientY"in t&&L(t.clientX)&&L(t.clientY)}var fo=wi("[Product Tours]"),po="ph_product_tours",_o=["$set_once","$set"],go=wi("[SiteApps]"),mo="Error while initializing PostHog app with config id ";function bo(t,i,e){if(D(t))return!1;switch(e){case"exact":return t===i;case"contains":var r=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(r,"i").test(t);case"regex":try{return new RegExp(i).test(t)}catch(t){return!1}default:return!1}}class yo{constructor(t){this.Qi=new Ms,this.tn=(t,i)=>this.en(t,i)&&this.rn(t,i)&&this.nn(t,i)&&this.sn(t,i),this.en=(t,i)=>null==i||!i.event||(null==t?void 0:t.event)===(null==i?void 0:i.event),this._instance=t,this.an=new Set,this.ln=new Set}init(){var t,i;C(null==(t=this._instance)?void 0:t._addCaptureHook)||(null==(i=this._instance)||i._addCaptureHook(((t,i)=>{this.on(t,i)})))}register(t){var i,e;if(!C(null==(i=this._instance)?void 0:i._addCaptureHook)&&(t.forEach((t=>{var i,e;null==(i=this.ln)||i.add(t),null==(e=t.steps)||e.forEach((t=>{var i;null==(i=this.an)||i.add((null==t?void 0:t.event)||"")}))})),null!=(e=this._instance)&&e.autocapture)){var r,s=new Set;t.forEach((t=>{var i;null==(i=t.steps)||i.forEach((t=>{null!=t&&t.selector&&s.add(null==t?void 0:t.selector)}))})),null==(r=this._instance)||r.autocapture.setElementSelectors(s)}}on(t,i){var e;null!=i&&0!=t.length&&(this.an.has(t)||this.an.has(null==i?void 0:i.event))&&this.ln&&(null==(e=this.ln)?void 0:e.size)>0&&this.ln.forEach((t=>{this.un(i,t)&&this.Qi.emit("actionCaptured",t.name)}))}hn(t){this.onAction("actionCaptured",(i=>t(i)))}un(t,i){if(null==(null==i?void 0:i.steps))return!1;for(var e of i.steps)if(this.tn(t,e))return!0;return!1}onAction(t,i){return this.Qi.on(t,i)}rn(t,i){if(null!=i&&i.url){var e,r=null==t||null==(e=t.properties)?void 0:e.$current_url;if(!r||"string"!=typeof r)return!1;if(!bo(r,i.url,i.url_matching||"contains"))return!1}return!0}nn(t,i){return!!this.cn(t,i)&&!!this.dn(t,i)&&!!this.vn(t,i)}cn(t,i){var e;if(null==i||!i.href)return!0;var r=this.fn(t);if(r.length>0)return r.some((t=>bo(t.href,i.href,i.href_matching||"exact")));var s,n=(null==t||null==(e=t.properties)?void 0:e.$elements_chain)||"";return!!n&&bo((s=n.match(/(?::|")href="(.*?)"/))?s[1]:"",i.href,i.href_matching||"exact")}dn(t,i){var e;if(null==i||!i.text)return!0;var r=this.fn(t);if(r.length>0)return r.some((t=>bo(t.text,i.text,i.text_matching||"exact")||bo(t.$el_text,i.text,i.text_matching||"exact")));var s,n,o,a=(null==t||null==(e=t.properties)?void 0:e.$elements_chain)||"";return!!a&&(s=function(t){for(var i,e=[],r=/(?::|")text="(.*?)"/g;!D(i=r.exec(t));)e.includes(i[1])||e.push(i[1]);return e}(a),n=i.text,o=i.text_matching||"exact",s.some((t=>bo(t,n,o))))}vn(t,i){var e,r;if(null==i||!i.selector)return!0;var s=null==t||null==(e=t.properties)?void 0:e.$element_selectors;if(null!=s&&s.includes(i.selector))return!0;var n=(null==t||null==(r=t.properties)?void 0:r.$elements_chain)||"";if(i.selector_regex&&n)try{return new RegExp(i.selector_regex).test(n)}catch(t){return!1}return!1}fn(t){var i;return null==(null==t||null==(i=t.properties)?void 0:i.$elements)?[]:null==t?void 0:t.properties.$elements}sn(t,i){return null==i||!i.properties||0===i.properties.length||Hs(i.properties.reduce(((t,i)=>{var e=R(i.value)?i.value.map(String):null!=i.value?[String(i.value)]:[];return t[i.key]={values:e,operator:i.operator||"exact"},t}),{}),null==t?void 0:t.properties)}}class wo{constructor(t){this._instance=t,this.pn=new Map,this.gn=new Map,this.mn=new Map}yn(t,i){return!!t&&Hs(t.propertyFilters,null==i?void 0:i.properties)}bn(t,i){var e=new Map;return t.forEach((t=>{var r;null==(r=t.conditions)||null==(r=r[i])||null==(r=r.values)||r.forEach((i=>{if(null!=i&&i.name){var r=e.get(i.name)||[];r.push(t.id),e.set(i.name,r)}}))})),e}wn(t,i,e){var r=(e===Sr.Activation?this.pn:this.gn).get(t),s=[];return this._n((t=>{s=t.filter((t=>null==r?void 0:r.includes(t.id)))})),s.filter((r=>{var s,n=null==(s=r.conditions)||null==(s=s[e])||null==(s=s.values)?void 0:s.find((i=>i.name===t));return this.yn(n,i)}))}register(t){var i;C(null==(i=this._instance)?void 0:i._addCaptureHook)||(this.In(t),this.Cn(t))}Cn(t){var i=t.filter((t=>{var i,e;return(null==(i=t.conditions)?void 0:i.actions)&&(null==(e=t.conditions)||null==(e=e.actions)||null==(e=e.values)?void 0:e.length)>0}));0!==i.length&&(null==this.Sn&&(this.Sn=new yo(this._instance),this.Sn.init(),this.Sn.hn((t=>{this.onAction(t)}))),i.forEach((t=>{var i,e,r,s,n;t.conditions&&null!=(i=t.conditions)&&i.actions&&null!=(e=t.conditions)&&null!=(e=e.actions)&&e.values&&(null==(r=t.conditions)||null==(r=r.actions)||null==(r=r.values)?void 0:r.length)>0&&(null==(s=this.Sn)||s.register(t.conditions.actions.values),null==(n=t.conditions)||null==(n=n.actions)||null==(n=n.values)||n.forEach((i=>{if(i&&i.name){var e=this.mn.get(i.name);e&&e.push(t.id),this.mn.set(i.name,e||[t.id])}})))})))}In(t){var i,e=t.filter((t=>{var i,e;return(null==(i=t.conditions)?void 0:i.events)&&(null==(e=t.conditions)||null==(e=e.events)||null==(e=e.values)?void 0:e.length)>0})),r=t.filter((t=>{var i,e;return(null==(i=t.conditions)?void 0:i.cancelEvents)&&(null==(e=t.conditions)||null==(e=e.cancelEvents)||null==(e=e.values)?void 0:e.length)>0}));0===e.length&&0===r.length||(null==(i=this._instance)||i._addCaptureHook(((t,i)=>{this.onEvent(t,i)})),this.pn=this.bn(t,Sr.Activation),this.gn=this.bn(t,Sr.Cancellation))}onEvent(t,i){var e,r=this.re(),s=this.kn(),n=this.xn(),o=(null==(e=this._instance)||null==(e=e.persistence)?void 0:e.props[s])||[];if(n===t&&i&&o.length>0){var a,l;r.info("event matched, removing item from activated items",{event:t,eventPayload:i,existingActivatedItems:o});var u=(null==i||null==(a=i.properties)?void 0:a.$survey_id)||(null==i||null==(l=i.properties)?void 0:l.$product_tour_id);if(u){var h=o.indexOf(u);0>h||(o.splice(h,1),this.Tn(o))}}else{if(this.gn.has(t)){var d=this.wn(t,i,Sr.Cancellation);d.length>0&&(r.info("cancel event matched, cancelling items",{event:t,itemsToCancel:d.map((t=>t.id))}),d.forEach((t=>{var i=o.indexOf(t.id);0>i||o.splice(i,1),this.An(t.id)})),this.Tn(o))}if(this.pn.has(t)){r.info("event name matched",{event:t,eventPayload:i,items:this.pn.get(t)});var v=this.wn(t,i,Sr.Activation);this.Tn(o.concat(v.map((t=>t.id))||[]))}}}onAction(t){var i,e=this.kn(),r=(null==(i=this._instance)||null==(i=i.persistence)?void 0:i.props[e])||[];this.mn.has(t)&&this.Tn(r.concat(this.mn.get(t)||[]))}Tn(t){var i,e=this.re(),r=this.kn(),s=[...new Set(t)].filter((t=>!this.En(t)));e.info("updating activated items",{activatedItems:s}),null==(i=this._instance)||null==(i=i.persistence)||i.register({[r]:s})}getActivatedIds(){var t,i=this.kn();return(null==(t=this._instance)||null==(t=t.persistence)?void 0:t.props[i])||[]}getEventToItemsMap(){return this.pn}Rn(){return this.Sn}}class Eo extends wo{constructor(t){super(t)}kn(){return"$surveys_activated"}xn(){return Ir.SHOWN}_n(t){var i;null==(i=this._instance)||i.getSurveys(t)}An(t){var i;null==(i=this._instance)||i.cancelPendingSurvey(t)}re(){return Ys}En(){return!1}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var So="SDK is not enabled or survey functionality is not yet loaded",xo="Disabled. Not loading surveys.",To=null!=t&&t.location?nr(t.location.hash,"__posthog")||nr(location.hash,"state"):null,$o="_postHogToolbarParams",ko=wi("[Toolbar]"),Ro=wi("[FeatureFlags]"),Po=wi("[FeatureFlags]",{debugEnabled:!0}),Oo="\" failed. Feature flags didn't load in time.",Io="$active_feature_flags",Co="$override_feature_flags",Fo="$feature_flag_payloads",Ao="$override_feature_flag_payloads",Mo="$feature_flag_request_id",Do=t=>{for(var i={},e=0;t.length>e;e++)i[t[e]]=!0;return i},Lo=t=>{var i={};for(var[e,r]of we(t||{}))r&&(i[e]=r);return i},Uo=wi("[Error tracking]"),No="Refusing to render web experiment since the viewer is a likely bot",jo={icontains:(i,e)=>!!t&&e.href.toLowerCase().indexOf(i.toLowerCase())>-1,not_icontains:(i,e)=>!!t&&-1===e.href.toLowerCase().indexOf(i.toLowerCase()),regex:(i,e)=>!!t&&Ns(e.href,i),not_regex:(i,e)=>!!t&&!Ns(e.href,i),exact:(t,i)=>i.href===t,is_not:(t,i)=>i.href!==t};class zo{get Rt(){return this._instance.config}constructor(t){var i=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(t){void 0===t&&(t=!1),i.getWebExperiments((t=>{zo.Nn("retrieved web experiments from the server"),i.Mn=new Map,t.forEach((t=>{if(t.feature_flag_key){var e;i.Mn&&(zo.Nn("setting flag key ",t.feature_flag_key," to web experiment ",t),null==(e=i.Mn)||e.set(t.feature_flag_key,t));var r=i._instance.getFeatureFlag(t.feature_flag_key);F(r)&&t.variants[r]&&i.Fn(t.name,r,t.variants[r].transforms)}else if(t.variants)for(var s in t.variants){var n=t.variants[s];zo.On(n)&&i.Fn(t.name,s,n.transforms)}}))}),t)},this._instance=t,this._instance.onFeatureFlags((t=>{this.onFeatureFlags(t)}))}initialize(){}onFeatureFlags(t){if(this._is_bot())zo.Nn(No);else if(!this.Rt.disable_web_experiments){if(D(this.Mn))return this.Mn=new Map,this.loadIfEnabled(),void this.previewWebExperiment();zo.Nn("applying feature flags",t),t.forEach((t=>{var i;if(this.Mn&&null!=(i=this.Mn)&&i.has(t)){var e,r=this._instance.getFeatureFlag(t),s=null==(e=this.Mn)?void 0:e.get(t);r&&null!=s&&s.variants[r]&&this.Fn(s.name,r,s.variants[r].transforms)}}))}}previewWebExperiment(){var t=zo.getWindowLocation();if(null!=t&&t.search){var i=rr(null==t?void 0:t.search,"__experiment_id"),e=rr(null==t?void 0:t.search,"__experiment_variant");i&&e&&(zo.Nn("previewing web experiments "+i+" && "+e),this.getWebExperiments((t=>{this.Pn(parseInt(i),e,t)}),!1,!0))}}loadIfEnabled(){this.Rt.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(t,i,e){if(this.Rt.disable_web_experiments&&!e)return t([]);var r=this._instance.get_property("$web_experiments");if(r&&!i)return t(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Rt.token),method:"GET",callback:i=>t(200===i.statusCode&&i.json&&i.json.experiments||[])})}Pn(t,i,e){var r=e.filter((i=>i.id===t));r&&r.length>0&&(zo.Nn("Previewing web experiment ["+r[0].name+"] with variant ["+i+"]"),this.Fn(r[0].name,i,r[0].variants[i].transforms))}static On(t){return!D(t.conditions)&&zo.Ln(t)&&zo.Dn(t)}static Ln(t){var i;if(D(t.conditions)||D(null==(i=t.conditions)?void 0:i.url))return!0;var e,r,s,n=zo.getWindowLocation();return!!n&&(null==(e=t.conditions)||!e.url||jo[null!==(r=null==(s=t.conditions)?void 0:s.urlMatchType)&&void 0!==r?r:"icontains"](t.conditions.url,n))}static getWindowLocation(){return null==t?void 0:t.location}static Dn(t){var i;if(D(t.conditions)||D(null==(i=t.conditions)?void 0:i.utm))return!0;var e=dr();if(e.utm_source){var r,s,n,o,a,l,u,h,d=null==(r=t.conditions)||null==(r=r.utm)||!r.utm_campaign||(null==(s=t.conditions)||null==(s=s.utm)?void 0:s.utm_campaign)==e.utm_campaign,v=null==(n=t.conditions)||null==(n=n.utm)||!n.utm_source||(null==(o=t.conditions)||null==(o=o.utm)?void 0:o.utm_source)==e.utm_source,c=null==(a=t.conditions)||null==(a=a.utm)||!a.utm_medium||(null==(l=t.conditions)||null==(l=l.utm)?void 0:l.utm_medium)==e.utm_medium,f=null==(u=t.conditions)||null==(u=u.utm)||!u.utm_term||(null==(h=t.conditions)||null==(h=h.utm)?void 0:h.utm_term)==e.utm_term;return d&&c&&f&&v}return!1}static Nn(t){for(var i=arguments.length,e=new Array(i>1?i-1:0),r=1;i>r;r++)e[r-1]=arguments[r];yi.info("[WebExperiments] "+t,e)}Fn(t,i,e){this._is_bot()?zo.Nn(No):"control"!==i?e.forEach((e=>{if(e.selector){var r;zo.Nn("applying transform of variant "+i+" for experiment "+t+" ",e);var s=null==(r=document)?void 0:r.querySelectorAll(e.selector);null==s||s.forEach((t=>{var i=t;e.html&&(i.innerHTML=e.html),e.css&&i.setAttribute("style",e.css)}))}})):zo.Nn("Control variants leave the page unmodified.")}_is_bot(){return e&&this._instance?Us(e,this.Rt.custom_blocked_useragents):void 0}}var Bo=wi("[Conversations]"),Ho="Conversations not available yet.",qo={featureFlags:class{constructor(t){this.Bn=!1,this.jn=!1,this.qn=!1,this.Zn=!1,this.$n=!1,this.Hn=!1,this.Vn=!1,this.zn=!1,this._instance=t,this.featureFlagEventHandlers=[]}get Rt(){return this._instance.config}get Kr(){return this._instance.persistence}Yn(t){return this._instance.get_property(t)}Un(){var t,i;return null!==(t=null==(i=this.Kr)?void 0:i.mr(this.Rt.feature_flag_cache_ttl_ms))&&void 0!==t&&t}Wn(){return!!this.Un()&&(this.zn||this.qn||(this.zn=!0,Ro.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Gn(){var t,i=null!==(t=this.Rt.evaluation_contexts)&&void 0!==t?t:this.Rt.evaluation_environments;return!this.Rt.evaluation_environments||this.Rt.evaluation_contexts||this.Vn||(Ro.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.Vn=!0),null!=i&&i.length?i.filter((t=>{var i=t&&"string"==typeof t&&t.trim().length>0;return i||Ro.error("Invalid evaluation context found:",t,"Expected non-empty string"),i})):[]}Xn(){return this.Gn().length>0}initialize(){var t,i,{config:e}=this._instance,r=null!==(t=null==(i=e.bootstrap)?void 0:i.featureFlags)&&void 0!==t?t:{};if(Object.keys(r).length){var s,n,o=null!==(s=null==(n=e.bootstrap)?void 0:n.featureFlagPayloads)&&void 0!==s?s:{},a=Object.keys(r).filter((t=>!!r[t])).reduce(((t,i)=>(t[i]=r[i]||!1,t)),{}),l=Object.keys(o).filter((t=>a[t])).reduce(((t,i)=>(o[i]&&(t[i]=o[i]),t)),{});this.receivedFeatureFlags({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,i,e){var r=null!=e&&e.merge?this.getFlagVariants():{},s=null!=e&&e.merge?this.getFlagPayloads():{},n=p({},r,t),o=p({},s,i),a={};for(var[l,u]of Object.entries(n)){var h="string"==typeof u;a[l]={key:l,enabled:!!h||Boolean(u),variant:h?u:void 0,reason:void 0,metadata:C(null==o?void 0:o[l])?void 0:{id:0,version:void 0,description:void 0,payload:o[l]}}}this.receivedFeatureFlags({flags:a})}get hasLoadedFlags(){return this.jn}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Yn(Bi),i=this.Yn(Co),e=this.Yn(Ao);if(!e&&!i)return t||{};var r=ye({},t||{}),s=[...new Set([...Object.keys(e||{}),...Object.keys(i||{})])];for(var n of s){var o,a,l=r[n],u=null==i?void 0:i[n],h=C(u)?null!==(o=null==l?void 0:l.enabled)&&void 0!==o&&o:!!u,d=C(u)?l.variant:"string"==typeof u?u:void 0,v=null==e?void 0:e[n],c=p({},l,{enabled:h,variant:h?null!=d?d:null==l?void 0:l.variant:void 0});h!==(null==l?void 0:l.enabled)&&(c.original_enabled=null==l?void 0:l.enabled),d!==(null==l?void 0:l.variant)&&(c.original_variant=null==l?void 0:l.variant),v&&(c.metadata=p({},null==l?void 0:l.metadata,{payload:v,original_payload:null==l||null==(a=l.metadata)?void 0:a.payload})),r[n]=c}return this.Bn||(Ro.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:e,finalDetails:r}),this.Bn=!0),r}getFlagVariants(){var t=this.Yn(ji),i=this.Yn(Co);if(!i)return t||{};for(var e=ye({},t),r=Object.keys(i),s=0;r.length>s;s++)e[r[s]]=i[r[s]];return this.Bn||(Ro.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:i,finalFlags:e}),this.Bn=!0),e}getFlagPayloads(){var t=this.Yn(Fo),i=this.Yn(Ao);if(!i)return t||{};for(var e=ye({},t||{}),r=Object.keys(i),s=0;r.length>s;s++)e[r[s]]=i[r[s]];return this.Bn||(Ro.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:i,finalPayloads:e}),this.Bn=!0),e}reloadFeatureFlags(){this.Zn||this.Rt.advanced_disable_feature_flags||this.Jn||(this._instance.ki.emit("featureFlagsReloading",!0),this.Jn=setTimeout((()=>{this.Kn()}),5))}Qn(){clearTimeout(this.Jn),this.Jn=void 0}ensureFlagsLoaded(){this.jn||this.qn||this.Jn||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this.Zn=t}Kn(t){var i;if(this.Qn(),!this._instance.Tr())if(this.qn)this.$n=!0;else{var e=this.Rt.token,r=this.Yn(Ti),s={token:e,distinct_id:this._instance.get_distinct_id(),groups:this._instance.getGroups(),$anon_distinct_id:this.$anon_distinct_id,person_properties:p({},(null==(i=this.Kr)?void 0:i.get_initial_props())||{},this.Yn(Hi)||{}),group_properties:this.Yn(qi),timezone:br()};M(r)||C(r)||(s.$device_id=r),(null!=t&&t.disableFlags||this.Rt.advanced_disable_feature_flags)&&(s.disable_flags=!0),this.Xn()&&(s.evaluation_contexts=this.Gn());var n=this._instance.requestRouter.endpointFor("flags","/flags/?v=2"+(this.Rt.advanced_only_evaluate_survey_feature_flags?"&only_evaluate_survey_feature_flags=true":""));this.qn=!0,this._instance._send_request({method:"POST",url:n,data:s,compression:this.Rt.disable_compression?void 0:Br.Base64,timeout:this.Rt.feature_flag_request_timeout_ms,callback:t=>{var i,e,r,n=!0;if(200===t.statusCode&&(this.$n||(this.$anon_distinct_id=void 0),n=!1),this.qn=!1,!s.disable_flags||this.$n){this.Hn=!n;var o=[];t.error?t.error instanceof Error?o.push("AbortError"===t.error.name?"timeout":"connection_error"):o.push("unknown_error"):200!==t.statusCode&&o.push("api_error_"+t.statusCode),null!=(i=t.json)&&i.errorsWhileComputingFlags&&o.push("errors_while_computing_flags");var a,l=!(null==(e=t.json)||null==(e=e.quotaLimited)||!e.includes("feature_flags"));if(l&&o.push("quota_limited"),null==(r=this.Kr)||r.register({[Gi]:o}),l)Ro.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset.  Please visit https://posthog.com/docs/billing/limits-alerts to learn more.");else s.disable_flags||this.receivedFeatureFlags(null!==(a=t.json)&&void 0!==a?a:{},n),this.$n&&(this.$n=!1,this.Kn())}}})}}getFeatureFlag(t,i){var e;if(void 0===i&&(i={}),!i.fresh||this.Hn)if(this.jn||this.getFlags()&&this.getFlags().length>0){if(!this.Wn()){var r=this.getFeatureFlagResult(t,i);return null!==(e=null==r?void 0:r.variant)&&void 0!==e?e:null==r?void 0:r.enabled}}else Ro.warn('getFeatureFlag for key "'+t+Oo)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var i=this.getFeatureFlagResult(t,{send_event:!1});return null==i?void 0:i.payload}getFeatureFlagResult(t,i){if(void 0===i&&(i={}),!i.fresh||this.Hn)if(this.jn||this.getFlags()&&this.getFlags().length>0){if(!this.Wn()){var e=this.getFlagVariants(),r=t in e,s=e[t],n=this.getFlagPayloads()[t],o=String(s),a=this.Yn(Mo)||void 0,l=this.Yn(Ji)||void 0,u=this.Yn(Vi)||{};if(this.Rt.advanced_feature_flags_dedup_per_session){var h,d=this._instance.get_session_id(),v=this.Yn(Yi);d&&d!==v&&(u={},null==(h=this.Kr)||h.register({[Vi]:u,[Yi]:d}))}if((i.send_event||!("send_event"in i))&&(!(t in u)||!u[t].includes(o))){var c,f,p,_,g,m,b,y,w,E;R(u[t])?u[t].push(o):u[t]=[o],null==(c=this.Kr)||c.register({[Vi]:u});var S=this.getFeatureFlagDetails(t),x=[...null!==(f=this.Yn(Gi))&&void 0!==f?f:[]];C(s)&&x.push("flag_missing");var T={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:n||null,$feature_flag_request_id:a,$feature_flag_evaluated_at:l,$feature_flag_bootstrapped_response:(null==(p=this.Rt.bootstrap)||null==(p=p.featureFlags)?void 0:p[t])||null,$feature_flag_bootstrapped_payload:(null==(_=this.Rt.bootstrap)||null==(_=_.featureFlagPayloads)?void 0:_[t])||null,$used_bootstrap_value:!this.Hn};C(null==S||null==(g=S.metadata)?void 0:g.version)||(T.$feature_flag_version=S.metadata.version);var k,P=null!==(m=null==S||null==(b=S.reason)?void 0:b.description)&&void 0!==m?m:null==S||null==(y=S.reason)?void 0:y.code;P&&(T.$feature_flag_reason=P),null!=S&&null!=(w=S.metadata)&&w.id&&(T.$feature_flag_id=S.metadata.id),C(null==S?void 0:S.original_variant)&&C(null==S?void 0:S.original_enabled)||(T.$feature_flag_original_response=C(S.original_variant)?S.original_enabled:S.original_variant),null!=S&&null!=(E=S.metadata)&&E.original_payload&&(T.$feature_flag_original_payload=null==S||null==(k=S.metadata)?void 0:k.original_payload),x.length&&(T.$feature_flag_error=x.join(",")),this._instance.capture("$feature_flag_called",T)}if(r){var O=n;if(!C(n))try{O=JSON.parse(n)}catch(t){}return{key:t,enabled:!!s,variant:"string"==typeof s?s:void 0,payload:O}}}}else Ro.warn('getFeatureFlagResult for key "'+t+Oo)}getRemoteConfigPayload(t,i){var e=this.Rt.token,r={distinct_id:this._instance.get_distinct_id(),token:e};this.Xn()&&(r.evaluation_contexts=this.Gn()),this._instance._send_request({method:"POST",url:this._instance.requestRouter.endpointFor("flags","/flags/?v=2"),data:r,compression:this.Rt.disable_compression?void 0:Br.Base64,timeout:this.Rt.feature_flag_request_timeout_ms,callback(e){var r,s=null==(r=e.json)?void 0:r.featureFlagPayloads;i((null==s?void 0:s[t])||void 0)}})}isFeatureEnabled(t,i){if(void 0===i&&(i={}),!i.fresh||this.Hn){if(this.jn||this.getFlags()&&this.getFlags().length>0){var e=this.getFeatureFlag(t,i);return C(e)?void 0:!!e}Ro.warn('isFeatureEnabled for key "'+t+Oo)}}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((i=>i!==t))}receivedFeatureFlags(t,i){if(this.Kr){this.jn=!0;var e=this.getFlagVariants(),r=this.getFlagPayloads(),s=this.getFlagsWithDetails();!function(t,i,e,r,s){void 0===e&&(e={}),void 0===r&&(r={}),void 0===s&&(s={});var n=(t=>{var i=t.flags;return i?(t.featureFlags=Object.fromEntries(Object.keys(i).map((t=>{var e;return[t,null!==(e=i[t].variant)&&void 0!==e?e:i[t].enabled]}))),t.featureFlagPayloads=Object.fromEntries(Object.keys(i).filter((t=>i[t].enabled)).filter((t=>{var e;return null==(e=i[t].metadata)?void 0:e.payload})).map((t=>{var e;return[t,null==(e=i[t].metadata)?void 0:e.payload]})))):Ro.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),t})(t),o=n.flags,a=n.featureFlags,l=n.featureFlagPayloads;if(a){var u=t.requestId,h=t.evaluatedAt;if(R(a)){Ro.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var d={};if(a)for(var v=0;a.length>v;v++)d[a[v]]=!0;i&&i.register({[Io]:a,[ji]:d})}else{var c=a,f=l,_=o;if(t.errorsWhileComputingFlags)if(o){var g=new Set(Object.keys(o).filter((t=>{var i;return!(null!=(i=o[t])&&i.failed)})));c=p({},e,Object.fromEntries(Object.entries(c).filter((t=>{var[i]=t;return g.has(i)})))),f=p({},r,Object.fromEntries(Object.entries(f||{}).filter((t=>{var[i]=t;return g.has(i)})))),_=p({},s,Object.fromEntries(Object.entries(_||{}).filter((t=>{var[i]=t;return g.has(i)}))))}else c=p({},e,c),f=p({},r,f),_=p({},s,_);i&&i.register(p({[Io]:Object.keys(Lo(c)),[ji]:c||{},[Fo]:f||{},[Bi]:_||{}},u?{[Mo]:u}:{},h?{[Ji]:h}:{}))}}}(t,this.Kr,e,r,s),i||(this.zn=!1),this.ts(i)}}override(t,i){void 0===i&&(i=!1),Ro.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:i})}overrideFeatureFlags(t){if(!this._instance.__loaded||!this.Kr)return Ro.uninitializedWarning("posthog.featureFlags.overrideFeatureFlags");if(!1===t)return this.Kr.unregister(Co),this.Kr.unregister(Ao),this.ts(),Po.info("All overrides cleared");if(R(t)){var i=Do(t);return this.Kr.register({[Co]:i}),this.ts(),Po.info("Flag overrides set",{flags:t})}if(t&&"object"==typeof t&&("flags"in t||"payloads"in t)){var e,r=t;if(this.Bn=Boolean(null!==(e=r.suppressWarning)&&void 0!==e&&e),"flags"in r)if(!1===r.flags)this.Kr.unregister(Co),Po.info("Flag overrides cleared");else if(r.flags){if(R(r.flags)){var s=Do(r.flags);this.Kr.register({[Co]:s})}else this.Kr.register({[Co]:r.flags});Po.info("Flag overrides set",{flags:r.flags})}return"payloads"in r&&(!1===r.payloads?(this.Kr.unregister(Ao),Po.info("Payload overrides cleared")):r.payloads&&(this.Kr.register({[Ao]:r.payloads}),Po.info("Payload overrides set",{payloads:r.payloads}))),void this.ts()}if(t&&"object"==typeof t)return this.Kr.register({[Co]:t}),this.ts(),Po.info("Flag overrides set",{flags:t});Ro.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.jn){var{flags:i,flagVariants:e}=this.es();t(i,e)}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,i,e){var r,s=(this.Yn(zi)||[]).find((i=>i.flagKey===t)),n={["$feature_enrollment/"+t]:i},o={$feature_flag:t,$feature_enrollment:i,$set:n};s&&(o.$early_access_feature_name=s.name),e&&(o.$feature_enrollment_stage=e),this._instance.capture("$feature_enrollment_update",o),this.setPersonPropertiesForFlags(n,!1);var a=p({},this.getFlagVariants(),{[t]:i});null==(r=this.Kr)||r.register({[Io]:Object.keys(Lo(a)),[ji]:a}),this.ts()}getEarlyAccessFeatures(t,i,e){void 0===i&&(i=!1);var r=this.Yn(zi),s=e?"&"+e.map((t=>"stage="+t)).join("&"):"";if(r&&!i)return t(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/early_access_features/?token="+this.Rt.token+s),method:"GET",callback:i=>{var e,r;if(i.json){var s=i.json.earlyAccessFeatures;return null==(e=this.Kr)||e.unregister(zi),null==(r=this.Kr)||r.register({[zi]:s}),t(s)}}})}es(){var t=this.getFlags(),i=this.getFlagVariants();return{flags:t.filter((t=>i[t])),flagVariants:Object.keys(i).filter((t=>i[t])).reduce(((t,e)=>(t[e]=i[e],t)),{})}}ts(t){var{flags:i,flagVariants:e}=this.es();this.featureFlagEventHandlers.forEach((r=>r(i,e,{errorsLoading:t})))}setPersonPropertiesForFlags(t,i){void 0===i&&(i=!0);var e=this.Yn(Hi)||{},r=(null==t?void 0:t.$set)||(null!=t&&t.$set_once?{}:t),s=null==t?void 0:t.$set_once,n={};if(s)for(var o in s)({}).hasOwnProperty.call(s,o)&&(o in e||(n[o]=s[o]));this._instance.register({[Hi]:p({},e,n,r)}),i&&this._instance.reloadFeatureFlags()}resetPersonPropertiesForFlags(){this._instance.unregister(Hi)}setGroupPropertiesForFlags(t,i){void 0===i&&(i=!0);var e=this.Yn(qi)||{};0!==Object.keys(e).length&&Object.keys(e).forEach((i=>{e[i]=p({},e[i],t[i]),delete t[i]})),this._instance.register({[qi]:p({},e,t)}),i&&this._instance.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var i=this.Yn(qi)||{};this._instance.register({[qi]:p({},i,{[t]:{}})})}else this._instance.unregister(qi)}reset(){this.jn=!1,this.qn=!1,this.Zn=!1,this.$n=!1,this.Hn=!1,this.$anon_distinct_id=void 0,this.Qn(),this.Bn=!1}}},Wo={sessionRecording:class{get Rt(){return this._instance.config}get Kr(){return this._instance.persistence}get started(){var t;return!(null==(t=this.rs)||!t.isStarted)}get status(){var t,i;return this.ns===ao||this.ns===lo?this.ns:null!==(t=null==(i=this.rs)?void 0:i.status)&&void 0!==t?t:this.ns}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.ns=no,this.ss=void 0,this._instance=t,!this._instance.sessionManager)throw ho.error("started without valid sessionManager"),new Error(uo+" started without valid sessionManager. This is a bug.");if(this.Rt.cookieless_mode===le)throw new Error(uo+' cannot be used with cookieless_mode="always"')}initialize(){this.startIfEnabledOrStop()}get os(){var i,e=!(null==(i=this._instance.get_property(Li))||!i.enabled),r=!this.Rt.disable_session_recording,s=this.Rt.disable_session_recording||this._instance.consent.isOptedOut();return t&&e&&r&&!s}startIfEnabledOrStop(t){var i;if(!this.os||null==(i=this.rs)||!i.isStarted){var e=!C(Object.assign)&&!C(Array.from);this.os&&e?(this.ls(t),ho.info("starting")):(this.ns=no,this.stopRecording())}}ls(t){var i,e,r;this.os&&(this.ns!==ao&&this.ns!==lo&&(this.ns=oo),null!=h&&null!=(i=h.__PosthogExtensions__)&&null!=(i=i.rrweb)&&i.record&&null!=(e=h.__PosthogExtensions__)&&e.initSessionRecording?this.us(t):null==(r=h.__PosthogExtensions__)||null==r.loadExternalDependency||r.loadExternalDependency(this._instance,this.hs,(i=>{if(i)return ho.error("could not load recorder",i);this.us(t)})))}stopRecording(){var t,i;null==(t=this.ss)||t.call(this),this.ss=void 0,null==(i=this.rs)||i.stop()}cs(){var t,i;null==(t=this.ss)||t.call(this),this.ss=void 0,null==(i=this.rs)||i.discard()}ds(){var t;null==(t=this.Kr)||t.unregister(Ni)}vs(t,i){if(D(t))return null;var e,r=L(t)?t:parseFloat(t);return"number"!=typeof(e=r)||!Number.isFinite(e)||0>e||e>1?(ho.warn(i+" must be between 0 and 1. Ignoring invalid value:",t),null):r}fs(t){if(this.Kr){var i,e,r=this.Kr,s=()=>{var i,e=!1===t.sessionRecording?void 0:t.sessionRecording,s=this.vs(null==(i=this.Rt.session_recording)?void 0:i.sampleRate,"session_recording.sampleRate"),n=this.vs(null==e?void 0:e.sampleRate,"remote config sampleRate"),o=null!=s?s:n;D(o)&&this.ds();var a=null==e?void 0:e.minimumDurationMilliseconds;r.register({[Li]:p({cache_timestamp:Date.now(),enabled:!!e},e,{networkPayloadCapture:p({capturePerformance:t.capturePerformance},null==e?void 0:e.networkPayloadCapture),canvasRecording:{enabled:null==e?void 0:e.recordCanvas,fps:null==e?void 0:e.canvasFps,quality:null==e?void 0:e.canvasQuality},sampleRate:o,minimumDurationMilliseconds:C(a)?null:a,endpoint:null==e?void 0:e.endpoint,triggerMatchType:null==e?void 0:e.triggerMatchType,masking:null==e?void 0:e.masking,urlTriggers:null==e?void 0:e.urlTriggers})})};s(),null==(i=this.ss)||i.call(this),this.ss=null==(e=this._instance.sessionManager)?void 0:e.onSessionId(s)}}onRemoteConfig(t){return"sessionRecording"in t?!1===t.sessionRecording?(this.fs(t),void this.cs()):(this.fs(t),void this.startIfEnabledOrStop()):(this.ns===ao&&(this.ns=lo,ho.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,i){var e;void 0===i&&(i="log"),null!=(e=this.rs)&&e.log?this.rs.log(t,i):ho.warn("log called before recorder was ready")}get hs(){var t,i,e=null==(t=this._instance)||null==(t=t.persistence)?void 0:t.get_property(Li);return(null==e||null==(i=e.scriptConfig)?void 0:i.script)||"lazy-recorder"}ps(){var t,i=this._instance.get_property(Li);if(!i)return!1;var e=null!==(t=("object"==typeof i?i:JSON.parse(i)).cache_timestamp)&&void 0!==t?t:Date.now();return 36e5>=Date.now()-e}us(t){var i,e;if(null==(i=h.__PosthogExtensions__)||!i.initSessionRecording)return ho.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({$sdk_debug_recording_script_not_loaded:!0});if(this.rs||(this.rs=null==(e=h.__PosthogExtensions__)?void 0:e.initSessionRecording(this._instance),this.rs._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.ps()){if(this.ns===lo||this.ns===ao)return;return this.ns=ao,ho.info("persisted remote config is stale, requesting fresh config before starting"),void new jr(this._instance).load()}this.ns=oo,this.rs.start(t)}onRRwebEmit(t){var i;null==(i=this.rs)||null==i.onRRwebEmit||i.onRRwebEmit(t)}overrideLinkedFlag(){var t,i;this.rs||null==(i=this.Kr)||i.register({$replay_override_linked_flag:!0}),null==(t=this.rs)||t.overrideLinkedFlag()}overrideSampling(){var t,i;this.rs||null==(i=this.Kr)||i.register({$replay_override_sampling:!0}),null==(t=this.rs)||t.overrideSampling()}overrideTrigger(t){var i,e;this.rs||null==(e=this.Kr)||e.register({["url"===t?"$replay_override_url_trigger":"$replay_override_event_trigger"]:!0}),null==(i=this.rs)||i.overrideTrigger(t)}get sdkDebugProperties(){var t;return(null==(t=this.rs)?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,i){var e;return!(null==(e=this.rs)||!e.tryAddCustomEvent(t,i))}}},Vo={autocapture:class{constructor(t){this.gs=!1,this.ys=null,this.bs=!1,this.instance=t,this.rageclicks=new Gn(t.config.rageclick),this.ws=null}initialize(){this.startIfEnabled()}get Rt(){var t,i,e=O(this.instance.config.autocapture)?this.instance.config.autocapture:{};return e.url_allowlist=null==(t=e.url_allowlist)?void 0:t.map((t=>new RegExp(t))),e.url_ignorelist=null==(i=e.url_ignorelist)?void 0:i.map((t=>new RegExp(t))),e}_s(){if(this.isBrowserSupported()){if(t&&r){var i=i=>{i=i||(null==t?void 0:t.event);try{this.Is(i)}catch(t){Kn.error("Failed to capture event",t)}};if(ke(r,"submit",i,{capture:!0}),ke(r,"change",i,{capture:!0}),ke(r,"click",i,{capture:!0}),this.Rt.capture_copied_text){var e=i=>{this.Is(i=i||(null==t?void 0:t.event),Jn)};ke(r,"copy",e,{capture:!0}),ke(r,"cut",e,{capture:!0})}}}else Kn.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.gs&&(this._s(),this.gs=!0)}onRemoteConfig(t){t.elementsChainAsString&&(this.bs=t.elementsChainAsString),this.instance.persistence&&this.instance.persistence.register({[Ri]:!!t.autocapture_opt_out}),this.ys=!!t.autocapture_opt_out,this.startIfEnabled()}setElementSelectors(t){this.ws=t}getElementSelectors(t){var i,e=[];return null==(i=this.ws)||i.forEach((i=>{var s=null==r?void 0:r.querySelectorAll(i);null==s||s.forEach((r=>{t===r&&e.push(i)}))})),e}get isEnabled(){var t,i,e=null==(t=this.instance.persistence)?void 0:t.props[Ri];if(M(this.ys)&&!N(e)&&!this.instance.Tr())return!1;var r=null!==(i=this.ys)&&void 0!==i?i:!!e;return!!this.instance.config.autocapture&&!r}Is(i,e){if(void 0===e&&(e="$autocapture"),this.isEnabled){var r,s=kn(i);yn(s)&&(s=s.parentNode||null),"$autocapture"===e&&"click"===i.type&&i instanceof MouseEvent&&this.instance.config.rageclick&&null!=(r=this.rageclicks)&&r.isRageClick(i.clientX,i.clientY,i.timeStamp||(new Date).getTime())&&function(i,e){if(!t||Fn(i))return!1;var r,s,n;if(N(e)?(r=!!e&&Cn,s=void 0):(r=null!==(n=null==e?void 0:e.css_selector_ignorelist)&&void 0!==n?n:Cn,s=null==e?void 0:e.content_ignorelist),!1===r)return!1;var{targetElementList:o}=An(i,!1);return!function(t,i){if(!1===t||C(t))return!1;var e;if(!0===t)e=In;else{if(!R(t))return!1;if(t.length>10)return yi.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;e=t.map((t=>t.toLowerCase()))}return i.some((t=>{var{safeText:i,ariaLabel:r}=t;return e.some((t=>i.includes(t)||r.includes(t)))}))}(s,o.map((t=>{var i;return{safeText:$n(t).toLowerCase(),ariaLabel:(null==(i=t.getAttribute("aria-label"))?void 0:i.toLowerCase().trim())||""}})))&&!Pn(o,r)}(s,this.instance.config.rageclick)&&this.Is(i,"$rageclick");var n=e===Jn;if(s&&function(i,e,r,s,n){var o,a,l,u;if(void 0===r&&(r=void 0),!t||Fn(i))return!1;if(null!=(o=r)&&o.url_allowlist&&!Sn(r.url_allowlist))return!1;if(null!=(a=r)&&a.url_ignorelist&&Sn(r.url_ignorelist))return!1;if(null!=(l=r)&&l.dom_event_allowlist){var h=r.dom_event_allowlist;if(h&&!h.some((t=>e.type===t)))return!1}var{parentIsUsefulElement:d,targetElementList:v}=An(i,s);if(!function(t,i){var e=null==i?void 0:i.element_allowlist;if(C(e))return!0;var r,s=function(t){if(e.some((i=>t.tagName.toLowerCase()===i)))return{v:!0}};for(var n of t)if(r=s(n))return r.v;return!1}(v,r))return!1;if(!Pn(v,null==(u=r)?void 0:u.css_selector_allowlist))return!1;var c=t.getComputedStyle(i);if(c&&"pointer"===c.getPropertyValue("cursor")&&"click"===e.type)return!0;var f=i.tagName.toLowerCase();switch(f){case"html":return!1;case"form":return(n||["submit"]).indexOf(e.type)>=0;case"input":case"select":case"textarea":return(n||["change","click"]).indexOf(e.type)>=0;default:return d?(n||["click"]).indexOf(e.type)>=0:(n||["click"]).indexOf(e.type)>=0&&(Rn.indexOf(f)>-1||"true"===i.getAttribute("contenteditable"))}}(s,i,this.Rt,n,n?["copy","cut"]:void 0)){var{props:o,explicitNoCapture:a}=Zn(s,{e:i,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Rt.element_attribute_ignorelist,elementsChainAsString:this.bs});if(a)return!1;var l=this.getElementSelectors(s);if(l&&l.length>0&&(o.$element_selectors=l),e===Jn){var u,h=Tn(null==t||null==(u=t.getSelection())?void 0:u.toString()),d=i.type||"clipboard";if(!h)return!1;o.$selected_content=h,o.$copy_type=d}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return P(null==r?void 0:r.querySelectorAll)}},historyAutocapture:class{constructor(i){var e;this._instance=i,this.Cs=(null==t||null==(e=t.location)?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return"history_change"===this._instance.config.capture_pageview}startIfEnabled(){this.isEnabled&&(yi.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.Ss&&this.Ss(),this.Ss=void 0,yi.info("History API monitoring stopped")}monitorHistoryChanges(){var i,e;if(t&&t.history){var r=this;null!=(i=t.history.pushState)&&i.__posthog_wrapped__||io(t.history,"pushState",(t=>function(i,e,s){t.call(this,i,e,s),r.ks("pushState")})),null!=(e=t.history.replaceState)&&e.__posthog_wrapped__||io(t.history,"replaceState",(t=>function(i,e,s){t.call(this,i,e,s),r.ks("replaceState")})),this.xs()}}ks(i){try{var e,r=null==t||null==(e=t.location)?void 0:e.pathname;if(!r)return;r!==this.Cs&&this.isEnabled&&this._instance.capture(fe,{navigation_type:i}),this.Cs=r}catch(t){yi.error("Error capturing "+i+" pageview",t)}}xs(){if(!this.Ss){var i=()=>{this.ks("popstate")};ke(t,"popstate",i),this.Ss=()=>{t&&t.removeEventListener("popstate",i)}}}},heatmaps:class{get Rt(){return this.instance.config}constructor(t){var i;this.Ts=!1,this.gs=!1,this.As=null,this.instance=t,this.Ts=!(null==(i=this.instance.persistence)||!i.props[Pi]),this.rageclicks=new Gn(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return O(this.Rt.capture_heatmaps)&&this.Rt.capture_heatmaps.flush_interval_milliseconds&&(t=this.Rt.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return D(this.Rt.capture_heatmaps)?D(this.Rt.enable_heatmaps)?this.Ts:this.Rt.enable_heatmaps:!1!==this.Rt.capture_heatmaps}startIfEnabled(){if(this.isEnabled){if(this.gs)return;vo.info("starting..."),this.Es(),this.Tt()}else{var t;clearInterval(null!==(t=this.As)&&void 0!==t?t:void 0),this.Rs(),this.getAndClearBuffer()}}onRemoteConfig(t){if("heatmaps"in t){var i=!!t.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Pi]:i}),this.Ts=i,this.startIfEnabled()}}getAndClearBuffer(){var t=this.T;return this.T=void 0,t}Ns(t){this.wt(t.originalEvent,"deadclick")}Tt(){this.As&&clearInterval(this.As),this.As="visible"===(null==r?void 0:r.visibilityState)?setInterval(this.Zr.bind(this),this.flushIntervalMilliseconds):null}Es(){t&&r&&(this.Ms=this.Zr.bind(this),ke(t,ce,this.Ms),this.Fs=i=>this.wt(i||(null==t?void 0:t.event)),ke(r,"click",this.Fs,{capture:!0}),this.Os=i=>this.Ps(i||(null==t?void 0:t.event)),ke(r,"mousemove",this.Os,{capture:!0}),this.Ls=new Ke(this.instance,Ge,this.Ns.bind(this)),this.Ls.startIfEnabledOrStop(),this.Ds=this.Tt.bind(this),ke(r,ve,this.Ds),this.gs=!0)}Rs(){var i;t&&r&&(this.Ms&&t.removeEventListener(ce,this.Ms),this.Fs&&r.removeEventListener("click",this.Fs,{capture:!0}),this.Os&&r.removeEventListener("mousemove",this.Os,{capture:!0}),this.Ds&&r.removeEventListener(ve,this.Ds),clearTimeout(this.Bs),null==(i=this.Ls)||i.stop(),this.gs=!1)}js(i,e){var r=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),n=this.instance.scrollManager.scrollElement(),o=function(i,e,r){for(var s=i;s&&mn(s)&&!bn(s,"body");){if(s===r)return!1;if(w(e,null==t?void 0:t.getComputedStyle(s).position))return!0;s=On(s)}return!1}(kn(i),["fixed","sticky"],n);return{x:i.clientX+(o?0:s),y:i.clientY+(o?0:r),target_fixed:o,type:e}}wt(t,i){var e;if(void 0===i&&(i="click"),!gn(t.target)&&co(t)){var r=this.js(t,i);null!=(e=this.rageclicks)&&e.isRageClick(t.clientX,t.clientY,(new Date).getTime())&&this.qs(p({},r,{type:"rageclick"})),this.qs(r)}}Ps(t){!gn(t.target)&&co(t)&&(clearTimeout(this.Bs),this.Bs=setTimeout((()=>{this.qs(this.js(t,"mousemove"))}),500))}qs(i){if(t){var e=t.location.href,r=this.Rt.custom_personal_data_properties,s=this.Rt.mask_personal_data_properties?[...ar,...r||[]]:[],n=sr(e,s,ur);this.T=this.T||{},this.T[n]||(this.T[n]=[]),this.T[n].push(i)}}Zr(){this.T&&!I(this.T)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:Ke,webVitalsAutocapture:class{constructor(t){var i;this.Ts=!1,this.gs=!1,this.T={url:void 0,metrics:[],firstMetricTimestamp:void 0},this.Zs=()=>{clearTimeout(this.$s),0!==this.T.metrics.length&&(this._instance.capture("$web_vitals",this.T.metrics.reduce(((t,i)=>p({},t,{["$web_vitals_"+i.name+"_event"]:p({},i),["$web_vitals_"+i.name+"_value"]:i.value})),{})),this.T={url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.nt=t=>{var i,e=null==(i=this._instance.sessionManager)?void 0:i.checkAndGetSessionAndWindowId(!0);if(C(e))ro.error("Could not read session ID. Dropping metrics!");else{this.T=this.T||{url:void 0,metrics:[],firstMetricTimestamp:void 0};var r=this.Hs();C(r)||(D(null==t?void 0:t.name)||D(null==t?void 0:t.value)?ro.error("Invalid metric received",t):!this.Vs||this.Vs>t.value?(this.T.url!==r&&(this.Zs(),this.$s=setTimeout(this.Zs,this.flushToCaptureTimeoutMs)),C(this.T.url)&&(this.T.url=r),this.T.firstMetricTimestamp=C(this.T.firstMetricTimestamp)?Date.now():this.T.firstMetricTimestamp,t.attribution&&t.attribution.interactionTargetElement&&(t.attribution.interactionTargetElement=void 0),this.T.metrics.push(p({},t,{$current_url:r,$session_id:e.sessionId,$window_id:e.windowId,timestamp:Date.now()})),this.T.metrics.length===this.allowedMetrics.length&&this.Zs()):ro.error("Ignoring metric with value >= "+this.Vs,t))}},this.zs=()=>{if(!this.gs){var t,i,e,r,s=h.__PosthogExtensions__;C(s)||C(s.postHogWebVitalsCallbacks)||({onLCP:t,onCLS:i,onFCP:e,onINP:r}=s.postHogWebVitalsCallbacks),t&&i&&e&&r?(this.allowedMetrics.indexOf("LCP")>-1&&t(this.nt.bind(this)),this.allowedMetrics.indexOf("CLS")>-1&&i(this.nt.bind(this)),this.allowedMetrics.indexOf("FCP")>-1&&e(this.nt.bind(this)),this.allowedMetrics.indexOf("INP")>-1&&r(this.nt.bind(this)),this.gs=!0):ro.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Ts=!(null==(i=this._instance.persistence)||!i.props[Fi]),this.startIfEnabled()}get Ys(){return this._instance.config.capture_performance}get allowedMetrics(){var t,i,e=O(this.Ys)?null==(t=this.Ys)?void 0:t.web_vitals_allowed_metrics:void 0;return D(e)?(null==(i=this._instance.persistence)?void 0:i.props[Di])||["CLS","FCP","INP","LCP"]:e}get flushToCaptureTimeoutMs(){return(O(this.Ys)?this.Ys.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=O(this.Ys)?this.Ys.web_vitals_attribution:void 0;return null!=t&&t}get Vs(){var t=O(this.Ys)&&L(this.Ys.__web_vitals_max_value)?this.Ys.__web_vitals_max_value:so;return t>0&&6e4>=t?so:t}get isEnabled(){var t=null==s?void 0:s.protocol;if("http:"!==t&&"https:"!==t)return ro.info("Web Vitals are disabled on non-http/https protocols"),!1;var i=O(this.Ys)?this.Ys.web_vitals:N(this.Ys)?this.Ys:void 0;return N(i)?i:this.Ts}startIfEnabled(){this.isEnabled&&!this.gs&&(ro.info("enabled, starting..."),this.nr(this.zs))}onRemoteConfig(t){if("capturePerformance"in t){var i=O(t.capturePerformance)&&!!t.capturePerformance.web_vitals,e=O(t.capturePerformance)?t.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Fi]:i}),this._instance.persistence.register({[Di]:e})),this.Ts=i,this.startIfEnabled()}}nr(t){var i,e;null!=(i=h.__PosthogExtensions__)&&i.postHogWebVitalsCallbacks?t():null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,this.useAttribution?"web-vitals-with-attribution":"web-vitals",(i=>{i?ro.error("failed to load script",i):t()}))}Hs(){var i=t?t.location.href:void 0;if(i){var e=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[...ar,...e||[]]:[];return sr(i,r,ur)}ro.error("Could not determine current URL")}}},Yo={exceptionObserver:class{constructor(i){var e,r,s;this.zs=()=>{var i;if(t&&this.isEnabled&&null!=(i=h.__PosthogExtensions__)&&i.errorWrappingFunctions){var e=h.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=h.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=h.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Us&&this.Rt.capture_unhandled_errors&&(this.Us=e(this.captureException.bind(this))),!this.Ws&&this.Rt.capture_unhandled_rejections&&(this.Ws=r(this.captureException.bind(this))),!this.Gs&&this.Rt.capture_console_errors&&(this.Gs=s(this.captureException.bind(this)))}catch(t){to.error("failed to start",t),this.Xs()}}},this._instance=i,this.Js=!(null==(e=this._instance.persistence)||!e.props[Oi]),this.Ks=new J({refillRate:null!==(r=this._instance.config.error_tracking.__exceptionRateLimiterRefillRate)&&void 0!==r?r:1,bucketSize:null!==(s=this._instance.config.error_tracking.__exceptionRateLimiterBucketSize)&&void 0!==s?s:10,refillInterval:1e4,qt:to}),this.Rt=this.Qs(),this.startIfEnabledOrStop()}Qs(){var t=this._instance.config.capture_exceptions,i={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return O(t)?i=p({},i,t):(C(t)?this.Js:t)&&(i=p({},i,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),i}get isEnabled(){return this.Rt.capture_console_errors||this.Rt.capture_unhandled_errors||this.Rt.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(to.info("enabled"),this.Xs(),this.nr(this.zs)):this.Xs()}nr(t){var i,e;null!=(i=h.__PosthogExtensions__)&&i.errorWrappingFunctions&&t(),null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,"exception-autocapture",(i=>{if(i)return to.error("failed to load script",i);t()}))}Xs(){var t,i,e;null==(t=this.Us)||t.call(this),this.Us=void 0,null==(i=this.Ws)||i.call(this),this.Ws=void 0,null==(e=this.Gs)||e.call(this),this.Gs=void 0}onRemoteConfig(t){"autocaptureExceptions"in t&&(this.Js=!!t.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Oi]:this.Js}),this.Rt=this.Qs(),this.startIfEnabledOrStop())}onConfigChange(){this.Rt=this.Qs()}captureException(t){var i,e,r,s=null!==(i=null==t||null==(e=t.$exception_list)||null==(e=e[0])?void 0:e.type)&&void 0!==i?i:"Exception";this.Ks.consumeRateLimit(s)?to.info("Skipping exception capture because of client rate limiting.",{exception:s}):null==(r=this._instance.exceptions)||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var i,e;this.eo=[],this.ro=new Kt([new li,new mi,new hi,new ui,new _i,new pi,new vi,new gi],function(t){for(var i=arguments.length,e=new Array(i>1?i-1:0),r=1;i>r;r++)e[r-1]=arguments[r];return function(i,r){void 0===r&&(r=0);for(var s=[],n=i.split("\n"),o=r;n.length>o;o++){var a=n[o];if(1024>=a.length){var l=ai.test(a)?a.replace(ai,"$1"):a;if(!l.match(/\S*Error: /)){for(var u of e){var h=u(l,t);if(h){s.push(h);break}}if(s.length>=50)break}}}return function(t){if(!t.length)return[];var i=Array.from(t);return i.reverse(),i.slice(0,50).map((t=>{return p({},t,{filename:t.filename||(e=i,e[e.length-1]||{}).filename,function:t.function||Xt});var e}))}(s)}}("web:javascript",ri,oi)),this._instance=t,this.eo=null!==(i=null==(e=this._instance.persistence)?void 0:e.get_property(Ii))&&void 0!==i?i:[]}onRemoteConfig(t){var i,e,r;if("errorTracking"in t){var s=null!==(i=null==(e=t.errorTracking)?void 0:e.suppressionRules)&&void 0!==i?i:[],n=null==(r=t.errorTracking)?void 0:r.captureExtensionExceptions;this.eo=s,this._instance.persistence&&this._instance.persistence.register({[Ii]:this.eo,[Ci]:n})}}get io(){var t,i=!!this._instance.get_property(Ci),e=this._instance.config.error_tracking.captureExtensionExceptions;return null!==(t=null!=e?e:i)&&void 0!==t&&t}buildProperties(t,i){return this.ro.buildFromUnknown(t,{syntheticException:null==i?void 0:i.syntheticException,mechanism:{handled:null==i?void 0:i.handled}})}sendExceptionEvent(t){var i=t.$exception_list;if(this.no(i)){if(this.so(i))return void Uo.info("Skipping exception capture because a suppression rule matched");if(!this.io&&this.oo(i))return void Uo.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.ao(i))return void Uo.info("Skipping exception capture because it was thrown by the PostHog SDK")}return this._instance.capture("$exception",t,{_noTruncate:!0,_batchKey:"exceptionEvent",zi:!0})}so(t){if(0===t.length)return!1;var i=t.reduce(((t,i)=>{var{type:e,value:r}=i;return F(e)&&e.length>0&&t.$exception_types.push(e),F(r)&&r.length>0&&t.$exception_values.push(r),t}),{$exception_types:[],$exception_values:[]});return this.eo.some((t=>{var e=t.values.map((t=>{var e,r=zs[t.operator],s=R(t.value)?t.value:[t.value],n=null!==(e=i[t.key])&&void 0!==e?e:[];return s.length>0&&r(s,n)}));return"OR"===t.type?e.some(Boolean):e.every(Boolean)}))}oo(t){return t.flatMap((t=>{var i,e;return null!==(i=null==(e=t.stacktrace)?void 0:e.frames)&&void 0!==i?i:[]})).some((t=>t.filename&&t.filename.startsWith("chrome-extension://")))}ao(t){if(t.length>0){var i,e,r,s,n=null!==(i=null==(e=t[0].stacktrace)?void 0:e.frames)&&void 0!==i?i:[],o=n[n.length-1];return null!==(r=null==o||null==(s=o.filename)?void 0:s.includes("posthog.com/static"))&&void 0!==r&&r}return!1}no(t){return!D(t)&&R(t)}}},Go=p({productTours:class{get Kr(){return this._instance.persistence}constructor(t){this.lo=null,this.uo=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){"productTours"in t&&(this.Kr&&this.Kr.register({[Mi]:!!t.productTours}),this.loadIfEnabled())}loadIfEnabled(){var t,i;this.lo||(t=this._instance).config.disable_product_tours||null==(i=t.persistence)||!i.get_property(Mi)||this.nr((()=>this.ho()))}nr(t){var i,e;null!=(i=h.__PosthogExtensions__)&&i.generateProductTours?t():null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,"product-tours",(i=>{i?fo.error("Could not load product tours script",i):t()}))}ho(){var t;!this.lo&&null!=(t=h.__PosthogExtensions__)&&t.generateProductTours&&(this.lo=h.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,i){if(void 0===i&&(i=!1),!R(this.uo)||i){var e=this.Kr;if(e){var r=e.props[po];if(R(r)&&!i)return this.uo=r,void t(r,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",callback:i=>{var r=i.statusCode;if(200!==r||!i.json){var s="Product Tours API could not be loaded, status: "+r;return fo.error(s),void t([],{isLoaded:!1,error:s})}var n=R(i.json.product_tours)?i.json.product_tours:[];this.uo=n,e&&e.register({[po]:n}),t(n,{isLoaded:!0})}})}else t(this.uo,{isLoaded:!0})}getActiveProductTours(t){D(this.lo)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.lo.getActiveProductTours(t)}showProductTour(t){var i;null==(i=this.lo)||i.showTourById(t)}previewTour(t){this.lo?this.lo.previewTour(t):this.nr((()=>{var i;this.ho(),null==(i=this.lo)||i.previewTour(t)}))}dismissProductTour(){var t;null==(t=this.lo)||t.dismissTour("user_clicked_skip")}nextStep(){var t;null==(t=this.lo)||t.nextStep()}previousStep(){var t;null==(t=this.lo)||t.previousStep()}clearCache(){var t;this.uo=null,null==(t=this.Kr)||t.unregister(po)}resetTour(t){var i;null==(i=this.lo)||i.resetTour(t)}resetAllTours(){var t;null==(t=this.lo)||t.resetAllTours()}cancelPendingTour(t){var i;null==(i=this.lo)||i.cancelPendingTour(t)}}},qo),Jo={siteApps:class{constructor(t){this._instance=t,this.co=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}do(t,i){if(i){var e=this.globalsForEvent(i);this.co.push(e),this.co.length>1e3&&(this.co=this.co.slice(10))}}get siteAppLoaders(){var t;return null==(t=h._POSTHOG_REMOTE_CONFIG)||null==(t=t[this._instance.config.token])?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.do.bind(this));this.vo=()=>{t(),this.co=[],this.vo=void 0}}}globalsForEvent(t){var i,e,r,s,n,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],h=this._instance.get_property("$stored_group_properties")||{};for(var[d,v]of Object.entries(h))l[d]={id:u[d],type:d,properties:v};var{$set_once:c,$set:f}=t;return{event:p({},_(t,_o),{properties:p({},t.properties,f?{$set:p({},null!==(i=null==(e=t.properties)?void 0:e.$set)&&void 0!==i?i:{},f)}:{},c?{$set_once:p({},null!==(r=null==(s=t.properties)?void 0:s.$set_once)&&void 0!==r?r:{},c)}:{}),elements_chain:null!==(n=null==(o=t.properties)?void 0:o.$elements_chain)&&void 0!==n?n:"",distinct_id:null==(a=t.properties)?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}setupSiteApp(t){var i=this.apps[t.id],e=()=>{var e;!i.errored&&this.co.length&&(go.info("Processing "+this.co.length+" events for site app with id "+t.id),this.co.forEach((t=>null==i.processEvent?void 0:i.processEvent(t))),i.processedBuffer=!0),Object.values(this.apps).every((t=>t.processedBuffer||t.errored))&&(null==(e=this.vo)||e.call(this))},r=!1,s=s=>{i.errored=!s,i.loaded=!0,go.info("Site app with id "+t.id+" "+(s?"loaded":"errored")),r&&e()};try{var{processEvent:n}=t.init({posthog:this._instance,callback(t){s(t)}});n&&(i.processEvent=n),r=!0}catch(i){go.error(mo+t.id,i),s(!1)}if(r&&i.loaded)try{e()}catch(e){go.error("Error while processing buffered events PostHog app with config id "+t.id,e),i.errored=!0}}fo(){var t=this.siteAppLoaders||[];for(var i of t)this.apps[i.id]={id:i.id,loaded:!1,errored:!1,processedBuffer:!1};for(var e of t)this.setupSiteApp(e)}po(t){if(0!==Object.keys(this.apps).length){var i=this.globalsForEvent(t);for(var e of Object.values(this.apps))try{null==e.processEvent||e.processEvent(i)}catch(i){go.error("Error while processing event "+t.event+" for site app "+e.id,i)}}}onRemoteConfig(t){var i,e,r,s=this;if(null!=(i=this.siteAppLoaders)&&i.length)return this.isEnabled?(this.fo(),void this._instance.on("eventCaptured",(t=>this.po(t)))):void go.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if(null==(e=this.vo)||e.call(this),null!=(r=t.siteApps)&&r.length)if(this.isEnabled){var n=function(t){var i;h["__$$ph_site_app_"+t]=s._instance,null==(i=h.__PosthogExtensions__)||null==i.loadSiteApp||i.loadSiteApp(s._instance,a,(i=>{if(i)return go.error(mo+t,i)}))};for(var{id:o,url:a}of t.siteApps)n(o)}else go.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}},Ko={tracingHeaders:class{constructor(t){this.mo=void 0,this.yo=void 0,this.zs=()=>{var t,i;C(this.mo)&&(null==(t=h.__PosthogExtensions__)||null==(t=t.tracingHeadersPatchFns)||t._patchXHR(this._instance.config.__add_tracing_headers||[],this._instance.get_distinct_id(),this._instance.sessionManager)),C(this.yo)&&(null==(i=h.__PosthogExtensions__)||null==(i=i.tracingHeadersPatchFns)||i._patchFetch(this._instance.config.__add_tracing_headers||[],this._instance.get_distinct_id(),this._instance.sessionManager))},this._instance=t}initialize(){this.startIfEnabledOrStop()}nr(t){var i,e;null!=(i=h.__PosthogExtensions__)&&i.tracingHeadersPatchFns&&t(),null==(e=h.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,"tracing-headers",(i=>{if(i)return eo.error("failed to load script",i);t()}))}startIfEnabledOrStop(){var t,i;this._instance.config.__add_tracing_headers?this.nr(this.zs):(null==(t=this.mo)||t.call(this),null==(i=this.yo)||i.call(this),this.mo=void 0,this.yo=void 0)}}},Xo=p({surveys:class{get Rt(){return this._instance.config}constructor(t){this.bo=void 0,this._surveyManager=null,this.wo=!1,this._o=[],this.Io=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Rt.disable_surveys){var i=t.surveys;if(D(i))return Ys.warn("Flags not loaded yet. Not loading surveys.");var e=R(i);this.bo=e?i.length>0:i,Ys.info("flags response received, isSurveysEnabled: "+this.bo),this.loadIfEnabled()}}reset(){localStorage.removeItem("lastSeenSurveyDate");for(var t=[],i=0;i<localStorage.length;i++){var e=localStorage.key(i);(null!=e&&e.startsWith(Gs)||null!=e&&e.startsWith("inProgressSurvey_"))&&t.push(e)}t.forEach((t=>localStorage.removeItem(t)))}loadIfEnabled(){if(!this._surveyManager)if(this.wo)Ys.info("Already initializing surveys, skipping...");else if(this.Rt.disable_surveys)Ys.info(xo);else if(this.Rt.cookieless_mode&&this._instance.consent.isOptedOut())Ys.info("Not loading surveys in cookieless mode without consent.");else{var t=null==h?void 0:h.__PosthogExtensions__;if(t){if(!C(this.bo)||this.Rt.advanced_enable_surveys){var i=this.bo||this.Rt.advanced_enable_surveys;this.wo=!0;try{var e=t.generateSurveys;if(e)return void this.Co(e,i);var r=t.loadExternalDependency;if(!r)return void this.So(oe);r(this._instance,"surveys",(e=>{e||!t.generateSurveys?this.So("Could not load surveys script",e):this.Co(t.generateSurveys,i)}))}catch(t){throw this.So("Error initializing surveys",t),t}finally{this.wo=!1}}}else Ys.error("PostHog Extensions not found.")}}Co(t,i){this._surveyManager=t(this._instance,i),this._surveyEventReceiver=new Eo(this._instance),Ys.info("Surveys loaded successfully"),this.ko({isLoaded:!0})}So(t,i){Ys.error(t,i),this.ko({isLoaded:!1,error:t})}onSurveysLoaded(t){return this._o.push(t),this._surveyManager&&this.ko({isLoaded:!0}),()=>{this._o=this._o.filter((i=>i!==t))}}getSurveys(t,i){if(void 0===i&&(i=!1),this.Rt.disable_surveys)return Ys.info(xo),t([]);var e,r=this._instance.get_property(Wi);if(r&&!i)return t(r,{isLoaded:!0});"undefined"!=typeof Promise&&this.Io?this.Io.then((i=>{var{surveys:e,context:r}=i;return t(e,r)})):("undefined"!=typeof Promise&&(this.Io=new Promise((t=>{e=t}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Rt.token),method:"GET",timeout:this.Rt.surveys_request_timeout_ms,callback:i=>{var r;this.Io=null;var s=i.statusCode;if(200!==s||!i.json){var n="Surveys API could not be loaded, status: "+s;Ys.error(n);var o={isLoaded:!1,error:n};return t([],o),void(null==e||e({surveys:[],context:o}))}var a,l=i.json.surveys||[],u=l.filter((t=>function(t){return!(!t.start_date||t.end_date)}(t)&&(function(t){var i;return!(null==(i=t.conditions)||null==(i=i.events)||null==(i=i.values)||!i.length)}(t)||function(t){var i;return!(null==(i=t.conditions)||null==(i=i.actions)||null==(i=i.values)||!i.length)}(t))));u.length>0&&(null==(a=this._surveyEventReceiver)||a.register(u)),null==(r=this._instance.persistence)||r.register({[Wi]:l});var h={isLoaded:!0};t(l,h),null==e||e({surveys:l,context:h})}}))}ko(t){for(var i of this._o)try{if(!t.isLoaded)return i([],t);this.getSurveys(i)}catch(t){Ys.error("Error in survey callback",t)}}getActiveMatchingSurveys(t,i){if(void 0===i&&(i=!1),!D(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,i);Ys.warn("init was not called")}xo(t){var i=null;return this.getSurveys((e=>{var r;i=null!==(r=e.find((i=>i.id===t)))&&void 0!==r?r:null})),i}To(t){if(D(this._surveyManager))return{eligible:!1,reason:So};var i="string"==typeof t?this.xo(t):t;return i?this._surveyManager.checkSurveyEligibility(i):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(D(this._surveyManager))return Ys.warn("init was not called"),{visible:!1,disabledReason:So};var i=this.To(t);return{visible:i.eligible,disabledReason:i.reason}}canRenderSurveyAsync(t,i){return D(this._surveyManager)?(Ys.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:So})):new Promise((e=>{this.getSurveys((i=>{var r,s=null!==(r=i.find((i=>i.id===t)))&&void 0!==r?r:null;if(s){var n=this.To(s);e({visible:n.eligible,disabledReason:n.reason})}else e({visible:!1,disabledReason:"Survey not found"})}),i)}))}renderSurvey(t,i,e){var s;if(D(this._surveyManager))Ys.warn("init was not called");else{var n="string"==typeof t?this.xo(t):t;if(null!=n&&n.id)if(Xs.includes(n.type)){var o=null==r?void 0:r.querySelector(i);if(o)return null!=(s=n.appearance)&&s.surveyPopupDelaySeconds?(Ys.info("Rendering survey "+n.id+" with delay of "+n.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var t,i;Ys.info("Rendering survey "+n.id+" with delay of "+(null==(t=n.appearance)?void 0:t.surveyPopupDelaySeconds)+" seconds"),null==(i=this._surveyManager)||i.renderSurvey(n,o,e),Ys.info("Survey "+n.id+" rendered")}),1e3*n.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(n,o,e);Ys.warn("Survey element not found")}else Ys.warn("Surveys of type "+n.type+" cannot be rendered in the app");else Ys.warn("Survey not found")}}displaySurvey(t,i){var e;if(D(this._surveyManager))Ys.warn("init was not called");else{var r=this.xo(t);if(r){var s=r;if(null!=(e=r.appearance)&&e.surveyPopupDelaySeconds&&i.ignoreDelay&&(s=p({},r,{appearance:p({},r.appearance,{surveyPopupDelaySeconds:0})})),i.displayType!==Fr.Popover&&i.initialResponses&&Ys.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),!1===i.ignoreConditions){var n=this.canRenderSurvey(r);if(!n.visible)return void Ys.warn("Survey is not eligible to be displayed: ",n.disabledReason)}i.displayType!==Fr.Inline?this._surveyManager.handlePopoverSurvey(s,i):this.renderSurvey(s,i.selector,i.properties)}else Ys.warn("Survey not found")}}cancelPendingSurvey(t){D(this._surveyManager)?Ys.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;null==(t=this._surveyManager)||t.handlePageUnload()}}},qo),Qo={toolbar:class{constructor(t){this.instance=t}Ao(t){h.ph_toolbar_state=t}Eo(){var t;return null!==(t=h.ph_toolbar_state)&&void 0!==t?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(i,e,s){if(void 0===i&&(i=void 0),void 0===e&&(e=void 0),void 0===s&&(s=void 0),Re(this.instance.config))return!1;if(!t||!r)return!1;i=null!=i?i:t.location,s=null!=s?s:t.history;try{if(!e){try{t.localStorage.setItem("test","test"),t.localStorage.removeItem("test")}catch(t){return!1}e=null==t?void 0:t.localStorage}var n,o=To||nr(i.hash,"__posthog")||nr(i.hash,"state"),a=o?Ee((()=>JSON.parse(atob(decodeURIComponent(o)))))||Ee((()=>JSON.parse(decodeURIComponent(o)))):null;return a&&"ph_authorize"===a.action?((n=a).source="url",n&&Object.keys(n).length>0&&(a.desiredHash?i.hash=a.desiredHash:s?s.replaceState(s.state,"",i.pathname+i.search):i.hash="")):((n=JSON.parse(e.getItem($o)||"{}")).source="localstorage",delete n.userIntent),!(!n.token||this.instance.config.token!==n.token||(this.loadToolbar(n),0))}catch(t){return!1}}Ro(t){var i=h.ph_load_toolbar||h.ph_load_editor;!D(i)&&P(i)?i(t,this.instance):ko.warn("No toolbar load function found")}loadToolbar(i){var e=!(null==r||!r.getElementById(re));if(!t||e)return!1;var s="custom"===this.instance.requestRouter.region&&this.instance.config.advanced_disable_toolbar_metrics,n=p({token:this.instance.config.token},i,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(t.localStorage.setItem($o,JSON.stringify(p({},n,{source:void 0}))),2===this.Eo())this.Ro(n);else if(0===this.Eo()){var o;this.Ao(1),null==(o=h.__PosthogExtensions__)||null==o.loadExternalDependency||o.loadExternalDependency(this.instance,"toolbar",(t=>{if(t)return ko.error("[Toolbar] Failed to load",t),void this.Ao(0);this.Ao(2),this.Ro(n)})),ke(t,"turbolinks:load",(()=>{this.Ao(0),this.loadToolbar(n)}))}return!0}No(t){return this.loadToolbar(t)}maybeLoadEditor(t,i,e){return void 0===t&&(t=void 0),void 0===i&&(i=void 0),void 0===e&&(e=void 0),this.maybeLoadToolbar(t,i,e)}}},Zo=p({experiments:zo},qo),ta={conversations:class{constructor(t){this.Mo=void 0,this._conversationsManager=null,this.Fo=!1,this.Oo=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations){var i=t.conversations;D(i)||(N(i)?this.Mo=i:(this.Mo=i.enabled,this.Oo=i),this.loadIfEnabled())}}reset(){var t;null==(t=this._conversationsManager)||t.reset(),this._conversationsManager=null,this.Mo=void 0,this.Oo=null}loadIfEnabled(){if(!(this._conversationsManager||this.Fo||this._instance.config.disable_conversations||Re(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=null==h?void 0:h.__PosthogExtensions__;if(t&&!C(this.Mo)&&this.Mo)if(this.Oo&&this.Oo.token){this.Fo=!0;try{var i=t.initConversations;if(i)return this.Po(i),void(this.Fo=!1);var e=t.loadExternalDependency;if(!e)return void this.Lo(oe);e(this._instance,"conversations",(i=>{i||!t.initConversations?this.Lo("Could not load conversations script",i):this.Po(t.initConversations),this.Fo=!1}))}catch(t){this.Lo("Error initializing conversations",t),this.Fo=!1}}else Bo.error("Conversations enabled but missing token in remote config.")}}Po(t){if(this.Oo)try{this._conversationsManager=t(this.Oo,this._instance),Bo.info("Conversations loaded successfully")}catch(t){this.Lo("Error completing conversations initialization",t)}else Bo.error("Cannot complete initialization: remote config is null")}Lo(t,i){Bo.error(t,i),this._conversationsManager=null,this.Fo=!1}show(){this._conversationsManager?this._conversationsManager.show():Bo.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return!0===this.Mo&&!M(this._conversationsManager)}isVisible(){var t,i;return null!==(t=null==(i=this._conversationsManager)?void 0:i.isVisible())&&void 0!==t&&t}sendMessage(t,i,e){var r=this;return f((function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,i,e):(Bo.warn(Ho),null)}))()}getMessages(t,i){var e=this;return f((function*(){return e._conversationsManager?e._conversationsManager.getMessages(t,i):(Bo.warn(Ho),null)}))()}markAsRead(t){var i=this;return f((function*(){return i._conversationsManager?i._conversationsManager.markAsRead(t):(Bo.warn(Ho),null)}))()}getTickets(t){var i=this;return f((function*(){return i._conversationsManager?i._conversationsManager.getTickets(t):(Bo.warn(Ho),null)}))()}requestRestoreLink(t){var i=this;return f((function*(){return i._conversationsManager?i._conversationsManager.requestRestoreLink(t):(Bo.warn(Ho),null)}))()}restoreFromToken(t){var i=this;return f((function*(){return i._conversationsManager?i._conversationsManager.restoreFromToken(t):(Bo.warn(Ho),null)}))()}restoreFromUrlToken(){var t=this;return f((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Bo.warn(Ho),null)}))()}getCurrentTicketId(){var t,i;return null!==(t=null==(i=this._conversationsManager)?void 0:i.getCurrentTicketId())&&void 0!==t?t:null}getWidgetSessionId(){var t,i;return null!==(t=null==(i=this._conversationsManager)?void 0:i.getWidgetSessionId())&&void 0!==t?t:null}}},ia={logs:class{constructor(t){var i;this.Do=!1,this.Bo=!1,this._instance=t,this._instance&&null!=(i=this._instance.config.logs)&&i.captureConsoleLogs&&(this.Do=!0)}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var i,e=null==(i=t.logs)?void 0:i.captureConsoleLogs;!D(e)&&e&&(this.Do=!0,this.loadIfEnabled())}reset(){}loadIfEnabled(){if(this.Do&&!this.Bo){var t=wi("[logs]"),i=null==h?void 0:h.__PosthogExtensions__;if(i){var e=i.loadExternalDependency;e?e(this._instance,"logs",(e=>{var r;e||null==(r=i.logs)||!r.initializeLogs?t.error("Could not load logs script",e):(i.logs.initializeLogs(this._instance),this.Bo=!0)})):t.error(oe)}else t.error("PostHog Extensions not found.")}}}},ea=p({},qo,Wo,Vo,Yo,Go,Jo,Xo,Ko,Qo,Zo,ta,ia);_n.__defaultExtensionClasses=p({},ea);var ra,sa=(ra=rn[hn]=new _n,function(){function i(){i.done||(i.done=!0,dn=!1,be(rn,(function(t){t._dom_loaded()})))}null!=r&&r.addEventListener?"complete"===r.readyState?i():ke(r,"DOMContentLoaded",i,{capture:!1}):t&&yi.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")}(),ra);
//# sourceMappingURL=module.js.map
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_AuthService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/AuthService */ "./src/utils/AuthService.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneLandingPage.js",
  _h,
  _p,
  _section;




var StandaloneLandingPage = _ref => {
  var {
    history
  } = _ref;
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_3__["trackEvent"])('standalone_landing_viewed');
  }, []);
  var handleGetStarted = () => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_3__["trackEvent"])('standalone_get_started_clicked');
    _utils_AuthService__WEBPACK_IMPORTED_MODULE_2__["AuthServiceSharedInstance"].login({
      initialScreen: 'signUp'
    });
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-landing",
    "data-testid": "standalone-landing",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 17,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("section", {
    className: "standalone-landing__hero",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 18,
      columnNumber: 7
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-landing__headline",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 19,
      columnNumber: 9
    }
  }, "LoanWell Flow \u2014 Your Purpose-Built Lending Workflows + AI")), _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-landing__description",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 22,
      columnNumber: 9
    }
  }, "Manage agreements, tasks, documents, and team members in one place. Powered by AI agents that work alongside your team.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: handleGetStarted,
    className: "standalone-landing__cta",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 26,
      columnNumber: 9
    }
  }, "Get Started")), _section || (_section = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("section", {
    className: "standalone-landing__features",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 31,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-landing__feature",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 32,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 33,
      columnNumber: 11
    }
  }, "Agreements"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 34,
      columnNumber: 11
    }
  }, "Track and manage loan agreements with borrower details, amounts, and status all in one view.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-landing__feature",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 36,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 37,
      columnNumber: 11
    }
  }, "Team Tasks"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 38,
      columnNumber: 11
    }
  }, "Assign tasks to team members or borrowers with a built-in chat interface for collaboration.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-landing__feature",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 40,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 41,
      columnNumber: 11
    }
  }, "Documents"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 42,
      columnNumber: 11
    }
  }, "Upload, organize, and share documents securely within each agreement.")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("footer", {
    className: "standalone-landing__footer",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 46,
      columnNumber: 7
    }
  }, "\xA9 ", new Date().getFullYear(), " Loanwell. All rights reserved."));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneLandingPage));__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initPostHog", function() { return initPostHog; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trackEvent", function() { return trackEvent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identifyUser", function() { return identifyUser; });
/* harmony import */ var posthog_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! posthog-js */ "./node_modules/posthog-js/dist/module.js");

var DEFAULT_HOST = 'https://us.i.posthog.com';
var initAttempted = false;

/**
 * Idempotent PostHog init. No-ops when LOANWELL_POSTHOG_KEY is unset (local / tests).
 */
function initPostHog() {
  if (typeof window === 'undefined' || initAttempted) {
    return;
  }
  initAttempted = true;
  var key = "";
  var host = "https://us.i.posthog.com" || false;
  if (!key) {
    return;
  }
  posthog_js__WEBPACK_IMPORTED_MODULE_0__["default"].init(key, {
    api_host: host,
    capture_pageview: false,
    capture_pageleave: false
  });
}
function trackEvent(eventName, properties) {
  if (typeof window === 'undefined') {
    return;
  }
  if (true) {
    return;
  }
  initPostHog();
  posthog_js__WEBPACK_IMPORTED_MODULE_0__["default"].capture(eventName, properties);
}
function identifyUser(distinctId, properties) {
  if (typeof window === 'undefined') {
    return;
  }
  if (true) {
    return;
  }
  initPostHog();
  posthog_js__WEBPACK_IMPORTED_MODULE_0__["default"].identify(distinctId, properties);
}
/* harmony default export */ __webpack_exports__["default"] = (posthog_js__WEBPACK_IMPORTED_MODULE_0__["default"]);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_AuthService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/AuthService */ "./src/utils/AuthService.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneSignupPage.js",
  _h,
  _p,
  _label,
  _button,
  _div;




var StandaloneSignupPage = () => {
  var [email, setEmail] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_3__["trackEvent"])('standalone_signup_viewed');
  }, []);
  var handleSubmit = e => {
    e.preventDefault();
    setError(null);
    if (!email) {
      setError('Email is required.');
      return;
    }
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_3__["trackEvent"])('standalone_signup_submitted', {
      email
    });
    // Send user to Auth0 signup — after redirect back, they'll land on /signup/setup
    _utils_AuthService__WEBPACK_IMPORTED_MODULE_2__["AuthServiceSharedInstance"].login({
      initialScreen: 'signUp',
      login_hint: email
    });
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup",
    "data-testid": "standalone-signup",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 29,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("form", {
    className: "standalone-signup__card",
    onSubmit: handleSubmit,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 30,
      columnNumber: 7
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-signup__title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 31,
      columnNumber: 9
    }
  }, "Create your account")), _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-signup__subtitle",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 32,
      columnNumber: 9
    }
  }, "Sign up to get started with Loanwell")), error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__error",
    "data-testid": "validation-error",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 34,
      columnNumber: 19
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__field",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 36,
      columnNumber: 9
    }
  }, _label || (_label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "email",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 37,
      columnNumber: 11
    }
  }, "Email")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    id: "email",
    name: "email",
    type: "email",
    placeholder: "you@company.com",
    value: email,
    onChange: e => setEmail(e.target.value),
    autoFocus: true,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 38,
      columnNumber: 11
    }
  })), _button || (_button = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "submit",
    className: "standalone-signup__submit",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 49,
      columnNumber: 9
    }
  }, "Continue")), _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__login-link",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 53,
      columnNumber: 9
    }
  }, "Already have an account? ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
    href: "/login",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 54,
      columnNumber: 36
    }
  }, "Log in")))));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneSignupPage));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! query-string */ "./node_modules/query-string/index.js");
/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(query_string__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jwt-decode */ "./node_modules/jwt-decode/lib/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(jwt_decode__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/AccountNameHelper */ "./src/utils/AccountNameHelper.js");
/* harmony import */ var _utils_sessionStorage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/sessionStorage */ "./src/utils/sessionStorage.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneSignupBillingCompletePage.js",
  _h,
  _p,
  _div,
  _div2,
  _h2,
  _p2,
  _h3,
  _p3;








var getTenantAccountName = () => {
  try {
    var token = _utils_sessionStorage__WEBPACK_IMPORTED_MODULE_6__["default"].getItem("loanWellIdToken" || false);
    if (!token) return null;
    var decoded = jwt_decode__WEBPACK_IMPORTED_MODULE_3___default()(token);
    for (var key of Object.keys(decoded)) {
      if (key.startsWith('http://') && key.endsWith('.loanwell.com')) {
        return decoded[key] || null;
      }
    }
    return null;
  } catch (e) {
    return null;
  }
};

/**
 * Landing page after Stripe Checkout redirect.
 *
 * Stripe redirects here with ?session_id=cs_xxx in the query string.
 * We call PUT /account to save the Stripe checkout session ID against
 * the account record. The backend resolves the full Stripe details
 * (customer, subscription, payment method, etc.) from that session ID.
 */
var StandaloneSignupBillingCompletePage = _ref => {
  var {
    history,
    location
  } = _ref;
  var [status, setStatus] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('processing'); // processing | success | error
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    var params = query_string__WEBPACK_IMPORTED_MODULE_2___default.a.parse(location.search);
    var sessionId = params.session_id;
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_7__["trackEvent"])('standalone_billing_complete_viewed');
    if (!sessionId) {
      setStatus('error');
      setError('No billing session found. Please contact support.');
      return;
    }
    var accountName = getTenantAccountName() || Object(_utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_5__["getAccountNameFromOrigin"])() || 'app';
    _utils_httpClient__WEBPACK_IMPORTED_MODULE_4__["client"].invokeApi({}, "/account/by-name/".concat(accountName), 'PUT', {}, {
      stripeCheckoutSessionId: sessionId
    }).then(() => {
      Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_7__["trackEvent"])('standalone_billing_success');
      setStatus('success');
      setTimeout(() => {
        history.push('/dashboard');
      }, 2000);
    }).catch(err => {
      console.error('Stripe billing setup completion failed:', err);
      var message = err.response && err.response.data && err.response.data.errorMessage || 'Billing setup could not be completed. Please contact support.';
      Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_7__["trackEvent"])('standalone_billing_error', {
        error: message
      });
      setStatus('error');
      setError(message);
    });
  }, []); // eslint-disable-line react-hooks/exhaustive-deps

  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup",
    "data-testid": "standalone-billing-complete",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 75,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__card standalone-billing-complete__card",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 76,
      columnNumber: 7
    }
  }, status === 'processing' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-setup__title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 79,
      columnNumber: 13
    }
  }, "Completing Billing Setup")), _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-setup__subtitle",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 80,
      columnNumber: 13
    }
  }, "Please wait while we finalize your billing information...")), _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-billing-complete__spinner",
    "data-testid": "billing-spinner",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 83,
      columnNumber: 13
    }
  }))), status === 'success' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-billing-complete__icon",
    "data-testid": "billing-success",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 89,
      columnNumber: 13
    }
  }, "\u2713")), _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-setup__title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 92,
      columnNumber: 13
    }
  }, "Billing Set Up Successfully")), _p2 || (_p2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-setup__subtitle",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 93,
      columnNumber: 13
    }
  }, "Redirecting you to your dashboard..."))), status === 'error' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, _h3 || (_h3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-setup__title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 101,
      columnNumber: 13
    }
  }, "Billing Setup Issue")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__error",
    "data-testid": "billing-error",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 102,
      columnNumber: 13
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "standalone-setup__submit",
    onClick: () => history.push('/dashboard'),
    "data-testid": "continue-to-dashboard",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 105,
      columnNumber: 13
    }
  }, "Continue to Dashboard"), _p3 || (_p3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-billing-complete__help",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 112,
      columnNumber: 13
    }
  }, "You can set up billing later from your Account page.")))));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneSignupBillingCompletePage));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jwt-decode */ "./node_modules/jwt-decode/lib/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jwt_decode__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/AccountNameHelper */ "./src/utils/AccountNameHelper.js");
/* harmony import */ var _utils_sessionStorage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/sessionStorage */ "./src/utils/sessionStorage.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneSignupBillingPendingPage.js",
  _h,
  _p;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }







var getTenantAccountName = () => {
  try {
    var token = _utils_sessionStorage__WEBPACK_IMPORTED_MODULE_5__["default"].getItem("loanWellIdToken" || false);
    if (!token) return null;
    var decoded = jwt_decode__WEBPACK_IMPORTED_MODULE_2___default()(token);
    for (var key of Object.keys(decoded)) {
      if (key.startsWith('http://') && key.endsWith('.loanwell.com')) {
        return decoded[key] || null;
      }
    }
    return null;
  } catch (e) {
    return null;
  }
};

/**
 * Shown when a user tries to access the dashboard but their account
 * status is still 'pending' (billing not yet set up).
 * Lets them kick off Stripe Checkout to complete billing.
 */
var StandaloneSignupBillingPendingPage = _ref => {
  var {
    history
  } = _ref;
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_6__["trackEvent"])('standalone_billing_pending_viewed');
  }, []);
  var handleSetupBilling = /*#__PURE__*/function () {
    var _ref2 = _asyncToGenerator(function* () {
      setLoading(true);
      setError(null);
      try {
        var accountName = getTenantAccountName() || Object(_utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_4__["getAccountNameFromOrigin"])() || 'app';
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_6__["trackEvent"])('standalone_billing_pending_clicked');
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__["client"].invokeApi({}, '/account/billing/stripe/checkout-session', 'POST', {}, {
          accountName
        });
        if (res.data && res.data.url) {
          window.location.href = res.data.url;
          return;
        }
        setError('Unable to start billing setup. Please try again.');
        setLoading(false);
      } catch (err) {
        console.error('Failed to create Stripe checkout session:', err);
        setError('Unable to start billing setup. Please try again or contact support.');
        setLoading(false);
      }
    });
    return function handleSetupBilling() {
      return _ref2.apply(this, arguments);
    };
  }();
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup",
    "data-testid": "standalone-billing-pending",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 67,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__card standalone-billing-complete__card",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 68,
      columnNumber: 7
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-setup__title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 69,
      columnNumber: 9
    }
  }, "Complete Your Billing Setup")), _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-setup__subtitle",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 70,
      columnNumber: 9
    }
  }, "Your account has been created, but you need to set up billing before you can access your dashboard.")), error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__error",
    "data-testid": "billing-pending-error",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 75,
      columnNumber: 11
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "standalone-setup__submit",
    onClick: handleSetupBilling,
    disabled: loading,
    "data-testid": "setup-billing-btn",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 80,
      columnNumber: 9
    }
  }, loading ? 'Redirecting to Stripe...' : 'Set Up Billing')));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneSignupBillingPendingPage));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
/* harmony import */ var _actions_memberActions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../actions/memberActions */ "./src/actions/memberActions.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
/* harmony import */ var _utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/standaloneRoles */ "./src/utils/standaloneRoles.js");

var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneMemberDetail.js",
  _h,
  _span,
  _div,
  _h2;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }







var formatDate = dateStr => {
  if (!dateStr) return '-';
  var d = new Date(dateStr);
  if (isNaN(d.getTime())) return dateStr;
  return d.toLocaleDateString('en-US', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  });
};
var StandaloneMemberDetail = Object(react_router_dom__WEBPACK_IMPORTED_MODULE_3__["withRouter"])(_ref => {
  var {
    history,
    match,
    loggedInMember,
    members,
    memberActions
  } = _ref;
  var memberId = lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(match, 'params.sectionId');
  var [member, setMember] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(true);
  var [selectedRole, setSelectedRole] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])('');
  var [roleSaving, setRoleSaving] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [roleSuccess, setRoleSuccess] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [showRemoveConfirm, setShowRemoveConfirm] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [removeSubmitting, setRemoveSubmitting] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var isCurrentUserOwner = Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["isOwner"])(loggedInMember);
  var isSelf = member && loggedInMember && (member.id === loggedInMember.id || member.userId === loggedInMember.userId);
  var isMemberOwner = member && (member.role || '').toLowerCase() === _utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["STANDALONE_ROLES"].OWNER;
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    if (!Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["isOwnerOrAdmin"])(loggedInMember)) {
      history.replace('/dashboard');
      return;
    }
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_6__["trackEvent"])('standalone_member_detail_viewed', {
      memberId
    });
  }, [memberId]);
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    if (!memberId) return;

    // Try to find member in existing Redux state first
    var existing = Array.isArray(members) ? members.find(m => m.id === memberId) : null;
    if (existing) {
      setMember(existing);
      setSelectedRole(existing.role || '');
      setLoading(false);
      return;
    }

    // Fetch from API
    memberActions.getMemberDetails({
      userId: memberId
    }).then(data => {
      setMember(data);
      setSelectedRole((data === null || data === void 0 ? void 0 : data.role) || '');
      setLoading(false);
    }).catch(() => {
      setError('Failed to load member details.');
      setLoading(false);
    });
  }, [memberId, members]);
  var handleRoleSave = /*#__PURE__*/function () {
    var _ref2 = _asyncToGenerator(function* () {
      if (!selectedRole || selectedRole === member.role) return;
      setRoleSaving(true);
      setRoleSuccess(false);
      setError(null);
      try {
        yield memberActions.putMember({
          id: member.id,
          role: selectedRole
        });
        setMember(_objectSpread(_objectSpread({}, member), {}, {
          role: selectedRole
        }));
        setRoleSaving(false);
        setRoleSuccess(true);
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_6__["trackEvent"])('standalone_member_role_changed', {
          memberId,
          newRole: selectedRole
        });
        setTimeout(() => setRoleSuccess(false), 3000);
      } catch (err) {
        setError('Failed to update role. Please try again.');
        setRoleSaving(false);
      }
    });
    return function handleRoleSave() {
      return _ref2.apply(this, arguments);
    };
  }();
  var handleRemove = /*#__PURE__*/function () {
    var _ref3 = _asyncToGenerator(function* () {
      setRemoveSubmitting(true);
      setError(null);
      try {
        yield memberActions.deleteMember(member.id);
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_6__["trackEvent"])('standalone_member_removed', {
          memberId
        });
        history.replace('/dashboard/members');
      } catch (err) {
        setError('Failed to remove member. Please try again.');
        setRemoveSubmitting(false);
        setShowRemoveConfirm(false);
      }
    });
    return function handleRemove() {
      return _ref3.apply(this, arguments);
    };
  }();
  var assignableRoles = Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["getAssignableRoles"])(loggedInMember);
  var canChangeRole = assignableRoles.length > 0 && !isSelf;
  var canRemove = !isSelf && !isMemberOwner && (isCurrentUserOwner || Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["isOwnerOrAdmin"])(loggedInMember) && ((member === null || member === void 0 ? void 0 : member.role) || '').toLowerCase() === _utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["STANDALONE_ROLES"].MEMBER);
  if (loading) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "container-fluid no-padding",
      style: {
        background: '#fafbfa',
        minHeight: '100vh'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 105,
        columnNumber: 9
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "lw-page-header",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 106,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "col-xs-12 container",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 107,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h1", {
      className: "page-title col-xs-12 col-md-10",
      style: {
        textAlign: 'left',
        color: '#fff'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 108,
        columnNumber: 15
      }
    }, "Member Details"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "container",
      style: {
        paddingTop: '1rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 113,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "bg-white rounded shadow-sm p-4",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 114,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      style: {
        background: '#f1f3f5',
        height: 14,
        width: '40%',
        borderRadius: 6,
        marginBottom: 12
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 115,
        columnNumber: 15
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      style: {
        background: '#f1f3f5',
        height: 10,
        width: '70%',
        borderRadius: 6,
        marginBottom: 8
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 116,
        columnNumber: 15
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      style: {
        background: '#f1f3f5',
        height: 10,
        width: '55%',
        borderRadius: 6
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 117,
        columnNumber: 15
      }
    }))));
  }
  if (!member) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "container-fluid no-padding",
      style: {
        background: '#fafbfa',
        minHeight: '100vh'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 126,
        columnNumber: 9
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "lw-page-header",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 127,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "col-xs-12 container",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 128,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h1", {
      className: "page-title col-xs-12 col-md-10",
      style: {
        textAlign: 'left',
        color: '#fff'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 129,
        columnNumber: 15
      }
    }, "Member Details"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "container",
      style: {
        paddingTop: '1rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 134,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__["Link"], {
      to: "/dashboard/members",
      className: "d-inline-block mb-3",
      style: {
        color: '#222',
        fontWeight: 500
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 135,
        columnNumber: 13
      }
    }, "\u2190 Back to Members"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "bg-white rounded shadow-sm p-4",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 138,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
      className: "text-muted",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 139,
        columnNumber: 15
      }
    }, error || 'Member not found.'))));
  }
  var memberName = [member.firstName, member.lastName].filter(Boolean).join(' ') || 'Unknown';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "container-fluid no-padding",
    "data-testid": "standalone-member-detail",
    style: {
      background: '#fafbfa',
      minHeight: '100vh'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 149,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 150,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 151,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-10",
    style: {
      textAlign: 'left',
      color: '#fff'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 152,
      columnNumber: 13
    }
  }, "Member Details"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 157,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__["Link"], {
    to: "/dashboard/members",
    className: "d-inline-block mb-3",
    style: {
      color: '#222',
      fontWeight: 500
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 158,
      columnNumber: 11
    }
  }, "\u2190 Back to Members"), error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert alert-danger mb-3",
    role: "alert",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 163,
      columnNumber: 13
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "bg-white rounded shadow-sm p-4 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-start",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 170,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 171,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h3", {
    className: "mb-1",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 172,
      columnNumber: 17
    }
  }, memberName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
    className: "text-muted mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 173,
      columnNumber: 17
    }
  }, member.email || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    className: "badge bg-".concat((member.role || '').toLowerCase() === 'owner' ? 'dark' : (member.role || '').toLowerCase() === 'admin' ? 'primary' : 'secondary'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 174,
      columnNumber: 17
    }
  }, Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["getRoleDisplayName"])(member.role))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "text-end text-muted",
    style: {
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 178,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 179,
      columnNumber: 17
    }
  }, "Created: ", formatDate(member.dateCreated || member.createdDate)), member.dateInvited && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 180,
      columnNumber: 40
    }
  }, "Invited: ", formatDate(member.dateInvited)), member.status && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mt-1",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 182,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    className: "badge bg-".concat(member.status === 'active' ? 'success' : member.status === 'pending' ? 'warning' : 'secondary'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 183,
      columnNumber: 21
    }
  }, member.status))))), canChangeRole && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "bg-white rounded shadow-sm p-4 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 194,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h5", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 195,
      columnNumber: 15
    }
  }, "Change Role")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex align-items-center gap-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 196,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", {
    className: "form-control",
    style: {
      maxWidth: 200
    },
    value: selectedRole,
    onChange: e => {
      setSelectedRole(e.target.value);
      setRoleSuccess(false);
    },
    "data-testid": "role-select",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 197,
      columnNumber: 17
    }
  }, assignableRoles.map(role => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    key: role,
    value: role,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 205,
      columnNumber: 21
    }
  }, Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["getRoleDisplayName"])(role)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn btn-dark btn-sm",
    onClick: handleRoleSave,
    disabled: roleSaving || selectedRole === member.role,
    "data-testid": "save-role-button",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 210,
      columnNumber: 17
    }
  }, roleSaving ? 'Saving...' : 'Save'), roleSuccess && (_span || (_span = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    className: "text-success small",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 218,
      columnNumber: 33
    }
  }, "Role updated."))))), Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_7__["isOwnerOrAdmin"])(loggedInMember) && (_div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "bg-white rounded shadow-sm p-4 mb-3",
    "data-testid": "usage-placeholder",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 225,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h5", {
    className: "mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 226,
      columnNumber: 15
    }
  }, "Usage"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
    className: "text-muted mb-0",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 227,
      columnNumber: 15
    }
  }, "Usage analytics coming soon.")))), canRemove && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "bg-white rounded shadow-sm p-4 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 233,
      columnNumber: 13
    }
  }, _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h5", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 234,
      columnNumber: 15
    }
  }, "Remove Member")), !showRemoveConfirm ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn btn-outline-danger btn-sm",
    onClick: () => setShowRemoveConfirm(true),
    "data-testid": "remove-member-button",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 236,
      columnNumber: 17
    }
  }, "Remove Member") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 244,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
    className: "text-danger mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 245,
      columnNumber: 19
    }
  }, "Are you sure you want to remove ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 246,
      columnNumber: 53
    }
  }, memberName), "? This will deactivate their account."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex gap-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 248,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn btn-danger btn-sm",
    onClick: handleRemove,
    disabled: removeSubmitting,
    "data-testid": "confirm-remove-button",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 249,
      columnNumber: 21
    }
  }, removeSubmitting ? 'Removing...' : 'Yes, Remove'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn btn-secondary btn-sm",
    onClick: () => setShowRemoveConfirm(false),
    disabled: removeSubmitting,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 257,
      columnNumber: 21
    }
  }, "Cancel"))))));
});
var mapStateToProps = state => ({
  loggedInMember: state.loggedInMember || {},
  members: state.members || []
});
var mapDispatchToProps = dispatch => ({
  memberActions: Object(redux__WEBPACK_IMPORTED_MODULE_4__["bindActionCreators"])(_actions_memberActions__WEBPACK_IMPORTED_MODULE_5__, dispatch)
});
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(StandaloneMemberDetail));__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STANDALONE_ROLES", function() { return STANDALONE_ROLES; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ROLE_DISPLAY_NAMES", function() { return ROLE_DISPLAY_NAMES; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isOwner", function() { return isOwner; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isOwnerOrAdmin", function() { return isOwnerOrAdmin; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAssignableRoles", function() { return getAssignableRoles; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRoleDisplayName", function() { return getRoleDisplayName; });
var STANDALONE_ROLES = {
  OWNER: 'owner',
  ADMIN: 'admin',
  MEMBER: 'member'
};
var ROLE_DISPLAY_NAMES = {
  [STANDALONE_ROLES.OWNER]: 'Owner',
  [STANDALONE_ROLES.ADMIN]: 'Admin',
  [STANDALONE_ROLES.MEMBER]: 'Member'
};
function isOwner(loggedInMember) {
  return ((loggedInMember === null || loggedInMember === void 0 ? void 0 : loggedInMember.role) || '').toLowerCase() === STANDALONE_ROLES.OWNER;
}
function isOwnerOrAdmin(loggedInMember) {
  var role = ((loggedInMember === null || loggedInMember === void 0 ? void 0 : loggedInMember.role) || '').toLowerCase();
  return role === STANDALONE_ROLES.OWNER || role === STANDALONE_ROLES.ADMIN;
}

/**
 * Returns the roles the current user is allowed to assign.
 * Owners can assign any role; admins can assign member and admin.
 */
function getAssignableRoles(loggedInMember) {
  if (isOwner(loggedInMember)) {
    return [STANDALONE_ROLES.MEMBER, STANDALONE_ROLES.ADMIN, STANDALONE_ROLES.OWNER];
  }
  if (isOwnerOrAdmin(loggedInMember)) {
    return [STANDALONE_ROLES.MEMBER, STANDALONE_ROLES.ADMIN];
  }
  return [];
}
function getRoleDisplayName(role) {
  return ROLE_DISPLAY_NAMES[(role || '').toLowerCase()] || role || '-';
}__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_AuthService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/AuthService */ "./src/utils/AuthService.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneSignupSetupPage.js",
  _h,
  _p,
  _label,
  _label2,
  _span,
  _span2,
  _label3,
  _label4,
  _label5,
  _span3;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }






// Strip common business suffixes, punctuation, and produce a clean lowercase slug
var slugify = text => text.toLowerCase()
// Remove common business suffixes
.replace(/\b(inc|llc|ltd|llp|corp|co|company|group|holdings)\b\.?/gi, '')
// Remove periods, apostrophes, and other punctuation
.replace(/[.'',!@#$%^&*()+=[\]{}|\\/<>?~`":;]/g, '')
// Replace any non-alphanumeric run with a single hyphen
.replace(/[^a-z0-9]+/g, '-')
// Trim leading/trailing hyphens
.replace(/^-+|-+$/g, '');
var StandaloneSignupSetupPage = _ref => {
  var {
    history
  } = _ref;
  var [orgName, setOrgName] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [slug, setSlug] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [slugManuallyEdited, setSlugManuallyEdited] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [slugStatus, setSlugStatus] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null); // 'available', 'unavailable', 'checking', null
  var [firstName, setFirstName] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [lastName, setLastName] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [logoFile, setLogoFile] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [logoPreview, setLogoPreview] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [submitting, setSubmitting] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_4__["trackEvent"])('standalone_setup_viewed');
  }, []);

  // Auto-generate slug from org name
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    if (!slugManuallyEdited && orgName) {
      setSlug(slugify(orgName));
    }
  }, [orgName, slugManuallyEdited]);

  // Client-side slug format validation (uniqueness is validated on submit by the backend)
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    if (!slug || slug.length < 3) {
      setSlugStatus(null);
      return;
    }
    setSlugStatus('available');
  }, [slug]);
  var handleSlugChange = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(e => {
    setSlugManuallyEdited(true);
    // Always enforce lowercase slug
    setSlug(slugify(e.target.value));
  }, []);
  var handleLogoChange = e => {
    var file = e.target.files[0];
    if (file) {
      setLogoFile(file);
      var reader = new FileReader();
      reader.onload = ev => setLogoPreview(ev.target.result);
      reader.readAsDataURL(file);
    }
  };
  var handleSubmit = /*#__PURE__*/function () {
    var _ref2 = _asyncToGenerator(function* (e) {
      e.preventDefault();
      setError(null);
      var profile = _utils_AuthService__WEBPACK_IMPORTED_MODULE_3__["AuthServiceSharedInstance"].getProfile();
      var email = profile && profile.email;
      if (!email) {
        setError('Unable to detect your login. Please try signing up again.');
        return;
      }
      if (!orgName || !slug || !firstName || !lastName) {
        setError('Organization name, account name, first name, and last name are required.');
        return;
      }
      if (slug.length < 3) {
        setError('Account name must be at least 3 characters.');
        return;
      }
      if (slugStatus === 'unavailable') {
        setError('This account name is already taken. Please choose another.');
        return;
      }
      setSubmitting(true);
      try {
        // Create account, member, and user in a single call
        yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, '/account/signup', 'POST', {}, {
          accountName: slug,
          companyName: orgName,
          email,
          firstName,
          lastName
        });
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_4__["identifyUser"])(email, {
          firstName,
          lastName,
          orgName,
          accountName: slug
        });
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_4__["trackEvent"])('standalone_setup_submitted', {
          orgName,
          accountName: slug
        });

        // Upload logo if provided
        if (logoFile) {
          try {
            yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/account/by-name/".concat(slug), 'PUT', {}, {
              logoUrl: logoPreview,
              name: orgName
            });
          } catch (logoErr) {
            console.error('Logo upload failed, continuing:', logoErr);
          }
        }

        // Create Stripe Checkout Session and redirect to Stripe
        try {
          var stripeRes = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, '/account/billing/stripe/checkout-session', 'POST', {}, {
            accountName: slug,
            email,
            companyName: orgName,
            firstName,
            lastName
          });
          if (stripeRes.data && stripeRes.data.url) {
            Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_4__["trackEvent"])('standalone_stripe_redirect');
            window.location.href = stripeRes.data.url;
            return;
          }
          // If no URL returned, fall through to dashboard
          history.push('/dashboard');
        } catch (stripeErr) {
          console.error('Stripe checkout session creation failed:', stripeErr);
          // Still go to dashboard — billing can be set up later from Account page
          history.push('/dashboard');
        }
      } catch (err) {
        var errorType = err.response && err.response.data && err.response.data.errorType;
        if (errorType === 'accountNameNotAvailable') {
          setSlugStatus('unavailable');
          setError('This account name is already taken. Please choose another.');
        } else {
          var message = err.response && err.response.data && err.response.data.errorMessage ? err.response.data.errorMessage : 'Setup failed. Please try again.';
          setError(message);
        }
        setSubmitting(false);
      }
    });
    return function handleSubmit(_x) {
      return _ref2.apply(this, arguments);
    };
  }();
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup",
    "data-testid": "standalone-setup",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 157,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("form", {
    className: "standalone-setup__card",
    onSubmit: handleSubmit,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 158,
      columnNumber: 7
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "standalone-setup__title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 159,
      columnNumber: 9
    }
  }, "Set Up Your Organization")), _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "standalone-setup__subtitle",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 160,
      columnNumber: 9
    }
  }, "Tell us about your organization to get started")), error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__error",
    "data-testid": "validation-error",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 162,
      columnNumber: 19
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__field",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 164,
      columnNumber: 9
    }
  }, _label || (_label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "orgName",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 165,
      columnNumber: 11
    }
  }, "Organization Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    id: "orgName",
    type: "text",
    value: orgName,
    onChange: e => setOrgName(e.target.value),
    placeholder: "Acme Lending Corp",
    autoFocus: true,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 166,
      columnNumber: 11
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__field",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 176,
      columnNumber: 9
    }
  }, _label2 || (_label2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "slug",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 177,
      columnNumber: 11
    }
  }, "Account Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__slug-wrapper",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 178,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    id: "slug",
    type: "text",
    placeholder: "acme-lending",
    value: slug,
    onChange: handleSlugChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 179,
      columnNumber: 13
    }
  }), _span || (_span = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "slug-suffix",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 186,
      columnNumber: 13
    }
  }, ".loanwell.com"))), slugStatus && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-signup__slug-status ".concat(slugStatus),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 13
    }
  }, slugStatus === 'checking' && 'Checking availability...', slugStatus === 'available' && 'Available', slugStatus === 'unavailable' && (_span2 || (_span2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    "data-testid": "slug-unavailable",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 192,
      columnNumber: 48
    }
  }, "Already taken"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__field",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 197,
      columnNumber: 9
    }
  }, _label3 || (_label3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "firstName",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 198,
      columnNumber: 11
    }
  }, "First Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    id: "firstName",
    type: "text",
    value: firstName,
    onChange: e => setFirstName(e.target.value),
    placeholder: "Your first name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 199,
      columnNumber: 11
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__field",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 208,
      columnNumber: 9
    }
  }, _label4 || (_label4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "lastName",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 209,
      columnNumber: 11
    }
  }, "Last Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    id: "lastName",
    type: "text",
    value: lastName,
    onChange: e => setLastName(e.target.value),
    placeholder: "Your last name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 210,
      columnNumber: 11
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-setup__field",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 219,
      columnNumber: 9
    }
  }, _label5 || (_label5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 220,
      columnNumber: 11
    }
  }, "Organization Logo (optional)")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    className: "standalone-setup__logo-upload",
    htmlFor: "logo-upload",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 11
    }
  }, logoPreview ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
    src: logoPreview,
    alt: "Logo preview",
    className: "standalone-setup__logo-upload__preview",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 223,
      columnNumber: 15
    }
  }) : _span3 || (_span3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-setup__logo-upload__text",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 225,
      columnNumber: 15
    }
  }, "Click to upload your logo")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    id: "logo-upload",
    type: "file",
    accept: "image/*",
    onChange: handleLogoChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 227,
      columnNumber: 13
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "submit",
    className: "standalone-setup__submit",
    disabled: submitting || slugStatus === 'unavailable' || slugStatus === 'checking',
    __source: {
      fileName: _jsxFileName,
      lineNumber: 231,
      columnNumber: 9
    }
  }, submitting ? 'Setting up...' : 'Create Organization & Set Up Billing')));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneSignupSetupPage));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
/* harmony import */ var _actions_taskActions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../actions/taskActions */ "./src/actions/taskActions.js");
/* harmony import */ var _actions_memberActions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../actions/memberActions */ "./src/actions/memberActions.js");
/* harmony import */ var _actions_apiActions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../actions/apiActions */ "./src/actions/apiActions.js");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/dashboard-page.scss */ "./src/styles/dashboard-page.scss");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneCreateTask.js",
  _p,
  _label,
  _label2,
  _label3,
  _label4,
  _option,
  _label5;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }









var PRIORITY_OPTIONS = [{
  value: 'low',
  label: 'Low'
}, {
  value: 'medium',
  label: 'Medium'
}, {
  value: 'high',
  label: 'High'
}];
var StandaloneCreateTask = Object(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["withRouter"])(_ref => {
  var {
    user,
    history,
    taskActions,
    memberActions,
    apiActions,
    members,
    loggedInMember,
    accountConfig,
    agreements
  } = _ref;
  var [form, setForm] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({
    title: '',
    description: '',
    assignTo: '',
    priority: 'medium',
    dueDate: '',
    agreementId: ''
  });
  var [submitting, setSubmitting] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    if (memberActions.getMembers) {
      memberActions.getMembers();
    }
  }, []);
  var memberList = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => {
    if (!Array.isArray(members)) return [];
    return members.filter(m => m.status === 'active' || !m.status);
  }, [members]);
  var handleChange = e => {
    setForm(_objectSpread(_objectSpread({}, form), {}, {
      [e.target.name]: e.target.value
    }));
  };
  var handleSubmit = /*#__PURE__*/function () {
    var _ref2 = _asyncToGenerator(function* (e) {
      e.preventDefault();
      if (!form.title.trim()) {
        setError('Title is required.');
        return;
      }
      setSubmitting(true);
      setError(null);
      try {
        var selectedMember = memberList.find(m => m.id === form.assignTo);
        var agreementList = Array.isArray(agreements) ? agreements : [];
        var selectedAgreement = form.agreementId ? agreementList.find(a => a.id === form.agreementId) : null;
        var taskPayload = {
          title: form.title.trim(),
          description: form.description.trim() || undefined,
          taskStatus: 'assigned',
          priority: form.priority,
          dueDate: form.dueDate || undefined,
          userEmail: selectedMember ? selectedMember.email : user.email,
          userName: selectedMember ? [selectedMember.firstName, selectedMember.lastName].filter(Boolean).join(' ') : [user.firstName, user.lastName].filter(Boolean).join(' ') || user.email,
          agreementId: form.agreementId || undefined,
          accountNumber: selectedAgreement ? selectedAgreement.accountNumber : undefined
        };
        var result = yield taskActions.postTask(taskPayload);
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_8__["trackEvent"])('standalone_task_created', {
          taskId: result.id,
          priority: form.priority,
          hasAssignee: !!form.assignTo
        });
        history.push('/dashboard');
      } catch (err) {
        console.error('Failed to create task:', err);
        setError('Failed to create task. Please try again.');
        setSubmitting(false);
      }
    });
    return function handleSubmit(_x) {
      return _ref2.apply(this, arguments);
    };
  }();
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container-fluid no-padding",
    style: {
      background: '#fafbfa',
      minHeight: '100vh'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 100,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 104,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 105,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 106,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-10",
    style: {
      textAlign: 'left',
      color: '#fff'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 107,
      columnNumber: 15
    }
  }, "Create Task")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container",
    style: {
      paddingTop: '2rem',
      maxWidth: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 116,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "bg-white rounded shadow-sm p-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 117,
      columnNumber: 11
    }
  }, _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "text-muted mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 118,
      columnNumber: 13
    }
  }, "Create a task and assign it to a team member. Tasks help coordinate work and track what needs to get done.")), error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    role: "alert",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 124,
      columnNumber: 15
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("form", {
    onSubmit: handleSubmit,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 129,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 130,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "title",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 131,
      columnNumber: 17
    }
  }, "Title ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      color: '#dc3545'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 132,
      columnNumber: 25
    }
  }, "*")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    type: "text",
    id: "title",
    name: "title",
    className: "form-control",
    value: form.title,
    onChange: handleChange,
    placeholder: "What needs to be done?",
    autoFocus: true,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 134,
      columnNumber: 17
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 146,
      columnNumber: 15
    }
  }, _label || (_label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "assignTo",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 147,
      columnNumber: 17
    }
  }, "Assign To")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    id: "assignTo",
    name: "assignTo",
    className: "form-control",
    value: form.assignTo,
    onChange: handleChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 150,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 157,
      columnNumber: 19
    }
  }, "Myself (", user.email, ")"), memberList.map(member => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: member.id,
    value: member.id,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 159,
      columnNumber: 21
    }
  }, [member.firstName, member.lastName].filter(Boolean).join(' ') || member.email)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 167,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-6",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 168,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 19
    }
  }, _label2 || (_label2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "priority",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 170,
      columnNumber: 21
    }
  }, "Priority")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    id: "priority",
    name: "priority",
    className: "form-control",
    value: form.priority,
    onChange: handleChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 173,
      columnNumber: 21
    }
  }, PRIORITY_OPTIONS.map(opt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: opt.value,
    value: opt.value,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 181,
      columnNumber: 25
    }
  }, opt.label))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-6",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 188,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 19
    }
  }, _label3 || (_label3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "dueDate",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 190,
      columnNumber: 21
    }
  }, "Due Date")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    type: "date",
    id: "dueDate",
    name: "dueDate",
    className: "form-control",
    value: form.dueDate,
    onChange: handleChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 193,
      columnNumber: 21
    }
  })))), Array.isArray(agreements) && agreements.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 206,
      columnNumber: 17
    }
  }, _label4 || (_label4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "agreementId",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 207,
      columnNumber: 19
    }
  }, "Agreement")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    id: "agreementId",
    name: "agreementId",
    className: "form-control",
    value: form.agreementId,
    onChange: handleChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 210,
      columnNumber: 19
    }
  }, _option || (_option = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 217,
      columnNumber: 21
    }
  }, "None")), agreements.map(a => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: a.id,
    value: a.id,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 219,
      columnNumber: 23
    }
  }, [a.accountNumber, a.borrowerFirstName, a.borrowerLastName].filter(Boolean).join(' - ') || a.id)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 227,
      columnNumber: 15
    }
  }, _label5 || (_label5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    htmlFor: "description",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 228,
      columnNumber: 17
    }
  }, "Description")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("textarea", {
    id: "description",
    name: "description",
    className: "form-control",
    value: form.description,
    onChange: handleChange,
    placeholder: "Add details about what this task involves...",
    rows: 4,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 231,
      columnNumber: 17
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between",
    style: {
      marginTop: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 242,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "button",
    className: "btn",
    onClick: () => history.goBack(),
    disabled: submitting,
    style: {
      backgroundColor: '#6c757d',
      borderColor: '#6c757d',
      color: '#fff',
      minWidth: 100
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 243,
      columnNumber: 17
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "submit",
    className: "btn",
    disabled: submitting,
    style: {
      backgroundColor: '#343a40',
      borderColor: '#343a40',
      color: '#fff',
      minWidth: 160
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 257,
      columnNumber: 17
    }
  }, submitting ? 'Creating...' : 'Create Task'))))));
});
var mapStateToProps = state => ({
  members: state.members || [],
  loggedInMember: state.loggedInMember || {},
  accountConfig: state.accountConfig || {},
  accountName: state.accountName || '',
  agreements: state.agreementsByLenderId || state.agreementsByBorrowerId || []
});
var mapDispatchToProps = dispatch => ({
  taskActions: Object(redux__WEBPACK_IMPORTED_MODULE_3__["bindActionCreators"])(_actions_taskActions__WEBPACK_IMPORTED_MODULE_4__, dispatch),
  memberActions: Object(redux__WEBPACK_IMPORTED_MODULE_3__["bindActionCreators"])(_actions_memberActions__WEBPACK_IMPORTED_MODULE_5__, dispatch),
  apiActions: Object(redux__WEBPACK_IMPORTED_MODULE_3__["bindActionCreators"])(_actions_apiActions__WEBPACK_IMPORTED_MODULE_6__["apiActions"], dispatch)
});
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps)(StandaloneCreateTask));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jwt-decode */ "./node_modules/jwt-decode/lib/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jwt_decode__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/AccountNameHelper */ "./src/utils/AccountNameHelper.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAccountPage.js",
  _div,
  _h,
  _dt,
  _dt2,
  _dt3,
  _dt4,
  _h2,
  _div2,
  _div3,
  _div4,
  _h3,
  _dt5,
  _dt6,
  _div5,
  _div6,
  _h4,
  _span,
  _div7,
  _h5,
  _span2,
  _span3,
  _h6,
  _thead,
  _span4,
  _div8;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }







/**
 * Extract the real tenant account name from the Auth0 JWT custom claim.
 * The Auth0 Post-Login Action sets: http://<tenantId>.loanwell.com = tenantId
 */
var getTenantAccountNameFromToken = () => {
  try {
    var token = sessionStorage.getItem("loanWellIdToken" || false);
    if (!token) return null;
    var decoded = jwt_decode__WEBPACK_IMPORTED_MODULE_2___default()(token);
    for (var key of Object.keys(decoded)) {
      if (key.startsWith('http://') && key.endsWith('.loanwell.com')) {
        return decoded[key] || null;
      }
    }
    return null;
  } catch (e) {
    return null;
  }
};
var formatCurrency = amount => {
  if (amount == null || isNaN(amount)) return '$0.00';
  return "$".concat(Number(amount).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','));
};
var formatDate = dateStr => {
  if (!dateStr) return '-';
  // Parse YYYY-MM-DD as local date to avoid timezone offset issues
  var parts = String(dateStr).split('-');
  if (parts.length === 3) {
    var _d = new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]));
    if (!isNaN(_d.getTime())) {
      return _d.toLocaleDateString('en-US', {
        year: 'numeric',
        month: 'long',
        day: 'numeric'
      });
    }
  }
  var d = new Date(dateStr);
  if (isNaN(d.getTime())) return '-';
  return d.toLocaleDateString('en-US', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  });
};
var calculateInvoiceTotal = invoices => {
  if (!invoices || !invoices.length) return 0;
  return invoices.reduce((sum, inv) => sum + (Number(inv.amount) || 0), 0);
};
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (s === 'active') return 'standalone-account__badge--active';
  if (s === 'pending' || s === 'trial') return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var getInvoiceStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (s === 'paid') return 'standalone-account__badge--active';
  if (s === 'pending') return 'standalone-account__badge--pending';
  if (s === 'overdue') return 'standalone-account__badge--inactive';
  return '';
};
var StandaloneAccountPage = () => {
  var _account$billingSetti, _account$memberCount, _account$invitedCount, _account$activeMember, _account$billingSetti2, _account$billingSetti3;
  var [account, setAccount] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [portalLoading, setPortalLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [billingError, setBillingError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var getAccountName = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(() => {
    return getTenantAccountNameFromToken() || Object(_utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_4__["getAccountNameFromOrigin"])() || 'app';
  }, []);
  var fetchAccount = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(/*#__PURE__*/_asyncToGenerator(function* () {
    setLoading(true);
    setError(null);
    try {
      var accountName = getAccountName();
      var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__["client"].invokeApi({}, "/account/by-name/".concat(accountName), 'GET', {}, {});
      setAccount(res.data);
    } catch (err) {
      setError('Failed to load account information. Please try again.');
    }
    setLoading(false);
  }), [getAccountName]);
  var handleManageBilling = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(/*#__PURE__*/_asyncToGenerator(function* () {
    setPortalLoading(true);
    setBillingError(null);
    try {
      var accountName = getAccountName();
      Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_5__["trackEvent"])('standalone_manage_billing_clicked');
      var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__["client"].invokeApi({}, '/account/billing/stripe/portal-session', 'POST', {}, {
        accountName,
        returnUrl: window.location.href
      });
      if (res.data && res.data.url) {
        window.location.href = res.data.url;
        return;
      }
      setBillingError('Unable to open billing portal. Please try again.');
    } catch (err) {
      var serverMessage = err.response && err.response.data && err.response.data.errorMessage;
      setBillingError(serverMessage || 'Unable to open billing portal. Please try again or contact support.');
    }
    setPortalLoading(false);
  }), [getAccountName]);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_5__["trackEvent"])('standalone_account_viewed');
  }, []);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    fetchAccount();
  }, [fetchAccount]);
  if (loading) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account",
      "data-testid": "standalone-account-page",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 127,
        columnNumber: 7
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__container",
      style: {
        paddingTop: '3rem',
        textAlign: 'center'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 128,
        columnNumber: 9
      }
    }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      "data-testid": "account-loading",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 129,
        columnNumber: 11
      }
    }, "Loading account information..."))));
  }
  if (error) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account",
      "data-testid": "standalone-account-page",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 137,
        columnNumber: 7
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__container",
      style: {
        paddingTop: '3rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 138,
        columnNumber: 9
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      "data-testid": "account-error",
      className: "alert alert-danger d-flex align-items-center justify-content-between",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 139,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 140,
        columnNumber: 13
      }
    }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      "data-testid": "retry-button",
      className: "btn lw-btn",
      onClick: fetchAccount,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 141,
        columnNumber: 13
      }
    }, "Retry"))));
  }
  if (!account) return null;
  var invoiceTotal = calculateInvoiceTotal(account.invoices);
  var paymentMethod = (_account$billingSetti = account.billingSettings) === null || _account$billingSetti === void 0 ? void 0 : _account$billingSetti.paymentMethod;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-account-page",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 160,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 162,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 163,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-10",
    style: {
      textAlign: 'left',
      color: '#fff'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 164,
      columnNumber: 11
    }
  }, "Account"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    style: {
      color: '#fff',
      opacity: 0.8,
      margin: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 167,
      columnNumber: 11
    }
  }, account.displayName || account.name || ''))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 173,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 175,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6 mb-3 mb-md-0",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 176,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    "data-testid": "account-overview",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 177,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 178,
      columnNumber: 15
    }
  }, "Account Overview")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dl", {
    className: "standalone-account__info-grid",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 179,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 180,
      columnNumber: 17
    }
  }, _dt || (_dt = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 181,
      columnNumber: 19
    }
  }, "Organization")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
    "data-testid": "org-name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 182,
      columnNumber: 19
    }
  }, account.displayName || account.name || '-')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 184,
      columnNumber: 17
    }
  }, _dt2 || (_dt2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 185,
      columnNumber: 19
    }
  }, "Plan")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
    "data-testid": "plan-name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 186,
      columnNumber: 19
    }
  }, account.plan || '-')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 188,
      columnNumber: 17
    }
  }, _dt3 || (_dt3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 19
    }
  }, "Status")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 190,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    "data-testid": "account-status",
    className: "standalone-account__badge ".concat(getStatusBadgeClass(account.status)),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 191,
      columnNumber: 21
    }
  }, account.status || 'Unknown'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 199,
      columnNumber: 17
    }
  }, _dt4 || (_dt4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 200,
      columnNumber: 19
    }
  }, "Member Since")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
    "data-testid": "member-since",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 201,
      columnNumber: 19
    }
  }, formatDate(account.clientSince || account.dateCreated)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 207,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    "data-testid": "members-summary",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 208,
      columnNumber: 13
    }
  }, _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 209,
      columnNumber: 15
    }
  }, "Members")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-group",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 210,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 211,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-value",
    "data-testid": "total-members",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 212,
      columnNumber: 19
    }
  }, (_account$memberCount = account.memberCount) !== null && _account$memberCount !== void 0 ? _account$memberCount : 0), _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-label",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 215,
      columnNumber: 19
    }
  }, "Total"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 217,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-value",
    "data-testid": "invited-members",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 218,
      columnNumber: 19
    }
  }, (_account$invitedCount = account.invitedCount) !== null && _account$invitedCount !== void 0 ? _account$invitedCount : 0), _div3 || (_div3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-label",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 19
    }
  }, "Invited"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 223,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-value",
    "data-testid": "active-members",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 224,
      columnNumber: 19
    }
  }, (_account$activeMember = account.activeMemberCount) !== null && _account$activeMember !== void 0 ? _account$activeMember : 0), _div4 || (_div4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__stat-label",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 227,
      columnNumber: 19
    }
  }, "Active")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex",
    style: {
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["Link"], {
    to: "/dashboard/members?action=add",
    className: "btn lw-btn",
    "data-testid": "add-member-btn",
    onClick: () => Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_5__["trackEvent"])('standalone_add_member_clicked', {
      source: 'account_page'
    }),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 231,
      columnNumber: 17
    }
  }, "Add Member"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["Link"], {
    to: "/dashboard/members",
    className: "btn lw-btn lw-btn-white",
    "data-testid": "manage-members-link",
    onClick: () => Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_5__["trackEvent"])('standalone_manage_members_clicked', {
      source: 'account_page'
    }),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 239,
      columnNumber: 17
    }
  }, "Manage Members"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 253,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6 mb-3 mb-md-0",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 254,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    "data-testid": "billing-section",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 255,
      columnNumber: 13
    }
  }, _h3 || (_h3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 256,
      columnNumber: 15
    }
  }, "Billing")), account.stripeError && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-warning",
    "data-testid": "stripe-error",
    style: {
      marginBottom: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 259,
      columnNumber: 17
    }
  }, account.stripeError), billingError && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    "data-testid": "billing-error",
    style: {
      marginBottom: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 265,
      columnNumber: 17
    }
  }, billingError), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dl", {
    className: "standalone-account__info-grid",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 270,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 271,
      columnNumber: 17
    }
  }, _dt5 || (_dt5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 272,
      columnNumber: 19
    }
  }, "Monthly Amount")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
    "data-testid": "monthly-amount",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 273,
      columnNumber: 19
    }
  }, formatCurrency((_account$billingSetti2 = account.billingSettings) === null || _account$billingSetti2 === void 0 ? void 0 : _account$billingSetti2.monthlyAmount))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 277,
      columnNumber: 17
    }
  }, _dt6 || (_dt6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 278,
      columnNumber: 19
    }
  }, "Next Billing Date")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
    "data-testid": "next-billing-date",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 279,
      columnNumber: 19
    }
  }, formatDate((_account$billingSetti3 = account.billingSettings) === null || _account$billingSetti3 === void 0 ? void 0 : _account$billingSetti3.nextBillingDate)))), paymentMethod ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__payment-method",
    "data-testid": "payment-method",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 286,
      columnNumber: 17
    }
  }, _div5 || (_div5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__payment-method-label",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 287,
      columnNumber: 19
    }
  }, "Payment Method")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__payment-method-detail",
    "data-testid": "payment-method-detail",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 288,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-credit-card",
    style: {
      marginRight: '0.5rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 289,
      columnNumber: 21
    }
  }), paymentMethod.brand ? "".concat(paymentMethod.brand.charAt(0).toUpperCase() + paymentMethod.brand.slice(1), " ending in ").concat(paymentMethod.last4 || '****') : paymentMethod.last4 ? "Card ending in ".concat(paymentMethod.last4) : 'Card on file', paymentMethod.expMonth && paymentMethod.expYear && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__payment-method-exp",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 296,
      columnNumber: 23
    }
  }, ' ', " \xB7 Exp. ", String(paymentMethod.expMonth).padStart(2, '0'), "/", paymentMethod.expYear))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__payment-method",
    "data-testid": "no-payment-method",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 303,
      columnNumber: 17
    }
  }, _div6 || (_div6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__payment-method-label",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 304,
      columnNumber: 19
    }
  }, "Payment Method")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__payment-method-detail",
    style: {
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 305,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-credit-card",
    style: {
      marginRight: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 306,
      columnNumber: 21
    }
  }), "No payment method on file")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex",
    style: {
      gap: '0.75rem',
      marginTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 312,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    "data-testid": "manage-billing-btn",
    onClick: handleManageBilling,
    disabled: portalLoading,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 313,
      columnNumber: 17
    }
  }, portalLoading ? 'Redirecting...' : 'Manage Billing'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
    href: "mailto:sales@loanwell.com?subject=Enterprise%20Upgrade%20Inquiry",
    className: "btn lw-btn lw-btn-white",
    "data-testid": "upgrade-cta",
    onClick: () => Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_5__["trackEvent"])('standalone_upgrade_clicked'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 321,
      columnNumber: 17
    }
  }, "Upgrade to Enterprise")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 333,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    "data-testid": "features-section",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 334,
      columnNumber: 13
    }
  }, _h4 || (_h4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 335,
      columnNumber: 15
    }
  }, "Features")), account.features && account.features.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ul", {
    className: "standalone-account__feature-list",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 339,
      columnNumber: 17
    }
  }, account.features.map((feature, idx) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", {
    key: idx,
    "data-testid": "feature-item",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 341,
      columnNumber: 21
    }
  }, _span || (_span = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__check-icon",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 342,
      columnNumber: 23
    }
  }, "\u2713")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 343,
      columnNumber: 23
    }
  }, feature)))) : _div7 || (_div7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__empty",
    "data-testid": "features-empty",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 348,
      columnNumber: 17
    }
  }, "No features enabled")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__addons",
    "data-testid": "addon-features",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 354,
      columnNumber: 15
    }
  }, _h5 || (_h5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "standalone-account__addons-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 355,
      columnNumber: 17
    }
  }, "Add-on Features")), [{
    name: 'Loan Servicing',
    description: 'Payment tracking, escrow management, and automated statements',
    price: 5000
  }, {
    name: 'Borrower Portal',
    description: 'Self-service portal for borrowers to view loans and make payments',
    price: 5000
  }, {
    name: 'Closing Document Generation',
    description: 'Auto-generate closing packages with customizable templates',
    price: 3000
  }].map(addon => {
    var isEnabled = account.features && account.features.some(f => f.toLowerCase().includes(addon.name.toLowerCase()));
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: addon.name,
      className: "standalone-account__addon-card ".concat(isEnabled ? 'standalone-account__addon-card--enabled' : ''),
      "data-testid": "addon-".concat(addon.name.toLowerCase().replace(/\s+/g, '-')),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 365,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__addon-info",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 370,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__addon-name",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 371,
        columnNumber: 25
      }
    }, addon.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__addon-desc",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 372,
        columnNumber: 25
      }
    }, addon.description)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__addon-action",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 374,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__addon-price",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 375,
        columnNumber: 25
      }
    }, "$", addon.price.toLocaleString(), _span2 || (_span2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 376,
        columnNumber: 58
      }
    }, "/yr"))), isEnabled ? _span3 || (_span3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      className: "standalone-account__badge standalone-account__badge--active",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 379,
        columnNumber: 27
      }
    }, "Enabled")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      className: "btn lw-btn standalone-account__addon-btn",
      onClick: () => {
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_5__["trackEvent"])('standalone_addon_enable_clicked', {
          addon: addon.name,
          price: addon.price
        });
        window.location.href = "mailto:sales@loanwell.com?subject=Enable%20".concat(encodeURIComponent(addon.name), "&body=I%20would%20like%20to%20enable%20").concat(encodeURIComponent(addon.name), "%20for%20my%20account.");
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 381,
        columnNumber: 27
      }
    }, "Enable")));
  }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 401,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-12",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 402,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    "data-testid": "invoices-section",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 403,
      columnNumber: 13
    }
  }, _h6 || (_h6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 404,
      columnNumber: 15
    }
  }, "Invoices")), account.invoices && account.invoices.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("table", {
    className: "standalone-account__invoice-table",
    "data-testid": "invoices-table",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 407,
      columnNumber: 19
    }
  }, _thead || (_thead = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("thead", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 408,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 409,
      columnNumber: 23
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 410,
      columnNumber: 25
    }
  }, "Date"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 411,
      columnNumber: 25
    }
  }, "Description"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 412,
      columnNumber: 25
    }
  }, "Amount"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 413,
      columnNumber: 25
    }
  }, "Status")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tbody", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 416,
      columnNumber: 21
    }
  }, account.invoices.map((inv, idx) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
    key: inv.id || idx,
    "data-testid": "invoice-row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 418,
      columnNumber: 25
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 419,
      columnNumber: 27
    }
  }, formatDate(inv.date)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 420,
      columnNumber: 27
    }
  }, inv.description || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 421,
      columnNumber: 27
    }
  }, formatCurrency(inv.amount)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 422,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getInvoiceStatusBadgeClass(inv.status)),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 423,
      columnNumber: 29
    }
  }, inv.status || '-')))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__invoice-total",
    "data-testid": "invoice-total",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 431,
      columnNumber: 19
    }
  }, _span4 || (_span4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 432,
      columnNumber: 21
    }
  }, "Total")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 433,
      columnNumber: 21
    }
  }, formatCurrency(invoiceTotal)))) : _div8 || (_div8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__empty",
    "data-testid": "invoices-empty",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 437,
      columnNumber: 17
    }
  }, "No invoices yet")))))));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAccountPage));var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* @license
Papa Parse
v5.5.3
https://github.com/mholt/PapaParse
License: MIT
*/
((e,t)=>{ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),
				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):undefined})(this,function r(){var n="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&U(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine="",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader("Range","bytes="+this._start+"-"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader("Content-Range"))?parseInt(e.substring(e.lastIndexOf("/")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,""),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData("")},this),this._streamCleanUp=y(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,d=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return"greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+v.DefaultDelimiter+"'"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){U(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?"true"===t||"TRUE"===t||"false"!==t&&"FALSE"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):""===t?null:t):t)(n=m.header?r>=c.length?"__parsed_extra":c[r]:n,s=m.transform?m.transform(s,n):s);"__parsed_extra"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+c.length+" fields but parsed "+r,f+t):r<c.length&&k("FieldMismatch","TooFewFields","Too few fields: expected "+c.length+" fields but parsed "+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}U(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[",","\t","|",";",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),b(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=U(m.chunk)?"":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,U(m.complete)&&m.complete(p),n=""},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(P(t)+"([^]*?)"+P(t),"gm"),i=(e=e.replace(t,"")).split("\r"),t=e.split("\n"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return"\n";for(var r=0,n=0;n<i.length;n++)"\n"===i[n][0]&&r++;return r>=i.length/2?"\r\n":"\r"}}function P(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),("string"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=","),x===S)throw new Error("Comment character same as delimiter");!0===x?x="#":("string"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),"\n"!==O&&"\r"!==O&&"\r\n"!==O&&(O="\n");var z=0,M=!1;this.parse=function(i,t,r){if("string"!=typeof i)throw new Error("Input must be a string");var n=i.length,e=S.length,s=O.length,a=x.length,o=U(I),h=[],u=[],d=[],f=z=0;if(!i)return w();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return w();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return w()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),w(!0)}}return w()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(P(j)+P(F),"g"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),b(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),b(g+s),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&""===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=s[r];if(a[i=U(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+"_"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn("Duplicate headers found and renamed."),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(w()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error("Not implemented.")}function b(e){if("object"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=b(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return"function"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,"string"==typeof e?(e=(e=>65279!==e.charCodeAt(0)?e:e.slice(1))(e),i=new(t.download?f:c)(t)):!0===e.readable&&U(e.read)&&U(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",t,")();"],{type:"text/javascript"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,i=!1,r=null,o=!1,h=((()=>{if("object"==typeof t){if("string"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),"boolean"!=typeof t.quotes&&"function"!=typeof t.quotes&&!Array.isArray(t.quotes)||(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),"string"==typeof t.newline&&(y=t.newline),"string"==typeof t.quoteChar&&(s=t.quoteChar),"boolean"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s),t.escapeFormulae instanceof RegExp?o=t.escapeFormulae:"boolean"==typeof t.escapeFormulae&&t.escapeFormulae&&(o=/^[=+\-@\t\r].*$/)}})(),new RegExp(P(s),"g"));"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function u(e,t,i){var r="",n=("string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u="greedy"===i?""===t[o].join("").trim():1===t[o].length&&0===t[o][0].length),"greedy"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=""===f.join("").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r;return null==e?"":e.constructor===Date?JSON.stringify(e).slice(1,25):(r=!1,o&&"string"==typeof e&&o.test(e)&&(e="'"+e,r=!0),i=e.toString().replace(h,a),(r=r||!0===n||"function"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(i,v.BAD_DELIMITERS)||-1<i.indexOf(m)||" "===i.charAt(0)||" "===i.charAt(i.length-1))?s+i+s:i)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK="\ufeff",v.BAD_DELIMITERS=["\r","\n",'"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=",",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!("INPUT"===d(this).prop("tagName").toUpperCase()&&"file"===d(this).attr("type").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)U(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if("object"==typeof s){if("abort"===s.action)return e="AbortError",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if("skip"===s.action)return void u();"object"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if("skip"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);"string"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return version; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse_xlscfb", function() { return parse_xlscfb; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse_zip", function() { return parse_zip; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "read", function() { return readSync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "readFile", function() { return readFileSync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "readFileSync", function() { return readFileSync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "write", function() { return writeSync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeFile", function() { return writeFileSync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeFileSync", function() { return writeFileSync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeFileAsync", function() { return writeFileAsync; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeXLSX", function() { return writeSyncXLSX; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeFileXLSX", function() { return writeFileSyncXLSX; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utils", function() { return utils; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set_fs", function() { return set_fs; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set_cptable", function() { return set_cptable; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stream", function() { return __stream; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SSF", function() { return SSF; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CFB", function() { return CFB; });
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
/* vim: set ts=2: */
/*exported XLSX */
/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
var XLSX = {};
XLSX.version = '0.20.3';
var current_codepage = 1200, current_ansi = 1252;
/*:: declare var cptable:any; */
/*global cptable:true, window */
var $cptable;

var VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];
/* ECMA-376 Part I 18.4.1 charset to codepage mapping */
var CS2CP = ({
	0:    1252, /* ANSI */
	1:   65001, /* DEFAULT */
	2:   65001, /* SYMBOL */
	77:  10000, /* MAC */
	128:   932, /* SHIFTJIS */
	129:   949, /* HANGUL */
	130:  1361, /* JOHAB */
	134:   936, /* GB2312 */
	136:   950, /* CHINESEBIG5 */
	161:  1253, /* GREEK */
	162:  1254, /* TURKISH */
	163:  1258, /* VIETNAMESE */
	177:  1255, /* HEBREW */
	178:  1256, /* ARABIC */
	186:  1257, /* BALTIC */
	204:  1251, /* RUSSIAN */
	222:   874, /* THAI */
	238:  1250, /* EASTEUROPE */
	255:  1252, /* OEM */
	69:   6969  /* MISC */
}/*:any*/);

var set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };
function reset_ansi() { set_ansi(1252); }

var set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };
function reset_cp() { set_cp(1200); reset_ansi(); }

function char_codes(data/*:string*/)/*:Array<number>*/ { var o/*:Array<number>*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }

function utf16leread(data/*:string*/)/*:string*/ {
	var o/*:Array<string>*/ = [];
	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));
	return o.join("");
}
function utf16lereadu(data/*:Uint8Array*/)/*:string*/ {
	var o/*:Array<string>*/ = [];
	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8));
	return o.join("");
}
function utf16beread(data/*:string*/)/*:string*/ {
	var o/*:Array<string>*/ = [];
	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));
	return o.join("");
}

var debom = function(data/*:string*/)/*:string*/ {
	var c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);
	if(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));
	if(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));
	if(c1 == 0xFEFF) return data.slice(1);
	return data;
};

var _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };
var _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };

function set_cptable(cptable) {
	$cptable = cptable;
	set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };
	debom = function(data/*:string*/) {
		if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }
		return data;
	};
	_getchar = function _gc2(x/*:number*/)/*:string*/ {
		if(current_codepage === 1200) return String.fromCharCode(x);
		return $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];
	};
	_getansi = function _ga2(x/*:number*/)/*:string*/ {
		return $cptable.utils.decode(current_ansi, [x])[0];
	};
	cpdoit();
}
var DENSE = null;
var DIF_XL = true;
var Base64_map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function Base64_encode(input) {
  var o = "";
  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
  for (var i = 0; i < input.length; ) {
    c1 = input.charCodeAt(i++);
    e1 = c1 >> 2;
    c2 = input.charCodeAt(i++);
    e2 = (c1 & 3) << 4 | c2 >> 4;
    c3 = input.charCodeAt(i++);
    e3 = (c2 & 15) << 2 | c3 >> 6;
    e4 = c3 & 63;
    if (isNaN(c2)) {
      e3 = e4 = 64;
    } else if (isNaN(c3)) {
      e4 = 64;
    }
    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);
  }
  return o;
}
function Base64_encode_pass(input) {
  var o = "";
  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
  for (var i = 0; i < input.length; ) {
    c1 = input.charCodeAt(i++);
    if (c1 > 255)
      c1 = 95;
    e1 = c1 >> 2;
    c2 = input.charCodeAt(i++);
    if (c2 > 255)
      c2 = 95;
    e2 = (c1 & 3) << 4 | c2 >> 4;
    c3 = input.charCodeAt(i++);
    if (c3 > 255)
      c3 = 95;
    e3 = (c2 & 15) << 2 | c3 >> 6;
    e4 = c3 & 63;
    if (isNaN(c2)) {
      e3 = e4 = 64;
    } else if (isNaN(c3)) {
      e4 = 64;
    }
    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);
  }
  return o;
}
function Base64_encode_arr(input) {
  var o = "";
  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
  for (var i = 0; i < input.length; ) {
    c1 = input[i++];
    e1 = c1 >> 2;
    c2 = input[i++];
    e2 = (c1 & 3) << 4 | c2 >> 4;
    c3 = input[i++];
    e3 = (c2 & 15) << 2 | c3 >> 6;
    e4 = c3 & 63;
    if (isNaN(c2)) {
      e3 = e4 = 64;
    } else if (isNaN(c3)) {
      e4 = 64;
    }
    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);
  }
  return o;
}
function Base64_decode(input) {
  var o = "";
  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
  if (input.slice(0, 5) == "data:") {
    var i = input.slice(0, 1024).indexOf(";base64,");
    if (i > -1)
      input = input.slice(i + 8);
  }
  input = input.replace(/[^\w\+\/\=]/g, "");
  for (var i = 0; i < input.length; ) {
    e1 = Base64_map.indexOf(input.charAt(i++));
    e2 = Base64_map.indexOf(input.charAt(i++));
    c1 = e1 << 2 | e2 >> 4;
    o += String.fromCharCode(c1);
    e3 = Base64_map.indexOf(input.charAt(i++));
    c2 = (e2 & 15) << 4 | e3 >> 2;
    if (e3 !== 64) {
      o += String.fromCharCode(c2);
    }
    e4 = Base64_map.indexOf(input.charAt(i++));
    c3 = (e3 & 3) << 6 | e4;
    if (e4 !== 64) {
      o += String.fromCharCode(c3);
    }
  }
  return o;
}
var has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();

var Buffer_from = /*#__PURE__*/(function() {
	if(typeof Buffer !== 'undefined') {
		var nbfs = !Buffer.from;
		if(!nbfs) try { Buffer.from("foo", "utf8"); } catch(e) { nbfs = true; }
		return nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);
	}
	return function() {};
})();
var buf_utf16le = /*#__PURE__*/(function() {
	if(typeof Buffer === 'undefined') return false;
	var x = Buffer_from([65,0]);
	if(!x) return false;
	var o = x.toString("utf16le");
	return o.length == 1;
})();


function new_raw_buf(len/*:number*/) {
	/* jshint -W056 */
	if(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);
	return typeof Uint8Array != "undefined" ? new Uint8Array(len) : new Array(len);
	/* jshint +W056 */
}

function new_unsafe_buf(len/*:number*/) {
	/* jshint -W056 */
	if(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);
	return typeof Uint8Array != "undefined" ? new Uint8Array(len) : new Array(len);
	/* jshint +W056 */
}

var s2a = function s2a(s/*:string*/)/*:any*/ {
	if(has_buf) return Buffer_from(s, "binary");
	return s.split("").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });
};

function s2ab(s/*:string*/)/*:any*/ {
	if(typeof ArrayBuffer === 'undefined') return s2a(s);
	var buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);
	for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
	return buf;
}

function a2s(data/*:any*/)/*:string*/ {
	if(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join("");
	var o/*:Array<string>*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join("");
}

function a2u(data/*:Array<number>*/)/*:Uint8Array*/ {
	if(typeof Uint8Array === 'undefined') throw new Error("Unsupported");
	return new Uint8Array(data);
}

function ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array<number>*/ {
	if(typeof ArrayBuffer == 'undefined') throw new Error("Unsupported");
	if(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));
	/*:: if(data instanceof ArrayBuffer) throw new Error("unreachable"); */
	var o = new Array(data.length);
	for(var i = 0; i < data.length; ++i) o[i] = data[i];
	return o;
}

var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {
	if(typeof Uint8Array !== "undefined") {
		var i = 0, maxlen = 0;
		for(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;
		var o = new Uint8Array(maxlen);
		var len = 0;
		for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
			len = bufs[i].length;
			if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
			else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
			else o.set(new Uint8Array(bufs[i]), maxlen);
		}
		return o;
	}
	return [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));
};

function utf8decode(content/*:string*/) {
	var out = [], widx = 0, L = content.length + 250;
	var o = new_raw_buf(content.length + 255);
	for(var ridx = 0; ridx < content.length; ++ridx) {
		var c = content.charCodeAt(ridx);
		if(c < 0x80) o[widx++] = c;
		else if(c < 0x800) {
			o[widx++] = (192|((c>>6)&31));
			o[widx++] = (128|(c&63));
		} else if(c >= 0xD800 && c < 0xE000) {
			c = (c&1023)+64;
			var d = content.charCodeAt(++ridx)&1023;
			o[widx++] = (240|((c>>8)&7));
			o[widx++] = (128|((c>>2)&63));
			o[widx++] = (128|((d>>6)&15)|((c&3)<<4));
			o[widx++] = (128|(d&63));
		} else {
			o[widx++] = (224|((c>>12)&15));
			o[widx++] = (128|((c>>6)&63));
			o[widx++] = (128|(c&63));
		}
		if(widx > L) {
			out.push(o.slice(0, widx));
			widx = 0;
			o = new_raw_buf(65535);
			L = 65530;
		}
	}
	out.push(o.slice(0, widx));
	return bconcat(out);
}

var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/g;
/*::
declare type Block = any;
declare type BufArray = {
	newblk(sz:number):Block;
	next(sz:number):Block;
	end():any;
	push(buf:Block):void;
};

type RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};

type EvertType = {[string]:string};
type EvertNumType = {[string]:number};
type EvertArrType = {[string]:Array<string>};

type StringConv = {(string):string};

*/
/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */
/*jshint -W041 */
function _strrev(x/*:string*/)/*:string*/ { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
function pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
function pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v;return t.length>=d?t:fill(' ',d-t.length)+t;}
function rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:t+fill(' ',d-t.length);}
function pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=""+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}
function pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
var p2_32 = /*#__PURE__*/Math.pow(2,32);
function pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }
/* yes, in 2022 this is still faster than string compare */
function SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }
var days/*:Array<Array<string> >*/ = [
	['Sun', 'Sunday'],
	['Mon', 'Monday'],
	['Tue', 'Tuesday'],
	['Wed', 'Wednesday'],
	['Thu', 'Thursday'],
	['Fri', 'Friday'],
	['Sat', 'Saturday']
];
var months/*:Array<Array<string> >*/ = [
	['J', 'Jan', 'January'],
	['F', 'Feb', 'February'],
	['M', 'Mar', 'March'],
	['A', 'Apr', 'April'],
	['M', 'May', 'May'],
	['J', 'Jun', 'June'],
	['J', 'Jul', 'July'],
	['A', 'Aug', 'August'],
	['S', 'Sep', 'September'],
	['O', 'Oct', 'October'],
	['N', 'Nov', 'November'],
	['D', 'Dec', 'December']
];
function SSF_init_table(t/*:any*/) {
	if(!t) t = {};
	t[0]=  'General';
	t[1]=  '0';
	t[2]=  '0.00';
	t[3]=  '#,##0';
	t[4]=  '#,##0.00';
	t[9]=  '0%';
	t[10]= '0.00%';
	t[11]= '0.00E+00';
	t[12]= '# ?/?';
	t[13]= '# ??/??';
	t[14]= 'm/d/yy';
	t[15]= 'd-mmm-yy';
	t[16]= 'd-mmm';
	t[17]= 'mmm-yy';
	t[18]= 'h:mm AM/PM';
	t[19]= 'h:mm:ss AM/PM';
	t[20]= 'h:mm';
	t[21]= 'h:mm:ss';
	t[22]= 'm/d/yy h:mm';
	t[37]= '#,##0 ;(#,##0)';
	t[38]= '#,##0 ;[Red](#,##0)';
	t[39]= '#,##0.00;(#,##0.00)';
	t[40]= '#,##0.00;[Red](#,##0.00)';
	t[45]= 'mm:ss';
	t[46]= '[h]:mm:ss';
	t[47]= 'mmss.0';
	t[48]= '##0.0E+0';
	t[49]= '@';
	t[56]= '"上午/下午 "hh"時"mm"分"ss"秒 "';
	return t;
}
/* repeated to satiate webpack */
var table_fmt = {
	0:  'General',
	1:  '0',
	2:  '0.00',
	3:  '#,##0',
	4:  '#,##0.00',
	9:  '0%',
	10: '0.00%',
	11: '0.00E+00',
	12: '# ?/?',
	13: '# ??/??',
	14: 'm/d/yy',
	15: 'd-mmm-yy',
	16: 'd-mmm',
	17: 'mmm-yy',
	18: 'h:mm AM/PM',
	19: 'h:mm:ss AM/PM',
	20: 'h:mm',
	21: 'h:mm:ss',
	22: 'm/d/yy h:mm',
	37: '#,##0 ;(#,##0)',
	38: '#,##0 ;[Red](#,##0)',
	39: '#,##0.00;(#,##0.00)',
	40: '#,##0.00;[Red](#,##0.00)',
	45: 'mm:ss',
	46: '[h]:mm:ss',
	47: 'mmss.0',
	48: '##0.0E+0',
	49: '@',
	56: '"上午/下午 "hh"時"mm"分"ss"秒 "'
};

/* Defaults determined by systematically testing in Excel 2019 */

/* These formats appear to default to other formats in the table */
var SSF_default_map = {
	5:  37, 6:  38, 7:  39, 8:  40,         //  5 -> 37 ...  8 -> 40

	23:  0, 24:  0, 25:  0, 26:  0,         // 23 ->  0 ... 26 ->  0

	27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14

	50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14
	55: 14, 56: 14, 57: 14, 58: 14,
	59:  1, 60:  2, 61:  3, 62:  4,         // 59 ->  1 ... 62 ->  4

	67:  9, 68: 10,                         // 67 ->  9 ... 68 -> 10
	69: 12, 70: 13, 71: 14,                 // 69 -> 12 ... 71 -> 14
	72: 14, 73: 15, 74: 16, 75: 17,         // 72 -> 14 ... 75 -> 17
	76: 20, 77: 21, 78: 22,                 // 76 -> 20 ... 78 -> 22
	79: 45, 80: 46, 81: 47,                 // 79 -> 45 ... 81 -> 47
	82: 0                                   // 82 ->  0 ... 65536 -> 0 (omitted)
};


/* These formats technically refer to Accounting formats with no equivalent */
var SSF_default_str = {
	//  5 -- Currency,   0 decimal, black negative
	5:  '"$"#,##0_);\\("$"#,##0\\)',
	63: '"$"#,##0_);\\("$"#,##0\\)',

	//  6 -- Currency,   0 decimal, red   negative
	6:  '"$"#,##0_);[Red]\\("$"#,##0\\)',
	64: '"$"#,##0_);[Red]\\("$"#,##0\\)',

	//  7 -- Currency,   2 decimal, black negative
	7:  '"$"#,##0.00_);\\("$"#,##0.00\\)',
	65: '"$"#,##0.00_);\\("$"#,##0.00\\)',

	//  8 -- Currency,   2 decimal, red   negative
	8:  '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
	66: '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',

	// 41 -- Accounting, 0 decimal, No Symbol
	41: '_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',

	// 42 -- Accounting, 0 decimal, $  Symbol
	42: '_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',

	// 43 -- Accounting, 2 decimal, No Symbol
	43: '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',

	// 44 -- Accounting, 2 decimal, $  Symbol
	44: '_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'
};

function SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array<number>*/ {
	var sgn = x < 0 ? -1 : 1;
	var B = x * sgn;
	var P_2 = 0, P_1 = 1, P = 0;
	var Q_2 = 1, Q_1 = 0, Q = 0;
	var A = Math.floor(B);
	while(Q_1 < D) {
		A = Math.floor(B);
		P = A * P_1 + P_2;
		Q = A * Q_1 + Q_2;
		if((B - A) < 0.00000005) break;
		B = 1 / (B - A);
		P_2 = P_1; P_1 = P;
		Q_2 = Q_1; Q_1 = Q;
	}
	if(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }
	if(!mixed) return [0, sgn * P, Q];
	var q = Math.floor(sgn * P/Q);
	return [q, sgn*P - q*Q, Q];
}
function SSF_normalize_xl_unsafe(v/*:number*/)/*:number*/ {
	var s = v.toPrecision(16);
	if(s.indexOf("e") > -1) {
		var m = s.slice(0, s.indexOf("e"));
		m = m.indexOf(".") > -1 ? m.slice(0, (m.slice(0,2) == "0." ? 17 : 16)) : (m.slice(0,15) + fill("0", m.length - 15));
		return m + s.slice(s.indexOf("e"));
	}
	var n = s.indexOf(".") > -1 ? s.slice(0, (s.slice(0,2) == "0." ? 17 : 16)) : (s.slice(0,15) + fill("0", s.length - 15));
	return Number(n);
}

function SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {
	if(v > 2958465 || v < 0) return null;
	v = SSF_normalize_xl_unsafe(v);
	var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;
	var dout=[];
	var out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};
	if(Math.abs(out.u) < 1e-6) out.u = 0;
	if(opts && opts.date1904) date += 1462;
	if(out.u > 0.9999) {
		out.u = 0;
		if(++time == 86400) { out.T = time = 0; ++date; ++out.D; }
	}
	if(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}
	else if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}
	else {
		if(date > 60) --date;
		/* 1 = Jan 1 1900 in Gregorian */
		var d = new Date(1900, 0, 1);
		d.setDate(d.getDate() + date - 1);
		dout = [d.getFullYear(), d.getMonth()+1,d.getDate()];
		dow = d.getDay();
		if(date < 60) dow = (dow + 6) % 7;
		if(b2) dow = SSF_fix_hijri(d, dout);
	}
	out.y = dout[0]; out.m = dout[1]; out.d = dout[2];
	out.S = time % 60; time = Math.floor(time / 60);
	out.M = time % 60; time = Math.floor(time / 60);
	out.H = time;
	out.q = dow;
	return out;
}
/* ECMA-376 18.8.30 numFmt*/
/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */
/* exponent >= -9 and <= 9 */
function SSF_strip_decimal(o/*:string*/)/*:string*/ {
	return (o.indexOf(".") == -1) ? o : o.replace(/(?:\.0*|(\.\d*[1-9])0+)$/, "$1");
}

/* General Exponential always shows 2 digits exp and trims the mantissa */
function SSF_normalize_exp(o/*:string*/)/*:string*/ {
	if(o.indexOf("E") == -1) return o;
	return o.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2");
}

/* exponent >= -9 and <= 9 */
function SSF_small_exp(v/*:number*/)/*:string*/ {
	var w = (v<0?12:11);
	var o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;
	o = v.toPrecision(10); if(o.length <= w) return o;
	return v.toExponential(5);
}

/* exponent >= 11 or <= -10 likely exponential */
function SSF_large_exp(v/*:number*/)/*:string*/ {
	var o = SSF_strip_decimal(v.toFixed(11));
	return (o.length > (v<0?12:11) || o === "0" || o === "-0") ? v.toPrecision(6) : o;
}

function SSF_general_num(v/*:number*/)/*:string*/ {
	if(!isFinite(v)) return isNaN(v) ? "#NUM!" : "#DIV/0!";
	var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;

	if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
	else if(Math.abs(V) <= 9) o = SSF_small_exp(v);
	else if(V === 10) o = v.toFixed(10).substr(0,12);
	else o = SSF_large_exp(v);

	return SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));
}


/*
	"General" rules:
	- text is passed through ("@")
	- booleans are rendered as TRUE/FALSE
	- "up to 11 characters" displayed for numbers
	- Default date format (code 14) used for Dates

	The longest 32-bit integer text is "-2147483648", exactly 11 chars
	TODO: technically the display depends on the width of the cell
*/
function SSF_general(v/*:any*/, opts/*:any*/) {
	switch(typeof v) {
		case 'string': return v;
		case 'boolean': return v ? "TRUE" : "FALSE";
		case 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);
		case 'undefined': return "";
		case 'object':
			if(v == null) return "";
			if(v instanceof Date) return SSF_format(14, datenum(v, opts && opts.date1904), opts);
	}
	throw new Error("unsupported value in General format: " + v);
}

function SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {
  /* TODO: properly adjust y/m/d and  */
  o[0] -= 581;
  var dow = date.getDay();
  if(date < 60) dow = (dow + 6) % 7;
  return dow;
}
//var THAI_DIGITS = "\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59".split("");
function SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {
	var o="", ss=0, tt=0, y = val.y, out, outl = 0;
	switch(type) {
		case 98: /* 'b' buddhist year */
			y = val.y + 543;
			/* falls through */
		case 121: /* 'y' year */
		switch(fmt.length) {
			case 1: case 2: out = y % 100; outl = 2; break;
			default: out = y % 10000; outl = 4; break;
		} break;
		case 109: /* 'm' month */
		switch(fmt.length) {
			case 1: case 2: out = val.m; outl = fmt.length; break;
			case 3: return months[val.m-1][1];
			case 5: return months[val.m-1][0];
			default: return months[val.m-1][2];
		} break;
		case 100: /* 'd' day */
		switch(fmt.length) {
			case 1: case 2: out = val.d; outl = fmt.length; break;
			case 3: return days[val.q][0];
			default: return days[val.q][1];
		} break;
		case 104: /* 'h' 12-hour */
		switch(fmt.length) {
			case 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;
			default: throw 'bad hour format: ' + fmt;
		} break;
		case 72: /* 'H' 24-hour */
		switch(fmt.length) {
			case 1: case 2: out = val.H; outl = fmt.length; break;
			default: throw 'bad hour format: ' + fmt;
		} break;
		case 77: /* 'M' minutes */
		switch(fmt.length) {
			case 1: case 2: out = val.M; outl = fmt.length; break;
			default: throw 'bad minute format: ' + fmt;
		} break;
		case 115: /* 's' seconds */
			if(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;
			if(val.u === 0 && (fmt == "s" || fmt == "ss")) return pad0(val.S, fmt.length);
			/*::if(!ss0) ss0 = 0; */
			if(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;
			else tt = ss0 === 1 ? 10 : 1;
			ss = Math.round((tt)*(val.S + val.u));
			if(ss >= 60*tt) ss = 0;
			if(fmt === 's') return ss === 0 ? "0" : ""+ss/tt;
			o = pad0(ss,2 + ss0);
			if(fmt === 'ss') return o.substr(0,2);
			return "." + o.substr(2,fmt.length-1);
		case 90: /* 'Z' absolute time */
		switch(fmt) {
			case '[h]': case '[hh]': out = val.D*24+val.H; break;
			case '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;
			case '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+(ss0 == 0 ? Math.round(val.S+val.u) : val.S); break;
			default: throw 'bad abstime format: ' + fmt;
		} outl = fmt.length === 3 ? 1 : 2; break;
		case 101: /* 'e' era */
			out = y; outl = 1; break;
	}
	var outstr = outl > 0 ? pad0(out, outl) : "";
	return outstr;
}


/*jshint -W086 */
/*jshint +W086 */
function commaify(s/*:string*/)/*:string*/ {
	var w = 3;
	if(s.length <= w) return s;
	var j = (s.length % w), o = s.substr(0,j);
	for(; j!=s.length; j+=w) o+=(o.length > 0 ? "," : "") + s.substr(j,w);
	return o;
}
var pct1 = /%/g;
function write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{
	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
}

function write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{
	var idx = fmt.length - 1;
	while(fmt.charCodeAt(idx-1) === 44) --idx;
	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
}

function write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{
	var o/*:string*/;
	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
	if(fmt.match(/^#+0.0E\+0$/)) {
		if(val == 0) return "0.0E+0";
		else if(val < 0) return "-" + write_num_exp(fmt, -val);
		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
		var ee = Math.floor(Math.log(val)*Math.LOG10E)%period;
		if(ee < 0) ee += period;
		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
		if(o.indexOf("e") === -1) {
			var fakee = Math.floor(Math.log(val)*Math.LOG10E);
			if(o.indexOf(".") === -1) o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
			else o += "E+" + (fakee - ee);
			while(o.substr(0,2) === "0.") {
				o = o.charAt(0) + o.substr(2,period) + "." + o.substr(2+period);
				o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");
			}
			o = o.replace(/\+-/,"-");
		}
		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
	} else o = val.toExponential(idx);
	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o.charAt(o.length-1);
	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
	return o.replace("e","E");
}
var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
function write_num_f1(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {
	var den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);
	var myn = (rr - base*den), myd = den;
	return sign + (base === 0 ? "" : ""+base) + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + "/" + r[3] + pad0(myd,r[4].length));
}
function write_num_f2(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {
	return sign + (aval === 0 ? "" : ""+aval) + fill(" ", r[1].length + 2 + r[4].length);
}
var dec1 = /^#*0*\.([0#]+)/;
var closeparen = /\)[^)]*[0#]/;
var phone = /\(###\) ###\\?-####/;
function hashq(str/*:string*/)/*:string*/ {
	var o = "", cc;
	for(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {
		case 35: break;
		case 63: o+= " "; break;
		case 48: o+= "0"; break;
		default: o+= String.fromCharCode(cc);
	}
	return o;
}
function rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); }
function dec(val/*:number*/, d/*:number*/)/*:number*/ {
	var _frac = val - Math.floor(val), dd = Math.pow(10,d);
	if (d < ('' + Math.round(_frac * dd)).length) return 0;
	return Math.round(_frac * dd);
}
function carry(val/*:number*/, d/*:number*/)/*:number*/ {
	if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {
		return 1;
	}
	return 0;
}
function flr(val/*:number*/)/*:string*/ {
	if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0));
	return ""+Math.floor(val);
}
function write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {
	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
		if(val >= 0) return write_num_flt('n', ffmt, val);
		return '(' + write_num_flt('n', ffmt, -val) + ')';
	}
	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);
	if(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);
	if(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);
	if(fmt.charCodeAt(0) === 36) return "$"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);
	var o;
	var r/*:?Array<string>*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
	if(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);
	if(fmt.match(/^[#?]+$/)) {
		o = pad0r(val,0); if(o === "0") o = "";
		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
	}
	if((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);
	if(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf("0"));
	if((r = fmt.match(dec1))) {
		o = rnd(val, r[1].length).replace(/^([^\.]+)$/,"$1."+hashq(r[1])).replace(/\.$/,"."+hashq(r[1])).replace(/\.(\d*)$/,function($$, $1) { return "." + $1 + fill("0", hashq(/*::(*/r/*::||[""])*/[1]).length-$1.length); });
		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
	}
	fmt = fmt.replace(/^#+([0.])/, "$1");
	if((r = fmt.match(/^(0*)\.(#*)$/))) {
		return sign + rnd(aval, r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
	}
	if((r = fmt.match(/^#{1,3},##0(\.?)$/))) return sign + commaify(pad0r(aval,0));
	if((r = fmt.match(/^#,##0\.([#0]*0)$/))) {
		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(""+(Math.floor(val) + carry(val, r[1].length))) + "." + pad0(dec(val, r[1].length),r[1].length);
	}
	if((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);
	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/))) {
		o = _strrev(write_num_flt(type, fmt.replace(/[\\-]/g,""), val));
		ri = 0;
		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':"";}));
	}
	if(fmt.match(phone)) {
		o = write_num_flt(type, "##########", val);
		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
	}
	var oa = "";
	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))) {
		ri = Math.min(/*::String(*/r[4]/*::)*/.length,7);
		ff = SSF_frac(aval, Math.pow(10,ri)-1, false);
		o = "" + sign;
		oa = write_num("n", /*::String(*/r[1]/*::)*/, ff[1]);
		if(oa.charAt(oa.length-1) == " ") oa = oa.substr(0,oa.length-1) + "0";
		o += oa + /*::String(*/r[2]/*::)*/ + "/" + /*::String(*/r[3]/*::)*/;
		oa = rpad_(ff[2],ri);
		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
		o += oa;
		return o;
	}
	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))) {
		ri = Math.min(Math.max(r[1].length, r[4].length),7);
		ff = SSF_frac(aval, Math.pow(10,ri)-1, true);
		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
	}
	if((r = fmt.match(/^[#0?]+$/))) {
		o = pad0r(val, 0);
		if(fmt.length <= o.length) return o;
		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
	}
	if((r = fmt.match(/^([#0?]+)\.([#0]+)$/))) {
		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
		ri = o.indexOf(".");
		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
	}
	if((r = fmt.match(/^00,000\.([#0]*0)$/))) {
		ri = dec(val, r[1].length);
		return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(ri,r[1].length);
	}
	switch(fmt) {
		case "###,##0.00": return write_num_flt(type, "#,##0.00", val);
		case "###,###":
		case "##,###":
		case "#,###": var x = commaify(pad0r(aval,0)); return x !== "0" ? sign + x : "";
		case "###,###.00": return write_num_flt(type, "###,##0.00",val).replace(/^0\./,".");
		case "#,###.00": return write_num_flt(type, "#,##0.00",val).replace(/^0\./,".");
		default:
	}
	throw new Error("unsupported format |" + fmt + "|");
}
function write_num_cm2(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{
	var idx = fmt.length - 1;
	while(fmt.charCodeAt(idx-1) === 44) --idx;
	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
}
function write_num_pct2(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{
	var sfmt = fmt.replace(pct1,""), mul = fmt.length - sfmt.length;
	return write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill("%",mul);
}
function write_num_exp2(fmt/*:string*/, val/*:number*/)/*:string*/{
	var o/*:string*/;
	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
	if(fmt.match(/^#+0.0E\+0$/)) {
		if(val == 0) return "0.0E+0";
		else if(val < 0) return "-" + write_num_exp2(fmt, -val);
		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
		var ee = Math.floor(Math.log(val)*Math.LOG10E)%period;
		if(ee < 0) ee += period;
		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
		if(!o.match(/[Ee]/)) {
			var fakee = Math.floor(Math.log(val)*Math.LOG10E);
			if(o.indexOf(".") === -1) o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
			else o += "E+" + (fakee - ee);
			o = o.replace(/\+-/,"-");
		}
		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
	} else o = val.toExponential(idx);
	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o.charAt(o.length-1);
	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
	return o.replace("e","E");
}
function write_num_int(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {
	if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
		var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
		if(val >= 0) return write_num_int('n', ffmt, val);
		return '(' + write_num_int('n', ffmt, -val) + ')';
	}
	if(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);
	if(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);
	if(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);
	if(fmt.charCodeAt(0) === 36) return "$"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);
	var o;
	var r/*:?Array<string>*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
	if(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);
	if(fmt.match(/^[#?]+$/)) {
		o = (""+val); if(val === 0) o = "";
		return o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;
	}
	if((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);
	if(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf("0"));
	if((r = fmt.match(dec1))) {
		/*:: if(!Array.isArray(r)) throw new Error("unreachable"); */
		o = (""+val).replace(/^([^\.]+)$/,"$1."+hashq(r[1])).replace(/\.$/,"."+hashq(r[1]));
		o = o.replace(/\.(\d*)$/,function($$, $1) {
		/*:: if(!Array.isArray(r)) throw new Error("unreachable"); */
			return "." + $1 + fill("0", hashq(r[1]).length-$1.length); });
		return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./,".");
	}
	fmt = fmt.replace(/^#+([0.])/, "$1");
	if((r = fmt.match(/^(0*)\.(#*)$/))) {
		return sign + (""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
	}
	if((r = fmt.match(/^#{1,3},##0(\.?)$/))) return sign + commaify((""+aval));
	if((r = fmt.match(/^#,##0\.([#0]*0)$/))) {
		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify((""+val)) + "." + fill('0',r[1].length);
	}
	if((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,""),val);
	if((r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/))) {
		o = _strrev(write_num_int(type, fmt.replace(/[\\-]/g,""), val));
		ri = 0;
		return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':"";}));
	}
	if(fmt.match(phone)) {
		o = write_num_int(type, "##########", val);
		return "(" + o.substr(0,3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
	}
	var oa = "";
	if((r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))) {
		ri = Math.min(/*::String(*/r[4]/*::)*/.length,7);
		ff = SSF_frac(aval, Math.pow(10,ri)-1, false);
		o = "" + sign;
		oa = write_num("n", /*::String(*/r[1]/*::)*/, ff[1]);
		if(oa.charAt(oa.length-1) == " ") oa = oa.substr(0,oa.length-1) + "0";
		o += oa + /*::String(*/r[2]/*::)*/ + "/" + /*::String(*/r[3]/*::)*/;
		oa = rpad_(ff[2],ri);
		if(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;
		o += oa;
		return o;
	}
	if((r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))) {
		ri = Math.min(Math.max(r[1].length, r[4].length),7);
		ff = SSF_frac(aval, Math.pow(10,ri)-1, true);
		return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1],ri) + r[2] + "/" + r[3] + rpad_(ff[2],ri): fill(" ", 2*ri+1 + r[2].length + r[3].length));
	}
	if((r = fmt.match(/^[#0?]+$/))) {
		o = "" + val;
		if(fmt.length <= o.length) return o;
		return hashq(fmt.substr(0,fmt.length-o.length)) + o;
	}
	if((r = fmt.match(/^([#0]+)\.([#0]+)$/))) {
		o = "" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,"$1");
		ri = o.indexOf(".");
		var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
		return hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));
	}
	if((r = fmt.match(/^00,000\.([#0]*0)$/))) {
		return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify(""+val).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function($$) { return "00," + ($$.length < 3 ? pad0(0,3-$$.length) : "") + $$; }) + "." + pad0(0,r[1].length);
	}
	switch(fmt) {
		case "###,###":
		case "##,###":
		case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
		default:
			if(fmt.match(/\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
	}
	throw new Error("unsupported format |" + fmt + "|");
}
function write_num(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {
	return (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
}
function SSF_split_fmt(fmt/*:string*/)/*:Array<string>*/ {
	var out/*:Array<string>*/ = [];
	var in_str = false/*, cc*/;
	for(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {
		case 34: /* '"' */
			in_str = !in_str; break;
		case 95: case 42: case 92: /* '_' '*' '\\' */
			++i; break;
		case 59: /* ';' */
			out[out.length] = fmt.substr(j,i-j);
			j = i+1;
	}
	out[out.length] = fmt.substr(j);
	if(in_str === true) throw new Error("Format |" + fmt + "| unterminated string ");
	return out;
}

var SSF_abstime = /\[[HhMmSs\u0E0A\u0E19\u0E17]*\]/;
function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
	var i = 0, /*cc = 0,*/ c = "", o = "";
	while(i < fmt.length) {
		switch((c = fmt.charAt(i))) {
			case 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;
			case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;
			case '\\': i+=2; break;
			case '_': i+=2; break;
			case '@': ++i; break;
			case 'B': case 'b':
				if(fmt.charAt(i+1) === "1" || fmt.charAt(i+1) === "2") return true;
				/* falls through */
			case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
				/* falls through */
			case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;
			case 'A': case 'a': case '上':
				if(fmt.substr(i, 3).toUpperCase() === "A/P") return true;
				if(fmt.substr(i, 5).toUpperCase() === "AM/PM") return true;
				if(fmt.substr(i, 5).toUpperCase() === "上午/下午") return true;
				++i; break;
			case '[':
				o = c;
				while(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);
				if(o.match(SSF_abstime)) return true;
				break;
			case '.':
				/* falls through */
			case '0': case '#':
				while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1))){/* empty */}
				break;
			case '?': while(fmt.charAt(++i) === c){/* empty */} break;
			case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;
			case '(': case ')': ++i; break;
			case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
				while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;
			case ' ': ++i; break;
			default: ++i; break;
		}
	}
	return false;
}

function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
	var out = [], o = "", i = 0, c = "", lst='t', dt, j, cc;
	var hr='H';
	/* Tokenize */
	while(i < fmt.length) {
		switch((c = fmt.charAt(i))) {
			case 'G': /* General */
				if(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);
				out[out.length] = {t:'G', v:'General'}; i+=7; break;
			case '"': /* Literal text */
				for(o="";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);
				out[out.length] = {t:'t', v:o}; ++i; break;
			case '\\': var w = fmt.charAt(++i), t = (w === "(" || w === ")") ? w : 't';
				out[out.length] = {t:t, v:w}; ++i; break;
			case '_': out[out.length] = {t:'t', v:" "}; i+=2; break;
			case '@': /* Text Placeholder */
				out[out.length] = {t:'T', v:v}; ++i; break;
			case 'B': case 'b':
				if(fmt.charAt(i+1) === "1" || fmt.charAt(i+1) === "2") {
					if(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === "2"); if(dt==null) return ""; }
					out[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;
				}
				/* falls through */
			case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
				c = c.toLowerCase();
				/* falls through */
			case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':
				if(v < 0) return "";
				if(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return ""; }
				o = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;
				if(c === 'm' && lst.toLowerCase() === 'h') c = 'M';
				if(c === 'h') c = hr;
				out[out.length] = {t:c, v:o}; lst = c; break;
			case 'A': case 'a': case '上':
				var q={t:c, v:c};
				if(dt==null) dt=SSF_parse_date_code(v, opts);
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}
				else if(fmt.substr(i,5).toUpperCase() === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
				else if(fmt.substr(i,5).toUpperCase() === "上午/下午") { if(dt!=null) q.v = dt.H >= 12 ? "下午" : "上午"; q.t = 'T'; i+=5; hr='h'; }
				else { q.t = "t"; ++i; }
				if(dt==null && q.t === 'T') return "";
				out[out.length] = q; lst = c; break;
			case '[':
				o = c;
				while(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);
				if(o.slice(-1) !== ']') throw 'unterminated "[" block: |' + o + '|';
				if(o.match(SSF_abstime)) {
					if(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return ""; }
					out[out.length] = {t:'Z', v:o.toLowerCase()};
					lst = o.charAt(1);
				} else if(o.indexOf("$") > -1) {
					o = (o.match(/\$([^-\[\]]*)/)||[])[1]||"$";
					if(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};
				}
				break;
			/* Numbers */
			case '.':
				if(dt != null) {
					o = c; while(++i < fmt.length && (c=fmt.charAt(i)) === "0") o += c;
					out[out.length] = {t:'s', v:o}; break;
				}
				/* falls through */
			case '0': case '#':
				o = c; while(++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1) o += c;
				out[out.length] = {t:'n', v:o}; break;
			case '?':
				o = c; while(fmt.charAt(++i) === c) o+=c;
				out[out.length] = {t:c, v:o}; lst = c; break;
			case '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **
			case '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;
			case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
				o = c; while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);
				out[out.length] = {t:'D', v:o}; break;
			case ' ': out[out.length] = {t:c, v:c}; ++i; break;
			case '$': out[out.length] = {t:'t', v:'$'}; ++i; break;
			default:
				if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);
				out[out.length] = {t:'t', v:c}; ++i; break;
		}
	}

	/* Scan for date/time parts */
	var bt = 0, ss0 = 0, ssm;
	for(i=out.length-1, lst='t'; i >= 0; --i) {
		switch(out[i].t) {
			case 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;
			case 's':
				if((ssm=out[i].v.match(/\.0+$/))) { ss0=Math.max(ss0,ssm[0].length-1); bt = 4;}
				if(bt < 3) bt = 3;
			/* falls through */
			case 'd': case 'y': case 'e': lst=out[i].t; break;
			case 'M': lst=out[i].t; if(bt < 2) bt = 2; break;
			case 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;
			case 'X': /*if(out[i].v === "B2");*/
				break;
			case 'Z':
				if(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;
				if(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;
				if(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
		}
	}

	/* time rounding depends on presence of minute / second / usec fields */
	var _dt;
	switch(bt) {
		case 0: break;
		case 1:
		case 2:
		case 3:
			if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
			if(dt.M >=  60) { dt.M = 0; ++dt.H; }
			if(dt.H >=  24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }
			break;
		case 4:
			switch(ss0) {
				case 1: dt.u = Math.round(dt.u * 10)/10; break;
				case 2: dt.u = Math.round(dt.u * 100)/100; break;
				case 3: dt.u = Math.round(dt.u * 1000)/1000; break;
			}
			if(dt.u >=   1) { dt.u = 0; ++dt.S; }
			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
			if(dt.M >=  60) { dt.M = 0; ++dt.H; }
			if(dt.H >=  24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }
			break;
	}

	/* replace fields */
	var nstr = "", jj;
	for(i=0; i < out.length; ++i) {
		switch(out[i].t) {
			case 't': case 'T': case ' ': case 'D': break;
			case 'X': out[i].v = ""; out[i].t = ";"; break;
			case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':
				/*::if(!dt) throw "unreachable"; */
				out[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
				out[i].t = 't'; break;
			case 'n': case '?':
				jj = i+1;
				while(out[jj] != null && (
					(c=out[jj].t) === "?" || c === "D" ||
					((c === " " || c === "t") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === "t" && out[jj+1].v === '/')) ||
					(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||
					(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))
				)) {
					out[i].v += out[jj].v;
					out[jj] = {v:"", t:";"}; ++jj;
				}
				nstr += out[i].v;
				i = jj-1; break;
			case 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;
		}
	}
	var vv = "", myv, ostr;
	if(nstr.length > 0) {
		if(nstr.charCodeAt(0) == 40) /* '(' */ {
			myv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);
			ostr = write_num('n', nstr, myv);
		} else {
			myv = (v<0 && flen > 1 ? -v : v);
			ostr = write_num('n', nstr, myv);
			if(myv < 0 && out[0] && out[0].t == 't') {
				ostr = ostr.substr(1);
				out[0].v = "-" + out[0].v;
			}
		}
		jj=ostr.length-1;
		var decpt = out.length;
		for(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(".") > -1) { decpt = i; break; }
		var lasti=out.length;
		if(decpt === out.length && ostr.indexOf("E") === -1) {
			for(i=out.length-1; i>= 0;--i) {
				if(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;
				if(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }
				else if(jj < 0) out[i].v = "";
				else { out[i].v = ostr.substr(0, jj+1); jj = -1; }
				out[i].t = 't';
				lasti = i;
			}
			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
		}
		else if(decpt !== out.length && ostr.indexOf("E") === -1) {
			jj = ostr.indexOf(".")-1;
			for(i=decpt; i>= 0; --i) {
				if(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;
				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;
				vv = out[i].v.substr(j+1);
				for(; j>=0; --j) {
					if(jj>=0 && (out[i].v.charAt(j) === "0" || out[i].v.charAt(j) === "#")) vv = ostr.charAt(jj--) + vv;
				}
				out[i].v = vv;
				out[i].t = 't';
				lasti = i;
			}
			if(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;
			jj = ostr.indexOf(".")+1;
			for(i=decpt; i<out.length; ++i) {
				if(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;
				j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")+1:0;
				vv = out[i].v.substr(0,j);
				for(; j<out[i].v.length; ++j) {
					if(jj<ostr.length) vv += ostr.charAt(jj++);
				}
				out[i].v = vv;
				out[i].t = 't';
				lasti = i;
			}
		}
	}
	for(i=0; i<out.length; ++i) if(out[i] != null && 'n?'.indexOf(out[i].t)>-1) {
		myv = (flen >1 && v < 0 && i>0 && out[i-1].v === "-" ? -v:v);
		out[i].v = write_num(out[i].t, out[i].v, myv);
		out[i].t = 't';
	}
	var retval = "";
	for(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;
	return retval;
}

var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
function chkcond(v, rr) {
	if(rr == null) return false;
	var thresh = parseFloat(rr[2]);
	switch(rr[1]) {
		case "=":  if(v == thresh) return true; break;
		case ">":  if(v >  thresh) return true; break;
		case "<":  if(v <  thresh) return true; break;
		case "<>": if(v != thresh) return true; break;
		case ">=": if(v >= thresh) return true; break;
		case "<=": if(v <= thresh) return true; break;
	}
	return false;
}
function choose_fmt(f/*:string*/, v/*:any*/) {
	var fmt = SSF_split_fmt(f);
	var l = fmt.length, lat = fmt[l-1].indexOf("@");
	if(l<4 && lat>-1) --l;
	if(fmt.length > 4) throw new Error("cannot find right format for |" + fmt.join("|") + "|");
	if(typeof v !== "number") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:"@"];
	/* NOTE: most spreadsheet software do not support NaN or infinities */
	if(typeof v === "number" && !isFinite(v)) v = 0;
	switch(fmt.length) {
		case 1: fmt = lat>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break;
		case 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break;
		case 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"]; break;
		case 4: break;
	}
	var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];
	if(fmt[0].indexOf("[") === -1 && fmt[1].indexOf("[") === -1) return [l, ff];
	if(fmt[0].match(/\[[=<>]/) != null || fmt[1].match(/\[[=<>]/) != null) {
		var m1 = fmt[0].match(cfregex2);
		var m2 = fmt[1].match(cfregex2);
		return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];
	}
	return [l, ff];
}
function SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {
	if(o == null) o = {};
	var sfmt = "";
	switch(typeof fmt) {
		case "string":
			if(fmt == "m/d/yy" && o.dateNF) sfmt = o.dateNF;
			else sfmt = fmt;
			break;
		case "number":
			if(fmt == 14 && o.dateNF) sfmt = o.dateNF;
			else sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];
			if(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];
			if(sfmt == null) sfmt = SSF_default_str[fmt] || "General";
			break;
	}
	if(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);
	if(v instanceof Date) v = datenum(v, o.date1904);
	var f = choose_fmt(sfmt, v);
	if(SSF_isgeneral(f[1])) return SSF_general(v, o);
	if(v === true) v = "TRUE"; else if(v === false) v = "FALSE";
	else if(v === "" || v == null) return "";
	else if(isNaN(v) && f[1].indexOf("0") > -1) return "#NUM!";
	else if(!isFinite(v) && f[1].indexOf("0") > -1) return "#DIV/0!";
	return eval_fmt(f[1], v, o, f[0]);
}
function SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {
	if(typeof idx != 'number') {
		idx = +idx || -1;
/*::if(typeof idx != 'number') return 0x188; */
		for(var i = 0; i < 0x0188; ++i) {
/*::if(typeof idx != 'number') return 0x188; */
			if(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }
			if(table_fmt[i] == fmt) { idx = i; break; }
		}
/*::if(typeof idx != 'number') return 0x188; */
		if(idx < 0) idx = 0x187;
	}
/*::if(typeof idx != 'number') return 0x188; */
	table_fmt[idx] = fmt;
	return idx;
}
function SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {
	for(var i=0; i!=0x0188; ++i)
		if(tbl[i] !== undefined) SSF_load(tbl[i], i);
}

function make_ssf() {
	table_fmt = SSF_init_table();
}

var SSF = {
	format: SSF_format,
	load: SSF_load,
	_table: table_fmt,
	load_table: SSF_load_table,
	parse_date_code: SSF_parse_date_code,
	is_date: fmt_is_date,
	get_table: function get_table() { return SSF._table = table_fmt; }
};

var SSFImplicit/*{[number]:string}*/ = ({
	"5": '"$"#,##0_);\\("$"#,##0\\)',
	"6": '"$"#,##0_);[Red]\\("$"#,##0\\)',
	"7": '"$"#,##0.00_);\\("$"#,##0.00\\)',
	"8": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
	"23": 'General', "24": 'General', "25": 'General', "26": 'General',
	"27": 'm/d/yy', "28": 'm/d/yy', "29": 'm/d/yy', "30": 'm/d/yy', "31": 'm/d/yy',
	"32": 'h:mm:ss', "33": 'h:mm:ss', "34": 'h:mm:ss', "35": 'h:mm:ss',
	"36": 'm/d/yy',
	"41": '_(* #,##0_);_(* \(#,##0\);_(* "-"_);_(@_)',
	"42": '_("$"* #,##0_);_("$"* \(#,##0\);_("$"* "-"_);_(@_)',
	"43": '_(* #,##0.00_);_(* \(#,##0.00\);_(* "-"??_);_(@_)',
	"44": '_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)',
	"50": 'm/d/yy', "51": 'm/d/yy', "52": 'm/d/yy', "53": 'm/d/yy', "54": 'm/d/yy',
	"55": 'm/d/yy', "56": 'm/d/yy', "57": 'm/d/yy', "58": 'm/d/yy',
	"59": '0',
	"60": '0.00',
	"61": '#,##0',
	"62": '#,##0.00',
	"63": '"$"#,##0_);\\("$"#,##0\\)',
	"64": '"$"#,##0_);[Red]\\("$"#,##0\\)',
	"65": '"$"#,##0.00_);\\("$"#,##0.00\\)',
	"66": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
	"67": '0%',
	"68": '0.00%',
	"69": '# ?/?',
	"70": '# ??/??',
	"71": 'm/d/yy',
	"72": 'm/d/yy',
	"73": 'd-mmm-yy',
	"74": 'd-mmm',
	"75": 'mmm-yy',
	"76": 'h:mm',
	"77": 'h:mm:ss',
	"78": 'm/d/yy h:mm',
	"79": 'mm:ss',
	"80": '[h]:mm:ss',
	"81": 'mmss.0'
}/*:any*/);

/* dateNF parse TODO: move to SSF */
var dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;
function dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {
	var fmt = typeof dateNF == "number" ? table_fmt[dateNF] : dateNF;
	fmt = fmt.replace(dateNFregex, "(\\d+)");
	dateNFregex.lastIndex = 0;
	return new RegExp("^" + fmt + "$");
}
function dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array<string>*/)/*:string*/ {
	var Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;
	(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {
		var v = parseInt(match[i+1], 10);
		switch(n.toLowerCase().charAt(0)) {
			case 'y': Y = v; break; case 'd': d = v; break;
			case 'h': H = v; break; case 's': S = v; break;
			case 'm': if(H >= 0) M = v; else m = v; break;
		}
	});
	dateNFregex.lastIndex = 0;
	if(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }
	var datestr = (("" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + "-" + ("00" + (m>=1?m:1)).slice(-2) + "-" + ("00" + (d>=1?d:1)).slice(-2));
	if(datestr.length == 7) datestr = "0" + datestr;
	if(datestr.length == 8) datestr = "20" + datestr;
	var timestr = (("00" + (H>=0?H:0)).slice(-2) + ":" + ("00" + (M>=0?M:0)).slice(-2) + ":" + ("00" + (S>=0?S:0)).slice(-2));
	if(H == -1 && M == -1 && S == -1) return datestr;
	if(Y == -1 && m == -1 && d == -1) return timestr;
	return datestr + "T" + timestr;
}

/* table of bad formats written by third-party tools */
var bad_formats = {
	"d.m": "d\\.m" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd"."m' or 'd\\.m'
};

function SSF__load(fmt, idx) {
	return SSF_load(bad_formats[fmt] || fmt, idx);
}

/*::
declare var ReadShift:any;
declare var CheckField:any;
declare var prep_blob:any;
declare var __readUInt32LE:any;
declare var __readInt32LE:any;
declare var __toBuffer:any;
declare var __utf16le:any;
declare var bconcat:any;
declare var s2a:any;
declare var chr0:any;
declare var chr1:any;
declare var has_buf:boolean;
declare var new_buf:any;
declare var new_raw_buf:any;
declare var new_unsafe_buf:any;
declare var Buffer_from:any;
*/
/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */
/* vim: set ts=2: */
/*jshint eqnull:true */
/*exported CFB */
/*global Uint8Array:false, Uint16Array:false */

/*::
type SectorEntry = {
	name?:string;
	nodes?:Array<number>;
	data:RawBytes;
};
type SectorList = {
	[k:string|number]:SectorEntry;
	name:?string;
	fat_addrs:Array<number>;
	ssz:number;
}
type CFBFiles = {[n:string]:CFBEntry};
*/
/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
/* vim: set ts=2: */
/*exported CRC32 */
var CRC32 = /*#__PURE__*/(function() {
var CRC32 = {};
CRC32.version = '1.2.0';
/*::
type CRC32TableType = Array<number> | Int32Array;
*/
/*global Int32Array */
function signed_crc_table()/*:any*/ {
	var c = 0, table/*:Array<number>*/ = new Array(256);

	for(var n =0; n != 256; ++n){
		c = n;
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
		table[n] = c;
	}

	return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;
}

var T0 = signed_crc_table();
function slice_by_16_tables(T) {
	var c = 0, v = 0, n = 0, table/*:Array<number>*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;

	for(n = 0; n != 256; ++n) table[n] = T[n];
	for(n = 0; n != 256; ++n) {
		v = T[n];
		for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];
	}
	var out = [];
	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);
	return out;
}
var TT = slice_by_16_tables(T0);
var T1 = TT[0],  T2 = TT[1],  T3 = TT[2],  T4 = TT[3],  T5 = TT[4];
var T6 = TT[5],  T7 = TT[6],  T8 = TT[7],  T9 = TT[8],  Ta = TT[9];
var Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];
function crc32_bstr(bstr/*:string*/, seed/*:?number*/)/*:number*/ {
	var C = seed/*:: ? 0 : 0 */ ^ -1;
	for(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];
	return ~C;
}

function crc32_buf(B/*:Uint8Array|Array<number>*/, seed/*:number*/)/*:number*/ {
	var C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;
	for(; i < L;) C =
		Tf[B[i++] ^ (C & 255)] ^
		Te[B[i++] ^ ((C >> 8) & 255)] ^
		Td[B[i++] ^ ((C >> 16) & 255)] ^
		Tc[B[i++] ^ (C >>> 24)] ^
		Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^
		T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^
		T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];
	L += 15;
	while(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];
	return ~C;
}

function crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {
	var C = seed ^ -1;
	for(var i = 0, L = str.length, c = 0, d = 0; i < L;) {
		c = str.charCodeAt(i++);
		if(c < 0x80) {
			C = (C>>>8) ^ T0[(C^c)&0xFF];
		} else if(c < 0x800) {
			C = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];
			C = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];
		} else if(c >= 0xD800 && c < 0xE000) {
			c = (c&1023)+64; d = str.charCodeAt(i++)&1023;
			C = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];
			C = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];
			C = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];
			C = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];
		} else {
			C = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];
			C = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];
			C = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];
		}
	}
	return ~C;
}
CRC32.table = T0;
CRC32.bstr = crc32_bstr;
CRC32.buf = crc32_buf;
CRC32.str = crc32_str;
return CRC32;
})();
/* [MS-CFB] v20171201 */
var CFB = /*#__PURE__*/(function _CFB(){
var exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;
exports.version = '1.2.2';
/* [MS-CFB] 2.6.4 */
function namecmp(l/*:string*/, r/*:string*/)/*:number*/ {
	var L = l.split("/"), R = r.split("/");
	for(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {
		if((c = L[i].length - R[i].length)) return c;
		if(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;
	}
	return L.length - R.length;
}
function dirname(p/*:string*/)/*:string*/ {
	if(p.charAt(p.length - 1) == "/") return (p.slice(0,-1).indexOf("/") === -1) ? p : dirname(p.slice(0, -1));
	var c = p.lastIndexOf("/");
	return (c === -1) ? p : p.slice(0, c+1);
}

function filename(p/*:string*/)/*:string*/ {
	if(p.charAt(p.length - 1) == "/") return filename(p.slice(0, -1));
	var c = p.lastIndexOf("/");
	return (c === -1) ? p : p.slice(c+1);
}
/* -------------------------------------------------------------------------- */
/* DOS Date format:
   high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low
   add 1980 to stored year
   stored second should be doubled
*/

/* write JS date to buf as a DOS date */
function write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {
	if(typeof date === "string") date = new Date(date);
	var hms/*:number*/ = date.getHours();
	hms = hms << 6 | date.getMinutes();
	hms = hms << 5 | (date.getSeconds()>>>1);
	buf.write_shift(2, hms);
	var ymd/*:number*/ = (date.getFullYear() - 1980);
	ymd = ymd << 4 | (date.getMonth()+1);
	ymd = ymd << 5 | date.getDate();
	buf.write_shift(2, ymd);
}

/* read four bytes from buf and interpret as a DOS date */
function parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {
	var hms = buf.read_shift(2) & 0xFFFF;
	var ymd = buf.read_shift(2) & 0xFFFF;
	var val = new Date();
	var d = ymd & 0x1F; ymd >>>= 5;
	var m = ymd & 0x0F; ymd >>>= 4;
	val.setMilliseconds(0);
	val.setFullYear(ymd + 1980);
	val.setMonth(m-1);
	val.setDate(d);
	var S = hms & 0x1F; hms >>>= 5;
	var M = hms & 0x3F; hms >>>= 6;
	val.setHours(hms);
	val.setMinutes(M);
	val.setSeconds(S<<1);
	return val;
}
function parse_extra_field(blob/*:CFBlob*/)/*:any*/ {
	prep_blob(blob, 0);
	var o = /*::(*/{}/*:: :any)*/;
	var flags = 0;
	while(blob.l <= blob.length - 4) {
		var type = blob.read_shift(2);
		var sz = blob.read_shift(2), tgt = blob.l + sz;
		var p = {};
		switch(type) {
			/* UNIX-style Timestamps */
			case 0x5455: {
				flags = blob.read_shift(1);
				if(flags & 1) p.mtime = blob.read_shift(4);
				/* for some reason, CD flag corresponds to LFH */
				if(sz > 5) {
					if(flags & 2) p.atime = blob.read_shift(4);
					if(flags & 4) p.ctime = blob.read_shift(4);
				}
				if(p.mtime) p.mt = new Date(p.mtime*1000);
			} break;
			/* ZIP64 Extended Information Field */
			case 0x0001: {
				var sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);
				p.usz = (sz2 * Math.pow(2,32) + sz1);
				sz1 = blob.read_shift(4); sz2 = blob.read_shift(4);
				p.csz = (sz2 * Math.pow(2,32) + sz1);
				// NOTE: volume fields are skipped
			} break;
		}
		blob.l = tgt;
		o[type] = p;
	}
	return o;
}
var fs/*:: = require('fs'); */;
function get_fs() { return fs || (fs = _fs); }
function parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {
if(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);
if((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);
if(file.length < 512) throw new Error("CFB file size " + file.length + " < 512");
var mver = 3;
var ssz = 512;
var nmfs = 0; // number of mini FAT sectors
var difat_sec_cnt = 0;
var dir_start = 0;
var minifat_start = 0;
var difat_start = 0;

var fat_addrs/*:Array<number>*/ = []; // locations of FAT sectors

/* [MS-CFB] 2.2 Compound File Header */
var blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;
prep_blob(blob, 0);

/* major version */
var mv = check_get_mver(blob);
mver = mv[0];
switch(mver) {
	case 3: ssz = 512; break; case 4: ssz = 4096; break;
	case 0: if(mv[1] == 0) return parse_zip(file, options);
	/* falls through */
	default: throw new Error("Major Version: Expected 3 or 4 saw " + mver);
}

/* reprocess header */
if(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }
/* Save header for final object */
var header/*:RawBytes*/ = file.slice(0,ssz);

check_shifts(blob, mver);

// Number of Directory Sectors
var dir_cnt/*:number*/ = blob.read_shift(4, 'i');
if(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);

// Number of FAT Sectors
blob.l += 4;

// First Directory Sector Location
dir_start = blob.read_shift(4, 'i');

// Transaction Signature
blob.l += 4;

// Mini Stream Cutoff Size
blob.chk('00100000', 'Mini Stream Cutoff Size: ');

// First Mini FAT Sector Location
minifat_start = blob.read_shift(4, 'i');

// Number of Mini FAT Sectors
nmfs = blob.read_shift(4, 'i');

// First DIFAT sector location
difat_start = blob.read_shift(4, 'i');

// Number of DIFAT Sectors
difat_sec_cnt = blob.read_shift(4, 'i');

// Grab FAT Sector Locations
for(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */
	q = blob.read_shift(4, 'i');
	if(q<0) break;
	fat_addrs[j] = q;
}

/** Break the file up into sectors */
var sectors/*:Array<RawBytes>*/ = sectorify(file, ssz);

sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);

/** Chains */
var sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);

if(dir_start < sector_list.length) sector_list[dir_start].name = "!Directory";
if(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
sector_list[fat_addrs[0]].name = "!FAT";
sector_list.fat_addrs = fat_addrs;
sector_list.ssz = ssz;

/* [MS-CFB] 2.6.1 Compound File Directory Entry */
var files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);

build_full_paths(FileIndex, FullPaths, Paths);
Paths.shift();

var o = {
	FileIndex: FileIndex,
	FullPaths: FullPaths
};

// $FlowIgnore
if(options && options.raw) o.raw = {header: header, sectors: sectors};
return o;
} // parse

/* [MS-CFB] 2.2 Compound File Header -- read up to major version */
function check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {
	if(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];
	// header signature 8
	blob.chk(HEADER_SIGNATURE, 'Header Signature: ');

	// clsid 16
	//blob.chk(HEADER_CLSID, 'CLSID: ');
	blob.l += 16;

	// minor version 2
	var mver/*:number*/ = blob.read_shift(2, 'u');

	return [blob.read_shift(2,'u'), mver];
}
function check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {
	var shift = 0x09;

	// Byte Order
	//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff
	blob.l += 2;

	// Sector Shift
	switch((shift = blob.read_shift(2))) {
		case 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;
		case 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;
		default: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);
	}

	// Mini Sector Shift
	blob.chk('0600', 'Mini Sector Shift: ');

	// Reserved
	blob.chk('000000000000', 'Reserved: ');
}

/** Break the file up into sectors */
function sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array<RawBytes>*/ {
	var nsectors = Math.ceil(file.length/ssz)-1;
	var sectors/*:Array<RawBytes>*/ = [];
	for(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);
	sectors[nsectors-1] = file.slice(nsectors*ssz);
	return sectors;
}

/* [MS-CFB] 2.6.4 Red-Black Tree */
function build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ {
	var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;
	var dad/*:Array<number>*/ = [], q/*:Array<number>*/ = [];

	for(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }

	for(; j < q.length; ++j) {
		i = q[j];
		L = FI[i].L; R = FI[i].R; C = FI[i].C;
		if(dad[i] === i) {
			if(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];
			if(R !== -1 && dad[R] !== R) dad[i] = dad[R];
		}
		if(C !== -1 /*NOSTREAM*/) dad[C] = i;
		if(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }
		if(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }
	}
	for(i=1; i < pl; ++i) if(dad[i] === i) {
		if(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];
		else if(L !== -1 && dad[L] !== L) dad[i] = dad[L];
	}

	for(i=1; i < pl; ++i) {
		if(FI[i].type === 0 /* unknown */) continue;
		j = i;
		if(j != dad[j]) do {
			j = dad[j];
			FP[i] = FP[j] + "/" + FP[i];
		} while (j !== 0 && -1 !== dad[j] && j != dad[j]);
		dad[i] = -1;
	}

	FP[0] += "/";
	for(i=1; i < pl; ++i) {
		if(FI[i].type !== 2 /* stream */) FP[i] += "/";
	}
}

function get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {
	var start = entry.start, size = entry.size;
	//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);
	var o = [];
	var idx = start;
	while(mini && size > 0 && idx >= 0) {
		o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));
		size -= MSSZ;
		idx = __readInt32LE(mini, idx * 4);
	}
	if(o.length === 0) return (new_buf(0)/*:any*/);
	return (bconcat(o).slice(0, entry.size)/*:any*/);
}

/** Chase down the rest of the DIFAT chain to build a comprehensive list
    DIFAT chains by storing the next sector number as the last 32 bits */
function sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array<RawBytes>*/, ssz/*:number*/, fat_addrs)/*:void*/ {
	var q/*:number*/ = ENDOFCHAIN;
	if(idx === ENDOFCHAIN) {
		if(cnt !== 0) throw new Error("DIFAT chain shorter than expected");
	} else if(idx !== -1 /*FREESECT*/) {
		var sector = sectors[idx], m = (ssz>>>2)-1;
		if(!sector) return;
		for(var i = 0; i < m; ++i) {
			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
			fat_addrs.push(q);
		}
		if(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
	}
}

/** Follow the linked list of sectors for a given starting point */
function get_sector_list(sectors/*:Array<RawBytes>*/, start/*:number*/, fat_addrs/*:Array<number>*/, ssz/*:number*/, chkd/*:?Array<boolean>*/)/*:SectorEntry*/ {
	var buf/*:Array<number>*/ = [], buf_chain/*:Array<any>*/ = [];
	if(!chkd) chkd = [];
	var modulus = ssz - 1, j = 0, jj = 0;
	for(j=start; j>=0;) {
		chkd[j] = true;
		buf[buf.length] = j;
		buf_chain.push(sectors[j]);
		var addr = fat_addrs[Math.floor(j*4/ssz)];
		jj = ((j*4) & modulus);
		if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz);
		if(!sectors[addr]) break;
		j = __readInt32LE(sectors[addr], jj);
	}
	return {nodes: buf, data:__toBuffer([buf_chain])};
}

/** Chase down the sector linked lists */
function make_sector_list(sectors/*:Array<RawBytes>*/, dir_start/*:number*/, fat_addrs/*:Array<number>*/, ssz/*:number*/)/*:SectorList*/ {
	var sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);
	var chkd/*:Array<boolean>*/ = [], buf/*:Array<number>*/ = [], buf_chain/*:Array<RawBytes>*/ = [];
	var modulus = ssz - 1, i=0, j=0, k=0, jj=0;
	for(i=0; i < sl; ++i) {
		buf = ([]/*:Array<number>*/);
		k = (i + dir_start); if(k >= sl) k-=sl;
		if(chkd[k]) continue;
		buf_chain = [];
		var seen = [];
		for(j=k; j>=0;) {
			seen[j] = true;
			chkd[j] = true;
			buf[buf.length] = j;
			buf_chain.push(sectors[j]);
			var addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];
			jj = ((j*4) & modulus);
			if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz);
			if(!sectors[addr]) break;
			j = __readInt32LE(sectors[addr], jj);
			if(seen[j]) break;
		}
		sector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);
	}
	return sector_list;
}

/* [MS-CFB] 2.6.1 Compound File Directory Entry */
function read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex, mini) {
	var minifat_store = 0, pl = (Paths.length?2:0);
	var sector = sector_list[dir_start].data;
	var i = 0, namelen = 0, name;
	for(; i < sector.length; i+= 128) {
		var blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;
		prep_blob(blob, 64);
		namelen = blob.read_shift(2);
		name = __utf16le(blob,0,namelen-pl);
		Paths.push(name);
		var o/*:CFBEntry*/ = ({
			name:  name,
			type:  blob.read_shift(1),
			color: blob.read_shift(1),
			L:     blob.read_shift(4, 'i'),
			R:     blob.read_shift(4, 'i'),
			C:     blob.read_shift(4, 'i'),
			clsid: blob.read_shift(16),
			state: blob.read_shift(4, 'i'),
			start: 0,
			size: 0
		});
		var ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
		if(ctime !== 0) o.ct = read_date(blob, blob.l-8);
		var mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
		if(mtime !== 0) o.mt = read_date(blob, blob.l-8);
		o.start = blob.read_shift(4, 'i');
		o.size = blob.read_shift(4, 'i');
		if(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = ""; }
		if(o.type === 5) { /* root */
			minifat_store = o.start;
			if(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData";
			/*minifat_size = o.size;*/
		} else if(o.size >= 4096 /* MSCSZ */) {
			o.storage = 'fat';
			if(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);
			sector_list[o.start].name = o.name;
			o.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);
		} else {
			o.storage = 'minifat';
			if(o.size < 0) o.size = 0;
			else if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {
				o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);
			}
		}
		if(o.content) prep_blob(o.content, 0);
		files[name] = o;
		FileIndex.push(o);
	}
}

function read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {
	return new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);
}

function read_file(filename/*:string*/, options/*:CFBReadOpts*/) {
	get_fs();
	return parse(fs.readFileSync(filename), options);
}

function read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {
	var type = options && options.type;
	if(!type) {
		if(has_buf && Buffer.isBuffer(blob)) type = "buffer";
	}
	switch(type || "base64") {
		case "file": /*:: if(typeof blob !== 'string') throw "Must pass a filename when type='file'"; */return read_file(blob, options);
		case "base64": /*:: if(typeof blob !== 'string') throw "Must pass a base64-encoded binary string when type='file'"; */return parse(s2a(Base64_decode(blob)), options);
		case "binary": /*:: if(typeof blob !== 'string') throw "Must pass a binary string when type='file'"; */return parse(s2a(blob), options);
	}
	return parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);
}

function init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {
	var o = opts || {}, root = o.root || "Root Entry";
	if(!cfb.FullPaths) cfb.FullPaths = [];
	if(!cfb.FileIndex) cfb.FileIndex = [];
	if(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error("inconsistent CFB structure");
	if(cfb.FullPaths.length === 0) {
		cfb.FullPaths[0] = root + "/";
		cfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);
	}
	if(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;
	seed_cfb(cfb);
}
function seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {
	var nm = "\u0001Sh33tJ5";
	if(CFB.find(cfb, "/" + nm)) return;
	var p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;
	cfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));
	cfb.FullPaths.push(cfb.FullPaths[0] + nm);
	rebuild_cfb(cfb);
}
function rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {
	init_cfb(cfb);
	var gc = false, s = false;
	for(var i = cfb.FullPaths.length - 1; i >= 0; --i) {
		var _file = cfb.FileIndex[i];
		switch(_file.type) {
			case 0:
				if(s) gc = true;
				else { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }
				break;
			case 1: case 2: case 5:
				s = true;
				if(isNaN(_file.R * _file.L * _file.C)) gc = true;
				if(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;
				break;
			default: gc = true; break;
		}
	}
	if(!gc && !f) return;

	var now = new Date(1987, 1, 19), j = 0;
	// Track which names exist
	var fullPaths = Object.create ? Object.create(null) : {};
	var data/*:Array<[string, CFBEntry]>*/ = [];
	for(i = 0; i < cfb.FullPaths.length; ++i) {
		fullPaths[cfb.FullPaths[i]] = true;
		if(cfb.FileIndex[i].type === 0) continue;
		data.push([cfb.FullPaths[i], cfb.FileIndex[i]]);
	}
	for(i = 0; i < data.length; ++i) {
		var dad = dirname(data[i][0]);
		s = fullPaths[dad];
		while(!s) {
			while(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);

			data.push([dad, ({
				name: filename(dad).replace("/",""),
				type: 1,
				clsid: HEADER_CLSID,
				ct: now, mt: now,
				content: null
			}/*:any*/)]);

			// Add name to set
			fullPaths[dad] = true;

			dad = dirname(data[i][0]);
			s = fullPaths[dad];
		}
	}

	data.sort(function(x,y) { return namecmp(x[0], y[0]); });
	cfb.FullPaths = []; cfb.FileIndex = [];
	for(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }
	for(i = 0; i < data.length; ++i) {
		var elt = cfb.FileIndex[i];
		var nm = cfb.FullPaths[i];

		elt.name =  filename(nm).replace("/","");
		elt.L = elt.R = elt.C = -(elt.color = 1);
		elt.size = elt.content ? elt.content.length : 0;
		elt.start = 0;
		elt.clsid = (elt.clsid || HEADER_CLSID);
		if(i === 0) {
			elt.C = data.length > 1 ? 1 : -1;
			elt.size = 0;
			elt.type = 5;
		} else if(nm.slice(-1) == "/") {
			for(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;
			elt.C = j >= data.length ? -1 : j;
			for(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;
			elt.R = j >= data.length ? -1 : j;
			elt.type = 1;
		} else {
			if(dirname(cfb.FullPaths[i+1]||"") == dirname(nm)) elt.R = i + 1;
			elt.type = 2;
		}
	}

}

function _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {
	var _opts = options || {};
	/* MAD is order-sensitive, skip rebuild and sort */
	if(_opts.fileType == 'mad') return write_mad(cfb, _opts);
	rebuild_cfb(cfb);
	switch(_opts.fileType) {
		case 'zip': return write_zip(cfb, _opts);
		//case 'mad': return write_mad(cfb, _opts);
	}
	var L = (function(cfb/*:CFBContainer*/)/*:Array<number>*/{
		var mini_size = 0, fat_size = 0;
		for(var i = 0; i < cfb.FileIndex.length; ++i) {
			var file = cfb.FileIndex[i];
			if(!file.content) continue;
			var flen = file.content.length;
			if(flen > 0){
				if(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;
				else fat_size += (flen + 0x01FF) >> 9;
			}
		}
		var dir_cnt = (cfb.FullPaths.length +3) >> 2;
		var mini_cnt = (mini_size + 7) >> 3;
		var mfat_cnt = (mini_size + 0x7F) >> 7;
		var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;
		var fat_cnt = (fat_base + 0x7F) >> 7;
		var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);
		while(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);
		var L =  [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];
		cfb.FileIndex[0].size = mini_size << 6;
		L[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);
		return L;
	})(cfb);
	var o = new_buf(L[7] << 9);
	var i = 0, T = 0;
	{
		for(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);
		for(i = 0; i < 8; ++i) o.write_shift(2, 0);
		o.write_shift(2, 0x003E);
		o.write_shift(2, 0x0003);
		o.write_shift(2, 0xFFFE);
		o.write_shift(2, 0x0009);
		o.write_shift(2, 0x0006);
		for(i = 0; i < 3; ++i) o.write_shift(2, 0);
		o.write_shift(4, 0);
		o.write_shift(4, L[2]);
		o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);
		o.write_shift(4, 0);
		o.write_shift(4, 1<<12);
		o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);
		o.write_shift(4, L[3]);
		o.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);
		o.write_shift(4, L[1]);
		for(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);
	}
	if(L[1]) {
		for(T = 0; T < L[1]; ++T) {
			for(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);
			o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);
		}
	}
	var chainit = function(w/*:number*/)/*:void*/ {
		for(T += w; i<T-1; ++i) o.write_shift(-4, i+1);
		if(w) { ++i; o.write_shift(-4, ENDOFCHAIN); }
	};
	T = i = 0;
	for(T+=L[1]; i<T; ++i) o.write_shift(-4, consts.DIFSECT);
	for(T+=L[2]; i<T; ++i) o.write_shift(-4, consts.FATSECT);
	chainit(L[3]);
	chainit(L[4]);
	var j/*:number*/ = 0, flen/*:number*/ = 0;
	var file/*:CFBEntry*/ = cfb.FileIndex[0];
	for(; j < cfb.FileIndex.length; ++j) {
		file = cfb.FileIndex[j];
		if(!file.content) continue;
		/*:: if(file.content == null) throw new Error("unreachable"); */
		flen = file.content.length;
		if(flen < 0x1000) continue;
		file.start = T;
		chainit((flen + 0x01FF) >> 9);
	}
	chainit((L[6] + 7) >> 3);
	while(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);
	T = i = 0;
	for(j = 0; j < cfb.FileIndex.length; ++j) {
		file = cfb.FileIndex[j];
		if(!file.content) continue;
		/*:: if(file.content == null) throw new Error("unreachable"); */
		flen = file.content.length;
		if(!flen || flen >= 0x1000) continue;
		file.start = T;
		chainit((flen + 0x3F) >> 6);
	}
	while(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);
	for(i = 0; i < L[4]<<2; ++i) {
		var nm = cfb.FullPaths[i];
		if(!nm || nm.length === 0) {
			for(j = 0; j < 17; ++j) o.write_shift(4, 0);
			for(j = 0; j < 3; ++j) o.write_shift(4, -1);
			for(j = 0; j < 12; ++j) o.write_shift(4, 0);
			continue;
		}
		file = cfb.FileIndex[i];
		if(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
		var _nm/*:string*/ = (i === 0 && _opts.root) || file.name;
		if(_nm.length > 31) {
			console.error("Name " + _nm + " will be truncated to " + _nm.slice(0,31));
			_nm = _nm.slice(0, 31);
		}
		flen = 2*(_nm.length+1);
		o.write_shift(64, _nm, "utf16le");
		o.write_shift(2, flen);
		o.write_shift(1, file.type);
		o.write_shift(1, file.color);
		o.write_shift(-4, file.L);
		o.write_shift(-4, file.R);
		o.write_shift(-4, file.C);
		if(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);
		else o.write_shift(16, file.clsid, "hex");
		o.write_shift(4, file.state || 0);
		o.write_shift(4, 0); o.write_shift(4, 0);
		o.write_shift(4, 0); o.write_shift(4, 0);
		o.write_shift(4, file.start);
		o.write_shift(4, file.size); o.write_shift(4, 0);
	}
	for(i = 1; i < cfb.FileIndex.length; ++i) {
		file = cfb.FileIndex[i];
		/*:: if(!file.content) throw new Error("unreachable"); */
		if(file.size >= 0x1000) {
			o.l = (file.start+1) << 9;
			if (has_buf && Buffer.isBuffer(file.content)) {
				file.content.copy(o, o.l, 0, file.size);
				// o is a 0-filled Buffer so just set next offset
				o.l += (file.size + 511) & -512;
			} else {
				for(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);
				for(; j & 0x1FF; ++j) o.write_shift(1, 0);
			}
		}
	}
	for(i = 1; i < cfb.FileIndex.length; ++i) {
		file = cfb.FileIndex[i];
		/*:: if(!file.content) throw new Error("unreachable"); */
		if(file.size > 0 && file.size < 0x1000) {
			if (has_buf && Buffer.isBuffer(file.content)) {
				file.content.copy(o, o.l, 0, file.size);
				// o is a 0-filled Buffer so just set next offset
				o.l += (file.size + 63) & -64;
			} else {
				for(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);
				for(; j & 0x3F; ++j) o.write_shift(1, 0);
			}
		}
	}
	if (has_buf) {
		o.l = o.length;
	} else {
		// When using Buffer, already 0-filled
		while(o.l < o.length) o.write_shift(1, 0);
	}
	return o;
}
/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */
function find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {
	var UCFullPaths/*:Array<string>*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });
	var UCPaths/*:Array<string>*/ = UCFullPaths.map(function(x) { var y = x.split("/"); return y[y.length - (x.slice(-1) == "/" ? 2 : 1)]; });
	var k/*:boolean*/ = false;
	if(path.charCodeAt(0) === 47 /* "/" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }
	else k = path.indexOf("/") !== -1;
	var UCPath/*:string*/ = path.toUpperCase();
	var w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);
	if(w !== -1) return cfb.FileIndex[w];

	var m = !UCPath.match(chr1);
	UCPath = UCPath.replace(chr0,'');
	if(m) UCPath = UCPath.replace(chr1,'!');
	for(w = 0; w < UCFullPaths.length; ++w) {
		if((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];
		if((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];
	}
	return null;
}
/** CFB Constants */
var MSSZ = 64; /* Mini Sector Size = 1<<6 */
//var MSCSZ = 4096; /* Mini Stream Cutoff Size */
/* 2.1 Compound File Sector Numbers and Types */
var ENDOFCHAIN = -2;
/* 2.2 Compound File Header */
var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';
var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];
var HEADER_CLSID = '00000000000000000000000000000000';
var consts = {
	/* 2.1 Compund File Sector Numbers and Types */
	MAXREGSECT: -6,
	DIFSECT: -4,
	FATSECT: -3,
	ENDOFCHAIN: ENDOFCHAIN,
	FREESECT: -1,
	/* 2.2 Compound File Header */
	HEADER_SIGNATURE: HEADER_SIGNATURE,
	HEADER_MINOR_VERSION: '3e00',
	MAXREGSID: -6,
	NOSTREAM: -1,
	HEADER_CLSID: HEADER_CLSID,
	/* 2.6.1 Compound File Directory Entry */
	EntryTypes: ['unknown','storage','stream','lockbytes','property','root']
};

function write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {
	get_fs();
	var o = _write(cfb, options);
	/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error("unreachable"); */
	fs.writeFileSync(filename, o);
}

function a2s(o/*:RawBytes*/)/*:string*/ {
	var out = new Array(o.length);
	for(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);
	return out.join("");
}

function write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {
	var o = _write(cfb, options);
	switch(options && options.type || "buffer") {
		case "file": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;
		case "binary": return typeof o == "string" ? o : a2s(o);
		case "base64": return Base64_encode(typeof o == "string" ? o : a2s(o));
		case "buffer": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);
			/* falls through */
		case "array": return typeof o == "string" ? s2a(o) : o;
	}
	return o;
}
/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */
var _zlib;
function use_zlib(zlib) { try {
	var InflateRaw = zlib.InflateRaw;
	var InflRaw = new InflateRaw();
	InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);
	if(InflRaw.bytesRead) _zlib = zlib;
	else throw new Error("zlib does not expose bytesRead");
} catch(e) {console.error("cannot use native zlib: " + (e.message || e)); } }

function _inflateRawSync(payload, usz) {
	if(!_zlib) return _inflate(payload, usz);
	var InflateRaw = _zlib.InflateRaw;
	var InflRaw = new InflateRaw();
	var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);
	payload.l += InflRaw.bytesRead;
	return out;
}

function _deflateRawSync(payload) {
	return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);
}
var CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];

/*  LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */
var LEN_LN = [   3,   4,   5,   6,   7,   8,   9,  10,  11,  13 , 15,  17,  19,  23,  27,  31,  35,  43,  51,  59,  67,  83,  99, 115, 131, 163, 195, 227, 258 ];

/*  DST_ID = [  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,  14,  15,  16,  17,  18,  19,   20,   21,   22,   23,   24,   25,   26,    27,    28,    29 ]; */
var DST_LN = [  1,  2,  3,  4,  5,  7,  9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];

function bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }

var use_typed_arrays = typeof Uint8Array !== 'undefined';

var bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];
for(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);

function bit_swap_n(n, b) {
	var rev = bitswap8[n & 0xFF];
	if(b <= 8) return rev >>> (8-b);
	rev = (rev << 8) | bitswap8[(n>>8)&0xFF];
	if(b <= 16) return rev >>> (16-b);
	rev = (rev << 8) | bitswap8[(n>>16)&0xFF];
	return rev >>> (24-b);
}

/* helpers for unaligned bit reads */
function read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }
function read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }
function read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }
function read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }
function read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }

/* works up to n = 3 * 8 + 1 = 25 */
function read_bits_n(buf, bl, n) {
	var w = (bl&7), h = (bl>>>3), f = ((1<<n)-1);
	var v = buf[h] >>> w;
	if(n < 8 - w) return v & f;
	v |= buf[h+1]<<(8-w);
	if(n < 16 - w) return v & f;
	v |= buf[h+2]<<(16-w);
	if(n < 24 - w) return v & f;
	v |= buf[h+3]<<(24-w);
	return v & f;
}

/* helpers for unaligned bit writes */
function write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;
	if(w <= 5) buf[h] |= (v & 7) << w;
	else {
		buf[h] |= (v << w) & 0xFF;
		buf[h+1] = (v&7) >> (8-w);
	}
	return bl + 3;
}

function write_bits_1(buf, bl, v) {
	var w = bl & 7, h = bl >>> 3;
	v = (v&1) << w;
	buf[h] |= v;
	return bl + 1;
}
function write_bits_8(buf, bl, v) {
	var w = bl & 7, h = bl >>> 3;
	v <<= w;
	buf[h] |=  v & 0xFF; v >>>= 8;
	buf[h+1] = v;
	return bl + 8;
}
function write_bits_16(buf, bl, v) {
	var w = bl & 7, h = bl >>> 3;
	v <<= w;
	buf[h] |=  v & 0xFF; v >>>= 8;
	buf[h+1] = v & 0xFF;
	buf[h+2] = v >>> 8;
	return bl + 16;
}

/* until ArrayBuffer#realloc is a thing, fake a realloc */
function realloc(b, sz/*:number*/) {
	var L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;
	if(L >= sz) return b;
	if(has_buf) {
		var o = new_unsafe_buf(M);
		// $FlowIgnore
		if(b.copy) b.copy(o);
		else for(; i < b.length; ++i) o[i] = b[i];
		return o;
	} else if(use_typed_arrays) {
		var a = new Uint8Array(M);
		if(a.set) a.set(b);
		else for(; i < L; ++i) a[i] = b[i];
		return a;
	}
	b.length = M;
	return b;
}

/* zero-filled arrays for older browsers */
function zero_fill_array(n) {
	var o = new Array(n);
	for(var i = 0; i < n; ++i) o[i] = 0;
	return o;
}

/* build tree (used for literals and lengths) */
function build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {
	var maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;

	var bl_count  = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);
	for(i = 0; i < 32; ++i) bl_count[i] = 0;

	for(i = L; i < MAX; ++i) clens[i] = 0;
	L = clens.length;

	var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []

	/* build code tree */
	for(i = 0; i < L; ++i) {
		bl_count[(w = clens[i])]++;
		if(maxlen < w) maxlen = w;
		ctree[i] = 0;
	}
	bl_count[0] = 0;
	for(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);
	for(i = 0; i < L; ++i) {
		ccode = clens[i];
		if(ccode != 0) ctree[i] = bl_count[ccode+16]++;
	}

	/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */
	var cleni = 0;
	for(i = 0; i < L; ++i) {
		cleni = clens[i];
		if(cleni != 0) {
			ccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);
			for(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)
				cmap[ccode|(j<<cleni)] = (cleni&15) | (i<<4);
		}
	}
	return maxlen;
}

/* Fixed Huffman */
var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);
var fix_dmap = use_typed_arrays ? new Uint16Array(32)  : zero_fill_array(32);
if(!use_typed_arrays) {
	for(var i = 0; i < 512; ++i) fix_lmap[i] = 0;
	for(i = 0; i < 32; ++i) fix_dmap[i] = 0;
}
(function() {
	var dlens/*:Array<number>*/ = [];
	var i = 0;
	for(;i<32; i++) dlens.push(5);
	build_tree(dlens, fix_dmap, 32);

	var clens/*:Array<number>*/ = [];
	i = 0;
	for(; i<=143; i++) clens.push(8);
	for(; i<=255; i++) clens.push(9);
	for(; i<=279; i++) clens.push(7);
	for(; i<=287; i++) clens.push(8);
	build_tree(clens, fix_lmap, 288);
})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {
	var DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];
	var j = 0, k = 0;
	for(; j < DST_LN.length - 1; ++j) {
		for(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;
	}
	for(;k < 32768; ++k) DST_LN_RE[k] = 29;

	var LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];
	for(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {
		for(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;
	}

	function write_stored(data, out) {
		var boff = 0;
		while(boff < data.length) {
			var L = Math.min(0xFFFF, data.length - boff);
			var h = boff + L == data.length;
			out.write_shift(1, +h);
			out.write_shift(2, L);
			out.write_shift(2, (~L) & 0xFFFF);
			while(L-- > 0) out[out.l++] = data[boff++];
		}
		return out.l;
	}

	/* Fixed Huffman */
	function write_huff_fixed(data, out) {
		var bl = 0;
		var boff = 0;
		var addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];
		while(boff < data.length) {
			var L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);

			/* write a stored block for short data */
			if(L < 10) {
				bl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line
				if(bl & 7) bl += 8 - (bl & 7);
				out.l = (bl / 8) | 0;
				out.write_shift(2, L);
				out.write_shift(2, (~L) & 0xFFFF);
				while(L-- > 0) out[out.l++] = data[boff++];
				bl = out.l * 8;
				continue;
			}

			bl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line
			var hash = 0;
			while(L-- > 0) {
				var d = data[boff];
				hash = ((hash << 5) ^ d) & 0x7FFF;

				var match = -1, mlen = 0;

				if((match = addrs[hash])) {
					match |= boff & ~0x7FFF;
					if(match > boff) match -= 0x8000;
					if(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;
				}

				if(mlen > 2) {
					/* Copy Token  */
					d = LEN_LN_RE[mlen];
					if(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;
					else {
						write_bits_8(out, bl, 3);
						bl += 5;
						write_bits_8(out, bl, bitswap8[d-23]>>5);
						bl += 3;
					}
					var len_eb = (d < 8) ? 0 : ((d - 4)>>2);
					if(len_eb > 0) {
						write_bits_16(out, bl, mlen - LEN_LN[d]);
						bl += len_eb;
					}

					d = DST_LN_RE[boff - match];
					bl = write_bits_8(out, bl, bitswap8[d]>>3);
					bl -= 3;

					var dst_eb = d < 4 ? 0 : (d-2)>>1;
					if(dst_eb > 0) {
						write_bits_16(out, bl, boff - match - DST_LN[d]);
						bl += dst_eb;
					}
					for(var q = 0; q < mlen; ++q) {
						addrs[hash] = boff & 0x7FFF;
						hash = ((hash << 5) ^ data[boff]) & 0x7FFF;
						++boff;
					}
					L-= mlen - 1;
				} else {
					/* Literal Token */
					if(d <= 143) d = d + 48;
					else bl = write_bits_1(out, bl, 1);
					bl = write_bits_8(out, bl, bitswap8[d]);
					addrs[hash] = boff & 0x7FFF;
					++boff;
				}
			}

			bl = write_bits_8(out, bl, 0) - 1;
		}
		out.l = ((bl + 7)/8)|0;
		return out.l;
	}
	return function _deflateRaw(data, out) {
		if(data.length < 8) return write_stored(data, out);
		return write_huff_fixed(data, out);
	};
})();

function _deflate(data) {
	var buf = new_buf(50+Math.floor(data.length*1.1));
	var off = _deflateRaw(data, buf);
	return buf.slice(0, off);
}
/* modified inflate function also moves original read head */

var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);
var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);
var dyn_cmap = use_typed_arrays ? new Uint16Array(128)   : zero_fill_array(128);
var dyn_len_1 = 1, dyn_len_2 = 1;

/* 5.5.3 Expanding Huffman Codes */
function dyn(data, boff/*:number*/) {
	/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */
	var _HLIT = read_bits_5(data, boff) + 257; boff += 5;
	var _HDIST = read_bits_5(data, boff) + 1; boff += 5;
	var _HCLEN = read_bits_4(data, boff) + 4; boff += 4;
	var w = 0;

	/* grab and store code lengths */
	var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);
	var ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
	var maxlen = 1;
	var bl_count =  use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);
	var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);
	var L = clens.length; /* 19 */
	for(var i = 0; i < _HCLEN; ++i) {
		clens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);
		if(maxlen < w) maxlen = w;
		bl_count[w]++;
		boff += 3;
	}

	/* build code tree */
	var ccode = 0;
	bl_count[0] = 0;
	for(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;
	for(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;
	/* cmap[7 bits from stream] = (off&7) + (lit<<3) */
	var cleni = 0;
	for(i = 0; i < L; ++i) {
		cleni = clens[i];
		if(cleni != 0) {
			ccode = bitswap8[ctree[i]]>>(8-cleni);
			for(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<<cleni)] = (cleni&7) | (i<<3);
		}
	}

	/* read literal and dist codes at once */
	var hcodes/*:Array<number>*/ = [];
	maxlen = 1;
	for(; hcodes.length < _HLIT + _HDIST;) {
		ccode = dyn_cmap[read_bits_7(data, boff)];
		boff += ccode & 7;
		switch((ccode >>>= 3)) {
			case 16:
				w = 3 + read_bits_2(data, boff); boff += 2;
				ccode = hcodes[hcodes.length - 1];
				while(w-- > 0) hcodes.push(ccode);
				break;
			case 17:
				w = 3 + read_bits_3(data, boff); boff += 3;
				while(w-- > 0) hcodes.push(0);
				break;
			case 18:
				w = 11 + read_bits_7(data, boff); boff += 7;
				while(w -- > 0) hcodes.push(0);
				break;
			default:
				hcodes.push(ccode);
				if(maxlen < ccode) maxlen = ccode;
				break;
		}
	}

	/* build literal / length trees */
	var h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);
	for(i = _HLIT; i < 286; ++i) h1[i] = 0;
	for(i = _HDIST; i < 30; ++i) h2[i] = 0;
	dyn_len_1 = build_tree(h1, dyn_lmap, 286);
	dyn_len_2 = build_tree(h2, dyn_dmap, 30);
	return boff;
}

/* return [ data, bytesRead ] */
function inflate(data, usz/*:number*/) {
	/* shortcircuit for empty buffer [0x03, 0x00] */
	if(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }

	/* bit offset */
	var boff = 0;

	/* header includes final bit and type bits */
	var header = 0;

	var outbuf = new_unsafe_buf(usz ? usz : (1<<18));
	var woff = 0;
	var OL = outbuf.length>>>0;
	var max_len_1 = 0, max_len_2 = 0;

	while((header&1) == 0) {
		header = read_bits_3(data, boff); boff += 3;
		if((header >>> 1) == 0) {
			/* Stored block */
			if(boff & 7) boff += 8 - (boff&7);
			/* 2 bytes sz, 2 bytes bit inverse */
			var sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;
			boff += 32;
			/* push sz bytes */
			if(sz > 0) {
				if(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }
				while(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }
			}
			continue;
		} else if((header >> 1) == 1) {
			/* Fixed Huffman */
			max_len_1 = 9; max_len_2 = 5;
		} else {
			/* Dynamic Huffman */
			boff = dyn(data, boff);
			max_len_1 = dyn_len_1; max_len_2 = dyn_len_2;
		}
		for(;;) { // while(true) is apparently out of vogue in modern JS circles
			if(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }
			/* ingest code and move read head */
			var bits = read_bits_n(data, boff, max_len_1);
			var code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];
			boff += code & 15; code >>>= 4;
			/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */
			if(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;
			else if(code == 256) break;
			else {
				code -= 257;
				var len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;
				var tgt = woff + LEN_LN[code];
				/* length extra bits */
				if(len_eb > 0) {
					tgt += read_bits_n(data, boff, len_eb);
					boff += len_eb;
				}

				/* dist code */
				bits = read_bits_n(data, boff, max_len_2);
				code = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];
				boff += code & 15; code >>>= 4;
				var dst_eb = (code < 4 ? 0 : (code-2)>>1);
				var dst = DST_LN[code];
				/* dist extra bits */
				if(dst_eb > 0) {
					dst += read_bits_n(data, boff, dst_eb);
					boff += dst_eb;
				}

				/* in the common case, manual byte copy is faster than TA set / Buffer copy */
				if(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }
				while(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }
			}
		}
	}
	if(usz) return [outbuf, (boff+7)>>>3];
	return [outbuf.slice(0, woff), (boff+7)>>>3];
}

function _inflate(payload, usz) {
	var data = payload.slice(payload.l||0);
	var out = inflate(data, usz);
	payload.l += out[1];
	return out[0];
}

function warn_or_throw(wrn, msg) {
	if(wrn) { if(typeof console !== 'undefined') console.error(msg); }
	else throw new Error(msg);
}

function parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {
	var blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;
	prep_blob(blob, 0);

	var FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];
	var o = {
		FileIndex: FileIndex,
		FullPaths: FullPaths
	};
	init_cfb(o, { root: options.root });

	/* find end of central directory, start just after signature */
	var i = blob.length - 4;
	while((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;
	blob.l = i + 4;

	/* parse end of central directory */
	blob.l += 4;
	var fcnt = blob.read_shift(2);
	blob.l += 6;
	var start_cd = blob.read_shift(4);

	/* parse central directory */
	blob.l = start_cd;

	for(i = 0; i < fcnt; ++i) {
		/* trust local file header instead of CD entry */
		blob.l += 20;
		var csz = blob.read_shift(4);
		var usz = blob.read_shift(4);
		var namelen = blob.read_shift(2);
		var efsz = blob.read_shift(2);
		var fcsz = blob.read_shift(2);
		blob.l += 8;
		var offset = blob.read_shift(4);
		var EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);
		blob.l += namelen + efsz + fcsz;

		var L = blob.l;
		blob.l = offset + 4;
		/* ZIP64 lengths */
		if(EF && EF[0x0001]) {
			if((EF[0x0001]||{}).usz) usz = EF[0x0001].usz;
			if((EF[0x0001]||{}).csz) csz = EF[0x0001].csz;
		}
		parse_local_file(blob, csz, usz, o, EF);
		blob.l = L;
	}

	return o;
}


/* head starts just after local file header signature */
function parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {
	/* [local file header] */
	blob.l += 2;
	var flags = blob.read_shift(2);
	var meth = blob.read_shift(2);
	var date = parse_dos_date(blob);

	if(flags & 0x2041) throw new Error("Unsupported ZIP encryption");
	var crc32 = blob.read_shift(4);
	var _csz = blob.read_shift(4);
	var _usz = blob.read_shift(4);

	var namelen = blob.read_shift(2);
	var efsz = blob.read_shift(2);

	// TODO: flags & (1<<11) // UTF8
	var name = ""; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);
	if(efsz) {
		var ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);
		if((ef[0x5455]||{}).mt) date = ef[0x5455].mt;
		if((ef[0x0001]||{}).usz) _usz = ef[0x0001].usz;
		if((ef[0x0001]||{}).csz) _csz = ef[0x0001].csz;
		if(EF) {
			if((EF[0x5455]||{}).mt) date = EF[0x5455].mt;
			if((EF[0x0001]||{}).usz) _usz = EF[0x0001].usz;
			if((EF[0x0001]||{}).csz) _csz = EF[0x0001].csz;
		}
	}
	blob.l += efsz;

	/* [encryption header] */

	/* [file data] */
	var data = blob.slice(blob.l, blob.l + _csz);
	switch(meth) {
		case 8: data = _inflateRawSync(blob, _usz); break;
		case 0: blob.l += _csz; break; // TODO: scan for magic number
		default: throw new Error("Unsupported ZIP Compression method " + meth);
	}

	/* [data descriptor] */
	var wrn = false;
	if(flags & 8) {
		crc32 = blob.read_shift(4);
		if(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }
		_csz = blob.read_shift(4);
		_usz = blob.read_shift(4);
	}

	if(_csz != csz) warn_or_throw(wrn, "Bad compressed size: " + csz + " != " + _csz);
	if(_usz != usz) warn_or_throw(wrn, "Bad uncompressed size: " + usz + " != " + _usz);
	//var _crc32 = CRC32.buf(data, 0);
	//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, "Bad CRC32 checksum: " + crc32 + " != " + _crc32);
	cfb_add(o, name, data, {unsafe: true, mt: date});
}
function write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {
	var _opts = options || {};
	var out = [], cdirs = [];
	var o/*:CFBlob*/ = new_buf(1);
	var method = (_opts.compression ? 8 : 0), flags = 0;
	var desc = false;
	if(desc) flags |= 8;
	var i = 0, j = 0;

	var start_cd = 0, fcnt = 0;
	var root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];
	var crcs = [];
	var sz_cd = 0;

	for(i = 1; i < cfb.FullPaths.length; ++i) {
		fp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];
		if(!fi.size || !fi.content || (Array.isArray(fi.content) && fi.content.length == 0) || fp == "\u0001Sh33tJ5") continue;
		var start = start_cd;


		/* TODO: CP437 filename */
		var namebuf = new_buf(fp.length);
		for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
		namebuf = namebuf.slice(0, namebuf.l);
		crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);

		var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content/*::||[]*/;
		if(method == 8) outbuf = _deflateRawSync(outbuf);

		/* local file header */
		o = new_buf(30);
		o.write_shift(4, 0x04034b50);
		o.write_shift(2, 20);
		o.write_shift(2, flags);
		o.write_shift(2, method);
		/* TODO: last mod file time/date */
		if(fi.mt) write_dos_date(o, fi.mt);
		else o.write_shift(4, 0);
		o.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);
		o.write_shift(4,  (flags & 8) ? 0 : outbuf.length);
		o.write_shift(4,  (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);
		o.write_shift(2, namebuf.length);
		o.write_shift(2, 0);

		start_cd += o.length;
		out.push(o);
		start_cd += namebuf.length;
		out.push(namebuf);

		/* TODO: extra fields? */

		/* TODO: encryption header ? */

		start_cd += outbuf.length;
		out.push(outbuf);

		/* data descriptor */
		if(flags & 8) {
			o = new_buf(12);
			o.write_shift(-4, crcs[fcnt]);
			o.write_shift(4, outbuf.length);
			o.write_shift(4, /*::(*/fi.content/*::||[])*/.length);
			start_cd += o.l;
			out.push(o);
		}

		/* central directory */
		o = new_buf(46);
		o.write_shift(4, 0x02014b50);
		o.write_shift(2, 0);
		o.write_shift(2, 20);
		o.write_shift(2, flags);
		o.write_shift(2, method);
		o.write_shift(4, 0); /* TODO: last mod file time/date */
		o.write_shift(-4, crcs[fcnt]);

		o.write_shift(4, outbuf.length);
		o.write_shift(4, /*::(*/fi.content/*::||[])*/.length);
		o.write_shift(2, namebuf.length);
		o.write_shift(2, 0);
		o.write_shift(2, 0);
		o.write_shift(2, 0);
		o.write_shift(2, 0);
		o.write_shift(4, 0);
		o.write_shift(4, start);

		sz_cd += o.l;
		cdirs.push(o);
		sz_cd += namebuf.length;
		cdirs.push(namebuf);
		++fcnt;
	}

	/* end of central directory */
	o = new_buf(22);
	o.write_shift(4, 0x06054b50);
	o.write_shift(2, 0);
	o.write_shift(2, 0);
	o.write_shift(2, fcnt);
	o.write_shift(2, fcnt);
	o.write_shift(4, sz_cd);
	o.write_shift(4, start_cd);
	o.write_shift(2, 0);

	return bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));
}
var ContentTypeMap = ({
	"htm": "text/html",
	"xml": "text/xml",

	"gif": "image/gif",
	"jpg": "image/jpeg",
	"png": "image/png",

	"mso": "application/x-mso",
	"thmx": "application/vnd.ms-officetheme",
	"sh33tj5": "application/octet-stream"
}/*:any*/);

function get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {
	if(fi.ctype) return fi.ctype;

	var ext = fi.name || "", m = ext.match(/\.([^\.]+)$/);
	if(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];

	if(fp) {
		m = (ext = fp).match(/[\.\\]([^\.\\])+$/);
		if(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];
	}

	return "application/octet-stream";
}

/* 76 character chunks TODO: intertwine encoding */
function write_base64_76(bstr/*:string*/)/*:string*/ {
	var data = Base64_encode(bstr);
	var o = [];
	for(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));
	return o.join("\r\n") + "\r\n";
}

/*
Rules for QP:
	- escape =## applies for all non-display characters and literal "="
	- space or tab at end of line must be encoded
	- \r\n newlines can be preserved, but bare \r and \n must be escaped
	- lines must not exceed 76 characters, use soft breaks =\r\n

TODO: Some files from word appear to write line extensions with bare equals:

```
<table class=3DMsoTableGrid border=3D1 cellspacing=3D0 cellpadding=3D0 width=
="70%"
```
*/
function write_quoted_printable(text/*:string*/)/*:string*/ {
	var encoded = text.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7E-\xFF=]/g, function(c) {
		var w = c.charCodeAt(0).toString(16).toUpperCase();
		return "=" + (w.length == 1 ? "0" + w : w);
	});

	encoded = encoded.replace(/ $/mg, "=20").replace(/\t$/mg, "=09");

	if(encoded.charAt(0) == "\n") encoded = "=0D" + encoded.slice(1);
	encoded = encoded.replace(/\r(?!\n)/mg, "=0D").replace(/\n\n/mg, "\n=0A").replace(/([^\r\n])\n/mg, "$1=0A");

	var o/*:Array<string>*/ = [], split = encoded.split("\r\n");
	for(var si = 0; si < split.length; ++si) {
		var str = split[si];
		if(str.length == 0) { o.push(""); continue; }
		for(var i = 0; i < str.length;) {
			var end = 76;
			var tmp = str.slice(i, i + end);
			if(tmp.charAt(end - 1) == "=") end --;
			else if(tmp.charAt(end - 2) == "=") end -= 2;
			else if(tmp.charAt(end - 3) == "=") end -= 3;
			tmp = str.slice(i, i + end);
			i += end;
			if(i < str.length) tmp += "=";
			o.push(tmp);
		}
	}

	return o.join("\r\n");
}
function parse_quoted_printable(data/*:Array<string>*/)/*:RawBytes*/ {
	var o = [];

	/* unify long lines */
	for(var di = 0; di < data.length; ++di) {
		var line = data[di];
		while(di <= data.length && line.charAt(line.length - 1) == "=") line = line.slice(0, line.length - 1) + data[++di];
		o.push(line);
	}

	/* decode */
	for(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });
	return s2a(o.join("\r\n"));
}


function parse_mime(cfb/*:CFBContainer*/, data/*:Array<string>*/, root/*:string*/)/*:void*/ {
	var fname = "", cte = "", ctype = "", fdata;
	var di = 0;
	for(;di < 10; ++di) {
		var line = data[di];
		if(!line || line.match(/^\s*$/)) break;
		var m = line.match(/^([^:]*?):\s*([^\s].*)$/);
		if(m) switch(m[1].toLowerCase()) {
			case "content-location": fname = m[2].trim(); break;
			case "content-type": ctype = m[2].trim(); break;
			case "content-transfer-encoding": cte = m[2].trim(); break;
		}
	}
	++di;
	switch(cte.toLowerCase()) {
		case 'base64': fdata = s2a(Base64_decode(data.slice(di).join(""))); break;
		case 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;
		default: throw new Error("Unsupported Content-Transfer-Encoding " + cte);
	}
	var file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});
	if(ctype) file.ctype = ctype;
}

function parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {
	if(a2s(file.slice(0,13)).toLowerCase() != "mime-version:") throw new Error("Unsupported MAD header");
	var root = (options && options.root || "");
	// $FlowIgnore
	var data = (has_buf && Buffer.isBuffer(file) ? file.toString("binary") : a2s(file)).split("\r\n");
	var di = 0, row = "";

	/* if root is not specified, scan for the common prefix */
	for(di = 0; di < data.length; ++di) {
		row = data[di];
		if(!/^Content-Location:/i.test(row)) continue;
		row = row.slice(row.indexOf("file"));
		if(!root) root = row.slice(0, row.lastIndexOf("/") + 1);
		if(row.slice(0, root.length) == root) continue;
		while(root.length > 0) {
			root = root.slice(0, root.length - 1);
			root = root.slice(0, root.lastIndexOf("/") + 1);
			if(row.slice(0,root.length) == root) break;
		}
	}

	var mboundary = (data[1] || "").match(/boundary="(.*?)"/);
	if(!mboundary) throw new Error("MAD cannot find boundary");
	var boundary = "--" + (mboundary[1] || "");

	var FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];
	var o = {
		FileIndex: FileIndex,
		FullPaths: FullPaths
	};
	init_cfb(o);
	var start_di, fcnt = 0;
	for(di = 0; di < data.length; ++di) {
		var line = data[di];
		if(line !== boundary && line !== boundary + "--") continue;
		if(fcnt++) parse_mime(o, data.slice(start_di, di), root);
		start_di = di;
	}
	return o;
}

function write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {
	var opts = options || {};
	var boundary = opts.boundary || "SheetJS";
	boundary = '------=' + boundary;

	var out = [
		'MIME-Version: 1.0',
		'Content-Type: multipart/related; boundary="' + boundary.slice(2) + '"',
		'',
		'',
		''
	];

	var root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];
	for(var i = 1; i < cfb.FullPaths.length; ++i) {
		fp = cfb.FullPaths[i].slice(root.length);
		fi = cfb.FileIndex[i];
		if(!fi.size || !fi.content || fp == "\u0001Sh33tJ5") continue;

		/* Normalize filename */
		fp = fp.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7E-\xFF]/g, function(c) {
			return "_x" + c.charCodeAt(0).toString(16) + "_";
		}).replace(/[\u0080-\uFFFF]/g, function(u) {
			return "_u" + u.charCodeAt(0).toString(16) + "_";
		});

		/* Extract content as binary string */
		var ca = fi.content;
		// $FlowIgnore
		var cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString("binary") : a2s(ca);

		/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */
		var dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;
		for(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;
		var qp = dispcnt >= L * 4 / 5;

		out.push(boundary);
		out.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);
		out.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));
		out.push('Content-Type: ' + get_content_type(fi, fp));
		out.push('');

		out.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));
	}
	out.push(boundary + '--\r\n');
	return out.join("\r\n");
}
function cfb_new(opts/*:?any*/)/*:CFBContainer*/ {
	var o/*:CFBContainer*/ = ({}/*:any*/);
	init_cfb(o, opts);
	return o;
}

function cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {
	var unsafe = opts && opts.unsafe;
	if(!unsafe) init_cfb(cfb);
	var file = !unsafe && CFB.find(cfb, name);
	if(!file) {
		var fpath/*:string*/ = cfb.FullPaths[0];
		if(name.slice(0, fpath.length) == fpath) fpath = name;
		else {
			if(fpath.slice(-1) != "/") fpath += "/";
			fpath = (fpath + name).replace("//","/");
		}
		file = ({name: filename(name), type: 2}/*:any*/);
		cfb.FileIndex.push(file);
		cfb.FullPaths.push(fpath);
		if(!unsafe) CFB.utils.cfb_gc(cfb);
	}
	/*:: if(!file) throw new Error("unreachable"); */
	file.content = (content/*:any*/);
	file.size = content ? content.length : 0;
	if(opts) {
		if(opts.CLSID) file.clsid = opts.CLSID;
		if(opts.mt) file.mt = opts.mt;
		if(opts.ct) file.ct = opts.ct;
	}
	return file;
}

function cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {
	init_cfb(cfb);
	var file = CFB.find(cfb, name);
	if(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {
		cfb.FileIndex.splice(j, 1);
		cfb.FullPaths.splice(j, 1);
		return true;
	}
	return false;
}

function cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {
	init_cfb(cfb);
	var file = CFB.find(cfb, old_name);
	if(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {
		cfb.FileIndex[j].name = filename(new_name);
		cfb.FullPaths[j] = new_name;
		return true;
	}
	return false;
}

function cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }

exports.find = find;
exports.read = read;
exports.parse = parse;
exports.write = write;
exports.writeFile = write_file;
exports.utils = {
	cfb_new: cfb_new,
	cfb_add: cfb_add,
	cfb_del: cfb_del,
	cfb_mov: cfb_mov,
	cfb_gc: cfb_gc,
	ReadShift: ReadShift,
	CheckField: CheckField,
	prep_blob: prep_blob,
	bconcat: bconcat,
	use_zlib: use_zlib,
	_deflateRaw: _deflate,
	_inflateRaw: _inflate,
	consts: consts
};

return exports;
})();

var _fs;
function set_fs(fs) { _fs = fs; }

/* normalize data for blob ctor */
function blobify(data) {
	if(typeof data === "string") return s2ab(data);
	if(Array.isArray(data)) return a2u(data);
	return data;
}
/* write or download file */
function write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {
	/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */
	if(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);
	if(typeof Deno !== 'undefined') {
		/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */
		if(enc && typeof payload == "string") switch(enc) {
			case "utf8": payload = new TextEncoder(enc).encode(payload); break;
			case "binary": payload = s2ab(payload); break;
			/* TODO: binary equivalent */
			default: throw new Error("Unsupported encoding " + enc);
		}
		return Deno.writeFileSync(fname, payload);
	}
	var data = (enc == "utf8") ? utf8write(payload) : payload;
	/*:: declare var IE_SaveFile: any; */
	if(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);
	if(typeof Blob !== 'undefined') {
		var blob = new Blob([blobify(data)], {type:"application/octet-stream"});
		/*:: declare var navigator: any; */
		if(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);
		/*:: declare var saveAs: any; */
		if(typeof saveAs !== 'undefined') return saveAs(blob, fname);
		if(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {
			var url = URL.createObjectURL(blob);
			/*:: declare var chrome: any; */
			if(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == "function") {
				if(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);
				return chrome.downloads.download({ url: url, filename: fname, saveAs: true });
			}
			var a = document.createElement("a");
			if(a.download != null) {
				/*:: if(document.body == null) throw new Error("unreachable"); */
				a.download = fname; a.href = url; document.body.appendChild(a); a.click();
				/*:: if(document.body == null) throw new Error("unreachable"); */ document.body.removeChild(a);
				if(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);
				return url;
			}
		} else if(typeof URL !== 'undefined' && !URL.createObjectURL && typeof chrome === 'object') {
			/* manifest v3 extensions -- no URL.createObjectURL */
			var b64 = "data:application/octet-stream;base64," + Base64_encode_arr(new Uint8Array(blobify(data)));
			return chrome.downloads.download({ url: b64, filename: fname, saveAs: true });
		}
	}
	// $FlowIgnore
	if(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript
		// $FlowIgnore
		var out = File(fname); out.open("w"); out.encoding = "binary";
		if(Array.isArray(payload)) payload = a2s(payload);
		out.write(payload); out.close(); return payload;
	} catch(e) { if(!e.message || e.message.indexOf("onstruct") == -1) throw e; }
	throw new Error("cannot save file " + fname);
}

/* read binary data from file */
function read_binary(path/*:string*/) {
	if(typeof _fs !== 'undefined') return _fs.readFileSync(path);
	if(typeof Deno !== 'undefined') return Deno.readFileSync(path);
	// $FlowIgnore
	if(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript
		// $FlowIgnore
		var infile = File(path); infile.open("r"); infile.encoding = "binary";
		var data = infile.read(); infile.close();
		return data;
	} catch(e) { if(!e.message || e.message.indexOf("onstruct") == -1) throw e; }
	throw new Error("Cannot access file " + path);
}
function keys(o/*:any*/)/*:Array<any>*/ {
	var ks = Object.keys(o), o2 = [];
	for(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);
	return o2;
}

function evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {
	var o = ([]/*:any*/), K = keys(obj);
	for(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];
	return o;
}

function evert(obj/*:any*/)/*:EvertType*/ {
	var o = ([]/*:any*/), K = keys(obj);
	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];
	return o;
}

function evert_num(obj/*:any*/)/*:EvertNumType*/ {
	var o = ([]/*:any*/), K = keys(obj);
	for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);
	return o;
}

function evert_arr(obj/*:any*/)/*:EvertArrType*/ {
	var o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);
	for(var i = 0; i !== K.length; ++i) {
		if(o[obj[K[i]]] == null) o[obj[K[i]]] = [];
		o[obj[K[i]]].push(K[i]);
	}
	return o;
}

var dnthresh  = /*#__PURE__*/Date.UTC(1899, 11, 30, 0, 0, 0); // -2209161600000
var dnthresh1 = /*#__PURE__*/Date.UTC(1899, 11, 31, 0, 0, 0); // -2209075200000
var dnthresh2 = /*#__PURE__*/Date.UTC(1904, 0, 1, 0, 0, 0); // -2209075200000
function datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {
	var epoch = /*#__PURE__*/v.getTime();
	var res = (epoch - dnthresh) / (24 * 60 * 60 * 1000);
	if(date1904) { res -= 1462; return res < -1402 ? res - 1 : res; }
	return res < 60 ? res - 1 : res;
}
function numdate(v/*:number*/)/*:Date|number*/ {
	if(v >= 60 && v < 61) return v;
	var out = new Date();
	out.setTime((v>60 ? v : (v+1)) * 24 * 60 * 60 * 1000 + dnthresh);
	return out;
}

/* ISO 8601 Duration */
function parse_isodur(s) {
	var sec = 0, mt = 0, time = false;
	var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);
	if(!m) throw new Error("|" + s + "| is not an ISO8601 Duration");
	for(var i = 1; i != m.length; ++i) {
		if(!m[i]) continue;
		mt = 1;
		if(i > 3) time = true;
		switch(m[i].slice(m[i].length-1)) {
			case 'Y':
				throw new Error("Unsupported ISO Duration Field: " + m[i].slice(m[i].length-1));
			case 'D': mt *= 24;
				/* falls through */
			case 'H': mt *= 60;
				/* falls through */
			case 'M':
				if(!time) throw new Error("Unsupported ISO Duration Field: M");
				else mt *= 60;
				/* falls through */
			case 'S': break;
		}
		sec += mt * parseInt(m[i], 10);
	}
	return sec;
}

/* Blame https://bugs.chromium.org/p/v8/issues/detail?id=7863 for the regexide */
var pdre1 = /^(\d+):(\d+)(:\d+)?(\.\d+)?$/; // HH:MM[:SS[.UUU]]
var pdre2 = /^(\d+)-(\d+)-(\d+)$/; // YYYY-mm-dd
var pdre3 = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/; // YYYY-mm-dd(T or space)HH:MM[:SS[.UUU]], sans "Z"
/* parses a date string as a UTC date */
function parseDate(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {
	if(str instanceof Date) return str;
	var m = str.match(pdre1);
	if(m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10)*60 + parseInt(m[2], 10))*60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0))*1000 + (m[4] ? parseInt((m[4]+"000").slice(1,4), 10) : 0));
	m = str.match(pdre2);
	if(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], 0, 0, 0, 0));
	/* TODO: 1900-02-29T00:00:00.000 should return a flag to treat as a date code (affects xlml) */
	m = str.match(pdre3);
	if(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], +m[4], +m[5], ((m[6] && parseInt(m[6].slice(1), 10))|| 0), ((m[7] && parseInt((m[7] + "0000").slice(1,4), 10))||0)));
	var d = new Date(str);
	return d;
}

function cc2str(arr/*:Array<number>*/, debomit)/*:string*/ {
	if(has_buf && Buffer.isBuffer(arr)) {
		if(debomit && buf_utf16le) {
			// TODO: temporary patch
			if(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString("utf16le"));
			if(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString("binary")));
		}
		return arr.toString("binary");
	}

	if(typeof TextDecoder !== "undefined") try {
		if(debomit) {
			if(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder("utf-16le").decode(arr.slice(2)));
			if(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder("utf-16be").decode(arr.slice(2)));
		}
		var rev = {
			"\u20ac": "\x80", "\u201a": "\x82", "\u0192": "\x83", "\u201e": "\x84",
			"\u2026": "\x85", "\u2020": "\x86", "\u2021": "\x87", "\u02c6": "\x88",
			"\u2030": "\x89", "\u0160": "\x8a", "\u2039": "\x8b", "\u0152": "\x8c",
			"\u017d": "\x8e", "\u2018": "\x91", "\u2019": "\x92", "\u201c": "\x93",
			"\u201d": "\x94", "\u2022": "\x95", "\u2013": "\x96", "\u2014": "\x97",
			"\u02dc": "\x98", "\u2122": "\x99", "\u0161": "\x9a", "\u203a": "\x9b",
			"\u0153": "\x9c", "\u017e": "\x9e", "\u0178": "\x9f"
		};
		if(Array.isArray(arr)) arr = new Uint8Array(arr);
		return new TextDecoder("latin1").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });
	} catch(e) {}

	var o = [], i = 0;
	// this cascade is for the browsers and runtimes of antiquity (and for modern runtimes that lack TextEncoder)
	try {
		for(i = 0; i < arr.length - 65536; i+=65536) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 65536)));
		o.push(String.fromCharCode.apply(0, arr.slice(i)));
	} catch(e) { try {
			for(; i < arr.length - 16384; i+=16384) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 16384)));
			o.push(String.fromCharCode.apply(0, arr.slice(i)));
		} catch(e) {
			for(; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));
		}
	}
	return o.join("");
}

function dup(o/*:any*/)/*:any*/ {
	if(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));
	if(typeof o != 'object' || o == null) return o;
	if(o instanceof Date) return new Date(o.getTime());
	var out = {};
	for(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);
	return out;
}

function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length < l) o+=c; return o; }

/* TODO: stress test */
function fuzzynum(s/*:string*/)/*:number*/ {
	var v/*:number*/ = Number(s);
	if(!isNaN(v)) return isFinite(v) ? v : NaN;
	if(!/\d/.test(s)) return v;
	var wt = 1;
	var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
	if(!isNaN(v = Number(ss))) return v / wt;
	ss = ss.replace(/[(]([^()]*)[)]/,function($$, $1) { wt = -wt; return $1;});
	if(!isNaN(v = Number(ss))) return v / wt;
	return v;
}

/* NOTE: Chrome rejects bare times like 1:23 PM */
var FDRE1 = /^(0?\d|1[0-2])(?:|:([0-5]?\d)(?:|(\.\d+)(?:|:([0-5]?\d))|:([0-5]?\d)(|\.\d+)))\s+([ap])m?$/;
var FDRE2 = /^([01]?\d|2[0-3])(?:|:([0-5]?\d)(?:|(\.\d+)(?:|:([0-5]?\d))|:([0-5]?\d)(|\.\d+)))$/;
var FDISO = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)(\.\d+)?[Z]?$/; // YYYY-mm-dd(T or space)HH:MM:SS[.UUU][Z]

/* TODO: 1904 adjustment */
var utc_append_works = new Date("6/9/69 00:00 UTC").valueOf() == -17798400000;
function fuzzytime1(M) /*:Date*/ {
	if(!M[2]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == "p" ? 12 : 0), 0, 0, 0));
	if(M[3]) {
			if(M[4]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == "p" ? 12 : 0), +M[2], +M[4], parseFloat(M[3])*1000));
			else return new Date(Date.UTC(1899,11,31,(M[7] == "p" ? 12 : 0), +M[1], +M[2], parseFloat(M[3])*1000));
	}
	else if(M[5]) return new Date(Date.UTC(1899,11,31, (+M[1]%12) + (M[7] == "p" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));
	else return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == "p" ? 12 : 0), +M[2], 0, 0));
}
function fuzzytime2(M) /*:Date*/ {
	if(!M[2]) return new Date(Date.UTC(1899,11,31,+M[1], 0, 0, 0));
	if(M[3]) {
			if(M[4]) return new Date(Date.UTC(1899,11,31,+M[1], +M[2], +M[4], parseFloat(M[3])*1000));
			else return new Date(Date.UTC(1899,11,31,0, +M[1], +M[2], parseFloat(M[3])*1000));
	}
	else if(M[5]) return new Date(Date.UTC(1899,11,31, +M[1], +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));
	else return new Date(Date.UTC(1899,11,31,+M[1], +M[2], 0, 0));
}
var lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];
function fuzzydate(s/*:string*/)/*:Date*/ {
	// See issue 2863 -- this is technically not supported in Excel but is otherwise useful
	if(FDISO.test(s)) return s.indexOf("Z") == -1 ? local_to_utc(new Date(s)) : new Date(s);
	var lower = s.toLowerCase();
	var lnos = lower.replace(/\s+/g, " ").trim();
	var M = lnos.match(FDRE1);
	if(M) return fuzzytime1(M);
	M = lnos.match(FDRE2);
	if(M) return fuzzytime2(M);
	M = lnos.match(pdre3);
	if(M) return new Date(Date.UTC(+M[1], +M[2]-1, +M[3], +M[4], +M[5], ((M[6] && parseInt(M[6].slice(1), 10))|| 0), ((M[7] && parseInt((M[7] + "0000").slice(1,4), 10))||0)));
	var o = new Date(utc_append_works && s.indexOf("UTC") == -1 ? s + " UTC": s), n = new Date(NaN);
	var y = o.getYear(), m = o.getMonth(), d = o.getDate();
	if(isNaN(d)) return n;
	if(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {
		lower = lower.replace(/[^a-z]/g,"").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,"");
		if(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;
	} else if(lower.replace(/[ap]m?/, "").match(/[a-z]/)) return n;
	if(y < 0 || y > 8099 || s.match(/[^-0-9:,\/\\\ ]/)) return n;
	return o;
}

var split_regex = /*#__PURE__*/(function() {
	var safe_split_regex = "abacaba".split(/(:?b)/i).length == 5;
	return function split_regex(str/*:string*/, re, def/*:string*/)/*:Array<string>*/ {
		if(safe_split_regex || typeof re == "string") return str.split(re);
		var p = str.split(re), o = [p[0]];
		for(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }
		return o;
	};
})();

function utc_to_local(utc) {
	return new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds(), utc.getUTCMilliseconds());
}
function local_to_utc(local) {
	return new Date(Date.UTC(local.getFullYear(), local.getMonth(), local.getDate(), local.getHours(), local.getMinutes(), local.getSeconds(), local.getMilliseconds()));
}

function remove_doctype(str) {
	var preamble = str.slice(0, 1024);
	var si = preamble.indexOf("<!DOCTYPE");
	if(si == -1) return str;
	var m = str.match(/<[\w]/);
	if(!m) return str;
	return str.slice(0, si) + str.slice(m.index);
}

/* str.match(/<!--[\s\S]*?-->/g) --> str_match_ng(str, "<!--", "-->") */
function str_match_ng(str, s, e) {
  var out = [];

  var si = str.indexOf(s);
  while(si > -1) {
    var ei = str.indexOf(e, si + s.length);
		if(ei == -1) break;

		out.push(str.slice(si, ei + e.length));
		si = str.indexOf(s, ei + e.length);
	}

  return out.length > 0 ? out : null;
}

/* str.replace(/<!--[\s\S]*?-->/g, "") --> str_remove_ng(str, "<!--", "-->") */
function str_remove_ng(str, s, e) {
  var out = [], last = 0;

  var si = str.indexOf(s);
	if(si == -1) return str;
  while(si > -1) {
		out.push(str.slice(last, si));
    var ei = str.indexOf(e, si + s.length);
		if(ei == -1) break;

		if((si = str.indexOf(s, (last = ei + e.length))) == -1) out.push(str.slice(last));
	}

  return out.join("");
}

/* str.match(/<tag\b[^>]*?>([\s\S]*?)</tag>/) --> str_match_xml(str, "tag") */
var xml_boundary = { " ": 1, "\t": 1, "\r": 1, "\n": 1, ">": 1 };
function str_match_xml(str, tag) {
	var si = str.indexOf('<' + tag), w = tag.length + 1, L = str.length;
	while(si >= 0 && si <= L - w && !xml_boundary[str.charAt(si + w)]) si = str.indexOf('<' + tag, si+1);
	if(si === -1) return null;
	var sf = str.indexOf(">", si + tag.length);
	if(sf === -1) return null;
	var et = "</" + tag + ">";
	var ei = str.indexOf(et, sf);
	if(ei == -1) return null;
	return [str.slice(si, ei + et.length), str.slice(sf + 1, ei)];
}

/* str.match(/<(?:\w+:)?tag\b[^<>]*?>([\s\S]*?)<\/(?:\w+:)?tag>/) --> str_match_xml(str, "tag") */
var str_match_xml_ns = /*#__PURE__*/(function() {
	var str_match_xml_ns_cache = {};
	return function str_match_xml_ns(str, tag) {
		var res = str_match_xml_ns_cache[tag];
		if(!res) str_match_xml_ns_cache[tag] = res = [
			new RegExp('<(?:\\w+:)?'+tag+'\\b[^<>]*>', "g"),
			new RegExp('</(?:\\w+:)?'+tag+'>', "g")
		];
		res[0].lastIndex = res[1].lastIndex = 0;
		var m = res[0].exec(str);
		if(!m) return null;
		var si = m.index;
		var sf = res[0].lastIndex;
		res[1].lastIndex = res[0].lastIndex;
		m = res[1].exec(str);
		if(!m) return null;
		var ei = m.index;
		var ef = res[1].lastIndex;
		return [str.slice(si, ef), str.slice(sf, ei)];
	};
})();

/* str.match(/<(?:\w+:)?tag\b[^<>]*?>([\s\S]*?)<\/(?:\w+:)?tag>/g) --> str_match_xml_ns_g(str, "tag") */
var str_match_xml_ns_g = /*#__PURE__*/(function() {
	var str_match_xml_ns_cache = {};
	return function str_match_xml_ns(str, tag) {
		var out = [];
		var res = str_match_xml_ns_cache[tag];
		if(!res) str_match_xml_ns_cache[tag] = res = [
			new RegExp('<(?:\\w+:)?'+tag+'\\b[^<>]*>', "g"),
			new RegExp('</(?:\\w+:)?'+tag+'>', "g")
		];
		res[0].lastIndex = res[1].lastIndex = 0;
		var m;
		while((m = res[0].exec(str))) {
			var si = m.index;
			res[1].lastIndex = res[0].lastIndex;
			m = res[1].exec(str);
			if(!m) return null;
			var ef = res[1].lastIndex;
			out.push(str.slice(si, ef));
			res[0].lastIndex = res[1].lastIndex;
		}
		return out.length == 0 ? null : out;
	};
})();
var str_remove_xml_ns_g = /*#__PURE__*/(function() {
	var str_remove_xml_ns_cache = {};
	return function str_remove_xml_ns_g(str, tag) {
		var out = [];
		var res = str_remove_xml_ns_cache[tag];
		if(!res) str_remove_xml_ns_cache[tag] = res = [
			new RegExp('<(?:\\w+:)?'+tag+'\\b[^<>]*>', "g"),
			new RegExp('</(?:\\w+:)?'+tag+'>', "g")
		];
		res[0].lastIndex = res[1].lastIndex = 0;
		var m;
		var si = 0, ef = 0;
		while((m = res[0].exec(str))) {
			si = m.index;
			out.push(str.slice(ef, si));
			ef = si;
			res[1].lastIndex = res[0].lastIndex;
			m = res[1].exec(str);
			if(!m) return null;
			ef = res[1].lastIndex;
			res[0].lastIndex = res[1].lastIndex;
		}
		out.push(str.slice(ef));
		return out.length == 0 ? "" : out.join("");
	};
})();

/* str.match(/<(?:\w+:)?tag\b[^>]*?>([\s\S]*?)<\/(?:\w+:)?tag>/gi) --> str_match_xml_ns_ig(str, "tag") */
var str_match_xml_ig = /*#__PURE__*/(function() {
	var str_match_xml_ns_cache = {};
	return function str_match_xml_ns(str, tag) {
		var out = [];
		var res = str_match_xml_ns_cache[tag];
		if(!res) str_match_xml_ns_cache[tag] = res = [
			new RegExp('<'+tag+'\\b[^<>]*>', "ig"),
			new RegExp('</'+tag+'>', "ig")
		];
		res[0].lastIndex = res[1].lastIndex = 0;
		var m;
		while((m = res[0].exec(str))) {
			var si = m.index;
			res[1].lastIndex = res[0].lastIndex;
			m = res[1].exec(str);
			if(!m) return null;
			var ef = res[1].lastIndex;
			out.push(str.slice(si, ef));
			res[0].lastIndex = res[1].lastIndex;
		}
		return out.length == 0 ? null : out;
	};
})();
function getdatastr(data)/*:?string*/ {
	if(!data) return null;
	if(data.content && data.type) return cc2str(data.content, true);
	if(data.data) return debom(data.data);
	if(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));
	if(data.asBinary) return debom(data.asBinary());
	if(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));
	return null;
}

function getdatabin(data) {
	if(!data) return null;
	if(data.data) return char_codes(data.data);
	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer();
	if(data._data && data._data.getContent) {
		var o = data._data.getContent();
		if(typeof o == "string") return char_codes(o);
		return Array.prototype.slice.call(o);
	}
	if(data.content && data.type) return data.content;
	return null;
}

function getdata(data) { return (data && data.name.slice(-4) === ".bin") ? getdatabin(data) : getdatastr(data); }

/* Part 2 Section 10.1.2 "Mapping Content Types" Names are case-insensitive */
/* OASIS does not comment on filename case sensitivity */
function safegetzipfile(zip, file/*:string*/) {
	var k = zip.FullPaths || keys(zip.files);
	var f = file.toLowerCase().replace(/[\/]/g, '\\'), g = f.replace(/\\/g,'\/');
	for(var i=0; i<k.length; ++i) {
		var n = k[i].replace(/^Root Entry[\/]/,"").toLowerCase();
		if(f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];
	}
	return null;
}

function getzipfile(zip, file/*:string*/) {
	var o = safegetzipfile(zip, file);
	if(o == null) throw new Error("Cannot find file " + file + " in zip");
	return o;
}

function getzipdata(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {
	if(!safe) return getdata(getzipfile(zip, file));
	if(!file) return null;
	try { return getzipdata(zip, file); } catch(e) { return null; }
}

function getzipstr(zip, file/*:string*/, safe/*:?boolean*/)/*:?string*/ {
	if(!safe) return getdatastr(getzipfile(zip, file));
	if(!file) return null;
	try { return getzipstr(zip, file); } catch(e) { return null; }
}

function getzipbin(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {
	if(!safe) return getdatabin(getzipfile(zip, file));
	if(!file) return null;
	try { return getzipbin(zip, file); } catch(e) { return null; }
}

function zipentries(zip) {
	var k = zip.FullPaths || keys(zip.files), o = [];
	for(var i = 0; i < k.length; ++i) if(k[i].slice(-1) != '/') o.push(k[i].replace(/^Root Entry[\/]/, ""));
	return o.sort();
}

function zip_add_file(zip, path, content) {
	if(zip.FullPaths) {
		if(Array.isArray(content) && typeof content[0] == "string") {
			content = content.join("");
		}
		if(typeof content == "string") {
			var res;
			if(has_buf) res = Buffer_from(content);
			/* TODO: investigate performance in Edge 13 */
			//else if(typeof TextEncoder !== "undefined") res = new TextEncoder().encode(content);
			else res = utf8decode(content);
			return CFB.utils.cfb_add(zip, path, res);
		}
		CFB.utils.cfb_add(zip, path, content);
	}
	else zip.file(path, content);
}

function zip_new() { return CFB.utils.cfb_new(); }

function zip_read(d, o) {
	switch(o.type) {
		case "base64": return CFB.read(d, { type: "base64" });
		case "binary": return CFB.read(d, { type: "binary" });
		case "buffer": case "array": return CFB.read(d, { type: "buffer" });
	}
	throw new Error("Unrecognized type " + o.type);
}

function resolve_path(path/*:string*/, base/*:string*/)/*:string*/ {
	if(path.charAt(0) == "/") return path.slice(1);
	var result = base.split('/');
	if(base.slice(-1) != "/") result.pop(); // folder path
	var target = path.split('/');
	while (target.length !== 0) {
		var step = target.shift();
		if (step === '..') result.pop();
		else if (step !== '.') result.push(step);
	}
	return result.join('/');
}
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
var attregexg=/\s([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
var tagregex1=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?<>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'"<>\s=]+))*\s*[\/\?]?>/mg, tagregex2 = /<[^<>]*>/g;
var tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
function parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {
	var z = ({}/*:any*/);
	var eq = 0, c = 0;
	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
	if(!skip_root) z[0] = tag.slice(0, eq);
	if(eq === tag.length) return z;
	var m = tag.match(attregexg), j=0, v="", i=0, q="", cc="", quot = 1;
	if(m) for(i = 0; i != m.length; ++i) {
		cc = m[i].slice(1);
		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
		q = cc.slice(0,c).trim();
		while(cc.charCodeAt(c+1) == 32) ++c;
		quot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;
		v = cc.slice(c+1+quot, cc.length-quot);
		for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;
		if(j===q.length) {
			if(q.indexOf("_") > 0) q = q.slice(0, q.indexOf("_")); // from ods
			z[q] = v;
			if(!skip_LC) z[q.toLowerCase()] = v;
		}
		else {
			var k = (j===5 && q.slice(0,5)==="xmlns"?"xmlns":"")+q.slice(j+1);
			if(z[k] && q.slice(j-3,j) == "ext") continue; // from ods
			z[k] = v;
			if(!skip_LC) z[k.toLowerCase()] = v;
		}
	}
	return z;
}
function parsexmltagraw(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {
	var z = ({}/*:any*/);
	var eq = 0, c = 0;
	for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
	if(!skip_root) z[0] = tag.slice(0, eq);
	if(eq === tag.length) return z;
	var m = tag.match(attregexg), j=0, v="", i=0, q="", cc="", quot = 1;
	if(m) for(i = 0; i != m.length; ++i) {
		cc = m[i].slice(1);
		for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
		q = cc.slice(0,c).trim();
		while(cc.charCodeAt(c+1) == 32) ++c;
		quot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;
		v = cc.slice(c+1+quot, cc.length-quot);
		if(q.indexOf("_") > 0) q = q.slice(0, q.indexOf("_")); // from ods
		z[q] = v;
		if(!skip_LC) z[q.toLowerCase()] = v;
	}
	return z;
}
function strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, "<$1"); }

var encodings = {
	'&quot;': '"',
	'&apos;': "'",
	'&gt;': '>',
	'&lt;': '<',
	'&amp;': '&'
};
var rencoding = /*#__PURE__*/evert(encodings);
//var rencstr = "&<>'\"".split("");

// TODO: CP remap (need to read file version to determine OS)
var unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {
	/* 22.4.2.4 bstr (Basic String) */
	var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/ig, coderegex = /_x([\da-fA-F]{4})_/ig;
	function raw_unescapexml(text/*:string*/)/*:string*/ {
		var s = text + '', i = s.indexOf("<![CDATA[");
		if(i == -1) return s.replace(encregex, function($$, $1) { return encodings[$$]||String.fromCharCode(parseInt($1,$$.indexOf("x")>-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
		var j = s.indexOf("]]>");
		return raw_unescapexml(s.slice(0, i)) + s.slice(i+9,j) + raw_unescapexml(s.slice(j+3));
	}
	return function unescapexml(text/*:string*/, xlsx/*:boolean*/) {
		var out = raw_unescapexml(text);
		return xlsx ? out.replace(/\r\n/g, "\n") : out;
	};
})();

var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f\uFFFE-\uFFFF]/g;
function escapexml(text/*:string*/)/*:string*/{
	var s = text + '';
	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).slice(-4) + "_";});
}
function escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,"_x0020_"); }

var htmlcharegex = /[\u0000-\u001f]/g;
function escapehtml(text/*:string*/)/*:string*/{
	var s = text + '';
	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\n/g, "<br/>").replace(htmlcharegex,function(s) { return "&#x" + ("000"+s.charCodeAt(0).toString(16)).slice(-4) + ";"; });
}

function escapexlml(text/*:string*/)/*:string*/{
	var s = text + '';
	return s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return "&#x" + (s.charCodeAt(0).toString(16)).toUpperCase() + ";"; });
}

/* TODO: handle codepages */
var xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {
	var entregex = /&#(\d+);/g;
	function entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }
	return function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };
})();
function xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\r\n|[\r\n])/g,"\&#10;"); }

/* note: xsd:boolean valid values: true / 1 / false / 0 */
function parsexmlbool(value/*:any*/)/*:boolean*/ {
	switch(value) {
		case 1: case true:  case '1': case 'true':  return true;
		case 0: case false: case '0': case 'false': return false;
		//default: throw new Error("Invalid xsd:boolean " + value);
	}
	return false;
}

function utf8reada(orig/*:string*/)/*:string*/ {
	var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
	while (i < orig.length) {
		c = orig.charCodeAt(i++);
		if (c < 128) { out += String.fromCharCode(c); continue; }
		d = orig.charCodeAt(i++);
		if (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }
		e = orig.charCodeAt(i++);
		if (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }
		f = orig.charCodeAt(i++);
		w = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;
		out += String.fromCharCode(0xD800 + ((w>>>10)&1023));
		out += String.fromCharCode(0xDC00 + (w&1023));
	}
	return out;
}

function utf8readb(data) {
	var out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;
	for(i = 0; i < data.length; i+=j) {
		j = 1;
		if((c=data.charCodeAt(i)) < 128) w = c;
		else if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }
		else if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }
		else { j = 4;
			w = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);
			w -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);
		}
		if(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }
		out[k++] = w%256; out[k++] = w>>>8;
	}
	return out.slice(0,k).toString('ucs2');
}

function utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }

var utf8corpus = "foo bar baz\u00e2\u0098\u0083\u00f0\u009f\u008d\u00a3";
var utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;

var utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString("binary"); } : function(orig/*:string*/)/*:string*/ {
	var out/*:Array<string>*/ = [], i = 0, c = 0, d = 0;
	while(i < orig.length) {
		c = orig.charCodeAt(i++);
		switch(true) {
			case c < 128: out.push(String.fromCharCode(c)); break;
			case c < 2048:
				out.push(String.fromCharCode(192 + (c >> 6)));
				out.push(String.fromCharCode(128 + (c & 63)));
				break;
			case c >= 55296 && c < 57344:
				c -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);
				out.push(String.fromCharCode(240 + ((d >>18) & 7)));
				out.push(String.fromCharCode(144 + ((d >>12) & 63)));
				out.push(String.fromCharCode(128 + ((d >> 6) & 63)));
				out.push(String.fromCharCode(128 + (d & 63)));
				break;
			default:
				out.push(String.fromCharCode(224 + (c >> 12)));
				out.push(String.fromCharCode(128 + ((c >> 6) & 63)));
				out.push(String.fromCharCode(128 + (c & 63)));
		}
	}
	return out.join("");
};

var htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {
	var entities/*:Array<[RegExp, string]>*/ = [
		['nbsp', ' '], ['middot', '·'],
		['quot', '"'], ['apos', "'"], ['gt',   '>'], ['lt',   '<'], ['amp',  '&']
	].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', "ig"), x[1]]; });
	return function htmldecode(str/*:string*/)/*:string*/ {
		var o = str
				// Remove new lines and spaces from start of content
				.replace(/^[\t\n\r ]+/, "")
				// Remove new lines and spaces from end of content
				.replace(/(^|[^\t\n\r ])[\t\n\r ]+$/,"$1")
				// Added line which removes any white space characters after and before html tags
				.replace(/>\s+/g,">").replace(/\b\s+</g,"<")
				// Replace remaining new lines and spaces with space
				.replace(/[\t\n\r ]+/g, " ")
				// Replace <br> tags with new lines
				.replace(/<\s*[bB][rR]\s*\/?>/g,"\n")
				// Strip HTML elements
				.replace(/<[^<>]*>/g,"");
		for(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);
		return o;
	};
})();

var vtvregex = /<\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^<"'>]*)>([\s\S]*)</;
function parseVector(data/*:string*/, opts)/*:Array<{v:string,t:string}>*/ {
	var h = parsexmltag(data);

	var matches/*:Array<string>*/ = str_match_xml_ns_g(data, h.baseType)||[];
	var res/*:Array<any>*/ = [];
	if(matches.length != h.size) {
		if(opts.WTF) throw new Error("unexpected vector length " + matches.length + " != " + h.size);
		return res;
	}
	matches.forEach(function(x/*:string*/) {
		var v = x.replace(vtvregex,"").match(vtmregex);
		if(v) res.push({v:utf8read(v[2]), t:v[1]});
	});
	return res;
}

var wtregex = /(^\s|\s$|\n)/;
function writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f + '>'; }

function wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return " " + k + '="' + h[k] + '"';}).join(""); }
function writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : "") + ((g != null) ? (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '</' + f : "/") + '>';}

function write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\.\d*/,""); } catch(e) { if(t) throw e; } return ""; }

function write_vt(s, xlsx/*:?boolean*/)/*:string*/ {
	switch(typeof s) {
		case 'string':
			var o = writextag('vt:lpwstr', escapexml(s));
			if(xlsx) o = o.replace(/&quot;/g, "_x0022_");
			return o;
		case 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));
		case 'boolean': return writextag('vt:bool',s?'true':'false');
	}
	if(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));
	throw new Error("Unable to serialize " + s);
}

function xlml_normalize(d)/*:string*/ {
	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');
	if(typeof d === 'string') return d;
	/* duktape */
	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));
	throw new Error("Bad input format: expected Buffer or string");
}
/* UOS uses CJK in tags, ODS uses invalid XML */
var xlmlregex = /<([\/]?)([^\s?><!\/:"]*:|)([^\s?<>:\/"]+)(?:\s+[^<>=?"'\s]+="[^"]*?")*\s*[\/]?>/mg;

var XMLNS = ({
	CORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',
	CUST_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",
	EXT_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",
	CT: 'http://schemas.openxmlformats.org/package/2006/content-types',
	RELS: 'http://schemas.openxmlformats.org/package/2006/relationships',
	TCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',
	'dc': 'http://purl.org/dc/elements/1.1/',
	'dcterms': 'http://purl.org/dc/terms/',
	'dcmitype': 'http://purl.org/dc/dcmitype/',
	'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',
	'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
	'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',
	'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',
	'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
	'xsd': 'http://www.w3.org/2001/XMLSchema'
}/*:any*/);

var XMLNS_main = [
	'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
	'http://purl.oclc.org/ooxml/spreadsheetml/main',
	'http://schemas.microsoft.com/office/excel/2006/main',
	'http://schemas.microsoft.com/office/excel/2006/2'
];

var XLMLNS = ({
	'o':    'urn:schemas-microsoft-com:office:office',
	'x':    'urn:schemas-microsoft-com:office:excel',
	'ss':   'urn:schemas-microsoft-com:office:spreadsheet',
	'dt':   'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',
	'mv':   'http://macVmlSchemaUri',
	'v':    'urn:schemas-microsoft-com:vml',
	'html': 'http://www.w3.org/TR/REC-html40'
}/*:any*/);
function read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {
	var s = 1 - 2 * (b[idx + 7] >>> 7);
	var e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);
	var m = (b[idx+6]&0x0f);
	for(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];
	if(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;
	if(e == 0) e = -1022;
	else { e -= 1023; m += Math.pow(2,52); }
	return s * Math.pow(2, e - 52) * m;
}

function write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {
	var bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;
	var av = bs ? (-v) : v;
	if(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }
	else if(av == 0) e = m = 0;
	else {
		e = Math.floor(Math.log(av) / Math.LN2);
		m = av * Math.pow(2, 52 - e);
		if((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }
		else { m -= Math.pow(2,52); e+=1023; }
	}
	for(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;
	b[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);
	b[idx + 7] = (e >> 4) | bs;
}

var ___toBuffer = function(bufs/*:Array<Array<RawBytes> >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
var __toBuffer = has_buf ? function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;

var ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
var __utf16le = has_buf ? function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; } : ___utf16le;

var ___hexlify = function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<s+l; ++i) ss.push(("0" + b[i].toString(16)).slice(-2)); return ss.join(""); };
var __hexlify = has_buf ? function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { return Buffer.isBuffer(b)/*:: && b instanceof Buffer*/ ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); } : ___hexlify;

var ___utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
var __utf8 = has_buf ? function utf8_b(b/*:RawBytes|CFBlob*/, s/*:number*/, e/*:number*/) { return (Buffer.isBuffer(b)/*:: && (b instanceof Buffer)*/) ? b.toString('utf8',s,e) : ___utf8(b,s,e); } : ___utf8;

var ___lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
var __lpstr = ___lpstr;

var ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
var __cpstr = ___cpstr;

var ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
var __lpwstr = ___lpwstr;

var ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : "";};
var __lpp4 = ___lpp4;

var ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : "";};
var __8lpp4 = ___8lpp4;

var ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};
var __double = ___double;

var is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== "undefined" && a instanceof Uint8Array); };

if(has_buf/*:: && typeof Buffer !== 'undefined'*/) {
	__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";};
	__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";};
	__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
	__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};
	__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};
	__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };
	is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== "undefined" && a instanceof Uint8Array); };
}

/* from js-xls */
function cpdoit() {
	__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };
	__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };
	__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : "";};
	__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";};
	__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : "";};
	__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : "";};
	__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : "";};
}
if(typeof $cptable !== 'undefined') cpdoit();

var __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };
var __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };
var __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };
var __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
var __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };
var __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };

function ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {
	var o="", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;
	switch(t) {
		case 'dbcs':
			loc = this.l;
			if(has_buf && Buffer.isBuffer(this)  && buf_utf16le) o = this.slice(this.l, this.l+2*size).toString("utf16le");
			else for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }
			size *= 2;
			break;

		case 'utf8': o = __utf8(this, this.l, this.l + size); break;
		case 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;

		case 'wstr':
			if(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));
			else return ReadShift.call(this, size, 'dbcs');
			size = 2 * size; break;

		/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */
		case 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;
		case 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;
		/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */
		case 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;
		/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */
		case 'lpp4': size = 4 +  __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;
		/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */
		case '8lpp4': size = 4 +  __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;

		case 'cstr': size = 0; o = "";
			while((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));
			o = oo.join(""); break;
		case '_wstr': size = 0; o = "";
			while((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}
			size+=2; o = oo.join(""); break;

		/* sbcs and dbcs support continue records in the SST way TODO codepages */
		case 'dbcs-cont': o = ""; loc = this.l;
			for(i = 0; i < size; ++i) {
				if(this.lens && this.lens.indexOf(loc) !== -1) {
					w = __readUInt8(this, loc);
					this.l = loc + 1;
					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
					return oo.join("") + vv;
				}
				oo.push(_getchar(__readUInt16LE(this, loc)));
				loc+=2;
			} o = oo.join(""); size *= 2; break;

		case 'cpstr':
			if(typeof $cptable !== 'undefined') {
				o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));
				break;
			}
		/* falls through */
		case 'sbcs-cont': o = ""; loc = this.l;
			for(i = 0; i != size; ++i) {
				if(this.lens && this.lens.indexOf(loc) !== -1) {
					w = __readUInt8(this, loc);
					this.l = loc + 1;
					vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');
					return oo.join("") + vv;
				}
				oo.push(_getchar(__readUInt8(this, loc)));
				loc+=1;
			} o = oo.join(""); break;

		default:
	switch(size) {
		case 1: oI = __readUInt8(this, this.l); this.l++; return oI;
		case 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;
		case 4: case -4:
			if(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }
			else { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;
		case 8: case -8:
			if(t === 'f') {
				if(size == 8) oR = __double(this, this.l);
				else oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);
				this.l += 8; return oR;
			} else size = 8;
		/* falls through */
		case 16: o = __hexlify(this, this.l, size); break;
	}}
	this.l+=size; return o;
}

var __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };
var __writeInt32LE  = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };
var __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };

function WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {
	var size = 0, i = 0;
	if(f === 'dbcs') {
		/*:: if(typeof val !== 'string') throw new Error("unreachable"); */
		for(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);
		size = 2 * val.length;
	} else if(f === 'sbcs' || f == 'cpstr') {
		if(typeof $cptable !== 'undefined' && current_ansi == 874) {
			/* TODO: use tables directly, don't encode */
			/*:: if(typeof val !== "string") throw new Error("unreachable"); */
			for(i = 0; i != val.length; ++i) {
				var cpp = $cptable.utils.encode(current_ansi, val.charAt(i));
				this[this.l + i] = cpp[0];
			}
			size = val.length;
		} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {
			cpp = $cptable.utils.encode(current_codepage, val);
			/* replace null bytes with _ when relevant */
      if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;
      if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;
			for(i = 0; i < cpp.length; ++i) this[this.l + i] = cpp[i];
			size = cpp.length;
		} else {
			/*:: if(typeof val !== 'string') throw new Error("unreachable"); */
			val = val.replace(/[^\x00-\x7F]/g, "_");
			/*:: if(typeof val !== 'string') throw new Error("unreachable"); */
			for(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);
			size = val.length;
		}
	} else if(f === 'hex') {
		for(; i < t; ++i) {
			/*:: if(typeof val !== "string") throw new Error("unreachable"); */
			this[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);
		} return this;
	} else if(f === 'utf16le') {
			/*:: if(typeof val !== "string") throw new Error("unreachable"); */
			var end/*:number*/ = Math.min(this.l + t, this.length);
			for(i = 0; i < Math.min(val.length, t); ++i) {
				var cc = val.charCodeAt(i);
				this[this.l++] = (cc & 0xff);
				this[this.l++] = (cc >> 8);
			}
			while(this.l < end) this[this.l++] = 0;
			return this;
	} else /*:: if(typeof val === 'number') */ switch(t) {
		case  1: size = 1; this[this.l] = val&0xFF; break;
		case  2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;
		case  3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;
		case  4: size = 4; __writeUInt32LE(this, val, this.l); break;
		case  8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }
		/* falls through */
		case 16: break;
		case -4: size = 4; __writeInt32LE(this, val, this.l); break;
	}
	this.l += size; return this;
}

function CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {
	var m = __hexlify(this,this.l,hexstr.length>>1);
	if(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);
	this.l += hexstr.length>>1;
}

function prep_blob(blob, pos/*:number*/)/*:void*/ {
	blob.l = pos;
	blob.read_shift = /*::(*/ReadShift/*:: :any)*/;
	blob.chk = CheckField;
	blob.write_shift = WriteShift;
}

function parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }

function new_buf(sz/*:number*/)/*:Block*/ {
	var o = new_raw_buf(sz);
	prep_blob(o, 0);
	return o;
}

/* [MS-XLSB] 2.1.4 Record */
function recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {
	if(!data) return;
	var tmpbyte, cntbyte, length;
	prep_blob(data, data.l || 0);
	var L = data.length, RT = 0, tgt = 0;
	while(data.l < L) {
		RT = data.read_shift(1);
		if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);
		var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];
		tmpbyte = data.read_shift(1);
		length = tmpbyte & 0x7F;
		for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);
		tgt = data.l + length;
		var d = R.f && R.f(data, length, opts);
		data.l = tgt;
		if(cb(d, R, RT)) return;
	}
}

/* control buffer usage for fixed-length buffers */
function buf_array()/*:BufArray*/ {
	var bufs/*:Array<Block>*/ = [], blksz = has_buf ? 16384 : 2048;
	var has_buf_copy = has_buf && (typeof new_buf(blksz).copy == "function");
	var newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {
		var o/*:Block*/ = (new_buf(sz)/*:any*/);
		prep_blob(o, 0);
		return o;
	};

	var curbuf/*:Block*/ = newblk(blksz);

	var endbuf = function ba_endbuf() {
		if(!curbuf) return;
		// workaround for new Buffer(3).slice(0,0) bug in bun 0.1.3
		if(curbuf.l) {
			if(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }
			if(curbuf.length > 0) bufs.push(curbuf);
		}
		curbuf = null;
	};

	var next = function ba_next(sz/*:number*/)/*:Block*/ {
		if(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;
		endbuf();
		return (curbuf = newblk(Math.max(sz+1, blksz)));
	};

	var end = function ba_end() {
		endbuf();
		return bconcat(bufs);
	};
	var end2 = function() {
		endbuf(); return bufs;
	};

	var push = function ba_push(buf) {
		endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz);
	};

	return ({ next:next, push:push, end:end, _bufs:bufs, end2:end2 }/*:any*/);
}

function write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {
	var t/*:number*/ = +type, l;
	if(isNaN(t)) return; // TODO: throw something here?
	if(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;
	l = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;
	if(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;
	var o = ba.next(l);
	if(t <= 0x7F) o.write_shift(1, t);
	else {
		o.write_shift(1, (t & 0x7F) + 0x80);
		o.write_shift(1, (t >> 7));
	}
	for(var i = 0; i != 4; ++i) {
		if(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }
		else { o.write_shift(1, length); break; }
	}
	if(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);
}
/* XLS ranges enforced */
function shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {
	var out = dup(cell);
	if(tgt.s) {
		if(out.cRel) out.c += tgt.s.c;
		if(out.rRel) out.r += tgt.s.r;
	} else {
		if(out.cRel) out.c += tgt.c;
		if(out.rRel) out.r += tgt.r;
	}
	if(!opts || opts.biff < 12) {
		while(out.c >= 0x100) out.c -= 0x100;
		while(out.r >= 0x10000) out.r -= 0x10000;
	}
	return out;
}

function shift_range_xls(cell, range, opts) {
	var out = dup(cell);
	out.s = shift_cell_xls(out.s, range.s, opts);
	out.e = shift_cell_xls(out.e, range.s, opts);
	return out;
}

function encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {
	if(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }
	if(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
	var s = encode_cell(c);
	if(!c.cRel && c.cRel != null) s = fix_col(s);
	if(!c.rRel && c.rRel != null) s = fix_row(s);
	return s;
}

function encode_range_xls(r, opts)/*:string*/ {
	if(r.s.r == 0 && !r.s.rRel) {
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
			return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
		}
	}
	if(r.s.c == 0 && !r.s.cRel) {
		if(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {
			return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
		}
	}
	return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
}
function decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }
function encode_row(row/*:number*/)/*:string*/ { return "" + (row + 1); }
function fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2"); }
function unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\$(\d+)$/,"$1"); }

function decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }
function encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error("invalid column " + col); var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }
function fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,"$$$1"); }
function unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\$([A-Z])/,"$1"); }

function split_cell(cstr/*:string*/)/*:Array<string>*/ { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); }
function decode_cell(cstr/*:string*/)/*:CellAddress*/ {
	var R = 0, C = 0;
	for(var i = 0; i < cstr.length; ++i) {
		var cc = cstr.charCodeAt(i);
		if(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);
		else if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);
	}
	return { c: C - 1, r:R - 1 };
}
function encode_cell(cell/*:CellAddress*/)/*:string*/ {
	var col = cell.c + 1;
	var s="";
	for(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;
	return s + (cell.r + 1);
}
function decode_range(range/*:string*/)/*:Range*/ {
	var idx = range.indexOf(":");
	if(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };
	return { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };
}
/*# if only one arg, it is assumed to be a Range.  If 2 args, both are cell addresses */
function encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {
	if(typeof ce === 'undefined' || typeof ce === 'number') {
/*:: if(!(cs instanceof Range)) throw "unreachable"; */
		return encode_range(cs.s, cs.e);
	}
/*:: if((cs instanceof Range)) throw "unreachable"; */
	if(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));
	if(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));
/*:: if(typeof cs !== 'string') throw "unreachable"; */
/*:: if(typeof ce !== 'string') throw "unreachable"; */
	return cs == ce ? cs : cs + ":" + ce;
}
function fix_range(a1/*:string*/)/*:string*/ {
	var s = decode_range(a1);
	return "$" + encode_col(s.s.c) + "$" + encode_row(s.s.r) + ":$" + encode_col(s.e.c) + "$" + encode_row(s.e.r);
}

// List of invalid characters needs to be tested further
function formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {
	if(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error("empty sheet name");
	if (/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(sname)) return "'" + sname.replace(/'/g, "''") + "'";
	return sname;
}

function safe_decode_range(range/*:string*/)/*:Range*/ {
	var o = {s:{c:0,r:0},e:{c:0,r:0}};
	var idx = 0, i = 0, cc = 0;
	var len = range.length;
	for(idx = 0; i < len; ++i) {
		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
		idx = 26*idx + cc;
	}
	o.s.c = --idx;

	for(idx = 0; i < len; ++i) {
		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
		idx = 10*idx + cc;
	}
	o.s.r = --idx;

	if(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }
	++i;

	for(idx = 0; i != len; ++i) {
		if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
		idx = 26*idx + cc;
	}
	o.e.c = --idx;

	for(idx = 0; i != len; ++i) {
		if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
		idx = 10*idx + cc;
	}
	o.e.r = --idx;
	return o;
}

function safe_format_cell(cell/*:Cell*/, v/*:any*/) {
	var q = (cell.t == 'd' && v instanceof Date);
	if(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }
	try { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0),  q ? datenum(v) : v)); } catch(e) { return ''+v; }
}

function format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {
	if(cell == null || cell.t == null || cell.t == 'z') return "";
	if(cell.w !== undefined) return cell.w;
	if(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;
	if(cell.t == "e") return BErr[cell.v] || cell.v;
	if(v == undefined) return safe_format_cell(cell, cell.v);
	return safe_format_cell(cell, v);
}

function sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {
	var n = opts && opts.sheet ? opts.sheet : "Sheet1";
	var sheets = {}; sheets[n] = sheet;
	return { SheetNames: [n], Sheets: sheets };
}

function sheet_new(opts) {
	var out = {};
	var o = opts || {};
	if(o.dense) out["!data"] = [];
	return out;
}

function sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {
	var o = opts || {};
	var dense = _ws ? (_ws["!data"] != null) : o.dense;
	if(DENSE != null && dense == null) dense = DENSE;
	var ws/*:Worksheet*/ = _ws || (dense ? ({"!data": []}) : ({}/*:any*/));
	if(dense && !ws["!data"]) ws["!data"] = [];
	var _R = 0, _C = 0;
	if(ws && o.origin != null) {
		if(typeof o.origin == 'number') _R = o.origin;
		else {
			var _origin/*:CellAddress*/ = typeof o.origin == "string" ? decode_cell(o.origin) : o.origin;
			_R = _origin.r; _C = _origin.c;
		}
	}
	var range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);
	if(ws["!ref"]){
		var _range = safe_decode_range(ws['!ref']);
		range.s.c = _range.s.c;
		range.s.r = _range.s.r;
		range.e.c = Math.max(range.e.c, _range.e.c);
		range.e.r = Math.max(range.e.r, _range.e.r);
		if(_R == -1) range.e.r = _R = (ws["!ref"] ? _range.e.r + 1 : 0);
	} else {
		range.s.c = range.e.c = range.s.r = range.e.r = 0;
	}
	var row = [], seen = false;
	for(var R = 0; R != data.length; ++R) {
		if(!data[R]) continue;
		if(!Array.isArray(data[R])) throw new Error("aoa_to_sheet expects an array of arrays");
		var __R = _R + R;
		if(dense) {
			if(!ws["!data"][__R]) ws["!data"][__R] = [];
			row = ws["!data"][__R];
		}
		var data_R = data[R];
		for(var C = 0; C != data_R.length; ++C) {
			if(typeof data_R[C] === 'undefined') continue;
			var cell/*:Cell*/ = ({v: data_R[C], t:"" }/*:any*/);
			var __C = _C + C;
			if(range.s.r > __R) range.s.r = __R;
			if(range.s.c > __C) range.s.c = __C;
			if(range.e.r < __R) range.e.r = __R;
			if(range.e.c < __C) range.e.c = __C;
			seen = true;
			if(data_R[C] && typeof data_R[C] === 'object' && !Array.isArray(data_R[C]) && !(data_R[C] instanceof Date)) cell = data_R[C];
			else {
				if(Array.isArray(cell.v)) { cell.f = data_R[C][1]; cell.v = cell.v[0]; }
				if(cell.v === null) {
					if(cell.f) cell.t = 'n';
					else if(o.nullError) { cell.t = 'e'; cell.v = 0; }
					else if(!o.sheetStubs) continue;
					else cell.t = 'z';
				}
				else if(typeof cell.v === 'number') {
					if(isFinite(cell.v)) cell.t = 'n';
					else if(isNaN(cell.v)) { cell.t = 'e'; cell.v = 0x0F; /* #VALUE! */ }
					else { cell.t = 'e'; cell.v = 0x07; /*# DIV/0 */ }
				}
				else if(typeof cell.v === 'boolean') cell.t = 'b';
				else if(cell.v instanceof Date) {
					cell.z = o.dateNF || table_fmt[14];
					if(!o.UTC) cell.v = local_to_utc(cell.v);
					if(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904)); }
					else { cell.t = 'n'; cell.v = datenum(cell.v, o.date1904); cell.w = SSF_format(cell.z, cell.v); }
				}
				else cell.t = 's';
			}
			if(dense) {
				if(row[__C] && row[__C].z) cell.z = row[__C].z;
				row[__C] = cell;
			} else {
				var cell_ref = encode_col(__C) + (__R + 1)/*:any*/;
				if(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;
				ws[cell_ref] = cell;
			}
		}
	}
	if(seen && range.s.c < 10400000) ws['!ref'] = encode_range(range);
	return ws;
}
function aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }
function parse_Int32LE(data) {
	return data.read_shift(4, 'i');
}
function write_UInt32LE(x/*:number*/, o) {
	if (!o) o = new_buf(4);
	o.write_shift(4, x);
	return o;
}

/* [MS-XLSB] 2.5.168 */
function parse_XLWideString(data/*::, length*/)/*:string*/ {
	var cchCharacters = data.read_shift(4);
	return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, 'dbcs');
}
function write_XLWideString(data/*:string*/, o) {
	var _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }
	o.write_shift(4, data.length);
	if (data.length > 0) o.write_shift(0, data, 'dbcs');
	return _null ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.5.91 */
//function parse_LPWideString(data/*::, length*/)/*:string*/ {
//	var cchCharacters = data.read_shift(2);
//	return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, "utf16le");
//}

/* [MS-XLSB] 2.5.143 */
function parse_StrRun(data) {
	return { ich: data.read_shift(2), ifnt: data.read_shift(2) };
}
function write_StrRun(run, o) {
	if (!o) o = new_buf(4);
	o.write_shift(2, run.ich || 0);
	o.write_shift(2, run.ifnt || 0);
	return o;
}

/* [MS-XLSB] 2.5.121 */
function parse_RichStr(data, length/*:number*/)/*:XLString*/ {
	var start = data.l;
	var flags = data.read_shift(1);
	var str = parse_XLWideString(data);
	var rgsStrRun = [];
	var z = ({ t: str, h: str }/*:any*/);
	if ((flags & 1) !== 0) { /* fRichStr */
		/* TODO: formatted string */
		var dwSizeStrRun = data.read_shift(4);
		for (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));
		z.r = rgsStrRun;
	}
	else z.r = [{ ich: 0, ifnt: 0 }];
	//if((flags & 2) !== 0) { /* fExtStr */
	//	/* TODO: phonetic string */
	//}
	data.l = start + length;
	return z;
}
function write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {
	/* TODO: formatted string */
	var _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }
	o.write_shift(1, 0);
	write_XLWideString(str.t, o);
	return _null ? o.slice(0, o.l) : o;
}
/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */
var parse_BrtCommentText = parse_RichStr;
function write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {
	/* TODO: formatted string */
	var _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }
	o.write_shift(1, 1);
	write_XLWideString(str.t, o);
	o.write_shift(4, 1);
	write_StrRun({ ich: 0, ifnt: 0 }, o);
	return _null ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.5.9 */
function parse_XLSBCell(data)/*:any*/ {
	var col = data.read_shift(4);
	var iStyleRef = data.read_shift(2);
	iStyleRef += data.read_shift(1) << 16;
	data.l++; //var fPhShow = data.read_shift(1);
	return { c: col, iStyleRef: iStyleRef };
}
function write_XLSBCell(cell/*:any*/, o/*:?Block*/) {
	if (o == null) o = new_buf(8);
	o.write_shift(-4, cell.c);
	o.write_shift(3, cell.iStyleRef || cell.s);
	o.write_shift(1, 0); /* fPhShow */
	return o;
}

/* Short XLSB Cell does not include column */
function parse_XLSBShortCell(data)/*:any*/ {
	var iStyleRef = data.read_shift(2);
	iStyleRef += data.read_shift(1) <<16;
	data.l++; //var fPhShow = data.read_shift(1);
	return { c:-1, iStyleRef: iStyleRef };
}
function write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {
	if(o == null) o = new_buf(4);
	o.write_shift(3, cell.iStyleRef || cell.s);
	o.write_shift(1, 0); /* fPhShow */
	return o;
}

/* [MS-XLSB] 2.5.21 */
var parse_XLSBCodeName = parse_XLWideString;
var write_XLSBCodeName = write_XLWideString;

/* [MS-XLSB] 2.5.166 */
function parse_XLNullableWideString(data/*::, length*/)/*:string*/ {
	var cchCharacters = data.read_shift(4);
	return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift(cchCharacters, 'dbcs');
}
function write_XLNullableWideString(data/*:string*/, o) {
	var _null = false; if (o == null) { _null = true; o = new_buf(127); }
	o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);
	if (data.length > 0) o.write_shift(0, data, 'dbcs');
	return _null ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.5.165 */
var parse_XLNameWideString = parse_XLWideString;
//var write_XLNameWideString = write_XLWideString;

/* [MS-XLSB] 2.5.114 */
var parse_RelID = parse_XLNullableWideString;
var write_RelID = write_XLNullableWideString;


/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */
function parse_RkNumber(data)/*:number*/ {
	var b = data.slice(data.l, data.l + 4);
	var fX100 = (b[0] & 1), fInt = (b[0] & 2);
	data.l += 4;
	var RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;
	return fX100 ? (RK / 100) : RK;
}
function write_RkNumber(data/*:number*/, o) {
	if (o == null) o = new_buf(4);
	var fX100 = 0, fInt = 0, d100 = data * 100;
	if ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }
	else if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }
	if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));
	else throw new Error("unsupported RkNumber " + data); // TODO
}


/* [MS-XLSB] 2.5.117 RfX */
function parse_RfX(data /*::, length*/)/*:Range*/ {
	var cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);
	cell.s.r = data.read_shift(4);
	cell.e.r = data.read_shift(4);
	cell.s.c = data.read_shift(4);
	cell.e.c = data.read_shift(4);
	return cell;
}
function write_RfX(r/*:Range*/, o) {
	if (!o) o = new_buf(16);
	o.write_shift(4, r.s.r);
	o.write_shift(4, r.e.r);
	o.write_shift(4, r.s.c);
	o.write_shift(4, r.e.c);
	return o;
}

/* [MS-XLSB] 2.5.153 UncheckedRfX */
var parse_UncheckedRfX = parse_RfX;
var write_UncheckedRfX = write_RfX;

/* [MS-XLSB] 2.5.155 UncheckedSqRfX */
//function parse_UncheckedSqRfX(data) {
//	var cnt = data.read_shift(4);
//	var out = [];
//	for(var i = 0; i < cnt; ++i) {
//		var rng = parse_UncheckedRfX(data);
//		out.push(encode_range(rng));
//	}
//	return out.join(",");
//}
//function write_UncheckedSqRfX(sqrfx/*:string*/) {
//	var parts = sqrfx.split(/\s*,\s*/);
//	var o = new_buf(4); o.write_shift(4, parts.length);
//	var out = [o];
//	parts.forEach(function(rng) {
//		out.push(write_UncheckedRfX(safe_decode_range(rng)));
//	});
//	return bconcat(out);
//}

/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */
/* TODO: error checking, NaN and Infinity values are not valid Xnum */
function parse_Xnum(data/*::, length*/) {
	if(data.length - data.l < 8) throw "XLS Xnum Buffer underflow";
	return data.read_shift(8, 'f');
}
function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }

/* [MS-XLSB] 2.4.324 BrtColor */
function parse_BrtColor(data/*::, length*/) {
	var out = {};
	var d = data.read_shift(1);

	//var fValidRGB = d & 1;
	var xColorType = d >>> 1;

	var index = data.read_shift(1);
	var nTS = data.read_shift(2, 'i');
	var bR = data.read_shift(1);
	var bG = data.read_shift(1);
	var bB = data.read_shift(1);
	data.l++; //var bAlpha = data.read_shift(1);

	switch (xColorType) {
		case 0: out.auto = 1; break;
		case 1:
			out.index = index;
			var icv = XLSIcv[index];
			/* automatic pseudo index 81 */
			if (icv) out.rgb = rgb2Hex(icv);
			break;
		case 2:
			/* if(!fValidRGB) throw new Error("invalid"); */
			out.rgb = rgb2Hex([bR, bG, bB]);
			break;
		case 3: out.theme = index; break;
	}
	if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;

	return out;
}
function write_BrtColor(color, o) {
	if (!o) o = new_buf(8);
	if (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }
	if (color.index != null) {
		o.write_shift(1, 0x02);
		o.write_shift(1, color.index);
	} else if (color.theme != null) {
		o.write_shift(1, 0x06);
		o.write_shift(1, color.theme);
	} else {
		o.write_shift(1, 0x05);
		o.write_shift(1, 0);
	}
	var nTS = color.tint || 0;
	if (nTS > 0) nTS *= 32767;
	else if (nTS < 0) nTS *= 32768;
	o.write_shift(2, nTS);
	if (!color.rgb || color.theme != null) {
		o.write_shift(2, 0);
		o.write_shift(1, 0);
		o.write_shift(1, 0);
	} else {
		var rgb = (color.rgb || 'FFFFFF');
		if (typeof rgb == 'number') rgb = ("000000" + rgb.toString(16)).slice(-6);
		o.write_shift(1, parseInt(rgb.slice(0, 2), 16));
		o.write_shift(1, parseInt(rgb.slice(2, 4), 16));
		o.write_shift(1, parseInt(rgb.slice(4, 6), 16));
		o.write_shift(1, 0xFF);
	}
	return o;
}

/* [MS-XLSB] 2.5.52 */
function parse_FontFlags(data/*::, length, opts*/) {
	var d = data.read_shift(1);
	data.l++;
	var out = {
		fBold: d & 0x01,
		fItalic: d & 0x02,
		fUnderline: d & 0x04,
		fStrikeout: d & 0x08,
		fOutline: d & 0x10,
		fShadow: d & 0x20,
		fCondense: d & 0x40,
		fExtend: d & 0x80
	};
	return out;
}
function write_FontFlags(font, o) {
	if (!o) o = new_buf(2);
	var grbit =
		(font.italic ? 0x02 : 0) |
		(font.strike ? 0x08 : 0) |
		(font.outline ? 0x10 : 0) |
		(font.shadow ? 0x20 : 0) |
		(font.condense ? 0x40 : 0) |
		(font.extend ? 0x80 : 0);
	o.write_shift(1, grbit);
	o.write_shift(1, 0);
	return o;
}

/* [MS-OLEDS] 2.3.1 and 2.3.2 */
function parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {
	// $FlowIgnore
	var ClipFmt = { 2: "BITMAP", 3: "METAFILEPICT", 8: "DIB", 14: "ENHMETAFILE" };
	var m/*:number*/ = o.read_shift(4);
	switch (m) {
		case 0x00000000: return "";
		case 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || "";
	}
	if (m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16));
	o.l -= 4;
	return o.read_shift(0, w == 1 ? "lpstr" : "lpwstr");
}
function parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }
function parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }

/* [MS-OLEPS] 2.2 PropertyType */
// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars
//var VT_EMPTY    = 0x0000;
//var VT_NULL     = 0x0001;
var VT_I2       = 0x0002;
var VT_I4       = 0x0003;
//var VT_R4       = 0x0004;
//var VT_R8       = 0x0005;
//var VT_CY       = 0x0006;
//var VT_DATE     = 0x0007;
//var VT_BSTR     = 0x0008;
//var VT_ERROR    = 0x000A;
var VT_BOOL     = 0x000B;
var VT_VARIANT  = 0x000C;
//var VT_DECIMAL  = 0x000E;
//var VT_I1       = 0x0010;
//var VT_UI1      = 0x0011;
//var VT_UI2      = 0x0012;
var VT_UI4      = 0x0013;
//var VT_I8       = 0x0014;
//var VT_UI8      = 0x0015;
//var VT_INT      = 0x0016;
//var VT_UINT     = 0x0017;
//var VT_LPSTR    = 0x001E;
//var VT_LPWSTR   = 0x001F;
var VT_FILETIME = 0x0040;
var VT_BLOB     = 0x0041;
//var VT_STREAM   = 0x0042;
//var VT_STORAGE  = 0x0043;
//var VT_STREAMED_Object  = 0x0044;
//var VT_STORED_Object    = 0x0045;
//var VT_BLOB_Object      = 0x0046;
var VT_CF       = 0x0047;
//var VT_CLSID    = 0x0048;
//var VT_VERSIONED_STREAM = 0x0049;
//var VT_VECTOR   = 0x1000;
var VT_VECTOR_VARIANT = 0x100C;
var VT_VECTOR_LPSTR   = 0x101E;
//var VT_ARRAY    = 0x2000;

var VT_STRING   = 0x0050; // 2.3.3.1.11 VtString
var VT_USTR     = 0x0051; // 2.3.3.1.12 VtUnalignedString
var VT_CUSTOM   = [VT_STRING, VT_USTR];

/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */
var DocSummaryPIDDSI = {
	0x01: { n: 'CodePage', t: VT_I2 },
	0x02: { n: 'Category', t: VT_STRING },
	0x03: { n: 'PresentationFormat', t: VT_STRING },
	0x04: { n: 'ByteCount', t: VT_I4 },
	0x05: { n: 'LineCount', t: VT_I4 },
	0x06: { n: 'ParagraphCount', t: VT_I4 },
	0x07: { n: 'SlideCount', t: VT_I4 },
	0x08: { n: 'NoteCount', t: VT_I4 },
	0x09: { n: 'HiddenCount', t: VT_I4 },
	0x0a: { n: 'MultimediaClipCount', t: VT_I4 },
	0x0b: { n: 'ScaleCrop', t: VT_BOOL },
	0x0c: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },
	0x0d: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },
	0x0e: { n: 'Manager', t: VT_STRING },
	0x0f: { n: 'Company', t: VT_STRING },
	0x10: { n: 'LinksUpToDate', t: VT_BOOL },
	0x11: { n: 'CharacterCount', t: VT_I4 },
	0x13: { n: 'SharedDoc', t: VT_BOOL },
	0x16: { n: 'HyperlinksChanged', t: VT_BOOL },
	0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
	0x18: { n: 'DigSig', t: VT_BLOB },
	0x1A: { n: 'ContentType', t: VT_STRING },
	0x1B: { n: 'ContentStatus', t: VT_STRING },
	0x1C: { n: 'Language', t: VT_STRING },
	0x1D: { n: 'Version', t: VT_STRING },
	0xFF: {},
	/* [MS-OLEPS] 2.18 */
	0x80000000: { n: 'Locale', t: VT_UI4 },
	0x80000003: { n: 'Behavior', t: VT_UI4 },
	0x72627262: {}
};

/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */
var SummaryPIDSI = {
	0x01: { n: 'CodePage', t: VT_I2 },
	0x02: { n: 'Title', t: VT_STRING },
	0x03: { n: 'Subject', t: VT_STRING },
	0x04: { n: 'Author', t: VT_STRING },
	0x05: { n: 'Keywords', t: VT_STRING },
	0x06: { n: 'Comments', t: VT_STRING },
	0x07: { n: 'Template', t: VT_STRING },
	0x08: { n: 'LastAuthor', t: VT_STRING },
	0x09: { n: 'RevNumber', t: VT_STRING },
	0x0A: { n: 'EditTime', t: VT_FILETIME },
	0x0B: { n: 'LastPrinted', t: VT_FILETIME },
	0x0C: { n: 'CreatedDate', t: VT_FILETIME },
	0x0D: { n: 'ModifiedDate', t: VT_FILETIME },
	0x0E: { n: 'PageCount', t: VT_I4 },
	0x0F: { n: 'WordCount', t: VT_I4 },
	0x10: { n: 'CharCount', t: VT_I4 },
	0x11: { n: 'Thumbnail', t: VT_CF },
	0x12: { n: 'Application', t: VT_STRING },
	0x13: { n: 'DocSecurity', t: VT_I4 },
	0xFF: {},
	/* [MS-OLEPS] 2.18 */
	0x80000000: { n: 'Locale', t: VT_UI4 },
	0x80000003: { n: 'Behavior', t: VT_UI4 },
	0x72627262: {}
};

/* [MS-XLS] 2.4.63 Country/Region codes */
var CountryEnum = {
	0x0001: "US", // United States
	0x0002: "CA", // Canada
	0x0003: "", // Latin America (except Brazil)
	0x0007: "RU", // Russia
	0x0014: "EG", // Egypt
	0x001E: "GR", // Greece
	0x001F: "NL", // Netherlands
	0x0020: "BE", // Belgium
	0x0021: "FR", // France
	0x0022: "ES", // Spain
	0x0024: "HU", // Hungary
	0x0027: "IT", // Italy
	0x0029: "CH", // Switzerland
	0x002B: "AT", // Austria
	0x002C: "GB", // United Kingdom
	0x002D: "DK", // Denmark
	0x002E: "SE", // Sweden
	0x002F: "NO", // Norway
	0x0030: "PL", // Poland
	0x0031: "DE", // Germany
	0x0034: "MX", // Mexico
	0x0037: "BR", // Brazil
	0x003d: "AU", // Australia
	0x0040: "NZ", // New Zealand
	0x0042: "TH", // Thailand
	0x0051: "JP", // Japan
	0x0052: "KR", // Korea
	0x0054: "VN", // Viet Nam
	0x0056: "CN", // China
	0x005A: "TR", // Turkey
	0x0069: "JS", // Ramastan
	0x00D5: "DZ", // Algeria
	0x00D8: "MA", // Morocco
	0x00DA: "LY", // Libya
	0x015F: "PT", // Portugal
	0x0162: "IS", // Iceland
	0x0166: "FI", // Finland
	0x01A4: "CZ", // Czech Republic
	0x0376: "TW", // Taiwan
	0x03C1: "LB", // Lebanon
	0x03C2: "JO", // Jordan
	0x03C3: "SY", // Syria
	0x03C4: "IQ", // Iraq
	0x03C5: "KW", // Kuwait
	0x03C6: "SA", // Saudi Arabia
	0x03CB: "AE", // United Arab Emirates
	0x03CC: "IL", // Israel
	0x03CE: "QA", // Qatar
	0x03D5: "IR", // Iran
	0xFFFF: "US"  // United States
};

/* [MS-XLS] 2.5.127 */
var XLSFillPattern = [
	null,
	'solid',
	'mediumGray',
	'darkGray',
	'lightGray',
	'darkHorizontal',
	'darkVertical',
	'darkDown',
	'darkUp',
	'darkGrid',
	'darkTrellis',
	'lightHorizontal',
	'lightVertical',
	'lightDown',
	'lightUp',
	'lightGrid',
	'lightTrellis',
	'gray125',
	'gray0625'
];

function rgbify(arr/*:Array<number>*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }

/* [MS-XLS] 2.5.161 */
/* [MS-XLSB] 2.5.75 Icv */
var _XLSIcv = /*#__PURE__*/ rgbify([
	/* Color Constants */
	0x000000,
	0xFFFFFF,
	0xFF0000,
	0x00FF00,
	0x0000FF,
	0xFFFF00,
	0xFF00FF,
	0x00FFFF,

	/* Overridable Defaults */
	0x000000,
	0xFFFFFF,
	0xFF0000,
	0x00FF00,
	0x0000FF,
	0xFFFF00,
	0xFF00FF,
	0x00FFFF,

	0x800000,
	0x008000,
	0x000080,
	0x808000,
	0x800080,
	0x008080,
	0xC0C0C0,
	0x808080,
	0x9999FF,
	0x993366,
	0xFFFFCC,
	0xCCFFFF,
	0x660066,
	0xFF8080,
	0x0066CC,
	0xCCCCFF,

	0x000080,
	0xFF00FF,
	0xFFFF00,
	0x00FFFF,
	0x800080,
	0x800000,
	0x008080,
	0x0000FF,
	0x00CCFF,
	0xCCFFFF,
	0xCCFFCC,
	0xFFFF99,
	0x99CCFF,
	0xFF99CC,
	0xCC99FF,
	0xFFCC99,

	0x3366FF,
	0x33CCCC,
	0x99CC00,
	0xFFCC00,
	0xFF9900,
	0xFF6600,
	0x666699,
	0x969696,
	0x003366,
	0x339966,
	0x003300,
	0x333300,
	0x993300,
	0x993366,
	0x333399,
	0x333333,

	/* Other entries to appease BIFF8/12 */
	0x000000, /* 0x40 icvForeground ?? */
	0xFFFFFF, /* 0x41 icvBackground ?? */
	0x000000, /* 0x42 icvFrame ?? */
	0x000000, /* 0x43 icv3D ?? */
	0x000000, /* 0x44 icv3DText ?? */
	0x000000, /* 0x45 icv3DHilite ?? */
	0x000000, /* 0x46 icv3DShadow ?? */
	0x000000, /* 0x47 icvHilite ?? */
	0x000000, /* 0x48 icvCtlText ?? */
	0x000000, /* 0x49 icvCtlScrl ?? */
	0x000000, /* 0x4A icvCtlInv ?? */
	0x000000, /* 0x4B icvCtlBody ?? */
	0x000000, /* 0x4C icvCtlFrame ?? */
	0x000000, /* 0x4D icvCtlFore ?? */
	0x000000, /* 0x4E icvCtlBack ?? */
	0x000000, /* 0x4F icvCtlNeutral */
	0x000000, /* 0x50 icvInfoBk ?? */
	0x000000 /* 0x51 icvInfoText ?? */
]);
var XLSIcv = /*#__PURE__*/dup(_XLSIcv);

/* [MS-XLSB] 2.5.97.2 */
var BErr = {
	0x00: "#NULL!",
	0x07: "#DIV/0!",
	0x0F: "#VALUE!",
	0x17: "#REF!",
	0x1D: "#NAME?",
	0x24: "#NUM!",
	0x2A: "#N/A",
	0x2B: "#GETTING_DATA",
	0xFF: "#WTF?"
};
//var RBErr = evert_num(BErr);
var RBErr = {
	"#NULL!":        0x00,
	"#DIV/0!":       0x07,
	"#VALUE!":       0x0F,
	"#REF!":         0x17,
	"#NAME?":        0x1D,
	"#NUM!":         0x24,
	"#N/A":          0x2A,
	"#GETTING_DATA": 0x2B,
	"#WTF?":         0xFF
};

var XLSLblBuiltIn = [
	"_xlnm.Consolidate_Area",
	"_xlnm.Auto_Open",
	"_xlnm.Auto_Close",
	"_xlnm.Extract",
	"_xlnm.Database",
	"_xlnm.Criteria",
	"_xlnm.Print_Area",
	"_xlnm.Print_Titles",
	"_xlnm.Recorder",
	"_xlnm.Data_Form",
	"_xlnm.Auto_Activate",
	"_xlnm.Auto_Deactivate",
	"_xlnm.Sheet_Title",
	"_xlnm._FilterDatabase"
];

/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */
/* 12.3 Part Summary <SpreadsheetML> */
/* 14.2 Part Summary <DrawingML> */
/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */
var ct2type/*{[string]:string}*/ = ({
	/* Workbook */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
	"application/vnd.ms-excel.sheet.macroEnabled.main+xml": "workbooks",
	"application/vnd.ms-excel.sheet.binary.macroEnabled.main": "workbooks",
	"application/vnd.ms-excel.addin.macroEnabled.main+xml": "workbooks",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": "workbooks",

	/* Worksheet */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": "sheets",
	"application/vnd.ms-excel.worksheet": "sheets",
	"application/vnd.ms-excel.binIndexWs": "TODO", /* Binary Index */

	/* Chartsheet */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": "charts",
	"application/vnd.ms-excel.chartsheet": "charts",

	/* Macrosheet */
	"application/vnd.ms-excel.macrosheet+xml": "macros",
	"application/vnd.ms-excel.macrosheet": "macros",
	"application/vnd.ms-excel.intlmacrosheet": "TODO",
	"application/vnd.ms-excel.binIndexMs": "TODO", /* Binary Index */

	/* Dialogsheet */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": "dialogs",
	"application/vnd.ms-excel.dialogsheet": "dialogs",

	/* Shared Strings */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml": "strs",
	"application/vnd.ms-excel.sharedStrings": "strs",

	/* Styles */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": "styles",
	"application/vnd.ms-excel.styles": "styles",

	/* File Properties */
	"application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
	"application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
	"application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",

	/* Custom Data Properties */
	"application/vnd.openxmlformats-officedocument.customXmlProperties+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty": "TODO",

	/* Comments */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
	"application/vnd.ms-excel.comments": "comments",
	"application/vnd.ms-excel.threadedcomments+xml": "threadedcomments",
	"application/vnd.ms-excel.person+xml": "people",

	/* Metadata (Stock/Geography and Dynamic Array) */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml": "metadata",
	"application/vnd.ms-excel.sheetMetadata": "metadata",

	/* PivotTable */
	"application/vnd.ms-excel.pivotTable": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO",

	/* Chart Objects */
	"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO",

	/* Chart Colors */
	"application/vnd.ms-office.chartcolorstyle+xml": "TODO",

	/* Chart Style */
	"application/vnd.ms-office.chartstyle+xml": "TODO",

	/* Chart Advanced */
	"application/vnd.ms-office.chartex+xml": "TODO",

	/* Calculation Chain */
	"application/vnd.ms-excel.calcChain": "calcchains",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",

	/* Printer Settings */
	"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings": "TODO",

	/* ActiveX */
	"application/vnd.ms-office.activeX": "TODO",
	"application/vnd.ms-office.activeX+xml": "TODO",

	/* Custom Toolbars */
	"application/vnd.ms-excel.attachedToolbars": "TODO",

	/* External Data Connections */
	"application/vnd.ms-excel.connections": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": "TODO",

	/* External Links */
	"application/vnd.ms-excel.externalLink": "links",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml": "links",

	/* PivotCache */
	"application/vnd.ms-excel.pivotCacheDefinition": "TODO",
	"application/vnd.ms-excel.pivotCacheRecords": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml": "TODO",

	/* Query Table */
	"application/vnd.ms-excel.queryTable": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml": "TODO",

	/* Shared Workbook */
	"application/vnd.ms-excel.userNames": "TODO",
	"application/vnd.ms-excel.revisionHeaders": "TODO",
	"application/vnd.ms-excel.revisionLog": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml": "TODO",

	/* Single Cell Table */
	"application/vnd.ms-excel.tableSingleCells": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml": "TODO",

	/* Slicer */
	"application/vnd.ms-excel.slicer": "TODO",
	"application/vnd.ms-excel.slicerCache": "TODO",
	"application/vnd.ms-excel.slicer+xml": "TODO",
	"application/vnd.ms-excel.slicerCache+xml": "TODO",

	/* Sort Map */
	"application/vnd.ms-excel.wsSortMap": "TODO",

	/* Table */
	"application/vnd.ms-excel.table": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": "TODO",

	/* Themes */
	"application/vnd.openxmlformats-officedocument.theme+xml": "themes",

	/* Theme Override */
	"application/vnd.openxmlformats-officedocument.themeOverride+xml": "TODO",

	/* Timeline */
	"application/vnd.ms-excel.Timeline+xml": "TODO", /* verify */
	"application/vnd.ms-excel.TimelineCache+xml": "TODO", /* verify */

	/* VBA */
	"application/vnd.ms-office.vbaProject": "vba",
	"application/vnd.ms-office.vbaProjectSignature": "TODO",

	/* Volatile Dependencies */
	"application/vnd.ms-office.volatileDependencies": "TODO",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml": "TODO",

	/* Control Properties */
	"application/vnd.ms-excel.controlproperties+xml": "TODO",

	/* Data Model */
	"application/vnd.openxmlformats-officedocument.model+data": "TODO",

	/* Survey */
	"application/vnd.ms-excel.Survey+xml": "TODO",

	/* Drawing */
	"application/vnd.openxmlformats-officedocument.drawing+xml": "drawings",
	"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml": "TODO",
	"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml": "TODO",

	/* VML */
	"application/vnd.openxmlformats-officedocument.vmlDrawing": "TODO",

	"application/vnd.openxmlformats-package.relationships+xml": "rels",
	"application/vnd.openxmlformats-officedocument.oleObject": "TODO",

	/* Image */
	"image/png": "TODO",

	"sheet": "js"
}/*:any*/);

var CT_LIST = {
	workbooks: {
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
		xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
		xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main",
		xlam: "application/vnd.ms-excel.addin.macroEnabled.main+xml",
		xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
	},
	strs: { /* Shared Strings */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
		xlsb: "application/vnd.ms-excel.sharedStrings"
	},
	comments: { /* Comments */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",
		xlsb: "application/vnd.ms-excel.comments"
	},
	sheets: { /* Worksheet */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
		xlsb: "application/vnd.ms-excel.worksheet"
	},
	charts: { /* Chartsheet */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",
		xlsb: "application/vnd.ms-excel.chartsheet"
	},
	dialogs: { /* Dialogsheet */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",
		xlsb: "application/vnd.ms-excel.dialogsheet"
	},
	macros: { /* Macrosheet (Excel 4.0 Macros) */
		xlsx: "application/vnd.ms-excel.macrosheet+xml",
		xlsb: "application/vnd.ms-excel.macrosheet"
	},
	metadata: { /* Metadata (Stock/Geography and Dynamic Array) */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",
		xlsb: "application/vnd.ms-excel.sheetMetadata"
	},
	styles: { /* Styles */
		xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
		xlsb: "application/vnd.ms-excel.styles"
	}
};

function new_ct()/*:any*/ {
	return ({
		workbooks:[], sheets:[], charts:[], dialogs:[], macros:[],
		rels:[], strs:[], comments:[], threadedcomments:[], links:[],
		coreprops:[], extprops:[], custprops:[], themes:[], styles:[],
		calcchains:[], vba: [], drawings: [], metadata: [], people:[],
		TODO:[], xmlns: "" }/*:any*/);
}

function parse_ct(data/*:?string*/) {
	var ct = new_ct();
	if(!data || !data.match) return ct;
	var ctext = {};
	(data.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		switch(y[0].replace(nsregex,"<")) {
			case '<?xml': break;
			case '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\w+):/)||["",""])[1] ]; break;
			case '<Default': ctext[y.Extension.toLowerCase()] = y.ContentType; break;
			case '<Override':
				if(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);
				break;
		}
	});
	if(ct.xmlns !== XMLNS.CT) throw new Error("Unknown Namespace: " + ct.xmlns);
	ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : "";
	ct.sst = ct.strs.length > 0 ? ct.strs[0] : "";
	ct.style = ct.styles.length > 0 ? ct.styles[0] : "";
	ct.defaults = ctext;
	delete ct.calcchains;
	return ct;
}

function write_ct(ct, opts, raw)/*:string*/ {
	var type2ct/*{[string]:Array<string>}*/ = evert_arr(ct2type);

	var o/*:Array<string>*/ = [], v;

	if(!raw) {
		o[o.length] = (XML_HEADER);
		o[o.length] = writextag('Types', null, {
			'xmlns': XMLNS.CT,
			'xmlns:xsd': XMLNS.xsd,
			'xmlns:xsi': XMLNS.xsi
		});
		o = o.concat([
			['xml', 'application/xml'],
			['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],
			['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],
			['data', 'application/vnd.openxmlformats-officedocument.model+data'],
			/* from test files */
			['bmp', 'image/bmp'],
			['png', 'image/png'],
			['gif', 'image/gif'],
			['emf', 'image/x-emf'],
			['wmf', 'image/x-wmf'],
			['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],
			['tif', 'image/tiff'], ['tiff', 'image/tiff'],
			['pdf', 'application/pdf'],
			['rels', 'application/vnd.openxmlformats-package.relationships+xml']
		].map(function(x) {
			return writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});
		}));
	}

	/* only write first instance */
	var f1 = function(w) {
		if(ct[w] && ct[w].length > 0) {
			v = ct[w][0];
			o[o.length] = (writextag('Override', null, {
				'PartName': (v[0] == '/' ? "":"/") + v,
				'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']
			}));
		}
	};

	/* book type-specific */
	var f2 = function(w) {
		(ct[w]||[]).forEach(function(v) {
			o[o.length] = (writextag('Override', null, {
				'PartName': (v[0] == '/' ? "":"/") + v,
				'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']
			}));
		});
	};

	/* standard type */
	var f3 = function(t) {
		(ct[t]||[]).forEach(function(v) {
			o[o.length] = (writextag('Override', null, {
				'PartName': (v[0] == '/' ? "":"/") + v,
				'ContentType': type2ct[t][0]
			}));
		});
	};

	f1('workbooks');
	f2('sheets');
	f2('charts');
	f3('themes');
	['strs', 'styles'].forEach(f1);
	['coreprops', 'extprops', 'custprops'].forEach(f3);
	f3('vba');
	f3('comments');
	f3('threadedcomments');
	f3('drawings');
	f2('metadata');
	f3('people');
	if(!raw && o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* 9.3 Relationships */
var RELS = ({
	WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
	SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
	HLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",
	VML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",
	XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",
	XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",
	XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",
	CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",
	CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",
	CMNT: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
	CORE_PROPS: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",
	EXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',
	CUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',
	SST: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
	STY: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
	THEME: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
	CHART: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
	CHARTEX: "http://schemas.microsoft.com/office/2014/relationships/chartEx",
	CS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",
	WS: [
		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
		"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"
	],
	DS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",
	MS: "http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",
	IMG: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
	DRAW: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
	XLMETA: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",
	TCMNT: "http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",
	PEOPLE: "http://schemas.microsoft.com/office/2017/10/relationships/person",
	CONN: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections",
	VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject"
}/*:any*/);

/* 9.3.3 Representing Relationships */
function get_rels_path(file/*:string*/)/*:string*/ {
	var n = file.lastIndexOf("/");
	return file.slice(0,n+1) + '_rels/' + file.slice(n+1) + ".rels";
}

function parse_rels(data/*:?string*/, currentFilePath/*:string*/) {
	var rels = {"!id":{}};
	if (!data) return rels;
	if (currentFilePath.charAt(0) !== '/') {
		currentFilePath = '/'+currentFilePath;
	}
	var hash = {};

	(data.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		/* 9.3.2.2 OPC_Relationships */
		if (y[0] === '<Relationship') {
			var rel = {}; rel.Type = y.Type; rel.Target = unescapexml(y.Target); rel.Id = y.Id; if(y.TargetMode) rel.TargetMode = y.TargetMode;
			var canonictarget = y.TargetMode === 'External' ? y.Target : resolve_path(y.Target, currentFilePath);
			rels[canonictarget] = rel;
			hash[y.Id] = rel;
		}
	});
	rels["!id"] = hash;
	return rels;
}


/* TODO */
function write_rels(rels)/*:string*/ {
	var o = [XML_HEADER, writextag('Relationships', null, {
		//'xmlns:ns0': XMLNS.RELS,
		'xmlns': XMLNS.RELS
	})];
	keys(rels['!id']).forEach(function(rid) {
		o[o.length] = (writextag('Relationship', null, rels['!id'][rid]));
	});
	if(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}

function add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {
	if(!relobj) relobj = {};
	if(!rels['!id']) rels['!id'] = {};
	if(!rels['!idx']) rels['!idx'] = 1;
	if(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}
	rels['!idx'] = rId + 1;
	relobj.Id = 'rId' + rId;
	relobj.Type = type;
	relobj.Target = f;
	if(targetmode) relobj.TargetMode = targetmode;
	else if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = "External";
	if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
	rels['!id'][relobj.Id] = relobj;
	rels[('/' + relobj.Target).replace("//","/")] = relobj;
	return rId;
}
var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet";
function parse_manifest(d, opts) {
  var str = xlml_normalize(d);
  var Rn;
  var FEtag;
  while (Rn = xlmlregex.exec(str))
    switch (Rn[3]) {
      case "manifest":
        break;
      case "file-entry":
        FEtag = parsexmltag(Rn[0], false);
        if (FEtag.path == "/" && FEtag.type !== CT_ODS)
          throw new Error("This OpenDocument is not a spreadsheet");
        break;
      case "encryption-data":
      case "algorithm":
      case "start-key-generation":
      case "key-derivation":
        throw new Error("Unsupported ODS Encryption");
      default:
        if (opts && opts.WTF)
          throw Rn;
    }
}
function write_manifest(manifest) {
  var o = [XML_HEADER];
  o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n');
  o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n');
  for (var i = 0; i < manifest.length; ++i)
    o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n');
  o.push("</manifest:manifest>");
  return o.join("");
}
function write_rdf_type(file, res, tag) {
  return [
    '  <rdf:Description rdf:about="' + file + '">\n',
    '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n',
    "  </rdf:Description>\n"
  ].join("");
}
function write_rdf_has(base, file) {
  return [
    '  <rdf:Description rdf:about="' + base + '">\n',
    '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n',
    "  </rdf:Description>\n"
  ].join("");
}
function write_rdf(rdf) {
  var o = [XML_HEADER];
  o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n');
  for (var i = 0; i != rdf.length; ++i) {
    o.push(write_rdf_type(rdf[i][0], rdf[i][1]));
    o.push(write_rdf_has("", rdf[i][0]));
  }
  o.push(write_rdf_type("", "Document", "pkg"));
  o.push("</rdf:RDF>");
  return o.join("");
}
function write_meta_ods(wb, opts) {
  return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>";
}
/* ECMA-376 Part II 11.1 Core Properties Part */
/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
var CORE_PROPS/*:Array<Array<string> >*/ = [
	["cp:category", "Category"],
	["cp:contentStatus", "ContentStatus"],
	["cp:keywords", "Keywords"],
	["cp:lastModifiedBy", "LastAuthor"],
	["cp:lastPrinted", "LastPrinted"],
	["cp:revision", "RevNumber"],
	["cp:version", "Version"],
	["dc:creator", "Author"],
	["dc:description", "Comments"],
	["dc:identifier", "Identifier"],
	["dc:language", "Language"],
	["dc:subject", "Subject"],
	["dc:title", "Title"],
	["dcterms:created", "CreatedDate", 'date'],
	["dcterms:modified", "ModifiedDate", 'date']
];

function parse_core_props(data) {
	var p = {};
	data = utf8read(data);

	for(var i = 0; i < CORE_PROPS.length; ++i) {
		var f = CORE_PROPS[i], cur = str_match_xml(data, f[0]);
		if(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);
		if(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);
	}

	return p;
}

function cp_doit(f, g, h, o, p) {
	if(p[f] != null || g == null || g === "") return;
	p[f] = g;
	g = escapexml(g);
	o[o.length] = (h ? writextag(f,g,h) : writetag(f,g));
}

function write_core_props(cp, _opts) {
	var opts = _opts || {};
	var o = [XML_HEADER, writextag('cp:coreProperties', null, {
		//'xmlns': XMLNS.CORE_PROPS,
		'xmlns:cp': XMLNS.CORE_PROPS,
		'xmlns:dc': XMLNS.dc,
		'xmlns:dcterms': XMLNS.dcterms,
		'xmlns:dcmitype': XMLNS.dcmitype,
		'xmlns:xsi': XMLNS.xsi
	})], p = {};
	if(!cp && !opts.Props) return o.join("");

	if(cp) {
		if(cp.CreatedDate != null) cp_doit("dcterms:created", typeof cp.CreatedDate === "string" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
		if(cp.ModifiedDate != null) cp_doit("dcterms:modified", typeof cp.ModifiedDate === "string" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {"xsi:type":"dcterms:W3CDTF"}, o, p);
	}

	for(var i = 0; i != CORE_PROPS.length; ++i) {
		var f = CORE_PROPS[i];
		var v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;
		if(v === true) v = "1";
		else if(v === false) v = "0";
		else if(typeof v == "number") v = String(v);
		if(v != null) cp_doit(f[0], v, null, o, p);
	}
	if(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* 15.2.12.3 Extended File Properties Part */
/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */
var EXT_PROPS/*:Array<Array<string> >*/ = [
	["Application", "Application", "string"],
	["AppVersion", "AppVersion", "string"],
	["Company", "Company", "string"],
	["DocSecurity", "DocSecurity", "string"],
	["Manager", "Manager", "string"],
	["HyperlinksChanged", "HyperlinksChanged", "bool"],
	["SharedDoc", "SharedDoc", "bool"],
	["LinksUpToDate", "LinksUpToDate", "bool"],
	["ScaleCrop", "ScaleCrop", "bool"],
	["HeadingPairs", "HeadingPairs", "raw"],
	["TitlesOfParts", "TitlesOfParts", "raw"]
];

var PseudoPropsPairs = [
	"Worksheets",  "SheetNames",
	"NamedRanges", "DefinedNames",
	"Chartsheets", "ChartNames"
];
function load_props_pairs(HP/*:string|Array<Array<any>>*/, TOP, props, opts) {
	var v = [];
	if(typeof HP == "string") v = parseVector(HP, opts);
	else for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));
	var parts = (typeof TOP == "string") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;
	var idx = 0, len = 0;
	if(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {
		len = +(v[i+1].v);
		switch(v[i].v) {
			case "Worksheets":
			case "工作表":
			case "Листы":
			case "أوراق العمل":
			case "ワークシート":
			case "גליונות עבודה":
			case "Arbeitsblätter":
			case "Çalışma Sayfaları":
			case "Feuilles de calcul":
			case "Fogli di lavoro":
			case "Folhas de cálculo":
			case "Planilhas":
			case "Regneark":
			case "Hojas de cálculo":
			case "Werkbladen":
				props.Worksheets = len;
				props.SheetNames = parts.slice(idx, idx + len);
				break;

			case "Named Ranges":
			case "Rangos con nombre":
			case "名前付き一覧":
			case "Benannte Bereiche":
			case "Navngivne områder":
				props.NamedRanges = len;
				props.DefinedNames = parts.slice(idx, idx + len);
				break;

			case "Charts":
			case "Diagramme":
				props.Chartsheets = len;
				props.ChartNames = parts.slice(idx, idx + len);
				break;
		}
		idx += len;
	}
}

function parse_ext_props(data, p, opts) {
	var q = {}; if(!p) p = {};
	data = utf8read(data);

	EXT_PROPS.forEach(function(f) {
		var xml = (str_match_xml_ns(data, f[0])||[])[1];
		switch(f[2]) {
			case "string": if(xml) p[f[1]] = unescapexml(xml); break;
			case "bool": p[f[1]] = xml === "true"; break;
			case "raw":
				var cur = str_match_xml(data, f[0]);
				if(cur && cur.length > 0) q[f[1]] = cur[1];
				break;
		}
	});

	if(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);

	return p;
}

function write_ext_props(cp/*::, opts*/)/*:string*/ {
	var o/*:Array<string>*/ = [], W = writextag;
	if(!cp) cp = {};
	cp.Application = "SheetJS";
	o[o.length] = (XML_HEADER);
	o[o.length] = (writextag('Properties', null, {
		'xmlns': XMLNS.EXT_PROPS,
		'xmlns:vt': XMLNS.vt
	}));

	EXT_PROPS.forEach(function(f) {
		if(cp[f[1]] === undefined) return;
		var v;
		switch(f[2]) {
			case 'string': v = escapexml(String(cp[f[1]])); break;
			case 'bool': v = cp[f[1]] ? 'true' : 'false'; break;
		}
		if(v !== undefined) o[o.length] = (W(f[0], v));
	});

	/* TODO: HeadingPairs, TitlesOfParts */
	o[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:"variant"})));
	o[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return "<vt:lpstr>" + escapexml(s) + "</vt:lpstr>"; }).join(""), {size: cp.Worksheets, baseType:"lpstr"})));
	if(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* 15.2.12.2 Custom File Properties Part */
var custregex = /<[^<>]+>[^<]*/g;
function parse_cust_props(data/*:string*/, opts) {
	var p = {}, name = "";
	var m = data.match(custregex);
	if(m) for(var i = 0; i != m.length; ++i) {
		var x = m[i], y = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;
			case '<Properties': break;
			case '<property': name = unescapexml(y.name); break;
			case '</property>': name = null; break;
			default: if (x.indexOf('<vt:') === 0) {
				var toks = x.split('>');
				var type = toks[0].slice(4), text = toks[1];
				/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */
				switch(type) {
					case 'lpstr': case 'bstr': case 'lpwstr':
						p[name] = unescapexml(text);
						break;
					case 'bool':
						p[name] = parsexmlbool(text);
						break;
					case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':
						p[name] = parseInt(text, 10);
						break;
					case 'r4': case 'r8': case 'decimal':
						p[name] = parseFloat(text);
						break;
					case 'filetime': case 'date':
						p[name] = parseDate(text);
						break;
					case 'cy': case 'error':
						p[name] = unescapexml(text);
						break;
					default:
						if(type.slice(-1) == '/') break;
						if(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);
				}
			} else if(x.slice(0,2) === "</") {/* empty */
			} else if(opts.WTF) throw new Error(x);
		}
	}
	return p;
}

function write_cust_props(cp/*::, opts*/)/*:string*/ {
	var o = [XML_HEADER, writextag('Properties', null, {
		'xmlns': XMLNS.CUST_PROPS,
		'xmlns:vt': XMLNS.vt
	})];
	if(!cp) return o.join("");
	var pid = 1;
	keys(cp).forEach(function custprop(k) { ++pid;
		o[o.length] = (writextag('property', write_vt(cp[k], true), {
			'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
			'pid': pid,
			'name': escapexml(k)
		}));
	});
	if(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* Common Name -> XLML Name */
var XLMLDocPropsMap = {
	Title: 'Title',
	Subject: 'Subject',
	Author: 'Author',
	Keywords: 'Keywords',
	Comments: 'Description',
	LastAuthor: 'LastAuthor',
	RevNumber: 'Revision',
	Application: 'AppName',
	/* TotalTime: 'TotalTime', */
	LastPrinted: 'LastPrinted',
	CreatedDate: 'Created',
	ModifiedDate: 'LastSaved',
	/* Pages */
	/* Words */
	/* Characters */
	Category: 'Category',
	/* PresentationFormat */
	Manager: 'Manager',
	Company: 'Company',
	/* Guid */
	/* HyperlinkBase */
	/* Bytes */
	/* Lines */
	/* Paragraphs */
	/* CharactersWithSpaces */
	AppVersion: 'Version',

	ContentStatus: 'ContentStatus', /* NOTE: missing from schema */
	Identifier: 'Identifier', /* NOTE: missing from schema */
	Language: 'Language' /* NOTE: missing from schema */
};
var evert_XLMLDPM;

function xlml_set_prop(Props, tag/*:string*/, val) {
	if(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);
	tag = evert_XLMLDPM[tag] || tag;
	Props[tag] = val;
}

function xlml_write_docprops(Props, opts) {
	var o/*:Array<string>*/ = [];
	keys(XLMLDocPropsMap).map(function(m) {
		for(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];
		for(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];
		throw m;
	}).forEach(function(p) {
		if(Props[p[1]] == null) return;
		var m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];
		switch(p[2]) {
			case 'date': m = new Date(m).toISOString().replace(/\.\d*Z/,"Z"); break;
		}
		if(typeof m == 'number') m = String(m);
		else if(m === true || m === false) { m = m ? "1" : "0"; }
		else if(m instanceof Date) m = new Date(m).toISOString().replace(/\.\d*Z/,"");
		o.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));
	});
	return writextag('DocumentProperties', o.join(""), {xmlns:XLMLNS.o });
}
function xlml_write_custprops(Props, Custprops/*::, opts*/) {
	var BLACKLIST = ["Worksheets","SheetNames"];
	var T = 'CustomDocumentProperties';
	var o/*:Array<string>*/ = [];
	if(Props) keys(Props).forEach(function(k) {
		/*:: if(!Props) return; */
		if(!Object.prototype.hasOwnProperty.call(Props, k)) return;
		for(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;
		for(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;
		for(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;

		var m = Props[k];
		var t = "string";
		if(typeof m == 'number') { t = "float"; m = String(m); }
		else if(m === true || m === false) { t = "boolean"; m = m ? "1" : "0"; }
		else m = String(m);
		o.push(writextag(escapexmltag(k), m, {"dt:dt":t}));
	});
	if(Custprops) keys(Custprops).forEach(function(k) {
		/*:: if(!Custprops) return; */
		if(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;
		if(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;
		var m = Custprops[k];
		var t = "string";
		if(typeof m == 'number') { t = "float"; m = String(m); }
		else if(m === true || m === false) { t = "boolean"; m = m ? "1" : "0"; }
		else if(m instanceof Date) { t = "dateTime.tz"; m = m.toISOString(); }
		else m = String(m);
		o.push(writextag(escapexmltag(k), m, {"dt:dt":t}));
	});
	return '<' + T + ' xmlns="' + XLMLNS.o + '">' + o.join("") + '</' + T + '>';
}
/* [MS-DTYP] 2.3.3 FILETIME */
/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */
/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */
function parse_FILETIME(blob) {
	var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);
	return new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\.000/,"");
}
function write_FILETIME(time/*:string|Date*/) {
	var date = (typeof time == "string") ? new Date(Date.parse(time)) : time;
	var t = date.getTime() / 1000 + 11644473600;
	var l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);
	l *= 1e7; h *= 1e7;
	var w = (l / Math.pow(2,32)) | 0;
	if(w > 0) { l = l % Math.pow(2,32); h += w; }
	var o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;
}

/* [MS-OSHARED] 2.3.3.1.4 Lpstr */
function parse_lpstr(blob, type, pad/*:?number*/) {
	var start = blob.l;
	var str = blob.read_shift(0, 'lpstr-cp');
	if(pad) while((blob.l - start) & 3) ++blob.l;
	return str;
}

/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */
function parse_lpwstr(blob, type, pad) {
	var str = blob.read_shift(0, 'lpwstr');
	if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;
	return str;
}


/* [MS-OSHARED] 2.3.3.1.11 VtString */
/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */
function parse_VtStringBase(blob, stringType, pad) {
	if(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);
	return parse_lpstr(blob, stringType, pad);
}

function parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }
function parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error("VtUnalignedString must have positive length"); return parse_VtStringBase(blob, t, 0); }

/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */
function parse_VtVecLpwstrValue(blob)/*:Array<string>*/ {
	var length = blob.read_shift(4);
	var ret/*:Array<string>*/ = [];
	for(var i = 0; i != length; ++i) {
		var start = blob.l;
		ret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');
		if((blob.l - start) & 0x02) blob.l += 2;
	}
	return ret;
}

/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */
function parse_VtVecUnalignedLpstrValue(blob)/*:Array<string>*/ {
	var length = blob.read_shift(4);
	var ret/*:Array<string>*/ = [];
	for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');
	return ret;
}


/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */
function parse_VtHeadingPair(blob) {
	var start = blob.l;
	var headingString = parse_TypedPropertyValue(blob, VT_USTR);
	if(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;
	var headerParts = parse_TypedPropertyValue(blob, VT_I4);
	return [headingString, headerParts];
}

/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */
function parse_VtVecHeadingPairValue(blob) {
	var cElements = blob.read_shift(4);
	var out = [];
	for(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));
	return out;
}

/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */
function parse_dictionary(blob,CodePage) {
	var cnt = blob.read_shift(4);
	var dict/*:{[number]:string}*/ = ({}/*:any*/);
	for(var j = 0; j != cnt; ++j) {
		var pid = blob.read_shift(4);
		var len = blob.read_shift(4);
		dict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');
		if(CodePage === 0x4B0 && (len % 2)) blob.l += 2;
	}
	if(blob.l & 3) blob.l = (blob.l>>2+1)<<2;
	return dict;
}

/* [MS-OLEPS] 2.9 BLOB */
function parse_BLOB(blob) {
	var size = blob.read_shift(4);
	var bytes = blob.slice(blob.l,blob.l+size);
	blob.l += size;
	if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
	return bytes;
}

/* [MS-OLEPS] 2.11 ClipboardData */
function parse_ClipboardData(blob) {
	// TODO
	var o = {};
	o.Size = blob.read_shift(4);
	//o.Format = blob.read_shift(4);
	blob.l += o.Size + 3 - (o.Size - 1) % 4;
	return o;
}

/* [MS-OLEPS] 2.15 TypedPropertyValue */
function parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {
	var t = blob.read_shift(2), ret, opts = _opts||{};
	blob.l += 2;
	if(type !== VT_VARIANT)
	if(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);
	switch(type === VT_VARIANT ? t : type) {
		case 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;
		case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;
		case 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;
		case 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;
		case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1"); break;
		case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1"); break;
		case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);
		case 0x41 /*VT_BLOB*/: return parse_BLOB(blob);
		case 0x47 /*VT_CF*/: return parse_ClipboardData(blob);
		case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');
		case 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');
		case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);
		case 0x101E /*VT_VECTOR|VT_LPSTR*/:
		case 0x101F /*VT_VECTOR|VT_LPWSTR*/:
			return t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);
		default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + t);
	}
}
function write_TypedPropertyValue(type/*:number*/, value) {
	var o = new_buf(4), p = new_buf(4);
	o.write_shift(4, type == 0x50 ? 0x1F : type);
	switch(type) {
		case 0x03 /*VT_I4*/: p.write_shift(-4, value); break;
		case 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;
		case 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;
		case 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== "string" && !(value instanceof Date)) throw "unreachable"; */ p = write_FILETIME(value); break;
		case 0x1F /*VT_LPWSTR*/:
		case 0x50 /*VT_STRING*/:
			/*:: if(typeof value !== "string") throw "unreachable"; */
			p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));
			p.write_shift(4, value.length + 1);
			p.write_shift(0, value, "dbcs");
			while(p.l != p.length) p.write_shift(1, 0);
			break;
		default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + value);
	}
	return bconcat([o, p]);
}

/* [MS-OLEPS] 2.20 PropertySet */
function parse_PropertySet(blob, PIDSI) {
	var start_addr = blob.l;
	var size = blob.read_shift(4);
	var NumProps = blob.read_shift(4);
	var Props = [], i = 0;
	var CodePage = 0;
	var Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);
	for(i = 0; i != NumProps; ++i) {
		var PropID = blob.read_shift(4);
		var Offset = blob.read_shift(4);
		Props[i] = [PropID, Offset + start_addr];
	}
	Props.sort(function(x,y) { return x[1] - y[1]; });
	var PropH = {};
	for(i = 0; i != NumProps; ++i) {
		if(blob.l !== Props[i][1]) {
			var fail = true;
			if(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {
				case 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;
				case 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
				case 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;
			}
			if((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }
			if(fail) throw new Error("Read Error: Expected address " + Props[i][1] + ' at ' + blob.l + ' :' + i);
		}
		if(PIDSI) {
			if(Props[i][0] == 0 && Props.length > i+1 && Props[i][1] == Props[i+1][1]) continue; // R9
			var piddsi = PIDSI[Props[i][0]];
			PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});
			if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + ("0000" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);
			if(piddsi.n == "CodePage") switch(PropH[piddsi.n]) {
				case 0: PropH[piddsi.n] = 1252;
					/* falls through */
				case 874:
				case 932:
				case 936:
				case 949:
				case 950:
				case 1250:
				case 1251:
				case 1253:
				case 1254:
				case 1255:
				case 1256:
				case 1257:
				case 1258:
				case 10000:
				case 1200:
				case 1201:
				case 1252:
				case 65000: case -536:
				case 65001: case -535:
					set_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;
				default: throw new Error("Unsupported CodePage: " + PropH[piddsi.n]);
			}
		} else {
			if(Props[i][0] === 0x1) {
				CodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);
				set_cp(CodePage);
				if(Dictionary !== -1) {
					var oldpos = blob.l;
					blob.l = Props[Dictionary][1];
					DictObj = parse_dictionary(blob,CodePage);
					blob.l = oldpos;
				}
			} else if(Props[i][0] === 0) {
				if(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }
				DictObj = parse_dictionary(blob,CodePage);
			} else {
				var name = DictObj[Props[i][0]];
				var val;
				/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */
				switch(blob[blob.l]) {
					case 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;
					case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1"); break;
					case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1"); break;
					case 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;
					case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;
					case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;
					case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;
					case 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;
					default: throw new Error("unparsed value: " + blob[blob.l]);
				}
				PropH[name] = val;
			}
		}
	}
	blob.l = start_addr + size; /* step ahead to skip padding */
	return PropH;
}
var XLSPSSkip = [ "CodePage", "Thumbnail", "_PID_LINKBASE", "_PID_HLINKS", "SystemIdentifier", "FMTID" ];
function guess_property_type(val/*:any*/)/*:number*/ {
	switch(typeof val) {
		case "boolean": return 0x0B;
		case "number": return ((val|0)==val) ? 0x03 : 0x05;
		case "string": return 0x1F;
		case "object": if(val instanceof Date) return 0x40; break;
	}
	return -1;
}
function write_PropertySet(entries, RE, PIDSI) {
	var hdr = new_buf(8), piao = [], prop = [];
	var sz = 8, i = 0;

	var pr = new_buf(8), pio = new_buf(8);
	pr.write_shift(4, 0x0002);
	pr.write_shift(4, 0x04B0);
	pio.write_shift(4, 0x0001);
	prop.push(pr); piao.push(pio);
	sz += 8 + pr.length;

	if(!RE) {
		pio = new_buf(8);
		pio.write_shift(4, 0);
		piao.unshift(pio);

		var bufs = [new_buf(4)];
		bufs[0].write_shift(4, entries.length);
		for(i = 0; i < entries.length; ++i) {
			var value = entries[i][0];
			pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));
			pr.write_shift(4, i+2);
			pr.write_shift(4, value.length + 1);
			pr.write_shift(0, value, "dbcs");
			while(pr.l != pr.length) pr.write_shift(1, 0);
			bufs.push(pr);
		}
		pr = bconcat(bufs);
		prop.unshift(pr);
		sz += 8 + pr.length;
	}

	for(i = 0; i < entries.length; ++i) {
		if(RE && !RE[entries[i][0]]) continue;
		if(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;
		if(entries[i][1] == null) continue;

		var val = entries[i][1], idx = 0;
		if(RE) {
			idx = +RE[entries[i][0]];
			var pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;
			if(pinfo.p == "version" && typeof val == "string") {
				/*:: if(typeof val !== "string") throw "unreachable"; */
				var arr = val.split(".");
				val = ((+arr[0])<<16) + ((+arr[1])||0);
			}
			pr = write_TypedPropertyValue(pinfo.t, val);
		} else {
			var T = guess_property_type(val);
			if(T == -1) { T = 0x1F; val = String(val); }
			pr = write_TypedPropertyValue(T, val);
		}
		prop.push(pr);

		pio = new_buf(8);
		pio.write_shift(4, !RE ? 2+i : idx);
		piao.push(pio);

		sz += 8 + pr.length;
	}

	var w = 8 * (prop.length + 1);
	for(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }
	hdr.write_shift(4, sz);
	hdr.write_shift(4, prop.length);
	return bconcat([hdr].concat(piao).concat(prop));
}

/* [MS-OLEPS] 2.21 PropertySetStream */
function parse_PropertySetStream(file, PIDSI, clsid) {
	var blob = file.content;
	if(!blob) return ({}/*:any*/);
	prep_blob(blob, 0);

	var NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;
	blob.chk('feff', 'Byte Order: ');

	/*var vers = */blob.read_shift(2); // TODO: check version
	var SystemIdentifier = blob.read_shift(4);
	var CLSID = blob.read_shift(16);
	if(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error("Bad PropertySet CLSID " + CLSID);
	NumSets = blob.read_shift(4);
	if(NumSets !== 1 && NumSets !== 2) throw new Error("Unrecognized #Sets: " + NumSets);
	FMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);

	if(NumSets === 1 && Offset0 !== blob.l) throw new Error("Length mismatch: " + Offset0 + " !== " + blob.l);
	else if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }
	var PSet0 = parse_PropertySet(blob, PIDSI);

	var rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);
	for(var y in PSet0) rval[y] = PSet0[y];
	//rval.blob = blob;
	rval.FMTID = FMTID0;
	//rval.PSet0 = PSet0;
	if(NumSets === 1) return rval;
	if(Offset1 - blob.l == 2) blob.l += 2;
	if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
	var PSet1;
	try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}
	for(y in PSet1) rval[y] = PSet1[y];
	rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1
	return rval;
}
function write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {
	var hdr = new_buf(entries2 ? 68 : 48);
	var bufs = [hdr];
	hdr.write_shift(2, 0xFFFE);
	hdr.write_shift(2, 0x0000); /* TODO: type 1 props */
	hdr.write_shift(4, 0x32363237);
	hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, "hex");
	hdr.write_shift(4, (entries2 ? 2 : 1));
	hdr.write_shift(16, clsid, "hex");
	hdr.write_shift(4, (entries2 ? 68 : 48));
	var ps0 = write_PropertySet(entries, RE, PIDSI);
	bufs.push(ps0);

	if(entries2) {
		var ps1 = write_PropertySet(entries2, null, null);
		hdr.write_shift(16, clsid2, "hex");
		hdr.write_shift(4, 68 + ps0.length);
		bufs.push(ps1);
	}
	return bconcat(bufs);
}

function parsenoop2(blob, length) { blob.read_shift(length); return null; }
function writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j<n; ++j) o.write_shift(1, 0); return o; }

function parslurp(blob, length, cb) {
	var arr = [], target = blob.l + length;
	while(blob.l < target) arr.push(cb(blob, target - blob.l));
	if(target !== blob.l) throw new Error("Slurp error");
	return arr;
}

function parsebool(blob, length/*:number*/) { return blob.read_shift(length) === 0x1; }
function writebool(v/*:any*/, o) { if(!o) o=new_buf(2); o.write_shift(2, +!!v); return o; }

function parseuint16(blob/*::, length:?number, opts:?any*/) { return blob.read_shift(2, 'u'); }
function writeuint16(v/*:number*/, o) { if(!o) o=new_buf(2); o.write_shift(2, v); return o; }
function parseuint16a(blob, length/*:: :?number, opts:?any*/) { return parslurp(blob,length,parseuint16);}

/* --- 2.5 Structures --- */

/* [MS-XLS] 2.5.10 Bes (boolean or error) */
function parse_Bes(blob/*::, length*/) {
	var v = blob.read_shift(1), t = blob.read_shift(1);
	return t === 0x01 ? v : v === 0x01;
}
function write_Bes(v, t/*:string*/, o) {
	if(!o) o = new_buf(2);
	o.write_shift(1, ((t == 'e') ? +v : +!!v));
	o.write_shift(1, ((t == 'e') ? 1 : 0));
	return o;
}

/* [MS-XLS] 2.5.240 ShortXLUnicodeString */
function parse_ShortXLUnicodeString(blob, length, opts) {
	var cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);
	var encoding = 'sbcs-cont';
	var cp = current_codepage;
	if(opts && opts.biff >= 8) current_codepage = 1200;
	if(!opts || opts.biff == 8 ) {
		var fHighByte = blob.read_shift(1);
		if(fHighByte) { encoding = 'dbcs-cont'; }
	} else if(opts.biff == 12) {
		encoding = 'wstr';
	}
	if(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';
	var o = cch ? blob.read_shift(cch, encoding) : "";
	current_codepage = cp;
	return o;
}

/* 2.5.293 XLUnicodeRichExtendedString */
function parse_XLUnicodeRichExtendedString(blob) {
	var cp = current_codepage;
	current_codepage = 1200;
	var cch = blob.read_shift(2), flags = blob.read_shift(1);
	var /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;
	var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs
	var cRun = 0, cbExtRst;
	var z = {};
	if(fRichSt) cRun = blob.read_shift(2);
	if(fExtSt) cbExtRst = blob.read_shift(4);
	var encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';
	var msg = cch === 0 ? "" : blob.read_shift(cch, encoding);
	if(fRichSt) blob.l += 4 * cRun; //TODO: parse this
	if(fExtSt) blob.l += cbExtRst; //TODO: parse this
	z.t = msg;
	if(!fRichSt) { z.raw = "<t>" + z.t + "</t>"; z.r = z.t; }
	current_codepage = cp;
	return z;
}
function write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {
	var str = (xlstr.t||""), nfmts = 1;

	var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));
	hdr.write_shift(2, str.length);
	hdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);
	if(nfmts > 1) hdr.write_shift(2, nfmts);

	var otext = new_buf(2 * str.length);
	otext.write_shift(2 * str.length, str, 'utf16le');

	var out = [hdr, otext];

	return bconcat(out);
}

/* 2.5.296 XLUnicodeStringNoCch */
function parse_XLUnicodeStringNoCch(blob, cch, opts) {
	var retval;
	if(opts) {
		if(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');
		if(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');
	}
	var fHighByte = blob.read_shift(1);
	if(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }
	else { retval = blob.read_shift(cch, 'dbcs-cont'); }
	return retval;
}

/* 2.5.294 XLUnicodeString */
function parse_XLUnicodeString(blob, length, opts) {
	var cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
	if(cch === 0) { blob.l++; return ""; }
	return parse_XLUnicodeStringNoCch(blob, cch, opts);
}
/* BIFF5 override */
function parse_XLUnicodeString2(blob, length, opts) {
	if(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);
	var cch = blob.read_shift(1);
	if(cch === 0) { blob.l++; return ""; }
	return blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');
}
/* TODO: BIFF5 and lower, codepage awareness */
function write_XLUnicodeString(str, opts, o) {
	if(!o) o = new_buf(3 + 2 * str.length);
	o.write_shift(2, str.length);
	o.write_shift(1, 1);
	o.write_shift(31, str, 'utf16le');
	return o;
}

/* [MS-XLS] 2.5.61 ControlInfo */
function parse_ControlInfo(blob/*::, length, opts*/) {
	var flags = blob.read_shift(1);
	blob.l++;
	var accel = blob.read_shift(2);
	blob.l += 2;
	return [flags, accel];
}

/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */
function parse_URLMoniker(blob/*::, length, opts*/) {
	var len = blob.read_shift(4), start = blob.l;
	var extra = false;
	if(len > 24) {
		/* look ahead */
		blob.l += len - 24;
		if(blob.read_shift(16) === "795881f43b1d7f48af2c825dc4852763") extra = true;
		blob.l = start;
	}
	var url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,"");
	if(extra) blob.l += 24;
	return url;
}

/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */
function parse_FileMoniker(blob/*::, length*/) {
	var cAnti = blob.read_shift(2);
	var preamble = ""; while(cAnti-- > 0) preamble += "../";
	var ansiPath = blob.read_shift(0, 'lpstr-ansi');
	blob.l += 2; //var endServer = blob.read_shift(2);
	if(blob.read_shift(2) != 0xDEAD) throw new Error("Bad FileMoniker");
	var sz = blob.read_shift(4);
	if(sz === 0) return preamble + ansiPath.replace(/\\/g,"/");
	var bytes = blob.read_shift(4);
	if(blob.read_shift(2) != 3) throw new Error("Bad FileMoniker");
	var unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,"");
	return preamble + unicodePath;
}

/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */
function parse_HyperlinkMoniker(blob, length) {
	var clsid = blob.read_shift(16); length -= 16;
	switch(clsid) {
		case "e0c9ea79f9bace118c8200aa004ba90b": return parse_URLMoniker(blob, length);
		case "0303000000000000c000000000000046": return parse_FileMoniker(blob, length);
		default: throw new Error("Unsupported Moniker " + clsid);
	}
}

/* [MS-OSHARED] 2.3.7.9 HyperlinkString */
function parse_HyperlinkString(blob/*::, length*/) {
	var len = blob.read_shift(4);
	var o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, "") : "";
	return o;
}
function write_HyperlinkString(str/*:string*/, o) {
	if(!o) o = new_buf(6 + str.length * 2);
	o.write_shift(4, 1 + str.length);
	for(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));
	o.write_shift(2, 0);
	return o;
}

/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */
function parse_Hyperlink(blob, length)/*:Hyperlink*/ {
	var end = blob.l + length;
	var sVer = blob.read_shift(4);
	if(sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer);
	var flags = blob.read_shift(2);
	blob.l += 2;
	var displayName, targetFrameName, moniker, oleMoniker, Loc="", guid, fileTime;
	if(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);
	if(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);
	if((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);
	if((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);
	if(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);
	if(flags & 0x0020) guid = blob.read_shift(16);
	if(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);
	blob.l = end;
	var target = targetFrameName||moniker||oleMoniker||"";
	if(target && Loc) target+="#"+Loc;
	if(!target) target = "#" + Loc;
	if((flags & 0x0002) && target.charAt(0) == "/" && target.charAt(1) != "/") target = "file://" + target;
	var out = ({Target:target}/*:any*/);
	if(guid) out.guid = guid;
	if(fileTime) out.time = fileTime;
	if(displayName) out.Tooltip = displayName;
	return out;
}
function write_Hyperlink(hl) {
	var out = new_buf(512), i = 0;
	var Target = hl.Target;
	if(Target.slice(0,7) == "file://") Target = Target.slice(7);
	var hashidx = Target.indexOf("#");
	var F = hashidx > -1 ? 0x1f : 0x17;
	switch(Target.charAt(0)) { case "#": F=0x1c; break; case ".": F&=~2; break; }
	out.write_shift(4,2); out.write_shift(4, F);
	var data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);
	if(F == 0x1C) {
		Target = Target.slice(1);
		write_HyperlinkString(Target, out);
	} else if(F & 0x02) {
		data = "e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" ");
		for(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));
		var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;
		out.write_shift(4, 2*(Pretarget.length + 1));
		for(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));
		out.write_shift(2, 0);
		if(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): "", out);
	} else {
		data = "03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" ");
		for(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));
		var P = 0;
		while(Target.slice(P*3,P*3+3)=="../"||Target.slice(P*3,P*3+3)=="..\\") ++P;
		out.write_shift(2, P);
		out.write_shift(4, Target.length - 3 * P + 1);
		for(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);
		out.write_shift(1, 0);
		out.write_shift(2, 0xFFFF);
		out.write_shift(2, 0xDEAD);
		for(i = 0; i < 6; ++i) out.write_shift(4, 0);
	}
	return out.slice(0, out.l);
}

/* 2.5.178 LongRGBA */
function parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }

/* 2.5.177 LongRGB */
function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }


/* [MS-XLS] 2.5.19 */
function parse_XLSCell(blob, length, opts)/*:Cell*/ {
	var rw = blob.read_shift(2); // 0-indexed
	var col = blob.read_shift(2);
	var ret = ({r:rw, c:col, ixfe:0}/*:any*/);
	if(opts && opts.biff == 2 || length == 7) {
		/* TODO: pass back flags */
		var flags = blob.read_shift(1);
		ret.ixfe = flags & 0x3F;
		blob.l += 2;
		/*
		var ifntifmt = blob.read_shift(1);
		var ifmt = ifntifmt & 0x3f, ifnt = ifntifmt >> 6;
		var flags3 = blob.read_shift(1);
		*/
	} else ret.ixfe = blob.read_shift(2);
	return ret;
}
function write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {
	if(!o) o = new_buf(6);
	o.write_shift(2, R);
	o.write_shift(2, C);
	o.write_shift(2, ixfe||0);
	return o;
}

/* [MS-XLS] 2.5.134 */
function parse_frtHeader(blob) {
	var rt = blob.read_shift(2);
	var flags = blob.read_shift(2); // TODO: parse these flags
	blob.l += 8;
	return {type: rt, flags: flags};
}



function parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts); }

/* [MS-XLS] 2.5.344 */
function parse_XTI(blob, length, opts) {
	var w = opts.biff > 8 ? 4 : 2;
	var iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');
	return [iSupBook, itabFirst, itabLast];
}

/* [MS-XLS] 2.5.218 */
function parse_RkRec(blob) {
	var ixfe = blob.read_shift(2);
	var RK = parse_RkNumber(blob);
	return [ixfe, RK];
}

/* [MS-XLS] 2.5.1 */
function parse_AddinUdf(blob, length, opts) {
	blob.l += 4; length -= 4;
	var l = blob.l + length;
	var udfName = parse_ShortXLUnicodeString(blob, length, opts);
	var cb = blob.read_shift(2);
	l -= blob.l;
	if(cb !== l) throw new Error("Malformed AddinUdf: padding = " + l + " != " + cb);
	blob.l += cb;
	return udfName;
}

/* [MS-XLS] 2.5.209 TODO: Check sizes */
function parse_Ref8U(blob/*::, length*/) {
	var rwFirst = blob.read_shift(2);
	var rwLast = blob.read_shift(2);
	var colFirst = blob.read_shift(2);
	var colLast = blob.read_shift(2);
	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
}
function write_Ref8U(r/*:Range*/, o) {
	if(!o) o = new_buf(8);
	o.write_shift(2, r.s.r);
	o.write_shift(2, r.e.r);
	o.write_shift(2, r.s.c);
	o.write_shift(2, r.e.c);
	return o;
}

/* [MS-XLS] 2.5.211 */
function parse_RefU(blob/*::, length*/) {
	var rwFirst = blob.read_shift(2);
	var rwLast = blob.read_shift(2);
	var colFirst = blob.read_shift(1);
	var colLast = blob.read_shift(1);
	return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};
}

/* [MS-XLS] 2.5.207 */
var parse_Ref = parse_RefU;

/* [MS-XLS] 2.5.143 */
function parse_FtCmo(blob/*::, length*/) {
	blob.l += 4;
	var ot = blob.read_shift(2);
	var id = blob.read_shift(2);
	var flags = blob.read_shift(2);
	blob.l+=12;
	return [id, ot, flags];
}

/* [MS-XLS] 2.5.149 */
function parse_FtNts(blob) {
	var out = {};
	blob.l += 4;
	blob.l += 16; // GUID TODO
	out.fSharedNote = blob.read_shift(2);
	blob.l += 4;
	return out;
}

/* [MS-XLS] 2.5.142 */
function parse_FtCf(blob) {
	var out = {};
	blob.l += 4;
	blob.cf = blob.read_shift(2);
	return out;
}

/* [MS-XLS] 2.5.140 - 2.5.154 and friends */
function parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }
var FtTab = {
	0x00: parse_FtSkip,      /* FtEnd */
	0x04: parse_FtSkip,      /* FtMacro */
	0x05: parse_FtSkip,      /* FtButton */
	0x06: parse_FtSkip,      /* FtGmo */
	0x07: parse_FtCf,        /* FtCf */
	0x08: parse_FtSkip,      /* FtPioGrbit */
	0x09: parse_FtSkip,      /* FtPictFmla */
	0x0A: parse_FtSkip,      /* FtCbls */
	0x0B: parse_FtSkip,      /* FtRbo */
	0x0C: parse_FtSkip,      /* FtSbs */
	0x0D: parse_FtNts,       /* FtNts */
	0x0E: parse_FtSkip,      /* FtSbsFmla */
	0x0F: parse_FtSkip,      /* FtGboData */
	0x10: parse_FtSkip,      /* FtEdoData */
	0x11: parse_FtSkip,      /* FtRboData */
	0x12: parse_FtSkip,      /* FtCblsData */
	0x13: parse_FtSkip,      /* FtLbsData */
	0x14: parse_FtSkip,      /* FtCblsFmla */
	0x15: parse_FtCmo
};
function parse_FtArray(blob, length/*::, ot*/) {
	var tgt = blob.l + length;
	var fts = [];
	while(blob.l < tgt) {
		var ft = blob.read_shift(2);
		blob.l-=2;
		try {
			fts[ft] = FtTab[ft](blob, tgt - blob.l);
		} catch(e) { blob.l = tgt; return fts; }
	}
	if(blob.l != tgt) blob.l = tgt; //throw new Error("bad Object Ft-sequence");
	return fts;
}

/* --- 2.4 Records --- */

/* [MS-XLS] 2.4.21 */
function parse_BOF(blob, length) {
	var o = {BIFFVer:0, dt:0};
	o.BIFFVer = blob.read_shift(2); length -= 2;
	if(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }
	switch(o.BIFFVer) {
		case 0x0600: /* BIFF8 */
		case 0x0500: /* BIFF5 */
		case 0x0400: /* BIFF4 */
		case 0x0300: /* BIFF3 */
		case 0x0200: /* BIFF2 */
		case 0x0002: case 0x0007: /* BIFF2 */
			break;
		default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
	}

	blob.read_shift(length);
	return o;
}
function write_BOF(wb/*:Workbook*/, t/*:number*/, o) {
	var h = 0x0600, w = 16;
	switch(o.bookType) {
		case 'biff8': break;
		case 'biff5': h = 0x0500; w = 8; break;
		case 'biff4': h = 0x0004; w = 6; break;
		case 'biff3': h = 0x0003; w = 6; break;
		case 'biff2': h = 0x0002; w = 4; break;
		case 'xla': break;
		default: throw new Error("unsupported BIFF version");
	}
	var out = new_buf(w);
	out.write_shift(2, h);
	out.write_shift(2, t);
	if(w > 4) out.write_shift(2, 0x7262);
	if(w > 6) out.write_shift(2, 0x07CD);
	if(w > 8) {
		out.write_shift(2, 0xC009);
		out.write_shift(2, 0x0001);
		out.write_shift(2, 0x0706);
		out.write_shift(2, 0x0000);
	}
	return out;
}


/* [MS-XLS] 2.4.146 */
function parse_InterfaceHdr(blob, length) {
	if(length === 0) return 0x04b0;
	if((blob.read_shift(2))!==0x04b0){/* empty */}
	return 0x04b0;
}


/* [MS-XLS] 2.4.349 */
function parse_WriteAccess(blob, length, opts) {
	if(opts.enc) { blob.l += length; return ""; }
	var l = blob.l;
	// TODO: make sure XLUnicodeString doesnt overrun
	var UserName = parse_XLUnicodeString2(blob, 0, opts);
	blob.read_shift(length + l - blob.l);
	return UserName;
}
function write_WriteAccess(s/*:string*/, opts) {
	var b8 = !opts || opts.biff == 8;
	var o = new_buf(b8 ? 112 : 54);
	o.write_shift(opts.biff == 8 ? 2 : 1, 7);
	if(b8) o.write_shift(1, 0);
	o.write_shift(4, 0x33336853);
	o.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));
	while(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));
	return o;
}

/* [MS-XLS] 2.4.351 */
function parse_WsBool(blob, length, opts) {
	var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);
	return { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };
}

/* [MS-XLS] 2.4.28 */
function parse_BoundSheet8(blob, length, opts) {
	var name = "";
	if(opts.biff == 4) {
		name = parse_ShortXLUnicodeString(blob, 0, opts);
		if(name.length === 0) name = "Sheet1";
		return { name:name };
	}
	var pos = blob.read_shift(4);
	var hidden = blob.read_shift(1) & 0x03;
	var dt = blob.read_shift(1);
	switch(dt) {
		case 0: dt = 'Worksheet'; break;
		case 1: dt = 'Macrosheet'; break;
		case 2: dt = 'Chartsheet'; break;
		case 6: dt = 'VBAModule'; break;
	}
	name = parse_ShortXLUnicodeString(blob, 0, opts);
	if(name.length === 0) name = "Sheet1";
	return { pos:pos, hs:hidden, dt:dt, name:name };
}
function write_BoundSheet8(data, opts) {
	var w = (!opts || opts.biff >= 8 ? 2 : 1);
	var o = new_buf(8 + w * data.name.length);
	o.write_shift(4, data.pos);
	o.write_shift(1, data.hs || 0);
	o.write_shift(1, data.dt);
	o.write_shift(1, data.name.length);
	if(opts.biff >= 8) o.write_shift(1, 1);
	o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');
	var out = o.slice(0, o.l);
	out.l = o.l; return out;
}

/* [MS-XLS] 2.4.265 TODO */
function parse_SST(blob, length)/*:SST*/ {
	var end = blob.l + length;
	var cnt = blob.read_shift(4);
	var ucnt = blob.read_shift(4);
	var strs/*:SST*/ = ([]/*:any*/);
	for(var i = 0; i != ucnt && blob.l < end; ++i) {
		strs.push(parse_XLUnicodeRichExtendedString(blob));
	}
	strs.Count = cnt; strs.Unique = ucnt;
	return strs;
}
function write_SST(sst, opts) {
	var header = new_buf(8);
	header.write_shift(4, sst.Count);
	header.write_shift(4, sst.Unique);
	var strs = [];
	for(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);
	var o = bconcat([header].concat(strs));
	/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));
	return o;
}

/* [MS-XLS] 2.4.107 */
function parse_ExtSST(blob, length) {
	var extsst = {};
	extsst.dsst = blob.read_shift(2);
	blob.l += length-2;
	return extsst;
}


/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */
function parse_Row(blob) {
	var z = ({}/*:any*/);
	z.r = blob.read_shift(2);
	z.c = blob.read_shift(2);
	z.cnt = blob.read_shift(2) - z.c;
	var miyRw = blob.read_shift(2);
	blob.l += 4; // reserved(2), unused(2)
	var flags = blob.read_shift(1); // various flags
	blob.l += 3; // reserved(8), ixfe(12), flags(4)
	if(flags & 0x07) z.level = flags & 0x07;
	// collapsed: flags & 0x10
	if(flags & 0x20) z.hidden = true;
	if(flags & 0x40) z.hpt = miyRw / 20;
	return z;
}


/* [MS-XLS] 2.4.125 */
function parse_ForceFullCalculation(blob) {
	var header = parse_frtHeader(blob);
	if(header.type != 0x08A3) throw new Error("Invalid Future Record " + header.type);
	var fullcalc = blob.read_shift(4);
	return fullcalc !== 0x0;
}





/* [MS-XLS] 2.4.215 rt */
function parse_RecalcId(blob) {
	blob.read_shift(2);
	return blob.read_shift(4);
}

/* [MS-XLS] 2.4.87 */
function parse_DefaultRowHeight(blob, length, opts) {
	var f = 0;
	if(!(opts && opts.biff == 2)) {
		f = blob.read_shift(2);
	}
	var miyRw = blob.read_shift(2);
	if((opts && opts.biff == 2)) {
		f = 1 - (miyRw >> 15); miyRw &= 0x7fff;
	}
	var fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};
	return [fl, miyRw];
}

/* [MS-XLS] 2.4.345 TODO */
function parse_Window1(blob) {
	var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);
	var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);
	var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);
	return { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,
		FirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };
}
function write_Window1(/*::opts*/) {
	var o = new_buf(18);
	o.write_shift(2, 0);
	o.write_shift(2, 0);
	o.write_shift(2, 0x7260);
	o.write_shift(2, 0x44c0);
	o.write_shift(2, 0x38);
	o.write_shift(2, 0);
	o.write_shift(2, 0);
	o.write_shift(2, 1);
	o.write_shift(2, 0x01f4);
	return o;
}
/* [MS-XLS] 2.4.346 TODO */
function parse_Window2(blob, length, opts) {
	if(opts && opts.biff >= 2 && opts.biff < 5) return {};
	var f = blob.read_shift(2);
	return { RTL: f & 0x40 };
}
function write_Window2(view) {
	var o = new_buf(18), f = 0x6b6;
	if(view && view.RTL) f |= 0x40;
	o.write_shift(2, f);
	o.write_shift(4, 0);
	o.write_shift(4, 64);
	o.write_shift(4, 0);
	o.write_shift(4, 0);
	return o;
}

/* [MS-XLS] 2.4.189 TODO */
function parse_Pane(/*blob, length, opts*/) {
}

/* [MS-XLS] 2.4.122 TODO */
function parse_Font(blob, length, opts) {
	var o/*:any*/ = {
		dyHeight: blob.read_shift(2),
		fl: blob.read_shift(2)
	};
	switch((opts && opts.biff) || 8) {
		case 2: break;
		case 3: case 4: blob.l += 2; break;
		default: blob.l += 10; break;
	}
	o.name = parse_ShortXLUnicodeString(blob, 0, opts);
	return o;
}
function write_Font(data, opts) {
	var name = data.name || "Arial";
	var b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));
	var o = new_buf(w);
	o.write_shift(2, (data.sz || 12) * 20);
	o.write_shift(4, 0);
	o.write_shift(2, 400);
	o.write_shift(4, 0);
	o.write_shift(2, 0);
	o.write_shift(1, name.length);
	if(!b5) o.write_shift(1, 1);
	o.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? "sbcs" : "utf16le"));
	return o;
}

/* [MS-XLS] 2.4.149 */
function parse_LabelSst(blob, length, opts) {
	var cell = parse_XLSCell(blob, length, opts);
	cell.isst = blob.read_shift(4);
	return cell;
}
function write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {
	var o = new_buf(10);
	write_XLSCell(R, C, os, o);
	o.write_shift(4, v);
	return o;
}

/* [MS-XLS] 2.4.148 */
function parse_Label(blob, length, opts) {
	if(opts.biffguess && opts.biff == 2) opts.biff = 5;
	var target = blob.l + length;
	var cell = parse_XLSCell(blob, length, opts);
	var str = parse_XLUnicodeString(blob, target - blob.l, opts);
	cell.val = str;
	return cell;
}
function write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {
	var b8 = !opts || opts.biff == 8;
	var o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);
	write_XLSCell(R, C, os, o);
	o.write_shift(2, v.length);
	if(b8) o.write_shift(1, 1);
	o.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');
	return o;
}


/* [MS-XLS] 2.4.126 Number Formats */
function parse_Format(blob, length, opts) {
	var numFmtId = blob.read_shift(2);
	var fmtstr = parse_XLUnicodeString2(blob, 0, opts);
	return [numFmtId, fmtstr];
}
function write_Format(i/*:number*/, f/*:string*/, opts, o) {
	var b5 = (opts && (opts.biff == 5));
	if(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));
	o.write_shift(2, i);
	o.write_shift((b5 ? 1 : 2), f.length);
	if(!b5) o.write_shift(1, 1);
	o.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));
	var out = (o.length > o.l) ? o.slice(0, o.l) : o;
	if(out.l == null) out.l = out.length;
	return out;
}
var parse_BIFF2Format = parse_XLUnicodeString2;
function write_BIFF2Format(f/*:string*/) {
	var o = new_buf(1 + f.length);
	o.write_shift(1, f.length);
	o.write_shift(f.length, f, "sbcs");
	return o;
}
function write_BIFF4Format(f/*:string*/) {
	var o = new_buf(3 + f.length);
	o.l += 2;
	o.write_shift(1, f.length);
	o.write_shift(f.length, f, "sbcs");
	return o;
}

/* [MS-XLS] 2.4.90 */
function parse_Dimensions(blob, length, opts) {
	var end = blob.l + length;
	var w = opts.biff == 8 || !opts.biff ? 4 : 2;
	var r = blob.read_shift(w), R = blob.read_shift(w);
	var c = blob.read_shift(2), C = blob.read_shift(2);
	blob.l = end;
	return {s: {r:r, c:c}, e: {r:R, c:C}};
}
function write_Dimensions(range, opts) {
	var w = opts.biff == 8 || !opts.biff ? 4 : 2;
	var o = new_buf(2*w + 6);
	o.write_shift(w, range.s.r);
	o.write_shift(w, range.e.r + 1);
	o.write_shift(2, range.s.c);
	o.write_shift(2, range.e.c + 1);
	o.write_shift(2, 0);
	return o;
}

/* [MS-XLS] 2.4.220 */
function parse_RK(blob) {
	var rw = blob.read_shift(2), col = blob.read_shift(2);
	var rkrec = parse_RkRec(blob);
	return {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};
}

/* [MS-XLS] 2.4.175 */
function parse_MulRk(blob, length) {
	var target = blob.l + length - 2;
	var rw = blob.read_shift(2), col = blob.read_shift(2);
	var rkrecs = [];
	while(blob.l < target) rkrecs.push(parse_RkRec(blob));
	if(blob.l !== target) throw new Error("MulRK read error");
	var lastcol = blob.read_shift(2);
	if(rkrecs.length != lastcol - col + 1) throw new Error("MulRK length mismatch");
	return {r:rw, c:col, C:lastcol, rkrec:rkrecs};
}
/* [MS-XLS] 2.4.174 */
function parse_MulBlank(blob, length) {
	var target = blob.l + length - 2;
	var rw = blob.read_shift(2), col = blob.read_shift(2);
	var ixfes = [];
	while(blob.l < target) ixfes.push(blob.read_shift(2));
	if(blob.l !== target) throw new Error("MulBlank read error");
	var lastcol = blob.read_shift(2);
	if(ixfes.length != lastcol - col + 1) throw new Error("MulBlank length mismatch");
	return {r:rw, c:col, C:lastcol, ixfe:ixfes};
}

/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */
function parse_CellStyleXF(blob, length, style, opts) {
	var o = {};
	var a = blob.read_shift(4), b = blob.read_shift(4);
	var c = blob.read_shift(4), d = blob.read_shift(2);
	o.patternType = XLSFillPattern[c >> 26];

	if(!opts.cellStyles) return o;
	o.alc = a & 0x07;
	o.fWrap = (a >> 3) & 0x01;
	o.alcV = (a >> 4) & 0x07;
	o.fJustLast = (a >> 7) & 0x01;
	o.trot = (a >> 8) & 0xFF;
	o.cIndent = (a >> 16) & 0x0F;
	o.fShrinkToFit = (a >> 20) & 0x01;
	o.iReadOrder = (a >> 22) & 0x02;
	o.fAtrNum = (a >> 26) & 0x01;
	o.fAtrFnt = (a >> 27) & 0x01;
	o.fAtrAlc = (a >> 28) & 0x01;
	o.fAtrBdr = (a >> 29) & 0x01;
	o.fAtrPat = (a >> 30) & 0x01;
	o.fAtrProt = (a >> 31) & 0x01;

	o.dgLeft = b & 0x0F;
	o.dgRight = (b >> 4) & 0x0F;
	o.dgTop = (b >> 8) & 0x0F;
	o.dgBottom = (b >> 12) & 0x0F;
	o.icvLeft = (b >> 16) & 0x7F;
	o.icvRight = (b >> 23) & 0x7F;
	o.grbitDiag = (b >> 30) & 0x03;

	o.icvTop = c & 0x7F;
	o.icvBottom = (c >> 7) & 0x7F;
	o.icvDiag = (c >> 14) & 0x7F;
	o.dgDiag = (c >> 21) & 0x0F;

	o.icvFore = d & 0x7F;
	o.icvBack = (d >> 7) & 0x7F;
	o.fsxButton = (d >> 14) & 0x01;
	return o;
}
//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}
//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}

/* [MS-XLS] 2.4.353 TODO: actually do this right */
function parse_XF(blob, length, opts) {
	var o = {};
	o.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);
	o.fStyle = (o.flags >> 2) & 0x01;
	length -= 6;
	o.data = parse_CellStyleXF(blob, length, o.fStyle, opts);
	return o;
}
function write_XF(data, ixfeP, opts, o) {
	var b5 = (opts && (opts.biff == 5));
	if(!o) o = new_buf(b5 ? 16 : 20);
	o.write_shift(2, 0);
	if(data.style) {
		o.write_shift(2, (data.numFmtId||0));
		o.write_shift(2, 0xFFF4);
	} else {
		o.write_shift(2, (data.numFmtId||0));
		o.write_shift(2, (ixfeP<<4));
	}
	var f = 0;
	if(data.numFmtId > 0 && b5) f |= 0x0400;
	o.write_shift(4, f);
	o.write_shift(4, 0);
	if(!b5) o.write_shift(4, 0);
	o.write_shift(2, 0);
	return o;
}
function parse_BIFF2XF(blob/*::, length, opts*/) {
	var o = {};
	o.ifnt = blob.read_shift(1); blob.l++; o.flags = blob.read_shift(1);
	o.numFmtId = o.flags & 0x3F; o.flags>>=6;
	o.fStyle = 0;
	o.data = {}; // TODO
	return o;
}
function write_BIFF2XF(xf) {
	var o = new_buf(4);
	o.l+=2;
	o.write_shift(1, xf.numFmtId);
	o.l++;
	return o;
}
function write_BIFF3XF(xf) {
	var o = new_buf(12);
	o.l++;
	o.write_shift(1, xf.numFmtId);
	o.l += 10;
	return o;
}
/* TODO: check other fields */
var write_BIFF4XF = write_BIFF3XF;
function parse_BIFF3XF(blob/*::, length, opts*/) {
	var o = {};
	o.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);
	o.fStyle = (o.flags >> 2) & 0x01;
	o.data = {}; // TODO
	return o;
}
function parse_BIFF4XF(blob/*::, length, opts*/) {
	var o = {};
	o.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);
	o.fStyle = (o.flags >> 2) & 0x01;
	o.data = {}; // TODO
	return o;
}

/* [MS-XLS] 2.4.134 */
function parse_Guts(blob) {
	blob.l += 4;
	var out = [blob.read_shift(2), blob.read_shift(2)];
	if(out[0] !== 0) out[0]--;
	if(out[1] !== 0) out[1]--;
	if(out[0] > 7 || out[1] > 7) throw new Error("Bad Gutters: " + out.join("|"));
	return out;
}
function write_Guts(guts/*:Array<number>*/) {
	var o = new_buf(8);
	o.write_shift(4, 0);
	o.write_shift(2, guts[0] ? guts[0] + 1 : 0);
	o.write_shift(2, guts[1] ? guts[1] + 1 : 0);
	return o;
}

/* [MS-XLS] 2.4.24 */
function parse_BoolErr(blob, length, opts) {
	var cell = parse_XLSCell(blob, 6, opts);
	var val = parse_Bes(blob, 2);
	cell.val = val;
	cell.t = (val === true || val === false) ? 'b' : 'e';
	return cell;
}
function write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {
	var o = new_buf(8);
	write_XLSCell(R, C, os, o);
	write_Bes(v, t, o);
	return o;
}

/* [MS-XLS] 2.4.180 Number */
function parse_Number(blob, length, opts) {
	if(opts.biffguess && opts.biff == 2) opts.biff = 5;
	var cell = parse_XLSCell(blob, 6, opts);
	var xnum = parse_Xnum(blob, 8);
	cell.val = xnum;
	return cell;
}
function write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {
	var o = new_buf(14);
	write_XLSCell(R, C, os, o);
	write_Xnum(v, o);
	return o;
}

var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136

/* [MS-XLS] 2.4.271 */
function parse_SupBook(blob, length, opts) {
	var end = blob.l + length;
	var ctab = blob.read_shift(2);
	var cch = blob.read_shift(2);
	opts.sbcch = cch;
	if(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];
	if(cch < 0x01 || cch >0xff) throw new Error("Unexpected SupBook type: "+cch);
	var virtPath = parse_XLUnicodeStringNoCch(blob, cch);
	/* TODO: 2.5.277 Virtual Path */
	var rgst = [];
	while(end > blob.l) rgst.push(parse_XLUnicodeString(blob));
	return [cch, ctab, virtPath, rgst];
}

/* [MS-XLS] 2.4.105 TODO */
function parse_ExternName(blob, length, opts) {
	var flags = blob.read_shift(2);
	var body;
	var o = ({
		fBuiltIn: flags & 0x01,
		fWantAdvise: (flags >>> 1) & 0x01,
		fWantPict: (flags >>> 2) & 0x01,
		fOle: (flags >>> 3) & 0x01,
		fOleLink: (flags >>> 4) & 0x01,
		cf: (flags >>> 5) & 0x3FF,
		fIcon: flags >>> 15 & 0x01
	}/*:any*/);
	if(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);
	//else throw new Error("unsupported SupBook cch: " + opts.sbcch);
	o.body = body || blob.read_shift(length-2);
	if(typeof body === "string") o.Name = body;
	return o;
}

/* [MS-XLS] 2.4.150 TODO */
function parse_Lbl(blob, length, opts) {
	var target = blob.l + length;
	var flags = blob.read_shift(2);
	var chKey = blob.read_shift(1);
	var cch = blob.read_shift(1);
	var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
	var itab = 0;
	if(!opts || opts.biff >= 5) {
		if(opts.biff != 5) blob.l += 2;
		itab = blob.read_shift(2);
		if(opts.biff == 5) blob.l += 2;
		blob.l += 4;
	}
	var name = parse_XLUnicodeStringNoCch(blob, cch, opts);
	if(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];
	var npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;
	/*jshint -W018 */
	var rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);
	/*jshint +W018 */
	return {
		chKey: chKey,
		Name: name,
		itab: itab,
		rgce: rgce
	};
}

/* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */
function parse_ExternSheet(blob, length, opts) {
	if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);
	/* see issue 2907 */
	if(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts);
	var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);
	while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));
		// [iSupBook, itabFirst, itabLast];
	if(blob.l != target) throw new Error("Bad ExternSheet: " + blob.l + " != " + target);
	return o;
}
function parse_BIFF5ExternSheet(blob, length, opts) {
	if(blob[blob.l + 1] == 0x03) blob[blob.l]++;
	var o = parse_ShortXLUnicodeString(blob, length, opts);
	return o.charCodeAt(0) == 0x03 ? o.slice(1) : o;
}

/* [MS-XLS] 2.4.176 TODO: check older biff */
function parse_NameCmt(blob, length, opts) {
	if(opts.biff < 8) { blob.l += length; return; }
	var cchName = blob.read_shift(2);
	var cchComment = blob.read_shift(2);
	var name = parse_XLUnicodeStringNoCch(blob, cchName, opts);
	var comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);
	return [name, comment];
}

/* [MS-XLS] 2.4.260 */
function parse_ShrFmla(blob, length, opts) {
	var ref = parse_RefU(blob, 6);
	blob.l++;
	var cUse = blob.read_shift(1);
	length -= 8;
	return [parse_SharedParsedFormula(blob, length, opts), cUse, ref];
}

/* [MS-XLS] 2.4.4 TODO */
function parse_Array(blob, length, opts) {
	var ref = parse_Ref(blob, 6);
	/* TODO: fAlwaysCalc */
	switch(opts.biff) {
		case 2: blob.l ++; length -= 7; break;
		case 3: case 4: blob.l += 2; length -= 8; break;
		default: blob.l += 6; length -= 12;
	}
	return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];
}

/* [MS-XLS] 2.4.173 */
function parse_MTRSettings(blob) {
	var fMTREnabled = blob.read_shift(4) !== 0x00;
	var fUserSetThreadCount = blob.read_shift(4) !== 0x00;
	var cUserThreadCount = blob.read_shift(4);
	return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];
}

/* [MS-XLS] 2.5.186 */
function parse_NoteSh(blob, length, opts) {
	var row = blob.read_shift(2), col = blob.read_shift(2);
	var flags = blob.read_shift(2), idObj = blob.read_shift(2);
	var stAuthor = parse_XLUnicodeString2(blob, 0, opts);
	return [{r:row,c:col}, stAuthor, idObj, flags];
}

/* [MS-XLS] 2.4.179 */
function parse_Note(blob, length, opts) {
	if(opts && (opts.biff < 8)) {
		var row = blob.read_shift(2), col = blob.read_shift(2);
		if(row == 0xFFFF || row == -1) return; // TODO: test continuation
		var cch = blob.read_shift(2);
		var cmnt = blob.read_shift(Math.min(cch,2048), 'cpstr');
		return [{r:row, c:col}, cmnt];
	}
	/* TODO: Support revisions */
	return parse_NoteSh(blob, length, opts);
}
function write_NOTE_BIFF2(text/*:string*/, R/*:number*/, C/*:number*/, len/*?:number*/) {
	var o = new_buf(6 + (len || text.length));
	o.write_shift(2, R);
	o.write_shift(2, C);
	o.write_shift(2, len || text.length);
	o.write_shift(text.length, text, "sbcs");
	return o;
}

/* [MS-XLS] 2.4.168 */
function parse_MergeCells(blob, length)/*:Array<Range>*/ {
	var merges/*:Array<Range>*/ = [];
	var cmcs = blob.read_shift(2);
	while (cmcs--) merges.push(parse_Ref8U(blob,length));
	return merges;
}
function write_MergeCells(merges/*:Array<Range>*/) {
	var o = new_buf(2 + merges.length * 8);
	o.write_shift(2, merges.length);
	for(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);
	return o;
}

/* [MS-XLS] 2.4.181 TODO: parse all the things! */
function parse_Obj(blob, length, opts) {
	if(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);
	var cmo = parse_FtCmo(blob, 22); // id, ot, flags
	var fts = parse_FtArray(blob, length-22, cmo[1]);
	return { cmo: cmo, ft:fts };
}
/* from older spec */
var parse_BIFF5OT = {
0x08: function(blob, length) {
	var tgt = blob.l + length;
	blob.l += 10; // todo
	var cf = blob.read_shift(2);
	blob.l += 4;
	blob.l += 2; //var cbPictFmla = blob.read_shift(2);
	blob.l += 2;
	blob.l += 2; //var grbit = blob.read_shift(2);
	blob.l += 4;
	var cchName = blob.read_shift(1);
	blob.l += cchName; // TODO: stName
	blob.l = tgt; // TODO: fmla
	return { fmt:cf };
}
};

function parse_BIFF5Obj(blob, length, opts) {
	blob.l += 4; //var cnt = blob.read_shift(4);
	var ot = blob.read_shift(2);
	var id = blob.read_shift(2);
	var grbit = blob.read_shift(2);
	blob.l += 2; //var colL = blob.read_shift(2);
	blob.l += 2; //var dxL = blob.read_shift(2);
	blob.l += 2; //var rwT = blob.read_shift(2);
	blob.l += 2; //var dyT = blob.read_shift(2);
	blob.l += 2; //var colR = blob.read_shift(2);
	blob.l += 2; //var dxR = blob.read_shift(2);
	blob.l += 2; //var rwB = blob.read_shift(2);
	blob.l += 2; //var dyB = blob.read_shift(2);
	blob.l += 2; //var cbMacro = blob.read_shift(2);
	blob.l += 6;
	length -= 36;
	var fts = [];
	fts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));
	return { cmo: [id, ot, grbit], ft:fts };
}

/* [MS-XLS] 2.4.329 TODO: parse properly */
function parse_TxO(blob, length, opts) {
	var s = blob.l;
	var texts = "";
try {
	blob.l += 4;
	var ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];
	var controlInfo; // eslint-disable-line no-unused-vars
	if([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;
	else controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars
	var cchText = blob.read_shift(2);
	/*var cbRuns = */blob.read_shift(2);
	/*var ifntEmpty = */parseuint16(blob, 2);
	var len = blob.read_shift(2);
	blob.l += len;
	//var fmla = parse_ObjFmla(blob, s + length - blob.l);

	for(var i = 1; i < blob.lens.length-1; ++i) {
		if(blob.l-s != blob.lens[i]) throw new Error("TxO: bad continue record");
		var hdr = blob[blob.l];
		var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);
		texts += t;
		if(texts.length >= (hdr ? cchText : 2*cchText)) break;
	}
	if(texts.length !== cchText && texts.length !== cchText*2) {
		throw new Error("cchText: " + cchText + " != " + texts.length);
	}

	blob.l = s + length;
	/* [MS-XLS] 2.5.272 TxORuns */
//	var rgTxoRuns = [];
//	for(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;
//	var cchText2 = blob.read_shift(2);
//	if(cchText2 !== cchText) throw new Error("TxOLastRun mismatch: " + cchText2 + " " + cchText);
//	blob.l += 6;
//	if(s + length != blob.l) throw new Error("TxO " + (s + length) + ", at " + blob.l);
	return { t: texts };
} catch(e) { blob.l = s + length; return { t: texts }; }
}

/* [MS-XLS] 2.4.140 */
function parse_HLink(blob, length) {
	var ref = parse_Ref8U(blob, 8);
	blob.l += 16; /* CLSID */
	var hlink = parse_Hyperlink(blob, length-24);
	return [ref, hlink];
}
function write_HLink(hl) {
	var O = new_buf(24);
	var ref = decode_cell(hl[0]);
	O.write_shift(2, ref.r); O.write_shift(2, ref.r);
	O.write_shift(2, ref.c); O.write_shift(2, ref.c);
	var clsid = "d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" ");
	for(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));
	return bconcat([O, write_Hyperlink(hl[1])]);
}


/* [MS-XLS] 2.4.141 */
function parse_HLinkTooltip(blob, length) {
	blob.read_shift(2);
	var ref = parse_Ref8U(blob, 8);
	var wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');
	wzTooltip = wzTooltip.replace(chr0,"");
	return [ref, wzTooltip];
}
function write_HLinkTooltip(hl) {
	var TT = hl[1].Tooltip;
	var O = new_buf(10 + 2 * (TT.length + 1));
	O.write_shift(2, 0x0800);
	var ref = decode_cell(hl[0]);
	O.write_shift(2, ref.r); O.write_shift(2, ref.r);
	O.write_shift(2, ref.c); O.write_shift(2, ref.c);
	for(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));
	O.write_shift(2, 0);
	return O;
}

/* [MS-XLS] 2.4.63 */
function parse_Country(blob)/*:[string|number, string|number]*/ {
	var o = [0,0], d;
	d = blob.read_shift(2); o[0] = CountryEnum[d] || d;
	d = blob.read_shift(2); o[1] = CountryEnum[d] || d;
	return o;
}
function write_Country(o) {
	if(!o) o = new_buf(4);
	o.write_shift(2, 0x01);
	o.write_shift(2, 0x01);
	return o;
}

/* [MS-XLS] 2.4.50 ClrtClient */
function parse_ClrtClient(blob) {
	var ccv = blob.read_shift(2);
	var o = [];
	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
	return o;
}

/* [MS-XLS] 2.4.188 */
function parse_Palette(blob) {
	var ccv = blob.read_shift(2);
	var o = [];
	while(ccv-->0) o.push(parse_LongRGB(blob, 8));
	return o;
}

/* [MS-XLS] 2.4.354 */
function parse_XFCRC(blob) {
	blob.l += 2;
	var o = {cxfs:0, crc:0};
	o.cxfs = blob.read_shift(2);
	o.crc = blob.read_shift(4);
	return o;
}

/* [MS-XLS] 2.4.53 TODO: parse flags */
/* [MS-XLSB] 2.4.323 TODO: parse flags */
function parse_ColInfo(blob, length, opts) {
	if(!opts.cellStyles) return parsenoop(blob, length);
	var w = opts && opts.biff >= 12 ? 4 : 2;
	var colFirst = blob.read_shift(w);
	var colLast = blob.read_shift(w);
	var coldx = blob.read_shift(w);
	var ixfe = blob.read_shift(w);
	var flags = blob.read_shift(2);
	if(w == 2) blob.l += 2;
	var o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);
	if(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;
	return o;
}
function write_ColInfo(col, idx) {
	var o = new_buf(12);
	o.write_shift(2, idx);
	o.write_shift(2, idx);
	o.write_shift(2, col.width * 256);
	o.write_shift(2, 0);
	var f = 0;
	if(col.hidden) f |= 1;
	o.write_shift(1, f);
	f = col.level || 0;
	o.write_shift(1, f);
	o.write_shift(2, 0);
	return o;
}

/* [MS-XLS] 2.4.257 */
function parse_Setup(blob, length) {
	var o = {};
	if(length < 32) return o;
	blob.l += 16;
	o.header = parse_Xnum(blob, 8);
	o.footer = parse_Xnum(blob, 8);
	blob.l += 2;
	return o;
}

/* [MS-XLS] 2.4.261 */
function parse_ShtProps(blob, length, opts) {
	var def = {area:false};
	if(opts.biff != 5) { blob.l += length; return def; }
	var d = blob.read_shift(1); blob.l += 3;
	if((d & 0x10)) def.area = true;
	return def;
}

/* [MS-XLS] 2.4.241 */
function write_RRTabId(n/*:number*/) {
	var out = new_buf(2 * n);
	for(var i = 0; i < n; ++i) out.write_shift(2, i+1);
	return out;
}

var parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */
var parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */
var parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */

/* --- Specific to versions before BIFF8 --- */
function parse_ImData(blob) {
	var cf = blob.read_shift(2);
	var env = blob.read_shift(2);
	var lcb = blob.read_shift(4);
	var o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};
	blob.l += lcb;
	return o;
}

function write_BIFF2Cell(out, r/*:number*/, c/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {
	if(!out) out = new_buf(7);
	out.write_shift(2, r);
	out.write_shift(2, c);
	out.write_shift(1, ixfe||0/* & 0x3F */);
	out.write_shift(1, ifmt||0/* & 0x3F */);
	out.write_shift(1, 0);
	return out;
}

/* BIFF2_??? where ??? is the name from [XLS] */
function parse_BIFF2STR(blob, length, opts) {
	if(opts.biffguess && opts.biff == 5) opts.biff = 2;
	var cell = parse_XLSCell(blob, 7, opts);
	var str = parse_XLUnicodeString2(blob, length-7, opts);
	cell.t = 'str';
	cell.val = str;
	return cell;
}

function parse_BIFF2NUM(blob, length, opts) {
	var cell = parse_XLSCell(blob, 7, opts);
	var num = parse_Xnum(blob, 8);
	cell.t = 'n';
	cell.val = num;
	return cell;
}
function write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/, ixfe, ifmt) {
	var out = new_buf(15);
	write_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);
	out.write_shift(8, val, 'f');
	return out;
}

function parse_BIFF2INT(blob, length, opts) {
	var cell = parse_XLSCell(blob, 7, opts);
	var num = blob.read_shift(2);
	cell.t = 'n';
	cell.val = num;
	return cell;
}
function write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {
	var out = new_buf(9);
	write_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);
	out.write_shift(2, val);
	return out;
}

function parse_BIFF2STRING(blob) {
	var cch = blob.read_shift(1);
	if(cch === 0) { blob.l++; return ""; }
	return blob.read_shift(cch, 'sbcs-cont');
}

function parse_BIFF2BOOLERR(blob, length, opts) {
	var bestart = blob.l + 7;
	var cell = parse_XLSCell(blob, 6, opts);
	blob.l = bestart;
	var val = parse_Bes(blob, 2);
	cell.val = val;
	cell.t = (val === true || val === false) ? 'b' : 'e';
	return cell;
}

/* TODO: convert to BIFF8 font struct */
function parse_BIFF2FONTXTRA(blob, length) {
	blob.l += 6; // unknown
	blob.l += 2; // font weight "bls"
	blob.l += 1; // charset
	blob.l += 3; // unknown
	blob.l += 1; // font family
	blob.l += length - 13;
}

/* TODO: parse rich text runs */
function parse_RString(blob, length, opts) {
	var end = blob.l + length;
	var cell = parse_XLSCell(blob, 6, opts);
	var cch = blob.read_shift(2);
	var str = parse_XLUnicodeStringNoCch(blob, cch, opts);
	blob.l = end;
	cell.t = 'str';
	cell.val = str;
	return cell;
}

function parse_BIFF4SheetInfo(blob/*::, length, opts*/) {
	var flags = blob.read_shift(4);
	var cch = blob.read_shift(1), name = blob.read_shift(cch, "sbcs");
	if(name.length === 0) name = "Sheet1";
	return { flags: flags, name:name };
}var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];
var DBF = /*#__PURE__*/(function() {
var dbf_codepage_map = {
	/* Code Pages Supported by Visual FoxPro */
	0x01:   437,           0x02:   850,
	0x03:  1252,           0x04: 10000,
	0x64:   852,           0x65:   866,
	0x66:   865,           0x67:   861,
	0x68:   895,           0x69:   620,
	0x6A:   737,           0x6B:   857,
	0x78:   950,           0x79:   949,
	0x7A:   936,           0x7B:   932,
	0x7C:   874,           0x7D:  1255,
	0x7E:  1256,           0x96: 10007,
	0x97: 10029,           0x98: 10006,
	0xC8:  1250,           0xC9:  1251,
	0xCA:  1254,           0xCB:  1253,

	/* shapefile DBF extension */
	0x00: 20127,           0x08:   865,
	0x09:   437,           0x0A:   850,
	0x0B:   437,           0x0D:   437,
	0x0E:   850,           0x0F:   437,
	0x10:   850,           0x11:   437,
	0x12:   850,           0x13:   932,
	0x14:   850,           0x15:   437,
	0x16:   850,           0x17:   865,
	0x18:   437,           0x19:   437,
	0x1A:   850,           0x1B:   437,
	0x1C:   863,           0x1D:   850,
	0x1F:   852,           0x22:   852,
	0x23:   852,           0x24:   860,
	0x25:   850,           0x26:   866,
	0x37:   850,           0x40:   852,
	0x4D:   936,           0x4E:   949,
	0x4F:   950,           0x50:   874,
	0x57:  1252,           0x58:  1252,
	0x59:  1252,           0x6C:   863,
	0x86:   737,           0x87:   852,
	0x88:   857,           0xCC:  1257,

	0xFF: 16969
};
var dbf_reverse_map = evert({
	0x01:   437,           0x02:   850,
	0x03:  1252,           0x04: 10000,
	0x64:   852,           0x65:   866,
	0x66:   865,           0x67:   861,
	0x68:   895,           0x69:   620,
	0x6A:   737,           0x6B:   857,
	0x78:   950,           0x79:   949,
	0x7A:   936,           0x7B:   932,
	0x7C:   874,           0x7D:  1255,
	0x7E:  1256,           0x96: 10007,
	0x97: 10029,           0x98: 10006,
	0xC8:  1250,           0xC9:  1251,
	0xCA:  1254,           0xCB:  1253,
	0x00: 20127
});
/* TODO: find an actual specification */
function dbf_to_aoa(buf, opts)/*:AOA*/ {
	var out/*:AOA*/ = [];
	var d/*:Block*/ = (new_raw_buf(1)/*:any*/);
	switch(opts.type) {
		case 'base64': d = s2a(Base64_decode(buf)); break;
		case 'binary': d = s2a(buf); break;
		case 'buffer':
		case 'array': d = buf; break;
	}
	prep_blob(d, 0);

	/* header */
	var ft = d.read_shift(1);
	var memo = !!(ft & 0x88);
	var vfp = false, l7 = false;
	switch(ft) {
		case 0x02: break; // dBASE II
		case 0x03: break; // dBASE III
		case 0x30: vfp = true; memo = true; break; // VFP
		case 0x31: vfp = true; memo = true; break; // VFP with autoincrement
		// 0x43 dBASE IV SQL table files
		// 0x63 dBASE IV SQL system files
		case 0x83: break; // dBASE III with memo
		case 0x8B: break; // dBASE IV with memo
		case 0x8C: l7 = true; break; // dBASE Level 7 with memo
		// case 0xCB dBASE IV SQL table files with memo
		case 0xF5: break; // FoxPro 2.x with memo
		// case 0xFB FoxBASE
		default: throw new Error("DBF Unsupported Version: " + ft.toString(16));
	}

	var nrow = 0, fpos = 0x0209;
	if(ft == 0x02) nrow = d.read_shift(2);
	d.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD
	if(ft != 0x02) nrow = d.read_shift(4);
	if(nrow > 1048576) nrow = 1e6;

	if(ft != 0x02) fpos = d.read_shift(2); // header length
	var rlen = d.read_shift(2); // record length

	var /*flags = 0,*/ current_cp = opts.codepage || 1252;
	if(ft != 0x02) { // 20 reserved bytes
		d.l+=16;
		/*flags = */d.read_shift(1);
		//if(memo && ((flags & 0x02) === 0)) throw new Error("DBF Flags " + flags.toString(16) + " ft " + ft.toString(16));

		/* codepage present in FoxPro and dBASE Level 7 */
		if(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];
		d.l+=1;

		d.l+=2;
	}
	if(l7) d.l += 36; // Level 7: 32 byte "Language driver name", 4 byte reserved

/*:: type DBFField = { name:string; len:number; type:string; } */
	var fields/*:Array<DBFField>*/ = [], field/*:DBFField*/ = ({}/*:any*/);
	var hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));
	var ww = l7 ? 32 : 11;
	while(d.l < hend && d[d.l] != 0x0d) {
		field = ({}/*:any*/);
		field.name = (typeof $cptable !== "undefined" ? $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)) : a2s(d.slice(d.l, d.l + ww))).replace(/[\u0000\r\n][\S\s]*$/g,"");
		d.l += ww;
		field.type = String.fromCharCode(d.read_shift(1));
		if(ft != 0x02 && !l7) field.offset = d.read_shift(4);
		field.len = d.read_shift(1);
		if(ft == 0x02) field.offset = d.read_shift(2);
		field.dec = d.read_shift(1);
		if(field.name.length) fields.push(field);
		if(ft != 0x02) d.l += l7 ? 13 : 14;
		switch(field.type) {
			case 'B': // Double (VFP) / Binary (dBASE L7)
				if((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);
				break;
			case 'G': // General (FoxPro and dBASE L7)
			case 'P': // Picture (FoxPro and dBASE L7)
				if(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);
				break;
			case '+': // Autoincrement (dBASE L7 only)
			case '0': // _NullFlags (VFP only)
			case '@': // Timestamp (dBASE L7 only)
			case 'C': // Character (dBASE II)
			case 'D': // Date (dBASE III)
			case 'F': // Float (dBASE IV)
			case 'I': // Long (VFP and dBASE L7)
			case 'L': // Logical (dBASE II)
			case 'M': // Memo (dBASE III)
			case 'N': // Number (dBASE II)
			case 'O': // Double (dBASE L7 only)
			case 'T': // Datetime (VFP only)
			case 'Y': // Currency (VFP only)
				break;
			default: throw new Error('Unknown Field Type: ' + field.type);
		}
	}

	if(d[d.l] !== 0x0D) d.l = fpos-1;
	if(d.read_shift(1) !== 0x0D) throw new Error("DBF Terminator not found " + d.l + " " + d[d.l]);
	d.l = fpos;

	/* data */
	var R = 0, C = 0;
	out[0] = [];
	for(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;
	while(nrow-- > 0) {
		if(d[d.l] === 0x2A) {
			// TODO: record marked as deleted -- create a hidden row?
			d.l+=rlen;
			continue;
		}
		++d.l;
		out[++R] = []; C = 0;
		for(C = 0; C != fields.length; ++C) {
			var dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;
			prep_blob(dd, 0);
			var s = typeof $cptable !== "undefined" ? $cptable.utils.decode(current_cp, dd) : a2s(dd);
			switch(fields[C].type) {
				case 'C':
					// NOTE: it is conventional to write '  /  /  ' for empty dates
					if(s.trim().length) out[R][C] = s.replace(/([^\s])\s+$/,"$1");
					break;
				case 'D':
					if(s.length === 8) {
						out[R][C] = new Date(Date.UTC(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8), 0, 0, 0, 0));
						if(!(opts && opts.UTC)) { out[R][C] = utc_to_local(out[R][C]); }
					}
					else out[R][C] = s;
					break;
				case 'F': out[R][C] = parseFloat(s.trim()); break;
				case '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;
				case 'L': switch(s.trim().toUpperCase()) {
					case 'Y': case 'T': out[R][C] = true; break;
					case 'N': case 'F': out[R][C] = false; break;
					case '': case '\x00': case '?': break;
					default: throw new Error("DBF Unrecognized L:|" + s + "|");
					} break;
				case 'M': /* TODO: handle memo files */
					if(!memo) throw new Error("DBF Unexpected MEMO for type " + ft.toString(16));
					out[R][C] = "##MEMO##" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));
					break;
				case 'N':
					s = s.replace(/\u0000/g,"").trim();
					// NOTE: dBASE II interprets "  .  " as 0
					if(s && s != ".") out[R][C] = +s || 0; break;
				case '@':
					// NOTE: dBASE specs appear to be incorrect
					out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);
					break;
				case 'T': {
					var hi = dd.read_shift(4), lo = dd.read_shift(4);
					if(hi == 0 && lo == 0) break;
					out[R][C] = new Date((hi - 0x253D8C) * 0x5265C00 + lo);
					if(!(opts && opts.UTC)) out[R][C] = utc_to_local(out[R][C]);
				} break;
				case 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;
				case 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;
				case 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }
					/* falls through */
				case 'G': case 'P': dd.l += fields[C].len; break;
				case '0':
					if(fields[C].name === '_NullFlags') break;
					/* falls through */
				default: throw new Error("DBF Unsupported data type " + fields[C].type);
			}
		}
	}
	if(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error("DBF EOF Marker missing " + (d.l-1) + " of " + d.length + " " + d[d.l-1].toString(16));
	if(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);
	opts.DBF = fields;
	return out;
}

function dbf_to_sheet(buf, opts)/*:Worksheet*/ {
	var o = opts || {};
	if(!o.dateNF) o.dateNF = "yyyymmdd";
	var ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);
	ws["!cols"] = o.DBF.map(function(field) { return {
		wch: field.len,
		DBF: field
	};});
	delete o.DBF;
	return ws;
}

function dbf_to_workbook(buf, opts)/*:Workbook*/ {
	try {
		var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
		o.bookType = "dbf";
		return o;
	} catch(e) { if(opts && opts.WTF) throw e; }
	return ({SheetNames:[],Sheets:{}});
}

var _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };
function sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
	if(!ws["!ref"]) throw new Error("Cannot export empty sheet to DBF");
	var o = opts || {};
	var old_cp = current_codepage;
	if(+o.codepage >= 0) set_cp(+o.codepage);
	if(o.type == "string") throw new Error("Cannot write DBF to JS string");
	var ba = buf_array();
	var aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});
	var headers = aoa[0], data = aoa.slice(1), cols = ws["!cols"] || [];
	var i = 0, j = 0, hcnt = 0, rlen = 1;
	for(i = 0; i < headers.length; ++i) {
		if(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }
		if(headers[i] == null) continue;
		++hcnt;
		if(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);
		if(typeof headers[i] !== 'string') throw new Error("DBF Invalid column name " + headers[i] + " |" + (typeof headers[i]) + "|");
		if(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)
			if(headers.indexOf(headers[i] + "_" + j) == -1) { headers[i] += "_" + j; break; }
	}
	var range = safe_decode_range(ws['!ref']);
	var coltypes/*:Array<string>*/ = [];
	var colwidths/*:Array<number>*/ = [];
	var coldecimals/*:Array<number>*/ = [];
	for(i = 0; i <= range.e.c - range.s.c; ++i) {
		var guess = '', _guess = '', maxlen = 0;
		var col/*:Array<any>*/ = [];
		for(j=0; j < data.length; ++j) {
			if(data[j][i] != null) col.push(data[j][i]);
		}
		if(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }
		for(j = 0; j < col.length; ++j) {
			switch(typeof col[j]) {
				/* TODO: check if L2 compat is desired */
				case 'number': _guess = 'B'; break;
				case 'string': _guess = 'C'; break;
				case 'boolean': _guess = 'L'; break;
				case 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;
				default: _guess = 'C';
			}
			/* TODO: cache the values instead of encoding twice */
			maxlen = Math.max(maxlen, (typeof $cptable !== "undefined" && typeof col[j] == "string" ? $cptable.utils.encode(current_ansi, col[j]): String(col[j])).length);
			guess = guess && guess != _guess ? 'C' : _guess;
			//if(guess == 'C') break;
		}
		if(maxlen > 250) maxlen = 250;
		_guess = ((cols[i]||{}).DBF||{}).type;
		/* TODO: more fine grained control over DBF type resolution */
		if(_guess == 'C') {
			if(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;
		}
		if(guess == 'B' && _guess == 'N') {
			guess = 'N';
			coldecimals[i] = cols[i].DBF.dec;
			maxlen = cols[i].DBF.len;
		}
		colwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);
		rlen += colwidths[i];
		coltypes[i] = guess;
	}

	var h = ba.next(32);
	h.write_shift(4, 0x13021130);
	h.write_shift(4, data.length);
	h.write_shift(2, 296 + 32 * hcnt);
	h.write_shift(2, rlen);
	for(i=0; i < 4; ++i) h.write_shift(4, 0);
	var cp = +dbf_reverse_map[/*::String(*/current_codepage/*::)*/] || 0x03;
	h.write_shift(4, 0x00000000 | (cp<<8));
	if(dbf_codepage_map[cp] != +o.codepage) {
		if(o.codepage) console.error("DBF Unsupported codepage " + current_codepage + ", using 1252");
		current_codepage = 1252;
	}

	for(i = 0, j = 0; i < headers.length; ++i) {
		if(headers[i] == null) continue;
		var hf = ba.next(32);
		/* TODO: test how applications handle non-ASCII field names */
		var _f = (headers[i].slice(-10) + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00").slice(0, 11);
		hf.write_shift(1, _f, "sbcs");
		hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], "sbcs");
		hf.write_shift(4, j);
		hf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);
		hf.write_shift(1, coldecimals[i] || 0);
		hf.write_shift(1, 0x02);
		hf.write_shift(4, 0);
		hf.write_shift(1, 0);
		hf.write_shift(4, 0);
		hf.write_shift(4, 0);
		j += (colwidths[i] || _RLEN[coltypes[i]] || 0);
	}

	var hb = ba.next(264);
	hb.write_shift(4, 0x0000000D);
	for(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);
	for(i=0; i < data.length; ++i) {
		var rout = ba.next(rlen);
		rout.write_shift(1, 0);
		for(j=0; j<headers.length; ++j) {
			if(headers[j] == null) continue;
			switch(coltypes[j]) {
				case 'L': rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46); break;
				case 'B': rout.write_shift(8, data[i][j]||0, 'f'); break;
				case 'N':
					var _n = "0";
					if(typeof data[i][j] == "number") _n = data[i][j].toFixed(coldecimals[j]||0);
					if(_n.length > colwidths[j]) _n = _n.slice(0, colwidths[j]); // addresses decimal > width
					for(hcnt=0; hcnt < colwidths[j]-_n.length; ++hcnt) rout.write_shift(1, 0x20);
					rout.write_shift(1, _n, "sbcs");
					break;
				case 'D':
					if(!data[i][j]) rout.write_shift(8, "00000000", "sbcs");
					else {
						rout.write_shift(4, ("0000"+data[i][j].getFullYear()).slice(-4), "sbcs");
						rout.write_shift(2, ("00"+(data[i][j].getMonth()+1)).slice(-2), "sbcs");
						rout.write_shift(2, ("00"+data[i][j].getDate()).slice(-2), "sbcs");
					} break;
				case 'C':
					var _l = rout.l;
					var _s = String(data[i][j] != null ? data[i][j] : "").slice(0, colwidths[j]);
					rout.write_shift(1, _s, "cpstr");
					_l += colwidths[j] - rout.l;
					for(hcnt=0; hcnt < _l; ++hcnt) rout.write_shift(1, 0x20); break;
			}
		}
		// data
	}
	current_codepage = old_cp;
	ba.next(1).write_shift(1, 0x1A);
	return ba.end();
}
	return {
		to_workbook: dbf_to_workbook,
		to_sheet: dbf_to_sheet,
		from_sheet: sheet_to_dbf
	};
})();

var SYLK = /*#__PURE__*/(function() {
	/* TODO: stress test sequences */
	var sylk_escapes = ({
		AA:'À', BA:'Á', CA:'Â', DA:195, HA:'Ä', JA:197,
		AE:'È', BE:'É', CE:'Ê',         HE:'Ë',
		AI:'Ì', BI:'Í', CI:'Î',         HI:'Ï',
		AO:'Ò', BO:'Ó', CO:'Ô', DO:213, HO:'Ö',
		AU:'Ù', BU:'Ú', CU:'Û',         HU:'Ü',
		Aa:'à', Ba:'á', Ca:'â', Da:227, Ha:'ä', Ja:229,
		Ae:'è', Be:'é', Ce:'ê',         He:'ë',
		Ai:'ì', Bi:'í', Ci:'î',         Hi:'ï',
		Ao:'ò', Bo:'ó', Co:'ô', Do:245, Ho:'ö',
		Au:'ù', Bu:'ú', Cu:'û',         Hu:'ü',
		KC:'Ç', Kc:'ç', q:'æ',  z:'œ',  a:'Æ',  j:'Œ',
		DN:209, Dn:241, Hy:255,
		S:169,  c:170,  R:174,  "B ":180,
		0:176,  1:177,  2:178,
		3:179,  5:181,  6:182,
		7:183,  Q:185,  k:186,  b:208,  i:216,  l:222,  s:240,  y:248,
		"!":161, '"':162, "#":163, "(":164, "%":165, "'":167, "H ":168,
		"+":171, ";":187, "<":188, "=":189, ">":190, "?":191, "{":223
	}/*:any*/);
	var sylk_char_regex = new RegExp("\u001BN(" + keys(sylk_escapes).join("|").replace(/\|\|\|/, "|\\||").replace(/([?()+])/g,"\\$1").replace("{", "\\{") + "|\\|)", "gm");
	try {
		sylk_char_regex = new RegExp("\u001BN(" + keys(sylk_escapes).join("|").replace(/\|\|\|/, "|\\||").replace(/([?()+])/g,"\\$1") + "|\\|)", "gm");
	} catch(e) {}
	var sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == "number" ? _getansi(o) : o; };
	var decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };
	sylk_escapes["|"] = 254;
	/* TODO: evert the escape map */
	var encode_sylk_str = function($$) { return $$.replace(/\n/g, "\x1b :").replace(/\r/g, "\x1b ="); };
	/* https://oss.sheetjs.com/notes/sylk/ for more details */
	function sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {
		switch(opts.type) {
			case 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);
			case 'binary': return sylk_to_aoa_str(d, opts);
			case 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);
			case 'array': return sylk_to_aoa_str(cc2str(d), opts);
		}
		throw new Error("Unrecognized type " + opts.type);
	}
	function sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {
		var records = str.split(/[\n\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];
		var formats/*:Array<string>*/ = [];
		var next_cell_format/*:string|null*/ = null;
		var sht = {}, rowinfo/*:Array<RowInfo>*/ = [], colinfo/*:Array<ColInfo>*/ = [], cw/*:Array<string>*/ = [];
		var Mval = 0, j;
		var wb = { Workbook: { WBProps: {}, Names: [] } };
		if(+opts.codepage >= 0) set_cp(+opts.codepage);
		for (; ri !== records.length; ++ri) {
			Mval = 0;
			var rstr=records[ri].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);
			var record=rstr.replace(/;;/g, "\u0000").split(";").map(function(x) { return x.replace(/\u0000/g, ";"); });
			var RT=record[0], val;
			if(rstr.length > 0) switch(RT) {
			case 'ID': break; /* header */
			case 'E': break; /* EOF */
			case 'B': break; /* dimensions */
			case 'O': /* workbook options */
			for(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {
				case 'V': {
					var d1904 = parseInt(record[rj].slice(1), 10);
					// NOTE: it is technically an error if d1904 >= 5 or < 0
					if(d1904 >= 1 && d1904 <= 4) wb.Workbook.WBProps.date1904 = true;
				} break;
			} break;
			case 'W': break; /* window */
			case 'P':
				switch(record[1].charAt(0)){
					case 'P': formats.push(rstr.slice(3).replace(/;;/g, ";")); break;
				} break;
			case 'NN': { /* defined name */
				var nn = {Sheet: 0};
				for(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {
					case 'N': nn.Name = record[rj].slice(1); break;
					case 'E': nn.Ref = (opts && opts.sheet || "Sheet1") + "!" + rc_to_a1(record[rj].slice(1)); break;
				}
				wb.Workbook.Names.push(nn);
			} break;
			// case 'NE': // ??
			// case 'NU': // ??
			case 'C': /* cell */
			var C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1, formula = "", cell_t = "z";
			var cmnt = "";
			for(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {
				case 'A': cmnt = record[rj].slice(1); break; // TODO: comment
				case 'X': C = parseInt(record[rj].slice(1), 10)-1; C_seen_X = true; break;
				case 'Y':
					R = parseInt(record[rj].slice(1), 10)-1; if(!C_seen_X) C = 0;
					for(j = arr.length; j <= R; ++j) arr[j] = [];
					break;
				case 'K':
					val = record[rj].slice(1);
					if(val.charAt(0) === '"') { val = val.slice(1,val.length - 1); cell_t = "s"; }
					else if(val === 'TRUE' || val === 'FALSE') { val = val === 'TRUE'; cell_t = "b"; }
					else if(val.charAt(0) == "#" && RBErr[val] != null) { cell_t = "e"; val = RBErr[val]; }
					else if(!isNaN(fuzzynum(val))) {
						val = fuzzynum(val); cell_t = "n";
						if(next_cell_format !== null && fmt_is_date(next_cell_format) && opts.cellDates) {
							val = numdate(wb.Workbook.WBProps.date1904 ? val + 1462 : val); cell_t = typeof val == "number" ? "n" : "d";
						}
					}
					if(typeof $cptable !== 'undefined' && typeof val == "string" && ((opts||{}).type != "string") && (opts||{}).codepage) val = $cptable.utils.decode(opts.codepage, val);
					C_seen_K = true;
					break;
				case 'E':
					C_seen_E = true;
					formula = rc_to_a1(record[rj].slice(1), {r:R,c:C});
					break;
				case 'S':
					C_seen_S = true;
					break;
				case 'G': break; // unknown
				case 'R': _R = parseInt(record[rj].slice(1), 10)-1; break;
				case 'C': _C = parseInt(record[rj].slice(1), 10)-1; break;
				// case 'P': // ??
				// case 'D': // ??
				default: if(opts && opts.WTF) throw new Error("SYLK bad record " + rstr);
			}
			if(C_seen_K) {
				if(!arr[R][C]) arr[R][C] = { t: cell_t, v: val };
				else { arr[R][C].t = cell_t; arr[R][C].v = val; }
				if(next_cell_format) arr[R][C].z = next_cell_format;
				if(opts.cellText !== false && next_cell_format) arr[R][C].w = SSF_format(arr[R][C].z, arr[R][C].v, { date1904: wb.Workbook.WBProps.date1904 });
				next_cell_format = null;
			}
			if(C_seen_S) {
				if(C_seen_E) throw new Error("SYLK shared formula cannot have own formula");
				var shrbase = _R > -1 && arr[_R][_C];
				if(!shrbase || !shrbase[1]) throw new Error("SYLK shared formula cannot find base");
				formula = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});
			}
			if(formula) {
				if(!arr[R][C]) arr[R][C] = { t: 'n', f: formula };
				else arr[R][C].f = formula;
			}
			if(cmnt) {
				if(!arr[R][C]) arr[R][C] = { t: 'z' };
				arr[R][C].c = [{a:"SheetJSYLK", t: cmnt}];
			}
			break;
			case 'F': /* Format */
			var F_seen = 0;
			for(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {
				case 'X': C = parseInt(record[rj].slice(1), 10)-1; ++F_seen; break;
				case 'Y':
					R = parseInt(record[rj].slice(1), 10)-1; /*C = 0;*/
					for(j = arr.length; j <= R; ++j) arr[j] = [];
					break;
				case 'M': Mval = parseInt(record[rj].slice(1), 10) / 20; break;
				case 'F': break; /* ??? */
				case 'G': break; /* hide grid */
				case 'P':
					next_cell_format = formats[parseInt(record[rj].slice(1), 10)];
					break;
				case 'S': break; /* cell style */
				case 'D': break; /* column */
				case 'N': break; /* font */
				case 'W':
					cw = record[rj].slice(1).split(" ");
					for(j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {
						Mval = parseInt(cw[2], 10);
						colinfo[j-1] = Mval === 0 ? {hidden:true}: {wch:Mval};
					} break;
				case 'C': /* default column format */
					C = parseInt(record[rj].slice(1), 10)-1;
					if(!colinfo[C]) colinfo[C] = {};
					break;
				case 'R': /* row properties */
					R = parseInt(record[rj].slice(1), 10)-1;
					if(!rowinfo[R]) rowinfo[R] = {};
					if(Mval > 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }
					else if(Mval === 0) rowinfo[R].hidden = true;
					break;
				// case 'K': // ??
				// case 'E': // ??
				default: if(opts && opts.WTF) throw new Error("SYLK bad record " + rstr);
			}
			if(F_seen < 1) next_cell_format = null; break;
			default: if(opts && opts.WTF) throw new Error("SYLK bad record " + rstr);
			}
		}
		if(rowinfo.length > 0) sht['!rows'] = rowinfo;
		if(colinfo.length > 0) sht['!cols'] = colinfo;
		colinfo.forEach(function(col) { process_col(col); });
		if(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);
		return [arr, sht, wb];
	}

	function sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ {
		var aoasht = sylk_to_aoa(d, opts);
		var aoa = aoasht[0], ws = aoasht[1], wb = aoasht[2];
		var _opts = dup(opts); _opts.date1904 = (((wb||{}).Workbook || {}).WBProps || {}).date1904;
		var o = aoa_to_sheet(aoa, _opts);
		keys(ws).forEach(function(k) { o[k] = ws[k]; });
		var outwb = sheet_to_workbook(o, opts);
		keys(wb).forEach(function(k) { outwb[k] = wb[k]; });
		outwb.bookType = "sylk";
		return outwb;
	}

	function write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/)/*:string*/ {
		var o = "C;Y" + (R+1) + ";X" + (C+1) + ";K";
		switch(cell.t) {
			case 'n':
				o += isFinite(cell.v) ? (cell.v||0) : BErr[isNaN(cell.v) ? 0x24 : 0x07];
				if(cell.f && !cell.F) o += ";E" + a1_to_rc(cell.f, {r:R, c:C}); break;
			case 'b': o += cell.v ? "TRUE" : "FALSE"; break;
			case 'e': o += cell.w || BErr[cell.v] || cell.v; break;
			case 'd': o += datenum(parseDate(cell.v, date1904), date1904); break;
			case 's': o += '"' + (cell.v == null ? "" : String(cell.v)).replace(/"/g,"").replace(/;/g, ";;") + '"'; break;
		}
		return o;
	}

	function write_ws_cmnt_sylk(cmnt/*:Comment*/, R/*:number*/, C/*:number*/)/*:string*/ {
		var o = "C;Y" + (R+1) + ";X" + (C+1) + ";A";
		/* TODO: max length? */
		o += encode_sylk_str(cmnt.map(function(c) { return c.t; }).join(""));
		return o;
	}

	function write_ws_cols_sylk(out, cols) {
		cols.forEach(function(col, i) {
			var rec = "F;W" + (i+1) + " " + (i+1) + " ";
			if(col.hidden) rec += "0";
			else {
				if(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);
				if(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);
				if(typeof col.wch == 'number') rec += Math.round(col.wch);
			}
			if(rec.charAt(rec.length - 1) != " ") out.push(rec);
		});
	}

	function write_ws_rows_sylk(out/*:Array<string>*/, rows/*:Array<RowInfo>*/) {
		rows.forEach(function(row, i) {
			var rec = "F;";
			if(row.hidden) rec += "M0;";
			else if(row.hpt) rec += "M" + 20 * row.hpt + ";";
			else if(row.hpx) rec += "M" + 20 * px2pt(row.hpx) + ";";
			if(rec.length > 2) out.push(rec + "R" + (i+1));
		});
	}

	function sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/, wb/*:?WorkBook*/)/*:string*/ {
		if(!opts) opts = {}; opts._formats = ["General"];
		/* TODO: codepage */
		var preamble/*:Array<string>*/ = ["ID;PSheetJS;N;E"], o/*:Array<string>*/ = [];
		var r = safe_decode_range(ws['!ref']||"A1"), cell/*:Cell*/;
		var dense = ws["!data"] != null;
		var RS = "\r\n";
		var d1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;

		var _lastfmt = "General";
		preamble.push("P;PGeneral");
		/* Excel has been inconsistent in comment placement */
		var R = r.s.r, C = r.s.c, p = [];
		if(ws["!ref"]) for(R = r.s.r; R <= r.e.r; ++R) {
			if(dense && !ws["!data"][R]) continue;
			p = [];
			for(C = r.s.c; C <= r.e.c; ++C) {
				cell = dense ? ws["!data"][R][C] : ws[encode_col(C) + encode_row(R)];
				if(!cell || !cell.c) continue;
				p.push(write_ws_cmnt_sylk(cell.c, R, C));
			}
			if(p.length) o.push(p.join(RS));
		}
		if(ws["!ref"]) for(R = r.s.r; R <= r.e.r; ++R) {
			if(dense && !ws["!data"][R]) continue;
			p = [];
			for(C = r.s.c; C <= r.e.c; ++C) {
				cell = dense ? ws["!data"][R][C] : ws[encode_col(C) + encode_row(R)];
				if(!cell || (cell.v == null && (!cell.f || cell.F))) continue;
				if((cell.z||(cell.t == "d" ? table_fmt[14] : "General")) != _lastfmt) {
					var ifmt = opts._formats.indexOf(cell.z);
					if(ifmt == -1) { opts._formats.push(cell.z); ifmt = opts._formats.length - 1; preamble.push("P;P" + cell.z.replace(/;/g, ";;")); }
					p.push("F;P" + ifmt + ";Y" + (R+1) + ";X" + (C+1));
				}
				p.push(write_ws_cell_sylk(cell, ws, R, C, opts, d1904));
			}
			o.push(p.join(RS));
		}

		preamble.push("F;P0;DG0G8;M255");
		if(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);
		if(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);

		if(ws["!ref"]) preamble.push("B;Y" + (r.e.r - r.s.r + 1) + ";X" + (r.e.c - r.s.c + 1) + ";D" + [r.s.c,r.s.r,r.e.c,r.e.r].join(" "));
		preamble.push("O;L;D;B" + (d1904 ? ";V4" : "") + ";K47;G100 0.001");

		delete opts._formats;
		return preamble.join(RS) + RS + o.join(RS) + RS + "E" + RS;
	}

	return {
		to_workbook: sylk_to_workbook,
		from_sheet: sheet_to_sylk
	};
})();

var DIF = /*#__PURE__*/(function() {
	function dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {
		switch(opts.type) {
			case 'base64': return dif_to_aoa_str(Base64_decode(d), opts);
			case 'binary': return dif_to_aoa_str(d, opts);
			case 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);
			case 'array': return dif_to_aoa_str(cc2str(d), opts);
		}
		throw new Error("Unrecognized type " + opts.type);
	}
	function dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {
		var records = str.split('\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];
		for (; ri !== records.length; ++ri) {
			if (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }
			if (R < 0) continue;
			var metadata = records[ri].trim().split(",");
			var type = metadata[0], value = metadata[1];
			++ri;
			var data = records[ri] || "";
			while(((data.match(/["]/g)||[]).length & 1) && ri < records.length - 1) data += "\n" + records[++ri];
			data = data.trim();
			switch (+type) {
				case -1:
					if (data === 'BOT') { arr[++R] = []; C = 0; continue; }
					else if (data !== 'EOD') throw new Error("Unrecognized DIF special command " + data);
					break;
				case 0:
					if(data === 'TRUE') arr[R][C] = true;
					else if(data === 'FALSE') arr[R][C] = false;
					else if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);
					else if(!isNaN(fuzzydate(value).getDate())) {
						arr[R][C] = parseDate(value);
						if(!(opts && opts.UTC)) { arr[R][C] = utc_to_local(arr[R][C]); }
					}
					else arr[R][C] = value;
					++C; break;
				case 1:
					data = data.slice(1,data.length-1);
					data = data.replace(/""/g, '"');
					if(DIF_XL && data && data.match(/^=".*"$/)) data = data.slice(2, -1);
					arr[R][C++] = data !== '' ? data : null;
					break;
			}
			if (data === 'EOD') break;
		}
		if(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);
		return arr;
	}

	function dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }
	function dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ {
		var o = sheet_to_workbook(dif_to_sheet(str, opts), opts);
		o.bookType = "dif";
		return o;
	}

	function make_value(v/*:number*/, s/*:string*/)/*:string*/ { return "0," + String(v) + "\r\n" + s; }
	function make_value_str(s/*:string*/)/*:string*/ { return "1,0\r\n\"" + s.replace(/"/g,'""') + '"'; }
	function sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {
		var _DIF_XL = DIF_XL;
		if(!ws["!ref"]) throw new Error("Cannot export empty sheet to DIF");
		var r = safe_decode_range(ws['!ref']);
		var dense = ws["!data"] != null;
		var o/*:Array<string>*/ = [
			"TABLE\r\n0,1\r\n\"sheetjs\"\r\n",
			"VECTORS\r\n0," + (r.e.r - r.s.r + 1) + "\r\n\"\"\r\n",
			"TUPLES\r\n0," + (r.e.c - r.s.c + 1) + "\r\n\"\"\r\n",
			"DATA\r\n0,0\r\n\"\"\r\n"
		];
		for(var R = r.s.r; R <= r.e.r; ++R) {
			var row = dense ? ws["!data"][R] : [];
			var p = "-1,0\r\nBOT\r\n";
			for(var C = r.s.c; C <= r.e.c; ++C) {
				var cell/*:Cell*/ = dense ? (row && row[C]) : ws[encode_cell({r:R,c:C})];
				if(cell == null) { p +=("1,0\r\n\"\"\r\n"); continue;}
				switch(cell.t) {
					case 'n':
						if(_DIF_XL) {
							if(cell.w != null) p +=("0," + cell.w + "\r\nV");
							else if(cell.v != null) p +=(make_value(cell.v, "V")); // TODO: should this call SSF_format?
							else if(cell.f != null && !cell.F) p +=(make_value_str("=" + cell.f));
							else p +=("1,0\r\n\"\"");
						} else {
							if(cell.v == null) p +=("1,0\r\n\"\"");
							else p +=(make_value(cell.v, "V"));
						}
						break;
					case 'b':
						p +=(cell.v ? make_value(1, "TRUE") : make_value(0, "FALSE"));
						break;
					case 's':
						p +=(make_value_str((!_DIF_XL || isNaN(+cell.v)) ? cell.v : '="' + cell.v + '"'));
						break;
					case 'd':
						if(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));
						if(_DIF_XL) p +=(make_value(cell.w, "V"));
						else p +=(make_value_str(cell.w));
						break;
					default: p +=("1,0\r\n\"\"");
				}
				p += "\r\n";
			}
			o.push(p);
		}
		return o.join("") + "-1,0\r\nEOD";
	}
	return {
		to_workbook: dif_to_workbook,
		to_sheet: dif_to_sheet,
		from_sheet: sheet_to_dif
	};
})();

var ETH = /*#__PURE__*/(function() {
	function decode(s/*:string*/)/*:string*/ { return s.replace(/\\b/g,"\\").replace(/\\c/g,":").replace(/\\n/g,"\n"); }
	function encode(s/*:string*/)/*:string*/ { return s.replace(/\\/g, "\\b").replace(/:/g, "\\c").replace(/\n/g,"\\n"); }

	function eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {
		var records = str.split('\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];
		for (; ri !== records.length; ++ri) {
			var record = records[ri].trim().split(":");
			if(record[0] !== 'cell') continue;
			var addr = decode_cell(record[1]);
			if(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];
			R = addr.r; C = addr.c;
			switch(record[2]) {
				case 't': arr[R][C] = decode(record[3]); break;
				case 'v': arr[R][C] = +record[3]; break;
				case 'vtf': var _f = record[record.length - 1];
					/* falls through */
				case 'vtc':
					switch(record[3]) {
						case 'nl': arr[R][C] = +record[4] ? true : false; break;
						default: arr[R][C] = record[record.length-1].charAt(0) == "#" ? ({t: "e", v: RBErr[record[record.length-1]] }) : +record[4]; break;
					}
					if(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];
			}
		}
		if(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);
		return arr;
	}

	function eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }
	function eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }

	var header = [
		"socialcalc:version:1.5",
		"MIME-Version: 1.0",
		"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave"
	].join("\n");

	var sep = [
		"--SocialCalcSpreadsheetControlSave",
		"Content-type: text/plain; charset=UTF-8"
	].join("\n") + "\n";

	/* TODO: the other parts */
	var meta = [
		"# SocialCalc Spreadsheet Control Save",
		"part:sheet"
	].join("\n");

	var end = "--SocialCalcSpreadsheetControlSave--";

	function sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {
		if(!ws || !ws['!ref']) return "";
		var o/*:Array<string>*/ = [], oo/*:Array<string>*/ = [], cell, coord = "";
		var r = decode_range(ws['!ref']);
		var dense = ws["!data"] != null;
		for(var R = r.s.r; R <= r.e.r; ++R) {
			for(var C = r.s.c; C <= r.e.c; ++C) {
				coord = encode_cell({r:R,c:C});
				cell = dense ? (ws["!data"][R]||[])[C] : ws[coord];
				if(!cell || cell.v == null || cell.t === 'z') continue;
				oo = ["cell", coord, 't'];
				switch(cell.t) {
					case 's': oo.push(encode(cell.v)); break;
					case 'b':
						oo[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?"1":"0";
						oo[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));
						break;
					case 'd':
						var t = datenum(parseDate(cell.v));
						oo[2] = 'vtc'; oo[3] = 'nd'; oo[4] = ""+t;
						oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);
						break;
					case 'n':
						if(isFinite(cell.v)) {
							if(!cell.f) { oo[2]='v'; oo[3]=cell.v; }
							else { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }
						} else {
							oo[2] = 'vt' + (cell.f ? 'f' : 'c');
							oo[3] = "e" + BErr[isNaN(cell.v) ? 0x24 : 0x07];
							oo[4] = "0";
							oo[5] = cell.f || oo[3].slice(1);
							oo[6] = "e";
							oo[7] = oo[3].slice(1);
						}
						break;
					case 'e': continue;
				}
				o.push(oo.join(":"));
			}
		}
		o.push("sheet:c:" + (r.e.c-r.s.c+1) + ":r:" + (r.e.r-r.s.r+1) + ":tvf:1");
		o.push("valueformat:1:text-wiki");
		//o.push("copiedfrom:" + ws['!ref']); // clipboard only
		return o.join("\n");
	}

	function sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {
		return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join("\n");
		// return ["version:1.5", sheet_to_eth_data(ws)].join("\n"); // clipboard form
	}

	return {
		to_workbook: eth_to_workbook,
		to_sheet: eth_to_sheet,
		from_sheet: sheet_to_eth
	};
})();

var PRN = /*#__PURE__*/(function() {
	function set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {
		if(o.raw) arr[R][C] = data;
		else if(data === ""){/* empty */}
		else if(data === 'TRUE') arr[R][C] = true;
		else if(data === 'FALSE') arr[R][C] = false;
		else if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);
		else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);
		else if(data.charCodeAt(0) == 35 /* # */ && RBErr[data] != null) arr[R][C] = ({ t: 'e', v: RBErr[data], w: data });
		else arr[R][C] = data;
	}

	function prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {
		var o = opts || {};
		var arr/*:AOA*/ = ([]/*:any*/);
		if(!f || f.length === 0) return arr;
		var lines = f.split(/[\r\n]/);
		var L = lines.length - 1;
		while(L >= 0 && lines[L].length === 0) --L;
		var start = 10, idx = 0;
		var R = 0;
		for(; R <= L; ++R) {
			idx = lines[R].indexOf(" ");
			if(idx == -1) idx = lines[R].length; else idx++;
			start = Math.max(start, idx);
		}
		for(R = 0; R <= L; ++R) {
			arr[R] = [];
			/* TODO: confirm that widths are always 10 */
			var C = 0;
			set_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);
			for(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)
				set_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);
		}
		if(o.sheetRows) arr = arr.slice(0, o.sheetRows);
		return arr;
	}

	// List of accepted CSV separators
	var guess_seps = {
		0x2C: ',',
		0x09: "\t",
		0x3B: ';',
		0x7C: '|'
	};

	// CSV separator weights to be used in case of equal numbers
	var guess_sep_weights = {
		0x2C: 3,
		0x09: 2,
		0x3B: 1,
		0x7C: 0
	};

	function guess_sep(str) {
		var cnt = {}, instr = false, end = 0, cc = 0;
		for(;end < str.length;++end) {
			if((cc=str.charCodeAt(end)) == 0x22) instr = !instr;
			else if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;
		}

		cc = [];
		for(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {
			cc.push([ cnt[end], end ]);
		}

		if ( !cc.length ) {
			cnt = guess_sep_weights;
			for(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {
				cc.push([ cnt[end], end ]);
			}
		}

		cc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });

		return guess_seps[cc.pop()[1]] || 0x2C;
	}

	function dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {
		var o = opts || {};
		var sep = "";
		if(DENSE != null && o.dense == null) o.dense = DENSE;
		var ws/*:Worksheet*/ = ({}/*:any*/);
		if(o.dense) ws["!data"] = [];
		var range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);

		if(str.slice(0,4) == "sep=") {
			// If the line ends in \r\n
			if(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {
				sep = str.charAt(4); str = str.slice(7);
			}
			// If line ends in \r OR \n
			else if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {
				sep = str.charAt(4); str = str.slice(6);
			}
			else sep = guess_sep(str.slice(0,1024));
		}
		else if(o && o.FS) sep = o.FS;
		else sep = guess_sep(str.slice(0,1024));
		var R = 0, C = 0, v = 0;
		var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
		var _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
		function finish_cell() {
			/* TODO: fuzzy parsers should pass back assumed number format */
			var s = str.slice(start, end); if(s.slice(-1) == "\r") s = s.slice(0, -1);
			var cell = ({}/*:any*/);
			if(s.charAt(0) == '"' && s.charAt(s.length - 1) == '"') s = s.slice(1,-1).replace(/""/g,'"');
			if(o.cellText !== false) cell.w = s;
			if(s.length === 0) cell.t = 'z';
			else if(o.raw) { cell.t = 's'; cell.v = s; }
			else if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }
			else if(s.charCodeAt(0) == 0x3D) {
				if(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/""/g,'"'); }
				else if(fuzzyfmla(s)) { cell.t = 's'; cell.f = s.slice(1); cell.v = s; }
				else { cell.t = 's'; cell.v = s; } }
			else if(s == "TRUE") { cell.t = 'b'; cell.v = true; }
			else if(s == "FALSE") { cell.t = 'b'; cell.v = false; }
			else if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; cell.v = v; }
			else if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {
				cell.z = o.dateNF || table_fmt[14];
				if(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate(news); if(o && o.UTC === false) v = utc_to_local(v); }
				else if(o && o.UTC === false) v = utc_to_local(v);
				else if(o.cellText !== false && o.dateNF) cell.w = SSF_format(cell.z, v);
				if(o.cellDates) { cell.t = 'd'; cell.v = v; }
				else { cell.t = 'n'; cell.v = datenum(v); }
				if(!o.cellNF) delete cell.z;
			} else if(s.charCodeAt(0) == 35 /* # */ && RBErr[s] != null) {
				cell.t = 'e'; cell.w = s; cell.v = RBErr[s];
			} else {
				cell.t = 's';
				cell.v = s;
			}
			if(cell.t == 'z'){}
			else if(o.dense) { if(!ws["!data"][R]) ws["!data"][R] = []; ws["!data"][R][C] = cell; }
			else ws[encode_cell({c:C,r:R})] = cell;
			start = end+1; startcc = str.charCodeAt(start);
			if(range.e.c < C) range.e.c = C;
			if(range.e.r < R) range.e.r = R;
			if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
		}
		outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
			case 0x22: if(startcc === 0x22) instr = !instr; break;
			case 0x0d:
				if(instr) break;
				if(str.charCodeAt(end+1) == 0x0a) ++end;
				/* falls through */
			case sepcc: case 0x0a: if(!instr && finish_cell()) break outer; break;
			default: break;
		}
		if(end - start > 0) finish_cell();

		ws['!ref'] = encode_range(range);
		return ws;
	}

	function prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {
		if(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);
		if(opts.FS) return dsv_to_sheet_str(str, opts);
		if(str.slice(0,4) == "sep=") return dsv_to_sheet_str(str, opts);
		if(str.indexOf("\t") >= 0 || str.indexOf(",") >= 0 || str.indexOf(";") >= 0) return dsv_to_sheet_str(str, opts);
		return aoa_to_sheet(prn_to_aoa_str(str, opts), opts);
	}

	function prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {
		var str = "", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);
		switch(opts.type) {
			case 'base64': str = Base64_decode(d); break;
			case 'binary': str = d; break;
			case 'buffer':
				if(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf
				else if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);
				else str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);
				break;
			case 'array': str = cc2str(d); break;
			case 'string': str = d; break;
			default: throw new Error("Unrecognized type " + opts.type);
		}
		if(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));
		else if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);
		else if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage)  str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));
		if(str.slice(0,19) == "socialcalc:version:") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);
		return prn_to_sheet_str(str, opts);
	}

	function prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }

	function sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {
		var o/*:Array<string>*/ = [];
		if(!ws["!ref"]) return "";
		var r = safe_decode_range(ws['!ref']), cell/*:Cell*/;
		var dense = ws["!data"] != null;
		for(var R = r.s.r; R <= r.e.r; ++R) {
			var oo/*:Array<string>*/ = [];
			for(var C = r.s.c; C <= r.e.c; ++C) {
				var coord = encode_cell({r:R,c:C});
				cell = dense ? (ws["!data"][R]||[])[C] : ws[coord];
				if(!cell || cell.v == null) { oo.push("          "); continue; }
				var w = (cell.w || (format_cell(cell), cell.w) || "").slice(0,10);
				while(w.length < 10) w += " ";
				oo.push(w + (C === 0 ? " " : ""));
			}
			o.push(oo.join(""));
		}
		return o.join("\n");
	}

	return {
		to_workbook: prn_to_workbook,
		to_sheet: prn_to_sheet,
		from_sheet: sheet_to_prn
	};
})();

/* Excel defaults to SYLK but warns if data is not valid */
function read_wb_ID(d, opts) {
	var o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;
	try {
		var out = SYLK.to_workbook(d, o);
		o.WTF = OLD_WTF;
		return out;
	} catch(e) {
		o.WTF = OLD_WTF;
		if((e.message.indexOf("SYLK bad record ID") == -1) && OLD_WTF) throw e;
		return PRN.to_workbook(d, opts);
	}
}

var WK_ = /*#__PURE__*/(function() {
	function lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {
		if(!data) return;
		prep_blob(data, data.l || 0);
		var Enum = opts.Enum || WK1Enum;
		while(data.l < data.length) {
			var RT = data.read_shift(2);
			var R = Enum[RT] || Enum[0xFFFF];
			var length = data.read_shift(2);
			var tgt = data.l + length;
			var d = R.f && R.f(data, length, opts);
			data.l = tgt;
			if(cb(d, R, RT)) return;
		}
	}

	function lotus_to_workbook(d/*:RawData*/, opts) {
		switch(opts.type) {
			case 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);
			case 'binary': return lotus_to_workbook_buf(s2a(d), opts);
			case 'buffer':
			case 'array': return lotus_to_workbook_buf(d, opts);
		}
		throw "Unsupported type " + opts.type;
	}

	/* NOTE: this list intentionally starts at 1 */
	var LOTUS_DATE_FMTS = [
		"mmmm",
		"dd-mmm-yyyy",
		"dd-mmm",
		"mmm-yyyy",
		"@", // "text"?
		"mm/dd",
		"hh:mm:ss AM/PM", // 7
		"hh:mm AM/PM",
		"mm/dd/yyyy",
		"mm/dd",
		"hh:mm:ss",
		"hh:mm" // 12
	];

	function lotus_to_workbook_buf(d, opts)/*:Workbook*/ {
		if(!d) return d;
		var o = opts || {};
		if(DENSE != null && o.dense == null) o.dense = DENSE;
		var s/*:Worksheet*/ = ({}/*:any*/), n = "Sheet1", next_n = "", sidx = 0;
		var sheets = {}, snames = [], realnames = [], sdata = [];
		if(o.dense) sdata = s["!data"] = [];

		var refguess = {s: {r:0, c:0}, e: {r:0, c:0} };
		var sheetRows = o.sheetRows || 0;
		var lastcell = {};

		if(d[4] == 0x51 && d[5] == 0x50 && d[6] == 0x57) return qpw_to_workbook_buf(d, opts);
		if(d[2] == 0x00) {
			if(d[3] == 0x08 || d[3] == 0x09) {
				if(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error("Unsupported Works 3 for Mac file");
			}
		}

		if(d[2] == 0x02) {
			o.Enum = WK1Enum;
			lotushopper(d, function(val, R, RT) { switch(RT) {
				case 0x00: /* BOF */
					o.vers = val;
					if(val >= 0x1000) o.qpro = true;
					break;
				case 0xFF: /* BOF (works 3+) */
					o.vers = val;
					o.works = true;
					break;
				case 0x06: refguess = val; break; /* RANGE */
				case 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */
				case 0xDE: next_n = val; break; /* SHEETNAMELP */
				case 0x0F: /* LABEL */
				case 0x33: /* STRING */
					if((!o.qpro && !o.works || RT == 0x33) && val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);
					if(o.works || o.works2) val[1].v = val[1].v.replace(/\r\n/g, "\n");
					/* falls through */
				case 0x0D: /* INTEGER */
				case 0x0E: /* NUMBER */
				case 0x10: /* FORMULA */
					/* TODO: actual translation of the format code */
					if((val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {
						val[1].z = o.dateNF || LOTUS_DATE_FMTS[(val[2] & 0x0F)-1] || table_fmt[14];
						if(o.cellDates) { val[1].v = numdate(val[1].v); val[1].t = typeof val[1].v == "number" ? 'n' : 'd'; }
					}

					if(o.qpro) {
						if(val[3] > sidx) {
							s["!ref"] = encode_range(refguess);
							sheets[n] = s;
							snames.push(n);
							s = ({}/*:any*/); if(o.dense) sdata = s["!data"] = [];
							refguess = {s: {r:0, c:0}, e: {r:0, c:0} };
							sidx = val[3]; n = next_n || "Sheet" + (sidx + 1); next_n = "";
						}
					}

					var tmpcell = o.dense ? (sdata[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];
					if(tmpcell) {
						tmpcell.t = val[1].t; tmpcell.v = val[1].v;
						if(val[1].z != null) tmpcell.z = val[1].z;
						if(val[1].f != null) tmpcell.f = val[1].f;
						lastcell = tmpcell;
						break;
					}
					if(o.dense) {
						if(!sdata[val[0].r]) sdata[val[0].r] = [];
						sdata[val[0].r][val[0].c] = val[1];
					} else s[encode_cell(val[0])] = val[1];
					lastcell = val[1];
					break;
				case 0x5405: o.works2 = true; break;
				case 0x5402: {
					/* TODO: enumerate all extended number formats */
					if(val == 0x14a1) {
						lastcell.z = "hh:mm:ss";
						if(o.cellDates && lastcell.t == "n") {
							lastcell.v = numdate(lastcell.v); lastcell.t = typeof lastcell.v == "number" ? 'n' : 'd';
						}
					}
				} break;
			}}, o);
		} else if(d[2] == 0x1A || d[2] == 0x0E) {
			o.Enum = WK3Enum;
			if(d[2] == 0x0E) { o.qpro = true; d.l = 0; }
			lotushopper(d, function(val, R, RT) { switch(RT) {
				case 0xCC: n = val; break; /* SHEETNAMECS */
				case 0x16: /* LABEL16 */
					if(val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);
					// TODO: R9 appears to encode control codes this way -- verify against other versions
					val[1].v = val[1].v.replace(/\x0F./g, function($$) { return String.fromCharCode($$.charCodeAt(1) - 0x20); }).replace(/\r\n/g, "\n");
					/* falls through */
				case 0x17: /* NUMBER17 */
				case 0x18: /* NUMBER18 */
				case 0x19: /* FORMULA19 */
				case 0x25: /* NUMBER25 */
				case 0x27: /* NUMBER27 */
				case 0x28: /* FORMULA28 */
					if(val[3] > sidx) {
						s["!ref"] = encode_range(refguess);
						sheets[n] = s;
						snames.push(n);
						s = ({}/*:any*/); if(o.dense) sdata = s["!data"] = [];
						refguess = {s: {r:0, c:0}, e: {r:0, c:0} };
						sidx = val[3]; n = "Sheet" + (sidx + 1);
					}
					if(sheetRows > 0 && val[0].r >= sheetRows) break;
					if(o.dense) {
						if(!sdata[val[0].r]) sdata[val[0].r] = [];
						sdata[val[0].r][val[0].c] = val[1];
					} else s[encode_cell(val[0])] = val[1];
					if(refguess.e.c < val[0].c) refguess.e.c = val[0].c;
					if(refguess.e.r < val[0].r) refguess.e.r = val[0].r;
					break;
				case 0x1B: /* XFORMAT */
					if(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];
					break;
				case 0x0601: /* SHEETINFOQP */
					realnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;
				default: break;
			}}, o);
		} else throw new Error("Unrecognized LOTUS BOF " + d[2]);
		s["!ref"] = encode_range(refguess);
		sheets[next_n || n] = s;
		snames.push(next_n || n);
		if(!realnames.length) return { SheetNames: snames, Sheets: sheets };
		var osheets = {}, rnames = [];
		/* TODO: verify no collisions */
		for(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {
			rnames.push(realnames[i] || snames[i]);
			osheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];
		} else {
			rnames.push(realnames[i]);
			osheets[realnames[i]] = ({ "!ref": "A1" });
		}
		return { SheetNames: rnames, Sheets: osheets };
	}

	function sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
		var o = opts || {};
		if(+o.codepage >= 0) set_cp(+o.codepage);
		if(o.type == "string") throw new Error("Cannot write WK1 to JS string");
		var ba = buf_array();
		if(!ws["!ref"]) throw new Error("Cannot export empty sheet to WK1");
		var range = safe_decode_range(ws["!ref"]);
		var dense = ws["!data"] != null;
		var cols = [];

		write_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));
		write_biff_rec(ba, 0x06, write_RANGE(range));
		var max_R = Math.min(range.e.r, 8191);
		for(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
		for(var R = range.s.r; R <= max_R; ++R) {
			var rr = encode_row(R);
			for(C = range.s.c; C <= range.e.c; ++C) {
				var cell = dense ? (ws["!data"][R]||[])[C] : ws[cols[C] + rr];
				if(!cell || cell.t == "z") continue;
				/* TODO: formula records */
				switch(cell.t) {
				case "n":
					if((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell));
					else write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell));
					break;
				case "d":
					var dc = datenum(cell.v);
					if((dc|0)==dc && dc >= -32768 && dc <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, {t:"n", v:dc, z:cell.z || table_fmt[14]}));
					else write_biff_rec(ba, 0x0e, write_NUMBER(R, C, {t:"n", v:dc, z:cell.z || table_fmt[14]}));
					break;
				default:
					var str = format_cell(cell);
					write_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));
				}
			}
		}

		write_biff_rec(ba, 0x01);
		return ba.end();
	}

	function book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {
		var o = opts || {};
		if(+o.codepage >= 0) set_cp(+o.codepage);
		if(o.type == "string") throw new Error("Cannot write WK3 to JS string");
		var ba = buf_array();

		write_biff_rec(ba, 0x00, write_BOF_WK3(wb));

		for(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})["!ref"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));

		var wsidx = 0;
		for(i = 0; i < wb.SheetNames.length; ++i) {
			var ws = wb.Sheets[wb.SheetNames[i]];
			if(!ws || !ws["!ref"]) continue;
			var range = safe_decode_range(ws["!ref"]);
			var dense = ws["!data"] != null;
			var cols = [];
			var max_R = Math.min(range.e.r, 8191);
			for(var R = range.s.r; R <= max_R; ++R) {
				var rr = encode_row(R);
				for(var C = range.s.c; C <= range.e.c; ++C) {
					if(R === range.s.r) cols[C] = encode_col(C);
					var ref = cols[C] + rr;
					var cell = dense ? (ws["!data"][R]||[])[C] : ws[ref];
					if(!cell || cell.t == "z") continue;
					/* TODO: FORMULA19 NUMBER18 records */
					if(cell.t == "n") {
						write_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));
					} else {
						var str = format_cell(cell);
						/* TODO: max len? */
						write_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));
					}
				}
			}
			++wsidx;
		}

		write_biff_rec(ba, 0x01);
		return ba.end();
	}


	function write_BOF_WK1(v/*:number*/) {
		var out = new_buf(2);
		out.write_shift(2, v);
		return out;
	}

	function write_BOF_WK3(wb/*:Workbook*/) {
		var out = new_buf(26);
		out.write_shift(2, 0x1000);
		out.write_shift(2, 0x0004);
		out.write_shift(4, 0x0000);
		var rows = 0, cols = 0, wscnt = 0;
		for(var i = 0; i < wb.SheetNames.length; ++i) {
			var name = wb.SheetNames[i];
			var ws = wb.Sheets[name];
			if(!ws || !ws["!ref"]) continue;
			++wscnt;
			var range = decode_range(ws["!ref"]);
			if(rows < range.e.r) rows = range.e.r;
			if(cols < range.e.c) cols = range.e.c;
		}
		if(rows > 8191) rows = 8191;
		out.write_shift(2, rows);
		out.write_shift(1, wscnt);
		out.write_shift(1, cols);
		out.write_shift(2, 0x00);
		out.write_shift(2, 0x00);
		out.write_shift(1, 0x01);
		out.write_shift(1, 0x02);
		out.write_shift(4, 0);
		out.write_shift(4, 0);
		return out;
	}

	function parse_RANGE(blob, length, opts) {
		var o = {s:{c:0,r:0},e:{c:0,r:0}};
		if(length == 8 && opts.qpro) {
			o.s.c = blob.read_shift(1);
			blob.l++;
			o.s.r = blob.read_shift(2);
			o.e.c = blob.read_shift(1);
			blob.l++;
			o.e.r = blob.read_shift(2);
			return o;
		}
		o.s.c = blob.read_shift(2);
		o.s.r = blob.read_shift(2);
		if(length == 12 && opts.qpro) blob.l += 2;
		o.e.c = blob.read_shift(2);
		o.e.r = blob.read_shift(2);
		if(length == 12 && opts.qpro) blob.l += 2;
		if(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;
		return o;
	}
	function write_RANGE(range) {
		var out = new_buf(8);
		out.write_shift(2, range.s.c);
		out.write_shift(2, range.s.r);
		out.write_shift(2, range.e.c);
		out.write_shift(2, range.e.r);
		return out;
	}

	function parse_cell(blob, length, opts) {
		var o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];
		if(opts.qpro && opts.vers != 0x5120) {
			o[0].c = blob.read_shift(1);
			o[3] = blob.read_shift(1);
			o[0].r = blob.read_shift(2);
			blob.l+=2;
		} else if(opts.works) { // TODO: verify with more complex works3-4 examples
			o[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);
			o[2] = blob.read_shift(2);
		} else {
			o[2] = blob.read_shift(1);
			o[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);
		}
		return o;
	}

	function get_wk1_fmt(cell)/*:number*/ {
		/* TODO: some fuzzy matching on the number format */
		if(cell.z && fmt_is_date(cell.z)) {
			return 0xf0 | (LOTUS_DATE_FMTS.indexOf(cell.z) + 1 || 2);
		}
		return 0xFF;
	}
	function parse_LABEL(blob, length, opts) {
		var tgt = blob.l + length;
		var o = parse_cell(blob, length, opts);
		o[1].t = 's';
		if((opts.vers & 0xFFFE) == 0x5120) { // WQ1 / WQ2
			blob.l++;
			var len = blob.read_shift(1);
			o[1].v = blob.read_shift(len, 'utf8');
			return o;
		}
		if(opts.qpro) blob.l++;
		o[1].v = blob.read_shift(tgt - blob.l, 'cstr');
		return o;
	}
	function write_LABEL(R, C, s) {
		/* TODO: encoding */
		var o = new_buf(7 + s.length);
		o.write_shift(1, 0xFF);
		o.write_shift(2, C);
		o.write_shift(2, R);
		o.write_shift(1, 0x27); // ??
		for(var i = 0; i < o.length; ++i) {
			var cc = s.charCodeAt(i);
			o.write_shift(1, cc >= 0x80 ? 0x5F : cc);
		}
		o.write_shift(1, 0);
		return o;
	}
	function parse_STRING(blob, length, opts) {
		var tgt = blob.l + length;
		var o = parse_cell(blob, length, opts);
		o[1].t = 's';
		if(opts.vers == 0x5120) {
			var len = blob.read_shift(1);
			o[1].v = blob.read_shift(len, 'utf8');
			return o;
		}
		o[1].v = blob.read_shift(tgt - blob.l, 'cstr');
		return o;
	}

	function parse_INTEGER(blob, length, opts) {
		var o = parse_cell(blob, length, opts);
		o[1].v = blob.read_shift(2, 'i');
		return o;
	}
	function write_INTEGER(R, C, cell) {
		var o = new_buf(7);
		o.write_shift(1, get_wk1_fmt(cell));
		o.write_shift(2, C);
		o.write_shift(2, R);
		o.write_shift(2, cell.v, 'i');
		return o;
	}

	function parse_NUMBER(blob, length, opts) {
		var o = parse_cell(blob, length, opts);
		o[1].v = blob.read_shift(8, 'f');
		return o;
	}
	function write_NUMBER(R, C, cell) {
		var o = new_buf(13);
		o.write_shift(1, get_wk1_fmt(cell));
		o.write_shift(2, C);
		o.write_shift(2, R);
		o.write_shift(8, cell.v, 'f');
		return o;
	}

	function parse_FORMULA(blob, length, opts) {
		var tgt = blob.l + length;
		var o = parse_cell(blob, length, opts);
		/* TODO: formula */
		o[1].v = blob.read_shift(8, 'f');
		if(opts.qpro) blob.l = tgt;
		else {
			var flen = blob.read_shift(2);
			wk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);
			blob.l += flen;
		}
		return o;
	}

	function wk1_parse_rc(B, V, col) {
		var rel = V & 0x8000;
		V &= ~0x8000;
		V = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);
		return (rel ? "" : "$") + (col ? encode_col(V) : encode_row(V));
	}
	/* var oprec = [
		8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,
		3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8
	]; */
	/* TODO: flesh out */
	var FuncTab = {
		0x1F: ["NA", 0],
		// 0x20: ["ERR", 0],
		0x21: ["ABS", 1],
		0x22: ["TRUNC", 1],
		0x23: ["SQRT", 1],
		0x24: ["LOG", 1],
		0x25: ["LN", 1],
		0x26: ["PI", 0],
		0x27: ["SIN", 1],
		0x28: ["COS", 1],
		0x29: ["TAN", 1],
		0x2A: ["ATAN2", 2],
		0x2B: ["ATAN", 1],
		0x2C: ["ASIN", 1],
		0x2D: ["ACOS", 1],
		0x2E: ["EXP", 1],
		0x2F: ["MOD", 2],
		// 0x30
		0x31: ["ISNA", 1],
		0x32: ["ISERR", 1],
		0x33: ["FALSE", 0],
		0x34: ["TRUE", 0],
		0x35: ["RAND", 0],
		0x36: ["DATE", 3],
		// 0x37 NOW
		// 0x38 PMT
		// 0x39 PV
		// 0x3A FV
		// 0x3B IF
		// 0x3C DAY
		// 0x3D MONTH
		// 0x3E YEAR
		0x3F: ["ROUND", 2],
		0x40: ["TIME", 3],
		// 0x41 HOUR
		// 0x42 MINUTE
		// 0x43 SECOND
		0x44: ["ISNUMBER", 1],
		0x45: ["ISTEXT", 1],
		0x46: ["LEN", 1],
		0x47: ["VALUE", 1],
		// 0x48: ["FIXED", ?? 1],
		0x49: ["MID", 3],
		0x4A: ["CHAR", 1],
		// 0x4B
		// 0x4C FIND
		// 0x4D DATEVALUE
		// 0x4E TIMEVALUE
		// 0x4F CELL
		0x50: ["SUM", 69],
		0x51: ["AVERAGEA", 69],
		0x52: ["COUNTA", 69],
		0x53: ["MINA", 69],
		0x54: ["MAXA", 69],
		// 0x55 VLOOKUP
		// 0x56 NPV
		// 0x57 VAR
		// 0x58 STD
		// 0x59 IRR
		// 0x5A HLOOKUP
		// 0x5B DSUM
		// 0x5C DAVERAGE
		// 0x5D DCOUNTA
		// 0x5E DMIN
		// 0x5F DMAX
		// 0x60 DVARP
		// 0x61 DSTDEVP
		// 0x62 INDEX
		// 0x63 COLS
		// 0x64 ROWS
		// 0x65 REPEAT
		0x66: ["UPPER", 1],
		0x67: ["LOWER", 1],
		// 0x68 LEFT
		// 0x69 RIGHT
		// 0x6A REPLACE
		0x6B: ["PROPER", 1],
		// 0x6C CELL
		0x6D: ["TRIM", 1],
		// 0x6E CLEAN
		0x6F: ["T", 1]
		// 0x70 V
	};
	var BinOpTab = [
		  "",   "",   "",   "",   "",   "",   "",   "", // eslint-disable-line no-mixed-spaces-and-tabs
		  "",  "+",  "-",  "*",  "/",  "^",  "=", "<>", // eslint-disable-line no-mixed-spaces-and-tabs
		"<=", ">=",  "<",  ">",   "",   "",   "",   "", // eslint-disable-line no-mixed-spaces-and-tabs
		 "&",   "",   "",   "",   "",   "",   "",   ""  // eslint-disable-line no-mixed-spaces-and-tabs
	];

	function wk1_fmla_to_csf(blob, o) {
		prep_blob(blob, 0);
		var out = [], argc = 0, R = "", C = "", argL = "", argR = "";
		while(blob.l < blob.length) {
			var cc = blob[blob.l++];
			switch(cc) {
				case 0x00: out.push(blob.read_shift(8, 'f')); break;
				case 0x01: {
					C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
					R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
					out.push(C + R);
				} break;
				case 0x02: {
					var c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
					var r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
					C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
					R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
					out.push(c + r + ":" + C + R);
				} break;
				case 0x03:
					if(blob.l < blob.length) { console.error("WK1 premature formula end"); return; }
					break;
				case 0x04: out.push("(" + out.pop() + ")"); break;
				case 0x05: out.push(blob.read_shift(2)); break;
				case 0x06: {
					/* TODO: text encoding */
					var Z = ""; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);
					out.push('"' + Z.replace(/"/g, '""') + '"');
				} break;

				case 0x08: out.push("-" + out.pop()); break;
				case 0x17: out.push("+" + out.pop()); break;
				case 0x16: out.push("NOT(" + out.pop() + ")"); break;

				case 0x14: case 0x15: {
					argR = out.pop(); argL = out.pop();
					out.push(["AND", "OR"][cc - 0x14] + "(" + argL + "," + argR + ")");
				} break;

				default:
					if(cc < 0x20 && BinOpTab[cc]) {
						argR = out.pop(); argL = out.pop();
						out.push(argL + BinOpTab[cc] + argR);
					} else if(FuncTab[cc]) {
						argc = FuncTab[cc][1];
						if(argc == 69) argc = blob[blob.l++];
						if(argc > out.length) { console.error("WK1 bad formula parse 0x" + cc.toString(16) + ":|" + out.join("|") + "|"); return; }
						var args = out.slice(-argc);
						out.length -= argc;
						out.push(FuncTab[cc][0] + "(" + args.join(",") + ")");
					}
					else if(cc <= 0x07) return console.error("WK1 invalid opcode " + cc.toString(16));
					else if(cc <= 0x18) return console.error("WK1 unsupported op " + cc.toString(16));
					else if(cc <= 0x1E) return console.error("WK1 invalid opcode " + cc.toString(16));
					else if(cc <= 0x73) return console.error("WK1 unsupported function opcode " + cc.toString(16));
					// possible future functions ??
					else return console.error("WK1 unrecognized opcode " + cc.toString(16));
			}
		}
		if(out.length == 1) o[1].f = "" + out[0];
		else console.error("WK1 bad formula parse |" + out.join("|") + "|");
	}

	function parse_cell_3(blob/*::, length*/) {
		var o = [{c:0,r:0}, {t:'n',v:0}, 0];
		o[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];
		return o;
	}

	function parse_LABEL_16(blob, length) {
		var o = parse_cell_3(blob, length);
		o[1].t = 's';
		o[1].v = blob.read_shift(length - 4, 'cstr');
		return o;
	}
	function write_LABEL_16(R, C, wsidx, s) {
		/* TODO: encoding */
		var o = new_buf(6 + s.length);
		o.write_shift(2, R);
		o.write_shift(1, wsidx);
		o.write_shift(1, C);
		o.write_shift(1, 0x27);
		for(var i = 0; i < s.length; ++i) {
			var cc = s.charCodeAt(i);
			o.write_shift(1, cc >= 0x80 ? 0x5F : cc);
		}
		o.write_shift(1, 0);
		return o;
	}

	function parse_NUMBER_18(blob, length) {
		var o = parse_cell_3(blob, length);
		o[1].v = blob.read_shift(2);
		var v = o[1].v >> 1;
		if(o[1].v & 0x1) {
			switch(v & 0x07) {
				case 0: v = (v >> 3) * 5000; break;
				case 1: v = (v >> 3) * 500; break;
				case 2: v = (v >> 3) / 20; break;
				case 3: v = (v >> 3) / 200; break;
				case 4: v = (v >> 3) / 2000; break;
				case 5: v = (v >> 3) / 20000; break;
				case 6: v = (v >> 3) / 16; break;
				case 7: v = (v >> 3) / 64; break;
			}
		}
		o[1].v = v;
		return o;
	}

	function parse_NUMBER_17(blob, length) {
		var o = parse_cell_3(blob, length);
		var v1 = blob.read_shift(4);
		var v2 = blob.read_shift(4);
		var e = blob.read_shift(2);
		if(e == 0xFFFF) {
			if(v1 === 0 && v2 === 0xC0000000) { o[1].t = "e"; o[1].v = 0x0F; } // ERR -> #VALUE!
			else if(v1 === 0 && v2 === 0xD0000000) { o[1].t = "e"; o[1].v = 0x2A; } // NA -> #N/A
			else o[1].v = 0;
			return o;
		}
		var s = e & 0x8000; e = (e&0x7FFF) - 16446;
		o[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));
		return o;
	}
	function write_NUMBER_17(R, C, wsidx, v) {
		var o = new_buf(14);
		o.write_shift(2, R);
		o.write_shift(1, wsidx);
		o.write_shift(1, C);
		if(v == 0) {
			o.write_shift(4, 0);
			o.write_shift(4, 0);
			o.write_shift(2, 0xFFFF);
			return o;
		}
		var s = 0, e = 0, v1 = 0, v2 = 0;
		if(v < 0) { s = 1; v = -v; }
		e = Math.log2(v) | 0;
		v /= Math.pow(2, e-31);
		v2 = (v)>>>0;
		if((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }
		v -= v2;
		v2 |= 0x80000000;
		v2 >>>= 0;
		v *= Math.pow(2, 32);
		v1 = v>>>0;
		o.write_shift(4, v1);
		o.write_shift(4, v2);
		e += 0x3FFF + (s ? 0x8000 : 0);
		o.write_shift(2, e);
		return o;
	}

	function parse_FORMULA_19(blob, length) {
		var o = parse_NUMBER_17(blob, 14);
		blob.l += length - 14; /* TODO: WK3 formula */
		return o;
	}

	function parse_NUMBER_25(blob, length) {
		var o = parse_cell_3(blob, length);
		var v1 = blob.read_shift(4);
		o[1].v = v1 >> 6;
		return o;
	}

	function parse_NUMBER_27(blob, length) {
		var o = parse_cell_3(blob, length);
		var v1 = blob.read_shift(8,'f');
		o[1].v = v1;
		return o;
	}

	function parse_FORMULA_28(blob, length) {
		var o = parse_NUMBER_27(blob, 12);
		blob.l += length - 12; /* TODO: formula */
		return o;
	}

	function parse_SHEETNAMECS(blob, length) {
		return blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : "";
	}

	function parse_SHEETNAMELP(blob, length) {
		var len = blob[blob.l++];
		if(len > length - 1) len = length - 1;
		var o = ""; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);
		return o;
	}

	function parse_SHEETINFOQP(blob, length, opts) {
		if(!opts.qpro || length < 21) return;
		var id = blob.read_shift(1);
		blob.l += 17;
		blob.l += 1; //var len = blob.read_shift(1);
		blob.l += 2;
		var nm = blob.read_shift(length - 21, 'cstr');
		return [id, nm];
	}

	function parse_XFORMAT(blob, length) {
		var o = {}, tgt = blob.l + length;
		while(blob.l < tgt) {
			var dt = blob.read_shift(2);
			if(dt == 0x36b0) {
				o[dt] = [0, ""];
				o[dt][0] = blob.read_shift(2);
				while(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;
			}
			// TODO: 0x3a99 ??
		}
		return o;
	}
	function write_XFORMAT_SHEETNAME(name, wsidx) {
		var out = new_buf(5 + name.length);
		out.write_shift(2, 0x36b0);
		out.write_shift(2, wsidx);
		for(var i = 0; i < name.length; ++i) {
			var cc = name.charCodeAt(i);
			out[out.l++] = cc > 0x7F ? 0x5F : cc;
		}
		out[out.l++] = 0;
		return out;
	}

	var WK1Enum = {
		0x0000: { n:"BOF", f:parseuint16 },
		0x0001: { n:"EOF" },
		0x0002: { n:"CALCMODE" },
		0x0003: { n:"CALCORDER" },
		0x0004: { n:"SPLIT" },
		0x0005: { n:"SYNC" },
		0x0006: { n:"RANGE", f:parse_RANGE },
		0x0007: { n:"WINDOW1" },
		0x0008: { n:"COLW1" },
		0x0009: { n:"WINTWO" },
		0x000A: { n:"COLW2" },
		0x000B: { n:"NAME" },
		0x000C: { n:"BLANK" },
		0x000D: { n:"INTEGER", f:parse_INTEGER },
		0x000E: { n:"NUMBER", f:parse_NUMBER },
		0x000F: { n:"LABEL", f:parse_LABEL },
		0x0010: { n:"FORMULA", f:parse_FORMULA },
		0x0018: { n:"TABLE" },
		0x0019: { n:"ORANGE" },
		0x001A: { n:"PRANGE" },
		0x001B: { n:"SRANGE" },
		0x001C: { n:"FRANGE" },
		0x001D: { n:"KRANGE1" },
		0x0020: { n:"HRANGE" },
		0x0023: { n:"KRANGE2" },
		0x0024: { n:"PROTEC" },
		0x0025: { n:"FOOTER" },
		0x0026: { n:"HEADER" },
		0x0027: { n:"SETUP" },
		0x0028: { n:"MARGINS" },
		0x0029: { n:"LABELFMT" },
		0x002A: { n:"TITLES" },
		0x002B: { n:"SHEETJS" },
		0x002D: { n:"GRAPH" },
		0x002E: { n:"NGRAPH" },
		0x002F: { n:"CALCCOUNT" },
		0x0030: { n:"UNFORMATTED" },
		0x0031: { n:"CURSORW12" },
		0x0032: { n:"WINDOW" },
		0x0033: { n:"STRING", f:parse_STRING },
		0x0037: { n:"PASSWORD" },
		0x0038: { n:"LOCKED" },
		0x003C: { n:"QUERY" },
		0x003D: { n:"QUERYNAME" },
		0x003E: { n:"PRINT" },
		0x003F: { n:"PRINTNAME" },
		0x0040: { n:"GRAPH2" },
		0x0041: { n:"GRAPHNAME" },
		0x0042: { n:"ZOOM" },
		0x0043: { n:"SYMSPLIT" },
		0x0044: { n:"NSROWS" },
		0x0045: { n:"NSCOLS" },
		0x0046: { n:"RULER" },
		0x0047: { n:"NNAME" },
		0x0048: { n:"ACOMM" },
		0x0049: { n:"AMACRO" },
		0x004A: { n:"PARSE" },
		// 0x0064
		0x0066: { n:"PRANGES??" },
		0x0067: { n:"RRANGES??" },
		0x0068: { n:"FNAME??" },
		0x0069: { n:"MRANGES??" },
		// 0x0096
		// 0x0099
		// 0x009A
		// 0x009B
		// 0x009C
		// 0x00C0
		// 0x00C7
		// 0x00C9
		0x00CC: { n:"SHEETNAMECS", f:parse_SHEETNAMECS },
		// 0x00CD
		0x00DE: { n:"SHEETNAMELP", f:parse_SHEETNAMELP },
		0x00FF: { n:"BOF", f:parseuint16 },
		0x5402: { n:"WKSNF", f:parseuint16 },
		0xFFFF: { n:"" }
	};

	var WK3Enum = {
		0x0000: { n:"BOF" },
		0x0001: { n:"EOF" },
		0x0002: { n:"PASSWORD" },
		0x0003: { n:"CALCSET" },
		0x0004: { n:"WINDOWSET" },
		0x0005: { n:"SHEETCELLPTR" },
		0x0006: { n:"SHEETLAYOUT" },
		0x0007: { n:"COLUMNWIDTH" },
		0x0008: { n:"HIDDENCOLUMN" },
		0x0009: { n:"USERRANGE" },
		0x000A: { n:"SYSTEMRANGE" },
		0x000B: { n:"ZEROFORCE" },
		0x000C: { n:"SORTKEYDIR" },
		0x000D: { n:"FILESEAL" },
		0x000E: { n:"DATAFILLNUMS" },
		0x000F: { n:"PRINTMAIN" },
		0x0010: { n:"PRINTSTRING" },
		0x0011: { n:"GRAPHMAIN" },
		0x0012: { n:"GRAPHSTRING" },
		0x0013: { n:"??" },
		0x0014: { n:"ERRCELL" },
		0x0015: { n:"NACELL" },
		0x0016: { n:"LABEL16", f:parse_LABEL_16},
		0x0017: { n:"NUMBER17", f:parse_NUMBER_17 },
		0x0018: { n:"NUMBER18", f:parse_NUMBER_18 },
		0x0019: { n:"FORMULA19", f:parse_FORMULA_19},
		0x001A: { n:"FORMULA1A" },
		0x001B: { n:"XFORMAT", f:parse_XFORMAT },
		0x001C: { n:"DTLABELMISC" },
		0x001D: { n:"DTLABELCELL" },
		0x001E: { n:"GRAPHWINDOW" },
		0x001F: { n:"CPA" },
		0x0020: { n:"LPLAUTO" },
		0x0021: { n:"QUERY" },
		0x0022: { n:"HIDDENSHEET" },
		0x0023: { n:"??" },
		0x0025: { n:"NUMBER25", f:parse_NUMBER_25 },
		0x0026: { n:"??" },
		0x0027: { n:"NUMBER27", f:parse_NUMBER_27 },
		0x0028: { n:"FORMULA28", f:parse_FORMULA_28 },
		0x008E: { n:"??" },
		0x0093: { n:"??" },
		0x0096: { n:"??" },
		0x0097: { n:"??" },
		0x0098: { n:"??" },
		0x0099: { n:"??" },
		0x009A: { n:"??" },
		0x009B: { n:"??" },
		0x009C: { n:"??" },
		0x00A3: { n:"??" },
		0x00AE: { n:"??" },
		0x00AF: { n:"??" },
		0x00B0: { n:"??" },
		0x00B1: { n:"??" },
		0x00B8: { n:"??" },
		0x00B9: { n:"??" },
		0x00BA: { n:"??" },
		0x00BB: { n:"??" },
		0x00BC: { n:"??" },
		0x00C3: { n:"??" },
		0x00C9: { n:"??" },
		0x00CC: { n:"SHEETNAMECS", f:parse_SHEETNAMECS },
		0x00CD: { n:"??" },
		0x00CE: { n:"??" },
		0x00CF: { n:"??" },
		0x00D0: { n:"??" },
		0x0100: { n:"??" },
		0x0103: { n:"??" },
		0x0104: { n:"??" },
		0x0105: { n:"??" },
		0x0106: { n:"??" },
		0x0107: { n:"??" },
		0x0109: { n:"??" },
		0x010A: { n:"??" },
		0x010B: { n:"??" },
		0x010C: { n:"??" },
		0x010E: { n:"??" },
		0x010F: { n:"??" },
		0x0180: { n:"??" },
		0x0185: { n:"??" },
		0x0186: { n:"??" },
		0x0189: { n:"??" },
		0x018C: { n:"??" },
		0x0200: { n:"??" },
		0x0202: { n:"??" },
		0x0201: { n:"??" },
		0x0204: { n:"??" },
		0x0205: { n:"??" },
		0x0280: { n:"??" },
		0x0281: { n:"??" },
		0x0282: { n:"??" },
		0x0283: { n:"??" },
		0x0284: { n:"??" },
		0x0285: { n:"??" },
		0x0286: { n:"??" },
		0x0287: { n:"??" },
		0x0288: { n:"??" },
		0x0292: { n:"??" },
		0x0293: { n:"??" },
		0x0294: { n:"??" },
		0x0295: { n:"??" },
		0x0296: { n:"??" },
		0x0299: { n:"??" },
		0x029A: { n:"??" },
		0x0300: { n:"??" },
		0x0304: { n:"??" },
		0x0601: { n:"SHEETINFOQP", f:parse_SHEETINFOQP },
		0x0640: { n:"??" },
		0x0642: { n:"??" },
		0x0701: { n:"??" },
		0x0702: { n:"??" },
		0x0703: { n:"??" },
		0x0704: { n:"??" },
		0x0780: { n:"??" },
		0x0800: { n:"??" },
		0x0801: { n:"??" },
		0x0804: { n:"??" },
		0x0A80: { n:"??" },
		0x2AF6: { n:"??" },
		0x3231: { n:"??" },
		0x6E49: { n:"??" },
		0x6F44: { n:"??" },
		0xFFFF: { n:"" }
	};

	/* TODO: fill out and verify this table across QP versions */
	var QPWNFTable = {
		0x05: "dd-mmm-yy",
		0x06: "dd-mmm",
		0x07: "mmm-yy",
		0x08: "mm/dd/yy", // Long Date Intl
		0x0A: "hh:mm:ss AM/PM",
		0x0B: "hh:mm AM/PM",
		0x0E: "dd-mmm-yyyy",
		0x0F: "mmm-yyyy",

		/* It is suspected that the the low nybble specifies decimal places */
		0x0022: "0.00",
		0x0032: "0.00;[Red]0.00",
		0x0042: "0.00;\(0.00\)",
		0x0052: "0.00;[Red]\(0.00\)",
		0x00A2: '"$"#,##0.00;\\("$"#,##0.00\\)',
		0x0120: '0%',
		0x0130: '0E+00',
		0x0140: '# ?/?'
	};

	function parse_qpw_str(p) {
		var cch = p.read_shift(2);
		var flags = p.read_shift(1);
		/* TODO: find examples with nonzero flags */
		if(flags != 0) throw "unsupported QPW string type " + flags.toString(16);
		return p.read_shift(cch, "sbcs-cont");
	}

	/* QPW uses a different set of record types */
	function qpw_to_workbook_buf(d, opts)/*:Workbook*/ {
		prep_blob(d, 0);
		var o = opts || {};
		if(DENSE != null && o.dense == null) o.dense = DENSE;
		var s/*:Worksheet*/ = ({}/*:any*/); if(o.dense) s["!data"] = [];
		var SST = [], sname = "", formulae = [];
		var range = {s:{r:-1,c:-1}, e:{r:-1,c:-1}};
		var cnt = 0, type = 0, C = 0, R = 0;
		var wb = { SheetNames: [], Sheets: {} };
		var FMTS = [];
		outer: while(d.l < d.length) {
			var RT = d.read_shift(2), length = d.read_shift(2);
			var p = d.slice(d.l, d.l + length);
			prep_blob(p, 0);
			switch(RT) {
				case 0x01: /* BOF */
					if(p.read_shift(4) != 0x39575051) throw "Bad QPW9 BOF!";
					break;
				case 0x02: /* EOF */ break outer;

				case 0x08: /* NF */ break; // TODO: this is tied to custom number formats

				case 0x0A: /* FORMATS */ {
					var fcnt = p.read_shift(4);
					var step = ((p.length - p.l)/ fcnt)|0;
					for(var ifmt = 0; ifmt < fcnt; ++ifmt) {
						var end = p.l + step;
						var fmt = {};
						p.l += 2;
						fmt.numFmtId = p.read_shift(2);
						if(QPWNFTable[fmt.numFmtId]) fmt.z = QPWNFTable[fmt.numFmtId];
						p.l = end;
						FMTS.push(fmt);
					}
				} break;

				/* TODO: The behavior here should be consistent with Numbers: QP Notebook ~ .TN.SheetArchive, QP Sheet ~ .TST.TableModelArchive */
				case 0x0401: /* BON */ break;
				case 0x0402: /* EON */ /* TODO: backfill missing sheets based on BON cnt */ break;

				case 0x0407: { /* SST */
					p.l += 12;
					while(p.l < p.length) {
						cnt = p.read_shift(2);
						type = p.read_shift(1);
						SST.push(p.read_shift(cnt, 'cstr'));
					}
				} break;
				case 0x0408: { /* FORMULAE */
					//p.l += 12;
					//while(p.l < p.length) {
					//	cnt = p.read_shift(2);
					//	formulae.push(p.slice(p.l, p.l + cnt + 1)); p.l += cnt + 1;
					//}
				} break;

				case 0x0601: { /* BOS */
					var sidx = p.read_shift(2);
					s = ({}/*:any*/); if(o.dense) s["!data"] = [];
					range.s.c = p.read_shift(2);
					range.e.c = p.read_shift(2);
					range.s.r = p.read_shift(4);
					range.e.r = p.read_shift(4);
					p.l += 4;
					if(p.l + 2 < p.length) {
						cnt = p.read_shift(2);
						type = p.read_shift(1);
						sname = cnt == 0 ? "" : p.read_shift(cnt, 'cstr');
					}
					if(!sname) sname = encode_col(sidx);
					/* TODO: backfill empty sheets */
				} break;
				case 0x0602: { /* EOS */
					/* NOTE: QP valid range A1:IV1000000 */
					if(range.s.c > 0xFF || range.s.r > 999999) break;
					if(range.e.c < range.s.c) range.e.c = range.s.c;
					if(range.e.r < range.s.r) range.e.r = range.s.r;
					s["!ref"] = encode_range(range);
					book_append_sheet(wb, s, sname); // TODO: a barrel roll
				} break;

				case 0x0A01: { /* COL (like XLS Row, modulo the layout transposition) */
					C = p.read_shift(2);
					if(range.e.c < C) range.e.c = C;
					if(range.s.c > C) range.s.c = C;
					R = p.read_shift(4);
					if(range.s.r > R) range.s.r = R;
					R = p.read_shift(4);
					if(range.e.r < R) range.e.r = R;
				} break;

				case 0x0C01: { /* MulCells (like XLS MulRK, but takes advantage of common column data patterns) */
					R = p.read_shift(4), cnt = p.read_shift(4);
					if(range.s.r > R) range.s.r = R;
					if(range.e.r < R + cnt - 1) range.e.r = R + cnt - 1;
					var CC = encode_col(C);
					while(p.l < p.length) {
						var cell = { t: "z" };
						var flags = p.read_shift(1), fmtidx = -1;
						if(flags & 0x80) fmtidx = p.read_shift(2);
						var mul = (flags & 0x40) ? p.read_shift(2) - 1: 0;
						switch(flags & 0x1F) {
							case 0: break;
							case 1: break;
							case 2: cell = { t: "n", v: p.read_shift(2) }; break;
							case 3: cell = { t: "n", v: p.read_shift(2, 'i') }; break;
							case 4: cell = { t: "n", v: parse_RkNumber(p) }; break;
							case 5: cell = { t: "n", v: p.read_shift(8, 'f') }; break;
							case 7: cell = { t: "s", v: SST[type = p.read_shift(4) - 1] }; break;
							case 8:
								cell = { t: "n", v: p.read_shift(8, 'f') };
								p.l += 2; /* cell.f = formulae[p.read_shift(4)]; */ p.l += 4;
								if(isNaN(cell.v)) cell = { t: "e", v: 0x0F }; // #VALUE!
								break;
							default: throw "Unrecognized QPW cell type " + (flags & 0x1F);
						}
						if(fmtidx != -1 && (FMTS[fmtidx - 1]||{}).z) cell.z = FMTS[fmtidx-1].z;
						var delta = 0;
						if(flags & 0x20) switch(flags & 0x1F) {
							case 2: delta = p.read_shift(2); break;
							case 3: delta = p.read_shift(2, 'i'); break;
							case 7: delta = p.read_shift(2); break;
							default: throw "Unsupported delta for QPW cell type " + (flags & 0x1F);
						}
						if(!(!o.sheetStubs && cell.t == "z")) {
							var newcell = dup(cell);
							if(cell.t == "n" && cell.z && fmt_is_date(cell.z) && o.cellDates) {
								newcell.v = numdate(cell.v); newcell.t = typeof newcell.v == "number" ? 'n' : 'd';
							}
							if(s["!data"] != null) {
								if(!s["!data"][R]) s["!data"][R] = [];
								s["!data"][R][C] = newcell;
							} else s[CC + encode_row(R)] = newcell;
						}
						++R; --cnt;
						while(mul-- > 0 && cnt >= 0) {
							if(flags & 0x20) switch(flags & 0x1F) {
								case 2: cell = { t: "n", v: (cell.v + delta) & 0xFFFF }; break;
								case 3: cell = { t: "n", v: (cell.v + delta) & 0xFFFF }; if(cell.v > 0x7FFF) cell.v -= 0x10000; break;
								case 7: cell = { t: "s", v: SST[type = (type + delta) >>> 0] }; break;
								default: throw "Cannot apply delta for QPW cell type " + (flags & 0x1F);
							} else switch(flags & 0x1F) {
								case 1: cell = { t: "z" }; break;
								case 2: cell = { t: "n", v: p.read_shift(2) }; break;
								case 7: cell = { t: "s", v: SST[type = p.read_shift(4) - 1] }; break;
								default: throw "Cannot apply repeat for QPW cell type " + (flags & 0x1F);
							}
							if(fmtidx != -1);
							if(!(!o.sheetStubs && cell.t == "z")) {
								if(s["!data"] != null) {
									if(!s["!data"][R]) s["!data"][R] = [];
									s["!data"][R][C] = cell;
								} else s[CC + encode_row(R)] = cell;
							}
							++R; --cnt;
						}
					}
				} break;

				case 0x0C02: { /* String (result of string formula expression) */
					C = p.read_shift(2);
					R = p.read_shift(4);
					var str = parse_qpw_str(p);
					/* TODO: QP10 record has an additional unknown character after the string */
					if(s["!data"] != null) {
						if(!s["!data"][R]) s["!data"][R] = [];
						s["!data"][R][C] = { t:"s", v:str };
					} else s[encode_col(C) + encode_row(R)] = { t:"s", v:str };
				} break;

				default: break;
			}
			d.l += length;
		}
		return wb;
	}

	return {
		sheet_to_wk1: sheet_to_wk1,
		book_to_wk3: book_to_wk3,
		to_workbook: lotus_to_workbook
	};
})();
/* 18.4.7 rPr CT_RPrElt */
function parse_rpr(rpr) {
	var font = {}, m = rpr.match(tagregex), i = 0;
	var pass = false;
	if(m) for(;i!=m.length; ++i) {
		var y = parsexmltag(m[i]);
		switch(y[0].replace(/<\w*:/g,"<")) {
			/* 18.8.12 condense CT_BooleanProperty */
			/* ** not required . */
			case '<condense': break;
			/* 18.8.17 extend CT_BooleanProperty */
			/* ** not required . */
			case '<extend': break;
			/* 18.8.36 shadow CT_BooleanProperty */
			/* ** not required . */
			case '<shadow':
				if(!y.val) break;
				/* falls through */
			case '<shadow>':
			case '<shadow/>': font.shadow = 1; break;
			case '</shadow>': break;

			/* 18.4.1 charset CT_IntProperty TODO */
			case '<charset':
				if(y.val == '1') break;
				font.cp = CS2CP[parseInt(y.val, 10)];
				break;

			/* 18.4.2 outline CT_BooleanProperty TODO */
			case '<outline':
				if(!y.val) break;
				/* falls through */
			case '<outline>':
			case '<outline/>': font.outline = 1; break;
			case '</outline>': break;

			/* 18.4.5 rFont CT_FontName */
			case '<rFont': font.name = y.val; break;

			/* 18.4.11 sz CT_FontSize */
			case '<sz': font.sz = y.val; break;

			/* 18.4.10 strike CT_BooleanProperty */
			case '<strike':
				if(!y.val) break;
				/* falls through */
			case '<strike>':
			case '<strike/>': font.strike = 1; break;
			case '</strike>': break;

			/* 18.4.13 u CT_UnderlineProperty */
			case '<u':
				if(!y.val) break;
				switch(y.val) {
					case 'double': font.uval = "double"; break;
					case 'singleAccounting': font.uval = "single-accounting"; break;
					case 'doubleAccounting': font.uval = "double-accounting"; break;
				}
				/* falls through */
			case '<u>':
			case '<u/>': font.u = 1; break;
			case '</u>': break;

			/* 18.8.2 b */
			case '<b':
				if(y.val == '0') break;
				/* falls through */
			case '<b>':
			case '<b/>': font.b = 1; break;
			case '</b>': break;

			/* 18.8.26 i */
			case '<i':
				if(y.val == '0') break;
				/* falls through */
			case '<i>':
			case '<i/>': font.i = 1; break;
			case '</i>': break;

			/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */
			case '<color':
				if(y.rgb) font.color = y.rgb.slice(2,8);
				break;
			case '<color>': case '<color/>': case '</color>': break;

			/* 18.8.18 family ST_FontFamily */
			case '<family': font.family = y.val; break;
			case '<family>': case '<family/>': case '</family>': break;

			/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */
			case '<vertAlign': font.valign = y.val; break;
			case '<vertAlign>': case '<vertAlign/>': case '</vertAlign>': break;

			/* 18.8.35 scheme CT_FontScheme TODO */
			case '<scheme': break;
			case '<scheme>': case '<scheme/>': case '</scheme>': break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': break;
			case '<ext': pass = true; break;
			case '</ext>': pass = false; break;
			default:
				if(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);
		}
	}
	return font;
}

var parse_rs = /*#__PURE__*/(function() {
	/* 18.4.4 r CT_RElt */
	function parse_r(r) {
		/* 18.4.12 t ST_Xstring */
		var t = str_match_xml_ns(r, "t")/*, cp = 65001*/;
		if(!t) return {t:"s", v:""};

		var o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);
		var rpr = str_match_xml_ns(r, "rPr");
		if(rpr) o.s = parse_rpr(rpr[1]);
		return o;
	}
	var rregex = /<(?:\w+:)?r>/g, rend = /<\/(?:\w+:)?r>/;
	return function parse_rs(rs) {
		return rs.replace(rregex,"").split(rend).map(parse_r).filter(function(r) { return r.v; });
	};
})();


/* Parse a list of <r> tags */
var rs_to_html = /*#__PURE__*/(function parse_rs_factory() {
	var nlregex = /(\r\n|\n)/g;
	function parse_rpr2(font, intro, outro) {
		var style/*:Array<string>*/ = [];

		if(font.u) style.push("text-decoration: underline;");
		if(font.uval) style.push("text-underline-style:" + font.uval + ";");
		if(font.sz) style.push("font-size:" + font.sz + "pt;");
		if(font.outline) style.push("text-effect: outline;");
		if(font.shadow) style.push("text-shadow: auto;");
		intro.push('<span style="' + style.join("") + '">');

		if(font.b) { intro.push("<b>"); outro.push("</b>"); }
		if(font.i) { intro.push("<i>"); outro.push("</i>"); }
		if(font.strike) { intro.push("<s>"); outro.push("</s>"); }

		var align = font.valign || "";
		if(align == "superscript" || align == "super") align = "sup";
		else if(align == "subscript") align = "sub";
		if(align != "") { intro.push("<" + align + ">"); outro.push("</" + align + ">"); }

		outro.push("</span>");
		return font;
	}

	/* 18.4.4 r CT_RElt */
	function r_to_html(r) {
		var terms/*:[Array<string>, string, Array<string>]*/ = [[],r.v,[]];
		if(!r.v) return "";

		if(r.s) parse_rpr2(r.s, terms[0], terms[2]);

		return terms[0].join("") + terms[1].replace(nlregex,'<br/>') + terms[2].join("");
	}

	return function parse_rs(rs) {
		return rs.map(r_to_html).join("");
	};
})();

/* 18.4.8 si CT_Rst */
var sitregex = /<(?:\w+:)?t\b[^<>]*>([^<]*)<\/(?:\w+:)?t>/g, sirregex = /<(?:\w+:)?r\b[^<>]*>/;
function parse_si(x, opts) {
	var html = opts ? opts.cellHTML : true;
	var z = {};
	if(!x) return { t: "" };
	//var y;
	/* 18.4.12 t ST_Xstring (Plaintext String) */
	// TODO: is whitespace actually valid here?
	if(x.match(/^\s*<(?:\w+:)?t[^>]*>/)) {
		z.t = unescapexml(utf8read(x.slice(x.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||""), true);
		z.r = utf8read(x);
		if(html) z.h = escapehtml(z.t);
	}
	/* 18.4.4 r CT_RElt (Rich Text Run) */
	else if((/*y = */x.match(sirregex))) {
		z.r = utf8read(x);
		z.t = unescapexml(utf8read((str_remove_xml_ns_g(x, "rPh").match(sitregex)||[]).join("").replace(tagregex,"")), true);
		if(html) z.h = rs_to_html(parse_rs(z.r));
	}
	/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */
	/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */
	return z;
}

/* 18.4 Shared String Table */
var sstr1 = /<(?:\w+:)?(?:si|sstItem)>/g;
var sstr2 = /<\/(?:\w+:)?(?:si|sstItem)>/;
function parse_sst_xml(data/*:string*/, opts)/*:SST*/ {
	var s/*:SST*/ = ([]/*:any*/), ss = "";
	if(!data) return s;
	/* 18.4.9 sst CT_Sst */
	var sst = str_match_xml_ns(data, "sst");
	if(sst) {
		ss = sst[1].replace(sstr1,"").split(sstr2);
		for(var i = 0; i != ss.length; ++i) {
			var o = parse_si(ss[i].trim(), opts);
			if(o != null) s[s.length] = o;
		}
		sst = parsexmltag(sst[0].slice(0, sst[0].indexOf(">"))); s.Count = sst.count; s.Unique = sst.uniqueCount;
	}
	return s;
}

var straywsregex = /^\s|\s$|[\t\n\r]/;
function write_sst_xml(sst/*:SST*/, opts)/*:string*/ {
	if(!opts.bookSST) return "";
	var o = [XML_HEADER];
	o[o.length] = (writextag('sst', null, {
		xmlns: XMLNS_main[0],
		count: sst.Count,
		uniqueCount: sst.Unique
	}));
	for(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;
		var s/*:XLString*/ = sst[i];
		var sitag = "<si>";
		if(s.r) sitag += s.r;
		else {
			sitag += "<t";
			if(!s.t) s.t = "";
			if(typeof s.t !== "string") s.t = String(s.t);
			if(s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
			sitag += ">" + escapexml(s.t) + "</t>";
		}
		sitag += "</si>";
		o[o.length] = (sitag);
	}
	if(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* [MS-XLSB] 2.4.221 BrtBeginSst */
function parse_BrtBeginSst(data) {
	return [data.read_shift(4), data.read_shift(4)];
}

/* [MS-XLSB] 2.1.7.45 Shared Strings */
function parse_sst_bin(data, opts)/*:SST*/ {
	var s/*:SST*/ = ([]/*:any*/);
	var pass = false;
	recordhopper(data, function hopper_sst(val, R, RT) {
		switch(RT) {
			case 0x009F: /* BrtBeginSst */
				s.Count = val[0]; s.Unique = val[1]; break;
			case 0x0013: /* BrtSSTItem */
				s.push(val); break;
			case 0x00A0: /* BrtEndSst */
				return true;

			case 0x0023: /* BrtFRTBegin */
				pass = true; break;
			case 0x0024: /* BrtFRTEnd */
				pass = false; break;

			default:
				if(R.T){}
				if(!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	});
	return s;
}

function write_BrtBeginSst(sst, o) {
	if(!o) o = new_buf(8);
	o.write_shift(4, sst.Count);
	o.write_shift(4, sst.Unique);
	return o;
}

var write_BrtSSTItem = write_RichStr;

function write_sst_bin(sst/*::, opts*/) {
	var ba = buf_array();
	write_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));
	for(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));
	/* FRTSST */
	write_record(ba, 0x00A0 /* BrtEndSst */);
	return ba.end();
}
function _JS2ANSI(str/*:string*/)/*:Array<number>*/ {
	if(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);
	var o/*:Array<number>*/ = [], oo = str.split("");
	for(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);
	return o;
}

/* [MS-OFFCRYPTO] 2.1.4 Version */
function parse_CRYPTOVersion(blob, length/*:?number*/) {
	var o/*:any*/ = {};
	o.Major = blob.read_shift(2);
	o.Minor = blob.read_shift(2);
	/*:: if(length == null) return o; */
	if(length >= 4) blob.l += length - 4;
	return o;
}

/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */
function parse_DataSpaceVersionInfo(blob) {
	var o = {};
	o.id = blob.read_shift(0, 'lpp4');
	o.R = parse_CRYPTOVersion(blob, 4);
	o.U = parse_CRYPTOVersion(blob, 4);
	o.W = parse_CRYPTOVersion(blob, 4);
	return o;
}

/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */
function parse_DataSpaceMapEntry(blob) {
	var len = blob.read_shift(4);
	var end = blob.l + len - 4;
	var o = {};
	var cnt = blob.read_shift(4);
	var comps/*:Array<{t:number, v:string}>*/ = [];
	/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */
	while(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });
	o.name = blob.read_shift(0, 'lpp4');
	o.comps = comps;
	if(blob.l != end) throw new Error("Bad DataSpaceMapEntry: " + blob.l + " != " + end);
	return o;
}

/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */
function parse_DataSpaceMap(blob) {
	var o = [];
	blob.l += 4; // must be 0x8
	var cnt = blob.read_shift(4);
	while(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));
	return o;
}

/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */
function parse_DataSpaceDefinition(blob)/*:Array<string>*/ {
	var o/*:Array<string>*/ = [];
	blob.l += 4; // must be 0x8
	var cnt = blob.read_shift(4);
	while(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));
	return o;
}

/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */
function parse_TransformInfoHeader(blob) {
	var o = {};
	/*var len = */blob.read_shift(4);
	blob.l += 4; // must be 0x1
	o.id = blob.read_shift(0, 'lpp4');
	o.name = blob.read_shift(0, 'lpp4');
	o.R = parse_CRYPTOVersion(blob, 4);
	o.U = parse_CRYPTOVersion(blob, 4);
	o.W = parse_CRYPTOVersion(blob, 4);
	return o;
}

function parse_Primary(blob) {
	/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */
	var hdr = parse_TransformInfoHeader(blob);
	/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */
	hdr.ename = blob.read_shift(0, '8lpp4');
	hdr.blksz = blob.read_shift(4);
	hdr.cmode = blob.read_shift(4);
	if(blob.read_shift(4) != 0x04) throw new Error("Bad !Primary record");
	return hdr;
}

/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */
function parse_EncryptionHeader(blob, length/*:number*/) {
	var tgt = blob.l + length;
	var o = {};
	o.Flags = (blob.read_shift(4) & 0x3F);
	blob.l += 4;
	o.AlgID = blob.read_shift(4);
	var valid = false;
	switch(o.AlgID) {
		case 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;
		case 0x6801: valid = (o.Flags == 0x04); break;
		case 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;
		default: throw 'Unrecognized encryption algorithm: ' + o.AlgID;
	}
	if(!valid) throw new Error("Encryption Flags/AlgID mismatch");
	o.AlgIDHash = blob.read_shift(4);
	o.KeySize = blob.read_shift(4);
	o.ProviderType = blob.read_shift(4);
	blob.l += 8;
	o.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');
	blob.l = tgt;
	return o;
}

/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */
function parse_EncryptionVerifier(blob, length/*:number*/) {
	var o = {}, tgt = blob.l + length;
	blob.l += 4; // SaltSize must be 0x10
	o.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;
	o.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;
	/*var sz = */blob.read_shift(4);
	o.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;
	return o;
}

/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */
function parse_EncryptionInfo(blob) {
	var vers = parse_CRYPTOVersion(blob);
	switch(vers.Minor) {
		case 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];
		case 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];
		case 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];
	}
	throw new Error("ECMA-376 Encrypted file unrecognized Version: " + vers.Minor);
}

/* [MS-OFFCRYPTO] 2.3.4.5  EncryptionInfo Stream (Standard Encryption) */
function parse_EncInfoStd(blob/*::, vers*/) {
	var flags = blob.read_shift(4);
	if((flags & 0x3F) != 0x24) throw new Error("EncryptionInfo mismatch");
	var sz = blob.read_shift(4);
	//var tgt = blob.l + sz;
	var hdr = parse_EncryptionHeader(blob, sz);
	var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);
	return { t:"Std", h:hdr, v:verifier };
}
/* [MS-OFFCRYPTO] 2.3.4.6  EncryptionInfo Stream (Extensible Encryption) */
function parse_EncInfoExt(/*::blob, vers*/) { throw new Error("File is password-protected: ECMA-376 Extensible"); }
/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */
function parse_EncInfoAgl(blob/*::, vers*/) {
	var KeyData = ["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];
	blob.l+=4;
	var xml = blob.read_shift(blob.length - blob.l, 'utf8');
	var o = {};
	xml.replace(tagregex, function xml_agile(x) {
		var y/*:any*/ = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;
			case '<encryption': case '</encryption>': break;
			case '<keyData': KeyData.forEach(function(k) { o[k] = y[k]; }); break;
			case '<dataIntegrity': o.encryptedHmacKey = y.encryptedHmacKey; o.encryptedHmacValue = y.encryptedHmacValue; break;
			case '<keyEncryptors>': case '<keyEncryptors': o.encs = []; break;
			case '</keyEncryptors>': break;

			case '<keyEncryptor': o.uri = y.uri; break;
			case '</keyEncryptor>': break;
			case '<encryptedKey': o.encs.push(y); break;
			default: throw y[0];
		}
	});
	return o;
}

/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */
function parse_RC4CryptoHeader(blob, length/*:number*/) {
	var o = {};
	var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4); length -= 4;
	if(vers.Minor != 2) throw new Error('unrecognized minor version code: ' + vers.Minor);
	if(vers.Major > 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);
	o.Flags = blob.read_shift(4); length -= 4;
	var sz = blob.read_shift(4); length -= 4;
	o.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;
	o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);
	return o;
}
/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */
function parse_RC4Header(blob/*::, length*/) {
	var o = {};
	var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);
	if(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;
	o.Salt = blob.read_shift(16);
	o.EncryptedVerifier = blob.read_shift(16);
	o.EncryptedVerifierHash = blob.read_shift(16);
	return o;
}

/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */
function crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {
	var Verifier = 0x0000, PasswordArray;
	var PasswordDecoded = _JS2ANSI(Password);
	var len = PasswordDecoded.length + 1, i, PasswordByte;
	var Intermediate1, Intermediate2, Intermediate3;
	PasswordArray = new_raw_buf(len);
	PasswordArray[0] = PasswordDecoded.length;
	for(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];
	for(i = len-1; i >= 0; --i) {
		PasswordByte = PasswordArray[i];
		Intermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;
		Intermediate2 = (Verifier << 1) & 0x7FFF;
		Intermediate3 = Intermediate1 | Intermediate2;
		Verifier = Intermediate3 ^ PasswordByte;
	}
	return Verifier ^ 0xCE4B;
}

/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */
var crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {
	var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];
	var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];
	var XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];
	var Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };
	var XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };
	var CreateXorKey_Method1 = function(Password) {
		var XorKey = InitialCode[Password.length - 1];
		var CurrentElement = 0x68;
		for(var i = Password.length-1; i >= 0; --i) {
			var Char = Password[i];
			for(var j = 0; j != 7; ++j) {
				if(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];
				Char *= 2; --CurrentElement;
			}
		}
		return XorKey;
	};
	return function(password/*:string*/) {
		var Password = _JS2ANSI(password);
		var XorKey = CreateXorKey_Method1(Password);
		var Index = Password.length;
		var ObfuscationArray = new_raw_buf(16);
		for(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;
		var Temp, PasswordLastChar, PadIndex;
		if((Index & 1) === 1) {
			Temp = XorKey >> 8;
			ObfuscationArray[Index] = XorRor(PadArray[0], Temp);
			--Index;
			Temp = XorKey & 0xFF;
			PasswordLastChar = Password[Password.length - 1];
			ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);
		}
		while(Index > 0) {
			--Index;
			Temp = XorKey >> 8;
			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
			--Index;
			Temp = XorKey & 0xFF;
			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
		}
		Index = 15;
		PadIndex = 15 - Password.length;
		while(PadIndex > 0) {
			Temp = XorKey >> 8;
			ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);
			--Index;
			--PadIndex;
			Temp = XorKey & 0xFF;
			ObfuscationArray[Index] = XorRor(Password[Index], Temp);
			--Index;
			--PadIndex;
		}
		return ObfuscationArray;
	};
})();

/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */
var crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {
	/* If XorArray is set, use it; if O is not set, make changes in-place */
	if(!O) O = Data;
	if(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);
	var Index, Value;
	for(Index = 0; Index != Data.length; ++Index) {
		Value = Data[Index];
		Value ^= XorArray[XorArrayIndex];
		Value = ((Value>>5) | (Value<<3)) & 0xFF;
		O[Index] = Value;
		++XorArrayIndex;
	}
	return [O, XorArrayIndex, XorArray];
};

var crypto_MakeXorDecryptor = function(password/*:string*/) {
	var XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);
	return function(Data) {
		var O = crypto_DecryptData_Method1("", Data, XorArrayIndex, XorArray);
		XorArrayIndex = O[1];
		return O[0];
	};
};

/* 2.5.343 */
function parse_XORObfuscation(blob, length, opts, out) {
	var o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);
	if(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);
	out.valid = o.verificationBytes === o.verifier;
	if(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);
	return o;
}

/* 2.4.117 */
function parse_FilePassHeader(blob, length/*:number*/, oo) {
	var o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;
	if(o.Info === 1) o.Data = parse_RC4Header(blob, length);
	else o.Data = parse_RC4CryptoHeader(blob, length);
	return o;
}
function parse_FilePass(blob, length/*:number*/, opts) {
	var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */
	if(o.Type) parse_FilePassHeader(blob, length-2, o);
	else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
	return o;
}


function rtf_to_sheet(d, opts) {
  switch (opts.type) {
    case "base64":
      return rtf_to_sheet_str(Base64_decode(d), opts);
    case "binary":
      return rtf_to_sheet_str(d, opts);
    case "buffer":
      return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
    case "array":
      return rtf_to_sheet_str(cc2str(d), opts);
  }
  throw new Error("Unrecognized type " + opts.type);
}
function rtf_to_sheet_str(str, opts) {
  var o = opts || {};
  var ws = {};
  var dense = o.dense;
  if (dense)
    ws["!data"] = [];
  var rows = str_match_ng(str, "\\trowd", "\\row");
  if (!rows)
    throw new Error("RTF missing table");
  var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };
  var row = [];
  rows.forEach(function(rowtf, R) {
    if (dense)
      row = ws["!data"][R] = [];
    var rtfre = /\\[\w\-]+\b/g;
    var last_index = 0;
    var res;
    var C = -1;
    var payload = [];
    while ((res = rtfre.exec(rowtf)) != null) {
      var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);
      if (data.charCodeAt(0) == 32)
        data = data.slice(1);
      if (data.length)
        payload.push(data);
      switch (res[0]) {
        case "\\cell":
          ++C;
          if (payload.length) {
            var cell = { v: payload.join(""), t: "s" };
            if (cell.v == "TRUE" || cell.v == "FALSE") {
              cell.v = cell.v == "TRUE";
              cell.t = "b";
            } else if (!isNaN(fuzzynum(cell.v))) {
              cell.t = "n";
              if (o.cellText !== false)
                cell.w = cell.v;
              cell.v = fuzzynum(cell.v);
            } else if (RBErr[cell.v] != null) {
              cell.t = "e";
              cell.w = cell.v;
              cell.v = RBErr[cell.v];
            }
            if (dense)
              row[C] = cell;
            else
              ws[encode_cell({ r: R, c: C })] = cell;
          }
          payload = [];
          break;
        case "\\par":
          payload.push("\n");
          break;
      }
      last_index = rtfre.lastIndex;
    }
    if (C > range.e.c)
      range.e.c = C;
  });
  ws["!ref"] = encode_range(range);
  return ws;
}
function rtf_to_workbook(d, opts) {
  var wb = sheet_to_workbook(rtf_to_sheet(d, opts), opts);
  wb.bookType = "rtf";
  return wb;
}
function sheet_to_rtf(ws, opts) {
  var o = ["{\\rtf1\\ansi"];
  if (!ws["!ref"])
    return o[0] + "}";
  var r = safe_decode_range(ws["!ref"]), cell;
  var dense = ws["!data"] != null, row = [];
  for (var R = r.s.r; R <= r.e.r; ++R) {
    o.push("\\trowd\\trautofit1");
    for (var C = r.s.c; C <= r.e.c; ++C)
      o.push("\\cellx" + (C + 1));
    o.push("\\pard\\intbl");
    if (dense)
      row = ws["!data"][R] || [];
    for (C = r.s.c; C <= r.e.c; ++C) {
      var coord = encode_cell({ r: R, c: C });
      cell = dense ? row[C] : ws[coord];
      if (!cell || cell.v == null && (!cell.f || cell.F)) {
        o.push(" \\cell");
        continue;
      }
      o.push(" " + (cell.w || (format_cell(cell), cell.w) || "").replace(/[\r\n]/g, "\\par "));
      o.push("\\cell");
    }
    o.push("\\pard\\intbl\\row");
  }
  return o.join("") + "}";
}
function hex2RGB(h) {
	var o = h.slice(h[0]==="#"?1:0).slice(0,6);
	return [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];
}
function rgb2Hex(rgb) {
	for(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);
	return o.toString(16).toUpperCase().slice(1);
}

function rgb2HSL(rgb) {
	var R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;
	var M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;
	if(C === 0) return [0, 0, R];

	var H6 = 0, S = 0, L2 = (M + m);
	S = C / (L2 > 1 ? 2 - L2 : L2);
	switch(M){
		case R: H6 = ((G - B) / C + 6)%6; break;
		case G: H6 = ((B - R) / C + 2); break;
		case B: H6 = ((R - G) / C + 4); break;
	}
	return [H6 / 6, S, L2 / 2];
}

function hsl2RGB(hsl){
	var H = hsl[0], S = hsl[1], L = hsl[2];
	var C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;
	var rgb = [m,m,m], h6 = 6*H;

	var X;
	if(S !== 0) switch(h6|0) {
		case 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;
		case 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;
		case 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;
		case 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;
		case 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;
		case 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;
	}
	for(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);
	return rgb;
}

/* 18.8.3 bgColor tint algorithm */
function rgb_tint(hex, tint) {
	if(tint === 0) return hex;
	var hsl = rgb2HSL(hex2RGB(hex));
	if (tint < 0) hsl[2] = hsl[2] * (1 + tint);
	else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);
	return rgb2Hex(hsl2RGB(hsl));
}

/* 18.3.1.13 width calculations */
/* [MS-OI29500] 2.1.595 Column Width & Formatting */
var DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;
function width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }
function px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }
function char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }
//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }
//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }
function cycle_width(collw) { return char2width(px2char(width2px(collw))); }
/* XLSX/XLSB/XLS specify width in units of MDW */
function find_mdw_colw(collw) {
	var delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;
	if(delta > 0.005) for(MDW=MIN_MDW; MDW<MAX_MDW; ++MDW) if(Math.abs(collw - cycle_width(collw)) <= delta) { delta = Math.abs(collw - cycle_width(collw)); _MDW = MDW; }
	MDW = _MDW;
}
/* XLML specifies width in terms of pixels */
/*function find_mdw_wpx(wpx) {
	var delta = Infinity, guess = 0, _MDW = MIN_MDW;
	for(MDW=MIN_MDW; MDW<MAX_MDW; ++MDW) {
		guess = char2width_(px2char_(wpx))*256;
		guess = (guess) % 1;
		if(guess > 0.5) guess--;
		if(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }
	}
	MDW = _MDW;
}*/

function process_col(coll/*:ColInfo*/) {
	if(coll.width) {
		coll.wpx = width2px(coll.width);
		coll.wch = px2char(coll.wpx);
		coll.MDW = MDW;
	} else if(coll.wpx) {
		coll.wch = px2char(coll.wpx);
		coll.width = char2width(coll.wch);
		coll.MDW = MDW;
	} else if(typeof coll.wch == 'number') {
		coll.width = char2width(coll.wch);
		coll.wpx = width2px(coll.width);
		coll.MDW = MDW;
	}
	if(coll.customWidth) delete coll.customWidth;
}

var DEF_PPI = 96, PPI = DEF_PPI;
function px2pt(px) { return px * 96 / PPI; }
function pt2px(pt) { return pt * PPI / 96; }

/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
var XLMLPatternTypeMap = {
	"None": "none",
	"Solid": "solid",
	"Gray50": "mediumGray",
	"Gray75": "darkGray",
	"Gray25": "lightGray",
	"HorzStripe": "darkHorizontal",
	"VertStripe": "darkVertical",
	"ReverseDiagStripe": "darkDown",
	"DiagStripe": "darkUp",
	"DiagCross": "darkGrid",
	"ThickDiagCross": "darkTrellis",
	"ThinHorzStripe": "lightHorizontal",
	"ThinVertStripe": "lightVertical",
	"ThinReverseDiagStripe": "lightDown",
	"ThinHorzCross": "lightGrid"
};

/* 18.8.5 borders CT_Borders */
function parse_borders(t, styles, themes, opts) {
	styles.Borders = [];
	var border = {};
	var pass = false;
	(t.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<borders': case '<borders>': case '</borders>': break;

			/* 18.8.4 border CT_Border */
			case '<border': case '<border>': case '<border/>':
				border = /*::(*/{}/*:: :any)*/;
				if(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);
				if(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);
				styles.Borders.push(border);
				break;
			case '</border>': break;

			/* note: not in spec, appears to be CT_BorderPr */
			case '<left/>': break;
			case '<left': case '<left>': break;
			case '</left>': break;

			/* note: not in spec, appears to be CT_BorderPr */
			case '<right/>': break;
			case '<right': case '<right>': break;
			case '</right>': break;

			/* 18.8.43 top CT_BorderPr */
			case '<top/>': break;
			case '<top': case '<top>': break;
			case '</top>': break;

			/* 18.8.6 bottom CT_BorderPr */
			case '<bottom/>': break;
			case '<bottom': case '<bottom>': break;
			case '</bottom>': break;

			/* 18.8.13 diagonal CT_BorderPr */
			case '<diagonal': case '<diagonal>': case '<diagonal/>': break;
			case '</diagonal>': break;

			/* 18.8.25 horizontal CT_BorderPr */
			case '<horizontal': case '<horizontal>': case '<horizontal/>': break;
			case '</horizontal>': break;

			/* 18.8.44 vertical CT_BorderPr */
			case '<vertical': case '<vertical>': case '<vertical/>': break;
			case '</vertical>': break;

			/* 18.8.37 start CT_BorderPr */
			case '<start': case '<start>': case '<start/>': break;
			case '</start>': break;

			/* 18.8.16 end CT_BorderPr */
			case '<end': case '<end>': case '<end/>': break;
			case '</end>': break;

			/* 18.8.? color CT_Color */
			case '<color': case '<color>':
				break;
			case '<color/>': case '</color>': break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': break;
			case '<ext': pass = true; break;
			case '</ext>': pass = false; break;
			default: if(opts && opts.WTF) {
				if(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');
			}
		}
	});
}

/* 18.8.21 fills CT_Fills */
function parse_fills(t, styles, themes, opts) {
	styles.Fills = [];
	var fill = {};
	var pass = false;
	(t.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<fills': case '<fills>': case '</fills>': break;

			/* 18.8.20 fill CT_Fill */
			case '<fill>': case '<fill': case '<fill/>':
				fill = {}; styles.Fills.push(fill); break;
			case '</fill>': break;

			/* 18.8.24 gradientFill CT_GradientFill */
			case '<gradientFill>': break;
			case '<gradientFill':
			case '</gradientFill>': styles.Fills.push(fill); fill = {}; break;

			/* 18.8.32 patternFill CT_PatternFill */
			case '<patternFill': case '<patternFill>':
				if(y.patternType) fill.patternType = y.patternType;
				break;
			case '<patternFill/>': case '</patternFill>': break;

			/* 18.8.3 bgColor CT_Color */
			case '<bgColor':
				if(!fill.bgColor) fill.bgColor = {};
				if(y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);
				if(y.theme) fill.bgColor.theme = parseInt(y.theme, 10);
				if(y.tint) fill.bgColor.tint = parseFloat(y.tint);
				/* Excel uses ARGB strings */
				if(y.rgb) fill.bgColor.rgb = y.rgb.slice(-6);
				break;
			case '<bgColor/>': case '</bgColor>': break;

			/* 18.8.19 fgColor CT_Color */
			case '<fgColor':
				if(!fill.fgColor) fill.fgColor = {};
				if(y.theme) fill.fgColor.theme = parseInt(y.theme, 10);
				if(y.tint) fill.fgColor.tint = parseFloat(y.tint);
				/* Excel uses ARGB strings */
				if(y.rgb != null) fill.fgColor.rgb = y.rgb.slice(-6);
				break;
			case '<fgColor/>': case '</fgColor>': break;

			/* 18.8.38 stop CT_GradientStop */
			case '<stop': case '<stop/>': break;
			case '</stop>': break;

			/* 18.8.? color CT_Color */
			case '<color': case '<color/>': break;
			case '</color>': break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': break;
			case '<ext': pass = true; break;
			case '</ext>': pass = false; break;
			default: if(opts && opts.WTF) {
				if(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');
			}
		}
	});
}

/* 18.8.23 fonts CT_Fonts */
function parse_fonts(t, styles, themes, opts) {
	styles.Fonts = [];
	var font = {};
	var pass = false;
	(t.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<fonts': case '<fonts>': case '</fonts>': break;

			/* 18.8.22 font CT_Font */
			case '<font': case '<font>': break;
			case '</font>': case '<font/>':
				styles.Fonts.push(font);
				font = {};
				break;

			/* 18.8.29 name CT_FontName */
			case '<name': if(y.val) font.name = utf8read(y.val); break;
			case '<name/>': case '</name>': break;

			/* 18.8.2  b CT_BooleanProperty */
			case '<b': font.bold = y.val ? parsexmlbool(y.val) : 1; break;
			case '<b/>': font.bold = 1; break;
			case '</b>': case '</b': break;

			/* 18.8.26 i CT_BooleanProperty */
			case '<i': font.italic = y.val ? parsexmlbool(y.val) : 1; break;
			case '<i/>': font.italic = 1; break;
			case '</i>': case '</i': break;

			/* 18.4.13 u CT_UnderlineProperty */
			case '<u':
				switch(y.val) {
					case "none": font.underline = 0x00; break;
					case "single": font.underline = 0x01; break;
					case "double": font.underline = 0x02; break;
					case "singleAccounting": font.underline = 0x21; break;
					case "doubleAccounting": font.underline = 0x22; break;
				} break;
			case '<u/>': font.underline = 1; break;
			case '</u>': case '</u': break;

			/* 18.4.10 strike CT_BooleanProperty */
			case '<strike': font.strike = y.val ? parsexmlbool(y.val) : 1; break;
			case '<strike/>': font.strike = 1; break;
			case '</strike>': case '</strike': break;

			/* 18.4.2  outline CT_BooleanProperty */
			case '<outline': font.outline = y.val ? parsexmlbool(y.val) : 1; break;
			case '<outline/>': font.outline = 1; break;
			case '</outline>': case '</outline': break;

			/* 18.8.36 shadow CT_BooleanProperty */
			case '<shadow': font.shadow = y.val ? parsexmlbool(y.val) : 1; break;
			case '<shadow/>': font.shadow = 1; break;
			case '</shadow>': case '</shadow': break;

			/* 18.8.12 condense CT_BooleanProperty */
			case '<condense': font.condense = y.val ? parsexmlbool(y.val) : 1; break;
			case '<condense/>': font.condense = 1; break;
			case '</condense>': case '</condense': break;

			/* 18.8.17 extend CT_BooleanProperty */
			case '<extend': font.extend = y.val ? parsexmlbool(y.val) : 1; break;
			case '<extend/>': font.extend = 1; break;
			case '</extend>': case '</extend': break;

			/* 18.4.11 sz CT_FontSize */
			case '<sz': if(y.val) font.sz = +y.val; break;
			case '<sz/>': case '</sz>': case '</sz': break;

			/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */
			case '<vertAlign': if(y.val) font.vertAlign = y.val; break;
			case '<vertAlign/>': case '</vertAlign>': case '</vertAlign': break;

			/* 18.8.18 family CT_FontFamily */
			case '<family': if(y.val) font.family = parseInt(y.val,10); break;
			case '<family/>': case '</family>': case '</family': break;

			/* 18.8.35 scheme CT_FontScheme */
			case '<scheme': if(y.val) font.scheme = y.val; break;
			case '<scheme/>': case '</scheme>': case '</scheme': break;

			/* 18.4.1 charset CT_IntProperty */
			case '<charset':
				if(y.val == '1') break;
				y.codepage = CS2CP[parseInt(y.val, 10)];
				break;
			case '<charset/>': case '</charset>': case '</charset': break;

			/* 18.?.? color CT_Color */
			case '<color':
				if(!font.color) font.color = {};
				if(y.auto) font.color.auto = parsexmlbool(y.auto);

				if(y.rgb) font.color.rgb = y.rgb.slice(-6);
				else if(y.indexed) {
					font.color.index = parseInt(y.indexed, 10);
					var icv = XLSIcv[font.color.index];
					if(font.color.index == 81) icv = XLSIcv[1];
					if(!icv) icv = XLSIcv[1]; //throw new Error(x); // note: 206 is valid
					font.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16);
				} else if(y.theme) {
					font.color.theme = parseInt(y.theme, 10);
					if(y.tint) font.color.tint = parseFloat(y.tint);
					if(y.theme && themes.themeElements && themes.themeElements.clrScheme) {
						font.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);
					}
				}

				break;
			case '<color/>': case '</color>': case '</color': break;

			/* note: sometimes mc:AlternateContent appears bare */
			case '<AlternateContent': pass = true; break;
			case '</AlternateContent>': case '</AlternateContent': pass = false; break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': break;
			case '<ext': pass = true; break;
			case '</ext>': pass = false; break;
			default: if(opts && opts.WTF) {
				if(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');
			}
		}
	});
}

/* 18.8.31 numFmts CT_NumFmts */
function parse_numFmts(t, styles, opts) {
	styles.NumberFmt = [];
	var k/*Array<number>*/ = (keys(table_fmt)/*:any*/);
	for(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];
	var m = t.match(tagregex);
	if(!m) return;
	for(i=0; i < m.length; ++i) {
		var y = parsexmltag(m[i]);
		switch(strip_ns(y[0])) {
			case '<numFmts': case '</numFmts>': case '<numFmts/>': case '<numFmts>': break;
			case '<numFmt': {
				var f=unescapexml(utf8read(y.formatCode)), j=parseInt(y.numFmtId,10);
				styles.NumberFmt[j] = f;
				if(j>0) {
					if(j > 0x188) {
						for(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;
						styles.NumberFmt[j] = f;
					}
					SSF__load(f,j);
				}
			} break;
			case '</numFmt>': break;
			default: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');
		}
	}
}

function write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {
	var o = ["<numFmts>"];
	[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {
		for(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
	});
	if(o.length === 1) return "";
	o[o.length] = ("</numFmts>");
	o[0] = writextag('numFmts', null, { count:o.length-2 }).replace("/>", ">");
	return o.join("");
}

/* 18.8.10 cellXfs CT_CellXfs */
var cellXF_uint = [ "numFmtId", "fillId", "fontId", "borderId", "xfId" ];
var cellXF_bool = [ "applyAlignment", "applyBorder", "applyFill", "applyFont", "applyNumberFormat", "applyProtection", "pivotButton", "quotePrefix" ];
function parse_cellXfs(t, styles, opts) {
	styles.CellXf = [];
	var xf;
	var pass = false;
	(t.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x), i = 0;
		switch(strip_ns(y[0])) {
			case '<cellXfs': case '<cellXfs>': case '<cellXfs/>': case '</cellXfs>': break;

			/* 18.8.45 xf CT_Xf */
			case '<xf': case '<xf/>': case '<xf>':
				xf = y;
				delete xf[0];
				for(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])
					xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
				for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
					xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
				if(styles.NumberFmt && xf.numFmtId > 0x188) {
					for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
				}
				styles.CellXf.push(xf); break;
			case '</xf>': break;

			/* 18.8.1 alignment CT_CellAlignment */
			case '<alignment': case '<alignment/>': case '<alignment>':
				var alignment = {};
				if(y.vertical) alignment.vertical = y.vertical;
				if(y.horizontal) alignment.horizontal = y.horizontal;
				if(y.textRotation != null) alignment.textRotation = y.textRotation;
				if(y.indent) alignment.indent = y.indent;
				if(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);
				xf.alignment = alignment;
				break;
			case '</alignment>': break;

			/* 18.8.33 protection CT_CellProtection */
			case '<protection': case '<protection>':
				break;
			case '</protection>': case '<protection/>': break;

			/* note: sometimes mc:AlternateContent appears bare */
			case '<AlternateContent': case '<AlternateContent>': pass = true; break;
			case '</AlternateContent>': pass = false; break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': break;
			case '<ext': pass = true; break;
			case '</ext>': pass = false; break;
			default: if(opts && opts.WTF) {
				if(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');
			}
		}
	});
}

function write_cellXfs(cellXfs)/*:string*/ {
	var o/*:Array<string>*/ = [];
	o[o.length] = (writextag('cellXfs',null));
	cellXfs.forEach(function(c) {
		o[o.length] = (writextag('xf', null, c));
	});
	o[o.length] = ("</cellXfs>");
	if(o.length === 2) return "";
	o[0] = writextag('cellXfs',null, {count:o.length-2}).replace("/>",">");
	return o.join("");
}

/* 18.8 Styles CT_Stylesheet*/
var parse_sty_xml= /*#__PURE__*/(function make_pstyx() {

return function parse_sty_xml(data, themes, opts) {
	var styles = {};
	if(!data) return styles;
	data = remove_doctype(str_remove_ng(data, "<!--", "-->"));
	/* 18.8.39 styleSheet CT_Stylesheet */
	var t;

	/* 18.8.31 numFmts CT_NumFmts ? */
	if((t=str_match_xml_ns(data, "numFmts"))) parse_numFmts(t[0], styles, opts);

	/* 18.8.23 fonts CT_Fonts ? */
	if((t=str_match_xml_ns(data, "fonts"))) parse_fonts(t[0], styles, themes, opts);

	/* 18.8.21 fills CT_Fills ? */
	if((t=str_match_xml_ns(data, "fills"))) parse_fills(t[0], styles, themes, opts);

	/* 18.8.5  borders CT_Borders ? */
	if((t=str_match_xml_ns(data, "borders"))) parse_borders(t[0], styles, themes, opts);

	/* 18.8.9  cellStyleXfs CT_CellStyleXfs ? */
	/* 18.8.8  cellStyles CT_CellStyles ? */

	/* 18.8.10 cellXfs CT_CellXfs ? */
	if((t=str_match_xml_ns(data, "cellXfs"))) parse_cellXfs(t[0], styles, opts);

	/* 18.8.15 dxfs CT_Dxfs ? */
	/* 18.8.42 tableStyles CT_TableStyles ? */
	/* 18.8.11 colors CT_Colors ? */
	/* 18.2.10 extLst CT_ExtensionList ? */

	return styles;
};
})();

function write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {
	var o = [XML_HEADER, writextag('styleSheet', null, {
		'xmlns': XMLNS_main[0],
		'xmlns:vt': XMLNS.vt
	})], w;
	if(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;
	o[o.length] = ('<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>');
	o[o.length] = ('<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>');
	o[o.length] = ('<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');
	o[o.length] = ('<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>');
	if((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);
	o[o.length] = ('<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>');
	o[o.length] = ('<dxfs count="0"/>');
	o[o.length] = ('<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>');

	if(o.length>2){ o[o.length] = ('</styleSheet>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* [MS-XLSB] 2.4.657 BrtFmt */
function parse_BrtFmt(data, length/*:number*/) {
	var numFmtId = data.read_shift(2);
	var stFmtCode = parse_XLWideString(data,length-2);
	return [numFmtId, stFmtCode];
}
function write_BrtFmt(i/*:number*/, f/*:string*/, o) {
	if(!o) o = new_buf(6 + 4 * f.length);
	o.write_shift(2, i);
	write_XLWideString(f, o);
	var out = (o.length > o.l) ? o.slice(0, o.l) : o;
	if(o.l == null) o.l = o.length;
	return out;
}

/* [MS-XLSB] 2.4.659 BrtFont TODO */
function parse_BrtFont(data, length/*:number*/, opts) {
	var out = ({}/*:any*/);

	out.sz = data.read_shift(2) / 20;

	var grbit = parse_FontFlags(data, 2, opts);
	if(grbit.fItalic) out.italic = 1;
	if(grbit.fCondense) out.condense = 1;
	if(grbit.fExtend) out.extend = 1;
	if(grbit.fShadow) out.shadow = 1;
	if(grbit.fOutline) out.outline = 1;
	if(grbit.fStrikeout) out.strike = 1;

	var bls = data.read_shift(2);
	if(bls === 0x02BC) out.bold = 1;

	switch(data.read_shift(2)) {
		/* case 0: out.vertAlign = "baseline"; break; */
		case 1: out.vertAlign = "superscript"; break;
		case 2: out.vertAlign = "subscript"; break;
	}

	var underline = data.read_shift(1);
	if(underline != 0) out.underline = underline;

	var family = data.read_shift(1);
	if(family > 0) out.family = family;

	var bCharSet = data.read_shift(1);
	if(bCharSet > 0) out.charset = bCharSet;

	data.l++;
	out.color = parse_BrtColor(data, 8);

	switch(data.read_shift(1)) {
		/* case 0: out.scheme = "none": break; */
		case 1: out.scheme = "major"; break;
		case 2: out.scheme = "minor"; break;
	}

	out.name = parse_XLWideString(data, length - 21);

	return out;
}
function write_BrtFont(font/*:any*/, o) {
	if(!o) o = new_buf(25+4*32);
	o.write_shift(2, font.sz * 20);
	write_FontFlags(font, o);
	o.write_shift(2, font.bold ? 0x02BC : 0x0190);
	var sss = 0;
	if(font.vertAlign == "superscript") sss = 1;
	else if(font.vertAlign == "subscript") sss = 2;
	o.write_shift(2, sss);
	o.write_shift(1, font.underline || 0);
	o.write_shift(1, font.family || 0);
	o.write_shift(1, font.charset || 0);
	o.write_shift(1, 0);
	write_BrtColor(font.color, o);
	var scheme = 0;
	if(font.scheme == "major") scheme = 1;
	if(font.scheme == "minor") scheme = 2;
	o.write_shift(1, scheme);
	write_XLWideString(font.name, o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.650 BrtFill */
var XLSBFillPTNames = [
	"none",
	"solid",
	"mediumGray",
	"darkGray",
	"lightGray",
	"darkHorizontal",
	"darkVertical",
	"darkDown",
	"darkUp",
	"darkGrid",
	"darkTrellis",
	"lightHorizontal",
	"lightVertical",
	"lightDown",
	"lightUp",
	"lightGrid",
	"lightTrellis",
	"gray125",
	"gray0625"
];
var rev_XLSBFillPTNames/*:EvertNumType*/;
/* TODO: gradient fill representation */
var parse_BrtFill = parsenoop;
function write_BrtFill(fill, o) {
	if(!o) o = new_buf(4*3 + 8*7 + 16*1);
	if(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);
	var fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];
	if(fls == null) fls = 0x28;
	o.write_shift(4, fls);
	var j = 0;
	if(fls != 0x28) {
		/* TODO: custom FG Color */
		write_BrtColor({auto:1}, o);
		/* TODO: custom BG Color */
		write_BrtColor({auto:1}, o);

		for(; j < 12; ++j) o.write_shift(4, 0);
	} else {
		for(; j < 4; ++j) o.write_shift(4, 0);

		for(; j < 12; ++j) o.write_shift(4, 0); /* TODO */
		/* iGradientType */
		/* xnumDegree */
		/* xnumFillToLeft */
		/* xnumFillToRight */
		/* xnumFillToTop */
		/* xnumFillToBottom */
		/* cNumStop */
		/* xfillGradientStop */
	}
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.824 BrtXF */
function parse_BrtXF(data, length/*:number*/) {
	var tgt = data.l + length;
	var ixfeParent = data.read_shift(2);
	var ifmt = data.read_shift(2);
	data.l = tgt;
	return {ixfe:ixfeParent, numFmtId:ifmt };
}
function write_BrtXF(data, ixfeP, o) {
	if(!o) o = new_buf(16);
	o.write_shift(2, ixfeP||0);
	o.write_shift(2, data.numFmtId||0);
	o.write_shift(2, 0); /* iFont */
	o.write_shift(2, 0); /* iFill */
	o.write_shift(2, 0); /* ixBorder */
	o.write_shift(1, 0); /* trot */
	o.write_shift(1, 0); /* indent */
	var flow = 0;
	o.write_shift(1, flow); /* flags */
	o.write_shift(1, 0); /* flags */
	o.write_shift(1, 0); /* xfGrbitAtr */
	o.write_shift(1, 0);
	return o;
}

/* [MS-XLSB] 2.5.4 Blxf TODO */
function write_Blxf(data, o) {
	if(!o) o = new_buf(10);
	o.write_shift(1, 0); /* dg */
	o.write_shift(1, 0);
	o.write_shift(4, 0); /* color */
	o.write_shift(4, 0); /* color */
	return o;
}
/* [MS-XLSB] 2.4.302 BrtBorder TODO */
var parse_BrtBorder = parsenoop;
function write_BrtBorder(border, o) {
	if(!o) o = new_buf(51);
	o.write_shift(1, 0); /* diagonal */
	write_Blxf(null, o); /* top */
	write_Blxf(null, o); /* bottom */
	write_Blxf(null, o); /* left */
	write_Blxf(null, o); /* right */
	write_Blxf(null, o); /* diag */
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.763 BrtStyle TODO */
function write_BrtStyle(style, o) {
	if(!o) o = new_buf(12+4*10);
	o.write_shift(4, style.xfId);
	o.write_shift(2, 1);
	o.write_shift(1, +style.builtinId);
	o.write_shift(1, 0); /* iLevel */
	write_XLNullableWideString(style.name || "", o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */
function write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {
	var o = new_buf(4+256*2*4);
	o.write_shift(4, cnt);
	write_XLNullableWideString(defTableStyle, o);
	write_XLNullableWideString(defPivotStyle, o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.1.7.50 Styles */
function parse_sty_bin(data, themes, opts) {
	var styles = {};
	styles.NumberFmt = ([]/*:any*/);
	for(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];

	styles.CellXf = [];
	styles.Fonts = [];
	var state/*:Array<string>*/ = [];
	var pass = false;
	recordhopper(data, function hopper_sty(val, R, RT) {
		switch(RT) {
			case 0x002C: /* BrtFmt */
				styles.NumberFmt[val[0]] = val[1]; SSF__load(val[1], val[0]);
				break;
			case 0x002B: /* BrtFont */
				styles.Fonts.push(val);
				if(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {
					val.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);
				}
				break;
			case 0x0401: /* BrtKnownFonts */ break;
			case 0x002D: /* BrtFill */
				break;
			case 0x002E: /* BrtBorder */
				break;
			case 0x002F: /* BrtXF */
				if(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {
					styles.CellXf.push(val);
				}
				break;
			case 0x0030: /* BrtStyle */
			case 0x01FB: /* BrtDXF */
			case 0x023C: /* BrtMRUColor */
			case 0x01DB: /* BrtIndexedColor */
				break;

			case 0x0493: /* BrtDXF14 */
			case 0x0836: /* BrtDXF15 */
			case 0x046A: /* BrtSlicerStyleElement */
			case 0x0200: /* BrtTableStyleElement */
			case 0x082F: /* BrtTimelineStyleElement */
			case 0x0C00: /* BrtUid */
				break;

			case 0x0023: /* BrtFRTBegin */
				pass = true; break;
			case 0x0024: /* BrtFRTEnd */
				pass = false; break;
			case 0x0025: /* BrtACBegin */
				state.push(RT); pass = true; break;
			case 0x0026: /* BrtACEnd */
				state.pop(); pass = false; break;

			default:
				if(R.T > 0) state.push(RT);
				else if(R.T < 0) state.pop();
				else if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	});
	return styles;
}

function write_FMTS_bin(ba, NF/*:?SSFTable*/) {
	if(!NF) return;
	var cnt = 0;
	[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {
		/*:: if(!NF) return; */
		for(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;
	});

	if(cnt == 0) return;
	write_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));
	[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {
		/*:: if(!NF) return; */
		for(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));
	});
	write_record(ba, 0x0268 /* BrtEndFmts */);
}

function write_FONTS_bin(ba/*::, data*/) {
	var cnt = 1;

	if(cnt == 0) return;
	write_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));
	write_record(ba, 0x002B /* BrtFont */, write_BrtFont({
		sz:12,
		color: {theme:1},
		name: "Calibri",
		family: 2,
		scheme: "minor"
	}));
	/* 1*65491BrtFont [ACFONTS] */
	write_record(ba, 0x0264 /* BrtEndFonts */);
}

function write_FILLS_bin(ba/*::, data*/) {
	var cnt = 2;

	if(cnt == 0) return;
	write_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));
	write_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:"none"}));
	write_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:"gray125"}));
	/* 1*65431BrtFill */
	write_record(ba, 0x025C /* BrtEndFills */);
}

function write_BORDERS_bin(ba/*::, data*/) {
	var cnt = 1;

	if(cnt == 0) return;
	write_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));
	write_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));
	/* 1*65430BrtBorder */
	write_record(ba, 0x0266 /* BrtEndBorders */);
}

function write_CELLSTYLEXFS_bin(ba/*::, data*/) {
	var cnt = 1;
	write_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));
	write_record(ba, 0x002F /* BrtXF */, write_BrtXF({
		numFmtId: 0,
		fontId:   0,
		fillId:   0,
		borderId: 0
	}, 0xFFFF));
	/* 1*65430(BrtXF *FRT) */
	write_record(ba, 0x0273 /* BrtEndCellStyleXFs */);
}

function write_CELLXFS_bin(ba, data) {
	write_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));
	data.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });
	/* 1*65430(BrtXF *FRT) */
	write_record(ba, 0x026A /* BrtEndCellXFs */);
}

function write_STYLES_bin(ba/*::, data*/) {
	var cnt = 1;

	write_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));
	write_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({
		xfId:0,
		builtinId:0,
		name:"Normal"
	}));
	/* 1*65430(BrtStyle *FRT) */
	write_record(ba, 0x026C /* BrtEndStyles */);
}

function write_DXFS_bin(ba/*::, data*/) {
	var cnt = 0;

	write_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));
	/* *2147483647(BrtDXF *FRT) */
	write_record(ba, 0x01FA /* BrtEndDXFs */);
}

function write_TABLESTYLES_bin(ba/*::, data*/) {
	var cnt = 0;

	write_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, "TableStyleMedium9", "PivotStyleMedium4"));
	/* *TABLESTYLE */
	write_record(ba, 0x01FD /* BrtEndTableStyles */);
}

function write_COLORPALETTE_bin(/*::ba, data*/) {
	return;
	/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */
}

/* [MS-XLSB] 2.1.7.50 Styles */
function write_sty_bin(wb, opts) {
	var ba = buf_array();
	write_record(ba, 0x0116 /* BrtBeginStyleSheet */);
	write_FMTS_bin(ba, wb.SSF);
	write_FONTS_bin(ba, wb);
	write_FILLS_bin(ba, wb);
	write_BORDERS_bin(ba, wb);
	write_CELLSTYLEXFS_bin(ba, wb);
	write_CELLXFS_bin(ba, opts.cellXfs);
	write_STYLES_bin(ba, wb);
	write_DXFS_bin(ba, wb);
	write_TABLESTYLES_bin(ba, wb);
	write_COLORPALETTE_bin(ba, wb);
	/* FRTSTYLESHEET*/
	write_record(ba, 0x0117 /* BrtEndStyleSheet */);
	return ba.end();
}
/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */
var XLSXThemeClrScheme = [
	'</a:lt1>', '</a:dk1>', '</a:lt2>', '</a:dk2>',
	'</a:accent1>', '</a:accent2>', '</a:accent3>',
	'</a:accent4>', '</a:accent5>', '</a:accent6>',
	'</a:hlink>', '</a:folHlink>'
];
/* 20.1.6.2 clrScheme CT_ColorScheme */
function parse_clrScheme(t, themes, opts) {
	themes.themeElements.clrScheme = [];
	var color = {};
	(t[0].match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		switch(y[0]) {
			/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */
			case '<a:clrScheme': case '</a:clrScheme>': break;

			/* 20.1.2.3.32 srgbClr CT_SRgbColor */
			case '<a:srgbClr':
				color.rgb = y.val; break;
			case '</a:srgbClr>': break;

			/* 20.1.2.3.33 sysClr CT_SystemColor */
			case '<a:sysClr':
				color.rgb = y.lastClr; break;
			case '</a:sysClr>': break;

			/* 20.1.4.1.1 accent1 (Accent 1) */
			/* 20.1.4.1.2 accent2 (Accent 2) */
			/* 20.1.4.1.3 accent3 (Accent 3) */
			/* 20.1.4.1.4 accent4 (Accent 4) */
			/* 20.1.4.1.5 accent5 (Accent 5) */
			/* 20.1.4.1.6 accent6 (Accent 6) */
			/* 20.1.4.1.9 dk1 (Dark 1) */
			/* 20.1.4.1.10 dk2 (Dark 2) */
			/* 20.1.4.1.15 folHlink (Followed Hyperlink) */
			/* 20.1.4.1.19 hlink (Hyperlink) */
			/* 20.1.4.1.22 lt1 (Light 1) */
			/* 20.1.4.1.23 lt2 (Light 2) */
			case '</a:dk1>':
			case '</a:lt1>':
			case '<a:dk1>':
			case '<a:lt1>':
			case '<a:dk2>': case '</a:dk2>':
			case '<a:lt2>': case '</a:lt2>':
			case '<a:accent1>': case '</a:accent1>':
			case '<a:accent2>': case '</a:accent2>':
			case '<a:accent3>': case '</a:accent3>':
			case '<a:accent4>': case '</a:accent4>':
			case '<a:accent5>': case '</a:accent5>':
			case '<a:accent6>': case '</a:accent6>':
			case '<a:hlink>': case '</a:hlink>':
			case '<a:folHlink>': case '</a:folHlink>':
				if (y[0].charAt(1) === '/') {
					themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;
					color = {};
				} else {
					color.name = y[0].slice(3, y[0].length - 1);
				}
				break;

			default: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');
		}
	});
}

/* 20.1.4.1.18 fontScheme CT_FontScheme */
function parse_fontScheme(/*::t, themes, opts*/) { }

/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */
function parse_fmtScheme(/*::t, themes, opts*/) { }

/* 20.1.6.10 themeElements CT_BaseStyles */
function parse_themeElements(data, themes, opts) {
	themes.themeElements = {};

	var t;

	/* clrScheme CT_ColorScheme */
	if(!(t=str_match_xml(data, "a:clrScheme"))) throw new Error('clrScheme not found in themeElements');
	parse_clrScheme(t, themes, opts);

	/* fontScheme CT_FontScheme */
	if(!(t=str_match_xml(data, "a:fontScheme"))) throw new Error('fontScheme not found in themeElements');
	parse_fontScheme(t, themes, opts);

	/* fmtScheme CT_StyleMatrix */
	if(!(t=str_match_xml(data, "a:fmtScheme"))) throw new Error('fmtScheme not found in themeElements');
	parse_fmtScheme(t, themes, opts);
}

/* 14.2.7 Theme Part */
function parse_theme_xml(data/*:string*/, opts) {
	/* 20.1.6.9 theme CT_OfficeStyleSheet */
	if(!data || data.length === 0) data = write_theme();

	var t;
	var themes = {};

	/* themeElements CT_BaseStyles */
	if(!(t=str_match_xml(data, "a:themeElements"))) throw new Error('themeElements not found in theme');
	parse_themeElements(t[0], themes, opts);
	themes.raw = data;
	return themes;
}

function write_theme(Themes, opts)/*:string*/ {
	if(opts && opts.themeXLSX) return opts.themeXLSX;
	if(Themes && typeof Themes.raw == "string") return Themes.raw;
	var o = [XML_HEADER];
	o[o.length] = '<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">';
	o[o.length] =  '<a:themeElements>';

	o[o.length] =   '<a:clrScheme name="Office">';
	o[o.length] =    '<a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1>';
	o[o.length] =    '<a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1>';
	o[o.length] =    '<a:dk2><a:srgbClr val="1F497D"/></a:dk2>';
	o[o.length] =    '<a:lt2><a:srgbClr val="EEECE1"/></a:lt2>';
	o[o.length] =    '<a:accent1><a:srgbClr val="4F81BD"/></a:accent1>';
	o[o.length] =    '<a:accent2><a:srgbClr val="C0504D"/></a:accent2>';
	o[o.length] =    '<a:accent3><a:srgbClr val="9BBB59"/></a:accent3>';
	o[o.length] =    '<a:accent4><a:srgbClr val="8064A2"/></a:accent4>';
	o[o.length] =    '<a:accent5><a:srgbClr val="4BACC6"/></a:accent5>';
	o[o.length] =    '<a:accent6><a:srgbClr val="F79646"/></a:accent6>';
	o[o.length] =    '<a:hlink><a:srgbClr val="0000FF"/></a:hlink>';
	o[o.length] =    '<a:folHlink><a:srgbClr val="800080"/></a:folHlink>';
	o[o.length] =   '</a:clrScheme>';

	o[o.length] =   '<a:fontScheme name="Office">';
	o[o.length] =    '<a:majorFont>';
	o[o.length] =     '<a:latin typeface="Cambria"/>';
	o[o.length] =     '<a:ea typeface=""/>';
	o[o.length] =     '<a:cs typeface=""/>';
	o[o.length] =     '<a:font script="Jpan" typeface="ＭＳ Ｐゴシック"/>';
	o[o.length] =     '<a:font script="Hang" typeface="맑은 고딕"/>';
	o[o.length] =     '<a:font script="Hans" typeface="宋体"/>';
	o[o.length] =     '<a:font script="Hant" typeface="新細明體"/>';
	o[o.length] =     '<a:font script="Arab" typeface="Times New Roman"/>';
	o[o.length] =     '<a:font script="Hebr" typeface="Times New Roman"/>';
	o[o.length] =     '<a:font script="Thai" typeface="Tahoma"/>';
	o[o.length] =     '<a:font script="Ethi" typeface="Nyala"/>';
	o[o.length] =     '<a:font script="Beng" typeface="Vrinda"/>';
	o[o.length] =     '<a:font script="Gujr" typeface="Shruti"/>';
	o[o.length] =     '<a:font script="Khmr" typeface="MoolBoran"/>';
	o[o.length] =     '<a:font script="Knda" typeface="Tunga"/>';
	o[o.length] =     '<a:font script="Guru" typeface="Raavi"/>';
	o[o.length] =     '<a:font script="Cans" typeface="Euphemia"/>';
	o[o.length] =     '<a:font script="Cher" typeface="Plantagenet Cherokee"/>';
	o[o.length] =     '<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>';
	o[o.length] =     '<a:font script="Tibt" typeface="Microsoft Himalaya"/>';
	o[o.length] =     '<a:font script="Thaa" typeface="MV Boli"/>';
	o[o.length] =     '<a:font script="Deva" typeface="Mangal"/>';
	o[o.length] =     '<a:font script="Telu" typeface="Gautami"/>';
	o[o.length] =     '<a:font script="Taml" typeface="Latha"/>';
	o[o.length] =     '<a:font script="Syrc" typeface="Estrangelo Edessa"/>';
	o[o.length] =     '<a:font script="Orya" typeface="Kalinga"/>';
	o[o.length] =     '<a:font script="Mlym" typeface="Kartika"/>';
	o[o.length] =     '<a:font script="Laoo" typeface="DokChampa"/>';
	o[o.length] =     '<a:font script="Sinh" typeface="Iskoola Pota"/>';
	o[o.length] =     '<a:font script="Mong" typeface="Mongolian Baiti"/>';
	o[o.length] =     '<a:font script="Viet" typeface="Times New Roman"/>';
	o[o.length] =     '<a:font script="Uigh" typeface="Microsoft Uighur"/>';
	o[o.length] =     '<a:font script="Geor" typeface="Sylfaen"/>';
	o[o.length] =    '</a:majorFont>';
	o[o.length] =    '<a:minorFont>';
	o[o.length] =     '<a:latin typeface="Calibri"/>';
	o[o.length] =     '<a:ea typeface=""/>';
	o[o.length] =     '<a:cs typeface=""/>';
	o[o.length] =     '<a:font script="Jpan" typeface="ＭＳ Ｐゴシック"/>';
	o[o.length] =     '<a:font script="Hang" typeface="맑은 고딕"/>';
	o[o.length] =     '<a:font script="Hans" typeface="宋体"/>';
	o[o.length] =     '<a:font script="Hant" typeface="新細明體"/>';
	o[o.length] =     '<a:font script="Arab" typeface="Arial"/>';
	o[o.length] =     '<a:font script="Hebr" typeface="Arial"/>';
	o[o.length] =     '<a:font script="Thai" typeface="Tahoma"/>';
	o[o.length] =     '<a:font script="Ethi" typeface="Nyala"/>';
	o[o.length] =     '<a:font script="Beng" typeface="Vrinda"/>';
	o[o.length] =     '<a:font script="Gujr" typeface="Shruti"/>';
	o[o.length] =     '<a:font script="Khmr" typeface="DaunPenh"/>';
	o[o.length] =     '<a:font script="Knda" typeface="Tunga"/>';
	o[o.length] =     '<a:font script="Guru" typeface="Raavi"/>';
	o[o.length] =     '<a:font script="Cans" typeface="Euphemia"/>';
	o[o.length] =     '<a:font script="Cher" typeface="Plantagenet Cherokee"/>';
	o[o.length] =     '<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>';
	o[o.length] =     '<a:font script="Tibt" typeface="Microsoft Himalaya"/>';
	o[o.length] =     '<a:font script="Thaa" typeface="MV Boli"/>';
	o[o.length] =     '<a:font script="Deva" typeface="Mangal"/>';
	o[o.length] =     '<a:font script="Telu" typeface="Gautami"/>';
	o[o.length] =     '<a:font script="Taml" typeface="Latha"/>';
	o[o.length] =     '<a:font script="Syrc" typeface="Estrangelo Edessa"/>';
	o[o.length] =     '<a:font script="Orya" typeface="Kalinga"/>';
	o[o.length] =     '<a:font script="Mlym" typeface="Kartika"/>';
	o[o.length] =     '<a:font script="Laoo" typeface="DokChampa"/>';
	o[o.length] =     '<a:font script="Sinh" typeface="Iskoola Pota"/>';
	o[o.length] =     '<a:font script="Mong" typeface="Mongolian Baiti"/>';
	o[o.length] =     '<a:font script="Viet" typeface="Arial"/>';
	o[o.length] =     '<a:font script="Uigh" typeface="Microsoft Uighur"/>';
	o[o.length] =     '<a:font script="Geor" typeface="Sylfaen"/>';
	o[o.length] =    '</a:minorFont>';
	o[o.length] =   '</a:fontScheme>';

	o[o.length] =   '<a:fmtScheme name="Office">';
	o[o.length] =    '<a:fillStyleLst>';
	o[o.length] =     '<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>';
	o[o.length] =     '<a:gradFill rotWithShape="1">';
	o[o.length] =      '<a:gsLst>';
	o[o.length] =       '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs>';
	o[o.length] =       '<a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs>';
	o[o.length] =       '<a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
	o[o.length] =      '</a:gsLst>';
	o[o.length] =      '<a:lin ang="16200000" scaled="1"/>';
	o[o.length] =     '</a:gradFill>';
	o[o.length] =     '<a:gradFill rotWithShape="1">';
	o[o.length] =      '<a:gsLst>';
	o[o.length] =       '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs>';
	o[o.length] =       '<a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
	o[o.length] =      '</a:gsLst>';
	o[o.length] =      '<a:lin ang="16200000" scaled="0"/>';
	o[o.length] =     '</a:gradFill>';
	o[o.length] =    '</a:fillStyleLst>';
	o[o.length] =    '<a:lnStyleLst>';
	o[o.length] =     '<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln>';
	o[o.length] =     '<a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>';
	o[o.length] =     '<a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>';
	o[o.length] =    '</a:lnStyleLst>';
	o[o.length] =    '<a:effectStyleLst>';
	o[o.length] =     '<a:effectStyle>';
	o[o.length] =      '<a:effectLst>';
	o[o.length] =       '<a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw>';
	o[o.length] =      '</a:effectLst>';
	o[o.length] =     '</a:effectStyle>';
	o[o.length] =     '<a:effectStyle>';
	o[o.length] =      '<a:effectLst>';
	o[o.length] =       '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw>';
	o[o.length] =      '</a:effectLst>';
	o[o.length] =     '</a:effectStyle>';
	o[o.length] =     '<a:effectStyle>';
	o[o.length] =      '<a:effectLst>';
	o[o.length] =       '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw>';
	o[o.length] =      '</a:effectLst>';
	o[o.length] =      '<a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d>';
	o[o.length] =      '<a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d>';
	o[o.length] =     '</a:effectStyle>';
	o[o.length] =    '</a:effectStyleLst>';
	o[o.length] =    '<a:bgFillStyleLst>';
	o[o.length] =     '<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>';
	o[o.length] =     '<a:gradFill rotWithShape="1">';
	o[o.length] =      '<a:gsLst>';
	o[o.length] =       '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
	o[o.length] =       '<a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
	o[o.length] =       '<a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs>';
	o[o.length] =      '</a:gsLst>';
	o[o.length] =      '<a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path>';
	o[o.length] =     '</a:gradFill>';
	o[o.length] =     '<a:gradFill rotWithShape="1">';
	o[o.length] =      '<a:gsLst>';
	o[o.length] =       '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs>';
	o[o.length] =       '<a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs>';
	o[o.length] =      '</a:gsLst>';
	o[o.length] =      '<a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path>';
	o[o.length] =     '</a:gradFill>';
	o[o.length] =    '</a:bgFillStyleLst>';
	o[o.length] =   '</a:fmtScheme>';
	o[o.length] =  '</a:themeElements>';

	o[o.length] =  '<a:objectDefaults>';
	o[o.length] =   '<a:spDef>';
	o[o.length] =    '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style>';
	o[o.length] =   '</a:spDef>';
	o[o.length] =   '<a:lnDef>';
	o[o.length] =    '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style>';
	o[o.length] =   '</a:lnDef>';
	o[o.length] =  '</a:objectDefaults>';
	o[o.length] =  '<a:extraClrSchemeLst/>';
	o[o.length] = '</a:theme>';
	return o.join("");
}
/* [MS-XLS] 2.4.326 TODO: payload is a zip file */
function parse_Theme(blob, length, opts) {
	var end = blob.l + length;
	var dwThemeVersion = blob.read_shift(4);
	if(dwThemeVersion === 124226) return;
	if(!opts.cellStyles) { blob.l = end; return; }
	var data = blob.slice(blob.l);
	blob.l = end;
	var zip; try { zip = zip_read(data, {type: "array"}); } catch(e) { return; }
	var themeXML = getzipstr(zip, "theme/theme/theme1.xml", true);
	if(!themeXML) return;
	return parse_theme_xml(themeXML, opts);
}

/* 2.5.49 */
function parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }

/* 2.5.155 */
function parse_FullColorExt(blob/*::, length*/) {
	var o = {};
	o.xclrType = blob.read_shift(2);
	o.nTintShade = blob.read_shift(2);
	switch(o.xclrType) {
		case 0: blob.l += 4; break;
		case 1: o.xclrValue = parse_IcvXF(blob, 4); break;
		case 2: o.xclrValue = parse_LongRGBA(blob, 4); break;
		case 3: o.xclrValue = parse_ColorTheme(blob, 4); break;
		case 4: blob.l += 4; break;
	}
	blob.l += 8;
	return o;
}

/* 2.5.164 TODO: read 7 bits*/
function parse_IcvXF(blob, length) {
	return parsenoop(blob, length);
}

/* 2.5.280 */
function parse_XFExtGradient(blob, length) {
	return parsenoop(blob, length);
}

/* [MS-XLS] 2.5.108 */
function parse_ExtProp(blob/*::, length*/)/*:Array<any>*/ {
	var extType = blob.read_shift(2);
	var cb = blob.read_shift(2) - 4;
	var o = [extType];
	switch(extType) {
		case 0x04: case 0x05: case 0x07: case 0x08:
		case 0x09: case 0x0A: case 0x0B: case 0x0D:
			o[1] = parse_FullColorExt(blob, cb); break;
		case 0x06: o[1] = parse_XFExtGradient(blob, cb); break;
		case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;
		default: throw new Error("Unrecognized ExtProp type: " + extType + " " + cb);
	}
	return o;
}

/* 2.4.355 */
function parse_XFExt(blob, length) {
	var end = blob.l + length;
	blob.l += 2;
	var ixfe = blob.read_shift(2);
	blob.l += 2;
	var cexts = blob.read_shift(2);
	var ext/*:AOA*/ = [];
	while(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));
	return {ixfe:ixfe, ext:ext};
}

/* xf is an XF, see parse_XFExt for xfext */
function update_xfext(xf, xfext) {
	xfext.forEach(function(xfe) {
		switch(xfe[0]) { /* 2.5.108 extPropData */
			case 0x04: break; /* foreground color */
			case 0x05: break; /* background color */
			case 0x06: break; /* gradient fill */
			case 0x07: break; /* top cell border color */
			case 0x08: break; /* bottom cell border color */
			case 0x09: break; /* left cell border color */
			case 0x0a: break; /* right cell border color */
			case 0x0b: break; /* diagonal cell border color */
			case 0x0d: /* text color */
				break;
			case 0x0e: break; /* font scheme */
			case 0x0f: break; /* indentation level */
		}
	});
}

function parse_BrtMdtinfo(data, length) {
  return {
    flags: data.read_shift(4),
    version: data.read_shift(4),
    name: parse_XLWideString(data, length - 8)
  };
}
function write_BrtMdtinfo(data) {
  var o = new_buf(12 + 2 * data.name.length);
  o.write_shift(4, data.flags);
  o.write_shift(4, data.version);
  write_XLWideString(data.name, o);
  return o.slice(0, o.l);
}
function parse_BrtMdb(data) {
  var out = [];
  var cnt = data.read_shift(4);
  while (cnt-- > 0)
    out.push([data.read_shift(4), data.read_shift(4)]);
  return out;
}
function write_BrtMdb(mdb) {
  var o = new_buf(4 + 8 * mdb.length);
  o.write_shift(4, mdb.length);
  for (var i = 0; i < mdb.length; ++i) {
    o.write_shift(4, mdb[i][0]);
    o.write_shift(4, mdb[i][1]);
  }
  return o;
}
function write_BrtBeginEsfmd(cnt, name) {
  var o = new_buf(8 + 2 * name.length);
  o.write_shift(4, cnt);
  write_XLWideString(name, o);
  return o.slice(0, o.l);
}
function parse_BrtBeginEsmdb(data) {
  data.l += 4;
  return data.read_shift(4) != 0;
}
function write_BrtBeginEsmdb(cnt, cm) {
  var o = new_buf(8);
  o.write_shift(4, cnt);
  o.write_shift(4, cm ? 1 : 0);
  return o;
}
function parse_xlmeta_bin(data, name, _opts) {
  var out = { Types: [], Cell: [], Value: [] };
  var opts = _opts || {};
  var state = [];
  var pass = false;
  var metatype = 2;
  recordhopper(data, function(val, R, RT) {
    switch (RT) {
      case 335:
        out.Types.push({ name: val.name });
        break;
      case 51:
        val.forEach(function(r) {
          if (metatype == 1)
            out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });
          else if (metatype == 0)
            out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });
        });
        break;
      case 337:
        metatype = val ? 1 : 0;
        break;
      case 338:
        metatype = 2;
        break;
      case 35:
        state.push(RT);
        pass = true;
        break;
      case 36:
        state.pop();
        pass = false;
        break;
      default:
        if (R.T) {
        } else if (!pass || opts.WTF && state[state.length - 1] != 35)
          throw new Error("Unexpected record 0x" + RT.toString(16));
    }
  });
  return out;
}
function write_xlmeta_bin() {
  var ba = buf_array();
  write_record(ba, 332);
  write_record(ba, 334, write_UInt32LE(1));
  write_record(ba, 335, write_BrtMdtinfo({
    name: "XLDAPR",
    version: 12e4,
    flags: 3496657072
  }));
  write_record(ba, 336);
  write_record(ba, 339, write_BrtBeginEsfmd(1, "XLDAPR"));
  write_record(ba, 52);
  write_record(ba, 35, write_UInt32LE(514));
  write_record(ba, 4096, write_UInt32LE(0));
  write_record(ba, 4097, writeuint16(1));
  write_record(ba, 36);
  write_record(ba, 53);
  write_record(ba, 340);
  write_record(ba, 337, write_BrtBeginEsmdb(1, true));
  write_record(ba, 51, write_BrtMdb([[1, 0]]));
  write_record(ba, 338);
  write_record(ba, 333);
  return ba.end();
}
function parse_xlmeta_xml(data, name, opts) {
  var out = { Types: [], Cell: [], Value: [] };
  if (!data)
    return out;
  var pass = false;
  var metatype = 2;
  var lastmeta;
  data.replace(tagregex, function(x) {
    var y = parsexmltag(x);
    switch (strip_ns(y[0])) {
      case "<?xml":
        break;
      case "<metadata":
      case "</metadata>":
        break;
      case "<metadataTypes":
      case "</metadataTypes>":
        break;
      case "<metadataType":
        out.Types.push({ name: y.name });
        break;
      case "</metadataType>":
        break;
      case "<futureMetadata":
        for (var j = 0; j < out.Types.length; ++j)
          if (out.Types[j].name == y.name)
            lastmeta = out.Types[j];
        break;
      case "</futureMetadata>":
        break;
      case "<bk>":
        break;
      case "</bk>":
        break;
      case "<rc":
        if (metatype == 1)
          out.Cell.push({ type: out.Types[y.t - 1].name, index: +y.v });
        else if (metatype == 0)
          out.Value.push({ type: out.Types[y.t - 1].name, index: +y.v });
        break;
      case "</rc>":
        break;
      case "<cellMetadata":
        metatype = 1;
        break;
      case "</cellMetadata>":
        metatype = 2;
        break;
      case "<valueMetadata":
        metatype = 0;
        break;
      case "</valueMetadata>":
        metatype = 2;
        break;
      case "<extLst":
      case "<extLst>":
      case "</extLst>":
      case "<extLst/>":
        break;
      case "<ext":
        pass = true;
        break;
      case "</ext>":
        pass = false;
        break;
      case "<rvb":
        if (!lastmeta)
          break;
        if (!lastmeta.offsets)
          lastmeta.offsets = [];
        lastmeta.offsets.push(+y.i);
        break;
      default:
        if (!pass && (opts == null ? void 0 : opts.WTF))
          throw new Error("unrecognized " + y[0] + " in metadata");
    }
    return x;
  });
  return out;
}
function write_xlmeta_xml() {
  var o = [XML_HEADER];
  o.push('<metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray">\n  <metadataTypes count="1">\n    <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/>\n  </metadataTypes>\n  <futureMetadata name="XLDAPR" count="1">\n    <bk>\n      <extLst>\n        <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">\n          <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/>\n        </ext>\n      </extLst>\n    </bk>\n  </futureMetadata>\n  <cellMetadata count="1">\n    <bk>\n      <rc t="1" v="0"/>\n    </bk>\n  </cellMetadata>\n</metadata>');
  return o.join("");
}
/* 18.6 Calculation Chain */
function parse_cc_xml(data/*::, name, opts*/)/*:Array<any>*/ {
	var d = [];
	if(!data) return d;
	var i = 1;
	(data.match(tagregex)||[]).forEach(function(x) {
		var y = parsexmltag(x);
		switch(y[0]) {
			case '<?xml': break;
			/* 18.6.2  calcChain CT_CalcChain 1 */
			case '<calcChain': case '<calcChain>': case '</calcChain>': break;
			/* 18.6.1  c CT_CalcCell 1 */
			case '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;
		}
	});
	return d;
}

//function write_cc_xml(data, opts) { }

/* [MS-XLSB] 2.6.4.1 */
function parse_BrtCalcChainItem$(data) {
	var out = {};
	out.i = data.read_shift(4);
	var cell = {};
	cell.r = data.read_shift(4);
	cell.c = data.read_shift(4);
	out.r = encode_cell(cell);
	var flags = data.read_shift(1);
	if(flags & 0x2) out.l = '1';
	if(flags & 0x8) out.a = '1';
	return out;
}

/* 18.6 Calculation Chain */
function parse_cc_bin(data, name, opts) {
	var out = [];
	var pass = false;
	recordhopper(data, function hopper_cc(val, R, RT) {
		switch(RT) {
			case 0x003F: /* 'BrtCalcChainItem$' */
				out.push(val); break;

			default:
				if(R.T){/* empty */}
				else if(!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	});
	return out;
}

//function write_cc_bin(data, opts) { }
/* 18.14 Supplementary Workbook Data */
function parse_xlink_xml(/*::data, rel, name:string, _opts*/) {
	//var opts = _opts || {};
	//if(opts.WTF) throw "XLSX External Link";
}

/* [MS-XLSB] 2.1.7.25 External Link */
function parse_xlink_bin(data, rel, name/*:string*/, _opts) {
	if(!data) return data;
	var opts = _opts || {};

	var pass = false, end = false;

	recordhopper(data, function xlink_parse(val, R, RT) {
		if(end) return;
		switch(RT) {
			case 0x0167: /* 'BrtSupTabs' */
			case 0x016B: /* 'BrtExternTableStart' */
			case 0x016C: /* 'BrtExternTableEnd' */
			case 0x016E: /* 'BrtExternRowHdr' */
			case 0x016F: /* 'BrtExternCellBlank' */
			case 0x0170: /* 'BrtExternCellReal' */
			case 0x0171: /* 'BrtExternCellBool' */
			case 0x0172: /* 'BrtExternCellError' */
			case 0x0173: /* 'BrtExternCellString' */
			case 0x01D8: /* 'BrtExternValueMeta' */
			case 0x0241: /* 'BrtSupNameStart' */
			case 0x0242: /* 'BrtSupNameValueStart' */
			case 0x0243: /* 'BrtSupNameValueEnd' */
			case 0x0244: /* 'BrtSupNameNum' */
			case 0x0245: /* 'BrtSupNameErr' */
			case 0x0246: /* 'BrtSupNameSt' */
			case 0x0247: /* 'BrtSupNameNil' */
			case 0x0248: /* 'BrtSupNameBool' */
			case 0x0249: /* 'BrtSupNameFmla' */
			case 0x024A: /* 'BrtSupNameBits' */
			case 0x024B: /* 'BrtSupNameEnd' */
				break;

			case 0x0023: /* 'BrtFRTBegin' */
				pass = true; break;
			case 0x0024: /* 'BrtFRTEnd' */
				pass = false; break;

			default:
				if(R.T){/* empty */}
				else if(!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	}, opts);
}
/* 20.5 DrawingML - SpreadsheetML Drawing */
/* 20.5.2.35 wsDr CT_Drawing */
function parse_drawing(data, rels/*:any*/) {
	if(!data) return "??";
	/*
	  Chartsheet Drawing:
	   - 20.5.2.35 wsDr CT_Drawing
	    - 20.5.2.1  absoluteAnchor CT_AbsoluteAnchor
	     - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame
	      - 20.1.2.2.16 graphic CT_GraphicalObject
	       - 20.1.2.2.17 graphicData CT_GraphicalObjectData
          - chart reference
	   the actual type is based on the URI of the graphicData
		TODO: handle embedded charts and other types of graphics
	*/
	var id = (data.match(/<c:chart [^<>]*r:id="([^<>"]*)"/)||["",""])[1];

	return rels['!id'][id].Target;
}

/* L.5.5.2 SpreadsheetML Comments + VML Schema */
function parse_vml(data/*:string*/, sheet, comments) {
	var cidx = 0;
	(str_match_xml_ns_g(data, "shape")||[]).forEach(function(m) {
		var type = "";
		var hidden = true;
		var aidx = -1;
		var R = -1, C = -1;
		m.replace(tagregex, function(x/*:string*/, idx/*:number*/) {
			var y = parsexmltag(x);
			switch(strip_ns(y[0])) {
				case '<ClientData': if(y.ObjectType) type = y.ObjectType; break;

				case '<Visible': case '<Visible/>': hidden = false; break;

				case '<Row': case '<Row>': aidx = idx + x.length; break;
				case '</Row>': R = +m.slice(aidx, idx).trim(); break;

				case '<Column': case '<Column>': aidx = idx + x.length; break;
				case '</Column>': C = +m.slice(aidx, idx).trim(); break;
			}
			return "";
		});
		switch(type) {
		case 'Note':
			var cell = ws_get_cell_stub(sheet, ((R>=0 && C>=0) ? encode_cell({r:R,c:C}) : comments[cidx].ref));
			if(cell.c) {
				cell.c.hidden = hidden;
			}
			++cidx;
			break;
		}

	});
}


/* comment boxes */
function write_vml(rId/*:number*/, comments, ws) {
	var csize = [21600, 21600];
	/* L.5.2.1.2 Path Attribute */
	var bbox = ["m0,0l0",csize[1],csize[0],csize[1],csize[0],"0xe"].join(",");
	var o = [
		writextag("xml", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\/>/,">"),
		writextag("o:shapelayout", writextag("o:idmap", null, {'v:ext':"edit", 'data':rId}), {'v:ext':"edit"})
	];

	var _shapeid = 65536 * rId;

	var _comments = comments || [];
	if(_comments.length > 0) o.push(writextag("v:shapetype", [
		writextag("v:stroke", null, {joinstyle:"miter"}),
		writextag("v:path", null, {gradientshapeok:"t", 'o:connecttype':"rect"})
	].join(""), {id:"_x0000_t202", coordsize:csize.join(","), 'o:spt':202, path:bbox}));

	_comments.forEach(function(x) { ++_shapeid; o.push(write_vml_comment(x, _shapeid)); });
	o.push('</xml>');
	return o.join("");
}

function write_vml_comment(x, _shapeid, ws)/*:string*/ {
	var c = decode_cell(x[0]);
	var fillopts = /*::(*/{'color2':"#BEFF82", 'type':"gradient"}/*:: :any)*/;
	if(fillopts.type == "gradient") fillopts.angle = "-180";
	var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, {type:"gradientUnscaled", 'v:ext':"view"}) : null;
	var fillxml = writextag('v:fill', fillparm, fillopts);

	var shadata = ({on:"t", 'obscured':"t"}/*:any*/);

	return [
	'<v:shape' + wxt_helper({
		id:'_x0000_s' + _shapeid,
		type:"#_x0000_t202",
		style:"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : "") ,
		fillcolor:"#ECFAD4",
		strokecolor:"#edeaa1"
	}) + '>',
		fillxml,
		writextag("v:shadow", null, shadata),
		writextag("v:path", null, {'o:connecttype':"none"}),
		'<v:textbox><div style="text-align:left"></div></v:textbox>',
		'<x:ClientData ObjectType="Note">',
			'<x:MoveWithCells/>',
			'<x:SizeWithCells/>',
			/* Part 4 19.4.2.3 Anchor (Anchor) */
			writetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(",")),
			writetag('x:AutoFill', "False"),
			writetag('x:Row', String(c.r)),
			writetag('x:Column', String(c.c)),
			x[1].hidden ? '' : '<x:Visible/>',
		'</x:ClientData>',
	'</v:shape>'
	].join("");
}
function sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array<RawComment>*/, threaded/*:boolean*/, people/*:?Array<any>*/) {
	var dense = sheet["!data"] != null;
	var cell/*:Cell*/;
	comments.forEach(function(comment) {
		var r = decode_cell(comment.ref);
		if(r.r < 0 || r.c < 0) return;
		if(dense) {
			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = [];
			cell = sheet["!data"][r.r][r.c];
		} else cell = sheet[comment.ref];
		if (!cell) {
			cell = ({t:"z"}/*:any*/);
			if(dense) sheet["!data"][r.r][r.c] = cell;
			else sheet[comment.ref] = cell;
			var range = safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");
			if(range.s.r > r.r) range.s.r = r.r;
			if(range.e.r < r.r) range.e.r = r.r;
			if(range.s.c > r.c) range.s.c = r.c;
			if(range.e.c < r.c) range.e.c = r.c;
			var encoded = encode_range(range);
			sheet["!ref"] = encoded;
		}

		if (!cell.c) cell.c = [];
		var o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});
		if(comment.h) o.h = comment.h;

		/* threaded comments always override */
		for(var i = cell.c.length - 1; i >= 0; --i) {
			if(!threaded && cell.c[i].T) return;
			if(threaded && !cell.c[i].T) cell.c.splice(i, 1);
		}
		if(threaded && people) for(i = 0; i < people.length; ++i) {
			if(o.a == people[i].id) { o.a = people[i].name || o.a; break; }
		}
		cell.c.push(o);
	});
}
/* 18.7 Comments */
function parse_comments_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {
	/* 18.7.6 CT_Comments */
	if(data.match(/<(?:\w+:)?comments *\/>/)) return [];
	var authors/*:Array<string>*/ = [];
	var commentList/*:Array<RawComment>*/ = [];
	var authtag = str_match_xml_ns(data, "authors");
	if(authtag && authtag[1]) authtag[1].split(/<\/\w*:?author>/).forEach(function(x) {
		if(x === "" || x.trim() === "") return;
		var a = x.match(/<(?:\w+:)?author[^<>]*>(.*)/);
		if(a) authors.push(a[1]);
	});
	var cmnttag = str_match_xml_ns(data, "commentList");
	if(cmnttag && cmnttag[1]) cmnttag[1].split(/<\/\w*:?comment>/).forEach(function(x) {
		if(x === "" || x.trim() === "") return;
		var cm = x.match(/<(?:\w+:)?comment[^<>]*>/);
		if(!cm) return;
		var y = parsexmltag(cm[0]);
		var comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || "sheetjsghost", ref: y.ref, guid: y.guid }/*:any*/);
		var cell = decode_cell(y.ref);
		if(opts.sheetRows && opts.sheetRows <= cell.r) return;
		var textMatch = str_match_xml_ns(x, "text");
		var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
		comment.r = rt.r;
		if(rt.r == "<t></t>") rt.t = rt.h = "";
		comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
		if(opts.cellHTML) comment.h = rt.h;
		commentList.push(comment);
	});
	return commentList;
}

function write_comments_xml(data/*::, opts*/) {
	var o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];

	var iauthor/*:Array<string>*/ = [];
	o.push("<authors>");
	data.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);
		if(iauthor.indexOf(a) == -1) {
			iauthor.push(a);
			o.push("<author>" + a + "</author>");
		}
		if(w.T && w.ID && iauthor.indexOf("tc=" + w.ID) == -1) {
			iauthor.push("tc=" + w.ID);
			o.push("<author>" + "tc=" + w.ID + "</author>");
		}
	}); });
	if(iauthor.length == 0) { iauthor.push("SheetJ5"); o.push("<author>SheetJ5</author>"); }
	o.push("</authors>");
	o.push("<commentList>");
	data.forEach(function(d) {
		/* 18.7.3 CT_Comment */
		var lastauthor = 0, ts = [], tcnt = 0;
		if(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
		d[1].forEach(function(c) {
			if(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));
			if(c.T) ++tcnt;
			ts.push(c.t == null ? "" : escapexml(c.t));
		});
		if(tcnt === 0) {
			d[1].forEach(function(c) {
				o.push('<comment ref="' + d[0] + '" authorId="' + iauthor.indexOf(escapexml(c.a)) + '"><text>');
				o.push(writetag("t", c.t == null ? "" : escapexml(c.t)));
				o.push('</text></comment>');
			});
		} else {
			if(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
			/* based on Threaded Comments -> Comments projection */
			o.push('<comment ref="' + d[0] + '" authorId="' + lastauthor + '"><text>');
			var t = "Comment:\n    " + (ts[0]) + "\n";
			for(var i = 1; i < ts.length; ++i) t += "Reply:\n    " + ts[i] + "\n";
			o.push(writetag("t", escapexml(t)));
			o.push('</text></comment>');
		}
	});
	o.push("</commentList>");
	if(o.length>2) { o[o.length] = ('</comments>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}

/* [MS-XLSX] 2.1.17 */
function parse_tcmnt_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {
	var out = [];
	var pass = false, comment = {}, tidx = 0;
	data.replace(tagregex, function xml_tcmnt(x, idx) {
		var y/*:any*/ = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;

			/* 2.6.207 ThreadedComments CT_ThreadedComments */
			case '<ThreadedComments': break;
			case '</ThreadedComments>': break;

			/* 2.6.205 threadedComment CT_ThreadedComment */
			case '<threadedComment': comment = {author: y.personId, guid: y.id, ref: y.ref, T: 1}; break;
			case '</threadedComment>': if(comment.t != null) out.push(comment); break;

			case '<text>': case '<text': tidx = idx + x.length; break;
			case '</text>': comment.t = data.slice(tidx, idx).replace(/\r\n/g, "\n").replace(/\r/g, "\n"); break;

			/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */
			case '<mentions': case '<mentions>': pass = true; break;
			case '</mentions>': pass = false; break;

			/* 2.6.202 mention CT_Mention TODO */

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;
			/* 18.2.7  ext CT_Extension + */
			case '<ext': pass=true; break;
			case '</ext>': pass=false; break;

			default: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');
		}
		return x;
	});
	return out;
}

function write_tcmnt_xml(comments, people, opts) {
	var o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\/]>/, ">")];
	comments.forEach(function(carr) {
		var rootid = "";
		(carr[1] || []).forEach(function(c, idx) {
			if(!c.T) { delete c.ID; return; }
			if(c.a && people.indexOf(c.a) == -1) people.push(c.a);
			var tcopts = {
				ref: carr[0],
				id: "{54EE7951-7262-4200-6969-" + ("000000000000" + opts.tcid++).slice(-12) + "}"
			};
			if(idx == 0) rootid = tcopts.id;
			else tcopts.parentId = rootid;
			c.ID = tcopts.id;
			if(c.a) tcopts.personId = "{54EE7950-7262-4200-6969-" + ("000000000000" + people.indexOf(c.a)).slice(-12) + "}";
			o.push(writextag('threadedComment', writetag('text', c.t||""), tcopts));
		});
	});
	o.push('</ThreadedComments>');
	return o.join("");
}

/* [MS-XLSX] 2.1.18 */
function parse_people_xml(data/*:string*/, opts) {
	var out = [];
	var pass = false;
	data.replace(tagregex, function xml_tcmnt(x) {
		var y/*:any*/ = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;

			/* 2.4.85 personList CT_PersonList */
			case '<personList': break;
			case '</personList>': break;

			/* 2.6.203 person CT_Person TODO: providers */
			case '<person': out.push({name: y.displayname, id: y.id }); break;
			case '</person>': break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;
			/* 18.2.7  ext CT_Extension + */
			case '<ext': pass=true; break;
			case '</ext>': pass=false; break;

			default: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');
		}
		return x;
	});
	return out;
}
function write_people_xml(people/*, opts*/) {
	var o = [XML_HEADER, writextag('personList', null, {
		'xmlns': XMLNS.TCMNT,
		'xmlns:x': XMLNS_main[0]
	}).replace(/[\/]>/, ">")];
	people.forEach(function(person, idx) {
		o.push(writextag('person', null, {
			displayName: person,
			id: "{54EE7950-7262-4200-6969-" + ("000000000000" + idx).slice(-12) + "}",
			userId: person,
			providerId: "None"
		}));
	});
	o.push("</personList>");
	return o.join("");
}
/* [MS-XLSB] 2.4.28 BrtBeginComment */
function parse_BrtBeginComment(data) {
	var out = {};
	out.iauthor = data.read_shift(4);
	var rfx = parse_UncheckedRfX(data, 16);
	out.rfx = rfx.s;
	out.ref = encode_cell(rfx.s);
	data.l += 16; /*var guid = parse_GUID(data); */
	return out;
}
function write_BrtBeginComment(data, o) {
	if(o == null) o = new_buf(36);
	o.write_shift(4, data[1].iauthor);
	write_UncheckedRfX((data[0]/*:any*/), o);
	o.write_shift(4, 0);
	o.write_shift(4, 0);
	o.write_shift(4, 0);
	o.write_shift(4, 0);
	return o;
}

/* [MS-XLSB] 2.4.327 BrtCommentAuthor */
var parse_BrtCommentAuthor = parse_XLWideString;
function write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }

/* [MS-XLSB] 2.1.7.8 Comments */
function parse_comments_bin(data, opts)/*:Array<RawComment>*/ {
	var out/*:Array<RawComment>*/ = [];
	var authors/*:Array<string>*/ = [];
	var c = {};
	var pass = false;
	recordhopper(data, function hopper_cmnt(val, R, RT) {
		switch(RT) {
			case 0x0278: /* 'BrtCommentAuthor' */
				authors.push(val); break;
			case 0x027B: /* 'BrtBeginComment' */
				c = val; break;
			case 0x027D: /* 'BrtCommentText' */
				c.t = val.t; c.h = val.h; c.r = val.r; break;
			case 0x027C: /* 'BrtEndComment' */
				c.author = authors[c.iauthor];
				delete (c/*:any*/).iauthor;
				if(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;
				if(!c.t) c.t = "";
				delete c.rfx; out.push(c); break;

			case 0x0C00: /* 'BrtUid' */
				break;

			case 0x0023: /* 'BrtFRTBegin' */
				pass = true; break;
			case 0x0024: /* 'BrtFRTEnd' */
				pass = false; break;
			case 0x0025: /* 'BrtACBegin' */ break;
			case 0x0026: /* 'BrtACEnd' */ break;


			default:
				if(R.T){/* empty */}
				else if(!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	});
	return out;
}

function write_comments_bin(data/*::, opts*/) {
	var ba = buf_array();
	var iauthor/*:Array<string>*/ = [];
	write_record(ba, 0x0274 /* BrtBeginComments */);

	write_record(ba, 0x0276 /* BrtBeginCommentAuthors */);
	data.forEach(function(comment) {
		comment[1].forEach(function(c) {
			if(iauthor.indexOf(c.a) > -1) return;
			iauthor.push(c.a.slice(0,54));
			write_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));
			if(c.T && c.ID && iauthor.indexOf("tc=" + c.ID) == -1) {
				iauthor.push("tc=" + c.ID);
				write_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor("tc=" + c.ID));
			}
		});
	});
	write_record(ba, 0x0277 /* BrtEndCommentAuthors */);

	write_record(ba, 0x0279 /* BrtBeginCommentList */);
	data.forEach(function(comment) {
		comment[1].forEach(function(c) {
			var _ia = -1;
			if(c.ID) _ia = iauthor.indexOf("tc=" + c.ID);
			if(_ia == -1 && comment[1][0].T && comment[1][0].ID) _ia = iauthor.indexOf("tc=" + comment[1][0].ID);
			if(_ia == -1) _ia = iauthor.indexOf(c.a);
			c.iauthor = _ia;
			var range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};
			write_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));
			if(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));
			write_record(ba, 0x027C /* BrtEndComment */);
			delete c.iauthor;
		});
	});
	write_record(ba, 0x027A /* BrtEndCommentList */);

	write_record(ba, 0x0275 /* BrtEndComments */);
	return ba.end();
}
var CT_VBA = "application/vnd.ms-office.vbaProject";
function make_vba_xls(cfb) {
  var newcfb = CFB.utils.cfb_new({ root: "R" });
  cfb.FullPaths.forEach(function(p, i) {
    if (p.slice(-1) === "/" || !p.match(/_VBA_PROJECT_CUR/))
      return;
    var newpath = p.replace(/^[^\/]*/, "R").replace(/\/_VBA_PROJECT_CUR\u0000*/, "");
    CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);
  });
  return CFB.write(newcfb);
}
function fill_vba_xls(cfb, vba) {
  vba.FullPaths.forEach(function(p, i) {
    if (i == 0)
      return;
    var newpath = p.replace(/^[\/]*[^\/]*[\/]/, "/_VBA_PROJECT_CUR/");
    if (newpath.slice(-1) !== "/")
      CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);
  });
}
var VBAFMTS = ["xlsb", "xlsm", "xlam", "biff8", "xla"];
/* macro and dialog sheet stubs */
function parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }
function parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }
function parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }
function parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }
/* TODO: it will be useful to parse the function str */
var rc_to_a1 = /*#__PURE__*/(function(){
	var rcregex = /(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g;
	var rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);
	function rcfunc($$,$1,$2,$3) {
		var cRel = false, rRel = false;

		if($2.length == 0) rRel = true;
		else if($2.charAt(0) == "[") { rRel = true; $2 = $2.slice(1, -1); }

		if($3.length == 0) cRel = true;
		else if($3.charAt(0) == "[") { cRel = true; $3 = $3.slice(1, -1); }

		var R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;

		if(cRel) C += rcbase.c; else --C;
		if(rRel) R += rcbase.r; else --R;
		return $1 + (cRel ? "" : "$") + encode_col(C) + (rRel ? "" : "$") + encode_row(R);
	}
	return function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {
		rcbase = base;
		return fstr.replace(rcregex, rcfunc);
	};
})();

var crefregex = /(^|[^._A-Z0-9])(\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\$?)(\d{1,7})(?![_.\(A-Za-z0-9])/g;
try {
	crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g;
}catch(e){}
var a1_to_rc = /*#__PURE__*/(function(){
	return function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {
		return fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {
			var c = decode_col($3) - ($2 ? 0 : base.c);
			var r = decode_row($5) - ($4 ? 0 : base.r);
			var R = $4 == "$" ? (r+1) : (r == 0 ? "" : "[" + r + "]");
			var C = $2 == "$" ? (c+1) : (c == 0 ? "" : "[" + c + "]");
			return $1 + "R" + R + "C" + C;
		});
	};
})();

/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */
function shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {
	return f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {
		return $1+($2=="$" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4=="$" ? $4+$5 : encode_row(decode_row($5) + delta.r));
	});
}

function shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {
	var r = decode_range(range), s = r.s, c = decode_cell(cell);
	var delta = {r:c.r - s.r, c:c.c - s.c};
	return shift_formula_str(f, delta);
}

/* TODO: parse formula */
function fuzzyfmla(f/*:string*/)/*:boolean*/ {
	if(f.length == 1) return false;
	return true;
}

function _xlfn(f/*:string*/)/*:string*/ {
	return f.replace(/_xlfn\./g,"");
}
function parseread1(blob) { blob.l+=1; return; }

/* [MS-XLS] 2.5.51 */
function parse_ColRelU(blob, length) {
	var c = blob.read_shift(length == 1 ? 1 : 2);
	return [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];
}

/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */
function parse_RgceArea(blob, length, opts) {
	var w = 2;
	if(opts) {
		if(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);
		else if(opts.biff == 12) w = 4;
	}
	var r=blob.read_shift(w), R=blob.read_shift(w);
	var c=parse_ColRelU(blob, 2);
	var C=parse_ColRelU(blob, 2);
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
}
/* BIFF 2-5 encodes flags in the row field */
function parse_RgceArea_BIFF2(blob/*::, length, opts*/) {
	var r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);
	var c=blob.read_shift(1);
	var C=blob.read_shift(1);
	return { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };
}

/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
function parse_RgceAreaRel(blob, length, opts) {
	if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
	var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
	var c=parse_ColRelU(blob, 2);
	var C=parse_ColRelU(blob, 2);
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
}

/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */
function parse_RgceLoc(blob, length, opts) {
	if(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);
	var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);
	var c = parse_ColRelU(blob, 2);
	return {r:r, c:c[0], cRel:c[1], rRel:c[2]};
}
function parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {
	var r = parse_ColRelU(blob, 2);
	var c = blob.read_shift(1);
	return {r:r[0], c:c, cRel:r[1], rRel:r[2]};
}

/* [MS-XLS] 2.5.198.107, 2.5.47 */
function parse_RgceElfLoc(blob/*::, length, opts*/) {
	var r = blob.read_shift(2);
	var c = blob.read_shift(2);
	return {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };
}

/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */
function parse_RgceLocRel(blob, length, opts) {
	var biff = opts && opts.biff ? opts.biff : 8;
	if(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);
	var r = blob.read_shift(biff >= 12 ? 4 : 2);
	var cl = blob.read_shift(2);
	var cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;
	cl &= 0x3FFF;
	if(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;
	if(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;
	return {r:r,c:cl,cRel:cRel,rRel:rRel};
}
function parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {
	var rl = blob.read_shift(2);
	var c = blob.read_shift(1);
	var rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;
	rl &= 0x3FFF;
	if(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;
	if(cRel == 1 && c >= 0x80) c = c - 0x100;
	return {r:rl,c:c,cRel:cRel,rRel:rRel};
}

/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */
function parse_PtgArea(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);
	return [type, area];
}

/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */
function parse_PtgArea3d(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	var ixti = blob.read_shift(2, 'i');
	var w = 8;
	if(opts) switch(opts.biff) {
		case 5: blob.l += 12; w = 6; break;
		case 12: w = 12; break;
	}
	var area = parse_RgceArea(blob, w, opts);
	return [type, ixti, area];
}

/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */
function parse_PtgAreaErr(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	blob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);
	return [type];
}
/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */
function parse_PtgAreaErr3d(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	var ixti = blob.read_shift(2);
	var w = 8;
	if(opts) switch(opts.biff) {
		case 5: blob.l += 12; w = 6; break;
		case 12: w = 12; break;
	}
	blob.l += w;
	return [type, ixti];
}

/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
function parse_PtgAreaN(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	var area = parse_RgceAreaRel(blob, length - 1, opts);
	return [type, area];
}

/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */
function parse_PtgArray(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;
	return [type];
}

/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */
function parse_PtgAttrBaxcel(blob) {
	var bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */
	var bitBaxcel = 1;
	blob.l += 4;
	return [bitSemi, bitBaxcel];
}

/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */
function parse_PtgAttrChoose(blob, length, opts)/*:Array<number>*/ {
	blob.l +=2;
	var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
	var o/*:Array<number>*/ = [];
	/* offset is 1 less than the number of elements */
	for(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));
	return o;
}

/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */
function parse_PtgAttrGoto(blob, length, opts) {
	var bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;
	blob.l += 2;
	return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];
}

/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */
function parse_PtgAttrIf(blob, length, opts) {
	var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;
	blob.l += 2;
	return [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];
}

/* [MS-XLSB] 2.5.97.28 */
function parse_PtgAttrIfError(blob) {
	var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;
	blob.l += 2;
	return [bitIf, blob.read_shift(2)];
}

/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */
function parse_PtgAttrSemi(blob, length, opts) {
	var bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;
	blob.l += opts && opts.biff == 2 ? 3 : 4;
	return [bitSemi];
}

/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */
function parse_PtgAttrSpaceType(blob/*::, length*/) {
	var type = blob.read_shift(1), cch = blob.read_shift(1);
	return [type, cch];
}

/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */
function parse_PtgAttrSpace(blob) {
	blob.read_shift(2);
	return parse_PtgAttrSpaceType(blob, 2);
}

/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */
function parse_PtgAttrSpaceSemi(blob) {
	blob.read_shift(2);
	return parse_PtgAttrSpaceType(blob, 2);
}

/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */
function parse_PtgRef(blob, length, opts) {
	//var ptg = blob[blob.l] & 0x1F;
	var type = (blob[blob.l] & 0x60)>>5;
	blob.l += 1;
	var loc = parse_RgceLoc(blob, 0, opts);
	return [type, loc];
}

/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */
function parse_PtgRefN(blob, length, opts) {
	var type = (blob[blob.l] & 0x60)>>5;
	blob.l += 1;
	var loc = parse_RgceLocRel(blob, 0, opts);
	return [type, loc];
}

/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */
function parse_PtgRef3d(blob, length, opts) {
	var type = (blob[blob.l] & 0x60)>>5;
	blob.l += 1;
	var ixti = blob.read_shift(2); // XtiIndex
	if(opts && opts.biff == 5) blob.l += 12;
	var loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel
	return [type, ixti, loc];
}


/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */
function parse_PtgFunc(blob, length, opts) {
	//var ptg = blob[blob.l] & 0x1F;
	var type = (blob[blob.l] & 0x60)>>5;
	blob.l += 1;
	var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);
	return [FtabArgc[iftab], Ftab[iftab], type];
}
/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */
function parse_PtgFuncVar(blob, length, opts) {
	var type = blob[blob.l++];
	var cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);
	return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];
}

function parsetab(blob) {
	return [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];
}

/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */
function parse_PtgAttrSum(blob, length, opts) {
	blob.l += opts && opts.biff == 2 ? 3 : 4; return;
}

/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */
function parse_PtgExp(blob, length, opts) {
	blob.l++;
	if(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];
	var row = blob.read_shift(2);
	var col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
	return [row, col];
}

/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */
function parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }

/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */
function parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }

/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */
function parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}

/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */
function parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }

/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */
function parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }

/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */
/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */
function parse_SerAr(blob, biff/*:number*/) {
	var val = [blob.read_shift(1)];
	if(biff == 12) switch(val[0]) {
		case 0x02: val[0] = 0x04; break; /* SerBool */
		case 0x04: val[0] = 0x10; break; /* SerErr */
		case 0x00: val[0] = 0x01; break; /* SerNum */
		case 0x01: val[0] = 0x02; break; /* SerStr */
	}
	switch(val[0]) {
		case 0x04: /* SerBool -- boolean */
			val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';
			if(biff != 12) blob.l += 7; break;
		case 0x25: /* appears to be an alias */
		case 0x10: /* SerErr -- error */
			val[1] = BErr[blob[blob.l]];
			blob.l += ((biff == 12) ? 4 : 8); break;
		case 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */
			blob.l += 8; break;
		case 0x01: /* SerNum -- Xnum */
			val[1] = parse_Xnum(blob, 8); break;
		case 0x02: /* SerStr -- XLUnicodeString (<256 chars) */
			val[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;
		default: throw new Error("Bad SerAr: " + val[0]); /* Unreachable */
	}
	return val;
}

/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */
function parse_PtgExtraMem(blob, cce, opts) {
	var count = blob.read_shift((opts.biff == 12) ? 4 : 2);
	var out/*:Array<Range>*/ = [];
	for(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));
	return out;
}

/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */
function parse_PtgExtraArray(blob, length, opts) {
	var rows = 0, cols = 0;
	if(opts.biff == 12) {
		rows = blob.read_shift(4); // DRw
		cols = blob.read_shift(4); // DCol
	} else {
		cols = 1 + blob.read_shift(1); //DColByteU
		rows = 1 + blob.read_shift(2); //DRw
	}
	if(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }
	// $FlowIgnore
	for(var i = 0, o/*:Array<Array<any>>*/ = []; i != rows && (o[i] = []); ++i)
		for(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);
	return o;
}

/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */
function parse_PtgName(blob, length, opts) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	var w = (!opts || (opts.biff >= 8)) ? 4 : 2;
	var nameindex = blob.read_shift(w);
	switch(opts.biff) {
		case 2: blob.l += 5; break;
		case 3: case 4: blob.l += 8; break;
		case 5: blob.l += 12; break;
	}
	return [type, 0, nameindex];
}

/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */
function parse_PtgNameX(blob, length, opts) {
	if(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	var ixti = blob.read_shift(2); // XtiIndex
	var nameindex = blob.read_shift(4);
	return [type, ixti, nameindex];
}
function parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	var ixti = blob.read_shift(2, 'i'); // XtiIndex
	blob.l += 8;
	var nameindex = blob.read_shift(2);
	blob.l += 12;
	return [type, ixti, nameindex];
}

/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */
function parse_PtgMemArea(blob, length, opts) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	blob.l += (opts && opts.biff == 2 ? 3 : 4);
	var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
	return [type, cce];
}

/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */
function parse_PtgMemFunc(blob, length, opts) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
	return [type, cce];
}


/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */
function parse_PtgRefErr(blob, length, opts) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	blob.l += 4;
	if(opts.biff < 8) blob.l--;
	if(opts.biff == 12) blob.l += 2;
	return [type];
}

/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */
function parse_PtgRefErr3d(blob, length, opts) {
	var type = (blob[blob.l++] & 0x60) >> 5;
	var ixti = blob.read_shift(2);
	var w = 4;
	if(opts) switch(opts.biff) {
		case 5: w = 15; break;
		case 12: w = 6; break;
	}
	blob.l += w;
	return [type, ixti];
}

/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */
var parse_PtgMemErr = parsenoop;
/* [MS-XLS] 2.5.198.73  ; [MS-XLSB] 2.5.97.57 */
var parse_PtgMemNoMem = parsenoop;
/* [MS-XLS] 2.5.198.92 */
var parse_PtgTbl = parsenoop;

function parse_PtgElfLoc(blob, length, opts) {
	blob.l += 2;
	return [parse_RgceElfLoc(blob, 4, opts)];
}
function parse_PtgElfNoop(blob/*::, length, opts*/) {
	blob.l += 6;
	return [];
}
/* [MS-XLS] 2.5.198.46 */
var parse_PtgElfCol = parse_PtgElfLoc;
/* [MS-XLS] 2.5.198.47 */
var parse_PtgElfColS = parse_PtgElfNoop;
/* [MS-XLS] 2.5.198.48 */
var parse_PtgElfColSV = parse_PtgElfNoop;
/* [MS-XLS] 2.5.198.49 */
var parse_PtgElfColV = parse_PtgElfLoc;
/* [MS-XLS] 2.5.198.50 */
function parse_PtgElfLel(blob/*::, length, opts*/) {
	blob.l += 2;
	return [parseuint16(blob), blob.read_shift(2) & 0x01];
}
/* [MS-XLS] 2.5.198.51 */
var parse_PtgElfRadical = parse_PtgElfLoc;
/* [MS-XLS] 2.5.198.52 */
var parse_PtgElfRadicalLel = parse_PtgElfLel;
/* [MS-XLS] 2.5.198.53 */
var parse_PtgElfRadicalS = parse_PtgElfNoop;
/* [MS-XLS] 2.5.198.54 */
var parse_PtgElfRw = parse_PtgElfLoc;
/* [MS-XLS] 2.5.198.55 */
var parse_PtgElfRwV = parse_PtgElfLoc;

/* [MS-XLSB] 2.5.97.52 TODO */
var PtgListRT = [
	"Data",
	"All",
	"Headers",
	"??",
	"?Data2",
	"??",
	"?DataHeaders",
	"??",
	"Totals",
	"??",
	"??",
	"??",
	"?DataTotals",
	"??",
	"??",
	"??",
	"?Current"
];
function parse_PtgList(blob/*::, length, opts*/) {
	blob.l += 2;
	var ixti = blob.read_shift(2);
	var flags = blob.read_shift(2);
	var idx = blob.read_shift(4);
	var c = blob.read_shift(2);
	var C = blob.read_shift(2);
	var rt = PtgListRT[(flags >> 2) & 0x1F];
	return {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};
}
/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */
function parse_PtgSxName(blob/*::, length, opts*/) {
	blob.l += 2;
	return [blob.read_shift(4)];
}

/* [XLS] old spec */
function parse_PtgSheet(blob, length, opts) {
	blob.l += 5;
	blob.l += 2;
	blob.l += (opts.biff == 2 ? 1 : 4);
	return ["PTGSHEET"];
}
function parse_PtgEndSheet(blob, length, opts) {
	blob.l += (opts.biff == 2 ? 4 : 5);
	return ["PTGENDSHEET"];
}
function parse_PtgMemAreaN(blob/*::, length, opts*/) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	var cce = blob.read_shift(2);
	return [type, cce];
}
function parse_PtgMemNoMemN(blob/*::, length, opts*/) {
	var type = (blob.read_shift(1) >>> 5) & 0x03;
	var cce = blob.read_shift(2);
	return [type, cce];
}
function parse_PtgAttrNoop(blob/*::, length, opts*/) {
	blob.l += 4;
	return [0, 0];
}

/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */
var PtgTypes = {
	0x01: { n:'PtgExp', f:parse_PtgExp },
	0x02: { n:'PtgTbl', f:parse_PtgTbl },
	0x03: { n:'PtgAdd', f:parseread1 },
	0x04: { n:'PtgSub', f:parseread1 },
	0x05: { n:'PtgMul', f:parseread1 },
	0x06: { n:'PtgDiv', f:parseread1 },
	0x07: { n:'PtgPower', f:parseread1 },
	0x08: { n:'PtgConcat', f:parseread1 },
	0x09: { n:'PtgLt', f:parseread1 },
	0x0A: { n:'PtgLe', f:parseread1 },
	0x0B: { n:'PtgEq', f:parseread1 },
	0x0C: { n:'PtgGe', f:parseread1 },
	0x0D: { n:'PtgGt', f:parseread1 },
	0x0E: { n:'PtgNe', f:parseread1 },
	0x0F: { n:'PtgIsect', f:parseread1 },
	0x10: { n:'PtgUnion', f:parseread1 },
	0x11: { n:'PtgRange', f:parseread1 },
	0x12: { n:'PtgUplus', f:parseread1 },
	0x13: { n:'PtgUminus', f:parseread1 },
	0x14: { n:'PtgPercent', f:parseread1 },
	0x15: { n:'PtgParen', f:parseread1 },
	0x16: { n:'PtgMissArg', f:parseread1 },
	0x17: { n:'PtgStr', f:parse_PtgStr },
	0x1A: { n:'PtgSheet', f:parse_PtgSheet },
	0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },
	0x1C: { n:'PtgErr', f:parse_PtgErr },
	0x1D: { n:'PtgBool', f:parse_PtgBool },
	0x1E: { n:'PtgInt', f:parse_PtgInt },
	0x1F: { n:'PtgNum', f:parse_PtgNum },
	0x20: { n:'PtgArray', f:parse_PtgArray },
	0x21: { n:'PtgFunc', f:parse_PtgFunc },
	0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },
	0x23: { n:'PtgName', f:parse_PtgName },
	0x24: { n:'PtgRef', f:parse_PtgRef },
	0x25: { n:'PtgArea', f:parse_PtgArea },
	0x26: { n:'PtgMemArea', f:parse_PtgMemArea },
	0x27: { n:'PtgMemErr', f:parse_PtgMemErr },
	0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },
	0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },
	0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },
	0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },
	0x2C: { n:'PtgRefN', f:parse_PtgRefN },
	0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },
	0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },
	0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },
	0x39: { n:'PtgNameX', f:parse_PtgNameX },
	0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },
	0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },
	0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },
	0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },
	0xFF: {}
};
/* These are duplicated in the PtgTypes table */
var PtgDupes = {
	0x40: 0x20, 0x60: 0x20,
	0x41: 0x21, 0x61: 0x21,
	0x42: 0x22, 0x62: 0x22,
	0x43: 0x23, 0x63: 0x23,
	0x44: 0x24, 0x64: 0x24,
	0x45: 0x25, 0x65: 0x25,
	0x46: 0x26, 0x66: 0x26,
	0x47: 0x27, 0x67: 0x27,
	0x48: 0x28, 0x68: 0x28,
	0x49: 0x29, 0x69: 0x29,
	0x4A: 0x2A, 0x6A: 0x2A,
	0x4B: 0x2B, 0x6B: 0x2B,
	0x4C: 0x2C, 0x6C: 0x2C,
	0x4D: 0x2D, 0x6D: 0x2D,
	0x4E: 0x2E, 0x6E: 0x2E,
	0x4F: 0x2F, 0x6F: 0x2F,
	0x58: 0x22, 0x78: 0x22,
	0x59: 0x39, 0x79: 0x39,
	0x5A: 0x3A, 0x7A: 0x3A,
	0x5B: 0x3B, 0x7B: 0x3B,
	0x5C: 0x3C, 0x7C: 0x3C,
	0x5D: 0x3D, 0x7D: 0x3D
};

var Ptg18 = {
	0x01: { n:'PtgElfLel', f:parse_PtgElfLel },
	0x02: { n:'PtgElfRw', f:parse_PtgElfRw },
	0x03: { n:'PtgElfCol', f:parse_PtgElfCol },
	0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },
	0x07: { n:'PtgElfColV', f:parse_PtgElfColV },
	0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },
	0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },
	0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },
	0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },
	0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },
	0x19: { n:'PtgList', f:parse_PtgList },
	0x1D: { n:'PtgSxName', f:parse_PtgSxName },
	0xFF: {}
};
var Ptg19 = {
	0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },
	0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },
	0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },
	0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },
	0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },
	0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },
	0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },
	0x21: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },
	0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },
	0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },
	0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },
	0xFF: {}
};

/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */
function parse_RgbExtra(blob, length, rgce, opts) {
	if(opts.biff < 8) return parsenoop(blob, length);
	var target = blob.l + length;
	var o = [];
	for(var i = 0; i !== rgce.length; ++i) {
		switch(rgce[i][0]) {
			case 'PtgArray': /* PtgArray -> PtgExtraArray */
				rgce[i][1] = parse_PtgExtraArray(blob, 0, opts);
				o.push(rgce[i][1]);
				break;
			case 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */
				rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);
				o.push(rgce[i][2]);
				break;
			case 'PtgExp': /* PtgExp -> PtgExtraCol */
				if(opts && opts.biff == 12) {
					rgce[i][1][1] = blob.read_shift(4);
					o.push(rgce[i][1]);
				} break;
			case 'PtgList': /* TODO: PtgList -> PtgExtraList */
			case 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */
			case 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */
			case 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */
				throw "Unsupported " + rgce[i][0];
			default: break;
		}
	}
	length = target - blob.l;
	/* note: this is technically an error but Excel disregards */
	//if(target !== blob.l && blob.l !== target - length) throw new Error(target + " != " + blob.l);
	if(length !== 0) o.push(parsenoop(blob, length));
	return o;
}

/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */
function parse_Rgce(blob, length, opts) {
	var target = blob.l + length;
	var R, id, ptgs = [];
	while(target != blob.l) {
		length = target - blob.l;
		id = blob[blob.l];
		R = PtgTypes[id] || PtgTypes[PtgDupes[id]];
		if(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];
		if(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }
		else { ptgs.push([R.n, R.f(blob, length, opts)]); }
	}
	return ptgs;
}

function stringify_array(f/*:Array<Array<string>>*/)/*:string*/ {
	var o/*:Array<string>*/ = [];
	for(var i = 0; i < f.length; ++i) {
		var x = f[i], r/*:Array<string>*/ = [];
		for(var j = 0; j < x.length; ++j) {
			var y = x[j];
			if(y) switch(y[0]) {
				// TODO: handle embedded quotes
				case 0x02:
					/*:: if(typeof y[1] != 'string') throw "unreachable"; */
					r.push('"' + y[1].replace(/"/g,'""') + '"'); break;
				default: r.push(y[1]);
			} else r.push("");
		}
		o.push(r.join(","));
	}
	return o.join(";");
}

/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */
var PtgBinOp = {
	PtgAdd: "+",
	PtgConcat: "&",
	PtgDiv: "/",
	PtgEq: "=",
	PtgGe: ">=",
	PtgGt: ">",
	PtgLe: "<=",
	PtgLt: "<",
	PtgMul: "*",
	PtgNe: "<>",
	PtgPower: "^",
	PtgSub: "-"
};

// TODO: explore space
function make_3d_range(start, end) {
	var s = start.lastIndexOf("!"), e = end.lastIndexOf("!");
	if(s == -1 && e == -1) return start + ":" + end;
	if(s > 0 && e > 0 && start.slice(0, s).toLowerCase() == end.slice(0, e).toLowerCase()) return start + ":" + end.slice(e+1);
	console.error("Cannot hydrate range", start, end);
	return start + ":" + end;
}

function get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {
	if(!supbooks) return "SH33TJSERR0";
	if(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];
	if(!supbooks.XTI) return "SH33TJSERR6";
	var XTI = supbooks.XTI[ixti];
	if(opts.biff < 8) {
		if(ixti > 10000) ixti-= 65536;
		if(ixti < 0) ixti = -ixti;
		return ixti == 0 ? "" : supbooks.XTI[ixti - 1];
	}
	if(!XTI) return "SH33TJSERR1";
	var o = "";
	if(opts.biff > 8) switch(supbooks[XTI[0]][0]) {
		case 0x0165: /* 'BrtSupSelf' */
			o = XTI[1] == -1 ? "#REF" : supbooks.SheetNames[XTI[1]];
			return XTI[1] == XTI[2] ? o : o + ":" + supbooks.SheetNames[XTI[2]];
		case 0x0166: /* 'BrtSupSame' */
			if(opts.SID != null) return supbooks.SheetNames[opts.SID];
			return "SH33TJSSAME" + supbooks[XTI[0]][0];
		case 0x0163: /* 'BrtSupBookSrc' */
			/* falls through */
		default: return "SH33TJSSRC" + supbooks[XTI[0]][0];
	}
	switch(supbooks[XTI[0]][0][0]) {
		case 0x0401:
			o = XTI[1] == -1 ? "#REF" : (supbooks.SheetNames[XTI[1]] || "SH33TJSERR3");
			return XTI[1] == XTI[2] ? o : o + ":" + supbooks.SheetNames[XTI[2]];
		case 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(";;"); //return "SH33TJSERR8";
		default:
			if(!supbooks[XTI[0]][0][3]) return "SH33TJSERR2";
			o = XTI[1] == -1 ? "#REF" : (supbooks[XTI[0]][0][3][XTI[1]] || "SH33TJSERR4");
			return XTI[1] == XTI[2] ? o : o + ":" + supbooks[XTI[0]][0][3][XTI[2]];
	}
}
function get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {
	var ixtiraw = get_ixti_raw(supbooks, ixti, opts);
	return ixtiraw == "#REF" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);
}
function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {
	var biff = (opts && opts.biff) || 8;
	var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
	var stack/*:Array<string>*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname="";
	if(!formula[0] || !formula[0][0]) return "";
	var last_sp = -1, sp = "";
	for(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {
		var f = formula[0][ff];
		switch(f[0]) {
			case 'PtgUminus': /* [MS-XLS] 2.5.198.93 */
				stack.push("-" + stack.pop()); break;
			case 'PtgUplus': /* [MS-XLS] 2.5.198.95 */
				stack.push("+" + stack.pop()); break;
			case 'PtgPercent': /* [MS-XLS] 2.5.198.81 */
				stack.push(stack.pop() + "%"); break;

			case 'PtgAdd':    /* [MS-XLS] 2.5.198.26 */
			case 'PtgConcat': /* [MS-XLS] 2.5.198.43 */
			case 'PtgDiv':    /* [MS-XLS] 2.5.198.45 */
			case 'PtgEq':     /* [MS-XLS] 2.5.198.56 */
			case 'PtgGe':     /* [MS-XLS] 2.5.198.64 */
			case 'PtgGt':     /* [MS-XLS] 2.5.198.65 */
			case 'PtgLe':     /* [MS-XLS] 2.5.198.68 */
			case 'PtgLt':     /* [MS-XLS] 2.5.198.69 */
			case 'PtgMul':    /* [MS-XLS] 2.5.198.75 */
			case 'PtgNe':     /* [MS-XLS] 2.5.198.78 */
			case 'PtgPower':  /* [MS-XLS] 2.5.198.82 */
			case 'PtgSub':    /* [MS-XLS] 2.5.198.90 */
				e1 = stack.pop(); e2 = stack.pop();
				if(last_sp >= 0) {
					switch(formula[0][last_sp][1][0]) {
						case 0:
							// $FlowIgnore
							sp = fill(" ", formula[0][last_sp][1][1]); break;
						case 1:
							// $FlowIgnore
							sp = fill("\r", formula[0][last_sp][1][1]); break;
						default:
							sp = "";
							// $FlowIgnore
							if(opts.WTF) throw new Error("Unexpected PtgAttrSpaceType " + formula[0][last_sp][1][0]);
					}
					e2 = e2 + sp;
					last_sp = -1;
				}
				stack.push(e2+PtgBinOp[f[0]]+e1);
				break;

			case 'PtgIsect': /* [MS-XLS] 2.5.198.67 */
				e1 = stack.pop(); e2 = stack.pop();
				stack.push(e2+" "+e1);
				break;
			case 'PtgUnion': /* [MS-XLS] 2.5.198.94 */
				e1 = stack.pop(); e2 = stack.pop();
				stack.push(e2+","+e1);
				break;
			case 'PtgRange': /* [MS-XLS] 2.5.198.83 */
				e1 = stack.pop(); e2 = stack.pop();
				stack.push(make_3d_range(e2,e1));
				break;

			case 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */
				break;
			case 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */
				break;
			case 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */
				break;
			case 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */
				break;


			case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
				/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);
				stack.push(encode_cell_xls(c, biff));
				break;
			case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
				/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);
				stack.push(encode_cell_xls(c, biff));
				break;
			case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
				/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);
				sname = get_ixti(supbooks, ixti, opts);
				var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
				stack.push(sname + "!" + encode_cell_xls(c, biff));
				break;

			case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
			case 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */
				/* f[1] = [argc, func, type] */
				var argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);
				if(!argc) argc = 0;
				argc &= 0x7F;
				var args = argc == 0 ? [] : stack.slice(-argc);
				stack.length -= argc;
				if(func === 'User') func = args.shift();
				stack.push(func + "(" + args.join(",") + ")");
				break;

			case 'PtgBool': /* [MS-XLS] 2.5.198.42 */
				stack.push(f[1] ? "TRUE" : "FALSE"); break;
			case 'PtgInt': /* [MS-XLS] 2.5.198.66 */
				stack.push(/*::String(*/f[1]/*::)*/); break;
			case 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */
				stack.push(String(f[1])); break;
			case 'PtgStr': /* [MS-XLS] 2.5.198.89 */
				// $FlowIgnore
				stack.push('"' + f[1].replace(/"/g, '""') + '"'); break;
			case 'PtgErr': /* [MS-XLS] 2.5.198.57 */
				stack.push(/*::String(*/f[1]/*::)*/); break;
			case 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */
				/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);
				stack.push(encode_range_xls((r/*:any*/), opts));
				break;
			case 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */
				/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);
				stack.push(encode_range_xls((r/*:any*/), opts));
				break;
			case 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */
				/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];
				sname = get_ixti(supbooks, ixti, opts);
				stack.push(sname + "!" + encode_range_xls((r/*:any*/), opts));
				break;
			case 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */
				stack.push("SUM(" + stack.pop() + ")");
				break;

			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
			case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
				break;

			case 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */
				/* f[1] = type, 0, nameindex */
				nameidx = (f[1][2]/*:any*/);
				var lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];
				var name = lbl ? lbl.Name : "SH33TJSNAME" + String(nameidx);
				/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */
				if(name && name.slice(0,6) == "_xlfn." && !opts.xlfn) name = name.slice(6);
				stack.push(name);
				break;

			case 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */
				/* f[1] = type, ixti, nameindex */
				var bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;
				/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */
				if(opts.biff <= 5) {
					if(bookidx < 0) bookidx = -bookidx;
					if(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];
				} else {
					var o = "";
					if(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}
					else if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){
						if(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {
							o = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + "!";
						}
					}
					else o = supbooks.SheetNames[nameidx-1]+ "!";
					if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
					else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
					else {
						var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
						if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
						else o += "SH33TJSERRX";
					}
					stack.push(o);
					break;
				}
				if(!externbook) externbook = {Name: "SH33TJSERRY"};
				stack.push(externbook.Name);
				break;

			case 'PtgParen': /* [MS-XLS] 2.5.198.80 */
				var lp = '(', rp = ')';
				if(last_sp >= 0) {
					sp = "";
					switch(formula[0][last_sp][1][0]) {
						// $FlowIgnore
						case 2: lp = fill(" ", formula[0][last_sp][1][1]) + lp; break;
						// $FlowIgnore
						case 3: lp = fill("\r", formula[0][last_sp][1][1]) + lp; break;
						// $FlowIgnore
						case 4: rp = fill(" ", formula[0][last_sp][1][1]) + rp; break;
						// $FlowIgnore
						case 5: rp = fill("\r", formula[0][last_sp][1][1]) + rp; break;
						default:
							// $FlowIgnore
							if(opts.WTF) throw new Error("Unexpected PtgAttrSpaceType " + formula[0][last_sp][1][0]);
					}
					last_sp = -1;
				}
				stack.push(lp + stack.pop() + rp); break;

			case 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */
				stack.push('#REF!'); break;

			case 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */
				stack.push('#REF!'); break;

			case 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */
				c = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};
				var q = ({c: cell.c, r:cell.r}/*:any*/);
				if(supbooks.sharedf[encode_cell(c)]) {
					var parsedf = (supbooks.sharedf[encode_cell(c)]);
					stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));
				} else {
					var fnd = false;
					for(e1=0;e1!=supbooks.arrayf.length; ++e1) {
						/* TODO: should be something like range_has */
						e2 = supbooks.arrayf[e1];
						if(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;
						if(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;
						stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));
						fnd = true;
						break;
					}
					if(!fnd) stack.push(/*::String(*/f[1]/*::)*/);
				}
				break;

			case 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */
				stack.push("{" + stringify_array(/*::(*/f[1]/*:: :any)*/) + "}");
				break;

			case 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */
				//stack.push("(" + f[2].map(encode_range).join(",") + ")");
				break;

			case 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */
			case 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */
				last_sp = ff;
				break;

			case 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */
				break;

			case 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */
				break;

			case 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */
				stack.push("");
				break;

			case 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */
				stack.push("#REF!"); break;

			case 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */
				stack.push("#REF!"); break;

			case 'PtgList': /* [MS-XLSB] 2.5.97.52 */
				// $FlowIgnore
				stack.push("Table" + f[1].idx + "[#" + f[1].rt + "]");
				break;

			case 'PtgMemAreaN':
			case 'PtgMemNoMemN':
			case 'PtgAttrNoop':
			case 'PtgSheet':
			case 'PtgEndSheet':
				break;

			case 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */
				break;
			case 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */
				break;

			case 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */
			case 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */
			case 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */
			case 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */
			case 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */
			case 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */
			case 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */
			case 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */
			case 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */
			case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
				throw new Error("Unsupported ELFs");

			case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
				throw new Error('Unrecognized Formula Token: ' + String(f));
			default: throw new Error('Unrecognized Formula Token: ' + String(f));
		}
		var PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];
		if(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {
			f = formula[0][last_sp];
			var _left = true;
			switch(f[1][0]) {
				/* note: some bad XLSB files omit the PtgParen */
				case 4: _left = false;
				/* falls through */
				case 0:
					// $FlowIgnore
					sp = fill(" ", f[1][1]); break;
				case 5: _left = false;
				/* falls through */
				case 1:
					// $FlowIgnore
					sp = fill("\r", f[1][1]); break;
				default:
					sp = "";
					// $FlowIgnore
					if(opts.WTF) throw new Error("Unexpected PtgAttrSpaceType " + f[1][0]);
			}
			stack.push((_left ? sp : "") + stack.pop() + (_left ? "" : sp));
			last_sp = -1;
		}
	}
	if(stack.length > 1 && opts.WTF) throw new Error("bad formula stack");
	if(stack[0] == "TRUE") return true; if(stack[0] == "FALSE") return false;
	return stack[0];
}

/* [MS-XLS] 2.5.198.1 TODO */
function parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {
	var target = blob.l + length, len = opts.biff == 2 ? 1 : 2;
	var rgcb, cce = blob.read_shift(len); // length of rgce
	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
	var rgce = parse_Rgce(blob, cce, opts);
	if(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);
	blob.l = target;
	return [rgce, rgcb];
}

/* [MS-XLS] 2.5.198.3 TODO */
function parse_XLSCellParsedFormula(blob, length, opts) {
	var target = blob.l + length, len = opts.biff == 2 ? 1 : 2;
	var rgcb, cce = blob.read_shift(len); // length of rgce
	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
	var rgce = parse_Rgce(blob, cce, opts);
	if(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);
	blob.l = target;
	return [rgce, rgcb];
}

/* [MS-XLS] 2.5.198.21 */
function parse_NameParsedFormula(blob, length, opts, cce) {
	var target = blob.l + length;
	var rgce = parse_Rgce(blob, cce, opts);
	var rgcb;
	if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);
	return [rgce, rgcb];
}

/* [MS-XLS] 2.5.198.118 TODO */
function parse_SharedParsedFormula(blob, length, opts) {
	var target = blob.l + length;
	var rgcb, cce = blob.read_shift(2); // length of rgce
	var rgce = parse_Rgce(blob, cce, opts);
	if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];
	if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
	return [rgce, rgcb];
}

/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */
function parse_FormulaValue(blob/*::, length*/) {
	var b;
	if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];
	switch(blob[blob.l]) {
		case 0x00: blob.l += 8; return ["String", 's'];
		case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];
		case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];
		case 0x03: blob.l += 8; return ["",'s'];
	}
	return [];
}
function write_FormulaValue(value) {
	if(value == null) {
		// Blank String Value
		var o = new_buf(8);
		o.write_shift(1, 0x03);
		o.write_shift(1, 0);
		o.write_shift(2, 0);
		o.write_shift(2, 0);
		o.write_shift(2, 0xFFFF);
		return o;
	} else if(typeof value == "number") return write_Xnum(value);
	return write_Xnum(0);
}

/* [MS-XLS] 2.4.127 TODO */
function parse_Formula(blob, length, opts) {
	var end = blob.l + length;
	var cell = parse_XLSCell(blob, 6, opts);
	var val = parse_FormulaValue(blob,8);
	var flags = blob.read_shift(1);
	if(opts.biff != 2) {
		blob.read_shift(1);
		if(opts.biff >= 5) {
			/*var chn = */blob.read_shift(4);
		}
	}
	var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);
	return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};
}
function write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {
	// Cell
	var o1 = write_XLSCell(R, C, os);

	// FormulaValue
	var o2 = write_FormulaValue(cell.v);

	// flags + cache
	var o3 = new_buf(6);
	var flags = 0x01 | 0x20;
	o3.write_shift(2, flags);
	o3.write_shift(4, 0);

	// CellParsedFormula
	var bf = new_buf(cell.bf.length);
	for(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];

	var out = bconcat([o1, o2, o3, bf]);
	return out;
}


/* XLSB Parsed Formula records have the same shape */
function parse_XLSBParsedFormula(data, length, opts) {
	var cce = data.read_shift(4);
	var rgce = parse_Rgce(data, cce, opts);
	var cb = data.read_shift(4);
	var rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;
	return [rgce, rgcb];
}

/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */
var parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;
/* [MS-XLSB] 2.5.97.4 CellParsedFormula */
var parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;
/* [MS-XLSB] 2.5.97.8 DVParsedFormula */
//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;
/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */
//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;
/* [MS-XLSB] 2.5.97.12 NameParsedFormula */
var parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;
/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */
var parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;

/* Writes a PtgNum or PtgInt */
function write_XLSBFormulaNum(val/*:number*/) {
	if((val | 0) == val && val < Math.pow(2,16) && val >= 0) {
		var oint = new_buf(11);
		oint.write_shift(4, 3);
		oint.write_shift(1, 0x1e);
		oint.write_shift(2, val);
		oint.write_shift(4, 0);
		return oint;
	}

	var num = new_buf(17);
	num.write_shift(4, 11);
	num.write_shift(1, 0x1f);
	num.write_shift(8, val);
	num.write_shift(4, 0);
	return num;
}
/* Writes a PtgErr */
function write_XLSBFormulaErr(val/*:number*/) {
	var oint = new_buf(10);
	oint.write_shift(4, 2);
	oint.write_shift(1, 0x1C);
	oint.write_shift(1, val);
	oint.write_shift(4, 0);
	return oint;
}
/* Writes a PtgBool */
function write_XLSBFormulaBool(val/*:boolean*/) {
	var oint = new_buf(10);
	oint.write_shift(4, 2);
	oint.write_shift(1, 0x1D);
	oint.write_shift(1, val?1:0);
	oint.write_shift(4, 0);
	return oint;
}

/* Writes a PtgStr */
function write_XLSBFormulaStr(val/*:string*/) {
	var preamble = new_buf(7);
	preamble.write_shift(4, 3 + 2 * val.length);
	preamble.write_shift(1, 0x17);
	preamble.write_shift(2, val.length);

	var body = new_buf(2 * val.length);
	body.write_shift(2 * val.length, val, "utf16le");

	var postamble = new_buf(4);
	postamble.write_shift(4, 0);

	return bconcat([preamble, body, postamble]);
}

/* Writes a PtgRef */
function write_XLSBFormulaRef(str) {
	var cell = decode_cell(str);
	var out = new_buf(15);
	out.write_shift(4, 7);
	out.write_shift(1, 0x04 | ((1)<<5));
	out.write_shift(4, cell.r);
	out.write_shift(2, cell.c | ((str.charAt(0) == "$" ? 0 : 1)<<14) | ((str.match(/\$\d/) ? 0 : 1)<<15)); // <== ColRelShort
	out.write_shift(4, 0);

	return out;
}

/* Writes a PtgRef3d */
function write_XLSBFormulaRef3D(str, wb) {
	var lastbang = str.lastIndexOf("!");
	var sname = str.slice(0, lastbang);
	str = str.slice(lastbang+1);
	var cell = decode_cell(str);
	if(sname.charAt(0) == "'") sname = sname.slice(1, -1).replace(/''/g, "'");

	var out = new_buf(17);
	out.write_shift(4, 9);
	out.write_shift(1, 0x1A | ((1)<<5));
	out.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));
	out.write_shift(4, cell.r);
	out.write_shift(2, cell.c | ((str.charAt(0) == "$" ? 0 : 1)<<14) | ((str.match(/\$\d/) ? 0 : 1)<<15)); // <== ColRelShort
	out.write_shift(4, 0);

	return out;
}

/* Writes a PtgRefErr3d */
function write_XLSBFormulaRefErr3D(str, wb) {
	var lastbang = str.lastIndexOf("!");
	var sname = str.slice(0, lastbang);
	str = str.slice(lastbang+1);
	if(sname.charAt(0) == "'") sname = sname.slice(1, -1).replace(/''/g, "'");

	var out = new_buf(17);
	out.write_shift(4, 9);
	out.write_shift(1, 0x1C | ((1)<<5));
	out.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));
	out.write_shift(4, 0);
	out.write_shift(2, 0); // <== ColRelShort
	out.write_shift(4, 0);

	return out;
}

/* Writes a single sheet range [PtgRef PtgRef PtgRange] */
function write_XLSBFormulaRange(_str) {
	var parts = _str.split(":"), str = parts[0];

	var out = new_buf(23);
	out.write_shift(4, 15);

	/* start cell */
	str = parts[0]; var cell = decode_cell(str);
	out.write_shift(1, 0x04 | ((1)<<5));
	out.write_shift(4, cell.r);
	out.write_shift(2, cell.c | ((str.charAt(0) == "$" ? 0 : 1)<<14) | ((str.match(/\$\d/) ? 0 : 1)<<15)); // <== ColRelShort
	out.write_shift(4, 0);

	/* end cell */
	str = parts[1]; cell = decode_cell(str);
	out.write_shift(1, 0x04 | ((1)<<5));
	out.write_shift(4, cell.r);
	out.write_shift(2, cell.c | ((str.charAt(0) == "$" ? 0 : 1)<<14) | ((str.match(/\$\d/) ? 0 : 1)<<15)); // <== ColRelShort
	out.write_shift(4, 0);

	/* PtgRange */
	out.write_shift(1, 0x11);

	out.write_shift(4, 0);

	return out;
}

/* Writes a range with explicit sheet name [PtgRef3D PtgRef3D PtgRange] */
function write_XLSBFormulaRangeWS(_str, wb) {
	var lastbang = _str.lastIndexOf("!");
	var sname = _str.slice(0, lastbang);
	_str = _str.slice(lastbang+1);
	if(sname.charAt(0) == "'") sname = sname.slice(1, -1).replace(/''/g, "'");
	var parts = _str.split(":");

	var out = new_buf(27);
	out.write_shift(4, 19);

	/* start cell */
	var str = parts[0], cell = decode_cell(str);
	out.write_shift(1, 0x1A | ((1)<<5));
	out.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));
	out.write_shift(4, cell.r);
	out.write_shift(2, cell.c | ((str.charAt(0) == "$" ? 0 : 1)<<14) | ((str.match(/\$\d/) ? 0 : 1)<<15)); // <== ColRelShort

	/* end cell */
	str = parts[1]; cell = decode_cell(str);
	out.write_shift(1, 0x1A | ((1)<<5));
	out.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));
	out.write_shift(4, cell.r);
	out.write_shift(2, cell.c | ((str.charAt(0) == "$" ? 0 : 1)<<14) | ((str.match(/\$\d/) ? 0 : 1)<<15)); // <== ColRelShort

	/* PtgRange */
	out.write_shift(1, 0x11);

	out.write_shift(4, 0);

	return out;
}

/* Writes a range with explicit sheet name [PtgArea3d] */
function write_XLSBFormulaArea3D(_str, wb) {
	var lastbang = _str.lastIndexOf("!");
	var sname = _str.slice(0, lastbang);
	_str = _str.slice(lastbang+1);
	if(sname.charAt(0) == "'") sname = sname.slice(1, -1).replace(/''/g, "'");
	var range = decode_range(_str);

	var out = new_buf(23);
	out.write_shift(4, 15);

	out.write_shift(1, 0x1B | ((1)<<5));
	out.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));
	out.write_shift(4, range.s.r);
	out.write_shift(4, range.e.r);
	out.write_shift(2, range.s.c);
	out.write_shift(2, range.e.c);

	out.write_shift(4, 0);

	return out;
}


/* General Formula */
function write_XLSBFormula(val/*:string|number*/, wb) {
	if(typeof val == "number") return write_XLSBFormulaNum(val);
	if(typeof val == "boolean") return write_XLSBFormulaBool(val);
	if(/^#(DIV\/0!|GETTING_DATA|N\/A|NAME\?|NULL!|NUM!|REF!|VALUE!)$/.test(val)) return write_XLSBFormulaErr(+RBErr[val]);
	if(val.match(/^\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/)) return write_XLSBFormulaRef(val);
	if(val.match(/^\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5}):\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/)) return write_XLSBFormulaRange(val);
	if(val.match(/^#REF!\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5}):\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/)) return write_XLSBFormulaArea3D(val, wb);
	if(val.match(/^(?:'[^\\\/?*\[\]:]*'|[^'][^\\\/?*\[\]:'`~!@#$%^()\-=+{}|;,<.>]*)!\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/)) return write_XLSBFormulaRef3D(val, wb);
	if(val.match(/^(?:'[^\\\/?*\[\]:]*'|[^'][^\\\/?*\[\]:'`~!@#$%^()\-=+{}|;,<.>]*)!\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5}):\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/)) return write_XLSBFormulaRangeWS(val, wb);
	if(/^(?:'[^\\\/?*\[\]:]*'|[^'][^\\\/?*\[\]:'`~!@#$%^()\-=+{}|;,<.>]*)!#REF!$/.test(val)) return write_XLSBFormulaRefErr3D(val, wb);
	if(/^".*"$/.test(val)) return write_XLSBFormulaStr(val);
	if(/^[+-]\d+$/.test(val)) return write_XLSBFormulaNum(parseInt(val, 10));
	throw "Formula |" + val + "| not supported for XLSB";
}
var write_XLSBNameParsedFormula = write_XLSBFormula;
var Cetab = {
  0: "BEEP",
  1: "OPEN",
  2: "OPEN.LINKS",
  3: "CLOSE.ALL",
  4: "SAVE",
  5: "SAVE.AS",
  6: "FILE.DELETE",
  7: "PAGE.SETUP",
  8: "PRINT",
  9: "PRINTER.SETUP",
  10: "QUIT",
  11: "NEW.WINDOW",
  12: "ARRANGE.ALL",
  13: "WINDOW.SIZE",
  14: "WINDOW.MOVE",
  15: "FULL",
  16: "CLOSE",
  17: "RUN",
  22: "SET.PRINT.AREA",
  23: "SET.PRINT.TITLES",
  24: "SET.PAGE.BREAK",
  25: "REMOVE.PAGE.BREAK",
  26: "FONT",
  27: "DISPLAY",
  28: "PROTECT.DOCUMENT",
  29: "PRECISION",
  30: "A1.R1C1",
  31: "CALCULATE.NOW",
  32: "CALCULATION",
  34: "DATA.FIND",
  35: "EXTRACT",
  36: "DATA.DELETE",
  37: "SET.DATABASE",
  38: "SET.CRITERIA",
  39: "SORT",
  40: "DATA.SERIES",
  41: "TABLE",
  42: "FORMAT.NUMBER",
  43: "ALIGNMENT",
  44: "STYLE",
  45: "BORDER",
  46: "CELL.PROTECTION",
  47: "COLUMN.WIDTH",
  48: "UNDO",
  49: "CUT",
  50: "COPY",
  51: "PASTE",
  52: "CLEAR",
  53: "PASTE.SPECIAL",
  54: "EDIT.DELETE",
  55: "INSERT",
  56: "FILL.RIGHT",
  57: "FILL.DOWN",
  61: "DEFINE.NAME",
  62: "CREATE.NAMES",
  63: "FORMULA.GOTO",
  64: "FORMULA.FIND",
  65: "SELECT.LAST.CELL",
  66: "SHOW.ACTIVE.CELL",
  67: "GALLERY.AREA",
  68: "GALLERY.BAR",
  69: "GALLERY.COLUMN",
  70: "GALLERY.LINE",
  71: "GALLERY.PIE",
  72: "GALLERY.SCATTER",
  73: "COMBINATION",
  74: "PREFERRED",
  75: "ADD.OVERLAY",
  76: "GRIDLINES",
  77: "SET.PREFERRED",
  78: "AXES",
  79: "LEGEND",
  80: "ATTACH.TEXT",
  81: "ADD.ARROW",
  82: "SELECT.CHART",
  83: "SELECT.PLOT.AREA",
  84: "PATTERNS",
  85: "MAIN.CHART",
  86: "OVERLAY",
  87: "SCALE",
  88: "FORMAT.LEGEND",
  89: "FORMAT.TEXT",
  90: "EDIT.REPEAT",
  91: "PARSE",
  92: "JUSTIFY",
  93: "HIDE",
  94: "UNHIDE",
  95: "WORKSPACE",
  96: "FORMULA",
  97: "FORMULA.FILL",
  98: "FORMULA.ARRAY",
  99: "DATA.FIND.NEXT",
  100: "DATA.FIND.PREV",
  101: "FORMULA.FIND.NEXT",
  102: "FORMULA.FIND.PREV",
  103: "ACTIVATE",
  104: "ACTIVATE.NEXT",
  105: "ACTIVATE.PREV",
  106: "UNLOCKED.NEXT",
  107: "UNLOCKED.PREV",
  108: "COPY.PICTURE",
  109: "SELECT",
  110: "DELETE.NAME",
  111: "DELETE.FORMAT",
  112: "VLINE",
  113: "HLINE",
  114: "VPAGE",
  115: "HPAGE",
  116: "VSCROLL",
  117: "HSCROLL",
  118: "ALERT",
  119: "NEW",
  120: "CANCEL.COPY",
  121: "SHOW.CLIPBOARD",
  122: "MESSAGE",
  124: "PASTE.LINK",
  125: "APP.ACTIVATE",
  126: "DELETE.ARROW",
  127: "ROW.HEIGHT",
  128: "FORMAT.MOVE",
  129: "FORMAT.SIZE",
  130: "FORMULA.REPLACE",
  131: "SEND.KEYS",
  132: "SELECT.SPECIAL",
  133: "APPLY.NAMES",
  134: "REPLACE.FONT",
  135: "FREEZE.PANES",
  136: "SHOW.INFO",
  137: "SPLIT",
  138: "ON.WINDOW",
  139: "ON.DATA",
  140: "DISABLE.INPUT",
  142: "OUTLINE",
  143: "LIST.NAMES",
  144: "FILE.CLOSE",
  145: "SAVE.WORKBOOK",
  146: "DATA.FORM",
  147: "COPY.CHART",
  148: "ON.TIME",
  149: "WAIT",
  150: "FORMAT.FONT",
  151: "FILL.UP",
  152: "FILL.LEFT",
  153: "DELETE.OVERLAY",
  155: "SHORT.MENUS",
  159: "SET.UPDATE.STATUS",
  161: "COLOR.PALETTE",
  162: "DELETE.STYLE",
  163: "WINDOW.RESTORE",
  164: "WINDOW.MAXIMIZE",
  166: "CHANGE.LINK",
  167: "CALCULATE.DOCUMENT",
  168: "ON.KEY",
  169: "APP.RESTORE",
  170: "APP.MOVE",
  171: "APP.SIZE",
  172: "APP.MINIMIZE",
  173: "APP.MAXIMIZE",
  174: "BRING.TO.FRONT",
  175: "SEND.TO.BACK",
  185: "MAIN.CHART.TYPE",
  186: "OVERLAY.CHART.TYPE",
  187: "SELECT.END",
  188: "OPEN.MAIL",
  189: "SEND.MAIL",
  190: "STANDARD.FONT",
  191: "CONSOLIDATE",
  192: "SORT.SPECIAL",
  193: "GALLERY.3D.AREA",
  194: "GALLERY.3D.COLUMN",
  195: "GALLERY.3D.LINE",
  196: "GALLERY.3D.PIE",
  197: "VIEW.3D",
  198: "GOAL.SEEK",
  199: "WORKGROUP",
  200: "FILL.GROUP",
  201: "UPDATE.LINK",
  202: "PROMOTE",
  203: "DEMOTE",
  204: "SHOW.DETAIL",
  206: "UNGROUP",
  207: "OBJECT.PROPERTIES",
  208: "SAVE.NEW.OBJECT",
  209: "SHARE",
  210: "SHARE.NAME",
  211: "DUPLICATE",
  212: "APPLY.STYLE",
  213: "ASSIGN.TO.OBJECT",
  214: "OBJECT.PROTECTION",
  215: "HIDE.OBJECT",
  216: "SET.EXTRACT",
  217: "CREATE.PUBLISHER",
  218: "SUBSCRIBE.TO",
  219: "ATTRIBUTES",
  220: "SHOW.TOOLBAR",
  222: "PRINT.PREVIEW",
  223: "EDIT.COLOR",
  224: "SHOW.LEVELS",
  225: "FORMAT.MAIN",
  226: "FORMAT.OVERLAY",
  227: "ON.RECALC",
  228: "EDIT.SERIES",
  229: "DEFINE.STYLE",
  240: "LINE.PRINT",
  243: "ENTER.DATA",
  249: "GALLERY.RADAR",
  250: "MERGE.STYLES",
  251: "EDITION.OPTIONS",
  252: "PASTE.PICTURE",
  253: "PASTE.PICTURE.LINK",
  254: "SPELLING",
  256: "ZOOM",
  259: "INSERT.OBJECT",
  260: "WINDOW.MINIMIZE",
  265: "SOUND.NOTE",
  266: "SOUND.PLAY",
  267: "FORMAT.SHAPE",
  268: "EXTEND.POLYGON",
  269: "FORMAT.AUTO",
  272: "GALLERY.3D.BAR",
  273: "GALLERY.3D.SURFACE",
  274: "FILL.AUTO",
  276: "CUSTOMIZE.TOOLBAR",
  277: "ADD.TOOL",
  278: "EDIT.OBJECT",
  279: "ON.DOUBLECLICK",
  280: "ON.ENTRY",
  281: "WORKBOOK.ADD",
  282: "WORKBOOK.MOVE",
  283: "WORKBOOK.COPY",
  284: "WORKBOOK.OPTIONS",
  285: "SAVE.WORKSPACE",
  288: "CHART.WIZARD",
  289: "DELETE.TOOL",
  290: "MOVE.TOOL",
  291: "WORKBOOK.SELECT",
  292: "WORKBOOK.ACTIVATE",
  293: "ASSIGN.TO.TOOL",
  295: "COPY.TOOL",
  296: "RESET.TOOL",
  297: "CONSTRAIN.NUMERIC",
  298: "PASTE.TOOL",
  302: "WORKBOOK.NEW",
  305: "SCENARIO.CELLS",
  306: "SCENARIO.DELETE",
  307: "SCENARIO.ADD",
  308: "SCENARIO.EDIT",
  309: "SCENARIO.SHOW",
  310: "SCENARIO.SHOW.NEXT",
  311: "SCENARIO.SUMMARY",
  312: "PIVOT.TABLE.WIZARD",
  313: "PIVOT.FIELD.PROPERTIES",
  314: "PIVOT.FIELD",
  315: "PIVOT.ITEM",
  316: "PIVOT.ADD.FIELDS",
  318: "OPTIONS.CALCULATION",
  319: "OPTIONS.EDIT",
  320: "OPTIONS.VIEW",
  321: "ADDIN.MANAGER",
  322: "MENU.EDITOR",
  323: "ATTACH.TOOLBARS",
  324: "VBAActivate",
  325: "OPTIONS.CHART",
  328: "VBA.INSERT.FILE",
  330: "VBA.PROCEDURE.DEFINITION",
  336: "ROUTING.SLIP",
  338: "ROUTE.DOCUMENT",
  339: "MAIL.LOGON",
  342: "INSERT.PICTURE",
  343: "EDIT.TOOL",
  344: "GALLERY.DOUGHNUT",
  350: "CHART.TREND",
  352: "PIVOT.ITEM.PROPERTIES",
  354: "WORKBOOK.INSERT",
  355: "OPTIONS.TRANSITION",
  356: "OPTIONS.GENERAL",
  370: "FILTER.ADVANCED",
  373: "MAIL.ADD.MAILER",
  374: "MAIL.DELETE.MAILER",
  375: "MAIL.REPLY",
  376: "MAIL.REPLY.ALL",
  377: "MAIL.FORWARD",
  378: "MAIL.NEXT.LETTER",
  379: "DATA.LABEL",
  380: "INSERT.TITLE",
  381: "FONT.PROPERTIES",
  382: "MACRO.OPTIONS",
  383: "WORKBOOK.HIDE",
  384: "WORKBOOK.UNHIDE",
  385: "WORKBOOK.DELETE",
  386: "WORKBOOK.NAME",
  388: "GALLERY.CUSTOM",
  390: "ADD.CHART.AUTOFORMAT",
  391: "DELETE.CHART.AUTOFORMAT",
  392: "CHART.ADD.DATA",
  393: "AUTO.OUTLINE",
  394: "TAB.ORDER",
  395: "SHOW.DIALOG",
  396: "SELECT.ALL",
  397: "UNGROUP.SHEETS",
  398: "SUBTOTAL.CREATE",
  399: "SUBTOTAL.REMOVE",
  400: "RENAME.OBJECT",
  412: "WORKBOOK.SCROLL",
  413: "WORKBOOK.NEXT",
  414: "WORKBOOK.PREV",
  415: "WORKBOOK.TAB.SPLIT",
  416: "FULL.SCREEN",
  417: "WORKBOOK.PROTECT",
  420: "SCROLLBAR.PROPERTIES",
  421: "PIVOT.SHOW.PAGES",
  422: "TEXT.TO.COLUMNS",
  423: "FORMAT.CHARTTYPE",
  424: "LINK.FORMAT",
  425: "TRACER.DISPLAY",
  430: "TRACER.NAVIGATE",
  431: "TRACER.CLEAR",
  432: "TRACER.ERROR",
  433: "PIVOT.FIELD.GROUP",
  434: "PIVOT.FIELD.UNGROUP",
  435: "CHECKBOX.PROPERTIES",
  436: "LABEL.PROPERTIES",
  437: "LISTBOX.PROPERTIES",
  438: "EDITBOX.PROPERTIES",
  439: "PIVOT.REFRESH",
  440: "LINK.COMBO",
  441: "OPEN.TEXT",
  442: "HIDE.DIALOG",
  443: "SET.DIALOG.FOCUS",
  444: "ENABLE.OBJECT",
  445: "PUSHBUTTON.PROPERTIES",
  446: "SET.DIALOG.DEFAULT",
  447: "FILTER",
  448: "FILTER.SHOW.ALL",
  449: "CLEAR.OUTLINE",
  450: "FUNCTION.WIZARD",
  451: "ADD.LIST.ITEM",
  452: "SET.LIST.ITEM",
  453: "REMOVE.LIST.ITEM",
  454: "SELECT.LIST.ITEM",
  455: "SET.CONTROL.VALUE",
  456: "SAVE.COPY.AS",
  458: "OPTIONS.LISTS.ADD",
  459: "OPTIONS.LISTS.DELETE",
  460: "SERIES.AXES",
  461: "SERIES.X",
  462: "SERIES.Y",
  463: "ERRORBAR.X",
  464: "ERRORBAR.Y",
  465: "FORMAT.CHART",
  466: "SERIES.ORDER",
  467: "MAIL.LOGOFF",
  468: "CLEAR.ROUTING.SLIP",
  469: "APP.ACTIVATE.MICROSOFT",
  470: "MAIL.EDIT.MAILER",
  471: "ON.SHEET",
  472: "STANDARD.WIDTH",
  473: "SCENARIO.MERGE",
  474: "SUMMARY.INFO",
  475: "FIND.FILE",
  476: "ACTIVE.CELL.FONT",
  477: "ENABLE.TIPWIZARD",
  478: "VBA.MAKE.ADDIN",
  480: "INSERTDATATABLE",
  481: "WORKGROUP.OPTIONS",
  482: "MAIL.SEND.MAILER",
  485: "AUTOCORRECT",
  489: "POST.DOCUMENT",
  491: "PICKLIST",
  493: "VIEW.SHOW",
  494: "VIEW.DEFINE",
  495: "VIEW.DELETE",
  509: "SHEET.BACKGROUND",
  510: "INSERT.MAP.OBJECT",
  511: "OPTIONS.MENONO",
  517: "MSOCHECKS",
  518: "NORMAL",
  519: "LAYOUT",
  520: "RM.PRINT.AREA",
  521: "CLEAR.PRINT.AREA",
  522: "ADD.PRINT.AREA",
  523: "MOVE.BRK",
  545: "HIDECURR.NOTE",
  546: "HIDEALL.NOTES",
  547: "DELETE.NOTE",
  548: "TRAVERSE.NOTES",
  549: "ACTIVATE.NOTES",
  620: "PROTECT.REVISIONS",
  621: "UNPROTECT.REVISIONS",
  647: "OPTIONS.ME",
  653: "WEB.PUBLISH",
  667: "NEWWEBQUERY",
  673: "PIVOT.TABLE.CHART",
  753: "OPTIONS.SAVE",
  755: "OPTIONS.SPELL",
  808: "HIDEALL.INKANNOTS"
};
var Ftab = {
  0: "COUNT",
  1: "IF",
  2: "ISNA",
  3: "ISERROR",
  4: "SUM",
  5: "AVERAGE",
  6: "MIN",
  7: "MAX",
  8: "ROW",
  9: "COLUMN",
  10: "NA",
  11: "NPV",
  12: "STDEV",
  13: "DOLLAR",
  14: "FIXED",
  15: "SIN",
  16: "COS",
  17: "TAN",
  18: "ATAN",
  19: "PI",
  20: "SQRT",
  21: "EXP",
  22: "LN",
  23: "LOG10",
  24: "ABS",
  25: "INT",
  26: "SIGN",
  27: "ROUND",
  28: "LOOKUP",
  29: "INDEX",
  30: "REPT",
  31: "MID",
  32: "LEN",
  33: "VALUE",
  34: "TRUE",
  35: "FALSE",
  36: "AND",
  37: "OR",
  38: "NOT",
  39: "MOD",
  40: "DCOUNT",
  41: "DSUM",
  42: "DAVERAGE",
  43: "DMIN",
  44: "DMAX",
  45: "DSTDEV",
  46: "VAR",
  47: "DVAR",
  48: "TEXT",
  49: "LINEST",
  50: "TREND",
  51: "LOGEST",
  52: "GROWTH",
  53: "GOTO",
  54: "HALT",
  55: "RETURN",
  56: "PV",
  57: "FV",
  58: "NPER",
  59: "PMT",
  60: "RATE",
  61: "MIRR",
  62: "IRR",
  63: "RAND",
  64: "MATCH",
  65: "DATE",
  66: "TIME",
  67: "DAY",
  68: "MONTH",
  69: "YEAR",
  70: "WEEKDAY",
  71: "HOUR",
  72: "MINUTE",
  73: "SECOND",
  74: "NOW",
  75: "AREAS",
  76: "ROWS",
  77: "COLUMNS",
  78: "OFFSET",
  79: "ABSREF",
  80: "RELREF",
  81: "ARGUMENT",
  82: "SEARCH",
  83: "TRANSPOSE",
  84: "ERROR",
  85: "STEP",
  86: "TYPE",
  87: "ECHO",
  88: "SET.NAME",
  89: "CALLER",
  90: "DEREF",
  91: "WINDOWS",
  92: "SERIES",
  93: "DOCUMENTS",
  94: "ACTIVE.CELL",
  95: "SELECTION",
  96: "RESULT",
  97: "ATAN2",
  98: "ASIN",
  99: "ACOS",
  100: "CHOOSE",
  101: "HLOOKUP",
  102: "VLOOKUP",
  103: "LINKS",
  104: "INPUT",
  105: "ISREF",
  106: "GET.FORMULA",
  107: "GET.NAME",
  108: "SET.VALUE",
  109: "LOG",
  110: "EXEC",
  111: "CHAR",
  112: "LOWER",
  113: "UPPER",
  114: "PROPER",
  115: "LEFT",
  116: "RIGHT",
  117: "EXACT",
  118: "TRIM",
  119: "REPLACE",
  120: "SUBSTITUTE",
  121: "CODE",
  122: "NAMES",
  123: "DIRECTORY",
  124: "FIND",
  125: "CELL",
  126: "ISERR",
  127: "ISTEXT",
  128: "ISNUMBER",
  129: "ISBLANK",
  130: "T",
  131: "N",
  132: "FOPEN",
  133: "FCLOSE",
  134: "FSIZE",
  135: "FREADLN",
  136: "FREAD",
  137: "FWRITELN",
  138: "FWRITE",
  139: "FPOS",
  140: "DATEVALUE",
  141: "TIMEVALUE",
  142: "SLN",
  143: "SYD",
  144: "DDB",
  145: "GET.DEF",
  146: "REFTEXT",
  147: "TEXTREF",
  148: "INDIRECT",
  149: "REGISTER",
  150: "CALL",
  151: "ADD.BAR",
  152: "ADD.MENU",
  153: "ADD.COMMAND",
  154: "ENABLE.COMMAND",
  155: "CHECK.COMMAND",
  156: "RENAME.COMMAND",
  157: "SHOW.BAR",
  158: "DELETE.MENU",
  159: "DELETE.COMMAND",
  160: "GET.CHART.ITEM",
  161: "DIALOG.BOX",
  162: "CLEAN",
  163: "MDETERM",
  164: "MINVERSE",
  165: "MMULT",
  166: "FILES",
  167: "IPMT",
  168: "PPMT",
  169: "COUNTA",
  170: "CANCEL.KEY",
  171: "FOR",
  172: "WHILE",
  173: "BREAK",
  174: "NEXT",
  175: "INITIATE",
  176: "REQUEST",
  177: "POKE",
  178: "EXECUTE",
  179: "TERMINATE",
  180: "RESTART",
  181: "HELP",
  182: "GET.BAR",
  183: "PRODUCT",
  184: "FACT",
  185: "GET.CELL",
  186: "GET.WORKSPACE",
  187: "GET.WINDOW",
  188: "GET.DOCUMENT",
  189: "DPRODUCT",
  190: "ISNONTEXT",
  191: "GET.NOTE",
  192: "NOTE",
  193: "STDEVP",
  194: "VARP",
  195: "DSTDEVP",
  196: "DVARP",
  197: "TRUNC",
  198: "ISLOGICAL",
  199: "DCOUNTA",
  200: "DELETE.BAR",
  201: "UNREGISTER",
  204: "USDOLLAR",
  205: "FINDB",
  206: "SEARCHB",
  207: "REPLACEB",
  208: "LEFTB",
  209: "RIGHTB",
  210: "MIDB",
  211: "LENB",
  212: "ROUNDUP",
  213: "ROUNDDOWN",
  214: "ASC",
  215: "DBCS",
  216: "RANK",
  219: "ADDRESS",
  220: "DAYS360",
  221: "TODAY",
  222: "VDB",
  223: "ELSE",
  224: "ELSE.IF",
  225: "END.IF",
  226: "FOR.CELL",
  227: "MEDIAN",
  228: "SUMPRODUCT",
  229: "SINH",
  230: "COSH",
  231: "TANH",
  232: "ASINH",
  233: "ACOSH",
  234: "ATANH",
  235: "DGET",
  236: "CREATE.OBJECT",
  237: "VOLATILE",
  238: "LAST.ERROR",
  239: "CUSTOM.UNDO",
  240: "CUSTOM.REPEAT",
  241: "FORMULA.CONVERT",
  242: "GET.LINK.INFO",
  243: "TEXT.BOX",
  244: "INFO",
  245: "GROUP",
  246: "GET.OBJECT",
  247: "DB",
  248: "PAUSE",
  251: "RESUME",
  252: "FREQUENCY",
  253: "ADD.TOOLBAR",
  254: "DELETE.TOOLBAR",
  255: "User",
  256: "RESET.TOOLBAR",
  257: "EVALUATE",
  258: "GET.TOOLBAR",
  259: "GET.TOOL",
  260: "SPELLING.CHECK",
  261: "ERROR.TYPE",
  262: "APP.TITLE",
  263: "WINDOW.TITLE",
  264: "SAVE.TOOLBAR",
  265: "ENABLE.TOOL",
  266: "PRESS.TOOL",
  267: "REGISTER.ID",
  268: "GET.WORKBOOK",
  269: "AVEDEV",
  270: "BETADIST",
  271: "GAMMALN",
  272: "BETAINV",
  273: "BINOMDIST",
  274: "CHIDIST",
  275: "CHIINV",
  276: "COMBIN",
  277: "CONFIDENCE",
  278: "CRITBINOM",
  279: "EVEN",
  280: "EXPONDIST",
  281: "FDIST",
  282: "FINV",
  283: "FISHER",
  284: "FISHERINV",
  285: "FLOOR",
  286: "GAMMADIST",
  287: "GAMMAINV",
  288: "CEILING",
  289: "HYPGEOMDIST",
  290: "LOGNORMDIST",
  291: "LOGINV",
  292: "NEGBINOMDIST",
  293: "NORMDIST",
  294: "NORMSDIST",
  295: "NORMINV",
  296: "NORMSINV",
  297: "STANDARDIZE",
  298: "ODD",
  299: "PERMUT",
  300: "POISSON",
  301: "TDIST",
  302: "WEIBULL",
  303: "SUMXMY2",
  304: "SUMX2MY2",
  305: "SUMX2PY2",
  306: "CHITEST",
  307: "CORREL",
  308: "COVAR",
  309: "FORECAST",
  310: "FTEST",
  311: "INTERCEPT",
  312: "PEARSON",
  313: "RSQ",
  314: "STEYX",
  315: "SLOPE",
  316: "TTEST",
  317: "PROB",
  318: "DEVSQ",
  319: "GEOMEAN",
  320: "HARMEAN",
  321: "SUMSQ",
  322: "KURT",
  323: "SKEW",
  324: "ZTEST",
  325: "LARGE",
  326: "SMALL",
  327: "QUARTILE",
  328: "PERCENTILE",
  329: "PERCENTRANK",
  330: "MODE",
  331: "TRIMMEAN",
  332: "TINV",
  334: "MOVIE.COMMAND",
  335: "GET.MOVIE",
  336: "CONCATENATE",
  337: "POWER",
  338: "PIVOT.ADD.DATA",
  339: "GET.PIVOT.TABLE",
  340: "GET.PIVOT.FIELD",
  341: "GET.PIVOT.ITEM",
  342: "RADIANS",
  343: "DEGREES",
  344: "SUBTOTAL",
  345: "SUMIF",
  346: "COUNTIF",
  347: "COUNTBLANK",
  348: "SCENARIO.GET",
  349: "OPTIONS.LISTS.GET",
  350: "ISPMT",
  351: "DATEDIF",
  352: "DATESTRING",
  353: "NUMBERSTRING",
  354: "ROMAN",
  355: "OPEN.DIALOG",
  356: "SAVE.DIALOG",
  357: "VIEW.GET",
  358: "GETPIVOTDATA",
  359: "HYPERLINK",
  360: "PHONETIC",
  361: "AVERAGEA",
  362: "MAXA",
  363: "MINA",
  364: "STDEVPA",
  365: "VARPA",
  366: "STDEVA",
  367: "VARA",
  368: "BAHTTEXT",
  369: "THAIDAYOFWEEK",
  370: "THAIDIGIT",
  371: "THAIMONTHOFYEAR",
  372: "THAINUMSOUND",
  373: "THAINUMSTRING",
  374: "THAISTRINGLENGTH",
  375: "ISTHAIDIGIT",
  376: "ROUNDBAHTDOWN",
  377: "ROUNDBAHTUP",
  378: "THAIYEAR",
  379: "RTD",
  380: "CUBEVALUE",
  381: "CUBEMEMBER",
  382: "CUBEMEMBERPROPERTY",
  383: "CUBERANKEDMEMBER",
  384: "HEX2BIN",
  385: "HEX2DEC",
  386: "HEX2OCT",
  387: "DEC2BIN",
  388: "DEC2HEX",
  389: "DEC2OCT",
  390: "OCT2BIN",
  391: "OCT2HEX",
  392: "OCT2DEC",
  393: "BIN2DEC",
  394: "BIN2OCT",
  395: "BIN2HEX",
  396: "IMSUB",
  397: "IMDIV",
  398: "IMPOWER",
  399: "IMABS",
  400: "IMSQRT",
  401: "IMLN",
  402: "IMLOG2",
  403: "IMLOG10",
  404: "IMSIN",
  405: "IMCOS",
  406: "IMEXP",
  407: "IMARGUMENT",
  408: "IMCONJUGATE",
  409: "IMAGINARY",
  410: "IMREAL",
  411: "COMPLEX",
  412: "IMSUM",
  413: "IMPRODUCT",
  414: "SERIESSUM",
  415: "FACTDOUBLE",
  416: "SQRTPI",
  417: "QUOTIENT",
  418: "DELTA",
  419: "GESTEP",
  420: "ISEVEN",
  421: "ISODD",
  422: "MROUND",
  423: "ERF",
  424: "ERFC",
  425: "BESSELJ",
  426: "BESSELK",
  427: "BESSELY",
  428: "BESSELI",
  429: "XIRR",
  430: "XNPV",
  431: "PRICEMAT",
  432: "YIELDMAT",
  433: "INTRATE",
  434: "RECEIVED",
  435: "DISC",
  436: "PRICEDISC",
  437: "YIELDDISC",
  438: "TBILLEQ",
  439: "TBILLPRICE",
  440: "TBILLYIELD",
  441: "PRICE",
  442: "YIELD",
  443: "DOLLARDE",
  444: "DOLLARFR",
  445: "NOMINAL",
  446: "EFFECT",
  447: "CUMPRINC",
  448: "CUMIPMT",
  449: "EDATE",
  450: "EOMONTH",
  451: "YEARFRAC",
  452: "COUPDAYBS",
  453: "COUPDAYS",
  454: "COUPDAYSNC",
  455: "COUPNCD",
  456: "COUPNUM",
  457: "COUPPCD",
  458: "DURATION",
  459: "MDURATION",
  460: "ODDLPRICE",
  461: "ODDLYIELD",
  462: "ODDFPRICE",
  463: "ODDFYIELD",
  464: "RANDBETWEEN",
  465: "WEEKNUM",
  466: "AMORDEGRC",
  467: "AMORLINC",
  468: "CONVERT",
  724: "SHEETJS",
  469: "ACCRINT",
  470: "ACCRINTM",
  471: "WORKDAY",
  472: "NETWORKDAYS",
  473: "GCD",
  474: "MULTINOMIAL",
  475: "LCM",
  476: "FVSCHEDULE",
  477: "CUBEKPIMEMBER",
  478: "CUBESET",
  479: "CUBESETCOUNT",
  480: "IFERROR",
  481: "COUNTIFS",
  482: "SUMIFS",
  483: "AVERAGEIF",
  484: "AVERAGEIFS"
};
var FtabArgc = {
  2: 1,
  3: 1,
  10: 0,
  15: 1,
  16: 1,
  17: 1,
  18: 1,
  19: 0,
  20: 1,
  21: 1,
  22: 1,
  23: 1,
  24: 1,
  25: 1,
  26: 1,
  27: 2,
  30: 2,
  31: 3,
  32: 1,
  33: 1,
  34: 0,
  35: 0,
  38: 1,
  39: 2,
  40: 3,
  41: 3,
  42: 3,
  43: 3,
  44: 3,
  45: 3,
  47: 3,
  48: 2,
  53: 1,
  61: 3,
  63: 0,
  65: 3,
  66: 3,
  67: 1,
  68: 1,
  69: 1,
  70: 1,
  71: 1,
  72: 1,
  73: 1,
  74: 0,
  75: 1,
  76: 1,
  77: 1,
  79: 2,
  80: 2,
  83: 1,
  85: 0,
  86: 1,
  89: 0,
  90: 1,
  94: 0,
  95: 0,
  97: 2,
  98: 1,
  99: 1,
  101: 3,
  102: 3,
  105: 1,
  106: 1,
  108: 2,
  111: 1,
  112: 1,
  113: 1,
  114: 1,
  117: 2,
  118: 1,
  119: 4,
  121: 1,
  126: 1,
  127: 1,
  128: 1,
  129: 1,
  130: 1,
  131: 1,
  133: 1,
  134: 1,
  135: 1,
  136: 2,
  137: 2,
  138: 2,
  140: 1,
  141: 1,
  142: 3,
  143: 4,
  144: 4,
  161: 1,
  162: 1,
  163: 1,
  164: 1,
  165: 2,
  172: 1,
  175: 2,
  176: 2,
  177: 3,
  178: 2,
  179: 1,
  184: 1,
  186: 1,
  189: 3,
  190: 1,
  195: 3,
  196: 3,
  197: 1,
  198: 1,
  199: 3,
  201: 1,
  207: 4,
  210: 3,
  211: 1,
  212: 2,
  213: 2,
  214: 1,
  215: 1,
  225: 0,
  229: 1,
  230: 1,
  231: 1,
  232: 1,
  233: 1,
  234: 1,
  235: 3,
  244: 1,
  247: 4,
  252: 2,
  257: 1,
  261: 1,
  271: 1,
  273: 4,
  274: 2,
  275: 2,
  276: 2,
  277: 3,
  278: 3,
  279: 1,
  280: 3,
  281: 3,
  282: 3,
  283: 1,
  284: 1,
  285: 2,
  286: 4,
  287: 3,
  288: 2,
  289: 4,
  290: 3,
  291: 3,
  292: 3,
  293: 4,
  294: 1,
  295: 3,
  296: 1,
  297: 3,
  298: 1,
  299: 2,
  300: 3,
  301: 3,
  302: 4,
  303: 2,
  304: 2,
  305: 2,
  306: 2,
  307: 2,
  308: 2,
  309: 3,
  310: 2,
  311: 2,
  312: 2,
  313: 2,
  314: 2,
  315: 2,
  316: 4,
  325: 2,
  326: 2,
  327: 2,
  328: 2,
  331: 2,
  332: 2,
  337: 2,
  342: 1,
  343: 1,
  346: 2,
  347: 1,
  350: 4,
  351: 3,
  352: 1,
  353: 2,
  360: 1,
  368: 1,
  369: 1,
  370: 1,
  371: 1,
  372: 1,
  373: 1,
  374: 1,
  375: 1,
  376: 1,
  377: 1,
  378: 1,
  382: 3,
  385: 1,
  392: 1,
  393: 1,
  396: 2,
  397: 2,
  398: 2,
  399: 1,
  400: 1,
  401: 1,
  402: 1,
  403: 1,
  404: 1,
  405: 1,
  406: 1,
  407: 1,
  408: 1,
  409: 1,
  410: 1,
  414: 4,
  415: 1,
  416: 1,
  417: 2,
  420: 1,
  421: 1,
  422: 2,
  424: 1,
  425: 2,
  426: 2,
  427: 2,
  428: 2,
  430: 3,
  438: 3,
  439: 3,
  440: 3,
  443: 2,
  444: 2,
  445: 2,
  446: 2,
  447: 6,
  448: 6,
  449: 2,
  450: 2,
  464: 2,
  468: 3,
  476: 2,
  479: 1,
  480: 2,
  65535: 0
};
/* Part 3 TODO: actually parse formulae */
function ods_to_csf_formula(f/*:string*/)/*:string*/ {
	if(f.slice(0,3) == "of:") f = f.slice(3);
	/* 5.2 Basic Expressions */
	if(f.charCodeAt(0) == 61) {
		f = f.slice(1);
		if(f.charCodeAt(0) == 61) f = f.slice(1);
	}
	f = f.replace(/COM\.MICROSOFT\./g, "");
	/* Part 3 Section 5.8 References */
	f = f.replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g, function($$, $1) { return $1.replace(/\./g,""); });
	f = f.replace(/\$'([^']|'')+'/g, function($$) { return $$.slice(1); });
	f = f.replace(/\$([^\]\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})?$/) ? $$ : $1; });
	/* TODO: something other than this */
	f = f.replace(/\[.(#[A-Z]*[?!])\]/g, "$1");
	return f.replace(/[;~]/g,",").replace(/\|/g,";");
}

function csf_to_ods_formula(f/*:string*/)/*:string*/ {
	var o = "of:=" + f.replace(crefregex, "$1[.$2$3$4$5]").replace(/\]:\[/g,":");
	/* TODO: something other than this */
	return o.replace(/;/g, "|").replace(/,/g,";");
}

function ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {
	r = r.replace(/\$'([^']|'')+'/g, function($$) { return $$.slice(1); });
	r = r.replace(/\$([^\]\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})?$/) ? $$ : $1; });
	var a = r.split(":");
	var s = a[0].split(".")[0];
	return [s, a[0].split(".")[1] + (a.length > 1 ? (":" + (a[1].split(".")[1] || a[1].split(".")[0])) : "")];
}

function csf_to_ods_3D(r/*:string*/)/*:string*/ {
	return r.replace(/!/,".").replace(/:/, ":.");
}

var strs = {}; // shared strings
var _ssfopts = {}; // spreadsheet formatting options


/*global Map */
var browser_has_Map = typeof Map !== 'undefined';

function get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {
	var i = 0, len = sst.length;
	if(rev) {
		if(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {
			var revarr = browser_has_Map ? rev.get(str) : rev[str];
			for(; i < revarr.length; ++i) {
				if(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }
			}
		}
	} else for(; i < len; ++i) {
		if(sst[i].t === str) { sst.Count ++; return i; }
	}
	sst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;
	if(rev) {
		if(browser_has_Map) {
			if(!rev.has(str)) rev.set(str, []);
			rev.get(str).push(len);
		} else {
			if(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];
			rev[str].push(len);
		}
	}
	return len;
}

function col_obj_w(C/*:number*/, col) {
	var p = ({min:C+1,max:C+1}/*:any*/);
	/* wch (chars), wpx (pixels) */
	var wch = -1;
	if(col.MDW) MDW = col.MDW;
	if(col.width != null) p.customWidth = 1;
	else if(col.wpx != null) wch = px2char(col.wpx);
	else if(col.wch != null) wch = col.wch;
	if(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }
	else if(col.width != null) p.width = col.width;
	if(col.hidden) p.hidden = true;
	if(col.level != null) { p.outlineLevel = p.level = col.level; }
	return p;
}

function default_margins(margins/*:Margins*/, mode/*:?string*/) {
	if(!margins) return;
	var defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];
	if(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];
	if(margins.left   == null) margins.left   = defs[0];
	if(margins.right  == null) margins.right  = defs[1];
	if(margins.top    == null) margins.top    = defs[2];
	if(margins.bottom == null) margins.bottom = defs[3];
	if(margins.header == null) margins.header = defs[4];
	if(margins.footer == null) margins.footer = defs[5];
}

function get_cell_style(styles/*:Array<any>*/, cell/*:Cell*/, opts) {
	var z = opts.revssf[cell.z != null ? cell.z : "General"];
	var i = 0x3c, len = styles.length;
	if(z == null && opts.ssf) {
		for(; i < 0x188; ++i) if(opts.ssf[i] == null) {
			SSF__load(cell.z, i);
			// $FlowIgnore
			opts.ssf[i] = cell.z;
			opts.revssf[cell.z] = z = i;
			break;
		}
	}
	for(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;
	styles[len] = {
		numFmtId:z,
		fontId:0,
		fillId:0,
		borderId:0,
		xfId:0,
		applyNumberFormat:1
	};
	return len;
}

function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles, date1904) {
	try {
		if(opts.cellNF) p.z = table_fmt[fmtid];
	} catch(e) { if(opts.WTF) throw e; }
	if(p.t === 'z' && !opts.cellStyles) return;
	if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
	if((!opts || opts.cellText !== false) && p.t !== 'z') try {
		if(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || "General", fmtid);
		if(p.t === 'e') p.w = p.w || BErr[p.v];
		else if(fmtid === 0) {
			if(p.t === 'n') {
				if((p.v|0) === p.v) p.w = p.v.toString(10);
				else p.w = SSF_general_num(p.v);
			}
			else if(p.t === 'd') {
				var dd = datenum(p.v, !!date1904);
				if((dd|0) === dd) p.w = dd.toString(10);
				else p.w = SSF_general_num(dd);
			}
			else if(p.v === undefined) return "";
			else p.w = SSF_general(p.v,_ssfopts);
		}
		else if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v, !!date1904),_ssfopts);
		else p.w = SSF_format(fmtid,p.v,_ssfopts);
	} catch(e) { if(opts.WTF) throw e; }
	if(!opts.cellStyles) return;
	if(fillid != null) try {
		p.s = styles.Fills[fillid];
		if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {
			p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);
			if(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;
		}
		if (p.s.bgColor && p.s.bgColor.theme) {
			p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);
			if(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;
		}
	} catch(e) { if(opts.WTF && styles.Fills) throw e; }
}

function check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {
	if(ws && ws['!ref']) {
		var range = safe_decode_range(ws['!ref']);
		if(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error("Bad range (" + i + "): " + ws['!ref']);
	}
}
function parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {
	var d = safe_decode_range(s);
	if(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws["!ref"] = encode_range(d);
}
var mergecregex = /<(?:\w+:)?mergeCell ref=["'][A-Z0-9:]+['"]\s*[\/]?>/g;
var hlinkregex = /<(?:\w+:)?hyperlink [^<>]*>/mg;
var dimregex = /"(\w*:\w*)"/;
var colregex = /<(?:\w+:)?col\b[^<>]*[\/]?>/g;
var afregex = /<(?:\w+:)?autoFilter[^>]*/g;
var marginregex= /<(?:\w+:)?pageMargins[^<>]*\/>/g;
var sheetprregex = /<(?:\w+:)?sheetPr\b[^<>]*?\/>/;

/* 18.3 Worksheets */
function parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {
	if(!data) return data;
	if(!rels) rels = {'!id':{}};
	if(DENSE != null && opts.dense == null) opts.dense = DENSE;

	/* 18.3.1.99 worksheet CT_Worksheet */
	var s = ({}/*:any*/); if(opts.dense) s["!data"] = [];
	var refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);

	var data1 = "", data2 = "";
	var mtch/*:?any*/ = str_match_xml_ns(data, "sheetData");
	if(mtch) {
		data1 = data.slice(0, mtch.index);
		data2 = data.slice(mtch.index + mtch[0].length);
	} else data1 = data2 = data;

	/* 18.3.1.82 sheetPr CT_SheetPr */
	var sheetPr = data1.match(sheetprregex);
	if(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);
	else if((sheetPr = str_match_xml_ns(data1, "sheetPr"))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||"", s, wb, idx, styles, themes);

	/* 18.3.1.35 dimension CT_SheetDimension */
	var ridx = (data1.match(/<(?:\w*:)?dimension/)||{index:-1}).index;
	if(ridx > 0) {
		var ref = data1.slice(ridx,ridx+50).match(dimregex);
		if(ref && !(opts && opts.nodim)) parse_ws_xml_dim(s, ref[1]);
	}

	/* 18.3.1.88 sheetViews CT_SheetViews */
	var svs = str_match_xml_ns(data1, "sheetViews");
	if(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);

	/* 18.3.1.17 cols CT_Cols */
	var columns/*:Array<ColInfo>*/ = [];
	if(opts.cellStyles) {
		/* 18.3.1.13 col CT_Col */
		var cols = data1.match(colregex);
		if(cols) parse_ws_xml_cols(columns, cols);
	}

	/* 18.3.1.80 sheetData CT_SheetData ? */
	if(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles, wb);

	/* 18.3.1.2  autoFilter CT_AutoFilter */
	var afilter = data2.match(afregex);
	if(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);

	/* 18.3.1.55 mergeCells CT_MergeCells */
	var merges/*:Array<Range>*/ = [];
	var _merge = data2.match(mergecregex);
	if(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)
		merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf("=")+2));

	/* 18.3.1.48 hyperlinks CT_Hyperlinks */
	var hlink = data2.match(hlinkregex);
	if(hlink) parse_ws_xml_hlinks(s, hlink, rels);

	/* 18.3.1.62 pageMargins CT_PageMargins */
	var margins = data2.match(marginregex);
	if(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));

	/* legacyDrawing */
	var m;
	if((m = data2.match(/legacyDrawing r:id="(.*?)"/))) s['!legrel'] = m[1];

	if(opts && opts.nodim) refguess.s.c = refguess.s.r = 0;
	if(!s["!ref"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s["!ref"] = encode_range(refguess);
	if(opts.sheetRows > 0 && s["!ref"]) {
		var tmpref = safe_decode_range(s["!ref"]);
		if(opts.sheetRows <= +tmpref.e.r) {
			tmpref.e.r = opts.sheetRows - 1;
			if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
			if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
			if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
			if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
			s["!fullref"] = s["!ref"];
			s["!ref"] = encode_range(tmpref);
		}
	}
	if(columns.length > 0) s["!cols"] = columns;
	if(merges.length > 0) s["!merges"] = merges;
	if(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];
	return s;
}

function write_ws_xml_merges(merges/*:Array<Range>*/)/*:string*/ {
	if(merges.length === 0) return "";
	var o = '<mergeCells count="' + merges.length + '">';
	for(var i = 0; i != merges.length; ++i) o += '<mergeCell ref="' + encode_range(merges[i]) + '"/>';
	return o + '</mergeCells>';
}

/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */
function parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {
	var data = parsexmltag(sheetPr);
	if(!wb.Sheets[idx]) wb.Sheets[idx] = {};
	if(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));
}
function parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {
	parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(">")), s, wb, idx);
}
function write_ws_xml_sheetpr(ws, wb, idx, opts, o) {
	var needed = false;
	var props = {}, payload = null;
	if(opts.bookType !== 'xlsx' && wb.vbaraw) {
		var cname = wb.SheetNames[idx];
		try { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}
		needed = true;
		props.codeName = utf8write(escapexml(cname));
	}

	if(ws && ws["!outline"]) {
		var outlineprops = {summaryBelow:1, summaryRight:1};
		if(ws["!outline"].above) outlineprops.summaryBelow = 0;
		if(ws["!outline"].left) outlineprops.summaryRight = 0;
		payload = (payload||"") + writextag('outlinePr', null, outlineprops);
	}

	if(!needed && !payload) return;
	o[o.length] = (writextag('sheetPr', payload, props));
}

/* 18.3.1.85 sheetProtection CT_SheetProtection */
var sheetprot_deffalse = ["objects", "scenarios", "selectLockedCells", "selectUnlockedCells"];
var sheetprot_deftrue = [
	"formatColumns", "formatRows", "formatCells",
	"insertColumns", "insertRows", "insertHyperlinks",
	"deleteColumns", "deleteRows",
	"sort", "autoFilter", "pivotTables"
];
function write_ws_xml_protection(sp)/*:string*/ {
	// algorithmName, hashValue, saltValue, spinCount
	var o = ({sheet:1}/*:any*/);
	sheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = "1"; });
	sheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = "0"; });
	/* TODO: algorithm */
	if(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();
	return writextag('sheetProtection', null, o);
}

function parse_ws_xml_hlinks(s, data/*:Array<string>*/, rels) {
	var dense = s["!data"] != null;
	for(var i = 0; i != data.length; ++i) {
		var val = parsexmltag(utf8read(data[i]), true);
		if(!val.ref) return;
		var rel = ((rels || {})['!id']||[])[val.id];
		if(rel) {
			val.Target = rel.Target;
			if(val.location) val.Target += "#"+unescapexml(val.location);
		} else {
			val.Target = "#" + unescapexml(val.location);
			rel = {Target: val.Target, TargetMode: 'Internal'};
		}
		val.Rel = rel;
		if(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }
		var rng = safe_decode_range(val.ref);
		for(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {
			var addr = encode_col(C) + encode_row(R);
			if(dense) {
				if(!s["!data"][R]) s["!data"][R] = [];
				if(!s["!data"][R][C]) s["!data"][R][C] = {t:"z",v:undefined};
				s["!data"][R][C].l = val;
			} else {
				if(!s[addr]) s[addr] = {t:"z",v:undefined};
				s[addr].l = val;
			}
		}
	}
}

function parse_ws_xml_margins(margin) {
	var o = {};
	["left", "right", "top", "bottom", "header", "footer"].forEach(function(k) {
		if(margin[k]) o[k] = parseFloat(margin[k]);
	});
	return o;
}
function write_ws_xml_margins(margin)/*:string*/ {
	default_margins(margin);
	return writextag('pageMargins', null, margin);
}

function parse_ws_xml_cols(columns, cols) {
	var seencol = false;
	for(var coli = 0; coli != cols.length; ++coli) {
		var coll = parsexmltag(cols[coli], true);
		if(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);
		var colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;
		if(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);
		delete coll.min; delete coll.max; coll.width = +coll.width;
		if(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }
		process_col(coll);
		while(colm <= colM) columns[colm++] = dup(coll);
	}
}
function write_ws_xml_cols(ws, cols)/*:string*/ {
	var o = ["<cols>"], col;
	for(var i = 0; i != cols.length; ++i) {
		if(!(col = cols[i])) continue;
		o[o.length] = (writextag('col', null, col_obj_w(i, col)));
	}
	o[o.length] = "</cols>";
	return o.join("");
}

function parse_ws_xml_autofilter(data/*:string*/) {
	var o = { ref: (data.match(/ref="([^"]*)"/)||[])[1]};
	return o;
}
function write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {
	var ref = typeof data.ref == "string" ? data.ref : encode_range(data.ref);
	if(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);
	if(!wb.Workbook.Names) wb.Workbook.Names = [];
	var names/*: Array<any> */ = wb.Workbook.Names;
	var range = decode_range(ref);
	if(range.s.r == range.e.r) { range.e.r = decode_range(ws["!ref"]).e.r; ref = encode_range(range); }
	for(var i = 0; i < names.length; ++i) {
		var name = names[i];
		if(name.Name != '_xlnm._FilterDatabase') continue;
		if(name.Sheet != idx) continue;
		name.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + "!" + fix_range(ref); break;
	}
	if(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref  });
	return writextag("autoFilter", null, {ref:ref});
}

/* 18.3.1.88 sheetViews CT_SheetViews */
/* 18.3.1.87 sheetView CT_SheetView */
var sviewregex = /<(?:\w:)?sheetView(?:[^<>a-z][^<>]*)?\/?>/g;
function parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {
	if(!wb.Views) wb.Views = [{}];
	(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {
		var tag = parsexmltag(r);
		// $FlowIgnore
		if(!wb.Views[i]) wb.Views[i] = {};
		// $FlowIgnore
		if(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;
		// $FlowIgnore
		if(tag.rightToLeft && parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;
	});
}
function write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {
	var sview = ({workbookViewId:"0"}/*:any*/);
	// $FlowIgnore
	if((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? "1" : "0";
	return writextag("sheetViews", writextag("sheetView", null, sview), {});
}

function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts, idx, wb, date1904)/*:string*/ {
	if(cell.c) ws['!comments'].push([ref, cell.c]);
	if((cell.v === undefined || cell.t === "z" && !(opts||{}).sheetStubs) && typeof cell.f !== "string" && typeof cell.z == "undefined") return "";
	var vv = "";
	var oldt = cell.t, oldv = cell.v;
	if(cell.t !== "z") switch(cell.t) {
		case 'b': vv = cell.v ? "1" : "0"; break;
		case 'n':
			if(isNaN(cell.v)) { cell.t = "e"; vv = BErr[cell.v = 0x24]; } // #NUM!
			else if(!isFinite(cell.v)) { cell.t = "e"; vv = BErr[cell.v = 0x07]; } // #DIV/0!
			else vv = ''+cell.v; break;
		case 'e': vv = BErr[cell.v]; break;
		case 'd':
			if(opts && opts.cellDates) {
				var _vv = parseDate(cell.v, date1904);
				vv = _vv.toISOString();
				if(_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf("T") + 1).replace("Z","");
			} else {
				cell = dup(cell);
				cell.t = 'n';
				vv = ''+(cell.v = datenum(parseDate(cell.v, date1904), date1904));
			}
			if(typeof cell.z === 'undefined') cell.z = table_fmt[14];
			break;
		default: vv = cell.v; break;
	}
	var v = (cell.t == "z" || cell.v == null)? "" : writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);
	/* TODO: cell style */
	var os = get_cell_style(opts.cellXfs, cell, opts);
	if(os !== 0) o.s = os;
	switch(cell.t) {
		case 'n': break;
		case 'd': o.t = "d"; break;
		case 'b': o.t = "b"; break;
		case 'e': o.t = "e"; break;
		case 'z': break;
		default: if(cell.v == null) { delete cell.t; break; }
			if(cell.v.length > 32767) throw new Error("Text length must not exceed 32767 characters");
			if(opts && opts.bookSST) {
				v = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));
				o.t = "s"; break;
			}
			else o.t = "str"; break;
	}
	if(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }
	if(typeof cell.f == "string" && cell.f) {
		var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:"array", ref:cell.F} : null;
		v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : "");
	}
	if(cell.l) {
		cell.l.display = escapexml(vv);
		ws['!links'].push([ref, cell.l]);
	}
	if(cell.D) o.cm = 1;
	return writextag('c', v, o);
}

var parse_ws_xml_data = /*#__PURE__*/(function() {
	var cellregex = /<(?:\w+:)?c[ \/>]/, rowregex = /<\/(?:\w+:)?row>/;
	var rregex = /r=["']([^"']*)["']/;
	var refregex = /ref=["']([^"']*)["']/;

return function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles, wb) {
	var ri = 0, x = "", cells/*:Array<string>*/ = [], cref/*:?Array<string>*/ = [], idx=0, i=0, cc=0, d="", p/*:any*/;
	var tag, tagr = 0, tagc = 0;
	var sstr, ftag;
	var fmtid = 0, fillid = 0;
	var do_format = Array.isArray(styles.CellXf), cf;
	var arrayf/*:Array<[Range, string]>*/ = [];
	var sharedf = [];
	var dense = s["!data"] != null;
	var rows/*:Array<RowInfo>*/ = [], rowobj = {}, rowrite = false;
	var sheetStubs = !!opts.sheetStubs;
	var date1904 = !!((wb||{}).WBProps||{}).date1904;
	for(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {
		x = marr[mt].trim();
		var xlen = x.length;
		if(xlen === 0) continue;

		/* 18.3.1.73 row CT_Row */
		var rstarti = 0;
		outa: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {
			case ">" /*62*/:
				if(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != "/") { ++ri; break outa; }
				if(opts && opts.cellStyles) {
					// TODO: avoid duplication
					tag = parsexmltag(x.slice(rstarti,ri), true);
					tagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;
					if(opts.sheetRows && opts.sheetRows < tagr) continue;
					rowobj = {}; rowrite = false;
					if(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }
					if(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }
					if(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }
					if(rowrite) rows[tagr-1] = rowobj;
				}
				break;
			case "<" /*60*/: rstarti = ri; break;
		}
		if(rstarti >= ri) break;
		tag = parsexmltag(x.slice(rstarti,ri), true);
		tagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;
		if(opts.sheetRows && opts.sheetRows < tagr) continue;
		if(!opts.nodim) {
			if(guess.s.r > tagr - 1) guess.s.r = tagr - 1;
			if(guess.e.r < tagr - 1) guess.e.r = tagr - 1;
		}

		if(opts && opts.cellStyles) {
			rowobj = {}; rowrite = false;
			if(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }
			if(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }
			if(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }
			if(rowrite) rows[tagr-1] = rowobj;
		}

		/* 18.3.1.4 c CT_Cell */
		cells = x.slice(ri).split(cellregex);
		for(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != "<") break;
		cells = cells.slice(rslice);
		for(ri = 0; ri != cells.length; ++ri) {
			x = cells[ri].trim();
			if(x.length === 0) continue;
			cref = x.match(rregex); idx = ri; i=0; cc=0;
			x = "<c " + (x.slice(0,1)=="<"?">":"") + x;
			if(cref != null && cref.length === 2) {
				idx = 0; d=cref[1];
				for(i=0; i != d.length; ++i) {
					if((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;
					idx = 26*idx + cc;
				}
				--idx;
				tagc = idx;
			} else ++tagc;
			for(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;
			tag = parsexmltag(x.slice(0,i), true);
			if(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});
			d = x.slice(i);
			p = ({t:""}/*:any*/);

			if((cref=str_match_xml_ns(d, "v"))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);
			if(opts.cellFormula) {
				if((cref=str_match_xml_ns(d, "f"))!= null /*:: && cref != null*/) {
					if(cref[1] == "") {
						if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t="shared"') > -1) {
							// TODO: parse formula
							ftag = parsexmltag(cref[0]);
							if(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);
						}
					} else {
						/* TODO: match against XLSXFutureFunctions */
						p.f=unescapexml(utf8read(cref[1]), true);
						if(!opts.xlfn) p.f = _xlfn(p.f);
						if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t="array"') > -1) {
							p.F = (d.match(refregex)||[])[1];
							if(p.F.indexOf(":") > -1) arrayf.push([safe_decode_range(p.F), p.F]);
						} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t="shared"') > -1) {
							// TODO: parse formula
							ftag = parsexmltag(cref[0]);
							var ___f = unescapexml(utf8read(cref[1]));
							if(!opts.xlfn) ___f = _xlfn(___f);
							sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];
						}
					}
				} else if((cref=d.match(/<f[^<>]*\/>/))) {
					ftag = parsexmltag(cref[0]);
					if(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);
				}
				/* TODO: factor out contains logic */
				var _tag = decode_cell(tag.r);
				for(i = 0; i < arrayf.length; ++i)
					if(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)
						if(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)
							p.F = arrayf[i][1];
			}

			if(tag.t == null && p.v === undefined) {
				if(p.f || p.F) {
					p.v = 0; p.t = "n";
				} else if(!sheetStubs) continue;
				else p.t = "z";
			}
			else p.t = tag.t || "n";
			if(guess.s.c > tagc) guess.s.c = tagc;
			if(guess.e.c < tagc) guess.e.c = tagc;
			/* 18.18.11 t ST_CellType */
			switch(p.t) {
				case 'n':
					if(p.v == "" || p.v == null) {
						if(!sheetStubs) continue;
						p.t = 'z';
					} else p.v = parseFloat(p.v);
					break;
				case 's':
					if(typeof p.v == 'undefined') {
						if(!sheetStubs) continue;
						p.t = 'z';
					} else {
						sstr = strs[parseInt(p.v, 10)];
						p.v = sstr.t;
						p.r = sstr.r;
						if(opts.cellHTML) p.h = sstr.h;
					}
					break;
				case 'str':
					p.t = "s";
					p.v = (p.v!=null) ? unescapexml(utf8read(p.v), true) : '';
					if(opts.cellHTML) p.h = escapehtml(p.v);
					break;
				case 'inlineStr':
					cref = str_match_xml_ns(d, "is");
					p.t = 's';
					if(cref != null && (sstr = parse_si(cref[1]))) {
						p.v = sstr.t;
						if(opts.cellHTML) p.h = sstr.h;
					} else p.v = "";
					break;
				case 'b': p.v = parsexmlbool(p.v); break;
				case 'd':
					if(opts.cellDates) p.v = parseDate(p.v, date1904);
					else { p.v = datenum(parseDate(p.v, date1904), date1904); p.t = 'n'; }
					break;
				/* error string in .w, number in .v */
				case 'e':
					if(!opts || opts.cellText !== false) p.w = p.v;
					p.v = RBErr[p.v]; break;
			}
			/* formatting */
			fmtid = fillid = 0;
			cf = null;
			if(do_format && tag.s !== undefined) {
				cf = styles.CellXf[tag.s];
				if(cf != null) {
					if(cf.numFmtId != null) fmtid = cf.numFmtId;
					if(opts.cellStyles) {
						if(cf.fillId != null) fillid = cf.fillId;
					}
				}
			}
			safe_format(p, fmtid, fillid, opts, themes, styles, date1904);
			if(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.v = numdate(p.v + (date1904 ? 1462 : 0)); p.t = typeof p.v == "number" ? 'n' : 'd'; }
			if(tag.cm && opts.xlmeta) {
				var cm = (opts.xlmeta.Cell||[])[+tag.cm-1];
				if(cm && cm.type == 'XLDAPR') p.D = true;
			}
			var _r;
			if(opts.nodim) {
				_r = decode_cell(tag.r);
				if(guess.s.r > _r.r) guess.s.r = _r.r;
				if(guess.e.r < _r.r) guess.e.r = _r.r;
			}
			if(dense) {
				_r = decode_cell(tag.r);
				if(!s["!data"][_r.r]) s["!data"][_r.r] = [];
				s["!data"][_r.r][_r.c] = p;
			} else s[tag.r] = p;
		}
	}
	if(rows.length > 0) s['!rows'] = rows;
}; })();

function write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {
	var o/*:Array<string>*/ = [], r/*:Array<string>*/ = [], range = safe_decode_range(ws['!ref']), cell="", ref, rr = "", cols/*:Array<string>*/ = [], R=0, C=0, rows = ws['!rows'];
	var dense = ws["!data"] != null, data = dense ? ws["!data"] : [];
	var params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;
	var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
	for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
	for(R = range.s.r; R <= range.e.r; ++R) {
		r = [];
		rr = encode_row(R);
		var data_R = dense ? data[R] : [];
		for(C = range.s.c; C <= range.e.c; ++C) {
			ref = cols[C] + rr;
			var _cell = dense ? data_R[C] : ws[ref];
			if(_cell === undefined) continue;
			if((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb, date1904)) != null) r.push(cell);
		}
		if(r.length > 0 || (rows && rows[R])) {
			params = ({r:rr}/*:any*/);
			if(rows && rows[R]) {
				row = rows[R];
				if(row.hidden) params.hidden = 1;
				height = -1;
				if(row.hpx) height = px2pt(row.hpx);
				else if(row.hpt) height = row.hpt;
				if(height > -1) { params.ht = height; params.customHeight = 1; }
				if(row.level) { params.outlineLevel = row.level; }
			}
			o[o.length] = (writextag('row', r.join(""), params));
		}
	}
	if(rows) for(; R < rows.length; ++R) {
		if(rows && rows[R]) {
			params = ({r:R+1}/*:any*/);
			row = rows[R];
			if(row.hidden) params.hidden = 1;
			height = -1;
			if (row.hpx) height = px2pt(row.hpx);
			else if (row.hpt) height = row.hpt;
			if (height > -1) { params.ht = height; params.customHeight = 1; }
			if (row.level) { params.outlineLevel = row.level; }
			o[o.length] = (writextag('row', "", params));
		}
	}
	return o.join("");
}

function write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
	var o = [XML_HEADER, writextag('worksheet', null, {
		'xmlns': XMLNS_main[0],
		'xmlns:r': XMLNS.r
	})];
	var s = wb.SheetNames[idx], sidx = 0, rdata = "";
	var ws = wb.Sheets[s];
	if(ws == null) ws = {};
	var ref = ws['!ref'] || 'A1';
	var range = safe_decode_range(ref);
	if(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {
		if(opts.WTF) throw new Error("Range " + ref + " exceeds format limit A1:XFD1048576");
		range.e.c = Math.min(range.e.c, 0x3FFF);
		range.e.r = Math.min(range.e.c, 0xFFFFF);
		ref = encode_range(range);
	}
	if(!rels) rels = {};
	ws['!comments'] = [];
	var _drawing = [];

	write_ws_xml_sheetpr(ws, wb, idx, opts, o);

	o[o.length] = (writextag('dimension', null, {'ref': ref}));

	o[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);

	/* TODO: store in WB, process styles */
	if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {
		defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',
		baseColWidth:opts.sheetFormat.baseColWidth||'10',
		outlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'
	}));

	if(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));

	o[sidx = o.length] = '<sheetData/>';
	ws['!links'] = [];
	if(ws['!ref'] != null) {
		rdata = write_ws_xml_data(ws, opts, idx, wb, rels);
		if(rdata.length > 0) o[o.length] = (rdata);
	}
	if(o.length>sidx+1) { o[o.length] = ('</sheetData>'); o[sidx]=o[sidx].replace("/>",">"); }

	/* sheetCalcPr */

	if(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);

	/* protectedRanges */
	/* scenarios */

	if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);

	/* sortState */
	/* dataConsolidate */
	/* customSheetViews */

	if(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));

	/* phoneticPr */
	/* conditionalFormatting */
	/* dataValidations */

	var relc = -1, rel, rId = -1;
	if(/*::(*/ws['!links']/*::||[])*/.length > 0) {
		o[o.length] = "<hyperlinks>";
		/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {
			if(!l[1].Target) return;
			rel = ({"ref":l[0]}/*:any*/);
			if(l[1].Target.charAt(0) != "#") {
				rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#[\s\S]*$/, ""), RELS.HLINK);
				rel["r:id"] = "rId"+rId;
			}
			if((relc = l[1].Target.indexOf("#")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));
			if(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);
			rel.display = l[1].display;
			o[o.length] = writextag("hyperlink",null,rel);
		});
		o[o.length] = "</hyperlinks>";
	}
	delete ws['!links'];

	/* printOptions */

	if(ws['!margins'] != null) o[o.length] =  write_ws_xml_margins(ws['!margins']);

	/* pageSetup */
	/* headerFooter */
	/* rowBreaks */
	/* colBreaks */
	/* customProperties */
	/* cellWatches */

	if(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag("ignoredErrors", writextag("ignoredError", null, {numberStoredAsText:1, sqref:ref}));

	/* smartTags */

	if(_drawing.length > 0) {
		rId = add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
		o[o.length] = writextag("drawing", null, {"r:id":"rId" + rId});
		ws['!drawing'] = _drawing;
	}

	if(ws['!comments'].length > 0) {
		rId = add_rels(rels, -1, "../drawings/vmlDrawing" + (idx+1) + ".vml", RELS.VML);
		o[o.length] = writextag("legacyDrawing", null, {"r:id":"rId" + rId});
		ws['!legacy'] = rId;
	}

	/* legacyDrawingHF */
	/* picture */
	/* oleObjects */
	/* controls */
	/* webPublishItems */
	/* tableParts */
	/* extLst */

	if(o.length>1) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace("/>",">"); }
	return o.join("");
}

/* [MS-XLSB] 2.4.726 BrtRowHdr */
function parse_BrtRowHdr(data, length) {
	var z = ({}/*:any*/);
	var tgt = data.l + length;
	z.r = data.read_shift(4);
	data.l += 4; // TODO: ixfe
	var miyRw = data.read_shift(2);
	data.l += 1; // TODO: top/bot padding
	var flags = data.read_shift(1);
	data.l = tgt;
	if(flags & 0x07) z.level = flags & 0x07;
	if(flags & 0x10) z.hidden = true;
	if(flags & 0x20) z.hpt = miyRw / 20;
	return z;
}
function write_BrtRowHdr(R/*:number*/, range, ws) {
	var o = new_buf(17+8*16);
	var row = (ws['!rows']||[])[R]||{};
	o.write_shift(4, R);

	o.write_shift(4, 0); /* TODO: ixfe */

	var miyRw = 0x0140;
	if(row.hpx) miyRw = px2pt(row.hpx) * 20;
	else if(row.hpt) miyRw = row.hpt * 20;
	o.write_shift(2, miyRw);

	o.write_shift(1, 0); /* top/bot padding */

	var flags = 0x0;
	if(row.level) flags |= row.level;
	if(row.hidden) flags |= 0x10;
	if(row.hpx || row.hpt) flags |= 0x20;
	o.write_shift(1, flags);

	o.write_shift(1, 0); /* phonetic guide */

	/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */
	var ncolspan = 0, lcs = o.l;
	o.l += 4;

	var caddr = {r:R, c:0};
	var dense = ws["!data"] != null;
	for(var i = 0; i < 16; ++i) {
		if((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;
		var first = -1, last = -1;
		for(var j = (i<<10); j < ((i+1)<<10); ++j) {
			caddr.c = j;
			var cell = dense ? (ws["!data"][caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];
			if(cell) { if(first < 0) first = j; last = j; }
		}
		if(first < 0) continue;
		++ncolspan;
		o.write_shift(4, first);
		o.write_shift(4, last);
	}

	var l = o.l;
	o.l = lcs;
	o.write_shift(4, ncolspan);
	o.l = l;

	return o.length > o.l ? o.slice(0, o.l) : o;
}
function write_row_header(ba, ws, range, R) {
	var o = write_BrtRowHdr(R, range, ws);
	if((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);
}

/* [MS-XLSB] 2.4.820 BrtWsDim */
var parse_BrtWsDim = parse_UncheckedRfX;
var write_BrtWsDim = write_UncheckedRfX;

/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */
function parse_BrtWsFmtInfo(/*::data, length*/) {
}
//function write_BrtWsFmtInfo(ws, o) { }

/* [MS-XLSB] 2.4.823 BrtWsProp */
function parse_BrtWsProp(data, length) {
	var z = {};
	var f = data[data.l]; ++data.l;
	z.above = !(f & 0x40);
	z.left  = !(f & 0x80);
	/* TODO: pull flags */
	data.l += 18;
	z.name = parse_XLSBCodeName(data, length - 19);
	return z;
}
function write_BrtWsProp(str, outl, o) {
	if(o == null) o = new_buf(84+4*str.length);
	var f = 0xC0;
	if(outl) {
		if(outl.above) f &= ~0x40;
		if(outl.left)  f &= ~0x80;
	}
	o.write_shift(1, f);
	for(var i = 1; i < 3; ++i) o.write_shift(1,0);
	write_BrtColor({auto:1}, o);
	o.write_shift(-4,-1);
	o.write_shift(-4,-1);
	write_XLSBCodeName(str, o);
	return o.slice(0, o.l);
}

/* [MS-XLSB] 2.4.306 BrtCellBlank */
function parse_BrtCellBlank(data) {
	var cell = parse_XLSBCell(data);
	return [cell];
}
function write_BrtCellBlank(cell, ncell, o) {
	if(o == null) o = new_buf(8);
	return write_XLSBCell(ncell, o);
}
function parse_BrtShortBlank(data) {
	var cell = parse_XLSBShortCell(data);
	return [cell];
}
function write_BrtShortBlank(cell, ncell, o) {
	if(o == null) o = new_buf(4);
	return write_XLSBShortCell(ncell, o);
}

/* [MS-XLSB] 2.4.307 BrtCellBool */
function parse_BrtCellBool(data) {
	var cell = parse_XLSBCell(data);
	var fBool = data.read_shift(1);
	return [cell, fBool, 'b'];
}
function write_BrtCellBool(cell, ncell, o) {
	if(o == null) o = new_buf(9);
	write_XLSBCell(ncell, o);
	o.write_shift(1, cell.v ? 1 : 0);
	return o;
}
function parse_BrtShortBool(data) {
	var cell = parse_XLSBShortCell(data);
	var fBool = data.read_shift(1);
	return [cell, fBool, 'b'];
}
function write_BrtShortBool(cell, ncell, o) {
	if(o == null) o = new_buf(5);
	write_XLSBShortCell(ncell, o);
	o.write_shift(1, cell.v ? 1 : 0);
	return o;
}

/* [MS-XLSB] 2.4.308 BrtCellError */
function parse_BrtCellError(data) {
	var cell = parse_XLSBCell(data);
	var bError = data.read_shift(1);
	return [cell, bError, 'e'];
}
function write_BrtCellError(cell, ncell, o) {
	if(o == null) o = new_buf(9);
	write_XLSBCell(ncell, o);
	o.write_shift(1, cell.v);
	return o;
}
function parse_BrtShortError(data) {
	var cell = parse_XLSBShortCell(data);
	var bError = data.read_shift(1);
	return [cell, bError, 'e'];
}
function write_BrtShortError(cell, ncell, o) {
	if(o == null) o = new_buf(8);
	write_XLSBShortCell(ncell, o);
	o.write_shift(1, cell.v);
	o.write_shift(2, 0);
	o.write_shift(1, 0);
	return o;
}


/* [MS-XLSB] 2.4.311 BrtCellIsst */
function parse_BrtCellIsst(data) {
	var cell = parse_XLSBCell(data);
	var isst = data.read_shift(4);
	return [cell, isst, 's'];
}
function write_BrtCellIsst(cell, ncell, o) {
	if(o == null) o = new_buf(12);
	write_XLSBCell(ncell, o);
	o.write_shift(4, ncell.v);
	return o;
}
function parse_BrtShortIsst(data) {
	var cell = parse_XLSBShortCell(data);
	var isst = data.read_shift(4);
	return [cell, isst, 's'];
}
function write_BrtShortIsst(cell, ncell, o) {
	if(o == null) o = new_buf(8);
	write_XLSBShortCell(ncell, o);
	o.write_shift(4, ncell.v);
	return o;
}

/* [MS-XLSB] 2.4.313 BrtCellReal */
function parse_BrtCellReal(data) {
	var cell = parse_XLSBCell(data);
	var value = parse_Xnum(data);
	return [cell, value, 'n'];
}
function write_BrtCellReal(cell, ncell, o) {
	if(o == null) o = new_buf(16);
	write_XLSBCell(ncell, o);
	write_Xnum(cell.v, o);
	return o;
}
function parse_BrtShortReal(data) {
	var cell = parse_XLSBShortCell(data);
	var value = parse_Xnum(data);
	return [cell, value, 'n'];
}
function write_BrtShortReal(cell, ncell, o) {
	if(o == null) o = new_buf(12);
	write_XLSBShortCell(ncell, o);
	write_Xnum(cell.v, o);
	return o;
}

/* [MS-XLSB] 2.4.314 BrtCellRk */
function parse_BrtCellRk(data) {
	var cell = parse_XLSBCell(data);
	var value = parse_RkNumber(data);
	return [cell, value, 'n'];
}
function write_BrtCellRk(cell, ncell, o) {
	if(o == null) o = new_buf(12);
	write_XLSBCell(ncell, o);
	write_RkNumber(cell.v, o);
	return o;
}
function parse_BrtShortRk(data) {
	var cell = parse_XLSBShortCell(data);
	var value = parse_RkNumber(data);
	return [cell, value, 'n'];
}
function write_BrtShortRk(cell, ncell, o) {
	if(o == null) o = new_buf(8);
	write_XLSBShortCell(ncell, o);
	write_RkNumber(cell.v, o);
	return o;
}

/* [MS-XLSB] 2.4.323 BrtCellRString */
function parse_BrtCellRString(data) {
	var cell = parse_XLSBCell(data);
	var value = parse_RichStr(data);
	return [cell, value, 'is'];
}

/* [MS-XLSB] 2.4.317 BrtCellSt */
function parse_BrtCellSt(data) {
	var cell = parse_XLSBCell(data);
	var value = parse_XLWideString(data);
	return [cell, value, 'str'];
}
function write_BrtCellSt(cell, ncell, o) {
	var data = cell.v == null ? "" : String(cell.v);
	if(o == null) o = new_buf(12 + 4 * cell.v.length);
	write_XLSBCell(ncell, o);
	write_XLWideString(data, o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}
function parse_BrtShortSt(data) {
	var cell = parse_XLSBShortCell(data);
	var value = parse_XLWideString(data);
	return [cell, value, 'str'];
}
function write_BrtShortSt(cell, ncell, o) {
	var data = cell.v == null ? "" : String(cell.v);
	if(o == null) o = new_buf(8 + 4 * data.length);
	write_XLSBShortCell(ncell, o);
	write_XLWideString(data, o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.653 BrtFmlaBool */
function parse_BrtFmlaBool(data, length, opts) {
	var end = data.l + length;
	var cell = parse_XLSBCell(data);
	cell.r = opts['!row'];
	var value = data.read_shift(1);
	var o = [cell, value, 'b'];
	if(opts.cellFormula) {
		data.l += 2;
		var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
		o[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */
	}
	else data.l = end;
	return o;
}

/* [MS-XLSB] 2.4.654 BrtFmlaError */
function parse_BrtFmlaError(data, length, opts) {
	var end = data.l + length;
	var cell = parse_XLSBCell(data);
	cell.r = opts['!row'];
	var value = data.read_shift(1);
	var o = [cell, value, 'e'];
	if(opts.cellFormula) {
		data.l += 2;
		var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
		o[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */
	}
	else data.l = end;
	return o;
}

/* [MS-XLSB] 2.4.655 BrtFmlaNum */
function parse_BrtFmlaNum(data, length, opts) {
	var end = data.l + length;
	var cell = parse_XLSBCell(data);
	cell.r = opts['!row'];
	var value = parse_Xnum(data);
	var o = [cell, value, 'n'];
	if(opts.cellFormula) {
		data.l += 2;
		var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
		o[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */
	}
	else data.l = end;
	return o;
}

/* [MS-XLSB] 2.4.656 BrtFmlaString */
function parse_BrtFmlaString(data, length, opts) {
	var end = data.l + length;
	var cell = parse_XLSBCell(data);
	cell.r = opts['!row'];
	var value = parse_XLWideString(data);
	var o = [cell, value, 'str'];
	if(opts.cellFormula) {
		data.l += 2;
		var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
		o[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */
	}
	else data.l = end;
	return o;
}

/* [MS-XLSB] 2.4.682 BrtMergeCell */
var parse_BrtMergeCell = parse_UncheckedRfX;
var write_BrtMergeCell = write_UncheckedRfX;
/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */
function write_BrtBeginMergeCells(cnt, o) {
	if(o == null) o = new_buf(4);
	o.write_shift(4, cnt);
	return o;
}

/* [MS-XLSB] 2.4.662 BrtHLink */
function parse_BrtHLink(data, length/*::, opts*/) {
	var end = data.l + length;
	var rfx = parse_UncheckedRfX(data, 16);
	var relId = parse_XLNullableWideString(data);
	var loc = parse_XLWideString(data);
	var tooltip = parse_XLWideString(data);
	var display = parse_XLWideString(data);
	data.l = end;
	var o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);
	if(tooltip) o.Tooltip = tooltip;
	return o;
}
function write_BrtHLink(l, rId) {
	var o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || "").length));
	write_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);
	write_RelID("rId" + rId, o);
	var locidx = l[1].Target.indexOf("#");
	var loc = locidx == -1 ? "" : l[1].Target.slice(locidx+1);
	write_XLWideString(loc || "", o);
	write_XLWideString(l[1].Tooltip || "", o);
	write_XLWideString("", o);
	return o.slice(0, o.l);
}

/* [MS-XLSB] 2.4.692 BrtPane */
function parse_BrtPane(/*data, length, opts*/) {
}

/* [MS-XLSB] 2.4.6 BrtArrFmla */
function parse_BrtArrFmla(data, length, opts) {
	var end = data.l + length;
	var rfx = parse_RfX(data, 16);
	var fAlwaysCalc = data.read_shift(1);
	var o = [rfx]; o[2] = fAlwaysCalc;
	if(opts.cellFormula) {
		var formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);
		o[1] = formula;
	} else data.l = end;
	return o;
}

/* [MS-XLSB] 2.4.750 BrtShrFmla */
function parse_BrtShrFmla(data, length, opts) {
	var end = data.l + length;
	var rfx = parse_UncheckedRfX(data, 16);
	var o = [rfx];
	if(opts.cellFormula) {
		var formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);
		o[1] = formula;
		data.l = end;
	} else data.l = end;
	return o;
}

/* [MS-XLSB] 2.4.323 BrtColInfo */
/* TODO: once XLS ColInfo is set, combine the functions */
function write_BrtColInfo(C/*:number*/, col, o) {
	if(o == null) o = new_buf(18);
	var p = col_obj_w(C, col);
	o.write_shift(-4, C);
	o.write_shift(-4, C);
	o.write_shift(4, (p.width || 10) * 256);
	o.write_shift(4, 0/*ixfe*/); // style
	var flags = 0;
	if(col.hidden) flags |= 0x01;
	if(typeof p.width == 'number') flags |= 0x02;
	if(col.level) flags |= (col.level << 8);
	o.write_shift(2, flags); // bit flag
	return o;
}

/* [MS-XLSB] 2.4.678 BrtMargins */
var BrtMarginKeys = ["left","right","top","bottom","header","footer"];
function parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {
	var margins = ({}/*:any*/);
	BrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });
	return margins;
}
function write_BrtMargins(margins/*:Margins*/, o) {
	if(o == null) o = new_buf(6*8);
	default_margins(margins);
	BrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });
	return o;
}

/* [MS-XLSB] 2.4.299 BrtBeginWsView */
function parse_BrtBeginWsView(data/*::, length, opts*/) {
	var f = data.read_shift(2);
	data.l += 28;
	return { RTL: f & 0x20 };
}
function write_BrtBeginWsView(ws, Workbook, o) {
	if(o == null) o = new_buf(30);
	var f = 0x39c;
	if((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;
	o.write_shift(2, f); // bit flag
	o.write_shift(4, 0);
	o.write_shift(4, 0); // view first row
	o.write_shift(4, 0); // view first col
	o.write_shift(1, 0); // gridline color ICV
	o.write_shift(1, 0);
	o.write_shift(2, 0);
	o.write_shift(2, 100); // zoom scale
	o.write_shift(2, 0);
	o.write_shift(2, 0);
	o.write_shift(2, 0);
	o.write_shift(4, 0); // workbook view id
	return o;
}

/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */
function write_BrtCellIgnoreEC(ref) {
	var o = new_buf(24);
	o.write_shift(4, 4);
	o.write_shift(4, 1);
	write_UncheckedRfX(ref, o);
	return o;
}

/* [MS-XLSB] 2.4.748 BrtSheetProtection */
function write_BrtSheetProtection(sp, o) {
	if(o == null) o = new_buf(16*4+2);
	o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);
	o.write_shift(4, 1); // this record should not be written if no protection
	[
		["objects",             false], // fObjects
		["scenarios",           false], // fScenarios
		["formatCells",          true], // fFormatCells
		["formatColumns",        true], // fFormatColumns
		["formatRows",           true], // fFormatRows
		["insertColumns",        true], // fInsertColumns
		["insertRows",           true], // fInsertRows
		["insertHyperlinks",     true], // fInsertHyperlinks
		["deleteColumns",        true], // fDeleteColumns
		["deleteRows",           true], // fDeleteRows
		["selectLockedCells",   false], // fSelLockedCells
		["sort",                 true], // fSort
		["autoFilter",           true], // fAutoFilter
		["pivotTables",          true], // fPivotTables
		["selectUnlockedCells", false]  // fSelUnlockedCells
	].forEach(function(n) {
		/*:: if(o == null) throw "unreachable"; */
		if(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);
		else      o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);
	});
	return o;
}

function parse_BrtDVal(/*data, length, opts*/) {
}
function parse_BrtDVal14(/*data, length, opts*/) {
}
/* [MS-XLSB] 2.1.7.61 Worksheet */
function parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {
	if(!data) return data;
	var opts = _opts || {};
	if(!rels) rels = {'!id':{}};
	if(DENSE != null && opts.dense == null) opts.dense = DENSE;
	var s/*:Worksheet*/ = ({}); if(opts.dense) s["!data"] = [];

	var ref;
	var refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };

	var state/*:Array<string>*/ = [];
	var pass = false, end = false;
	var row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;
	var merges/*:Array<Range>*/ = [];
	opts.biff = 12;
	opts['!row'] = 0;

	var ai = 0, af = false;

	var arrayf/*:Array<[Range, string]>*/ = [];
	var sharedf = {};
	var supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);
	supbooks.sharedf = sharedf;
	supbooks.arrayf = arrayf;
	supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });
	if(!opts.supbooks) {
		opts.supbooks = supbooks;
		if(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];
	}

	var colinfo/*:Array<ColInfo>*/ = [], rowinfo/*:Array<RowInfo>*/ = [];
	var seencol = false;

	XLSBRecordEnum[0x0010] = { n:"BrtShortReal", f:parse_BrtShortReal };

	var cm, vm;
	var date1904 = 1462 * +!!((wb||{}).WBProps||{}).date1904;

	recordhopper(data, function ws_parse(val, RR, RT) {
		if(end) return;
		switch(RT) {
			case 0x0094: /* 'BrtWsDim' */
				ref = val; break;
			case 0x0000: /* 'BrtRowHdr' */
				row = val;
				if(opts.sheetRows && opts.sheetRows <= row.r) end=true;
				rr = encode_row(R = row.r);
				opts['!row'] = row.r;
				if(val.hidden || val.hpt || val.level != null) {
					if(val.hpt) val.hpx = pt2px(val.hpt);
					rowinfo[val.r] = val;
				}
				break;

			case 0x0002: /* 'BrtCellRk' */
			case 0x0003: /* 'BrtCellError' */
			case 0x0004: /* 'BrtCellBool' */
			case 0x0005: /* 'BrtCellReal' */
			case 0x0006: /* 'BrtCellSt' */
			case 0x0007: /* 'BrtCellIsst' */
			case 0x0008: /* 'BrtFmlaString' */
			case 0x0009: /* 'BrtFmlaNum' */
			case 0x000A: /* 'BrtFmlaBool' */
			case 0x000B: /* 'BrtFmlaError' */
			case 0x000D: /* 'BrtShortRk' */
			case 0x000E: /* 'BrtShortError' */
			case 0x000F: /* 'BrtShortBool' */
			case 0x0010: /* 'BrtShortReal' */
			case 0x0011: /* 'BrtShortSt' */
			case 0x0012: /* 'BrtShortIsst' */
			case 0x003E: /* 'BrtCellRString' */
				p = ({t:val[2]}/*:any*/);
				switch(val[2]) {
					case 'n': p.v = val[1]; break;
					case 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;
					case 'b': p.v = val[1] ? true : false; break;
					case 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;
					case 'str': p.t = 's'; p.v = val[1]; break;
					case 'is': p.t = 's'; p.v = val[1].t; break;
				}
				if((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles, date1904>0);
				C = val[0].c == -1 ? C + 1 : val[0].c;
				if(opts.dense) { if(!s["!data"][R]) s["!data"][R] = []; s["!data"][R][C] = p; }
				else s[encode_col(C) + rr] = p;
				if(opts.cellFormula) {
					af = false;
					for(ai = 0; ai < arrayf.length; ++ai) {
						var aii = arrayf[ai];
						if(row.r >= aii[0].s.r && row.r <= aii[0].e.r)
							if(C >= aii[0].s.c && C <= aii[0].e.c) {
								p.F = encode_range(aii[0]); af = true;
							}
					}
					if(!af && val.length > 3) p.f = val[3];
				}

				if(refguess.s.r > row.r) refguess.s.r = row.r;
				if(refguess.s.c > C) refguess.s.c = C;
				if(refguess.e.r < row.r) refguess.e.r = row.r;
				if(refguess.e.c < C) refguess.e.c = C;
				if(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {
					var _d = SSF_parse_date_code(p.v + date1904); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
				}
				if(cm) {
					if(cm.type == 'XLDAPR') p.D = true;
					cm = void 0;
				}
				if(vm) vm = void 0;
				break;

			case 0x0001: /* 'BrtCellBlank' */
			case 0x000C: /* 'BrtShortBlank' */
				if(!opts.sheetStubs || pass) break;
				p = ({t:'z',v:void 0}/*:any*/);
				C = val[0].c == -1 ? C + 1 : val[0].c;
				if(opts.dense) { if(!s["!data"][R]) s["!data"][R] = []; s["!data"][R][C] = p; }
				else s[encode_col(C) + rr] = p;
				if(refguess.s.r > row.r) refguess.s.r = row.r;
				if(refguess.s.c > C) refguess.s.c = C;
				if(refguess.e.r < row.r) refguess.e.r = row.r;
				if(refguess.e.c < C) refguess.e.c = C;
				if(cm) {
					if(cm.type == 'XLDAPR') p.D = true;
					cm = void 0;
				}
				if(vm) vm = void 0;
				break;

			case 0x00B0: /* 'BrtMergeCell' */
				merges.push(val); break;

			case 0x0031: { /* 'BrtCellMeta' */
				cm = ((opts.xlmeta||{}).Cell||[])[val-1];
			} break;

			case 0x01EE: /* 'BrtHLink' */
				var rel = rels['!id'][val.relId];
				if(rel) {
					val.Target = rel.Target;
					if(val.loc) val.Target += "#"+val.loc;
					val.Rel = rel;
				} else if(val.relId == '') {
					val.Target = "#" + val.loc;
				}
				for(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {
					if(opts.dense) {
						if(!s["!data"][R]) s["!data"][R] = [];
						if(!s["!data"][R][C]) s["!data"][R][C] = {t:'z',v:undefined};
						s["!data"][R][C].l = val;
					} else {
						addr = encode_col(C) + encode_row(R);
						if(!s[addr]) s[addr] = {t:'z',v:undefined};
						s[addr].l = val;
					}
				}
				break;

			case 0x01AA: /* 'BrtArrFmla' */
				if(!opts.cellFormula) break;
				arrayf.push(val);
				cell = ((opts.dense ? s["!data"][R][C] : s[encode_col(C) + rr])/*:any*/);
				cell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);
				cell.F = encode_range(val[0]);
				break;
			case 0x01AB: /* 'BrtShrFmla' */
				if(!opts.cellFormula) break;
				sharedf[encode_cell(val[0].s)] = val[1];
				cell = (opts.dense ? s["!data"][R][C] : s[encode_col(C) + rr]);
				cell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);
				break;

			/* identical to 'ColInfo' in XLS */
			case 0x003C: /* 'BrtColInfo' */
				if(!opts.cellStyles) break;
				while(val.e >= val.s) {
					colinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };
					if(!seencol) { seencol = true; find_mdw_colw(val.w/256); }
					process_col(colinfo[val.e+1]);
				}
				break;

			case 0x0227: /* 'BrtLegacyDrawing' */
				if(val) s["!legrel"] = val;
				break;

			case 0x00A1: /* 'BrtBeginAFilter' */
				s['!autofilter'] = { ref:encode_range(val) };
				break;

			case 0x01DC: /* 'BrtMargins' */
				s['!margins'] = val;
				break;

			case 0x0093: /* 'BrtWsProp' */
				if(!wb.Sheets[idx]) wb.Sheets[idx] = {};
				if(val.name) wb.Sheets[idx].CodeName = val.name;
				if(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };
				break;

			case 0x0089: /* 'BrtBeginWsView' */
				if(!wb.Views) wb.Views = [{}];
				if(!wb.Views[0]) wb.Views[0] = {};
				if(val.RTL) wb.Views[0].RTL = true;
				break;

			case 0x01E5: /* 'BrtWsFmtInfo' */
				break;

			case 0x0040: /* 'BrtDVal' */
			case 0x041D: /* 'BrtDVal14' */
				break;

			case 0x0097: /* 'BrtPane' */
				break;
			case 0x0098: /* 'BrtSel' */
			case 0x00AF: /* 'BrtAFilterDateGroupItem' */
			case 0x0284: /* 'BrtActiveX' */
			case 0x0271: /* 'BrtBigName' */
			case 0x0232: /* 'BrtBkHim' */
			case 0x018C: /* 'BrtBrk' */
			case 0x0458: /* 'BrtCFIcon' */
			case 0x047A: /* 'BrtCFRuleExt' */
			case 0x01D7: /* 'BrtCFVO' */
			case 0x041A: /* 'BrtCFVO14' */
			case 0x0289: /* 'BrtCellIgnoreEC' */
			case 0x0451: /* 'BrtCellIgnoreEC14' */
			case 0x024D: /* 'BrtCellSmartTagProperty' */
			case 0x025F: /* 'BrtCellWatch' */
			case 0x0234: /* 'BrtColor' */
			case 0x041F: /* 'BrtColor14' */
			case 0x00A8: /* 'BrtColorFilter' */
			case 0x00AE: /* 'BrtCustomFilter' */
			case 0x049C: /* 'BrtCustomFilter14' */
			case 0x01F3: /* 'BrtDRef' */
			case 0x01FB: /* 'BrtDXF' */
			case 0x0226: /* 'BrtDrawing' */
			case 0x00AB: /* 'BrtDynamicFilter' */
			case 0x00A7: /* 'BrtFilter' */
			case 0x0499: /* 'BrtFilter14' */
			case 0x00A9: /* 'BrtIconFilter' */
			case 0x049D: /* 'BrtIconFilter14' */
			case 0x0228: /* 'BrtLegacyDrawingHF' */
			case 0x0295: /* 'BrtListPart' */
			case 0x027F: /* 'BrtOleObject' */
			case 0x01DE: /* 'BrtPageSetup' */
			case 0x0219: /* 'BrtPhoneticInfo' */
			case 0x01DD: /* 'BrtPrintOptions' */
			case 0x0218: /* 'BrtRangeProtection' */
			case 0x044F: /* 'BrtRangeProtection14' */
			case 0x02A8: /* 'BrtRangeProtectionIso' */
			case 0x0450: /* 'BrtRangeProtectionIso14' */
			case 0x0400: /* 'BrtRwDescent' */
			case 0x0297: /* 'BrtSheetCalcProp' */
			case 0x0217: /* 'BrtSheetProtection' */
			case 0x02A6: /* 'BrtSheetProtectionIso' */
			case 0x01F8: /* 'BrtSlc' */
			case 0x0413: /* 'BrtSparkline' */
			case 0x01AC: /* 'BrtTable' */
			case 0x00AA: /* 'BrtTop10Filter' */
			case 0x0C00: /* 'BrtUid' */
			case 0x0032: /* 'BrtValueMeta' */
			case 0x0816: /* 'BrtWebExtension' */
			case 0x0415: /* 'BrtWsFmtInfoEx14' */
				break;

			case 0x0023: /* 'BrtFRTBegin' */
				pass = true; break;
			case 0x0024: /* 'BrtFRTEnd' */
				pass = false; break;
			case 0x0025: /* 'BrtACBegin' */
				state.push(RT); pass = true; break;
			case 0x0026: /* 'BrtACEnd' */
				state.pop(); pass = false; break;

			default:
				if(RR.T){/* empty */}
				else if(!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	}, opts);

	delete opts.supbooks;
	delete opts['!row'];

	if(!s["!ref"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s["!ref"] = encode_range(ref || refguess);
	if(opts.sheetRows && s["!ref"]) {
		var tmpref = safe_decode_range(s["!ref"]);
		if(opts.sheetRows <= +tmpref.e.r) {
			tmpref.e.r = opts.sheetRows - 1;
			if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
			if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
			if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
			if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
			s["!fullref"] = s["!ref"];
			s["!ref"] = encode_range(tmpref);
		}
	}
	if(merges.length > 0) s["!merges"] = merges;
	if(colinfo.length > 0) s["!cols"] = colinfo;
	if(rowinfo.length > 0) s["!rows"] = rowinfo;
	if(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];
	return s;
}

/* TODO: something useful -- this is a stub */
function write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/, date1904/*:boolean*/)/*:boolean*/ {
	var o/*:any*/ = ({r:R, c:C}/*:any*/);
	if(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);
	if(cell.v === undefined) return false;
	var vv = "";
	switch(cell.t) {
		case 'b': vv = cell.v ? "1" : "0"; break;
		case 'd': // no BrtCellDate :(
			cell = dup(cell);
			cell.z = cell.z || table_fmt[14];
			cell.v = datenum(parseDate(cell.v, date1904), date1904); cell.t = 'n';
			break;
		/* falls through */
		case 'n': case 'e': vv = ''+cell.v; break;
		default: vv = cell.v; break;
	}
	/* TODO: cell style */
	o.s = get_cell_style(opts.cellXfs, cell, opts);
	if(cell.l) ws['!links'].push([encode_cell(o), cell.l]);
	switch(cell.t) {
		case 's': case 'str':
			if(opts.bookSST) {
				vv = get_sst_id(opts.Strings, (cell.v == null ? "" : String(cell.v)/*:any*/), opts.revStrings);
				o.t = "s"; o.v = vv;
				if(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));
				else write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));
			} else {
				o.t = "str";
				if(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));
				else write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));
			}
			return true;
		case 'n':
			/* TODO: determine threshold for Real vs RK */
			if(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {
				if(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));
				else write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));
			} else if(!isFinite(cell.v)) {
				o.t = "e";
				if(isNaN(cell.v)) {
					if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x24}, o)); // #NUM!
					else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x24}, o)); // #NUM!
				} else {
					if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x07}, o)); // #DIV/0!
					else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x07}, o)); // #DIV/0!
				}
			} else {
				if(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));
				else write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));
			} return true;
		case 'b':
			o.t = "b";
			if(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));
			else write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));
			return true;
		case 'e':
			o.t = "e";
			if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));
			else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));
			return true;
	}
	if(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));
	else write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));
	return true;
}

function write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {
	var range = safe_decode_range(ws['!ref'] || "A1"), rr = "", cols/*:Array<string>*/ = [];
	var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
	write_record(ba, 0x0091 /* BrtBeginSheetData */);
	var dense = ws["!data"] != null, row = dense ? ws["!data"][range.s.r] : [];
	var cap = range.e.r;
	if(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);
	for(var R = range.s.r; R <= cap; ++R) {
		rr = encode_row(R);
		if(dense) row = ws["!data"][R];
		/* [ACCELLTABLE] */
		/* BrtRowHdr */
		write_row_header(ba, ws, range, R);
		if(dense && !row) continue;
		var last_seen = false;
		if(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {
			/* *16384CELL */
			if(R === range.s.r) cols[C] = encode_col(C);
			var cell = dense ? row[C] : ws[cols[C] + rr];
			if(!cell) { last_seen = false; continue; }
			/* write cell */
			last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904);
		}
	}
	write_record(ba, 0x0092 /* BrtEndSheetData */);
}

function write_MERGECELLS(ba, ws/*:Worksheet*/) {
	if(!ws || !ws['!merges']) return;
	write_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));
	ws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });
	write_record(ba, 0x00B2 /* BrtEndMergeCells */);
}

function write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {
	if(!ws || !ws['!cols']) return;
	write_record(ba, 0x0186 /* BrtBeginColInfos */);
	ws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });
	write_record(ba, 0x0187 /* BrtEndColInfos */);
}

function write_IGNOREECS(ba, ws/*:Worksheet*/) {
	if(!ws || !ws['!ref']) return;
	write_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);
	write_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));
	write_record(ba, 0x028A /* BrtEndCellIgnoreECs */);
}

function write_HLINKS(ba, ws/*:Worksheet*/, rels) {
	/* *BrtHLink */
	ws['!links'].forEach(function(l) {
		if(!l[1].Target) return;
		var rId = add_rels(rels, -1, l[1].Target.replace(/#[\s\S]*$/, ""), RELS.HLINK);
		write_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));
	});
	delete ws['!links'];
}
function write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {
	/* [BrtLegacyDrawing] */
	if(ws['!comments'].length > 0) {
		var rId = add_rels(rels, -1, "../drawings/vmlDrawing" + (idx+1) + ".vml", RELS.VML);
		write_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID("rId" + rId));
		ws['!legacy'] = rId;
	}
}

function write_AUTOFILTER(ba, ws, wb, idx) {
	if(!ws['!autofilter']) return;
	var data = ws['!autofilter'];
	var ref = typeof data.ref === "string" ? data.ref : encode_range(data.ref);

	/* Update FilterDatabase defined name for the worksheet */
	if(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);
	if(!wb.Workbook.Names) wb.Workbook.Names = [];
	var names/*: Array<any> */ = wb.Workbook.Names;
	var range = decode_range(ref);
	if(range.s.r == range.e.r) { range.e.r = decode_range(ws["!ref"]).e.r; ref = encode_range(range); }
	for(var i = 0; i < names.length; ++i) {
		var name = names[i];
		if(name.Name != '_xlnm._FilterDatabase') continue;
		if(name.Sheet != idx) continue;
		name.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + "!" + fix_range(ref); break;
	}
	if(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: formula_quote_sheet_name(wb.SheetNames[idx]) + "!" + fix_range(ref)  });

	write_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));
	/* *FILTERCOLUMN */
	/* [SORTSTATE] */
	/* BrtEndAFilter */
	write_record(ba, 0x00A2 /* BrtEndAFilter */);
}

function write_WSVIEWS2(ba, ws, Workbook) {
	write_record(ba, 0x0085 /* BrtBeginWsViews */);
	{ /* 1*WSVIEW2 */
		/* [ACUID] */
		write_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));
		/* [BrtPane] */
		/* *4BrtSel */
		/* *4SXSELECT */
		/* *FRT */
		write_record(ba, 0x008A /* BrtEndWsView */);
	}
	/* *FRT */
	write_record(ba, 0x0086 /* BrtEndWsViews */);
}

function write_WSFMTINFO(/*::ba, ws*/) {
	/* [ACWSFMTINFO] */
	// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));
}

function write_SHEETPROTECT(ba, ws) {
	if(!ws['!protect']) return;
	/* [BrtSheetProtectionIso] */
	write_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));
}

function write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {
	var ba = buf_array();
	var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
	var c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}
	var r = safe_decode_range(ws['!ref'] || "A1");
	if(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {
		if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:XFD1048576");
		r.e.c = Math.min(r.e.c, 0x3FFF);
		r.e.r = Math.min(r.e.c, 0xFFFFF);
	}
	ws['!links'] = [];
	/* passed back to write_zip and removed there */
	ws['!comments'] = [];
	write_record(ba, 0x0081 /* BrtBeginSheet */);
	if(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));
	write_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));
	write_WSVIEWS2(ba, ws, wb.Workbook);
	write_WSFMTINFO(ba, ws);
	write_COLINFOS(ba, ws, idx, opts, wb);
	write_CELLTABLE(ba, ws, idx, opts, wb);
	/* [BrtSheetCalcProp] */
	write_SHEETPROTECT(ba, ws);
	/* *([BrtRangeProtectionIso] BrtRangeProtection) */
	/* [SCENMAN] */
	write_AUTOFILTER(ba, ws, wb, idx);
	/* [SORTSTATE] */
	/* [DCON] */
	/* [USERSHVIEWS] */
	write_MERGECELLS(ba, ws);
	/* [BrtPhoneticInfo] */
	/* *CONDITIONALFORMATTING */
	/* [DVALS] */
	write_HLINKS(ba, ws, rels);
	/* [BrtPrintOptions] */
	if(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));
	/* [BrtPageSetup] */
	/* [HEADERFOOTER] */
	/* [RWBRK] */
	/* [COLBRK] */
	/* *BrtBigName */
	/* [CELLWATCHES] */
	if(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);
	/* [SMARTTAGS] */
	/* [BrtDrawing] */
	write_LEGACYDRAWING(ba, ws, idx, rels);
	/* [BrtLegacyDrawingHF] */
	/* [BrtBkHim] */
	/* [OLEOBJECTS] */
	/* [ACTIVEXCONTROLS] */
	/* [WEBPUBITEMS] */
	/* [LISTPARTS] */
	/* FRTWORKSHEET */
	write_record(ba, 0x0082 /* BrtEndSheet */);
	return ba.end();
}
function parse_Cache(data/*:string*/)/*:[Array<number|string>, string, ?string]*/ {
	var col/*:Array<number|string>*/ = [];
	var num = data.match(/^<c:numCache>/);
	var f;

	/* 21.2.2.150 pt CT_NumVal */
	(data.match(/<c:pt idx="(\d*)"[^<>\/]*><c:v>([^<])<\/c:v><\/c:pt>/mg)||[]).forEach(function(pt) {
		var q = pt.match(/<c:pt idx="(\d*)"[^<>\/]*><c:v>([^<]*)<\/c:v><\/c:pt>/);
		if(!q) return;
		col[+q[1]] = num ? +q[2] : q[2];
	});

	/* 21.2.2.71 formatCode CT_Xstring */
	var nf = unescapexml((str_match_xml(data, "c:formatCode") || ["","General"])[1]);

	(str_match_ng(data, "<c:f>", "</c:f>")||[]).forEach(function(F) { f = F.replace(/<[^<>]*>/g,""); });

	return [col, nf, f];
}

/* 21.2 DrawingML - Charts */
function parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {
	var cs/*:Worksheet*/ = ((csheet || {"!type":"chart"})/*:any*/);
	if(!data) return csheet;
	/* 21.2.2.27 chart CT_Chart */

	var C = 0, R = 0, col = "A";
	var refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };

	/* 21.2.2.120 numCache CT_NumData */
	(str_match_ng(data, "<c:numCache>", "</c:numCache>")||[]).forEach(function(nc) {
		var cache = parse_Cache(nc);
		refguess.s.r = refguess.s.c = 0;
		refguess.e.c = C;
		col = encode_col(C);
		cache[0].forEach(function(n,i) {
			if(cs["!data"]) {
				if(!cs["!data"][i]) cs["!data"][i] = [];
				cs["!data"][i][C] = {t:'n', v:n, z:cache[1] };
			} else cs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };
			R = i;
		});
		if(refguess.e.r < R) refguess.e.r = R;
		++C;
	});
	if(C > 0) cs["!ref"] = encode_range(refguess);
	return cs;
}
/* 18.3 Worksheets also covers Chartsheets */
function parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {
	if(!data) return data;
	/* 18.3.1.12 chartsheet CT_ChartSheet */
	if(!rels) rels = {'!id':{}};
	var s = ({'!type':"chart", '!drawel':null, '!rel':""}/*:any*/);
	var m;

	/* 18.3.1.83 sheetPr CT_ChartsheetPr */
	var sheetPr = data.match(sheetprregex);
	if(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);

	/* 18.3.1.36 drawing CT_Drawing */
	if((m = data.match(/drawing r:id="(.*?)"/))) s['!rel'] = m[1];

	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
	return s;
}
//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
//	var o = [XML_HEADER, writextag('chartsheet', null, {
//		'xmlns': XMLNS_main[0],
//		'xmlns:r': XMLNS.r
//	})];
//	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
//	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
//	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
//	return o.join("");
//}

/* [MS-XLSB] 2.4.331 BrtCsProp */
function parse_BrtCsProp(data, length/*:number*/) {
	data.l += 10;
	var name = parse_XLWideString(data, length - 10);
	return { name: name };
}

/* [MS-XLSB] 2.1.7.7 Chart Sheet */
function parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {
	if(!data) return data;
	if(!rels) rels = {'!id':{}};
	var s = {'!type':"chart", '!drawel':null, '!rel':""};
	var state/*:Array<string>*/ = [];
	var pass = false;
	recordhopper(data, function cs_parse(val, R, RT) {
		switch(RT) {

			case 0x0226: /* 'BrtDrawing' */
				s['!rel'] = val; break;

			case 0x028B: /* 'BrtCsProp' */
				if(!wb.Sheets[idx]) wb.Sheets[idx] = {};
				if(val.name) wb.Sheets[idx].CodeName = val.name;
				break;

			case 0x0232: /* 'BrtBkHim' */
			case 0x028C: /* 'BrtCsPageSetup' */
			case 0x029D: /* 'BrtCsProtection' */
			case 0x02A7: /* 'BrtCsProtectionIso' */
			case 0x0227: /* 'BrtLegacyDrawing' */
			case 0x0228: /* 'BrtLegacyDrawingHF' */
			case 0x01DC: /* 'BrtMargins' */
			case 0x0C00: /* 'BrtUid' */
				break;

			case 0x0023: /* 'BrtFRTBegin' */
				pass = true; break;
			case 0x0024: /* 'BrtFRTEnd' */
				pass = false; break;
			case 0x0025: /* 'BrtACBegin' */
				state.push(RT); break;
			case 0x0026: /* 'BrtACEnd' */
				state.pop(); break;

			default:
				if(R.T > 0) state.push(RT);
				else if(R.T < 0) state.pop();
				else if(!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	}, opts);

	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
	return s;
}
//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
//	var ba = buf_array();
//	write_record(ba, 0x0081 /* BrtBeginSheet */);
//	/* [BrtCsProp] */
//	/* CSVIEWS */
//	/* [[BrtCsProtectionIso] BrtCsProtection] */
//	/* [USERCSVIEWS] */
//	/* [BrtMargins] */
//	/* [BrtCsPageSetup] */
//	/* [HEADERFOOTER] */
//	/* BrtDrawing */
//	/* [BrtLegacyDrawing] */
//	/* [BrtLegacyDrawingHF] */
//	/* [BrtBkHim] */
//	/* [WEBPUBITEMS] */
//	/* FRTCHARTSHEET */
//	write_record(ba, 0x0082 /* BrtEndSheet */);
//	return ba.end();
//}
/* 18.2.28 (CT_WorkbookProtection) Defaults */
var WBPropsDef = [
	['allowRefreshQuery',           false, "bool"],
	['autoCompressPictures',        true,  "bool"],
	['backupFile',                  false, "bool"],
	['checkCompatibility',          false, "bool"],
	['CodeName',                    ''],
	['date1904',                    false, "bool"],
	['defaultThemeVersion',         0,      "int"],
	['filterPrivacy',               false, "bool"],
	['hidePivotFieldList',          false, "bool"],
	['promptedSolutions',           false, "bool"],
	['publishItems',                false, "bool"],
	['refreshAllConnections',       false, "bool"],
	['saveExternalLinkValues',      true,  "bool"],
	['showBorderUnselectedTables',  true,  "bool"],
	['showInkAnnotation',           true,  "bool"],
	['showObjects',                 'all'],
	['showPivotChartFilter',        false, "bool"],
	['updateLinks', 'userSet']
];

/* 18.2.30 (CT_BookView) Defaults */
var WBViewDef = [
	['activeTab',                   0,      "int"],
	['autoFilterDateGrouping',      true,  "bool"],
	['firstSheet',                  0,      "int"],
	['minimized',                   false, "bool"],
	['showHorizontalScroll',        true,  "bool"],
	['showSheetTabs',               true,  "bool"],
	['showVerticalScroll',          true,  "bool"],
	['tabRatio',                    600,    "int"],
	['visibility',                  'visible']
	//window{Height,Width}, {x,y}Window
];

/* 18.2.19 (CT_Sheet) Defaults */
var SheetDef = [
	//['state', 'visible']
];

/* 18.2.2  (CT_CalcPr) Defaults */
var CalcPrDef = [
	['calcCompleted', 'true'],
	['calcMode', 'auto'],
	['calcOnSave', 'true'],
	['concurrentCalc', 'true'],
	['fullCalcOnLoad', 'false'],
	['fullPrecision', 'true'],
	['iterate', 'false'],
	['iterateCount', '100'],
	['iterateDelta', '0.001'],
	['refMode', 'A1']
];

/* 18.2.3 (CT_CustomWorkbookView) Defaults */
/*var CustomWBViewDef = [
	['autoUpdate', 'false'],
	['changesSavedWin', 'false'],
	['includeHiddenRowCol', 'true'],
	['includePrintSettings', 'true'],
	['maximized', 'false'],
	['minimized', 'false'],
	['onlySync', 'false'],
	['personalView', 'false'],
	['showComments', 'commIndicator'],
	['showFormulaBar', 'true'],
	['showHorizontalScroll', 'true'],
	['showObjects', 'all'],
	['showSheetTabs', 'true'],
	['showStatusbar', 'true'],
	['showVerticalScroll', 'true'],
	['tabRatio', '600'],
	['xWindow', '0'],
	['yWindow', '0']
];*/

function push_defaults_array(target, defaults) {
	for(var j = 0; j != target.length; ++j) { var w = target[j];
		for(var i=0; i != defaults.length; ++i) { var z = defaults[i];
			if(w[z[0]] == null) w[z[0]] = z[1];
			else switch(z[2]) {
			case "bool": if(typeof w[z[0]] == "string") w[z[0]] = parsexmlbool(w[z[0]]); break;
			case "int": if(typeof w[z[0]] == "string") w[z[0]] = parseInt(w[z[0]], 10); break;
			}
		}
	}
}
function push_defaults(target, defaults) {
	for(var i = 0; i != defaults.length; ++i) { var z = defaults[i];
		if(target[z[0]] == null) target[z[0]] = z[1];
		else switch(z[2]) {
			case "bool": if(typeof target[z[0]] == "string") target[z[0]] = parsexmlbool(target[z[0]]); break;
			case "int": if(typeof target[z[0]] == "string") target[z[0]] = parseInt(target[z[0]], 10); break;
		}
	}
}

function parse_wb_defaults(wb) {
	push_defaults(wb.WBProps, WBPropsDef);
	push_defaults(wb.CalcPr, CalcPrDef);

	push_defaults_array(wb.WBView, WBViewDef);
	push_defaults_array(wb.Sheets, SheetDef);

	_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);
}

function safe1904(wb/*:Workbook*/)/*:string*/ {
	/* TODO: store date1904 somewhere else */
	if(!wb.Workbook) return "false";
	if(!wb.Workbook.WBProps) return "false";
	return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false";
}

var badchars = /*#__PURE__*/":][*?\/\\".split("");
function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {
	try {
		if(n == "") throw new Error("Sheet name cannot be blank");
		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars");
		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')");
		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'");
		badchars.forEach(function(c) {
			if(n.indexOf(c) == -1) return;
			throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
		});
	} catch(e) { if(safe) return false; throw e; }
	return true;
}
function check_wb_names(N, S, codes) {
	N.forEach(function(n,i) {
		check_ws_name(n);
		for(var j = 0; j < i; ++j) if(n == N[j]) throw new Error("Duplicate Sheet Name: " + n);
		if(codes) {
			var cn = (S && S[i] && S[i].CodeName) || n;
			if(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error("Bad Code Name: Worksheet" + cn);
		}
	});
}
function check_wb(wb) {
	if(!wb || !wb.SheetNames || !wb.Sheets) throw new Error("Invalid Workbook");
	if(!wb.SheetNames.length) throw new Error("Workbook is empty");
	var Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];
	check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);
	for(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);
	wb.SheetNames.forEach(function(n, i) {
		var ws = wb.Sheets[n];
		if(!ws || !ws["!autofilter"]) return;
		var DN;
		if(!wb.Workbook) wb.Workbook = {};
		if(!wb.Workbook.Names) wb.Workbook.Names = [];
		wb.Workbook.Names.forEach(function(dn) { if(dn.Name == "_xlnm._FilterDatabase" && dn.Sheet == i) DN = dn; });
		var nn = formula_quote_sheet_name(n) + "!" + fix_range(ws["!autofilter"].ref);
		if(DN) DN.Ref = nn;
		else wb.Workbook.Names.push({Name: "_xlnm._FilterDatabase", Sheet: i, Ref: nn});
	});
	/* TODO: validate workbook */
}
/* 18.2 Workbook */
var wbnsregex = /<\w+:workbook/;
function parse_wb_xml(data, opts)/*:WorkbookFile*/ {
	if(!data) throw new Error("Could not find file");
	var wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: "" }/*::)*/;
	var pass = false, xmlns = "xmlns";
	var dname = {}, dnstart = 0;
	data.replace(tagregex, function xml_wb(x, idx) {
		var y/*:any*/ = parsexmltag(x);
		switch(strip_ns(y[0])) {
			case '<?xml': break;

			/* 18.2.27 workbook CT_Workbook 1 */
			case '<workbook':
				if(x.match(wbnsregex)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
				wb.xmlns = y[xmlns];
				break;
			case '</workbook>': break;

			/* 18.2.13 fileVersion CT_FileVersion ? */
			case '<fileVersion': delete y[0]; wb.AppVersion = y; break;
			case '<fileVersion/>': case '</fileVersion>': break;

			/* 18.2.12 fileSharing CT_FileSharing ? */
			case '<fileSharing':
				break;
			case '<fileSharing/>': break;

			/* 18.2.28 workbookPr CT_WorkbookPr ? */
			case '<workbookPr':
			case '<workbookPr/>':
				WBPropsDef.forEach(function(w) {
					if(y[w[0]] == null) return;
					switch(w[2]) {
						case "bool": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;
						case "int": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;
						default: wb.WBProps[w[0]] = y[w[0]];
					}
				});
				if(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);
				break;
			case '</workbookPr>': break;

			/* 18.2.29 workbookProtection CT_WorkbookProtection ? */
			case '<workbookProtection':
				break;
			case '<workbookProtection/>': break;

			/* 18.2.1  bookViews CT_BookViews ? */
			case '<bookViews': case '<bookViews>': case '</bookViews>': break;
			/* 18.2.30   workbookView CT_BookView + */
			case '<workbookView': case '<workbookView/>': delete y[0]; wb.WBView.push(y); break;
			case '</workbookView>': break;

			/* 18.2.20 sheets CT_Sheets 1 */
			case '<sheets': case '<sheets>': case '</sheets>': break; // aggregate sheet
			/* 18.2.19   sheet CT_Sheet + */
			case '<sheet':
				switch(y.state) {
					case "hidden": y.Hidden = 1; break;
					case "veryHidden": y.Hidden = 2; break;
					default: y.Hidden = 0;
				}
				delete y.state;
				y.name = unescapexml(utf8read(y.name));
				delete y[0]; wb.Sheets.push(y); break;
			case '</sheet>': break;

			/* 18.2.15 functionGroups CT_FunctionGroups ? */
			case '<functionGroups': case '<functionGroups/>': break;
			/* 18.2.14   functionGroup CT_FunctionGroup + */
			case '<functionGroup': break;

			/* 18.2.9  externalReferences CT_ExternalReferences ? */
			case '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;
			/* 18.2.8    externalReference CT_ExternalReference + */
			case '<externalReference': break;

			/* 18.2.6  definedNames CT_DefinedNames ? */
			case '<definedNames/>': break;
			case '<definedNames>': case '<definedNames': pass=true; break;
			case '</definedNames>': pass=false; break;
			/* 18.2.5    definedName CT_DefinedName + */
			case '<definedName': {
				dname = {};
				dname.Name = utf8read(y.name);
				if(y.comment) dname.Comment = y.comment;
				if(y.localSheetId) dname.Sheet = +y.localSheetId;
				if(parsexmlbool(y.hidden||"0")) dname.Hidden = true;
				dnstart = idx + x.length;
			}	break;
			case '</definedName>': {
				dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));
				wb.Names.push(dname);
			} break;
			case '<definedName/>': break;

			/* 18.2.2  calcPr CT_CalcPr ? */
			case '<calcPr': delete y[0]; wb.CalcPr = y; break;
			case '<calcPr/>': delete y[0]; wb.CalcPr = y; break;
			case '</calcPr>': break;

			/* 18.2.16 oleSize CT_OleSize ? (ref required) */
			case '<oleSize': break;

			/* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */
			case '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;
			/* 18.2.3  customWorkbookView CT_CustomWorkbookView + */
			case '<customWorkbookView': case '</customWorkbookView>': break;

			/* 18.2.18 pivotCaches CT_PivotCaches ? */
			case '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;
			/* 18.2.17 pivotCache CT_PivotCache ? */
			case '<pivotCache': break;

			/* 18.2.21 smartTagPr CT_SmartTagPr ? */
			case '<smartTagPr': case '<smartTagPr/>': break;

			/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */
			case '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;
			/* 18.2.22 smartTagType CT_SmartTagType ? */
			case '<smartTagType': break;

			/* 18.2.24 webPublishing CT_WebPublishing ? */
			case '<webPublishing': case '<webPublishing/>': break;

			/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */
			case '<fileRecoveryPr': case '<fileRecoveryPr/>': break;

			/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */
			case '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;
			/* 18.2.25 webPublishObject CT_WebPublishObject ? */
			case '<webPublishObject': break;

			/* 18.2.10 extLst CT_ExtensionList ? */
			case '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;
			/* 18.2.7  ext CT_Extension + */
			case '<ext': pass=true; break; //TODO: check with versions of excel
			case '</ext>': pass=false; break;

			/* Others */
			case '<ArchID': break;
			case '<AlternateContent':
			case '<AlternateContent>': pass=true; break;
			case '</AlternateContent>': pass=false; break;

			/* TODO */
			case '<revisionPtr': break;

			default: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in workbook');
		}
		return x;
	});
	if(XMLNS_main.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns);

	parse_wb_defaults(wb);

	return wb;
}

function write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ {
	var o = [XML_HEADER];
	o[o.length] = writextag('workbook', null, {
		'xmlns': XMLNS_main[0],
		//'xmlns:mx': XMLNS.mx,
		//'xmlns:s': XMLNS_main[0],
		'xmlns:r': XMLNS.r
	});

	var write_names = (wb.Workbook && (wb.Workbook.Names||[]).length > 0);

	/* fileVersion */
	/* fileSharing */

	var workbookPr/*:any*/ = ({codeName:"ThisWorkbook"}/*:any*/);
	if(wb.Workbook && wb.Workbook.WBProps) {
		WBPropsDef.forEach(function(x) {
			/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw "unreachable"; */
			if((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;
			if((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;
			workbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);
		});
		/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw "unreachable"; */
		if(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }
	}
	o[o.length] = (writextag('workbookPr', null, workbookPr));

	/* workbookProtection */

	var sheets = wb.Workbook && wb.Workbook.Sheets || [];
	var i = 0;

	/* bookViews only written if first worksheet is hidden */
	if(sheets && sheets[0] && !!sheets[0].Hidden) {
		o[o.length] = "<bookViews>";
		for(i = 0; i != wb.SheetNames.length; ++i) {
			if(!sheets[i]) break;
			if(!sheets[i].Hidden) break;
		}
		if(i == wb.SheetNames.length) i = 0;
		o[o.length] = '<workbookView firstSheet="' + i + '" activeTab="' + i + '"/>';
		o[o.length] = "</bookViews>";
	}

	o[o.length] = "<sheets>";
	for(i = 0; i != wb.SheetNames.length; ++i) {
		var sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);
		sht.sheetId = ""+(i+1);
		sht["r:id"] = "rId"+(i+1);
		if(sheets[i]) switch(sheets[i].Hidden) {
			case 1: sht.state = "hidden"; break;
			case 2: sht.state = "veryHidden"; break;
		}
		o[o.length] = (writextag('sheet',null,sht));
	}
	o[o.length] = "</sheets>";

	/* functionGroups */
	/* externalReferences */

	if(write_names) {
		o[o.length] = "<definedNames>";
		if(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {
			var d/*:any*/ = {name:n.Name};
			if(n.Comment) d.comment = n.Comment;
			if(n.Sheet != null) d.localSheetId = ""+n.Sheet;
			if(n.Hidden) d.hidden = "1";
			if(!n.Ref) return;
			o[o.length] = writextag('definedName', escapexml(n.Ref), d);
		});
		o[o.length] = "</definedNames>";
	}

	/* calcPr */
	/* oleSize */
	/* customWorkbookViews */
	/* pivotCaches */
	/* smartTagPr */
	/* smartTagTypes */
	/* webPublishing */
	/* fileRecoveryPr */
	/* webPublishObjects */
	/* extLst */

	if(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace("/>",">"); }
	return o.join("");
}
/* [MS-XLSB] 2.4.304 BrtBundleSh */
function parse_BrtBundleSh(data, length/*:number*/) {
	var z = {};
	z.Hidden = data.read_shift(4); //hsState ST_SheetState
	z.iTabID = data.read_shift(4);
	z.strRelID = parse_RelID(data,length-8);
	z.name = parse_XLWideString(data);
	return z;
}
function write_BrtBundleSh(data, o) {
	if(!o) o = new_buf(127);
	o.write_shift(4, data.Hidden);
	o.write_shift(4, data.iTabID);
	write_RelID(data.strRelID, o);
	write_XLWideString(data.name.slice(0,31), o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.815 BrtWbProp */
function parse_BrtWbProp(data, length)/*:WBProps*/ {
	var o/*:WBProps*/ = ({}/*:any*/);
	var flags = data.read_shift(4);
	o.defaultThemeVersion = data.read_shift(4);
	var strName = (length > 8) ? parse_XLWideString(data) : "";
	if(strName.length > 0) o.CodeName = strName;
	o.autoCompressPictures = !!(flags & 0x10000);
	o.backupFile = !!(flags & 0x40);
	o.checkCompatibility = !!(flags & 0x1000);
	o.date1904 = !!(flags & 0x01);
	o.filterPrivacy = !!(flags & 0x08);
	o.hidePivotFieldList = !!(flags & 0x400);
	o.promptedSolutions = !!(flags & 0x10);
	o.publishItems = !!(flags & 0x800);
	o.refreshAllConnections = !!(flags & 0x40000);
	o.saveExternalLinkValues = !!(flags & 0x80);
	o.showBorderUnselectedTables = !!(flags & 0x04);
	o.showInkAnnotation = !!(flags & 0x20);
	o.showObjects = ["all", "placeholders", "none"][(flags >> 13) & 0x03];
	o.showPivotChartFilter = !!(flags & 0x8000);
	o.updateLinks = ["userSet", "never", "always"][(flags >> 8) & 0x03];
	return o;
}
function write_BrtWbProp(data/*:?WBProps*/, o) {
	if(!o) o = new_buf(72);
	var flags = 0;
	if(data) {
		/* TODO: mirror parse_BrtWbProp fields */
		if(data.date1904) flags |= 0x01;
		if(data.filterPrivacy) flags |= 0x08;
	}
	o.write_shift(4, flags);
	o.write_shift(4, 0);
	write_XLSBCodeName(data && data.CodeName || "ThisWorkbook", o);
	return o.slice(0, o.l);
}

function parse_BrtFRTArchID$(data, length) {
	var o = {};
	data.read_shift(4);
	o.ArchID = data.read_shift(4);
	data.l += length - 8;
	return o;
}

/* [MS-XLSB] 2.4.687 BrtName */
function parse_BrtName(data, length, opts) {
	var end = data.l + length;
	var flags = data.read_shift(4);
	data.l += 1; //var chKey = data.read_shift(1);
	var itab = data.read_shift(4);
	var name = parse_XLNameWideString(data);
	var formula;
	var comment = "";
	try {
		formula = parse_XLSBNameParsedFormula(data, 0, opts);
		try {
			comment = parse_XLNullableWideString(data);
		} catch(e){}
	} catch(e) { console.error("Could not parse defined name " + name); }
	if(flags & 0x20) name = "_xlnm." + name;
	//if(0 /* fProc */) {
		// unusedstring1: XLNullableWideString
		// description: XLNullableWideString
		// helpTopic: XLNullableWideString
		// unusedstring2: XLNullableWideString
	//}
	data.l = end;
	var out = ({Name:name, Ptg:formula, Flags: flags}/*:any*/);
	if(itab < 0xFFFFFFF) out.Sheet = itab;
	if(comment) out.Comment = comment;
	return out;
}
function write_BrtName(name, wb) {
	var o = new_buf(9);
	var flags = 0;
	var dname = name.Name;
	if(XLSLblBuiltIn.indexOf(dname) > -1) { flags |= 0x20; dname = dname.slice(6); }
	o.write_shift(4, flags); // flags
	o.write_shift(1, 0); // chKey
	o.write_shift(4, name.Sheet == null ? 0xFFFFFFFF : name.Sheet);

	var arr = [
		o,
		write_XLWideString(dname),
		write_XLSBNameParsedFormula(name.Ref, wb)
	];
	if(name.Comment) arr.push(write_XLNullableWideString(name.Comment));
	else {
		var x = new_buf(4);
		x.write_shift(4, 0xFFFFFFFF);
		arr.push(x);
	}

	// if macro (flags & 0x0F):
	// write_shift(4, 0xFFFFFFFF);
	// write_XLNullableWideString(description)
	// write_XLNullableWideString(helpTopic)
	// write_shift(4, 0xFFFFFFFF);

	return bconcat(arr);
}

/* [MS-XLSB] 2.1.7.61 Workbook */
function parse_wb_bin(data, opts)/*:WorkbookFile*/ {
	var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
	var state/*:Array<string>*/ = [];
	var pass = false;

	if(!opts) opts = {};
	opts.biff = 12;

	var Names = [];
	var supbooks = ([[]]/*:any*/);
	supbooks.SheetNames = [];
	supbooks.XTI = [];

	XLSBRecordEnum[0x0010] = { n:"BrtFRTArchID$", f:parse_BrtFRTArchID$ };

	recordhopper(data, function hopper_wb(val, R, RT) {
		switch(RT) {
			case 0x009C: /* 'BrtBundleSh' */
				supbooks.SheetNames.push(val.name);
				wb.Sheets.push(val); break;

			case 0x0099: /* 'BrtWbProp' */
				wb.WBProps = val; break;

			case 0x0027: /* 'BrtName' */
				if(val.Sheet != null) opts.SID = val.Sheet;
				val.Ref = val.Ptg ? stringify_formula(val.Ptg, null, null, supbooks, opts) : "#REF!";
				delete opts.SID;
				delete val.Ptg;
				Names.push(val);
				break;
			case 0x040C: /* 'BrtNameExt' */ break;

			case 0x0165: /* 'BrtSupSelf' */
			case 0x0166: /* 'BrtSupSame' */
			case 0x0163: /* 'BrtSupBookSrc' */
			case 0x029B: /* 'BrtSupAddin' */
				if(!supbooks[0].length) supbooks[0] = [RT, val];
				else supbooks.push([RT, val]);
				supbooks[supbooks.length - 1].XTI = [];
				break;
			case 0x016A: /* 'BrtExternSheet' */
				if(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }
				supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);
				supbooks.XTI = supbooks.XTI.concat(val);
				break;
			case 0x0169: /* 'BrtPlaceholderName' */
				break;

			case 0x0817: /* 'BrtAbsPath15' */
			case 0x009E: /* 'BrtBookView' */
			case 0x008F: /* 'BrtBeginBundleShs' */
			case 0x0298: /* 'BrtBeginFnGroup' */
			case 0x0161: /* 'BrtBeginExternals' */
				break;

			/* case 'BrtModelTimeGroupingCalcCol' */
			case 0x0C00: /* 'BrtUid' */
			case 0x0C01: /* 'BrtRevisionPtr' */
			case 0x0216: /* 'BrtBookProtection' */
			case 0x02A5: /* 'BrtBookProtectionIso' */
			case 0x009D: /* 'BrtCalcProp' */
			case 0x0262: /* 'BrtCrashRecErr' */
			case 0x0802: /* 'BrtDecoupledPivotCacheID' */
			case 0x009B: /* 'BrtFileRecover' */
			case 0x0224: /* 'BrtFileSharing' */
			case 0x02A4: /* 'BrtFileSharingIso' */
			case 0x0080: /* 'BrtFileVersion' */
			case 0x0299: /* 'BrtFnGroup' */
			case 0x0850: /* 'BrtModelRelationship' */
			case 0x084D: /* 'BrtModelTable' */
			case 0x0225: /* 'BrtOleSize' */
			case 0x0805: /* 'BrtPivotTableRef' */
			case 0x0254: /* 'BrtSmartTagType' */
			case 0x081C: /* 'BrtTableSlicerCacheID' */
			case 0x081B: /* 'BrtTableSlicerCacheIDs' */
			case 0x0822: /* 'BrtTimelineCachePivotCacheID' */
			case 0x018D: /* 'BrtUserBookView' */
			case 0x009A: /* 'BrtWbFactoid' */
			case 0x045D: /* 'BrtWbProp14' */
			case 0x0229: /* 'BrtWebOpt' */
			case 0x082B: /* 'BrtWorkBookPr15' */
				break;

			case 0x0023: /* 'BrtFRTBegin' */
				state.push(RT); pass = true; break;
			case 0x0024: /* 'BrtFRTEnd' */
				state.pop(); pass = false; break;
			case 0x0025: /* 'BrtACBegin' */
				state.push(RT); pass = true; break;
			case 0x0026: /* 'BrtACEnd' */
				state.pop(); pass = false; break;

			case 0x0010: /* 'BrtFRTArchID$' */ break;

			default:
				if(R.T){/* empty */}
				else if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error("Unexpected record 0x" + RT.toString(16));
		}
	}, opts);

	parse_wb_defaults(wb);

	// $FlowIgnore
	wb.Names = Names;

	(wb/*:any*/).supbooks = supbooks;
	return wb;
}

function write_BUNDLESHS(ba, wb/*::, opts*/) {
	write_record(ba, 0x008F /* BrtBeginBundleShs */);
	for(var idx = 0; idx != wb.SheetNames.length; ++idx) {
		var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;
		var d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };
		write_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));
	}
	write_record(ba, 0x0090 /* BrtEndBundleShs */);
}

/* [MS-XLSB] 2.4.649 BrtFileVersion */
function write_BrtFileVersion(data, o) {
	if(!o) o = new_buf(127);
	for(var i = 0; i != 4; ++i) o.write_shift(4, 0);
	write_XLWideString("SheetJS", o);
	write_XLWideString(XLSX.version, o);
	write_XLWideString(XLSX.version, o);
	write_XLWideString("7262", o);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

/* [MS-XLSB] 2.4.301 BrtBookView */
function write_BrtBookView(idx, o) {
	if(!o) o = new_buf(29);
	o.write_shift(-4, 0);
	o.write_shift(-4, 460);
	o.write_shift(4,  28800);
	o.write_shift(4,  17600);
	o.write_shift(4,  500);
	o.write_shift(4,  idx);
	o.write_shift(4,  idx);
	var flags = 0x78;
	o.write_shift(1,  flags);
	return o.length > o.l ? o.slice(0, o.l) : o;
}

function write_BOOKVIEWS(ba, wb/*::, opts*/) {
	/* required if hidden tab appears before visible tab */
	if(!wb.Workbook || !wb.Workbook.Sheets) return;
	var sheets = wb.Workbook.Sheets;
	var i = 0, vistab = -1, hidden = -1;
	for(; i < sheets.length; ++i) {
		if(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;
		else if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;
	}
	if(hidden > vistab) return;
	write_record(ba, 0x0087 /* BrtBeginBookViews */);
	write_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));
	/* 1*(BrtBookView *FRT) */
	write_record(ba, 0x0088 /* BrtEndBookViews */);
}

function write_BRTNAMES(ba, wb) {
	if(!wb.Workbook || !wb.Workbook.Names) return;
	wb.Workbook.Names.forEach(function(name) { try {
		if(name.Flags & 0x0e) return; // TODO: macro name write
		write_record(ba, 0x0027 /* BrtName */, write_BrtName(name, wb));
	} catch(e) {
		console.error("Could not serialize defined name " + JSON.stringify(name));
	} });
}

function write_SELF_EXTERNS_xlsb(wb) {
	var L = wb.SheetNames.length;
	var o = new_buf(12 * L + 28);
	o.write_shift(4, L + 2);
	o.write_shift(4, 0); o.write_shift(4, -2); o.write_shift(4, -2); // workbook-level reference
	o.write_shift(4, 0); o.write_shift(4, -1); o.write_shift(4, -1); // #REF!...
	for(var i = 0; i < L; ++i) {
		o.write_shift(4, 0); o.write_shift(4, i); o.write_shift(4, i);
	}
	return o;
}
function write_EXTERNALS_xlsb(ba, wb) {
	write_record(ba, 0x0161 /* BrtBeginExternals */);
	write_record(ba, 0x0165 /* BrtSupSelf */);
	write_record(ba, 0x016A /* BrtExternSheet */, write_SELF_EXTERNS_xlsb(wb, 0));
	write_record(ba, 0x0162 /* BrtEndExternals */);
}

/* [MS-XLSB] 2.4.305 BrtCalcProp */
/*function write_BrtCalcProp(data, o) {
	if(!o) o = new_buf(26);
	o.write_shift(4,0); // force recalc
	o.write_shift(4,1);
	o.write_shift(4,0);
	write_Xnum(0, o);
	o.write_shift(-4, 1023);
	o.write_shift(1, 0x33);
	o.write_shift(1, 0x00);
	return o;
}*/

/* [MS-XLSB] 2.4.646 BrtFileRecover */
/*function write_BrtFileRecover(data, o) {
	if(!o) o = new_buf(1);
	o.write_shift(1,0);
	return o;
}*/

/* [MS-XLSB] 2.1.7.61 Workbook */
function write_wb_bin(wb, opts) {
	var ba = buf_array();
	write_record(ba, 0x0083 /* BrtBeginBook */);
	write_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());
	/* [[BrtFileSharingIso] BrtFileSharing] */
	write_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));
	/* [ACABSPATH] */
	/* [[BrtBookProtectionIso] BrtBookProtection] */
	write_BOOKVIEWS(ba, wb, opts);
	write_BUNDLESHS(ba, wb, opts);
	/* [FNGROUP] */
	write_EXTERNALS_xlsb(ba, wb);
	if((wb.Workbook||{}).Names) write_BRTNAMES(ba, wb);
	/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */
	/* [BrtOleSize] */
	/* *(BrtUserBookView *FRT) */
	/* [PIVOTCACHEIDS] */
	/* [BrtWbFactoid] */
	/* [SMARTTAGTYPES] */
	/* [BrtWebOpt] */
	/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */
	/* [WEBPUBITEMS] */
	/* [CRERRS] */
	/* FRTWORKBOOK */
	write_record(ba, 0x0084 /* BrtEndBook */);

	return ba.end();
}
function parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {
	if(name.slice(-4)===".bin") return parse_wb_bin((data/*:any*/), opts);
	return parse_wb_xml((data/*:any*/), opts);
}

function parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {
	if(name.slice(-4)===".bin") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);
	return parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);
}

function parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {
	if(name.slice(-4)===".bin") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);
	return parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);
}

function parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {
	if(name.slice(-4)===".bin") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);
	return parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);
}

function parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {
	if(name.slice(-4)===".bin") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);
	return parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);
}

function parse_sty(data, name/*:string*/, themes, opts) {
	if(name.slice(-4)===".bin") return parse_sty_bin((data/*:any*/), themes, opts);
	return parse_sty_xml((data/*:any*/), themes, opts);
}

function parse_sst(data, name/*:string*/, opts)/*:SST*/ {
	if(name.slice(-4)===".bin") return parse_sst_bin((data/*:any*/), opts);
	return parse_sst_xml((data/*:any*/), opts);
}

function parse_cmnt(data, name/*:string*/, opts)/*:Array<RawComment>*/ {
	if(name.slice(-4)===".bin") return parse_comments_bin((data/*:any*/), opts);
	return parse_comments_xml((data/*:any*/), opts);
}

function parse_cc(data, name/*:string*/, opts) {
	if(name.slice(-4)===".bin") return parse_cc_bin((data/*:any*/), name, opts);
	return parse_cc_xml((data/*:any*/), name, opts);
}

function parse_xlink(data, rel, name/*:string*/, opts) {
	if(name.slice(-4)===".bin") return parse_xlink_bin((data/*:any*/), rel, name, opts);
	return parse_xlink_xml((data/*:any*/), rel, name, opts);
}

function parse_xlmeta(data, name/*:string*/, opts) {
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data/*:any*/), name, opts);
	return parse_xlmeta_xml((data/*:any*/), name, opts);
}
var attregexg2=/\b((?:\w+:)?[\w]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
var attregex2=/\b((?:\w+:)?[\w]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
function xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {
	var words = tag.split(/\s+/);
	var z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];
	if(words.length === 1) return z;
	var m = tag.match(attregexg2), y, j, w, i;
	if(m) for(i = 0; i != m.length; ++i) {
		y = m[i].match(attregex2);
/*:: if(!y || !y[2]) continue; */
		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);
		else {
			if(y[1].slice(0,6) === "xmlns:") w = "xmlns"+y[1].slice(6);
			else w = y[1].slice(j+1);
			z[w] = y[2].slice(1,y[2].length-1);
		}
	}
	return z;
}
function xlml_parsexmltagobj(tag/*:string*/) {
	var words = tag.split(/\s+/);
	var z = {};
	if(words.length === 1) return z;
	var m = tag.match(attregexg2), y, j, w, i;
	if(m) for(i = 0; i != m.length; ++i) {
		y = m[i].match(attregex2);
/*:: if(!y || !y[2]) continue; */
		if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);
		else {
			if(y[1].slice(0,6) === "xmlns:") w = "xmlns"+y[1].slice(6);
			else w = y[1].slice(j+1);
			z[w] = y[2].slice(1,y[2].length-1);
		}
	}
	return z;
}

// ----

/* map from xlml named formats to SSF TODO: localize */
var XLMLFormatMap/*: {[string]:string}*/;

function xlml_format(format, value, date1904)/*:string*/ {
	var fmt = XLMLFormatMap[format] || unescapexml(format);
	if(fmt === "General") return SSF_general(value);
	return SSF_format(fmt, value, {date1904: !!date1904});
}

function xlml_set_custprop(Custprops, key, cp, val/*:string*/) {
	var oval/*:any*/ = val;
	switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]) {
		case "boolean": oval = parsexmlbool(val); break;
		case "i2": case "int": oval = parseInt(val, 10); break;
		case "r4": case "float": oval = parseFloat(val); break;
		case "date": case "dateTime.tz": oval = parseDate(val); break;
		case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break;
		default: throw new Error("bad custprop:" + cp[0]);
	}
	Custprops[unescapexml(key)] = oval;
}

function safe_format_xlml(cell/*:Cell*/, nf, o, date1904) {
	if(cell.t === 'z') return;
	if(!o || o.cellText !== false) try {
		if(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }
		else if(nf === "General") {
			if(cell.t === 'n') {
				if((cell.v|0) === cell.v) cell.w = cell.v.toString(10);
				else cell.w = SSF_general_num(cell.v);
			}
			else cell.w = SSF_general(cell.v);
		}
		else cell.w = xlml_format(nf||"General", cell.v, date1904);
	} catch(e) { if(o.WTF) throw e; }
	try {
		var z = XLMLFormatMap[nf]||nf||"General";
		if(o.cellNF) cell.z = z;
		if(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {
			var _d = SSF_parse_date_code(cell.v + (date1904 ? 1462 : 0)); if(_d) { cell.t = 'd'; cell.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
		}
	} catch(e) { if(o.WTF) throw e; }
}

function process_style_xlml(styles, stag, opts) {
	if(opts.cellStyles) {
		if(stag.Interior) {
			var I = stag.Interior;
			if(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;
		}
	}
	styles[stag.ID] = stag;
}

/* TODO: there must exist some form of OSP-blessed spec */
function parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o, date1904) {
	var nf = "General", sid = cell.StyleID, S = {}; o = o || {};
	var interiors = [];
	var i = 0;
	if(sid === undefined && row) sid = row.StyleID;
	if(sid === undefined && csty) sid = csty.StyleID;
	while(styles[sid] !== undefined) {
		var ssid = styles[sid];
		if(ssid.nf) nf = ssid.nf;
		if(ssid.Interior) interiors.push(ssid.Interior);
		if(!ssid.Parent) break;
		sid = ssid.Parent;
	}
	switch(data.Type) {
		case 'Boolean':
			cell.t = 'b';
			cell.v = parsexmlbool(xml);
			break;
		case 'String':
			cell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));
			cell.v = (xml.indexOf("<") > -1 ? unescapexml(ss||xml).replace(/<[^<>]*>/g, "") : cell.r); // todo: BR etc
			break;
		case 'DateTime':
			if(xml.slice(-1) != "Z") xml += "Z";
			cell.v = datenum(parseDate(xml, date1904), date1904);
			if(cell.v !== cell.v) cell.v = unescapexml(xml);
			if(!nf || nf == "General") nf = "yyyy-mm-dd";
			/* falls through */
		case 'Number':
			if(cell.v === undefined) cell.v=+xml;
			if(!cell.t) cell.t = 'n';
			break;
		case 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;
		default:
			if(xml == "" && ss == "") { cell.t = 'z'; }
			else { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }
			break;
	}
	safe_format_xlml(cell, nf, o, date1904);
	if(o.cellFormula !== false) {
		if(cell.Formula) {
			var fstr = unescapexml(cell.Formula);
			/* strictly speaking, the leading = is required but some writers omit */
			if(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);
			cell.f = rc_to_a1(fstr, base);
			delete cell.Formula;
			if(cell.ArrayRange == "RC") cell.F = rc_to_a1("RC:RC", base);
			else if(cell.ArrayRange) {
				cell.F = rc_to_a1(cell.ArrayRange, base);
				arrayf.push([safe_decode_range(cell.F), cell.F]);
			}
		} else {
			for(i = 0; i < arrayf.length; ++i)
				if(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)
					if(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)
						cell.F = arrayf[i][1];
		}
	}
	if(o.cellStyles) {
		interiors.forEach(function(x) {
			if(!S.patternType && x.patternType) S.patternType = x.patternType;
		});
		cell.s = S;
	}
	if(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;
}

function xlml_prefix_dname(dname) {
	return XLSLblBuiltIn.indexOf("_xlnm." + dname) > -1 ? "_xlnm." + dname : dname;
}

function xlml_clean_comment(comment/*:any*/) {
	comment.t = comment.v || "";
	comment.t = comment.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
	comment.v = comment.w = comment.ixfe = undefined;
}

/* TODO: Everything */
function parse_xlml_xml(d, _opts)/*:Workbook*/ {
	var opts = _opts || {};
	make_ssf();
	var str = debom(xlml_normalize(d));
	if(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {
		if(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));
		else str = utf8read(str);
	}
	var opening = str.slice(0, 1024).toLowerCase(), ishtml = false;
	opening = opening.replace(/".*?"/g, "");
	if((opening.indexOf(">") & 1023) > Math.min((opening.indexOf(",") & 1023), (opening.indexOf(";")&1023))) { var _o = dup(opts); _o.type = "string"; return PRN.to_workbook(str, _o); }
	if(opening.indexOf("<?xml") == -1) ["html", "table", "head", "meta", "script", "style", "div"].forEach(function(tag) { if(opening.indexOf("<" + tag) >= 0) ishtml = true; });
	if(ishtml) return html_to_workbook(str, opts);

	XLMLFormatMap = ({
		"General Number": "General",
		"General Date": table_fmt[22],
		"Long Date": "dddd, mmmm dd, yyyy",
		"Medium Date": table_fmt[15],
		"Short Date": table_fmt[14],
		"Long Time": table_fmt[19],
		"Medium Time": table_fmt[18],
		"Short Time": table_fmt[20],
		"Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
		"Fixed": table_fmt[2],
		"Standard": table_fmt[4],
		"Percent": table_fmt[10],
		"Scientific": table_fmt[11],
		"Yes/No": '"Yes";"Yes";"No";@',
		"True/False": '"True";"True";"False";@',
		"On/Off": '"Yes";"Yes";"No";@'
	}/*:any*/);


	var Rn;
	var state = [], tmp;
	if(DENSE != null && opts.dense == null) opts.dense = DENSE;
	var sheets = {}, sheetnames/*:Array<string>*/ = [], cursheet/*:Worksheet*/ = ({}), sheetname = ""; if(opts.dense) cursheet["!data"] = [];
	var cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars
	var dtag = xlml_parsexmltag('<Data ss:Type="String">'), didx = 0;
	var c = 0, r = 0;
	var refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };
	var styles = {}, stag = {};
	var ss = "", fidx = 0;
	var merges/*:Array<Range>*/ = [];
	var Props = {}, Custprops = {}, pidx = 0, cp = [];
	var comments/*:Array<Comment>*/ = [], comment/*:Comment*/ = ({}/*:any*/);
	var cstys = [], csty, seencol = false;
	var arrayf/*:Array<[Range, string]>*/ = [];
	var rowinfo/*:Array<RowInfo>*/ = [], rowobj = {}, cc = 0, rr = 0;
	var Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};
	xlmlregex.lastIndex = 0;
	str = str_remove_ng(str, "<!--", "-->");
	var raw_Rn3 = "";
	while((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {
		case 'data' /*case 'Data'*/:
			if(raw_Rn3 == "data") {
				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));}
				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
				break;
			}
			if(state[state.length-1][1]) break;
			if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*"Comment"*/"comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts, Workbook.WBProps.date1904);
			else { ss = ""; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }
			break;
		case 'cell' /*case 'Cell'*/:
			if(Rn[1]==='/'){
				if(comments.length > 0) cell.c = comments;
				if((!opts.sheetRows || opts.sheetRows > r) && cell.v !== void 0) {
					if(opts.dense) {
						if(!cursheet["!data"][r]) cursheet["!data"][r] = [];
						cursheet["!data"][r][c] = cell;
					} else cursheet[encode_col(c) + encode_row(r)] = cell;
				}
				if(cell.HRef) {
					cell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);
					if(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;
					delete cell.HRef; delete cell.HRefScreenTip;
				}
				if(cell.MergeAcross || cell.MergeDown) {
					cc = c + (parseInt(cell.MergeAcross,10)|0);
					rr = r + (parseInt(cell.MergeDown,10)|0);
					if(cc > c || rr > r) merges.push({s:{c:c,r:r},e:{c:cc,r:rr}});
				}
				if(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }
				else if(cell.MergeAcross || cell.MergeDown) {
					/*:: if(!cc) cc = 0; if(!rr) rr = 0; */
					for(var cma = c; cma <= cc; ++cma) {
						for(var cmd = r; cmd <= rr; ++cmd) {
							if(cma > c || cmd > r) {
								if(opts.dense) {
									if(!cursheet["!data"][cmd]) cursheet["!data"][cmd] = [];
									cursheet["!data"][cmd][cma] = {t:'z'};
								} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};
							}
						}
					}
					c = cc + 1;
				}
				else ++c;
			} else {
				cell = xlml_parsexmltagobj(Rn[0]);
				if(cell.Index) c = +cell.Index - 1;
				if(c < refguess.s.c) refguess.s.c = c;
				if(c > refguess.e.c) refguess.e.c = c;
				if(Rn[0].slice(-2) === "/>") ++c;
				comments = [];
			}
			break;
		case 'row' /*case 'Row'*/:
			if(Rn[1]==='/' || Rn[0].slice(-2) === "/>") {
				if(r < refguess.s.r) refguess.s.r = r;
				if(r > refguess.e.r) refguess.e.r = r;
				if(Rn[0].slice(-2) === "/>") {
					row = xlml_parsexmltag(Rn[0]);
					if(row.Index) r = +row.Index - 1;
				}
				c = 0; ++r;
			} else {
				row = xlml_parsexmltag(Rn[0]);
				if(row.Index) r = +row.Index - 1;
				rowobj = {};
				if(row.AutoFitHeight == "0" || row.Height) {
					rowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);
					rowinfo[r] = rowobj;
				}
				if(row.Hidden == "1") { rowobj.hidden = true; rowinfo[r] = rowobj; }
			}
			break;
		case 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */
			if(Rn[1]==='/'){
				if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));
				sheetnames.push(sheetname);
				if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {
					cursheet["!ref"] = encode_range(refguess);
					if(opts.sheetRows && opts.sheetRows <= refguess.e.r) {
						cursheet["!fullref"] = cursheet["!ref"];
						refguess.e.r = opts.sheetRows - 1;
						cursheet["!ref"] = encode_range(refguess);
					}
				}
				if(merges.length) cursheet["!merges"] = merges;
				if(cstys.length > 0) cursheet["!cols"] = cstys;
				if(rowinfo.length > 0) cursheet["!rows"] = rowinfo;
				sheets[sheetname] = cursheet;
			} else {
				refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };
				r = c = 0;
				state.push([Rn[3], false]);
				tmp = xlml_parsexmltag(Rn[0]);
				sheetname = unescapexml(tmp.Name);
				cursheet = ({}); if(opts.dense) cursheet["!data"] = [];
				merges = [];
				arrayf = [];
				rowinfo = [];
				wsprops = {name:sheetname, Hidden:0};
				Workbook.Sheets.push(wsprops);
			}
			break;
		case 'table' /*case 'Table'*/:
			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));}
			else if(Rn[0].slice(-2) == "/>") break;
			else {
				state.push([Rn[3], false]);
				cstys = []; seencol = false;
			}
			break;

		case 'style' /*case 'Style'*/:
			if(Rn[1]==='/') process_style_xlml(styles, stag, opts);
			else stag = xlml_parsexmltag(Rn[0]);
			break;

		case 'numberformat' /*case 'NumberFormat'*/:
			stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || "General");
			if(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];
			for(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;
			if(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF__load(stag.nf, ssfidx); break; }
			break;

		case 'column' /*case 'Column'*/:
			if(state[state.length-1][0] !== /*'Table'*/'table') break;
			if(Rn[1]==='/') break;
			csty = xlml_parsexmltag(Rn[0]);
			if(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }
			if(csty.Width) csty.wpx = parseInt(csty.Width, 10);
			if(!seencol && csty.wpx > 10) {
				seencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);
				for(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);
			}
			if(seencol) process_col(csty);
			cstys[(csty.Index-1||cstys.length)] = csty;
			for(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);
			break;

		case 'namedrange' /*case 'NamedRange'*/:
			if(Rn[1]==='/') break;
			if(!Workbook.Names) Workbook.Names = [];
			var _NamedRange = parsexmltag(Rn[0]);
			var _DefinedName/*:DefinedName*/ = ({
				Name: xlml_prefix_dname(_NamedRange.Name),
				Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})
			}/*:any*/);
			if(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;
			/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);
			break;

		case 'namedcell' /*case 'NamedCell'*/: break;
		case 'b' /*case 'B'*/: break;
		case 'i' /*case 'I'*/: break;
		case 'u' /*case 'U'*/: break;
		case 's' /*case 'S'*/: break;
		case 'em' /*case 'EM'*/: break;
		case 'h2' /*case 'H2'*/: break;
		case 'h3' /*case 'H3'*/: break;
		case 'sub' /*case 'Sub'*/: break;
		case 'sup' /*case 'Sup'*/: break;
		case 'span' /*case 'Span'*/: break;
		case 'alignment' /*case 'Alignment'*/:
			break;
		case 'borders' /*case 'Borders'*/: break;
		case 'border' /*case 'Border'*/: break;
		case 'font' /*case 'Font'*/:
			if(Rn[0].slice(-2) === "/>") break;
			else if(Rn[1]==="/") ss += str.slice(fidx, Rn.index);
			else fidx = Rn.index + Rn[0].length;
			break;
		case 'interior' /*case 'Interior'*/:
			if(!opts.cellStyles) break;
			stag.Interior = xlml_parsexmltag(Rn[0]);
			break;
		case 'protection' /*case 'Protection'*/: break;

		case 'author' /*case 'Author'*/:
		case 'title' /*case 'Title'*/:
		case 'description' /*case 'Description'*/:
		case 'created' /*case 'Created'*/:
		case 'keywords' /*case 'Keywords'*/:
		case 'subject' /*case 'Subject'*/:
		case 'category' /*case 'Category'*/:
		case 'company' /*case 'Company'*/:
		case 'lastauthor' /*case 'LastAuthor'*/:
		case 'lastsaved' /*case 'LastSaved'*/:
		case 'lastprinted' /*case 'LastPrinted'*/:
		case 'version' /*case 'Version'*/:
		case 'revision' /*case 'Revision'*/:
		case 'totaltime' /*case 'TotalTime'*/:
		case 'hyperlinkbase' /*case 'HyperlinkBase'*/:
		case 'manager' /*case 'Manager'*/:
		case 'contentstatus' /*case 'ContentStatus'*/:
		case 'identifier' /*case 'Identifier'*/:
		case 'language' /*case 'Language'*/:
		case 'appname' /*case 'AppName'*/:
			if(Rn[0].slice(-2) === "/>") break;
			else if(Rn[1]==="/") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));
			else pidx = Rn.index + Rn[0].length;
			break;
		case 'paragraphs' /*case 'Paragraphs'*/: break;

		case 'styles' /*case 'Styles'*/:
		case 'workbook' /*case 'Workbook'*/:
			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));}
			else state.push([Rn[3], false]);
			break;

		case 'comment' /*case 'Comment'*/:
			if(Rn[1]==='/'){
				if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));
				xlml_clean_comment(comment);
				comments.push(comment);
			} else {
				state.push([Rn[3], false]);
				tmp = xlml_parsexmltag(Rn[0]);
				if(!parsexmlbool(tmp["ShowAlways"]||"0")) comments.hidden = true;
				comment = ({a:tmp.Author}/*:any*/);
			}
			break;

		case 'autofilter' /*case 'AutoFilter'*/:
			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));}
			else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				var AutoFilter = xlml_parsexmltag(Rn[0]);
				cursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\$/g,"") };
				state.push([Rn[3], true]);
			}
			break;

		case 'name' /*case 'Name'*/: break;

		case 'datavalidation' /*case 'DataValidation'*/:
			if(Rn[1]==='/'){
				if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));
			} else {
				if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
			}
			break;

		case 'pixelsperinch' /*case 'PixelsPerInch'*/:
			break;
		case 'componentoptions' /*case 'ComponentOptions'*/:
		case 'documentproperties' /*case 'DocumentProperties'*/:
		case 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:
		case 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:
		case 'pivottable' /*case 'PivotTable'*/:
		case 'pivotcache' /*case 'PivotCache'*/:
		case 'names' /*case 'Names'*/:
		case 'mapinfo' /*case 'MapInfo'*/:
		case 'pagebreaks' /*case 'PageBreaks'*/:
		case 'querytable' /*case 'QueryTable'*/:
		case 'sorting' /*case 'Sorting'*/:
		case 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:
		case 'conditionalformatting' /*case 'ConditionalFormatting'*/:
		case 'smarttagtype' /*case 'SmartTagType'*/:
		case 'smarttags' /*case 'SmartTags'*/:
		case 'excelworkbook' /*case 'ExcelWorkbook'*/:
		case 'workbookoptions' /*case 'WorkbookOptions'*/:
		case 'worksheetoptions' /*case 'WorksheetOptions'*/:
			if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));}
			else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
			break;

		case 'null' /*case 'Null'*/: break;

		default:
			/* FODS file root is <office:document> */
			if(state.length == 0 && Rn[3] == "document") return parse_fods(str, opts);
			/* UOS file root is <uof:UOF> */
			if(state.length == 0 && Rn[3] == "uof"/*"UOF"*/) return parse_fods(str, opts);

			var seen = true;
			switch(state[state.length-1][0]) {
				/* OfficeDocumentSettings */
				case 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {
					case 'allowpng' /*case 'AllowPNG'*/: break;
					case 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;
					case 'downloadcomponents' /*case 'DownloadComponents'*/: break;
					case 'locationofcomponents' /*case 'LocationOfComponents'*/: break;
					case 'colors' /*case 'Colors'*/: break;
					case 'color' /*case 'Color'*/: break;
					case 'index' /*case 'Index'*/: break;
					case 'rgb' /*case 'RGB'*/: break;
					case 'targetscreensize' /*case 'TargetScreenSize'*/: break;
					case 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;
					default: seen = false;
				} break;

				/* ComponentOptions */
				case 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {
					case 'toolbar' /*case 'Toolbar'*/: break;
					case 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;
					case 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;
					case 'label' /*case 'Label'*/: break;
					case 'caption' /*case 'Caption'*/: break;
					case 'maxheight' /*case 'MaxHeight'*/: break;
					case 'maxwidth' /*case 'MaxWidth'*/: break;
					case 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;
					default: seen = false;
				} break;

				/* ExcelWorkbook */
				case 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {
					case 'date1904' /*case 'Date1904'*/:
						/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */
						Workbook.WBProps.date1904 = true;
						break;
					case 'hidehorizontalscrollbar' /*case 'HideHorizontalScrollBar'*/: break;
					case 'hideverticalscrollbar' /*case 'HideVerticalScrollBar'*/: break;
					case 'hideworkbooktabs' /*case 'HideWorkbookTabs'*/: break;
					case 'windowheight' /*case 'WindowHeight'*/: break;
					case 'windowwidth' /*case 'WindowWidth'*/: break;
					case 'windowtopx' /*case 'WindowTopX'*/: break;
					case 'windowtopy' /*case 'WindowTopY'*/: break;
					case 'tabratio' /*case 'TabRatio'*/: break;
					case 'protectstructure' /*case 'ProtectStructure'*/: break;
					case 'protectwindow' /*case 'ProtectWindow'*/: break;
					case 'protectwindows' /*case 'ProtectWindows'*/: break;
					case 'activesheet' /*case 'ActiveSheet'*/: break;
					case 'displayinknotes' /*case 'DisplayInkNotes'*/: break;
					case 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;
					case 'supbook' /*case 'SupBook'*/: break;
					case 'sheetname' /*case 'SheetName'*/: break;
					case 'sheetindex' /*case 'SheetIndex'*/: break;
					case 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;
					case 'sheetindexlast' /*case 'SheetIndexLast'*/: break;
					case 'dll' /*case 'Dll'*/: break;
					case 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;
					case 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;
					case 'iteration' /*case 'Iteration'*/: break;
					case 'maxiterations' /*case 'MaxIterations'*/: break;
					case 'maxchange' /*case 'MaxChange'*/: break;
					case 'path' /*case 'Path'*/: break;
					case 'xct' /*case 'Xct'*/: break;
					case 'count' /*case 'Count'*/: break;
					case 'selectedsheets' /*case 'SelectedSheets'*/: break;
					case 'calculation' /*case 'Calculation'*/: break;
					case 'uncalced' /*case 'Uncalced'*/: break;
					case 'startupprompt' /*case 'StartupPrompt'*/: break;
					case 'crn' /*case 'Crn'*/: break;
					case 'externname' /*case 'ExternName'*/: break;
					case 'formula' /*case 'Formula'*/: break;
					case 'colfirst' /*case 'ColFirst'*/: break;
					case 'collast' /*case 'ColLast'*/: break;
					case 'wantadvise' /*case 'WantAdvise'*/: break;
					case 'boolean' /*case 'Boolean'*/: break;
					case 'error' /*case 'Error'*/: break;
					case 'text' /*case 'Text'*/: break;
					case 'ole' /*case 'OLE'*/: break;
					case 'noautorecover' /*case 'NoAutoRecover'*/: break;
					case 'publishobjects' /*case 'PublishObjects'*/: break;
					case 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;
					case 'number' /*case 'Number'*/: break;
					case 'refmoder1c1' /*case 'RefModeR1C1'*/: break;
					case 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;
					default: seen = false;
				} break;

				/* WorkbookOptions */
				case 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {
					case 'owcversion' /*case 'OWCVersion'*/: break;
					case 'height' /*case 'Height'*/: break;
					case 'width' /*case 'Width'*/: break;
					default: seen = false;
				} break;

				/* WorksheetOptions */
				case 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {
					case 'visible' /*case 'Visible'*/:
						if(Rn[0].slice(-2) === "/>"){/* empty */}
						else if(Rn[1]==="/") switch(str.slice(pidx, Rn.index)) {
							case "SheetHidden": wsprops.Hidden = 1; break;
							case "SheetVeryHidden": wsprops.Hidden = 2; break;
						}
						else pidx = Rn.index + Rn[0].length;
						break;
					case 'header' /*case 'Header'*/:
						if(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');
						if(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;
						break;
					case 'footer' /*case 'Footer'*/:
						if(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');
						if(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;
						break;
					case 'pagemargins' /*case 'PageMargins'*/:
						var pagemargins = parsexmltag(Rn[0]);
						if(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');
						if(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;
						if(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;
						if(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;
						if(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;
						break;
					case 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:
						if(!Workbook.Views) Workbook.Views = [];
						if(!Workbook.Views[0]) Workbook.Views[0] = {};
						Workbook.Views[0].RTL = true;
						break;

					case 'freezepanes' /*case 'FreezePanes'*/: break;
					case 'frozennosplit' /*case 'FrozenNoSplit'*/: break;

					case 'splithorizontal' /*case 'SplitHorizontal'*/:
					case 'splitvertical' /*case 'SplitVertical'*/:
						break;

					case 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:
						break;

					case 'activerow' /*case 'ActiveRow'*/: break;
					case 'activecol' /*case 'ActiveCol'*/: break;
					case 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;
					case 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;

					case 'unsynced' /*case 'Unsynced'*/: break;
					case 'print' /*case 'Print'*/: break;
					case 'printerrors' /*case 'PrintErrors'*/: break;
					case 'panes' /*case 'Panes'*/: break;
					case 'scale' /*case 'Scale'*/: break;
					case 'pane' /*case 'Pane'*/: break;
					case 'number' /*case 'Number'*/: break;
					case 'layout' /*case 'Layout'*/: break;
					case 'pagesetup' /*case 'PageSetup'*/: break;
					case 'selected' /*case 'Selected'*/: break;
					case 'protectobjects' /*case 'ProtectObjects'*/: break;
					case 'enableselection' /*case 'EnableSelection'*/: break;
					case 'protectscenarios' /*case 'ProtectScenarios'*/: break;
					case 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;
					case 'horizontalresolution' /*case 'HorizontalResolution'*/: break;
					case 'verticalresolution' /*case 'VerticalResolution'*/: break;
					case 'numberofcopies' /*case 'NumberofCopies'*/: break;
					case 'activepane' /*case 'ActivePane'*/: break;
					case 'toprowvisible' /*case 'TopRowVisible'*/: break;
					case 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;
					case 'fittopage' /*case 'FitToPage'*/: break;
					case 'rangeselection' /*case 'RangeSelection'*/: break;
					case 'papersizeindex' /*case 'PaperSizeIndex'*/: break;
					case 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;
					case 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;
					case 'filteron' /*case 'FilterOn'*/: break;
					case 'fitwidth' /*case 'FitWidth'*/: break;
					case 'fitheight' /*case 'FitHeight'*/: break;
					case 'commentslayout' /*case 'CommentsLayout'*/: break;
					case 'zoom' /*case 'Zoom'*/: break;
					case 'lefttoright' /*case 'LeftToRight'*/: break;
					case 'gridlines' /*case 'Gridlines'*/: break;
					case 'allowsort' /*case 'AllowSort'*/: break;
					case 'allowfilter' /*case 'AllowFilter'*/: break;
					case 'allowinsertrows' /*case 'AllowInsertRows'*/: break;
					case 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;
					case 'allowinsertcols' /*case 'AllowInsertCols'*/: break;
					case 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;
					case 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;
					case 'allowformatcells' /*case 'AllowFormatCells'*/: break;
					case 'allowsizecols' /*case 'AllowSizeCols'*/: break;
					case 'allowsizerows' /*case 'AllowSizeRows'*/: break;
					case 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:
						if(!cursheet["!outline"]) cursheet["!outline"] = {};
						cursheet["!outline"].above = true;
						break;
					case 'tabcolorindex' /*case 'TabColorIndex'*/: break;
					case 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;
					case 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;
					case 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:
						if(!cursheet["!outline"]) cursheet["!outline"] = {};
						cursheet["!outline"].left = true;
						break;
					case 'blackandwhite' /*case 'BlackAndWhite'*/: break;
					case 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;
					case 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;
					case 'rowcolheadings' /*case 'RowColHeadings'*/: break;
					case 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;
					case 'noorientation' /*case 'NoOrientation'*/: break;
					case 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;
					case 'zeroheight' /*case 'ZeroHeight'*/: break;
					case 'viewablerange' /*case 'ViewableRange'*/: break;
					case 'selection' /*case 'Selection'*/: break;
					case 'protectcontents' /*case 'ProtectContents'*/: break;
					default: seen = false;
				} break;

				/* PivotTable */
				case 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {
					case 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;
					case 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;
					case 'compactrowindent' /*case 'CompactRowIndent'*/: break;
					case 'location' /*case 'Location'*/: break;
					case 'pivotfield' /*case 'PivotField'*/: break;
					case 'orientation' /*case 'Orientation'*/: break;
					case 'layoutform' /*case 'LayoutForm'*/: break;
					case 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;
					case 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;
					case 'position' /*case 'Position'*/: break;
					case 'pivotitem' /*case 'PivotItem'*/: break;
					case 'datatype' /*case 'DataType'*/: break;
					case 'datafield' /*case 'DataField'*/: break;
					case 'sourcename' /*case 'SourceName'*/: break;
					case 'parentfield' /*case 'ParentField'*/: break;
					case 'ptlineitems' /*case 'PTLineItems'*/: break;
					case 'ptlineitem' /*case 'PTLineItem'*/: break;
					case 'countofsameitems' /*case 'CountOfSameItems'*/: break;
					case 'item' /*case 'Item'*/: break;
					case 'itemtype' /*case 'ItemType'*/: break;
					case 'ptsource' /*case 'PTSource'*/: break;
					case 'cacheindex' /*case 'CacheIndex'*/: break;
					case 'consolidationreference' /*case 'ConsolidationReference'*/: break;
					case 'filename' /*case 'FileName'*/: break;
					case 'reference' /*case 'Reference'*/: break;
					case 'nocolumngrand' /*case 'NoColumnGrand'*/: break;
					case 'norowgrand' /*case 'NoRowGrand'*/: break;
					case 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;
					case 'hidden' /*case 'Hidden'*/: break;
					case 'subtotal' /*case 'Subtotal'*/: break;
					case 'basefield' /*case 'BaseField'*/: break;
					case 'mapchilditems' /*case 'MapChildItems'*/: break;
					case 'function' /*case 'Function'*/: break;
					case 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;
					case 'printsettitles' /*case 'PrintSetTitles'*/: break;
					case 'mergelabels' /*case 'MergeLabels'*/: break;
					case 'defaultversion' /*case 'DefaultVersion'*/: break;
					case 'refreshname' /*case 'RefreshName'*/: break;
					case 'refreshdate' /*case 'RefreshDate'*/: break;
					case 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;
					case 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;
					case 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;
					case 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;
					case 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;
					case 'calculation' /*case 'Calculation'*/: break;
					default: seen = false;
				} break;

				/* PageBreaks */
				case 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {
					case 'colbreaks' /*case 'ColBreaks'*/: break;
					case 'colbreak' /*case 'ColBreak'*/: break;
					case 'rowbreaks' /*case 'RowBreaks'*/: break;
					case 'rowbreak' /*case 'RowBreak'*/: break;
					case 'colstart' /*case 'ColStart'*/: break;
					case 'colend' /*case 'ColEnd'*/: break;
					case 'rowend' /*case 'RowEnd'*/: break;
					default: seen = false;
				} break;

				/* AutoFilter */
				case 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {
					case 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;
					case 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;
					case 'autofilterand' /*case 'AutoFilterAnd'*/: break;
					case 'autofilteror' /*case 'AutoFilterOr'*/: break;
					default: seen = false;
				} break;

				/* QueryTable */
				case 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {
					case 'id' /*case 'Id'*/: break;
					case 'autoformatfont' /*case 'AutoFormatFont'*/: break;
					case 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;
					case 'querysource' /*case 'QuerySource'*/: break;
					case 'querytype' /*case 'QueryType'*/: break;
					case 'enableredirections' /*case 'EnableRedirections'*/: break;
					case 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;
					case 'urlstring' /*case 'URLString'*/: break;
					case 'htmltables' /*case 'HTMLTables'*/: break;
					case 'connection' /*case 'Connection'*/: break;
					case 'commandtext' /*case 'CommandText'*/: break;
					case 'refreshinfo' /*case 'RefreshInfo'*/: break;
					case 'notitles' /*case 'NoTitles'*/: break;
					case 'nextid' /*case 'NextId'*/: break;
					case 'columninfo' /*case 'ColumnInfo'*/: break;
					case 'overwritecells' /*case 'OverwriteCells'*/: break;
					case 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;
					case 'textwizardsettings' /*case 'TextWizardSettings'*/: break;
					case 'source' /*case 'Source'*/: break;
					case 'number' /*case 'Number'*/: break;
					case 'decimal' /*case 'Decimal'*/: break;
					case 'thousandseparator' /*case 'ThousandSeparator'*/: break;
					case 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;
					case 'formatsettings' /*case 'FormatSettings'*/: break;
					case 'fieldtype' /*case 'FieldType'*/: break;
					case 'delimiters' /*case 'Delimiters'*/: break;
					case 'tab' /*case 'Tab'*/: break;
					case 'comma' /*case 'Comma'*/: break;
					case 'autoformatname' /*case 'AutoFormatName'*/: break;
					case 'versionlastedit' /*case 'VersionLastEdit'*/: break;
					case 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;
					default: seen = false;
				} break;

				case 'datavalidation' /*case 'DataValidation'*/:
				switch(Rn[3]) {
					case 'range' /*case 'Range'*/: break;

					case 'type' /*case 'Type'*/: break;
					case 'min' /*case 'Min'*/: break;
					case 'max' /*case 'Max'*/: break;
					case 'sort' /*case 'Sort'*/: break;
					case 'descending' /*case 'Descending'*/: break;
					case 'order' /*case 'Order'*/: break;
					case 'casesensitive' /*case 'CaseSensitive'*/: break;
					case 'value' /*case 'Value'*/: break;
					case 'errorstyle' /*case 'ErrorStyle'*/: break;
					case 'errormessage' /*case 'ErrorMessage'*/: break;
					case 'errortitle' /*case 'ErrorTitle'*/: break;
					case 'inputmessage' /*case 'InputMessage'*/: break;
					case 'inputtitle' /*case 'InputTitle'*/: break;
					case 'combohide' /*case 'ComboHide'*/: break;
					case 'inputhide' /*case 'InputHide'*/: break;
					case 'condition' /*case 'Condition'*/: break;
					case 'qualifier' /*case 'Qualifier'*/: break;
					case 'useblank' /*case 'UseBlank'*/: break;
					case 'value1' /*case 'Value1'*/: break;
					case 'value2' /*case 'Value2'*/: break;
					case 'format' /*case 'Format'*/: break;

					case 'cellrangelist' /*case 'CellRangeList'*/: break;
					default: seen = false;
				} break;

				case 'sorting' /*case 'Sorting'*/:
				case 'conditionalformatting' /*case 'ConditionalFormatting'*/:
				switch(Rn[3]) {
					case 'range' /*case 'Range'*/: break;
					case 'type' /*case 'Type'*/: break;
					case 'min' /*case 'Min'*/: break;
					case 'max' /*case 'Max'*/: break;
					case 'sort' /*case 'Sort'*/: break;
					case 'descending' /*case 'Descending'*/: break;
					case 'order' /*case 'Order'*/: break;
					case 'casesensitive' /*case 'CaseSensitive'*/: break;
					case 'value' /*case 'Value'*/: break;
					case 'errorstyle' /*case 'ErrorStyle'*/: break;
					case 'errormessage' /*case 'ErrorMessage'*/: break;
					case 'errortitle' /*case 'ErrorTitle'*/: break;
					case 'cellrangelist' /*case 'CellRangeList'*/: break;
					case 'inputmessage' /*case 'InputMessage'*/: break;
					case 'inputtitle' /*case 'InputTitle'*/: break;
					case 'combohide' /*case 'ComboHide'*/: break;
					case 'inputhide' /*case 'InputHide'*/: break;
					case 'condition' /*case 'Condition'*/: break;
					case 'qualifier' /*case 'Qualifier'*/: break;
					case 'useblank' /*case 'UseBlank'*/: break;
					case 'value1' /*case 'Value1'*/: break;
					case 'value2' /*case 'Value2'*/: break;
					case 'format' /*case 'Format'*/: break;
					default: seen = false;
				} break;

				/* MapInfo (schema) */
				case 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {
					case 'map' /*case 'Map'*/: break;
					case 'entry' /*case 'Entry'*/: break;
					case 'range' /*case 'Range'*/: break;
					case 'xpath' /*case 'XPath'*/: break;
					case 'field' /*case 'Field'*/: break;
					case 'xsdtype' /*case 'XSDType'*/: break;
					case 'filteron' /*case 'FilterOn'*/: break;
					case 'aggregate' /*case 'Aggregate'*/: break;
					case 'elementtype' /*case 'ElementType'*/: break;
					case 'attributetype' /*case 'AttributeType'*/: break;
				/* These are from xsd (XML Schema Definition) */
					case 'schema' /*case 'schema'*/:
					case 'element' /*case 'element'*/:
					case 'complextype' /*case 'complexType'*/:
					case 'datatype' /*case 'datatype'*/:
					case 'all' /*case 'all'*/:
					case 'attribute' /*case 'attribute'*/:
					case 'extends' /*case 'extends'*/: break;

					case 'row' /*case 'row'*/: break;
					default: seen = false;
				} break;

				/* SmartTags (can be anything) */
				case 'smarttags' /*case 'SmartTags'*/: break;

				default: seen = false; break;
			}
			if(seen) break;
			/* CustomDocumentProperties */
			if(Rn[3].match(/!\[CDATA/)) break;
			if(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
			if(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {
				if(Rn[0].slice(-2) === "/>") break;
				else if(Rn[1]==="/") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));
				else { cp = Rn; pidx = Rn.index + Rn[0].length; }
				break;
			}
			if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|");
	}
	var out = ({}/*:any*/);
	if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;
	out.SheetNames = sheetnames;
	out.Workbook = Workbook;
	out.SSF = dup(table_fmt);
	out.Props = Props;
	out.Custprops = Custprops;
	out.bookType = "xlml";
	return out;
}

function parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {
	fix_read_opts(opts=opts||{});
	switch(opts.type||"base64") {
		case "base64": return parse_xlml_xml(Base64_decode(data), opts);
		case "binary": case "buffer": case "file": return parse_xlml_xml(data, opts);
		case "array": return parse_xlml_xml(a2s(data), opts);
	}
	/*:: throw new Error("unsupported type " + opts.type); */
}

/* TODO */
function write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {
	var o/*:Array<string>*/ = [];
	/* DocumentProperties */
	if(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));
	/* CustomDocumentProperties */
	if(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));
	return o.join("");
}
/* TODO */
function write_wb_xlml(wb/*::, opts*/)/*:string*/ {
	/* OfficeDocumentSettings */
	/* ExcelWorkbook */
	if((((wb||{}).Workbook||{}).WBProps||{}).date1904) return '<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><Date1904/></ExcelWorkbook>';
	return "";
}
/* TODO */
function write_sty_xlml(wb, opts)/*:string*/ {
	/* Styles */
	var styles/*:Array<string>*/ = ['<Style ss:ID="Default" ss:Name="Normal"><NumberFormat/></Style>'];
	opts.cellXfs.forEach(function(xf, id) {
		var payload/*:Array<string>*/ = [];
		payload.push(writextag('NumberFormat', null, {"ss:Format": escapexml(table_fmt[xf.numFmtId])}));

		var o = /*::(*/{"ss:ID": "s" + (21+id)}/*:: :any)*/;
		styles.push(writextag('Style', payload.join(""), o));
	});
	return writextag("Styles", styles.join(""));
}
function write_name_xlml(n) { return writextag("NamedRange", null, {"ss:Name": n.Name.slice(0,6) == "_xlnm." ? n.Name.slice(6) : n.Name, "ss:RefersTo":"=" + a1_to_rc(n.Ref, {r:0,c:0})}); }
function write_names_xlml(wb/*::, opts*/)/*:string*/ {
	if(!((wb||{}).Workbook||{}).Names) return "";
	/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error("unreachable"); */
	var names/*:Array<any>*/ = wb.Workbook.Names;
	var out/*:Array<string>*/ = [];
	for(var i = 0; i < names.length; ++i) {
		var n = names[i];
		if(n.Sheet != null) continue;
		if(n.Name.match(/^_xlfn\./)) continue;
		out.push(write_name_xlml(n));
	}
	return writextag("Names", out.join(""));
}
function write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {
	if(!ws) return "";
	if(!((wb||{}).Workbook||{}).Names) return "";
	/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error("unreachable"); */
	var names/*:Array<any>*/ = wb.Workbook.Names;
	var out/*:Array<string>*/ = [];
	for(var i = 0; i < names.length; ++i) {
		var n = names[i];
		if(n.Sheet != idx) continue;
		/*switch(n.Name) {
			case "_": continue;
		}*/
		if(n.Name.match(/^_xlfn\./)) continue;
		out.push(write_name_xlml(n));
	}
	return out.join("");
}
/* WorksheetOptions */
function write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {
	if(!ws) return "";
	var o/*:Array<string>*/ = [];
	/* NOTE: spec technically allows any order, but stick with implied order */

	/* FitToPage */
	/* DoNotDisplayColHeaders */
	/* DoNotDisplayRowHeaders */
	/* ViewableRange */
	/* Selection */
	/* GridlineColor */
	/* Name */
	/* ExcelWorksheetType */
	/* IntlMacro */
	/* Unsynced */
	/* Selected */
	/* CodeName */

	if(ws['!margins']) {
		o.push("<PageSetup>");
		if(ws['!margins'].header) o.push(writextag("Header", null, {'x:Margin':ws['!margins'].header}));
		if(ws['!margins'].footer) o.push(writextag("Footer", null, {'x:Margin':ws['!margins'].footer}));
		o.push(writextag("PageMargins", null, {
			'x:Bottom': ws['!margins'].bottom || "0.75",
			'x:Left': ws['!margins'].left || "0.7",
			'x:Right': ws['!margins'].right || "0.7",
			'x:Top': ws['!margins'].top || "0.75"
		}));
		o.push("</PageSetup>");
	}

	/* PageSetup */
	/* DisplayPageBreak */
	/* TransitionExpressionEvaluation */
	/* TransitionFormulaEntry */
	/* Print */
	/* Zoom */
	/* PageLayoutZoom */
	/* PageBreakZoom */
	/* ShowPageBreakZoom */
	/* DefaultRowHeight */
	/* DefaultColumnWidth */
	/* StandardWidth */

	if(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {
		/* Visible */
		if(wb.Workbook.Sheets[idx].Hidden) o.push(writextag("Visible", (wb.Workbook.Sheets[idx].Hidden == 1 ? "SheetHidden" : "SheetVeryHidden"), {}));
		else {
			/* Selected */
			for(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;
			if(i == idx) o.push("<Selected/>");
		}
	}

	/* LeftColumnVisible */

	if(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push("<DisplayRightToLeft/>");

	/* GridlineColorIndex */
	/* DisplayFormulas */
	/* DoNotDisplayGridlines */
	/* DoNotDisplayHeadings */
	/* DoNotDisplayOutline */
	/* ApplyAutomaticOutlineStyles */
	/* NoSummaryRowsBelowDetail */
	/* NoSummaryColumnsRightDetail */
	/* DoNotDisplayZeros */
	/* ActiveRow */
	/* ActiveColumn */
	/* FilterOn */
	/* RangeSelection */
	/* TopRowVisible */
	/* TopRowBottomPane */
	/* LeftColumnRightPane */
	/* ActivePane */
	/* SplitHorizontal */
	/* SplitVertical */
	/* FreezePanes */
	/* FrozenNoSplit */
	/* TabColorIndex */
	/* Panes */

	/* NOTE: Password not supported in XLML Format */
	if(ws['!protect']) {
		o.push(writetag("ProtectContents", "True"));
		if(ws['!protect'].objects) o.push(writetag("ProtectObjects", "True"));
		if(ws['!protect'].scenarios) o.push(writetag("ProtectScenarios", "True"));
		if(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag("EnableSelection", "NoSelection"));
		else if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag("EnableSelection", "UnlockedCells"));
	[
		[ "formatCells", "AllowFormatCells" ],
		[ "formatColumns", "AllowSizeCols" ],
		[ "formatRows", "AllowSizeRows" ],
		[ "insertColumns", "AllowInsertCols" ],
		[ "insertRows", "AllowInsertRows" ],
		[ "insertHyperlinks", "AllowInsertHyperlinks" ],
		[ "deleteColumns", "AllowDeleteCols" ],
		[ "deleteRows", "AllowDeleteRows" ],
		[ "sort", "AllowSort" ],
		[ "autoFilter", "AllowFilter" ],
		[ "pivotTables", "AllowUsePivotTables" ]
	].forEach(function(x) { if(ws['!protect'][x[0]]) o.push("<"+x[1]+"/>"); });
	}

	if(o.length == 0) return "";
	return writextag("WorksheetOptions", o.join(""), {xmlns:XLMLNS.x});
}
function write_ws_xlml_comment(comments/*:Array<any>*/)/*:string*/ {
	/* TODO: test multiple comments */
	return comments.map(function(c) {
		// TODO: formatted text
		var t = xlml_unfixstr(c.t||"");
		var d =writextag("ss:Data", t, {"xmlns":"http://www.w3.org/TR/REC-html40"});
		var p = {};
		if(c.a) p["ss:Author"] = c.a;
		if(!comments.hidden) p["ss:ShowAlways"] = "1";
		return writextag("Comment", d, p);
	}).join("");
}
function write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{
	if(!cell || (cell.v == undefined && cell.f == undefined)) return "";

	var attr = {};
	if(cell.f) attr["ss:Formula"] = "=" + escapexml(a1_to_rc(cell.f, addr));
	if(cell.F && cell.F.slice(0, ref.length) == ref) {
		var end = decode_cell(cell.F.slice(ref.length + 1));
		attr["ss:ArrayRange"] = "RC:R" + (end.r == addr.r ? "" : "[" + (end.r - addr.r) + "]") + "C" + (end.c == addr.c ? "" : "[" + (end.c - addr.c) + "]");
	}

	if(cell.l && cell.l.Target) {
		attr["ss:HRef"] = escapexml(cell.l.Target);
		if(cell.l.Tooltip) attr["x:HRefScreenTip"] = escapexml(cell.l.Tooltip);
	}

	if(ws['!merges']) {
		var marr = ws['!merges'];
		for(var mi = 0; mi != marr.length; ++mi) {
			if(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;
			if(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;
			if(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;
		}
	}

	var t = "", p = "";
	switch(cell.t) {
		case 'z': if(!opts.sheetStubs) return ""; break;
		case 'n': {
			if(!isFinite(cell.v)) {
				t = 'Error'; p = BErr[isNaN(cell.v) ? 0x24 : 0x07];
			} else {
				t = 'Number'; p = String(cell.v);
			}
		} break;
		case 'b': t = 'Boolean'; p = (cell.v ? "1" : "0"); break;
		case 'e': t = 'Error'; p = BErr[cell.v]; break;
		case 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;
		case 's': t = 'String'; p = escapexlml(cell.v||""); break;
	}
	/* TODO: cell style */
	var os = get_cell_style(opts.cellXfs, cell, opts);
	attr["ss:StyleID"] = "s" + (21+os);
	attr["ss:Index"] = addr.c + 1;
	var _v = (cell.v != null ? p : "");
	var m = cell.t == 'z' ? "" : ('<Data ss:Type="' + t + '">' + _v + '</Data>');

	if((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);

	return writextag("Cell", m, attr);
}
function write_ws_xlml_row(R/*:number*/, row)/*:string*/ {
	var o = '<Row ss:Index="' + (R+1) + '"';
	if(row) {
		if(row.hpt && !row.hpx) row.hpx = pt2px(row.hpt);
		if(row.hpx) o += ' ss:AutoFitHeight="0" ss:Height="' + row.hpx + '"';
		if(row.hidden) o += ' ss:Hidden="1"';
	}
	return o + '>';
}
/* TODO */
function write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {
	if(!ws['!ref']) return "";
	var range/*:Range*/ = safe_decode_range(ws['!ref']);
	var marr/*:Array<Range>*/ = ws['!merges'] || [], mi = 0;
	var o/*:Array<string>*/ = [];
	if(ws['!cols']) ws['!cols'].forEach(function(n, i) {
		process_col(n);
		var w = !!n.width;
		var p = col_obj_w(i, n);
		var k/*:any*/ = {"ss:Index":i+1};
		if(w) k['ss:Width'] = width2px(p.width);
		if(n.hidden) k['ss:Hidden']="1";
		o.push(writextag("Column",null,k));
	});
	var dense = ws["!data"] != null;
	var addr = {r:0,c:0};
	for(var R = range.s.r; R <= range.e.r; ++R) {
		var row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];
		addr.r = R;
		for(var C = range.s.c; C <= range.e.c; ++C) {
			addr.c = C;
			var skip = false;
			for(mi = 0; mi != marr.length; ++mi) {
				if(marr[mi].s.c > C) continue;
				if(marr[mi].s.r > R) continue;
				if(marr[mi].e.c < C) continue;
				if(marr[mi].e.r < R) continue;
				if(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;
				break;
			}
			if(skip) continue;
			var ref = encode_col(C) + encode_row(R), cell = dense ? (ws["!data"][R]||[])[C] : ws[ref];
			row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));
		}
		row.push("</Row>");
		if(row.length > 2) o.push(row.join(""));
	}
	return o.join("");
}
function write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {
	var o/*:Array<string>*/ = [];
	var s = wb.SheetNames[idx];
	var ws = wb.Sheets[s];

	var t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : "";
	if(t.length > 0) o.push("<Names>" + t + "</Names>");

	/* Table */
	t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : "";
	if(t.length > 0) o.push("<Table>" + t + "</Table>");

	/* WorksheetOptions */
	o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));

	if(ws && ws["!autofilter"]) o.push('<AutoFilter x:Range="' + a1_to_rc(fix_range(ws["!autofilter"].ref), {r:0,c:0}) + '" xmlns="urn:schemas-microsoft-com:office:excel"></AutoFilter>');

	return o.join("");
}
function write_xlml(wb, opts)/*:string*/ {
	if(!opts) opts = {};
	if(!wb.SSF) wb.SSF = dup(table_fmt);
	if(wb.SSF) {
		make_ssf(); SSF_load_table(wb.SSF);
		// $FlowIgnore
		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
		opts.ssf = wb.SSF;
		opts.cellXfs = [];
		get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});
	}
	var d/*:Array<string>*/ = [];
	d.push(write_props_xlml(wb, opts));
	d.push(write_wb_xlml(wb, opts));
	d.push("");
	d.push(write_names_xlml(wb, opts));
	for(var i = 0; i < wb.SheetNames.length; ++i)
		d.push(writextag("Worksheet", write_ws_xlml(i, opts, wb), {"ss:Name":escapexml(wb.SheetNames[i])}));
	d[2] = write_sty_xlml(wb, opts);
	return XML_HEADER + writextag("Workbook", d.join(""), {
		'xmlns':      XLMLNS.ss,
		'xmlns:o':    XLMLNS.o,
		'xmlns:x':    XLMLNS.x,
		'xmlns:ss':   XLMLNS.ss,
		'xmlns:dt':   XLMLNS.dt,
		'xmlns:html': XLMLNS.html
	});
}
/* [MS-OLEDS] 2.3.8 CompObjStream */
function parse_compobj(obj/*:CFBEntry*/) {
	var v = {};
	var o = obj.content;
	/*:: if(o == null) return; */

	/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */
	o.l = 28;

	v.AnsiUserType = o.read_shift(0, "lpstr-ansi");
	v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);

	if(o.length - o.l <= 4) return v;

	var m/*:number*/ = o.read_shift(4);
	if(m == 0 || m > 40) return v;
	o.l-=4; v.Reserved1 = o.read_shift(0, "lpstr-ansi");

	if(o.length - o.l <= 4) return v;
	m = o.read_shift(4);
	if(m !== 0x71b239f4) return v;
	v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);

	m = o.read_shift(4);
	if(m == 0 || m > 40) return v;
	o.l-=4; v.Reserved2 = o.read_shift(0, "lpwstr");
}

/*
	Continue logic for:
	- 2.4.58 Continue          0x003c
	- 2.4.59 ContinueBigName   0x043c
	- 2.4.60 ContinueFrt       0x0812
	- 2.4.61 ContinueFrt11     0x0875
	- 2.4.62 ContinueFrt12     0x087f
*/
var CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];
function slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {
	var l = length;
	var bufs = [];
	var d = blob.slice(blob.l,blob.l+l);
	if(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {
	case 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002F /* FilePass */: case 0x0195 /* FileLock */: case 0x00E1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:
		break;
	case 0x0085 /* BoundSheet8 */:
		break;
	default:
		opts.enc.insitu(d);
	}
	bufs.push(d);
	blob.l += l;
	var nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];
	var start = 0;
	while(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {
		l = __readUInt16LE(blob,blob.l+2);
		start = blob.l + 4;
		if(nextrt == 0x0812 /* ContinueFrt */) start += 4;
		else if(nextrt == 0x0875 || nextrt == 0x087f) {
			start += 12;
		}
		d = blob.slice(start,blob.l+4+l);
		bufs.push(d);
		blob.l += 4+l;
		next = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);
	}
	var b = (bconcat(bufs)/*:any*/);
	prep_blob(b, 0);
	var ll = 0; b.lens = [];
	for(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }
	if(b.length < length) throw "XLS Record 0x" + RecordType.toString(16) + " Truncated: " + b.length + " < " + length;
	return R.f(b, b.length, opts);
}

function safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {
	if(p.t === 'z') return;
	if(!p.XF) return;
	var fmtid = 0;
	try {
		fmtid = p.z || p.XF.numFmtId || 0;
		if(opts.cellNF && p.z == null) p.z = table_fmt[fmtid];
	} catch(e) { if(opts.WTF) throw e; }
	if(!opts || opts.cellText !== false) try {
		if(p.t === 'e') { p.w = p.w || BErr[p.v]; }
		else if(fmtid === 0 || fmtid == "General") {
			if(p.t === 'n') {
				if((p.v|0) === p.v) p.w = p.v.toString(10);
				else p.w = SSF_general_num(p.v);
			}
			else p.w = SSF_general(p.v);
		}
		else p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});
	} catch(e) { if(opts.WTF) throw e; }
	if(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {
		var _d = SSF_parse_date_code(p.v + (date1904 ? 1462 : 0)); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
	}
}

function make_cell(val, ixfe, t)/*:Cell*/ {
	return ({v:val, ixfe:ixfe, t:t}/*:any*/);
}

// 2.3.2
function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
	var wb = ({opts:{}}/*:any*/);
	var Sheets = {};
	if(DENSE != null && options.dense == null) options.dense = DENSE;
	var out/*:Worksheet*/ = ({}/*:any*/); if(options.dense) out["!data"] = [];
	var Directory = {};
	var range/*:Range*/ = ({}/*:any*/);
	var last_formula = null;
	var sst/*:SST*/ = ([]/*:any*/);
	var cur_sheet = "";
	var Preamble = {};
	var lastcell, last_cell = "", cc/*:Cell*/, cmnt, rngC, rngR;
	var sharedf = {};
	var arrayf/*:Array<[Range, string]>*/ = [];
	var temp_val/*:Cell*/;
	var country;
	var XFs = []; /* XF records */
	var palette/*:Array<[number, number, number]>*/ = [];
	var Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};
	var biff4w = false;
	var get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {
		if(icv < 8) return XLSIcv[icv];
		if(icv < 64) return palette[icv-8] || XLSIcv[icv];
		return XLSIcv[icv];
	};
	var process_cell_style = function pcs(line/*:any*/, options) {
		var xfd = line.XF.data;
		if(!xfd || !xfd.patternType || !options || !options.cellStyles) return;
		line.s = ({}/*:any*/);
		line.s.patternType = xfd.patternType;
		var t;
		if((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }
		if((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }
	};
	var addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {
		if(!biff4w && file_depth > 1) return;
		if(options.sheetRows && cell.r >= options.sheetRows) return;
		if(options.cellStyles && line.XF && line.XF.data) process_cell_style(line, options);
		delete line.ixfe; delete line.XF;
		lastcell = cell;
		last_cell = encode_cell(cell);
		if(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};
		if(cell.r < range.s.r) range.s.r = cell.r;
		if(cell.c < range.s.c) range.s.c = cell.c;
		if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;
		if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;
		if(options.cellFormula && line.f) {
			for(var afi = 0; afi < arrayf.length; ++afi) {
				if(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;
				if(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;
				line.F = encode_range(arrayf[afi][0]);
				if(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;
				if(line.f) line.f = "" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);
				break;
			}
		}
		{
			if(options.dense) {
				if(!out["!data"][cell.r]) out["!data"][cell.r] = [];
				out["!data"][cell.r][cell.c] = line;
			} else out[last_cell] = line;
		}
	};
	var opts = ({
		enc: false, // encrypted
		sbcch: 0, // cch in the preceding SupBook
		snames: [], // sheetnames
		sharedf: sharedf, // shared formulae by address
		arrayf: arrayf, // array formulae array
		rrtabid: [], // RRTabId
		lastuser: "", // Last User from WriteAccess
		biff: 8, // BIFF version
		codepage: 0, // CP from CodePage record
		winlocked: 0, // fLockWn from WinProtect
		cellStyles: !!options && !!options.cellStyles,
		WTF: !!options && !!options.wtf
	}/*:any*/);
	if(options.password) opts.password = options.password;
	var themes;
	var merges/*:Array<Range>*/ = [];
	var objects = [];
	var colinfo/*:Array<ColInfo>*/ = [], rowinfo/*:Array<RowInfo>*/ = [];
	var seencol = false;
	var supbooks = ([]/*:any*/); // 1-indexed, will hold extern names
	supbooks.SheetNames = opts.snames;
	supbooks.sharedf = opts.sharedf;
	supbooks.arrayf = opts.arrayf;
	supbooks.names = [];
	supbooks.XTI = [];
	var last_RT = 0;
	var file_depth = 0; /* TODO: make a real stack */
	var BIFF2Fmt = 0, BIFF2FmtTable/*:Array<string>*/ = [];
	var FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */
	var last_lbl/*:?DefinedName*/;

	/* explicit override for some broken writers */
	opts.codepage = 1200;
	set_cp(1200);
	var seen_codepage = false;
	while(blob.l < blob.length - 1) {
		var s = blob.l;
		var RecordType = blob.read_shift(2);
		if(RecordType === 0 && last_RT === 0x000a /* EOF */) break;
		var length = (blob.l === blob.length ? 0 : blob.read_shift(2));
		var R = XLSRecordEnum[RecordType];
		if(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(RecordType) == -1 /* BOF */) break;
		//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);
		//if(!R) console.log(blob.slice(blob.l, blob.l + length));
		if(R && R.f) {
			if(options.bookSheets) {
				if(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;
			}
			last_RT = RecordType;
			if(R.r === 2 || R.r == 12) {
				var rt = blob.read_shift(2); length -= 2;
				if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
				if(R.r == 12){
					blob.l += 10; length -= 10;
				} // skip FRT
			}
			//console.error(R,blob.l,length,blob.length);
			var val/*:any*/ = ({}/*:any*/);
			if(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;
			else val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;
			/*:: val = (val:any); */
			if(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* BOF */) continue;
			switch(RecordType) {
				case 0x0022 /* Date1904 */:
					/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */
					wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
				case 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;
				case 0x002f /* FilePass */:
					if(!opts.enc) blob.l = 0;
					opts.enc = val;
					if(!options.password) throw new Error("File is password-protected");
					if(val.valid == null) throw new Error("Encryption scheme unsupported");
					if(!val.valid) throw new Error("Password is incorrect");
					break;
				case 0x005c /* WriteAccess */: opts.lastuser = val; break;
				case 0x0042 /* CodePage */:
					var cpval = Number(val);
					/* overrides based on test cases */
					switch(cpval) {
						case 0x5212: cpval =  1200; break;
						case 0x8000: cpval = 10000; break;
						case 0x8001: cpval =  1252; break;
					}
					set_cp(opts.codepage = cpval);
					seen_codepage = true;
					break;
				case 0x013d /* RRTabId */: opts.rrtabid = val; break;
				case 0x0019 /* WinProtect */: opts.winlocked = val; break;
				case 0x01b7 /* RefreshAll */: wb.opts["RefreshAll"] = val; break;
				case 0x000c /* CalcCount */: wb.opts["CalcCount"] = val; break;
				case 0x0010 /* CalcDelta */: wb.opts["CalcDelta"] = val; break;
				case 0x0011 /* CalcIter */: wb.opts["CalcIter"] = val; break;
				case 0x000d /* CalcMode */: wb.opts["CalcMode"] = val; break;
				case 0x000e /* CalcPrecision */: wb.opts["CalcPrecision"] = val; break;
				case 0x005f /* CalcSaveRecalc */: wb.opts["CalcSaveRecalc"] = val; break;
				case 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1
				case 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;
				case 0x0081 /* WsBool */:
					if(val.fDialog) out["!type"] = "dialog";
					if(!val.fBelow) (out["!outline"] || (out["!outline"] = {})).above = true;
					if(!val.fRight) (out["!outline"] || (out["!outline"] = {})).left = true;
					break; // TODO
				case 0x0043: /* BIFF2XF */ case 0x0243: /* BIFF3XF */ case 0x0443: /* BIFF4XF */
				case 0x00e0 /* XF */:
					XFs.push(val); break;
				case 0x01ae /* SupBook */:
					supbooks.push([val]);
					supbooks[supbooks.length-1].XTI = [];
					break;
				case 0x0023: case 0x0223 /* ExternName */:
					supbooks[supbooks.length-1].push(val);
					break;
				case 0x0018: case 0x0218 /* Lbl */:
					last_lbl = ({
						Name: val.Name,
						Ref: stringify_formula(val.rgce,range,null,supbooks,opts)
					}/*:DefinedName*/);
					if(val.itab > 0) last_lbl.Sheet = val.itab - 1;
					supbooks.names.push(last_lbl);
					if(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }
					supbooks[supbooks.length-1].push(val);
					if(val.Name == "_xlnm._FilterDatabase" && val.itab > 0)
						if(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')
							FilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };
					break;
				case 0x0016 /* ExternCount */: opts.ExternCount = val; break;
				case 0x0017 /* ExternSheet */:
					if(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }
					supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;
				case 0x0894 /* NameCmt */:
					/* TODO: search for correct name */
					if(opts.biff < 8) break;
					if(last_lbl != null) last_lbl.Comment = val[1];
					break;
				case 0x0012 /* Protect */: out["!protect"] = val; break; /* for sheet or book */
				case 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error("Password verifier: " + val); break;
				case 0x0085 /* BoundSheet8 */: {
					Directory[opts.biff == 4 ? opts.snames.length : val.pos] = val;
					opts.snames.push(val.name);
				} break;
				case 0x000a /* EOF */: {
					if(--file_depth ? !biff4w : biff4w) break;
					if(range.e) {
						if(range.e.r > 0 && range.e.c > 0) {
							range.e.r--; range.e.c--;
							out["!ref"] = encode_range(range);
							if(options.sheetRows && options.sheetRows <= range.e.r) {
								var tmpri = range.e.r;
								range.e.r = options.sheetRows - 1;
								out["!fullref"] = out["!ref"];
								out["!ref"] = encode_range(range);
								range.e.r = tmpri;
							}
							range.e.r++; range.e.c++;
						}
						if(merges.length > 0) out["!merges"] = merges;
						if(objects.length > 0) out["!objects"] = objects;
						if(colinfo.length > 0) out["!cols"] = colinfo;
						if(rowinfo.length > 0) out["!rows"] = rowinfo;
						Workbook.Sheets.push(wsprops);
					}
					if(cur_sheet === "") Preamble = out; else Sheets[cur_sheet] = out;
					out = ({}/*:any*/); if(options.dense) out["!data"] = [];
				} break;
				case 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {
					if(opts.biff === 8) opts.biff = {
						0x0009: 2,
						0x0209: 3,
						0x0409: 4
					}[RecordType] || {
						0x0200: 2,
						0x0300: 3,
						0x0400: 4,
						0x0500: 5,
						0x0600: 8,
						0x0002: 2,
						0x0007: 2
					}[val.BIFFVer] || 8;
					opts.biffguess = val.BIFFVer == 0;
					if(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }
					if(opts.biff == 4 && val.dt & 0x100) biff4w = true;
					if(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;
					if(file_depth++ && !biff4w) break;
					out = ({}/*:any*/); if(options.dense) out["!data"] = [];

					if(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }
					if(opts.biff == 4 && biff4w) {
						cur_sheet = (Directory[opts.snames.indexOf(cur_sheet)+1] || {name:""}).name;
					} else if(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {
						if(cur_sheet === "") cur_sheet = "Sheet1";
						range = {s:{r:0,c:0},e:{r:0,c:0}};
						/* fake BoundSheet8 */
						var fakebs8 = {pos: blob.l - length, name:cur_sheet};
						Directory[fakebs8.pos] = fakebs8;
						opts.snames.push(cur_sheet);
					}
					else cur_sheet = (Directory[s] || {name:""}).name;
					if(val.dt == 0x20) out["!type"] = "chart";
					if(val.dt == 0x40) out["!type"] = "macro";
					merges = [];
					objects = [];
					opts.arrayf = arrayf = [];
					colinfo = []; rowinfo = [];
					seencol = false;
					wsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };
				} break;
				case 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {
					if(out["!type"] == "chart") if(options.dense ? (out["!data"][val.r]||[])[val.c]: out[encode_col(val.c) + encode_row(val.r)]) ++val.c;
					temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell({c:val.c, r:val.r}, temp_val, options);
				} break;
				case 0x0005: case 0x0205 /* BoolErr */: {
					temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell({c:val.c, r:val.r}, temp_val, options);
				} break;
				case 0x027e /* RK */: {
					temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell({c:val.c, r:val.r}, temp_val, options);
				} break;
				case 0x00bd /* MulRk */: {
					for(var j = val.c; j <= val.C; ++j) {
						var ixfe = val.rkrec[j-val.c][0];
						temp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);
						if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
						safe_format_xf(temp_val, options, wb.opts.Date1904);
						addcell({c:j, r:val.r}, temp_val, options);
					}
				} break;
				case 0x0006: case 0x0206: case 0x0406 /* Formula */: {
					if(val.val == 'String') { last_formula = val; break; }
					temp_val = make_cell(val.val, val.cell.ixfe, val.tt);
					temp_val.XF = XFs[temp_val.ixfe];
					if(options.cellFormula) {
						var _f = val.formula;
						if(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {
							var _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];
							var _fe = encode_cell({r:_fr, c:_fc});
							if(sharedf[_fe]) temp_val.f = ""+stringify_formula(val.formula,range,val.cell,supbooks, opts);
							else temp_val.F = ((options.dense ? (out["!data"][_fr]||[])[_fc]: out[_fe]) || {}).F;
						} else temp_val.f = ""+stringify_formula(val.formula,range,val.cell,supbooks, opts);
					}
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell(val.cell, temp_val, options);
					last_formula = val;
				} break;
				case 0x0007: case 0x0207 /* String */: {
					if(last_formula) { /* technically always true */
						last_formula.val = val;
						temp_val = make_cell(val, last_formula.cell.ixfe, 's');
						temp_val.XF = XFs[temp_val.ixfe];
						if(options.cellFormula) {
							temp_val.f = ""+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);
						}
						if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
						safe_format_xf(temp_val, options, wb.opts.Date1904);
						addcell(last_formula.cell, temp_val, options);
						last_formula = null;
					} else throw new Error("String record expects Formula");
				} break;
				case 0x0021: case 0x0221 /* Array */: {
					arrayf.push(val);
					var _arraystart = encode_cell(val[0].s);
					cc = options.dense ? (out["!data"][val[0].s.r]||[])[val[0].s.c] : out[_arraystart];
					if(options.cellFormula && cc) {
						if(!last_formula) break; /* technically unreachable */
						if(!_arraystart || !cc) break;
						cc.f = ""+stringify_formula(val[1], range, val[0], supbooks, opts);
						cc.F = encode_range(val[0]);
					}
				} break;
				case 0x04bc /* ShrFmla */: {
					if(!options.cellFormula) break;
					if(last_cell) {
						/* TODO: capture range */
						if(!last_formula) break; /* technically unreachable */
						sharedf[encode_cell(last_formula.cell)]= val[0];
						cc = options.dense ? (out["!data"][last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];
						(cc||{}).f = ""+stringify_formula(val[0], range, lastcell, supbooks, opts);
					}
				} break;
				case 0x00fd /* LabelSst */:
					temp_val=make_cell(sst[val.isst].t, val.ixfe, 's');
					if(sst[val.isst].h) temp_val.h = sst[val.isst].h;
					temp_val.XF = XFs[temp_val.ixfe];
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell({c:val.c, r:val.r}, temp_val, options);
					break;
				case 0x0201 /* Blank */: if(options.sheetStubs) {
					temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell({c:val.c, r:val.r}, temp_val, options);
				} break;
				case 0x00be /* MulBlank */: if(options.sheetStubs) {
					for(var _j = val.c; _j <= val.C; ++_j) {
						var _ixfe = val.ixfe[_j-val.c];
						temp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);
						if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
						safe_format_xf(temp_val, options, wb.opts.Date1904);
						addcell({c:_j, r:val.r}, temp_val, options);
					}
				} break;
				case 0x00d6 /* RString */:
				case 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:
					temp_val=make_cell(val.val, val.ixfe, 's');
					temp_val.XF = XFs[temp_val.ixfe];
					if(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];
					safe_format_xf(temp_val, options, wb.opts.Date1904);
					addcell({c:val.c, r:val.r}, temp_val, options);
					break;

				case 0x0000: case 0x0200 /* Dimensions */: {
					if(file_depth === 1) range = val; /* TODO: stack */
				} break;
				case 0x00fc /* SST */: {
					sst = val;
				} break;
				case 0x041e /* Format */: { /* val = [id, fmt] */
					if(opts.biff >= 3 && opts.biff <= 4) {
						BIFF2FmtTable[BIFF2Fmt++] = val[1];
						for(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;
						if(b4idx >= 163) SSF__load(val[1], BIFF2Fmt + 163);
					}
					else SSF__load(val[1], val[0]);
				} break;
				case 0x001e /* BIFF2FORMAT */: {
					BIFF2FmtTable[BIFF2Fmt++] = val;
					for(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;
					if(b2idx >= 163) SSF__load(val, BIFF2Fmt + 163);
				} break;

				case 0x00e5 /* MergeCells */: merges = merges.concat(val); break;

				case 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;
				case 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;
				case 0x007f /* ImData */: opts.lastobj.ImData = val; break;

				case 0x01b8 /* HLink */: {
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
							cc = options.dense ? (out["!data"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
							if(cc) cc.l = val[1];
						}
				} break;
				case 0x0800 /* HLinkTooltip */: {
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
							cc = options.dense ? (out["!data"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
							if(cc && cc.l) cc.l.Tooltip = val[1];
							}
				} break;
				case 0x001c /* Note */: {
					/* TODO: comment continuation (row == -1 / 0xFFFF) */
					cc = options.dense ? (out["!data"][val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];
					if(!cc) {
						if(options.dense) {
							if(!out["!data"][val[0].r]) out["!data"][val[0].r] = [];
							cc = out["!data"][val[0].r][val[0].c] = ({t:"z"}/*:any*/);
						} else {
							cc = out[encode_cell(val[0])] = ({t:"z"}/*:any*/);
						}
						range.e.r = Math.max(range.e.r, val[0].r);
						range.s.r = Math.min(range.s.r, val[0].r);
						range.e.c = Math.max(range.e.c, val[0].c);
						range.s.c = Math.min(range.s.c, val[0].c);
					}
					if(!cc.c) cc.c = [];
					if(opts.biff <= 5 && opts.biff >= 2) cmnt = {a:"SheetJ5", t:val[1]};
					else {
						var noteobj = objects[val[2]];
						cmnt = {a:val[1],t:noteobj.TxO.t};
						if(val[3] != null && !(val[3] & 0x02)) cc.c.hidden = true;
					}
					cc.c.push(cmnt);
				} break;
				case 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;
				case 0x007d /* ColInfo */: {
					if(!opts.cellStyles) break;
					while(val.e >= val.s) {
						colinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };
						if(!seencol) { seencol = true; find_mdw_colw(val.w/256); }
						process_col(colinfo[val.e+1]);
					}
				} break;
				case 0x0208 /* Row */: {
					var rowobj = {};
					if(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }
					if(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }
					if(val.hpt) {
						rowinfo[val.r] = rowobj;
						rowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);
					}
				} break;
				case 0x0026 /* LeftMargin */:
				case 0x0027 /* RightMargin */:
				case 0x0028 /* TopMargin */:
				case 0x0029 /* BottomMargin */:
					if(!out['!margins']) default_margins(out['!margins'] = {});
					out['!margins'][({0x26: "left", 0x27:"right", 0x28:"top", 0x29:"bottom"})[RecordType]] = val;
					break;
				case 0x00a1 /* Setup */: // TODO
					if(!out['!margins']) default_margins(out['!margins'] = {});
					out['!margins'].header = val.header;
					out['!margins'].footer = val.footer;
					break;
				case 0x023e /* Window2 */: // TODO
					// $FlowIgnore
					if(val.RTL) Workbook.Views[0].RTL = true;
					break;
				case 0x0092 /* Palette */: palette = val; break;
				case 0x0896 /* Theme */: themes = val; break;
				case 0x008c /* Country */: country = val; break;
				case 0x01ba /* CodeName */: {
					/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */
					if(!cur_sheet) Workbook.WBProps.CodeName = val || "ThisWorkbook";
					else wsprops.CodeName = val || wsprops.name;
				} break;
			}
		} else {
			if(!R) console.error("Missing Info for XLS Record 0x" + RecordType.toString(16));
			blob.l += length;
		}
	}
	wb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});
	if(!options.bookSheets) wb.Sheets=Sheets;
	if(!wb.SheetNames.length && Preamble["!ref"]) {
		wb.SheetNames.push("Sheet1");
		/*jshint -W069 */
		if(wb.Sheets) wb.Sheets["Sheet1"] = Preamble;
		/*jshint +W069 */
	} else wb.Preamble=Preamble;
	if(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });
	wb.Strings = sst;
	wb.SSF = dup(table_fmt);
	if(opts.enc) wb.Encryption = opts.enc;
	if(themes) wb.Themes = themes;
	wb.Metadata = {};
	if(country !== undefined) wb.Metadata.Country = country;
	if(supbooks.names.length > 0) Workbook.Names = supbooks.names;
	wb.Workbook = Workbook;
	return wb;
}

/* TODO: split props*/
var PSCLSID = {
	SI: "e0859ff2f94f6810ab9108002b27b3d9",
	DSI: "02d5cdd59c2e1b10939708002b2cf9ae",
	UDI: "05d5cdd59c2e1b10939708002b2cf9ae"
};
function parse_xls_props(cfb/*:CFBContainer*/, props, o) {
	/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */
	var DSI = CFB.find(cfb, '/!DocumentSummaryInformation');
	if(DSI && DSI.size > 0) try {
		var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);
		for(var d in DocSummary) props[d] = DocSummary[d];
	} catch(e) {if(o.WTF) throw e;/* empty */}

	/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/
	var SI = CFB.find(cfb, '/!SummaryInformation');
	if(SI && SI.size > 0) try {
		var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);
		for(var s in Summary) if(props[s] == null) props[s] = Summary[s];
	} catch(e) {if(o.WTF) throw e;/* empty */}

	if(props.HeadingPairs && props.TitlesOfParts) {
		load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);
		delete props.HeadingPairs; delete props.TitlesOfParts;
	}
}
function write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {
	var DSEntries = [], SEntries = [], CEntries = [];
	var i = 0, Keys;
	var DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, "n");
	var SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, "n");
	if(wb.Props) {
		Keys = keys(wb.Props);
		// $FlowIgnore
		for(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);
	}
	if(wb.Custprops) {
		Keys = keys(wb.Custprops);
		// $FlowIgnore
		for(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);
	}
	var CEntries2 = [];
	for(i = 0; i < CEntries.length; ++i) {
		if(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;
		if(CEntries[i][1] == null) continue;
		CEntries2.push(CEntries[i]);
	}
	if(SEntries.length) CFB.utils.cfb_add(cfb, "/\u0005SummaryInformation", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));
	if(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, "/\u0005DocumentSummaryInformation", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));
}

function parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {
if(!options) options = {};
fix_read_opts(options);
reset_cp();
if(options.codepage) set_ansi(options.codepage);
var CompObj/*:?CFBEntry*/, WB/*:?any*/;
if(cfb.FullPaths) {
	if(CFB.find(cfb, '/encryption')) throw new Error("File is password-protected");
	CompObj = CFB.find(cfb, '!CompObj');
	WB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');
} else {
	switch(options.type) {
		case 'base64': cfb = s2a(Base64_decode(cfb)); break;
		case 'binary': cfb = s2a(cfb); break;
		case 'buffer': break;
		case 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;
	}
	prep_blob(cfb, 0);
	WB = ({content: cfb}/*:any*/);
}
var /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;

var _data/*:?any*/;
if(CompObj) /*::CompObjP = */parse_compobj(CompObj);
if(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);
else/*:: if(cfb instanceof CFBContainer) */ {
	var T = has_buf ? 'buffer' : 'array';
	if(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);
	/* Quattro Pro 7-8 */
	else if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));
	/* Quattro Pro 9 */
	else if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));
	/* Works 4 for Mac */
	else if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error("Unsupported Works 4 for Mac file");
	else throw new Error("Cannot find Workbook stream");
	if(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);
}

var props = {};
if(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);

WorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */
if(options.bookFiles) WorkbookP.cfb = cfb;
/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */
return WorkbookP;
}


function write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {
	var o = opts || {};
	var cfb = CFB.utils.cfb_new({root:"R"});
	var wbpath = "/Workbook";
	switch(o.bookType || "xls") {
		case "xls": o.bookType = "biff8";
		/* falls through */
		case "xla": if(!o.bookType) o.bookType = "xla";
		/* falls through */
		case "biff8": wbpath = "/Workbook"; o.biff = 8; break;
		case "biff5": wbpath = "/Book"; o.biff = 5; break;
		default: throw new Error("invalid type " + o.bookType + " for XLS CFB");
	}
	CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));
	if(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);
	// TODO: SI, DSI, CO
	if(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == "string" ? "binary" : "buffer"}));
	return cfb;
}
/* [MS-XLSB] 2.3 Record Enumeration */
var XLSBRecordEnum = {
	0x0000: { /* n:"BrtRowHdr", */ f:parse_BrtRowHdr },
	0x0001: { /* n:"BrtCellBlank", */ f:parse_BrtCellBlank },
	0x0002: { /* n:"BrtCellRk", */ f:parse_BrtCellRk },
	0x0003: { /* n:"BrtCellError", */ f:parse_BrtCellError },
	0x0004: { /* n:"BrtCellBool", */ f:parse_BrtCellBool },
	0x0005: { /* n:"BrtCellReal", */ f:parse_BrtCellReal },
	0x0006: { /* n:"BrtCellSt", */ f:parse_BrtCellSt },
	0x0007: { /* n:"BrtCellIsst", */ f:parse_BrtCellIsst },
	0x0008: { /* n:"BrtFmlaString", */ f:parse_BrtFmlaString },
	0x0009: { /* n:"BrtFmlaNum", */ f:parse_BrtFmlaNum },
	0x000A: { /* n:"BrtFmlaBool", */ f:parse_BrtFmlaBool },
	0x000B: { /* n:"BrtFmlaError", */ f:parse_BrtFmlaError },
	0x000C: { /* n:"BrtShortBlank", */ f:parse_BrtShortBlank },
	0x000D: { /* n:"BrtShortRk", */ f:parse_BrtShortRk },
	0x000E: { /* n:"BrtShortError", */ f:parse_BrtShortError },
	0x000F: { /* n:"BrtShortBool", */ f:parse_BrtShortBool },
	0x0010: { /* n:"BrtShortReal", */ f:parse_BrtShortReal },
	0x0011: { /* n:"BrtShortSt", */ f:parse_BrtShortSt },
	0x0012: { /* n:"BrtShortIsst", */ f:parse_BrtShortIsst },
	0x0013: { /* n:"BrtSSTItem", */ f:parse_RichStr },
	0x0014: { /* n:"BrtPCDIMissing" */ },
	0x0015: { /* n:"BrtPCDINumber" */ },
	0x0016: { /* n:"BrtPCDIBoolean" */ },
	0x0017: { /* n:"BrtPCDIError" */ },
	0x0018: { /* n:"BrtPCDIString" */ },
	0x0019: { /* n:"BrtPCDIDatetime" */ },
	0x001A: { /* n:"BrtPCDIIndex" */ },
	0x001B: { /* n:"BrtPCDIAMissing" */ },
	0x001C: { /* n:"BrtPCDIANumber" */ },
	0x001D: { /* n:"BrtPCDIABoolean" */ },
	0x001E: { /* n:"BrtPCDIAError" */ },
	0x001F: { /* n:"BrtPCDIAString" */ },
	0x0020: { /* n:"BrtPCDIADatetime" */ },
	0x0021: { /* n:"BrtPCRRecord" */ },
	0x0022: { /* n:"BrtPCRRecordDt" */ },
	0x0023: { /* n:"BrtFRTBegin", */ T:1 },
	0x0024: { /* n:"BrtFRTEnd", */ T:-1 },
	0x0025: { /* n:"BrtACBegin", */ T:1 },
	0x0026: { /* n:"BrtACEnd", */ T:-1 },
	0x0027: { /* n:"BrtName", */ f:parse_BrtName },
	0x0028: { /* n:"BrtIndexRowBlock" */ },
	0x002A: { /* n:"BrtIndexBlock" */ },
	0x002B: { /* n:"BrtFont", */ f:parse_BrtFont },
	0x002C: { /* n:"BrtFmt", */ f:parse_BrtFmt },
	0x002D: { /* n:"BrtFill", */ f:parse_BrtFill },
	0x002E: { /* n:"BrtBorder", */ f:parse_BrtBorder },
	0x002F: { /* n:"BrtXF", */ f:parse_BrtXF },
	0x0030: { /* n:"BrtStyle" */ },
	0x0031: { /* n:"BrtCellMeta", */ f:parse_Int32LE },
	0x0032: { /* n:"BrtValueMeta" */ },
	0x0033: { /* n:"BrtMdb" */ f:parse_BrtMdb },
	0x0034: { /* n:"BrtBeginFmd", */ T:1 },
	0x0035: { /* n:"BrtEndFmd", */ T:-1 },
	0x0036: { /* n:"BrtBeginMdx", */ T:1 },
	0x0037: { /* n:"BrtEndMdx", */ T:-1 },
	0x0038: { /* n:"BrtBeginMdxTuple", */ T:1 },
	0x0039: { /* n:"BrtEndMdxTuple", */ T:-1 },
	0x003A: { /* n:"BrtMdxMbrIstr" */ },
	0x003B: { /* n:"BrtStr" */ },
	0x003C: { /* n:"BrtColInfo", */ f:parse_ColInfo },
	0x003E: { /* n:"BrtCellRString", */ f:parse_BrtCellRString },
	0x003F: { /* n:"BrtCalcChainItem$", */ f:parse_BrtCalcChainItem$ },
	0x0040: { /* n:"BrtDVal", */ f:parse_BrtDVal },
	0x0041: { /* n:"BrtSxvcellNum" */ },
	0x0042: { /* n:"BrtSxvcellStr" */ },
	0x0043: { /* n:"BrtSxvcellBool" */ },
	0x0044: { /* n:"BrtSxvcellErr" */ },
	0x0045: { /* n:"BrtSxvcellDate" */ },
	0x0046: { /* n:"BrtSxvcellNil" */ },
	0x0080: { /* n:"BrtFileVersion" */ },
	0x0081: { /* n:"BrtBeginSheet", */ T:1 },
	0x0082: { /* n:"BrtEndSheet", */ T:-1 },
	0x0083: { /* n:"BrtBeginBook", */ T:1, f:parsenoop, p:0 },
	0x0084: { /* n:"BrtEndBook", */ T:-1 },
	0x0085: { /* n:"BrtBeginWsViews", */ T:1 },
	0x0086: { /* n:"BrtEndWsViews", */ T:-1 },
	0x0087: { /* n:"BrtBeginBookViews", */ T:1 },
	0x0088: { /* n:"BrtEndBookViews", */ T:-1 },
	0x0089: { /* n:"BrtBeginWsView", */ T:1, f:parse_BrtBeginWsView },
	0x008A: { /* n:"BrtEndWsView", */ T:-1 },
	0x008B: { /* n:"BrtBeginCsViews", */ T:1 },
	0x008C: { /* n:"BrtEndCsViews", */ T:-1 },
	0x008D: { /* n:"BrtBeginCsView", */ T:1 },
	0x008E: { /* n:"BrtEndCsView", */ T:-1 },
	0x008F: { /* n:"BrtBeginBundleShs", */ T:1 },
	0x0090: { /* n:"BrtEndBundleShs", */ T:-1 },
	0x0091: { /* n:"BrtBeginSheetData", */ T:1 },
	0x0092: { /* n:"BrtEndSheetData", */ T:-1 },
	0x0093: { /* n:"BrtWsProp", */ f:parse_BrtWsProp },
	0x0094: { /* n:"BrtWsDim", */ f:parse_BrtWsDim, p:16 },
	0x0097: { /* n:"BrtPane", */ f:parse_BrtPane },
	0x0098: { /* n:"BrtSel" */ },
	0x0099: { /* n:"BrtWbProp", */ f:parse_BrtWbProp },
	0x009A: { /* n:"BrtWbFactoid" */ },
	0x009B: { /* n:"BrtFileRecover" */ },
	0x009C: { /* n:"BrtBundleSh", */ f:parse_BrtBundleSh },
	0x009D: { /* n:"BrtCalcProp" */ },
	0x009E: { /* n:"BrtBookView" */ },
	0x009F: { /* n:"BrtBeginSst", */ T:1, f:parse_BrtBeginSst },
	0x00A0: { /* n:"BrtEndSst", */ T:-1 },
	0x00A1: { /* n:"BrtBeginAFilter", */ T:1, f:parse_UncheckedRfX },
	0x00A2: { /* n:"BrtEndAFilter", */ T:-1 },
	0x00A3: { /* n:"BrtBeginFilterColumn", */ T:1 },
	0x00A4: { /* n:"BrtEndFilterColumn", */ T:-1 },
	0x00A5: { /* n:"BrtBeginFilters", */ T:1 },
	0x00A6: { /* n:"BrtEndFilters", */ T:-1 },
	0x00A7: { /* n:"BrtFilter" */ },
	0x00A8: { /* n:"BrtColorFilter" */ },
	0x00A9: { /* n:"BrtIconFilter" */ },
	0x00AA: { /* n:"BrtTop10Filter" */ },
	0x00AB: { /* n:"BrtDynamicFilter" */ },
	0x00AC: { /* n:"BrtBeginCustomFilters", */ T:1 },
	0x00AD: { /* n:"BrtEndCustomFilters", */ T:-1 },
	0x00AE: { /* n:"BrtCustomFilter" */ },
	0x00AF: { /* n:"BrtAFilterDateGroupItem" */ },
	0x00B0: { /* n:"BrtMergeCell", */ f:parse_BrtMergeCell },
	0x00B1: { /* n:"BrtBeginMergeCells", */ T:1 },
	0x00B2: { /* n:"BrtEndMergeCells", */ T:-1 },
	0x00B3: { /* n:"BrtBeginPivotCacheDef", */ T:1 },
	0x00B4: { /* n:"BrtEndPivotCacheDef", */ T:-1 },
	0x00B5: { /* n:"BrtBeginPCDFields", */ T:1 },
	0x00B6: { /* n:"BrtEndPCDFields", */ T:-1 },
	0x00B7: { /* n:"BrtBeginPCDField", */ T:1 },
	0x00B8: { /* n:"BrtEndPCDField", */ T:-1 },
	0x00B9: { /* n:"BrtBeginPCDSource", */ T:1 },
	0x00BA: { /* n:"BrtEndPCDSource", */ T:-1 },
	0x00BB: { /* n:"BrtBeginPCDSRange", */ T:1 },
	0x00BC: { /* n:"BrtEndPCDSRange", */ T:-1 },
	0x00BD: { /* n:"BrtBeginPCDFAtbl", */ T:1 },
	0x00BE: { /* n:"BrtEndPCDFAtbl", */ T:-1 },
	0x00BF: { /* n:"BrtBeginPCDIRun", */ T:1 },
	0x00C0: { /* n:"BrtEndPCDIRun", */ T:-1 },
	0x00C1: { /* n:"BrtBeginPivotCacheRecords", */ T:1 },
	0x00C2: { /* n:"BrtEndPivotCacheRecords", */ T:-1 },
	0x00C3: { /* n:"BrtBeginPCDHierarchies", */ T:1 },
	0x00C4: { /* n:"BrtEndPCDHierarchies", */ T:-1 },
	0x00C5: { /* n:"BrtBeginPCDHierarchy", */ T:1 },
	0x00C6: { /* n:"BrtEndPCDHierarchy", */ T:-1 },
	0x00C7: { /* n:"BrtBeginPCDHFieldsUsage", */ T:1 },
	0x00C8: { /* n:"BrtEndPCDHFieldsUsage", */ T:-1 },
	0x00C9: { /* n:"BrtBeginExtConnection", */ T:1 },
	0x00CA: { /* n:"BrtEndExtConnection", */ T:-1 },
	0x00CB: { /* n:"BrtBeginECDbProps", */ T:1 },
	0x00CC: { /* n:"BrtEndECDbProps", */ T:-1 },
	0x00CD: { /* n:"BrtBeginECOlapProps", */ T:1 },
	0x00CE: { /* n:"BrtEndECOlapProps", */ T:-1 },
	0x00CF: { /* n:"BrtBeginPCDSConsol", */ T:1 },
	0x00D0: { /* n:"BrtEndPCDSConsol", */ T:-1 },
	0x00D1: { /* n:"BrtBeginPCDSCPages", */ T:1 },
	0x00D2: { /* n:"BrtEndPCDSCPages", */ T:-1 },
	0x00D3: { /* n:"BrtBeginPCDSCPage", */ T:1 },
	0x00D4: { /* n:"BrtEndPCDSCPage", */ T:-1 },
	0x00D5: { /* n:"BrtBeginPCDSCPItem", */ T:1 },
	0x00D6: { /* n:"BrtEndPCDSCPItem", */ T:-1 },
	0x00D7: { /* n:"BrtBeginPCDSCSets", */ T:1 },
	0x00D8: { /* n:"BrtEndPCDSCSets", */ T:-1 },
	0x00D9: { /* n:"BrtBeginPCDSCSet", */ T:1 },
	0x00DA: { /* n:"BrtEndPCDSCSet", */ T:-1 },
	0x00DB: { /* n:"BrtBeginPCDFGroup", */ T:1 },
	0x00DC: { /* n:"BrtEndPCDFGroup", */ T:-1 },
	0x00DD: { /* n:"BrtBeginPCDFGItems", */ T:1 },
	0x00DE: { /* n:"BrtEndPCDFGItems", */ T:-1 },
	0x00DF: { /* n:"BrtBeginPCDFGRange", */ T:1 },
	0x00E0: { /* n:"BrtEndPCDFGRange", */ T:-1 },
	0x00E1: { /* n:"BrtBeginPCDFGDiscrete", */ T:1 },
	0x00E2: { /* n:"BrtEndPCDFGDiscrete", */ T:-1 },
	0x00E3: { /* n:"BrtBeginPCDSDTupleCache", */ T:1 },
	0x00E4: { /* n:"BrtEndPCDSDTupleCache", */ T:-1 },
	0x00E5: { /* n:"BrtBeginPCDSDTCEntries", */ T:1 },
	0x00E6: { /* n:"BrtEndPCDSDTCEntries", */ T:-1 },
	0x00E7: { /* n:"BrtBeginPCDSDTCEMembers", */ T:1 },
	0x00E8: { /* n:"BrtEndPCDSDTCEMembers", */ T:-1 },
	0x00E9: { /* n:"BrtBeginPCDSDTCEMember", */ T:1 },
	0x00EA: { /* n:"BrtEndPCDSDTCEMember", */ T:-1 },
	0x00EB: { /* n:"BrtBeginPCDSDTCQueries", */ T:1 },
	0x00EC: { /* n:"BrtEndPCDSDTCQueries", */ T:-1 },
	0x00ED: { /* n:"BrtBeginPCDSDTCQuery", */ T:1 },
	0x00EE: { /* n:"BrtEndPCDSDTCQuery", */ T:-1 },
	0x00EF: { /* n:"BrtBeginPCDSDTCSets", */ T:1 },
	0x00F0: { /* n:"BrtEndPCDSDTCSets", */ T:-1 },
	0x00F1: { /* n:"BrtBeginPCDSDTCSet", */ T:1 },
	0x00F2: { /* n:"BrtEndPCDSDTCSet", */ T:-1 },
	0x00F3: { /* n:"BrtBeginPCDCalcItems", */ T:1 },
	0x00F4: { /* n:"BrtEndPCDCalcItems", */ T:-1 },
	0x00F5: { /* n:"BrtBeginPCDCalcItem", */ T:1 },
	0x00F6: { /* n:"BrtEndPCDCalcItem", */ T:-1 },
	0x00F7: { /* n:"BrtBeginPRule", */ T:1 },
	0x00F8: { /* n:"BrtEndPRule", */ T:-1 },
	0x00F9: { /* n:"BrtBeginPRFilters", */ T:1 },
	0x00FA: { /* n:"BrtEndPRFilters", */ T:-1 },
	0x00FB: { /* n:"BrtBeginPRFilter", */ T:1 },
	0x00FC: { /* n:"BrtEndPRFilter", */ T:-1 },
	0x00FD: { /* n:"BrtBeginPNames", */ T:1 },
	0x00FE: { /* n:"BrtEndPNames", */ T:-1 },
	0x00FF: { /* n:"BrtBeginPName", */ T:1 },
	0x0100: { /* n:"BrtEndPName", */ T:-1 },
	0x0101: { /* n:"BrtBeginPNPairs", */ T:1 },
	0x0102: { /* n:"BrtEndPNPairs", */ T:-1 },
	0x0103: { /* n:"BrtBeginPNPair", */ T:1 },
	0x0104: { /* n:"BrtEndPNPair", */ T:-1 },
	0x0105: { /* n:"BrtBeginECWebProps", */ T:1 },
	0x0106: { /* n:"BrtEndECWebProps", */ T:-1 },
	0x0107: { /* n:"BrtBeginEcWpTables", */ T:1 },
	0x0108: { /* n:"BrtEndECWPTables", */ T:-1 },
	0x0109: { /* n:"BrtBeginECParams", */ T:1 },
	0x010A: { /* n:"BrtEndECParams", */ T:-1 },
	0x010B: { /* n:"BrtBeginECParam", */ T:1 },
	0x010C: { /* n:"BrtEndECParam", */ T:-1 },
	0x010D: { /* n:"BrtBeginPCDKPIs", */ T:1 },
	0x010E: { /* n:"BrtEndPCDKPIs", */ T:-1 },
	0x010F: { /* n:"BrtBeginPCDKPI", */ T:1 },
	0x0110: { /* n:"BrtEndPCDKPI", */ T:-1 },
	0x0111: { /* n:"BrtBeginDims", */ T:1 },
	0x0112: { /* n:"BrtEndDims", */ T:-1 },
	0x0113: { /* n:"BrtBeginDim", */ T:1 },
	0x0114: { /* n:"BrtEndDim", */ T:-1 },
	0x0115: { /* n:"BrtIndexPartEnd" */ },
	0x0116: { /* n:"BrtBeginStyleSheet", */ T:1 },
	0x0117: { /* n:"BrtEndStyleSheet", */ T:-1 },
	0x0118: { /* n:"BrtBeginSXView", */ T:1 },
	0x0119: { /* n:"BrtEndSXVI", */ T:-1 },
	0x011A: { /* n:"BrtBeginSXVI", */ T:1 },
	0x011B: { /* n:"BrtBeginSXVIs", */ T:1 },
	0x011C: { /* n:"BrtEndSXVIs", */ T:-1 },
	0x011D: { /* n:"BrtBeginSXVD", */ T:1 },
	0x011E: { /* n:"BrtEndSXVD", */ T:-1 },
	0x011F: { /* n:"BrtBeginSXVDs", */ T:1 },
	0x0120: { /* n:"BrtEndSXVDs", */ T:-1 },
	0x0121: { /* n:"BrtBeginSXPI", */ T:1 },
	0x0122: { /* n:"BrtEndSXPI", */ T:-1 },
	0x0123: { /* n:"BrtBeginSXPIs", */ T:1 },
	0x0124: { /* n:"BrtEndSXPIs", */ T:-1 },
	0x0125: { /* n:"BrtBeginSXDI", */ T:1 },
	0x0126: { /* n:"BrtEndSXDI", */ T:-1 },
	0x0127: { /* n:"BrtBeginSXDIs", */ T:1 },
	0x0128: { /* n:"BrtEndSXDIs", */ T:-1 },
	0x0129: { /* n:"BrtBeginSXLI", */ T:1 },
	0x012A: { /* n:"BrtEndSXLI", */ T:-1 },
	0x012B: { /* n:"BrtBeginSXLIRws", */ T:1 },
	0x012C: { /* n:"BrtEndSXLIRws", */ T:-1 },
	0x012D: { /* n:"BrtBeginSXLICols", */ T:1 },
	0x012E: { /* n:"BrtEndSXLICols", */ T:-1 },
	0x012F: { /* n:"BrtBeginSXFormat", */ T:1 },
	0x0130: { /* n:"BrtEndSXFormat", */ T:-1 },
	0x0131: { /* n:"BrtBeginSXFormats", */ T:1 },
	0x0132: { /* n:"BrtEndSxFormats", */ T:-1 },
	0x0133: { /* n:"BrtBeginSxSelect", */ T:1 },
	0x0134: { /* n:"BrtEndSxSelect", */ T:-1 },
	0x0135: { /* n:"BrtBeginISXVDRws", */ T:1 },
	0x0136: { /* n:"BrtEndISXVDRws", */ T:-1 },
	0x0137: { /* n:"BrtBeginISXVDCols", */ T:1 },
	0x0138: { /* n:"BrtEndISXVDCols", */ T:-1 },
	0x0139: { /* n:"BrtEndSXLocation", */ T:-1 },
	0x013A: { /* n:"BrtBeginSXLocation", */ T:1 },
	0x013B: { /* n:"BrtEndSXView", */ T:-1 },
	0x013C: { /* n:"BrtBeginSXTHs", */ T:1 },
	0x013D: { /* n:"BrtEndSXTHs", */ T:-1 },
	0x013E: { /* n:"BrtBeginSXTH", */ T:1 },
	0x013F: { /* n:"BrtEndSXTH", */ T:-1 },
	0x0140: { /* n:"BrtBeginISXTHRws", */ T:1 },
	0x0141: { /* n:"BrtEndISXTHRws", */ T:-1 },
	0x0142: { /* n:"BrtBeginISXTHCols", */ T:1 },
	0x0143: { /* n:"BrtEndISXTHCols", */ T:-1 },
	0x0144: { /* n:"BrtBeginSXTDMPS", */ T:1 },
	0x0145: { /* n:"BrtEndSXTDMPs", */ T:-1 },
	0x0146: { /* n:"BrtBeginSXTDMP", */ T:1 },
	0x0147: { /* n:"BrtEndSXTDMP", */ T:-1 },
	0x0148: { /* n:"BrtBeginSXTHItems", */ T:1 },
	0x0149: { /* n:"BrtEndSXTHItems", */ T:-1 },
	0x014A: { /* n:"BrtBeginSXTHItem", */ T:1 },
	0x014B: { /* n:"BrtEndSXTHItem", */ T:-1 },
	0x014C: { /* n:"BrtBeginMetadata", */ T:1 },
	0x014D: { /* n:"BrtEndMetadata", */ T:-1 },
	0x014E: { /* n:"BrtBeginEsmdtinfo", */ T:1 },
	0x014F: { /* n:"BrtMdtinfo", */ f:parse_BrtMdtinfo },
	0x0150: { /* n:"BrtEndEsmdtinfo", */ T:-1 },
	0x0151: { /* n:"BrtBeginEsmdb", */ f:parse_BrtBeginEsmdb, T:1 },
	0x0152: { /* n:"BrtEndEsmdb", */ T:-1 },
	0x0153: { /* n:"BrtBeginEsfmd", */ T:1 },
	0x0154: { /* n:"BrtEndEsfmd", */ T:-1 },
	0x0155: { /* n:"BrtBeginSingleCells", */ T:1 },
	0x0156: { /* n:"BrtEndSingleCells", */ T:-1 },
	0x0157: { /* n:"BrtBeginList", */ T:1 },
	0x0158: { /* n:"BrtEndList", */ T:-1 },
	0x0159: { /* n:"BrtBeginListCols", */ T:1 },
	0x015A: { /* n:"BrtEndListCols", */ T:-1 },
	0x015B: { /* n:"BrtBeginListCol", */ T:1 },
	0x015C: { /* n:"BrtEndListCol", */ T:-1 },
	0x015D: { /* n:"BrtBeginListXmlCPr", */ T:1 },
	0x015E: { /* n:"BrtEndListXmlCPr", */ T:-1 },
	0x015F: { /* n:"BrtListCCFmla" */ },
	0x0160: { /* n:"BrtListTrFmla" */ },
	0x0161: { /* n:"BrtBeginExternals", */ T:1 },
	0x0162: { /* n:"BrtEndExternals", */ T:-1 },
	0x0163: { /* n:"BrtSupBookSrc", */ f:parse_RelID},
	0x0165: { /* n:"BrtSupSelf" */ },
	0x0166: { /* n:"BrtSupSame" */ },
	0x0167: { /* n:"BrtSupTabs" */ },
	0x0168: { /* n:"BrtBeginSupBook", */ T:1 },
	0x0169: { /* n:"BrtPlaceholderName" */ },
	0x016A: { /* n:"BrtExternSheet", */ f:parse_ExternSheet },
	0x016B: { /* n:"BrtExternTableStart" */ },
	0x016C: { /* n:"BrtExternTableEnd" */ },
	0x016E: { /* n:"BrtExternRowHdr" */ },
	0x016F: { /* n:"BrtExternCellBlank" */ },
	0x0170: { /* n:"BrtExternCellReal" */ },
	0x0171: { /* n:"BrtExternCellBool" */ },
	0x0172: { /* n:"BrtExternCellError" */ },
	0x0173: { /* n:"BrtExternCellString" */ },
	0x0174: { /* n:"BrtBeginEsmdx", */ T:1 },
	0x0175: { /* n:"BrtEndEsmdx", */ T:-1 },
	0x0176: { /* n:"BrtBeginMdxSet", */ T:1 },
	0x0177: { /* n:"BrtEndMdxSet", */ T:-1 },
	0x0178: { /* n:"BrtBeginMdxMbrProp", */ T:1 },
	0x0179: { /* n:"BrtEndMdxMbrProp", */ T:-1 },
	0x017A: { /* n:"BrtBeginMdxKPI", */ T:1 },
	0x017B: { /* n:"BrtEndMdxKPI", */ T:-1 },
	0x017C: { /* n:"BrtBeginEsstr", */ T:1 },
	0x017D: { /* n:"BrtEndEsstr", */ T:-1 },
	0x017E: { /* n:"BrtBeginPRFItem", */ T:1 },
	0x017F: { /* n:"BrtEndPRFItem", */ T:-1 },
	0x0180: { /* n:"BrtBeginPivotCacheIDs", */ T:1 },
	0x0181: { /* n:"BrtEndPivotCacheIDs", */ T:-1 },
	0x0182: { /* n:"BrtBeginPivotCacheID", */ T:1 },
	0x0183: { /* n:"BrtEndPivotCacheID", */ T:-1 },
	0x0184: { /* n:"BrtBeginISXVIs", */ T:1 },
	0x0185: { /* n:"BrtEndISXVIs", */ T:-1 },
	0x0186: { /* n:"BrtBeginColInfos", */ T:1 },
	0x0187: { /* n:"BrtEndColInfos", */ T:-1 },
	0x0188: { /* n:"BrtBeginRwBrk", */ T:1 },
	0x0189: { /* n:"BrtEndRwBrk", */ T:-1 },
	0x018A: { /* n:"BrtBeginColBrk", */ T:1 },
	0x018B: { /* n:"BrtEndColBrk", */ T:-1 },
	0x018C: { /* n:"BrtBrk" */ },
	0x018D: { /* n:"BrtUserBookView" */ },
	0x018E: { /* n:"BrtInfo" */ },
	0x018F: { /* n:"BrtCUsr" */ },
	0x0190: { /* n:"BrtUsr" */ },
	0x0191: { /* n:"BrtBeginUsers", */ T:1 },
	0x0193: { /* n:"BrtEOF" */ },
	0x0194: { /* n:"BrtUCR" */ },
	0x0195: { /* n:"BrtRRInsDel" */ },
	0x0196: { /* n:"BrtRREndInsDel" */ },
	0x0197: { /* n:"BrtRRMove" */ },
	0x0198: { /* n:"BrtRREndMove" */ },
	0x0199: { /* n:"BrtRRChgCell" */ },
	0x019A: { /* n:"BrtRREndChgCell" */ },
	0x019B: { /* n:"BrtRRHeader" */ },
	0x019C: { /* n:"BrtRRUserView" */ },
	0x019D: { /* n:"BrtRRRenSheet" */ },
	0x019E: { /* n:"BrtRRInsertSh" */ },
	0x019F: { /* n:"BrtRRDefName" */ },
	0x01A0: { /* n:"BrtRRNote" */ },
	0x01A1: { /* n:"BrtRRConflict" */ },
	0x01A2: { /* n:"BrtRRTQSIF" */ },
	0x01A3: { /* n:"BrtRRFormat" */ },
	0x01A4: { /* n:"BrtRREndFormat" */ },
	0x01A5: { /* n:"BrtRRAutoFmt" */ },
	0x01A6: { /* n:"BrtBeginUserShViews", */ T:1 },
	0x01A7: { /* n:"BrtBeginUserShView", */ T:1 },
	0x01A8: { /* n:"BrtEndUserShView", */ T:-1 },
	0x01A9: { /* n:"BrtEndUserShViews", */ T:-1 },
	0x01AA: { /* n:"BrtArrFmla", */ f:parse_BrtArrFmla },
	0x01AB: { /* n:"BrtShrFmla", */ f:parse_BrtShrFmla },
	0x01AC: { /* n:"BrtTable" */ },
	0x01AD: { /* n:"BrtBeginExtConnections", */ T:1 },
	0x01AE: { /* n:"BrtEndExtConnections", */ T:-1 },
	0x01AF: { /* n:"BrtBeginPCDCalcMems", */ T:1 },
	0x01B0: { /* n:"BrtEndPCDCalcMems", */ T:-1 },
	0x01B1: { /* n:"BrtBeginPCDCalcMem", */ T:1 },
	0x01B2: { /* n:"BrtEndPCDCalcMem", */ T:-1 },
	0x01B3: { /* n:"BrtBeginPCDHGLevels", */ T:1 },
	0x01B4: { /* n:"BrtEndPCDHGLevels", */ T:-1 },
	0x01B5: { /* n:"BrtBeginPCDHGLevel", */ T:1 },
	0x01B6: { /* n:"BrtEndPCDHGLevel", */ T:-1 },
	0x01B7: { /* n:"BrtBeginPCDHGLGroups", */ T:1 },
	0x01B8: { /* n:"BrtEndPCDHGLGroups", */ T:-1 },
	0x01B9: { /* n:"BrtBeginPCDHGLGroup", */ T:1 },
	0x01BA: { /* n:"BrtEndPCDHGLGroup", */ T:-1 },
	0x01BB: { /* n:"BrtBeginPCDHGLGMembers", */ T:1 },
	0x01BC: { /* n:"BrtEndPCDHGLGMembers", */ T:-1 },
	0x01BD: { /* n:"BrtBeginPCDHGLGMember", */ T:1 },
	0x01BE: { /* n:"BrtEndPCDHGLGMember", */ T:-1 },
	0x01BF: { /* n:"BrtBeginQSI", */ T:1 },
	0x01C0: { /* n:"BrtEndQSI", */ T:-1 },
	0x01C1: { /* n:"BrtBeginQSIR", */ T:1 },
	0x01C2: { /* n:"BrtEndQSIR", */ T:-1 },
	0x01C3: { /* n:"BrtBeginDeletedNames", */ T:1 },
	0x01C4: { /* n:"BrtEndDeletedNames", */ T:-1 },
	0x01C5: { /* n:"BrtBeginDeletedName", */ T:1 },
	0x01C6: { /* n:"BrtEndDeletedName", */ T:-1 },
	0x01C7: { /* n:"BrtBeginQSIFs", */ T:1 },
	0x01C8: { /* n:"BrtEndQSIFs", */ T:-1 },
	0x01C9: { /* n:"BrtBeginQSIF", */ T:1 },
	0x01CA: { /* n:"BrtEndQSIF", */ T:-1 },
	0x01CB: { /* n:"BrtBeginAutoSortScope", */ T:1 },
	0x01CC: { /* n:"BrtEndAutoSortScope", */ T:-1 },
	0x01CD: { /* n:"BrtBeginConditionalFormatting", */ T:1 },
	0x01CE: { /* n:"BrtEndConditionalFormatting", */ T:-1 },
	0x01CF: { /* n:"BrtBeginCFRule", */ T:1 },
	0x01D0: { /* n:"BrtEndCFRule", */ T:-1 },
	0x01D1: { /* n:"BrtBeginIconSet", */ T:1 },
	0x01D2: { /* n:"BrtEndIconSet", */ T:-1 },
	0x01D3: { /* n:"BrtBeginDatabar", */ T:1 },
	0x01D4: { /* n:"BrtEndDatabar", */ T:-1 },
	0x01D5: { /* n:"BrtBeginColorScale", */ T:1 },
	0x01D6: { /* n:"BrtEndColorScale", */ T:-1 },
	0x01D7: { /* n:"BrtCFVO" */ },
	0x01D8: { /* n:"BrtExternValueMeta" */ },
	0x01D9: { /* n:"BrtBeginColorPalette", */ T:1 },
	0x01DA: { /* n:"BrtEndColorPalette", */ T:-1 },
	0x01DB: { /* n:"BrtIndexedColor" */ },
	0x01DC: { /* n:"BrtMargins", */ f:parse_BrtMargins },
	0x01DD: { /* n:"BrtPrintOptions" */ },
	0x01DE: { /* n:"BrtPageSetup" */ },
	0x01DF: { /* n:"BrtBeginHeaderFooter", */ T:1 },
	0x01E0: { /* n:"BrtEndHeaderFooter", */ T:-1 },
	0x01E1: { /* n:"BrtBeginSXCrtFormat", */ T:1 },
	0x01E2: { /* n:"BrtEndSXCrtFormat", */ T:-1 },
	0x01E3: { /* n:"BrtBeginSXCrtFormats", */ T:1 },
	0x01E4: { /* n:"BrtEndSXCrtFormats", */ T:-1 },
	0x01E5: { /* n:"BrtWsFmtInfo", */ f:parse_BrtWsFmtInfo },
	0x01E6: { /* n:"BrtBeginMgs", */ T:1 },
	0x01E7: { /* n:"BrtEndMGs", */ T:-1 },
	0x01E8: { /* n:"BrtBeginMGMaps", */ T:1 },
	0x01E9: { /* n:"BrtEndMGMaps", */ T:-1 },
	0x01EA: { /* n:"BrtBeginMG", */ T:1 },
	0x01EB: { /* n:"BrtEndMG", */ T:-1 },
	0x01EC: { /* n:"BrtBeginMap", */ T:1 },
	0x01ED: { /* n:"BrtEndMap", */ T:-1 },
	0x01EE: { /* n:"BrtHLink", */ f:parse_BrtHLink },
	0x01EF: { /* n:"BrtBeginDCon", */ T:1 },
	0x01F0: { /* n:"BrtEndDCon", */ T:-1 },
	0x01F1: { /* n:"BrtBeginDRefs", */ T:1 },
	0x01F2: { /* n:"BrtEndDRefs", */ T:-1 },
	0x01F3: { /* n:"BrtDRef" */ },
	0x01F4: { /* n:"BrtBeginScenMan", */ T:1 },
	0x01F5: { /* n:"BrtEndScenMan", */ T:-1 },
	0x01F6: { /* n:"BrtBeginSct", */ T:1 },
	0x01F7: { /* n:"BrtEndSct", */ T:-1 },
	0x01F8: { /* n:"BrtSlc" */ },
	0x01F9: { /* n:"BrtBeginDXFs", */ T:1 },
	0x01FA: { /* n:"BrtEndDXFs", */ T:-1 },
	0x01FB: { /* n:"BrtDXF" */ },
	0x01FC: { /* n:"BrtBeginTableStyles", */ T:1 },
	0x01FD: { /* n:"BrtEndTableStyles", */ T:-1 },
	0x01FE: { /* n:"BrtBeginTableStyle", */ T:1 },
	0x01FF: { /* n:"BrtEndTableStyle", */ T:-1 },
	0x0200: { /* n:"BrtTableStyleElement" */ },
	0x0201: { /* n:"BrtTableStyleClient" */ },
	0x0202: { /* n:"BrtBeginVolDeps", */ T:1 },
	0x0203: { /* n:"BrtEndVolDeps", */ T:-1 },
	0x0204: { /* n:"BrtBeginVolType", */ T:1 },
	0x0205: { /* n:"BrtEndVolType", */ T:-1 },
	0x0206: { /* n:"BrtBeginVolMain", */ T:1 },
	0x0207: { /* n:"BrtEndVolMain", */ T:-1 },
	0x0208: { /* n:"BrtBeginVolTopic", */ T:1 },
	0x0209: { /* n:"BrtEndVolTopic", */ T:-1 },
	0x020A: { /* n:"BrtVolSubtopic" */ },
	0x020B: { /* n:"BrtVolRef" */ },
	0x020C: { /* n:"BrtVolNum" */ },
	0x020D: { /* n:"BrtVolErr" */ },
	0x020E: { /* n:"BrtVolStr" */ },
	0x020F: { /* n:"BrtVolBool" */ },
	0x0210: { /* n:"BrtBeginCalcChain$", */ T:1 },
	0x0211: { /* n:"BrtEndCalcChain$", */ T:-1 },
	0x0212: { /* n:"BrtBeginSortState", */ T:1 },
	0x0213: { /* n:"BrtEndSortState", */ T:-1 },
	0x0214: { /* n:"BrtBeginSortCond", */ T:1 },
	0x0215: { /* n:"BrtEndSortCond", */ T:-1 },
	0x0216: { /* n:"BrtBookProtection" */ },
	0x0217: { /* n:"BrtSheetProtection" */ },
	0x0218: { /* n:"BrtRangeProtection" */ },
	0x0219: { /* n:"BrtPhoneticInfo" */ },
	0x021A: { /* n:"BrtBeginECTxtWiz", */ T:1 },
	0x021B: { /* n:"BrtEndECTxtWiz", */ T:-1 },
	0x021C: { /* n:"BrtBeginECTWFldInfoLst", */ T:1 },
	0x021D: { /* n:"BrtEndECTWFldInfoLst", */ T:-1 },
	0x021E: { /* n:"BrtBeginECTwFldInfo", */ T:1 },
	0x0224: { /* n:"BrtFileSharing" */ },
	0x0225: { /* n:"BrtOleSize" */ },
	0x0226: { /* n:"BrtDrawing", */ f:parse_RelID },
	0x0227: { /* n:"BrtLegacyDrawing", */ f:parse_XLNullableWideString },
	0x0228: { /* n:"BrtLegacyDrawingHF" */ },
	0x0229: { /* n:"BrtWebOpt" */ },
	0x022A: { /* n:"BrtBeginWebPubItems", */ T:1 },
	0x022B: { /* n:"BrtEndWebPubItems", */ T:-1 },
	0x022C: { /* n:"BrtBeginWebPubItem", */ T:1 },
	0x022D: { /* n:"BrtEndWebPubItem", */ T:-1 },
	0x022E: { /* n:"BrtBeginSXCondFmt", */ T:1 },
	0x022F: { /* n:"BrtEndSXCondFmt", */ T:-1 },
	0x0230: { /* n:"BrtBeginSXCondFmts", */ T:1 },
	0x0231: { /* n:"BrtEndSXCondFmts", */ T:-1 },
	0x0232: { /* n:"BrtBkHim" */ },
	0x0234: { /* n:"BrtColor" */ },
	0x0235: { /* n:"BrtBeginIndexedColors", */ T:1 },
	0x0236: { /* n:"BrtEndIndexedColors", */ T:-1 },
	0x0239: { /* n:"BrtBeginMRUColors", */ T:1 },
	0x023A: { /* n:"BrtEndMRUColors", */ T:-1 },
	0x023C: { /* n:"BrtMRUColor" */ },
	0x023D: { /* n:"BrtBeginDVals", */ T:1 },
	0x023E: { /* n:"BrtEndDVals", */ T:-1 },
	0x0241: { /* n:"BrtSupNameStart" */ },
	0x0242: { /* n:"BrtSupNameValueStart" */ },
	0x0243: { /* n:"BrtSupNameValueEnd" */ },
	0x0244: { /* n:"BrtSupNameNum" */ },
	0x0245: { /* n:"BrtSupNameErr" */ },
	0x0246: { /* n:"BrtSupNameSt" */ },
	0x0247: { /* n:"BrtSupNameNil" */ },
	0x0248: { /* n:"BrtSupNameBool" */ },
	0x0249: { /* n:"BrtSupNameFmla" */ },
	0x024A: { /* n:"BrtSupNameBits" */ },
	0x024B: { /* n:"BrtSupNameEnd" */ },
	0x024C: { /* n:"BrtEndSupBook", */ T:-1 },
	0x024D: { /* n:"BrtCellSmartTagProperty" */ },
	0x024E: { /* n:"BrtBeginCellSmartTag", */ T:1 },
	0x024F: { /* n:"BrtEndCellSmartTag", */ T:-1 },
	0x0250: { /* n:"BrtBeginCellSmartTags", */ T:1 },
	0x0251: { /* n:"BrtEndCellSmartTags", */ T:-1 },
	0x0252: { /* n:"BrtBeginSmartTags", */ T:1 },
	0x0253: { /* n:"BrtEndSmartTags", */ T:-1 },
	0x0254: { /* n:"BrtSmartTagType" */ },
	0x0255: { /* n:"BrtBeginSmartTagTypes", */ T:1 },
	0x0256: { /* n:"BrtEndSmartTagTypes", */ T:-1 },
	0x0257: { /* n:"BrtBeginSXFilters", */ T:1 },
	0x0258: { /* n:"BrtEndSXFilters", */ T:-1 },
	0x0259: { /* n:"BrtBeginSXFILTER", */ T:1 },
	0x025A: { /* n:"BrtEndSXFilter", */ T:-1 },
	0x025B: { /* n:"BrtBeginFills", */ T:1 },
	0x025C: { /* n:"BrtEndFills", */ T:-1 },
	0x025D: { /* n:"BrtBeginCellWatches", */ T:1 },
	0x025E: { /* n:"BrtEndCellWatches", */ T:-1 },
	0x025F: { /* n:"BrtCellWatch" */ },
	0x0260: { /* n:"BrtBeginCRErrs", */ T:1 },
	0x0261: { /* n:"BrtEndCRErrs", */ T:-1 },
	0x0262: { /* n:"BrtCrashRecErr" */ },
	0x0263: { /* n:"BrtBeginFonts", */ T:1 },
	0x0264: { /* n:"BrtEndFonts", */ T:-1 },
	0x0265: { /* n:"BrtBeginBorders", */ T:1 },
	0x0266: { /* n:"BrtEndBorders", */ T:-1 },
	0x0267: { /* n:"BrtBeginFmts", */ T:1 },
	0x0268: { /* n:"BrtEndFmts", */ T:-1 },
	0x0269: { /* n:"BrtBeginCellXFs", */ T:1 },
	0x026A: { /* n:"BrtEndCellXFs", */ T:-1 },
	0x026B: { /* n:"BrtBeginStyles", */ T:1 },
	0x026C: { /* n:"BrtEndStyles", */ T:-1 },
	0x0271: { /* n:"BrtBigName" */ },
	0x0272: { /* n:"BrtBeginCellStyleXFs", */ T:1 },
	0x0273: { /* n:"BrtEndCellStyleXFs", */ T:-1 },
	0x0274: { /* n:"BrtBeginComments", */ T:1 },
	0x0275: { /* n:"BrtEndComments", */ T:-1 },
	0x0276: { /* n:"BrtBeginCommentAuthors", */ T:1 },
	0x0277: { /* n:"BrtEndCommentAuthors", */ T:-1 },
	0x0278: { /* n:"BrtCommentAuthor", */ f:parse_BrtCommentAuthor },
	0x0279: { /* n:"BrtBeginCommentList", */ T:1 },
	0x027A: { /* n:"BrtEndCommentList", */ T:-1 },
	0x027B: { /* n:"BrtBeginComment", */ T:1, f:parse_BrtBeginComment},
	0x027C: { /* n:"BrtEndComment", */ T:-1 },
	0x027D: { /* n:"BrtCommentText", */ f:parse_BrtCommentText },
	0x027E: { /* n:"BrtBeginOleObjects", */ T:1 },
	0x027F: { /* n:"BrtOleObject" */ },
	0x0280: { /* n:"BrtEndOleObjects", */ T:-1 },
	0x0281: { /* n:"BrtBeginSxrules", */ T:1 },
	0x0282: { /* n:"BrtEndSxRules", */ T:-1 },
	0x0283: { /* n:"BrtBeginActiveXControls", */ T:1 },
	0x0284: { /* n:"BrtActiveX" */ },
	0x0285: { /* n:"BrtEndActiveXControls", */ T:-1 },
	0x0286: { /* n:"BrtBeginPCDSDTCEMembersSortBy", */ T:1 },
	0x0288: { /* n:"BrtBeginCellIgnoreECs", */ T:1 },
	0x0289: { /* n:"BrtCellIgnoreEC" */ },
	0x028A: { /* n:"BrtEndCellIgnoreECs", */ T:-1 },
	0x028B: { /* n:"BrtCsProp", */ f:parse_BrtCsProp },
	0x028C: { /* n:"BrtCsPageSetup" */ },
	0x028D: { /* n:"BrtBeginUserCsViews", */ T:1 },
	0x028E: { /* n:"BrtEndUserCsViews", */ T:-1 },
	0x028F: { /* n:"BrtBeginUserCsView", */ T:1 },
	0x0290: { /* n:"BrtEndUserCsView", */ T:-1 },
	0x0291: { /* n:"BrtBeginPcdSFCIEntries", */ T:1 },
	0x0292: { /* n:"BrtEndPCDSFCIEntries", */ T:-1 },
	0x0293: { /* n:"BrtPCDSFCIEntry" */ },
	0x0294: { /* n:"BrtBeginListParts", */ T:1 },
	0x0295: { /* n:"BrtListPart" */ },
	0x0296: { /* n:"BrtEndListParts", */ T:-1 },
	0x0297: { /* n:"BrtSheetCalcProp" */ },
	0x0298: { /* n:"BrtBeginFnGroup", */ T:1 },
	0x0299: { /* n:"BrtFnGroup" */ },
	0x029A: { /* n:"BrtEndFnGroup", */ T:-1 },
	0x029B: { /* n:"BrtSupAddin" */ },
	0x029C: { /* n:"BrtSXTDMPOrder" */ },
	0x029D: { /* n:"BrtCsProtection" */ },
	0x029F: { /* n:"BrtBeginWsSortMap", */ T:1 },
	0x02A0: { /* n:"BrtEndWsSortMap", */ T:-1 },
	0x02A1: { /* n:"BrtBeginRRSort", */ T:1 },
	0x02A2: { /* n:"BrtEndRRSort", */ T:-1 },
	0x02A3: { /* n:"BrtRRSortItem" */ },
	0x02A4: { /* n:"BrtFileSharingIso" */ },
	0x02A5: { /* n:"BrtBookProtectionIso" */ },
	0x02A6: { /* n:"BrtSheetProtectionIso" */ },
	0x02A7: { /* n:"BrtCsProtectionIso" */ },
	0x02A8: { /* n:"BrtRangeProtectionIso" */ },
	0x02A9: { /* n:"BrtDValList" */ },
	0x0400: { /* n:"BrtRwDescent" */ },
	0x0401: { /* n:"BrtKnownFonts" */ },
	0x0402: { /* n:"BrtBeginSXTupleSet", */ T:1 },
	0x0403: { /* n:"BrtEndSXTupleSet", */ T:-1 },
	0x0404: { /* n:"BrtBeginSXTupleSetHeader", */ T:1 },
	0x0405: { /* n:"BrtEndSXTupleSetHeader", */ T:-1 },
	0x0406: { /* n:"BrtSXTupleSetHeaderItem" */ },
	0x0407: { /* n:"BrtBeginSXTupleSetData", */ T:1 },
	0x0408: { /* n:"BrtEndSXTupleSetData", */ T:-1 },
	0x0409: { /* n:"BrtBeginSXTupleSetRow", */ T:1 },
	0x040A: { /* n:"BrtEndSXTupleSetRow", */ T:-1 },
	0x040B: { /* n:"BrtSXTupleSetRowItem" */ },
	0x040C: { /* n:"BrtNameExt" */ },
	0x040D: { /* n:"BrtPCDH14" */ },
	0x040E: { /* n:"BrtBeginPCDCalcMem14", */ T:1 },
	0x040F: { /* n:"BrtEndPCDCalcMem14", */ T:-1 },
	0x0410: { /* n:"BrtSXTH14" */ },
	0x0411: { /* n:"BrtBeginSparklineGroup", */ T:1 },
	0x0412: { /* n:"BrtEndSparklineGroup", */ T:-1 },
	0x0413: { /* n:"BrtSparkline" */ },
	0x0414: { /* n:"BrtSXDI14" */ },
	0x0415: { /* n:"BrtWsFmtInfoEx14" */ },
	0x0416: { /* n:"BrtBeginConditionalFormatting14", */ T:1 },
	0x0417: { /* n:"BrtEndConditionalFormatting14", */ T:-1 },
	0x0418: { /* n:"BrtBeginCFRule14", */ T:1 },
	0x0419: { /* n:"BrtEndCFRule14", */ T:-1 },
	0x041A: { /* n:"BrtCFVO14" */ },
	0x041B: { /* n:"BrtBeginDatabar14", */ T:1 },
	0x041C: { /* n:"BrtBeginIconSet14", */ T:1 },
	0x041D: { /* n:"BrtDVal14", */ f: parse_BrtDVal14 },
	0x041E: { /* n:"BrtBeginDVals14", */ T:1 },
	0x041F: { /* n:"BrtColor14" */ },
	0x0420: { /* n:"BrtBeginSparklines", */ T:1 },
	0x0421: { /* n:"BrtEndSparklines", */ T:-1 },
	0x0422: { /* n:"BrtBeginSparklineGroups", */ T:1 },
	0x0423: { /* n:"BrtEndSparklineGroups", */ T:-1 },
	0x0425: { /* n:"BrtSXVD14" */ },
	0x0426: { /* n:"BrtBeginSXView14", */ T:1 },
	0x0427: { /* n:"BrtEndSXView14", */ T:-1 },
	0x0428: { /* n:"BrtBeginSXView16", */ T:1 },
	0x0429: { /* n:"BrtEndSXView16", */ T:-1 },
	0x042A: { /* n:"BrtBeginPCD14", */ T:1 },
	0x042B: { /* n:"BrtEndPCD14", */ T:-1 },
	0x042C: { /* n:"BrtBeginExtConn14", */ T:1 },
	0x042D: { /* n:"BrtEndExtConn14", */ T:-1 },
	0x042E: { /* n:"BrtBeginSlicerCacheIDs", */ T:1 },
	0x042F: { /* n:"BrtEndSlicerCacheIDs", */ T:-1 },
	0x0430: { /* n:"BrtBeginSlicerCacheID", */ T:1 },
	0x0431: { /* n:"BrtEndSlicerCacheID", */ T:-1 },
	0x0433: { /* n:"BrtBeginSlicerCache", */ T:1 },
	0x0434: { /* n:"BrtEndSlicerCache", */ T:-1 },
	0x0435: { /* n:"BrtBeginSlicerCacheDef", */ T:1 },
	0x0436: { /* n:"BrtEndSlicerCacheDef", */ T:-1 },
	0x0437: { /* n:"BrtBeginSlicersEx", */ T:1 },
	0x0438: { /* n:"BrtEndSlicersEx", */ T:-1 },
	0x0439: { /* n:"BrtBeginSlicerEx", */ T:1 },
	0x043A: { /* n:"BrtEndSlicerEx", */ T:-1 },
	0x043B: { /* n:"BrtBeginSlicer", */ T:1 },
	0x043C: { /* n:"BrtEndSlicer", */ T:-1 },
	0x043D: { /* n:"BrtSlicerCachePivotTables" */ },
	0x043E: { /* n:"BrtBeginSlicerCacheOlapImpl", */ T:1 },
	0x043F: { /* n:"BrtEndSlicerCacheOlapImpl", */ T:-1 },
	0x0440: { /* n:"BrtBeginSlicerCacheLevelsData", */ T:1 },
	0x0441: { /* n:"BrtEndSlicerCacheLevelsData", */ T:-1 },
	0x0442: { /* n:"BrtBeginSlicerCacheLevelData", */ T:1 },
	0x0443: { /* n:"BrtEndSlicerCacheLevelData", */ T:-1 },
	0x0444: { /* n:"BrtBeginSlicerCacheSiRanges", */ T:1 },
	0x0445: { /* n:"BrtEndSlicerCacheSiRanges", */ T:-1 },
	0x0446: { /* n:"BrtBeginSlicerCacheSiRange", */ T:1 },
	0x0447: { /* n:"BrtEndSlicerCacheSiRange", */ T:-1 },
	0x0448: { /* n:"BrtSlicerCacheOlapItem" */ },
	0x0449: { /* n:"BrtBeginSlicerCacheSelections", */ T:1 },
	0x044A: { /* n:"BrtSlicerCacheSelection" */ },
	0x044B: { /* n:"BrtEndSlicerCacheSelections", */ T:-1 },
	0x044C: { /* n:"BrtBeginSlicerCacheNative", */ T:1 },
	0x044D: { /* n:"BrtEndSlicerCacheNative", */ T:-1 },
	0x044E: { /* n:"BrtSlicerCacheNativeItem" */ },
	0x044F: { /* n:"BrtRangeProtection14" */ },
	0x0450: { /* n:"BrtRangeProtectionIso14" */ },
	0x0451: { /* n:"BrtCellIgnoreEC14" */ },
	0x0457: { /* n:"BrtList14" */ },
	0x0458: { /* n:"BrtCFIcon" */ },
	0x0459: { /* n:"BrtBeginSlicerCachesPivotCacheIDs", */ T:1 },
	0x045A: { /* n:"BrtEndSlicerCachesPivotCacheIDs", */ T:-1 },
	0x045B: { /* n:"BrtBeginSlicers", */ T:1 },
	0x045C: { /* n:"BrtEndSlicers", */ T:-1 },
	0x045D: { /* n:"BrtWbProp14" */ },
	0x045E: { /* n:"BrtBeginSXEdit", */ T:1 },
	0x045F: { /* n:"BrtEndSXEdit", */ T:-1 },
	0x0460: { /* n:"BrtBeginSXEdits", */ T:1 },
	0x0461: { /* n:"BrtEndSXEdits", */ T:-1 },
	0x0462: { /* n:"BrtBeginSXChange", */ T:1 },
	0x0463: { /* n:"BrtEndSXChange", */ T:-1 },
	0x0464: { /* n:"BrtBeginSXChanges", */ T:1 },
	0x0465: { /* n:"BrtEndSXChanges", */ T:-1 },
	0x0466: { /* n:"BrtSXTupleItems" */ },
	0x0468: { /* n:"BrtBeginSlicerStyle", */ T:1 },
	0x0469: { /* n:"BrtEndSlicerStyle", */ T:-1 },
	0x046A: { /* n:"BrtSlicerStyleElement" */ },
	0x046B: { /* n:"BrtBeginStyleSheetExt14", */ T:1 },
	0x046C: { /* n:"BrtEndStyleSheetExt14", */ T:-1 },
	0x046D: { /* n:"BrtBeginSlicerCachesPivotCacheID", */ T:1 },
	0x046E: { /* n:"BrtEndSlicerCachesPivotCacheID", */ T:-1 },
	0x046F: { /* n:"BrtBeginConditionalFormattings", */ T:1 },
	0x0470: { /* n:"BrtEndConditionalFormattings", */ T:-1 },
	0x0471: { /* n:"BrtBeginPCDCalcMemExt", */ T:1 },
	0x0472: { /* n:"BrtEndPCDCalcMemExt", */ T:-1 },
	0x0473: { /* n:"BrtBeginPCDCalcMemsExt", */ T:1 },
	0x0474: { /* n:"BrtEndPCDCalcMemsExt", */ T:-1 },
	0x0475: { /* n:"BrtPCDField14" */ },
	0x0476: { /* n:"BrtBeginSlicerStyles", */ T:1 },
	0x0477: { /* n:"BrtEndSlicerStyles", */ T:-1 },
	0x0478: { /* n:"BrtBeginSlicerStyleElements", */ T:1 },
	0x0479: { /* n:"BrtEndSlicerStyleElements", */ T:-1 },
	0x047A: { /* n:"BrtCFRuleExt" */ },
	0x047B: { /* n:"BrtBeginSXCondFmt14", */ T:1 },
	0x047C: { /* n:"BrtEndSXCondFmt14", */ T:-1 },
	0x047D: { /* n:"BrtBeginSXCondFmts14", */ T:1 },
	0x047E: { /* n:"BrtEndSXCondFmts14", */ T:-1 },
	0x0480: { /* n:"BrtBeginSortCond14", */ T:1 },
	0x0481: { /* n:"BrtEndSortCond14", */ T:-1 },
	0x0482: { /* n:"BrtEndDVals14", */ T:-1 },
	0x0483: { /* n:"BrtEndIconSet14", */ T:-1 },
	0x0484: { /* n:"BrtEndDatabar14", */ T:-1 },
	0x0485: { /* n:"BrtBeginColorScale14", */ T:1 },
	0x0486: { /* n:"BrtEndColorScale14", */ T:-1 },
	0x0487: { /* n:"BrtBeginSxrules14", */ T:1 },
	0x0488: { /* n:"BrtEndSxrules14", */ T:-1 },
	0x0489: { /* n:"BrtBeginPRule14", */ T:1 },
	0x048A: { /* n:"BrtEndPRule14", */ T:-1 },
	0x048B: { /* n:"BrtBeginPRFilters14", */ T:1 },
	0x048C: { /* n:"BrtEndPRFilters14", */ T:-1 },
	0x048D: { /* n:"BrtBeginPRFilter14", */ T:1 },
	0x048E: { /* n:"BrtEndPRFilter14", */ T:-1 },
	0x048F: { /* n:"BrtBeginPRFItem14", */ T:1 },
	0x0490: { /* n:"BrtEndPRFItem14", */ T:-1 },
	0x0491: { /* n:"BrtBeginCellIgnoreECs14", */ T:1 },
	0x0492: { /* n:"BrtEndCellIgnoreECs14", */ T:-1 },
	0x0493: { /* n:"BrtDxf14" */ },
	0x0494: { /* n:"BrtBeginDxF14s", */ T:1 },
	0x0495: { /* n:"BrtEndDxf14s", */ T:-1 },
	0x0499: { /* n:"BrtFilter14" */ },
	0x049A: { /* n:"BrtBeginCustomFilters14", */ T:1 },
	0x049C: { /* n:"BrtCustomFilter14" */ },
	0x049D: { /* n:"BrtIconFilter14" */ },
	0x049E: { /* n:"BrtPivotCacheConnectionName" */ },
	0x0800: { /* n:"BrtBeginDecoupledPivotCacheIDs", */ T:1 },
	0x0801: { /* n:"BrtEndDecoupledPivotCacheIDs", */ T:-1 },
	0x0802: { /* n:"BrtDecoupledPivotCacheID" */ },
	0x0803: { /* n:"BrtBeginPivotTableRefs", */ T:1 },
	0x0804: { /* n:"BrtEndPivotTableRefs", */ T:-1 },
	0x0805: { /* n:"BrtPivotTableRef" */ },
	0x0806: { /* n:"BrtSlicerCacheBookPivotTables" */ },
	0x0807: { /* n:"BrtBeginSxvcells", */ T:1 },
	0x0808: { /* n:"BrtEndSxvcells", */ T:-1 },
	0x0809: { /* n:"BrtBeginSxRow", */ T:1 },
	0x080A: { /* n:"BrtEndSxRow", */ T:-1 },
	0x080C: { /* n:"BrtPcdCalcMem15" */ },
	0x0813: { /* n:"BrtQsi15" */ },
	0x0814: { /* n:"BrtBeginWebExtensions", */ T:1 },
	0x0815: { /* n:"BrtEndWebExtensions", */ T:-1 },
	0x0816: { /* n:"BrtWebExtension" */ },
	0x0817: { /* n:"BrtAbsPath15" */ },
	0x0818: { /* n:"BrtBeginPivotTableUISettings", */ T:1 },
	0x0819: { /* n:"BrtEndPivotTableUISettings", */ T:-1 },
	0x081B: { /* n:"BrtTableSlicerCacheIDs" */ },
	0x081C: { /* n:"BrtTableSlicerCacheID" */ },
	0x081D: { /* n:"BrtBeginTableSlicerCache", */ T:1 },
	0x081E: { /* n:"BrtEndTableSlicerCache", */ T:-1 },
	0x081F: { /* n:"BrtSxFilter15" */ },
	0x0820: { /* n:"BrtBeginTimelineCachePivotCacheIDs", */ T:1 },
	0x0821: { /* n:"BrtEndTimelineCachePivotCacheIDs", */ T:-1 },
	0x0822: { /* n:"BrtTimelineCachePivotCacheID" */ },
	0x0823: { /* n:"BrtBeginTimelineCacheIDs", */ T:1 },
	0x0824: { /* n:"BrtEndTimelineCacheIDs", */ T:-1 },
	0x0825: { /* n:"BrtBeginTimelineCacheID", */ T:1 },
	0x0826: { /* n:"BrtEndTimelineCacheID", */ T:-1 },
	0x0827: { /* n:"BrtBeginTimelinesEx", */ T:1 },
	0x0828: { /* n:"BrtEndTimelinesEx", */ T:-1 },
	0x0829: { /* n:"BrtBeginTimelineEx", */ T:1 },
	0x082A: { /* n:"BrtEndTimelineEx", */ T:-1 },
	0x082B: { /* n:"BrtWorkBookPr15" */ },
	0x082C: { /* n:"BrtPCDH15" */ },
	0x082D: { /* n:"BrtBeginTimelineStyle", */ T:1 },
	0x082E: { /* n:"BrtEndTimelineStyle", */ T:-1 },
	0x082F: { /* n:"BrtTimelineStyleElement" */ },
	0x0830: { /* n:"BrtBeginTimelineStylesheetExt15", */ T:1 },
	0x0831: { /* n:"BrtEndTimelineStylesheetExt15", */ T:-1 },
	0x0832: { /* n:"BrtBeginTimelineStyles", */ T:1 },
	0x0833: { /* n:"BrtEndTimelineStyles", */ T:-1 },
	0x0834: { /* n:"BrtBeginTimelineStyleElements", */ T:1 },
	0x0835: { /* n:"BrtEndTimelineStyleElements", */ T:-1 },
	0x0836: { /* n:"BrtDxf15" */ },
	0x0837: { /* n:"BrtBeginDxfs15", */ T:1 },
	0x0838: { /* n:"BrtEndDxfs15", */ T:-1 },
	0x0839: { /* n:"BrtSlicerCacheHideItemsWithNoData" */ },
	0x083A: { /* n:"BrtBeginItemUniqueNames", */ T:1 },
	0x083B: { /* n:"BrtEndItemUniqueNames", */ T:-1 },
	0x083C: { /* n:"BrtItemUniqueName" */ },
	0x083D: { /* n:"BrtBeginExtConn15", */ T:1 },
	0x083E: { /* n:"BrtEndExtConn15", */ T:-1 },
	0x083F: { /* n:"BrtBeginOledbPr15", */ T:1 },
	0x0840: { /* n:"BrtEndOledbPr15", */ T:-1 },
	0x0841: { /* n:"BrtBeginDataFeedPr15", */ T:1 },
	0x0842: { /* n:"BrtEndDataFeedPr15", */ T:-1 },
	0x0843: { /* n:"BrtTextPr15" */ },
	0x0844: { /* n:"BrtRangePr15" */ },
	0x0845: { /* n:"BrtDbCommand15" */ },
	0x0846: { /* n:"BrtBeginDbTables15", */ T:1 },
	0x0847: { /* n:"BrtEndDbTables15", */ T:-1 },
	0x0848: { /* n:"BrtDbTable15" */ },
	0x0849: { /* n:"BrtBeginDataModel", */ T:1 },
	0x084A: { /* n:"BrtEndDataModel", */ T:-1 },
	0x084B: { /* n:"BrtBeginModelTables", */ T:1 },
	0x084C: { /* n:"BrtEndModelTables", */ T:-1 },
	0x084D: { /* n:"BrtModelTable" */ },
	0x084E: { /* n:"BrtBeginModelRelationships", */ T:1 },
	0x084F: { /* n:"BrtEndModelRelationships", */ T:-1 },
	0x0850: { /* n:"BrtModelRelationship" */ },
	0x0851: { /* n:"BrtBeginECTxtWiz15", */ T:1 },
	0x0852: { /* n:"BrtEndECTxtWiz15", */ T:-1 },
	0x0853: { /* n:"BrtBeginECTWFldInfoLst15", */ T:1 },
	0x0854: { /* n:"BrtEndECTWFldInfoLst15", */ T:-1 },
	0x0855: { /* n:"BrtBeginECTWFldInfo15", */ T:1 },
	0x0856: { /* n:"BrtFieldListActiveItem" */ },
	0x0857: { /* n:"BrtPivotCacheIdVersion" */ },
	0x0858: { /* n:"BrtSXDI15" */ },
	0x0859: { /* n:"BrtBeginModelTimeGroupings", */ T:1 },
	0x085A: { /* n:"BrtEndModelTimeGroupings", */ T:-1 },
	0x085B: { /* n:"BrtBeginModelTimeGrouping", */ T:1 },
	0x085C: { /* n:"BrtEndModelTimeGrouping", */ T:-1 },
	0x085D: { /* n:"BrtModelTimeGroupingCalcCol" */ },
	0x0C00: { /* n:"BrtUid" */ },
	0x0C01: { /* n:"BrtRevisionPtr" */ },
	0x1000: { /* n:"BrtBeginDynamicArrayPr", */ T:1 },
	0x1001: { /* n:"BrtEndDynamicArrayPr", */ T:-1 },
	0x138A: { /* n:"BrtBeginRichValueBlock", */ T:1 },
	0x138B: { /* n:"BrtEndRichValueBlock", */ T:-1 },
	0x13D9: { /* n:"BrtBeginRichFilters", */ T:1 },
	0x13DA: { /* n:"BrtEndRichFilters", */ T:-1 },
	0x13DB: { /* n:"BrtRichFilter" */ },
	0x13DC: { /* n:"BrtBeginRichFilterColumn", */ T:1 },
	0x13DD: { /* n:"BrtEndRichFilterColumn", */ T:-1 },
	0x13DE: { /* n:"BrtBeginCustomRichFilters", */ T:1 },
	0x13DF: { /* n:"BrtEndCustomRichFilters", */ T:-1 },
	0x13E0: { /* n:"BrtCustomRichFilter" */ },
	0x13E1: { /* n:"BrtTop10RichFilter" */ },
	0x13E2: { /* n:"BrtDynamicRichFilter" */ },
	0x13E4: { /* n:"BrtBeginRichSortCondition", */ T:1 },
	0x13E5: { /* n:"BrtEndRichSortCondition", */ T:-1 },
	0x13E6: { /* n:"BrtRichFilterDateGroupItem" */ },
	0x13E7: { /* n:"BrtBeginCalcFeatures", */ T:1 },
	0x13E8: { /* n:"BrtEndCalcFeatures", */ T:-1 },
	0x13E9: { /* n:"BrtCalcFeature" */ },
	0x13EB: { /* n:"BrtExternalLinksPr" */ },
	0xFFFF: { n:"" }
};

/* [MS-XLS] 2.3 Record Enumeration (and other sources) */
var XLSRecordEnum = {
	/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */
	0x0006: { /* n:"Formula", */ f:parse_Formula },
	0x000a: { /* n:"EOF", */ f:parsenoop2 },
	0x000c: { /* n:"CalcCount", */ f:parseuint16 }, //
	0x000d: { /* n:"CalcMode", */ f:parseuint16 }, //
	0x000e: { /* n:"CalcPrecision", */ f:parsebool }, //
	0x000f: { /* n:"CalcRefMode", */ f:parsebool }, //
	0x0010: { /* n:"CalcDelta", */ f:parse_Xnum }, //
	0x0011: { /* n:"CalcIter", */ f:parsebool }, //
	0x0012: { /* n:"Protect", */ f:parsebool },
	0x0013: { /* n:"Password", */ f:parseuint16 },
	0x0014: { /* n:"Header", */ f:parse_XLHeaderFooter },
	0x0015: { /* n:"Footer", */ f:parse_XLHeaderFooter },
	0x0017: { /* n:"ExternSheet", */ f:parse_ExternSheet },
	0x0018: { /* n:"Lbl", */ f:parse_Lbl },
	0x0019: { /* n:"WinProtect", */ f:parsebool },
	0x001a: { /* n:"VerticalPageBreaks", */ },
	0x001b: { /* n:"HorizontalPageBreaks", */ },
	0x001c: { /* n:"Note", */ f:parse_Note },
	0x001d: { /* n:"Selection", */ },
	0x0022: { /* n:"Date1904", */ f:parsebool },
	0x0023: { /* n:"ExternName", */ f:parse_ExternName },
	0x0026: { /* n:"LeftMargin", */ f:parse_Xnum }, // *
	0x0027: { /* n:"RightMargin", */ f:parse_Xnum }, // *
	0x0028: { /* n:"TopMargin", */ f:parse_Xnum }, // *
	0x0029: { /* n:"BottomMargin", */ f:parse_Xnum }, // *
	0x002a: { /* n:"PrintRowCol", */ f:parsebool },
	0x002b: { /* n:"PrintGrid", */ f:parsebool },
	0x002f: { /* n:"FilePass", */ f:parse_FilePass },
	0x0031: { /* n:"Font", */ f:parse_Font },
	0x0033: { /* n:"PrintSize", */ f:parseuint16 },
	0x003c: { /* n:"Continue", */ },
	0x003d: { /* n:"Window1", */ f:parse_Window1 },
	0x0040: { /* n:"Backup", */ f:parsebool },
	0x0041: { /* n:"Pane", */ f:parse_Pane },
	0x0042: { /* n:"CodePage", */ f:parseuint16 },
	0x004d: { /* n:"Pls", */ },
	0x0050: { /* n:"DCon", */ },
	0x0051: { /* n:"DConRef", */ },
	0x0052: { /* n:"DConName", */ },
	0x0055: { /* n:"DefColWidth", */ f:parseuint16 },
	0x0059: { /* n:"XCT", */ },
	0x005a: { /* n:"CRN", */ },
	0x005b: { /* n:"FileSharing", */ },
	0x005c: { /* n:"WriteAccess", */ f:parse_WriteAccess },
	0x005d: { /* n:"Obj", */ f:parse_Obj },
	0x005e: { /* n:"Uncalced", */ },
	0x005f: { /* n:"CalcSaveRecalc", */ f:parsebool }, //
	0x0060: { /* n:"Template", */ },
	0x0061: { /* n:"Intl", */ },
	0x0063: { /* n:"ObjProtect", */ f:parsebool },
	0x007d: { /* n:"ColInfo", */ f:parse_ColInfo },
	0x0080: { /* n:"Guts", */ f:parse_Guts },
	0x0081: { /* n:"WsBool", */ f:parse_WsBool },
	0x0082: { /* n:"GridSet", */ f:parseuint16 },
	0x0083: { /* n:"HCenter", */ f:parsebool },
	0x0084: { /* n:"VCenter", */ f:parsebool },
	0x0085: { /* n:"BoundSheet8", */ f:parse_BoundSheet8 },
	0x0086: { /* n:"WriteProtect", */ },
	0x008c: { /* n:"Country", */ f:parse_Country },
	0x008d: { /* n:"HideObj", */ f:parseuint16 },
	0x0090: { /* n:"Sort", */ },
	0x0092: { /* n:"Palette", */ f:parse_Palette },
	0x0097: { /* n:"Sync", */ },
	0x0098: { /* n:"LPr", */ },
	0x0099: { /* n:"DxGCol", */ },
	0x009a: { /* n:"FnGroupName", */ },
	0x009b: { /* n:"FilterMode", */ },
	0x009c: { /* n:"BuiltInFnGroupCount", */ f:parseuint16 },
	0x009d: { /* n:"AutoFilterInfo", */ },
	0x009e: { /* n:"AutoFilter", */ },
	0x00a0: { /* n:"Scl", */ f:parse_Scl },
	0x00a1: { /* n:"Setup", */ f:parse_Setup },
	0x00ae: { /* n:"ScenMan", */ },
	0x00af: { /* n:"SCENARIO", */ },
	0x00b0: { /* n:"SxView", */ },
	0x00b1: { /* n:"Sxvd", */ },
	0x00b2: { /* n:"SXVI", */ },
	0x00b4: { /* n:"SxIvd", */ },
	0x00b5: { /* n:"SXLI", */ },
	0x00b6: { /* n:"SXPI", */ },
	0x00b8: { /* n:"DocRoute", */ },
	0x00b9: { /* n:"RecipName", */ },
	0x00bd: { /* n:"MulRk", */ f:parse_MulRk },
	0x00be: { /* n:"MulBlank", */ f:parse_MulBlank },
	0x00c1: { /* n:"Mms", */ f:parsenoop2 },
	0x00c5: { /* n:"SXDI", */ },
	0x00c6: { /* n:"SXDB", */ },
	0x00c7: { /* n:"SXFDB", */ },
	0x00c8: { /* n:"SXDBB", */ },
	0x00c9: { /* n:"SXNum", */ },
	0x00ca: { /* n:"SxBool", */ f:parsebool },
	0x00cb: { /* n:"SxErr", */ },
	0x00cc: { /* n:"SXInt", */ },
	0x00cd: { /* n:"SXString", */ },
	0x00ce: { /* n:"SXDtr", */ },
	0x00cf: { /* n:"SxNil", */ },
	0x00d0: { /* n:"SXTbl", */ },
	0x00d1: { /* n:"SXTBRGIITM", */ },
	0x00d2: { /* n:"SxTbpg", */ },
	0x00d3: { /* n:"ObProj", */ },
	0x00d5: { /* n:"SXStreamID", */ },
	0x00d7: { /* n:"DBCell", */ },
	0x00d8: { /* n:"SXRng", */ },
	0x00d9: { /* n:"SxIsxoper", */ },
	0x00da: { /* n:"BookBool", */ f:parseuint16 },
	0x00dc: { /* n:"DbOrParamQry", */ },
	0x00dd: { /* n:"ScenarioProtect", */ f:parsebool },
	0x00de: { /* n:"OleObjectSize", */ },
	0x00e0: { /* n:"XF", */ f:parse_XF },
	0x00e1: { /* n:"InterfaceHdr", */ f:parse_InterfaceHdr },
	0x00e2: { /* n:"InterfaceEnd", */ f:parsenoop2 },
	0x00e3: { /* n:"SXVS", */ },
	0x00e5: { /* n:"MergeCells", */ f:parse_MergeCells },
	0x00e9: { /* n:"BkHim", */ },
	0x00eb: { /* n:"MsoDrawingGroup", */ },
	0x00ec: { /* n:"MsoDrawing", */ },
	0x00ed: { /* n:"MsoDrawingSelection", */ },
	0x00ef: { /* n:"PhoneticInfo", */ },
	0x00f0: { /* n:"SxRule", */ },
	0x00f1: { /* n:"SXEx", */ },
	0x00f2: { /* n:"SxFilt", */ },
	0x00f4: { /* n:"SxDXF", */ },
	0x00f5: { /* n:"SxItm", */ },
	0x00f6: { /* n:"SxName", */ },
	0x00f7: { /* n:"SxSelect", */ },
	0x00f8: { /* n:"SXPair", */ },
	0x00f9: { /* n:"SxFmla", */ },
	0x00fb: { /* n:"SxFormat", */ },
	0x00fc: { /* n:"SST", */ f:parse_SST },
	0x00fd: { /* n:"LabelSst", */ f:parse_LabelSst },
	0x00ff: { /* n:"ExtSST", */ f:parse_ExtSST },
	0x0100: { /* n:"SXVDEx", */ },
	0x0103: { /* n:"SXFormula", */ },
	0x0122: { /* n:"SXDBEx", */ },
	0x0137: { /* n:"RRDInsDel", */ },
	0x0138: { /* n:"RRDHead", */ },
	0x013b: { /* n:"RRDChgCell", */ },
	0x013d: { /* n:"RRTabId", */ f:parseuint16a },
	0x013e: { /* n:"RRDRenSheet", */ },
	0x013f: { /* n:"RRSort", */ },
	0x0140: { /* n:"RRDMove", */ },
	0x014a: { /* n:"RRFormat", */ },
	0x014b: { /* n:"RRAutoFmt", */ },
	0x014d: { /* n:"RRInsertSh", */ },
	0x014e: { /* n:"RRDMoveBegin", */ },
	0x014f: { /* n:"RRDMoveEnd", */ },
	0x0150: { /* n:"RRDInsDelBegin", */ },
	0x0151: { /* n:"RRDInsDelEnd", */ },
	0x0152: { /* n:"RRDConflict", */ },
	0x0153: { /* n:"RRDDefName", */ },
	0x0154: { /* n:"RRDRstEtxp", */ },
	0x015f: { /* n:"LRng", */ },
	0x0160: { /* n:"UsesELFs", */ f:parsebool },
	0x0161: { /* n:"DSF", */ f:parsenoop2 },
	0x0191: { /* n:"CUsr", */ },
	0x0192: { /* n:"CbUsr", */ },
	0x0193: { /* n:"UsrInfo", */ },
	0x0194: { /* n:"UsrExcl", */ },
	0x0195: { /* n:"FileLock", */ },
	0x0196: { /* n:"RRDInfo", */ },
	0x0197: { /* n:"BCUsrs", */ },
	0x0198: { /* n:"UsrChk", */ },
	0x01a9: { /* n:"UserBView", */ },
	0x01aa: { /* n:"UserSViewBegin", */ },
	0x01ab: { /* n:"UserSViewEnd", */ },
	0x01ac: { /* n:"RRDUserView", */ },
	0x01ad: { /* n:"Qsi", */ },
	0x01ae: { /* n:"SupBook", */ f:parse_SupBook },
	0x01af: { /* n:"Prot4Rev", */ f:parsebool },
	0x01b0: { /* n:"CondFmt", */ },
	0x01b1: { /* n:"CF", */ },
	0x01b2: { /* n:"DVal", */ },
	0x01b5: { /* n:"DConBin", */ },
	0x01b6: { /* n:"TxO", */ f:parse_TxO },
	0x01b7: { /* n:"RefreshAll", */ f:parsebool }, //
	0x01b8: { /* n:"HLink", */ f:parse_HLink },
	0x01b9: { /* n:"Lel", */ },
	0x01ba: { /* n:"CodeName", */ f:parse_XLUnicodeString },
	0x01bb: { /* n:"SXFDBType", */ },
	0x01bc: { /* n:"Prot4RevPass", */ f:parseuint16 },
	0x01bd: { /* n:"ObNoMacros", */ },
	0x01be: { /* n:"Dv", */ },
	0x01c0: { /* n:"Excel9File", */ f:parsenoop2 },
	0x01c1: { /* n:"RecalcId", */ f:parse_RecalcId, r:2},
	0x01c2: { /* n:"EntExU2", */ f:parsenoop2 },
	0x0200: { /* n:"Dimensions", */ f:parse_Dimensions },
	0x0201: { /* n:"Blank", */ f:parse_Blank },
	0x0203: { /* n:"Number", */ f:parse_Number },
	0x0204: { /* n:"Label", */ f:parse_Label },
	0x0205: { /* n:"BoolErr", */ f:parse_BoolErr },
	0x0207: { /* n:"String", */ f:parse_String },
	0x0208: { /* n:"Row", */ f:parse_Row },
	0x020b: { /* n:"Index", */ },
	0x0221: { /* n:"Array", */ f:parse_Array },
	0x0225: { /* n:"DefaultRowHeight", */ f:parse_DefaultRowHeight },
	0x0236: { /* n:"Table", */ },
	0x023e: { /* n:"Window2", */ f:parse_Window2 },
	0x027e: { /* n:"RK", */ f:parse_RK },
	0x0293: { /* n:"Style", */ },
	0x0418: { /* n:"BigName", */ },
	0x041e: { /* n:"Format", */ f:parse_Format },
	0x043c: { /* n:"ContinueBigName", */ },
	0x04bc: { /* n:"ShrFmla", */ f:parse_ShrFmla },
	0x0800: { /* n:"HLinkTooltip", */ f:parse_HLinkTooltip },
	0x0801: { /* n:"WebPub", */ },
	0x0802: { /* n:"QsiSXTag", */ },
	0x0803: { /* n:"DBQueryExt", */ },
	0x0804: { /* n:"ExtString", */ },
	0x0805: { /* n:"TxtQry", */ },
	0x0806: { /* n:"Qsir", */ },
	0x0807: { /* n:"Qsif", */ },
	0x0808: { /* n:"RRDTQSIF", */ },
	0x0809: { /* n:"BOF", */ f:parse_BOF },
	0x080a: { /* n:"OleDbConn", */ },
	0x080b: { /* n:"WOpt", */ },
	0x080c: { /* n:"SXViewEx", */ },
	0x080d: { /* n:"SXTH", */ },
	0x080e: { /* n:"SXPIEx", */ },
	0x080f: { /* n:"SXVDTEx", */ },
	0x0810: { /* n:"SXViewEx9", */ },
	0x0812: { /* n:"ContinueFrt", */ },
	0x0813: { /* n:"RealTimeData", */ },
	0x0850: { /* n:"ChartFrtInfo", */ },
	0x0851: { /* n:"FrtWrapper", */ },
	0x0852: { /* n:"StartBlock", */ },
	0x0853: { /* n:"EndBlock", */ },
	0x0854: { /* n:"StartObject", */ },
	0x0855: { /* n:"EndObject", */ },
	0x0856: { /* n:"CatLab", */ },
	0x0857: { /* n:"YMult", */ },
	0x0858: { /* n:"SXViewLink", */ },
	0x0859: { /* n:"PivotChartBits", */ },
	0x085a: { /* n:"FrtFontList", */ },
	0x0862: { /* n:"SheetExt", */ },
	0x0863: { /* n:"BookExt", */ r:12},
	0x0864: { /* n:"SXAddl", */ },
	0x0865: { /* n:"CrErr", */ },
	0x0866: { /* n:"HFPicture", */ },
	0x0867: { /* n:"FeatHdr", */ f:parsenoop2 },
	0x0868: { /* n:"Feat", */ },
	0x086a: { /* n:"DataLabExt", */ },
	0x086b: { /* n:"DataLabExtContents", */ },
	0x086c: { /* n:"CellWatch", */ },
	0x0871: { /* n:"FeatHdr11", */ },
	0x0872: { /* n:"Feature11", */ },
	0x0874: { /* n:"DropDownObjIds", */ },
	0x0875: { /* n:"ContinueFrt11", */ },
	0x0876: { /* n:"DConn", */ },
	0x0877: { /* n:"List12", */ },
	0x0878: { /* n:"Feature12", */ },
	0x0879: { /* n:"CondFmt12", */ },
	0x087a: { /* n:"CF12", */ },
	0x087b: { /* n:"CFEx", */ },
	0x087c: { /* n:"XFCRC", */ f:parse_XFCRC, r:12 },
	0x087d: { /* n:"XFExt", */ f:parse_XFExt, r:12 },
	0x087e: { /* n:"AutoFilter12", */ },
	0x087f: { /* n:"ContinueFrt12", */ },
	0x0884: { /* n:"MDTInfo", */ },
	0x0885: { /* n:"MDXStr", */ },
	0x0886: { /* n:"MDXTuple", */ },
	0x0887: { /* n:"MDXSet", */ },
	0x0888: { /* n:"MDXProp", */ },
	0x0889: { /* n:"MDXKPI", */ },
	0x088a: { /* n:"MDB", */ },
	0x088b: { /* n:"PLV", */ },
	0x088c: { /* n:"Compat12", */ f:parsebool, r:12 },
	0x088d: { /* n:"DXF", */ },
	0x088e: { /* n:"TableStyles", */ r:12 },
	0x088f: { /* n:"TableStyle", */ },
	0x0890: { /* n:"TableStyleElement", */ },
	0x0892: { /* n:"StyleExt", */ },
	0x0893: { /* n:"NamePublish", */ },
	0x0894: { /* n:"NameCmt", */ f:parse_NameCmt, r:12 },
	0x0895: { /* n:"SortData", */ },
	0x0896: { /* n:"Theme", */ f:parse_Theme, r:12 },
	0x0897: { /* n:"GUIDTypeLib", */ },
	0x0898: { /* n:"FnGrp12", */ },
	0x0899: { /* n:"NameFnGrp12", */ },
	0x089a: { /* n:"MTRSettings", */ f:parse_MTRSettings, r:12 },
	0x089b: { /* n:"CompressPictures", */ f:parsenoop2 },
	0x089c: { /* n:"HeaderFooter", */ },
	0x089d: { /* n:"CrtLayout12", */ },
	0x089e: { /* n:"CrtMlFrt", */ },
	0x089f: { /* n:"CrtMlFrtContinue", */ },
	0x08a3: { /* n:"ForceFullCalculation", */ f:parse_ForceFullCalculation },
	0x08a4: { /* n:"ShapePropsStream", */ },
	0x08a5: { /* n:"TextPropsStream", */ },
	0x08a6: { /* n:"RichTextStream", */ },
	0x08a7: { /* n:"CrtLayout12A", */ },
	0x1001: { /* n:"Units", */ },
	0x1002: { /* n:"Chart", */ },
	0x1003: { /* n:"Series", */ },
	0x1006: { /* n:"DataFormat", */ },
	0x1007: { /* n:"LineFormat", */ },
	0x1009: { /* n:"MarkerFormat", */ },
	0x100a: { /* n:"AreaFormat", */ },
	0x100b: { /* n:"PieFormat", */ },
	0x100c: { /* n:"AttachedLabel", */ },
	0x100d: { /* n:"SeriesText", */ },
	0x1014: { /* n:"ChartFormat", */ },
	0x1015: { /* n:"Legend", */ },
	0x1016: { /* n:"SeriesList", */ },
	0x1017: { /* n:"Bar", */ },
	0x1018: { /* n:"Line", */ },
	0x1019: { /* n:"Pie", */ },
	0x101a: { /* n:"Area", */ },
	0x101b: { /* n:"Scatter", */ },
	0x101c: { /* n:"CrtLine", */ },
	0x101d: { /* n:"Axis", */ },
	0x101e: { /* n:"Tick", */ },
	0x101f: { /* n:"ValueRange", */ },
	0x1020: { /* n:"CatSerRange", */ },
	0x1021: { /* n:"AxisLine", */ },
	0x1022: { /* n:"CrtLink", */ },
	0x1024: { /* n:"DefaultText", */ },
	0x1025: { /* n:"Text", */ },
	0x1026: { /* n:"FontX", */ f:parseuint16 },
	0x1027: { /* n:"ObjectLink", */ },
	0x1032: { /* n:"Frame", */ },
	0x1033: { /* n:"Begin", */ },
	0x1034: { /* n:"End", */ },
	0x1035: { /* n:"PlotArea", */ },
	0x103a: { /* n:"Chart3d", */ },
	0x103c: { /* n:"PicF", */ },
	0x103d: { /* n:"DropBar", */ },
	0x103e: { /* n:"Radar", */ },
	0x103f: { /* n:"Surf", */ },
	0x1040: { /* n:"RadarArea", */ },
	0x1041: { /* n:"AxisParent", */ },
	0x1043: { /* n:"LegendException", */ },
	0x1044: { /* n:"ShtProps", */ f:parse_ShtProps },
	0x1045: { /* n:"SerToCrt", */ },
	0x1046: { /* n:"AxesUsed", */ },
	0x1048: { /* n:"SBaseRef", */ },
	0x104a: { /* n:"SerParent", */ },
	0x104b: { /* n:"SerAuxTrend", */ },
	0x104e: { /* n:"IFmtRecord", */ },
	0x104f: { /* n:"Pos", */ },
	0x1050: { /* n:"AlRuns", */ },
	0x1051: { /* n:"BRAI", */ },
	0x105b: { /* n:"SerAuxErrBar", */ },
	0x105c: { /* n:"ClrtClient", */ f:parse_ClrtClient },
	0x105d: { /* n:"SerFmt", */ },
	0x105f: { /* n:"Chart3DBarShape", */ },
	0x1060: { /* n:"Fbi", */ },
	0x1061: { /* n:"BopPop", */ },
	0x1062: { /* n:"AxcExt", */ },
	0x1063: { /* n:"Dat", */ },
	0x1064: { /* n:"PlotGrowth", */ },
	0x1065: { /* n:"SIIndex", */ },
	0x1066: { /* n:"GelFrame", */ },
	0x1067: { /* n:"BopPopCustom", */ },
	0x1068: { /* n:"Fbi2", */ },

	0x0000: { /* n:"Dimensions", */ f:parse_Dimensions },
	0x0001: { /* n:"BIFF2BLANK", */ },
	0x0002: { /* n:"BIFF2INT", */ f:parse_BIFF2INT },
	0x0003: { /* n:"BIFF2NUM", */ f:parse_BIFF2NUM },
	0x0004: { /* n:"BIFF2STR", */ f:parse_BIFF2STR },
	0x0005: { /* n:"BIFF2BOOLERR", */ f:parse_BIFF2BOOLERR },
	0x0007: { /* n:"String", */ f:parse_BIFF2STRING },
	0x0008: { /* n:"BIFF2ROW", */ },
	0x0009: { /* n:"BOF", */ f:parse_BOF },
	0x000b: { /* n:"Index", */ },
	0x0016: { /* n:"ExternCount", */ f:parseuint16 },
	0x001e: { /* n:"BIFF2FORMAT", */ f:parse_BIFF2Format },
	0x001f: { /* n:"BIFF2FMTCNT", */ }, /* 16-bit cnt of BIFF2FORMAT records */
	0x0020: { /* n:"BIFF2COLINFO", */ },
	0x0021: { /* n:"Array", */ f:parse_Array },
	0x0024: { /* n:"COLWIDTH", */ },
	0x0025: { /* n:"DefaultRowHeight", */ f:parse_DefaultRowHeight },
	// 0x002c ??
	// 0x002d ??
	// 0x002e ??
	// 0x0030 FONTCOUNT: number of fonts
	0x0032: { /* n:"BIFF2FONTXTRA", */ f:parse_BIFF2FONTXTRA },
	// 0x0035: INFOOPTS
	// 0x0036: TABLE (BIFF2 only)
	// 0x0037: TABLE2 (BIFF2 only)
	// 0x0038: WNDESK
	// 0x0039 ??
	// 0x003a: BEGINPREF
	// 0x003b: ENDPREF
	0x003e: { /* n:"BIFF2WINDOW2", */ },
	// 0x003f ??
	// 0x0046: SHOWSCROLL
	// 0x0047: SHOWFORMULA
	// 0x0048: STATUSBAR
	// 0x0049: SHORTMENUS
	// 0x004A:
	// 0x004B:
	// 0x004C:
	// 0x004E:
	// 0x004F:
	// 0x0058: TOOLBAR (BIFF3)

	/* - - - */
	0x0034: { /* n:"DDEObjName", */ },
	0x0043: { /* n:"BIFF2XF", */ f:parse_BIFF2XF },
	0x0044: { /* n:"BIFF2XFINDEX", */ f:parseuint16 },
	0x0045: { /* n:"BIFF2FONTCLR", */ },
	0x0056: { /* n:"BIFF4FMTCNT", */ }, /* 16-bit cnt, similar to BIFF2 */
	0x007e: { /* n:"RK", */ }, /* Not necessarily same as 0x027e */
	0x007f: { /* n:"ImData", */ f:parse_ImData },
	0x0087: { /* n:"Addin", */ },
	0x0088: { /* n:"Edg", */ },
	0x0089: { /* n:"Pub", */ },
	// 0x8A
	// 0x8B LH: alternate menu key flag (BIFF3/4)
	// 0x8E
	0x008F: { /* n:"BIFF4SheetInfo", */ f:parse_BIFF4SheetInfo },
	0x0091: { /* n:"Sub", */ },
	// 0x93 STYLE
	0x0094: { /* n:"LHRecord", */ },
	0x0095: { /* n:"LHNGraph", */ },
	0x0096: { /* n:"Sound", */ },
	// 0xA2 FNPROTO: function prototypes (BIFF4)
	// 0xA3
	// 0xA8
	0x00a9: { /* n:"CoordList", */ },
	0x00ab: { /* n:"GCW", */ },
	0x00bc: { /* n:"ShrFmla", */ }, /* Not necessarily same as 0x04bc */
	0x00bf: { /* n:"ToolbarHdr", */ },
	0x00c0: { /* n:"ToolbarEnd", */ },
	0x00c2: { /* n:"AddMenu", */ },
	0x00c3: { /* n:"DelMenu", */ },
	0x00d6: { /* n:"RString", */ f:parse_RString },
	0x00df: { /* n:"UDDesc", */ },
	0x00ea: { /* n:"TabIdConf", */ },
	0x0162: { /* n:"XL5Modify", */ },
	0x01a5: { /* n:"FileSharing2", */ },
	0x0206: { /* n:"Formula", */ f:parse_Formula },
	0x0209: { /* n:"BOF", */ f:parse_BOF },
	0x0218: { /* n:"Lbl", */ f:parse_Lbl },
	0x0223: { /* n:"ExternName", */ f:parse_ExternName },
	0x0231: { /* n:"Font", */ },
	0x0243: { /* n:"BIFF3XF", */ f:parse_BIFF3XF },
	0x0406: { /* n:"Formula", */ f:parse_Formula },
	0x0409: { /* n:"BOF", */ f:parse_BOF },
	0x0443: { /* n:"BIFF4XF", */ f:parse_BIFF4XF },
	0x086d: { /* n:"FeatInfo", */ },
	0x0873: { /* n:"FeatInfo11", */ },
	0x0881: { /* n:"SXAddl12", */ },
	0x08c0: { /* n:"AutoWebPub", */ },
	0x08c1: { /* n:"ListObj", */ },
	0x08c2: { /* n:"ListField", */ },
	0x08c3: { /* n:"ListDV", */ },
	0x08c4: { /* n:"ListCondFmt", */ },
	0x08c5: { /* n:"ListCF", */ },
	0x08c6: { /* n:"FMQry", */ },
	0x08c7: { /* n:"FMSQry", */ },
	0x08c8: { /* n:"PLV", */ },
	0x08c9: { /* n:"LnExt", */ },
	0x08ca: { /* n:"MkrExt", */ },
	0x08cb: { /* n:"CrtCoopt", */ },
	0x08d6: { /* n:"FRTArchId$", */ r:12 },

	/* --- multiplan 4 records --- */
	0x0065: { /* n:"", */ }, // one per window
	0x0066: { /* n:"", */ }, // calc settings
	0x0069: { /* n:"", */ }, // print header
	0x006a: { /* n:"", */ }, // print footer
	0x006b: { /* n:"", */ }, // print settings
	0x006d: { /* n:"", */ }, // one per window
	0x0070: { /* n:"", */ }, // includes default col width
	0x0072: { /* n:"", */ }, // includes selected cell

	0x7262: {}
};

function write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {
	var t/*:number*/ = type;
	if(isNaN(t)) return;
	var len = length || (payload||[]).length || 0;
	var o = ba.next(4);
	o.write_shift(2, t);
	o.write_shift(2, len);
	if(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);
}

function write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {
	var len = length || (payload||[]).length || 0;
	if(len <= 8224) return write_biff_rec(ba, type, payload, len);
	var t = type;
	if(isNaN(t)) return;
	var parts = payload.parts || [], sidx = 0;
	var i = 0, w = 0;
	while(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }
	var o = ba.next(4);
	o.write_shift(2, t);
	o.write_shift(2, w);
	ba.push(payload.slice(i, i + w));
	i += w;
	while(i < len) {
		o = ba.next(4);
		o.write_shift(2, 0x3c); // TODO: figure out correct continue type
		w = 0;
		while(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }
		o.write_shift(2, w);
		ba.push(payload.slice(i, i+w)); i+= w;
	}
}

function write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {
	var out = new_buf(9);
	write_BIFF2Cell(out, r, c);
	write_Bes(val, t || 'b', out);
	return out;
}

/* TODO: codepage, large strings */
function write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {
	var out = new_buf(8 + 2*val.length);
	write_BIFF2Cell(out, r, c);
	out.write_shift(1, val.length);
	out.write_shift(val.length, val, 'sbcs');
	return out.l < out.length ? out.slice(0, out.l) : out;
}

function write_comments_biff2(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {
	comments.forEach(function(data) {
		var text = data[0].map(function(cc) { return cc.t; }).join("");
		// TODO: should '\n' be translated to '\r' to correct for Excel 5.0 bug when exporting to BIFF2/3 ?
		if(text.length <= 2048) return write_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text, data[1], data[2]));
		write_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(0, 2048), data[1], data[2], text.length));
		for(var i = 2048; i < text.length; i += 2048)
			write_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(i, Math.min(i+2048, text.length)), -1, -1, Math.min(2048, text.length - i)));
	});
}

/* TODO: BIFF3/4 use different records -- see comments*/
function write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/) {
	var ifmt = 0;
	if(cell.z != null) {
		ifmt = opts._BIFF2FmtTable.indexOf(cell.z);
		if(ifmt == -1) { opts._BIFF2FmtTable.push(cell.z); ifmt = opts._BIFF2FmtTable.length - 1; }
	}
	var ixfe = 0;
	if(cell.z != null) {
		for(; ixfe < opts.cellXfs.length; ++ixfe) if(opts.cellXfs[ixfe].numFmtId == ifmt) break;
		if(ixfe == opts.cellXfs.length) opts.cellXfs.push({numFmtId: ifmt});
	}
	if(cell.v != null) switch(cell.t) {
		case 'd': case 'n':
			var v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;
			if(opts.biff == 2 && (v == (v|0)) && (v >= 0) && (v < 65536))
				// 0x027E (RK) in BIFF3/4
				write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v, ixfe, ifmt));
			else if(isNaN(v))
				// 0x0205 in BIFF3/4
				write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x24, "e")); // #NUM!
			else if(!isFinite(v))
				// 0x0205 in BIFF3/4
				write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x07, "e")); // #DIV/0!
			else
				// 0x0203 in BIFF3/4
				write_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v, ixfe, ifmt));
			return;
		case 'b': case 'e':
			// 0x0205 in BIFF3/4
			write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;
		/* TODO: codepage, sst */
		case 's': case 'str':
			// 0x0204 in BIFF3/4
			write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v == null ? "" : String(cell.v).slice(0,255)));
			return;
	}
	// 0x0201 in BIFF3/4
	write_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));
}

function write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {
	var dense = ws["!data"] != null;
	var range = safe_decode_range(ws['!ref'] || "A1"), rr = "", cols/*:Array<string>*/ = [];
	if(range.e.c > 0xFF || range.e.r > 0x3FFF) {
		if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:IV16384");
		range.e.c = Math.min(range.e.c, 0xFF);
		range.e.r = Math.min(range.e.r, 0x3FFF);
	}
	var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
	var row = [], comments = [];
	/* TODO: 0x0000 / 0x0200 dimensions? */
	for(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
	for(var R = range.s.r; R <= range.e.r; ++R) {
		if(dense) row = ws["!data"][R] || [];
		rr = encode_row(R);
		for(C = range.s.c; C <= range.e.c; ++C) {
			var cell = dense ? row[C] : ws[cols[C] + rr];
			if(!cell) continue;
			/* write cell */
			write_ws_biff2_cell(ba, cell, R, C, opts, date1904);
			if(cell.c) comments.push([cell.c, R, C]);
		}
	}

	/* ... 0x12 0x19 0x13 (Password) */
	write_comments_biff2(ba, comments);
	/* 0x3d (Window1) ... */
}

/* Based on test files */
function write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {
	var o = opts || {};

	var ba = buf_array();
	var idx = 0;
	for(var i=0;i<wb.SheetNames.length;++i) if(wb.SheetNames[i] == o.sheet) idx=i;
	if(idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error("Sheet not found: " + o.sheet);
	write_biff_rec(ba, (o.biff == 4 ? 0x0409 : (o.biff == 3 ? 0x0209 : 0x0009)), write_BOF(wb, 0x10, o));
	if(((wb.Workbook||{}).WBProps||{}).date1904) write_biff_rec(ba, 0x0022, writebool(true));
	o.cellXfs = [{numFmtId: 0}];
	o._BIFF2FmtTable/*:Array<string>*/ = ["General"]; o._Fonts = [];
	var body = buf_array();
	write_ws_biff2(body, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);

	o._BIFF2FmtTable.forEach(function(f) {
		if(o.biff <= 3) write_biff_rec(ba, 0x001E, write_BIFF2Format(f));
		else write_biff_rec(ba, 0x041E, write_BIFF4Format(f));
	});
	o.cellXfs.forEach(function(xf) {
		switch(o.biff) {
			case 2: write_biff_rec(ba, 0x0043, write_BIFF2XF(xf)); break;
			case 3: write_biff_rec(ba, 0x0243, write_BIFF3XF(xf)); break;
			case 4: write_biff_rec(ba, 0x0443, write_BIFF4XF(xf)); break;
		}
	});
	delete o._BIFF2FmtTable; delete o.cellXfs; delete o._Fonts;

	ba.push(body.end());
	write_biff_rec(ba, 0x000A);
	return ba.end();
}

var b8oid = 1, b8ocnts/*:Array<[number, number, number]>*/ = [];
function write_MsoDrawingGroup() {
	var buf = new_buf(82 + 8 * b8ocnts.length);
	/* [MS-ODRAW] 2.2.12 OfficeArtDggContainer */
	buf.write_shift(2, 0x0F);
	buf.write_shift(2, 0xF000);
	buf.write_shift(4, 74 + 8 * b8ocnts.length);
	/* 2.2.48 OfficeArtFDGGBlock */
	{
		buf.write_shift(2, 0);
		buf.write_shift(2, 0xF006);
		buf.write_shift(4, 16 + 8 * b8ocnts.length);
		/* 2.2.47 OfficeArtFDGG */
		{
			buf.write_shift(4, b8oid);
			buf.write_shift(4, b8ocnts.length+1);
			var acc = 0; for(var i = 0; i < b8ocnts.length; ++i) acc += (b8ocnts[i] && b8ocnts[i][1] || 0); buf.write_shift(4, acc);
			buf.write_shift(4, b8ocnts.length);
		}
		/* 2.2.46 OfficeArtIDCL + */
		b8ocnts.forEach(function(b8) {
			buf.write_shift(4, b8[0]);
			buf.write_shift(4, b8[2]);
		});
	}
	/* 2.2.9 OfficeArtFOPT */
	{
		buf.write_shift(2, 0x33); // 0x03 | (3 << 4)
		buf.write_shift(2, 0xF00B);
		buf.write_shift(4, 0x12); // 3 * 6
		/* 2.3.21.15 Text Boolean Properties */
		buf.write_shift(2, 0xBF); buf.write_shift(4, 0x00080008);
		/* 2.3.7.2 fillColor */
		buf.write_shift(2, 0x0181); buf.write_shift(4, 0x08000041);
		/* 2.3.8.1 lineColor */
		buf.write_shift(2, 0x01C0); buf.write_shift(4, 0x08000040);
	}
	/* 2.2.45 OfficeArtSplitMenuColorContainer */
	{
		buf.write_shift(2, 0x40);
		buf.write_shift(2, 0xF11E);
		buf.write_shift(4, 16);
		buf.write_shift(4, 0x0800000D);
		buf.write_shift(4, 0x0800000C);
		buf.write_shift(4, 0x08000017);
		buf.write_shift(4, 0x100000F7);
	}
	return buf;
}
function write_comments_biff8(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {
	var notes/*:Array<RawData>*/ = [], sz = 0, pl = buf_array(), baseid = b8oid;
	var _oasc;
	comments.forEach(function(c, ci) {
		var author = "";
		var text = c[0].map(function(t) { if(t.a && !author) author = t.a; return t.t; }).join("");
		++b8oid;

		/* 2.2.14 OfficeArtSpContainer */
		{
			var oasc = new_buf(0x96);
			oasc.write_shift(2, 0x0F);
			oasc.write_shift(2, 0xF004);
			oasc.write_shift(4, 0x96);
			/* 2.2.40 OfficeArtFSP */
			{
				oasc.write_shift(2, 0xca2); // 0x02 | (0xca << 4)
				oasc.write_shift(2, 0xF00A);
				oasc.write_shift(4, 8);
				oasc.write_shift(4, b8oid);
				oasc.write_shift(4, 0xA00);
			}
			/* 2.2.9 OfficeArtFOPT */
			{
				oasc.write_shift(2, 0xE3); // 0x03 | (14 << 4)
				oasc.write_shift(2, 0xF00B);
				oasc.write_shift(4, 0x54); // 14 * 6
				/* 2.3.21.1 ITxid */
				oasc.write_shift(2, 0x80); oasc.write_shift(4, 0);
				/* 2.3.21.12 txdir */
				oasc.write_shift(2, 0x8B); oasc.write_shift(4, 0x02);
				/* 2.3.21.15 Text Boolean Properties */
				oasc.write_shift(2, 0xBF); oasc.write_shift(4, 0x00080008);
				/* 2.3.6.30 cxk */
				oasc.write_shift(2, 0x0158); oasc.l += 4;
				/* 2.3.7.2 fillColor */
				oasc.write_shift(2, 0x0181); oasc.write_shift(4, 0x08000050);
				/* 2.3.7.4 fillBackColor */
				oasc.write_shift(2, 0x0183); oasc.write_shift(4, 0x08000050);
				/* 2.3.7.6 fillCrMod */
				oasc.write_shift(2, 0x0185); oasc.write_shift(4, 0x100000F4);
				/* 2.3.7.43 Fill Style Boolean Properties */
				oasc.write_shift(2, 0x01BF); oasc.write_shift(4, 0x00100010);
				/* 2.3.8.1 lineColor */
				oasc.write_shift(2, 0x01C0); oasc.write_shift(4, 0x08000051);
				/* 2.3.8.4 lineCrMod */
				oasc.write_shift(2, 0x01C3); oasc.write_shift(4, 0x100000F4);
				/* 2.3.13.2 shadowColor */
				oasc.write_shift(2, 0x0201); oasc.write_shift(4, 0x08000051);
				/* 2.3.13.4 shadowCrMod */
				oasc.write_shift(2, 0x0203); oasc.write_shift(4, 0x100000F4);
				/* 2.3.13.23 Shadow Style Boolean Properties */
				oasc.write_shift(2, 0x023F); oasc.write_shift(4, 0x00030001);
				/* 2.3.4.44 Group Shape Boolean Properties */
				oasc.write_shift(2, 0x03BF); oasc.write_shift(4, 0x00020000 | (c[0].hidden ? 2 : 0));
			}
			/* [MS-XLS] 2.5.193 OfficeArtClientAnchorSheet */
			{
				oasc.l += 2;
				oasc.write_shift(2, 0xF010);
				oasc.write_shift(4, 0x12);
				oasc.write_shift(2, 0x3); // do not move or size with cells
				oasc.write_shift(2, c[2] + 2); oasc.l += 2;
				oasc.write_shift(2, c[1] + 1); oasc.l += 2;
				oasc.write_shift(2, c[2] + 4); oasc.l += 2;
				oasc.write_shift(2, c[1] + 5); oasc.l += 2;
			}
			/* [MS-XLS] 2.5.194 OfficeArtClientData */
			{
				oasc.l += 2;
				oasc.write_shift(2, 0xF011);
				oasc.l += 4;
			}
			oasc.l = 0x96;
			if(ci == 0) /* write_biff_rec(pl, 0x003C, oasc); */ _oasc = oasc;
			else write_biff_rec(pl, 0x00EC, oasc);
		}
		sz += 0x96;

		/* [MS-XLS] 2.4.181 Obj */
		{
			var obj = new_buf(52); // 22 + 26 + 4
			/* [MS-XLS] 2.5.143 FtCmo */
			obj.write_shift(2, 0x15);
			obj.write_shift(2, 0x12);
			obj.write_shift(2, 0x19);
			obj.write_shift(2, b8oid);
			obj.write_shift(2, 0);
			obj.l = 22;
			/* [MS-XLS] 2.5.149 FtNts */
			obj.write_shift(2, 0x0D);
			obj.write_shift(2, 0x16);
			obj.write_shift(4, 0x62726272);
			obj.write_shift(4, 0x95374305);
			obj.write_shift(4, 0x80301328);
			obj.write_shift(4, 0x69696904 + b8oid*256);
			obj.write_shift(2,0);
			obj.write_shift(4,0);
			// reserved
			obj.l += 4;
			write_biff_rec(pl, 0x005D, obj);
		}

		/* [MS-XLS] 2.5.195 OfficeArtClientTextbox */
		{
			var oact = new_buf(8);
			oact.l += 2;
			oact.write_shift(2, 0xF00D);
			oact.l += 4;
			write_biff_rec(pl, 0x00EC, oact);
		}
		sz += 8;

		/* [MS-XLS] 2.4.329 TxO */
		{
			var txo = new_buf(18);
			txo.write_shift(2, 0x12);
			txo.l += 8;
			txo.write_shift(2, text.length);
			txo.write_shift(2, 0x10);
			txo.l += 4;
			write_biff_rec(pl, 0x01b6, txo);
			/* text continue record TODO: switch to wide strings */
			{
				var cont = new_buf(1 + text.length);
				cont.write_shift(1, 0);
				cont.write_shift(text.length, text, "sbcs");
				write_biff_rec(pl, 0x003C, cont);
			}
			/* formatting continue records */
			{
				var conf = new_buf(0x10);
				conf.l += 8;
				conf.write_shift(2, text.length);
				conf.l += 6;
				write_biff_rec(pl, 0x003C, conf);
			}
		}

		/* 2.4.179 Note */
		{
			var notesh = new_buf(12 + author.length);
			notesh.write_shift(2, c[1]);
			notesh.write_shift(2, c[2]);
			notesh.write_shift(2, 0 | (c[0].hidden ? 0 : 2));
			notesh.write_shift(2, b8oid);
			notesh.write_shift(2, author.length);
			notesh.write_shift(1, 0);
			notesh.write_shift(author.length, author, "sbcs");
			notesh.l ++;
			notes.push(notesh);
		}
	});
	/* [MS-ODRAW] 2.2.13 OfficeArtDgContainer */
	{
		var hdr = new_buf(80);
		hdr.write_shift(2, 0x0F);
		hdr.write_shift(2, 0xF002);
		hdr.write_shift(4, sz + hdr.length - 8);
		/* [MS-ODRAW] 2.2.49 OfficeArtFDG */
		{
			hdr.write_shift(2, 0x10);
			hdr.write_shift(2, 0xF008);
			hdr.write_shift(4, 0x08);
			hdr.write_shift(4, comments.length + 1);
			hdr.write_shift(4, b8oid);
		}
		/* [MS-ODRAW] 2.2.16 OfficeArtSpgrContainer */
		{
			hdr.write_shift(2, 0x0f);
			hdr.write_shift(2, 0xF003);
			hdr.write_shift(4, sz + 0x30);
			/* [MS-ODRAW] 2.2.14 OfficeArtSpContainer */
			{
				hdr.write_shift(2, 0x0f);
				hdr.write_shift(2, 0xF004);
				hdr.write_shift(4, 0x28);
				/* [MS-ODRAW] 2.2.38 OfficeArtFSPGR */
				{
					hdr.write_shift(2, 0x01);
					hdr.write_shift(2, 0xF009);
					hdr.write_shift(4, 0x10);
					hdr.l += 16;
				}
				/* [MS-ODRAW] 2.2.40 OfficeArtFSP */
				{
					hdr.write_shift(2, 0x02);
					hdr.write_shift(2, 0xF00A);
					hdr.write_shift(4, 0x08);
					hdr.write_shift(4, baseid);
					hdr.write_shift(4, 0x05);
				}
			}
		}
		write_biff_rec(ba, 0x00EC, /* hdr */ _oasc ? bconcat([hdr, _oasc]) : hdr);
	}
	ba.push(pl.end());
	notes.forEach(function(n) { write_biff_rec(ba, 0x001C, n); });
	b8ocnts.push([baseid, comments.length + 1, b8oid]);
	++b8oid;
}

function write_FONTS_biff8(ba, data, opts) {
	write_biff_rec(ba, 0x0031 /* Font */, write_Font({
		sz:12,
		color: {theme:1},
		name: "Arial",
		family: 2,
		scheme: "minor"
	}, opts));
}


function write_FMTS_biff8(ba, NF/*:?SSFTable*/, opts) {
	if(!NF) return;
	[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {
		/*:: if(!NF) return; */
		for(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_biff_rec(ba, 0x041E /* Format */, write_Format(i, NF[i], opts));
	});
}

function write_FEAT(ba, ws) {
	/* [MS-XLS] 2.4.112 */
	var o = new_buf(19);
	o.write_shift(4, 0x867); o.write_shift(4, 0); o.write_shift(4, 0);
	o.write_shift(2, 3); o.write_shift(1, 1); o.write_shift(4, 0);
	write_biff_rec(ba, 0x0867 /* FeatHdr */, o);
	/* [MS-XLS] 2.4.111 */
	o = new_buf(39);
	o.write_shift(4, 0x868); o.write_shift(4, 0); o.write_shift(4, 0);
	o.write_shift(2, 3); o.write_shift(1, 0); o.write_shift(4, 0);
	o.write_shift(2, 1); o.write_shift(4, 4); o.write_shift(2, 0);
	write_Ref8U(safe_decode_range(ws['!ref']||"A1"), o);
	o.write_shift(4, 4);
	write_biff_rec(ba, 0x0868 /* Feat */, o);
}

function write_CELLXFS_biff8(ba, opts) {
	for(var i = 0; i < 16; ++i) write_biff_rec(ba, 0x00e0 /* XF */, write_XF({numFmtId:0, style:true}, 0, opts));
	opts.cellXfs.forEach(function(c) {
		write_biff_rec(ba, 0x00e0 /* XF */, write_XF(c, 0, opts));
	});
}

function write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {
	for(var R=0; R<ws['!links'].length; ++R) {
		var HL = ws['!links'][R];
		write_biff_rec(ba, 0x01b8 /* HLink */, write_HLink(HL));
		if(HL[1].Tooltip) write_biff_rec(ba, 0x0800 /* HLinkTooltip */, write_HLinkTooltip(HL));
	}
	delete ws['!links'];
}

function write_ws_cols_biff8(ba, cols) {
	if(!cols) return;
	var cnt = 0;
	cols.forEach(function(col, idx) {
		if(++cnt <= 256 && col) {
			write_biff_rec(ba, 0x007d /* ColInfo */, write_ColInfo(col_obj_w(idx, col), idx));
		}
	});
}

function write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/) {
	var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
	if(cell.v == null && !cell.bf) {
		write_biff_rec(ba, 0x0201 /* Blank */, write_XLSCell(R, C, os));
		return;
	}
	if(cell.bf) write_biff_rec(ba, 0x0006 /* Formula */, write_Formula(cell, R, C, opts, os));
	else switch(cell.t) {
		case 'd': case 'n':
			var v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;
			if(isNaN(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x24, os, opts, "e")); // #NUM!
			else if(!isFinite(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x07, os, opts, "e")); // #DIV/0!
			/* TODO: emit RK as appropriate */
			else write_biff_rec(ba, 0x0203 /* Number */, write_Number(R, C, v, os, opts));
			break;
		case 'b': case 'e':
			write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, cell.v, os, opts, cell.t));
			break;
		/* TODO: codepage, sst */
		case 's': case 'str':
			if(opts.bookSST) {
				var isst = get_sst_id(opts.Strings, cell.v == null ? "" : String(cell.v), opts.revStrings);
				write_biff_rec(ba, 0x00fd /* LabelSst */, write_LabelSst(R, C, isst, os, opts));
			} else write_biff_rec(ba, 0x0204 /* Label */, write_Label(R, C, (cell.v == null ? "" : String(cell.v)).slice(0,255), os, opts));
			break;
		default:
			write_biff_rec(ba, 0x0201 /* Blank */, write_XLSCell(R, C, os));
	}
}

/* [MS-XLS] 2.1.7.20.5 */
function write_ws_biff8(idx/*:number*/, opts, wb/*:Workbook*/) {
	var ba = buf_array();
	var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
	var _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);
	var _sheet/*:WBWSProp*/ = ((_WB.Sheets||[])[idx]||{}/*:any*/);
	var dense = ws["!data"] != null;
	var b8 = opts.biff == 8;
	var ref/*:string*/, rr = "", cols/*:Array<string>*/ = [];
	var range = safe_decode_range(ws['!ref'] || "A1");
	var MAX_ROWS = b8 ? 65536 : 16384;
	if(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {
		if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:IV" + MAX_ROWS);
		range.e.c = Math.min(range.e.c, 0xFF);
		range.e.r = Math.min(range.e.r, MAX_ROWS-1);
	}

	write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));
	/* [Uncalced] Index */
	write_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));
	write_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));
	write_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));
	write_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));
	write_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));
	write_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));
	write_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));
	write_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));
	write_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));
	write_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));
	/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */
	/* Header (string) */
	/* Footer (string) */
	write_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));
	write_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));
	/* ... */
	if(b8) write_ws_cols_biff8(ba, ws["!cols"]);
	/* ... */
	write_biff_rec(ba, 0x0200 /* Dimensions */, write_Dimensions(range, opts));
	/* ... */

	var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
	if(b8) ws['!links'] = [];
	for(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
	var comments = [];
	var row = [];
	for(var R = range.s.r; R <= range.e.r; ++R) {
		if(dense) row = ws["!data"][R] || [];
		rr = encode_row(R);
		for(C = range.s.c; C <= range.e.c; ++C) {
			var cell = dense ? row[C] : ws[cols[C] + rr];
			if(!cell) continue;
			/* write cell */
			write_ws_biff8_cell(ba, cell, R, C, opts, date1904);
			if(b8 && cell.l) ws['!links'].push([cols[C] + rr, cell.l]);
			if(cell.c) comments.push([cell.c, R, C]);
		}
	}
	var cname/*:string*/ = _sheet.CodeName || _sheet.name || s;
	/* ... */
	if(b8) write_comments_biff8(ba, comments); else write_comments_biff2(ba, comments);
	/* ... */
	if(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));
	/* ... */
	if(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));
	/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */
	if(b8) write_ws_biff8_hlinks(ba, ws);
	/* [DVAL] */
	write_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));
	/* *WebPub *CellWatch [SheetExt] */
	if(b8) write_FEAT(ba, ws);
	/* *FEAT11 *RECORD12 */
	write_biff_rec(ba, 0x000a /* EOF */);
	return ba.end();
}

/* [MS-XLS] 2.1.7.20.3 */
function write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {
	var A = buf_array();
	var _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);
	var _sheets/*:Array<WBWSProp>*/ = (_WB.Sheets||[]);
	var _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:"ThisWorkbook"*/}/*:: ):any)*/;
	var b8 = opts.biff == 8, b5 = opts.biff == 5;
	write_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));
	if(opts.bookType == "xla") write_biff_rec(A, 0x0087 /* Addin */);
	write_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);
	write_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));
	if(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);
	if(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);
	write_biff_rec(A, 0x00e2 /* InterfaceEnd */);
	write_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess("SheetJS", opts));
	/* [FileSharing] */
	write_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));
	/* *2047 Lel */
	if(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));
	if(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);
	write_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));
	if(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);
	/* [ObNoMacros] */
	if(b8 && wb.vbaraw) {
		var cname/*:string*/ = _wb.CodeName || "ThisWorkbook";
		write_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));
	}
	write_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));
	/* *FnGroupName *FnGrp12 */
	/* *Lbl */
	/* [OleObjectSize] */
	write_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));
	write_biff_rec(A, 0x0012 /* Protect */, writebool(false));
	write_biff_rec(A, 0x0013 /* Password */, writeuint16(0));
	if(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));
	if(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));
	write_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));
	write_biff_rec(A, 0x0040 /* Backup */, writebool(false));
	write_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));
	write_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)=="true"));
	write_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));
	if(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));
	write_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));
	/* ... */
	write_FONTS_biff8(A, wb, opts);
	write_FMTS_biff8(A, wb.SSF, opts);
	write_CELLXFS_biff8(A, opts);
	/* ... */
	if(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));
	var a = A.end();

	var C = buf_array();
	/* METADATA [MTRSettings] [ForceFullCalculation] */
	if(b8) write_biff_rec(C, 0x008C /* Country */, write_Country());
	/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture */

	/* BIFF8: MsoDrawingGroup [*Continue] */
	if(b8 && b8ocnts.length) write_biff_rec(C, 0x00EB /* MsoDrawingGroup */, write_MsoDrawingGroup());
	/* BIFF8: [SST *Continue] ExtSST */
	if(b8 && opts.Strings) write_biff_continue(C, 0x00FC /* SST */, write_SST(opts.Strings, opts));

	/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */
	write_biff_rec(C, 0x000A /* EOF */);
	var c = C.end();

	var B = buf_array();
	var blen = 0, j = 0;
	for(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;
	var start = a.length + blen + c.length;
	for(j = 0; j < wb.SheetNames.length; ++j) {
		var _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);
		write_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));
		start += bufs[j].length;
	}
	/* 1*BoundSheet8 */
	var b = B.end();
	if(blen != b.length) throw new Error("BS8 " + blen + " != " + b.length);

	var out = [];
	if(a.length) out.push(a);
	if(b.length) out.push(b);
	if(c.length) out.push(c);
	return bconcat(out);
}

/* [MS-XLS] 2.1.7.20 Workbook Stream */
function write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {
	var o = opts || {};
	var bufs = [];

	if(wb && !wb.SSF) {
		wb.SSF = dup(table_fmt);
	}
	if(wb && wb.SSF) {
		make_ssf(); SSF_load_table(wb.SSF);
		// $FlowIgnore
		o.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;
		o.ssf = wb.SSF;
	}

	b8oid = 1; b8ocnts = [];
	o.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;
	fix_write_opts(o);

	o.cellXfs = [];
	get_cell_style(o.cellXfs, {}, {revssf:{"General":0}});

	if(!wb.Props) wb.Props = {};

	for(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);
	bufs.unshift(write_biff8_global(wb, bufs, o));
	return bconcat(bufs);
}

function write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {
	for(var i = 0; i <= wb.SheetNames.length; ++i) {
		var ws = wb.Sheets[wb.SheetNames[i]];
		if(!ws || !ws["!ref"]) continue;
		var range = decode_range(ws["!ref"]);
		if(range.e.c > 255) { // note: 255 is IV
			if(typeof console != "undefined" && console.error) console.error("Worksheet '" + wb.SheetNames[i] + "' extends beyond column IV (255).  Data may be lost.");
		}
		if(range.e.r > 65535) {
			if(typeof console != "undefined" && console.error) console.error("Worksheet '" + wb.SheetNames[i] + "' extends beyond row 65536.  Data may be lost.");
		}
	}

	var o = opts || {};
	switch(o.biff || 2) {
		case 8: case 5: return write_biff8_buf(wb, opts);
		case 4: case 3: case 2: return write_biff2_buf(wb, opts);
	}
	throw new Error("invalid type " + o.bookType + " for BIFF");
}
/* note: browser DOM element cannot see mso- style attrs, must parse */
function html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {
	var opts = _opts || {};
	var dense = (opts.dense != null) ? opts.dense : DENSE;
	var ws/*:Worksheet*/ = ({}/*:any*/); if(dense) ws["!data"] = [];
	str = str_remove_ng(str, "<!--", "-->");
	var mtch/*:any*/ = str.match(/<table/i);
	if(!mtch) throw new Error("Invalid HTML: could not find <table>");
	var mtch2/*:any*/ = str.match(/<\/table/i);
	var i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;
	var rows = split_regex(str.slice(i, j), /(:?<tr[^<>]*>)/i, "<tr>");
	var R = -1, C = 0, RS = 0, CS = 0;
	var range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};
	var merges/*:Array<Range>*/ = [];
	for(i = 0; i < rows.length; ++i) {
		var row = rows[i].trim();
		var hd = row.slice(0,3).toLowerCase();
		if(hd == "<tr") { ++R; if(opts.sheetRows && opts.sheetRows <= R) { --R; break; } C = 0; continue; }
		if(hd != "<td" && hd != "<th") continue;
		var cells = row.split(/<\/t[dh]>/i);
		for(j = 0; j < cells.length; ++j) {
			var cell = cells[j].trim();
			if(!cell.match(/<t[dh]/i)) continue;
			var m = cell, cc = 0;
			/* TODO: parse styles etc */
			while(m.charAt(0) == "<" && (cc = m.indexOf(">")) > -1) m = m.slice(cc+1);
			for(var midx = 0; midx < merges.length; ++midx) {
				var _merge/*:Range*/ = merges[midx];
				if(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }
			}
			var tag = parsexmltag(cell.slice(0, cell.indexOf(">")));
			CS = tag.colspan ? +tag.colspan : 1;
			if((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});
			var _t/*:string*/ = tag.t || tag["data-t"] || "";
			/* TODO: generate stub cells */
			if(!m.length) { C += CS; continue; }
			m = htmldecode(m);
			if(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;
			if(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;
			if(!m.length) { C += CS; continue; }
			var o/*:Cell*/ = {t:'s', v:m};
			if(opts.raw || !m.trim().length || _t == 's'){}
			else if(m === 'TRUE') o = {t:'b', v:true};
			else if(m === 'FALSE') o = {t:'b', v:false};
			else if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};
			else if(!isNaN(fuzzydate(m).getDate())) {
				o = ({t:'d', v:parseDate(m)}/*:any*/);
				if(opts.UTC === false) o.v = utc_to_local(o.v);
				if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);
				o.z = opts.dateNF || table_fmt[14];
			} else if(m.charCodeAt(0) == 35 /* # */ && RBErr[m] != null) {
				o.t = 'e'; o.w = m; o.v = RBErr[m];
			}
			if(o.cellText !== false) o.w = m;
			if(dense) { if(!ws["!data"][R]) ws["!data"][R] = []; ws["!data"][R][C] = o; }
			else ws[encode_cell({r:R, c:C})] = o;
			C += CS;
		}
	}
	ws['!ref'] = encode_range(range);
	if(merges.length) ws["!merges"] = merges;
	return ws;
}
function make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {
	var M/*:Array<Range>*/ = (ws['!merges'] ||[]);
	var oo/*:Array<string>*/ = [];
	var sp = ({}/*:any*/);
	var dense = ws["!data"] != null;
	for(var C = r.s.c; C <= r.e.c; ++C) {
		var RS = 0, CS = 0;
		for(var j = 0; j < M.length; ++j) {
			if(M[j].s.r > R || M[j].s.c > C) continue;
			if(M[j].e.r < R || M[j].e.c < C) continue;
			if(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }
			RS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;
		}
		if(RS < 0) continue;
		var coord = encode_col(C) + encode_row(R);
		var cell = dense ? (ws["!data"][R]||[])[C] : ws[coord];
		if(cell && cell.t == 'n' && cell.v != null && !isFinite(cell.v)) {
			if(isNaN(cell.v)) cell = ({t:'e', v:0x24, w:BErr[0x24]});
			else cell = ({t:'e', v:0x07, w:BErr[0x07]});
		}
		/* TODO: html entities */
		var w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || "")) || "";
		sp = ({}/*:any*/);
		if(RS > 1) sp.rowspan = RS;
		if(CS > 1) sp.colspan = CS;
		if(o.editable) w = '<span contenteditable="true">' + w + '</span>';
		else if(cell) {
			sp["data-t"] = cell && cell.t || 'z';
			// note: data-v is unaffected by the timezone interpretation
			if(cell.v != null) sp["data-v"] = escapehtml(cell.v instanceof Date ? cell.v.toISOString() : cell.v);
			if(cell.z != null) sp["data-z"] = cell.z;
			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>';
		}
		sp.id = (o.id || "sjs") + "-" + coord;
		oo.push(writextag('td', w, sp));
	}
	var preamble = "<tr>";
	return preamble + oo.join("") + "</tr>";
}

var HTML_BEGIN = '<html><head><meta charset="utf-8"/><title>SheetJS Table Export</title></head><body>';
var HTML_END = '</body></html>';

function html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {
	var mtch = str_match_xml_ig(str, "table");
	if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>");
	if(mtch.length == 1) {
		var w = sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);
		w.bookType = "html";
		return w;
	}
	var wb = book_new();
	mtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), "Sheet" + (idx+1)); });
	wb.bookType = "html";
	return wb;
}

function make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {
	var out/*:Array<string>*/ = [];
	return out.join("") + '<table' + (o && o.id ? ' id="' + o.id + '"' : "") + '>';
}

function sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {
	var o = opts || {};
	var header = o.header != null ? o.header : HTML_BEGIN;
	var footer = o.footer != null ? o.footer : HTML_END;
	var out/*:Array<string>*/ = [header];
	var r = decode_range(ws['!ref'] || "A1");
	out.push(make_html_preamble(ws, r, o));
	if(ws["!ref"]) for(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));
	out.push("</table>" + footer);
	return out.join("");
}

function sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {
	var rows/*:HTMLCollection<HTMLTableRowElement>*/ = table.rows;
	if(!rows) {
		/* not an HTML TABLE */
		throw "Unsupported origin when " + table.tagName + " is not a TABLE";
	}

	var opts = _opts || {};
	var dense = ws["!data"] != null;
	var or_R = 0, or_C = 0;
	if(opts.origin != null) {
		if(typeof opts.origin == 'number') or_R = opts.origin;
		else {
			var _origin/*:CellAddress*/ = typeof opts.origin == "string" ? decode_cell(opts.origin) : opts.origin;
			or_R = _origin.r; or_C = _origin.c;
		}
	}

	var sheetRows = Math.min(opts.sheetRows||10000000, rows.length);
	var range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};
	if(ws["!ref"]) {
		var _range/*:Range*/ = decode_range(ws["!ref"]);
		range.s.r = Math.min(range.s.r, _range.s.r);
		range.s.c = Math.min(range.s.c, _range.s.c);
		range.e.r = Math.max(range.e.r, _range.e.r);
		range.e.c = Math.max(range.e.c, _range.e.c);
		if(or_R == -1) range.e.r = or_R = _range.e.r + 1;
	}
	var merges/*:Array<Range>*/ = [], midx = 0;
	var rowinfo/*:Array<RowInfo>*/ = ws["!rows"] || (ws["!rows"] = []);
	var _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;
	if(!ws["!cols"]) ws['!cols'] = [];
	for(; _R < rows.length && R < sheetRows; ++_R) {
		var row/*:HTMLTableRowElement*/ = rows[_R];
		if (is_dom_element_hidden(row)) {
			if (opts.display) continue;
			rowinfo[R] = {hidden: true};
		}
		var elts/*:HTMLCollection<HTMLTableCellElement>*/ = (row.cells);
		for(_C = C = 0; _C < elts.length; ++_C) {
			var elt/*:HTMLTableCellElement*/ = elts[_C];
			if (opts.display && is_dom_element_hidden(elt)) continue;
			var v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);
			var z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');
			for(midx = 0; midx < merges.length; ++midx) {
				var m/*:Range*/ = merges[midx];
				if(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }
			}
			/* TODO: figure out how to extract nonstandard mso- style */
			CS = +elt.getAttribute("colspan") || 1;
			if( ((RS = (+elt.getAttribute("rowspan") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});
			var o/*:Cell*/ = {t:'s', v:v};
			var _t/*:string*/ = elt.getAttribute("data-t") || elt.getAttribute("t") || "";
			if(v != null) {
				if(v.length == 0) o.t = _t || 'z';
				else if(opts.raw || v.trim().length == 0 || _t == "s"){}
				else if(_t == "e" && BErr[+v]) o = {t:'e', v:+v, w: BErr[+v]};
				else if(v === 'TRUE') o = {t:'b', v:true};
				else if(v === 'FALSE') o = {t:'b', v:false};
				else if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};
				else if(!isNaN(fuzzydate(v).getDate())) {
					o = ({t:'d', v:parseDate(v)}/*:any*/);
					if(opts.UTC) o.v = local_to_utc(o.v);
					if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);
					o.z = opts.dateNF || table_fmt[14];
				} else if(v.charCodeAt(0) == 35 /* # */ && RBErr[v] != null) o = ({t:'e', v: RBErr[v], w: v});
			}
			if(o.z === undefined && z != null) o.z = z;
			/* The first link is used.  Links are assumed to be fully specified.
			 * TODO: The right way to process relative links is to make a new <a> */
			var l = "", Aelts = elt.getElementsByTagName("A");
			if(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)	if(Aelts[Aelti].hasAttribute("href")) {
				l = Aelts[Aelti].getAttribute("href"); if(l.charAt(0) != "#") break;
			}
			if(l && l.charAt(0) != "#" &&	l.slice(0, 11).toLowerCase() != 'javascript:') o.l = ({ Target: l });
			if(dense) { if(!ws["!data"][R + or_R]) ws["!data"][R + or_R] = []; ws["!data"][R + or_R][C + or_C] = o; }
			else ws[encode_cell({c:C + or_C, r:R + or_R})] = o;
			if(range.e.c < C + or_C) range.e.c = C + or_C;
			C += CS;
		}
		++R;
	}
	if(merges.length) ws['!merges'] = (ws["!merges"] || []).concat(merges);
	range.e.r = Math.max(range.e.r, R - 1 + or_R);
	ws['!ref'] = encode_range(range);
	if(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance
	return ws;
}

function parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {
	var opts = _opts || {};
	var ws/*:Worksheet*/ = ({}/*:any*/); if(opts.dense) ws["!data"] = [];
	return sheet_add_dom(ws, table, _opts);
}

function table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {
	var o = sheet_to_workbook(parse_dom_table(table, opts), opts);
	//o.bookType = "dom"; // TODO: define a type for this
	return o;
}

function is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {
	var display/*:string*/ = '';
	var get_computed_style/*:?function*/ = get_get_computed_style_function(element);
	if(get_computed_style) display = get_computed_style(element).getPropertyValue('display');
	if(!display) display = element.style && element.style.display;
	return display === 'none';
}

/* global getComputedStyle */
function get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {
	// The proper getComputedStyle implementation is the one defined in the element window
	if(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;
	// If it is not available, try to get one from the global namespace
	if(typeof getComputedStyle === 'function') return getComputedStyle;
	return null;
}
/* OpenDocument */
function parse_text_p(text/*:string*//*::, tag*/)/*:Array<any>*/ {
	/* 6.1.2 White Space Characters */
	var fixed = text
		.replace(/[\t\r\n]/g, " ").trim().replace(/ +/g, " ")
		.replace(/<text:s\/>/g," ")
		.replace(/<text:s text:c="(\d+)"\/>/g, function($$,$1) { return Array(parseInt($1,10)+1).join(" "); })
		.replace(/<text:tab[^<>]*\/>/g,"\t")
		.replace(/<text:line-break\/>/g,"\n");
	var v = unescapexml(fixed.replace(/<[^<>]*>/g,""));

	return [v];
}

/* Note: ODS can stick styles in content.xml or styles.xml, FODS blurs lines */
function parse_ods_styles(d/*:string*/, _opts, _nfm) {
	var number_format_map = _nfm || {};
	var str = xlml_normalize(d);
	xlmlregex.lastIndex = 0;
	str = remove_doctype(str_remove_ng(str, "<!--", "-->"));
	var Rn, NFtag, NF = "", tNF = "", y, etpos = 0, tidx = -1, infmt = false, payload = "";
	while((Rn = xlmlregex.exec(str))) {
		switch((Rn[3]=Rn[3].replace(/_[\s\S]*$/,""))) {
		/* Number Format Definitions */
		case 'number-style': // <number:number-style> 16.29.2
		case 'currency-style': // <number:currency-style> 16.29.8
		case 'percentage-style': // <number:percentage-style> 16.29.10
		case 'date-style': // <number:date-style> 16.29.11
		case 'time-style': // <number:time-style> 16.29.19
		case 'text-style': // <number:text-style> 16.29.26
			if(Rn[1]==='/') {
				infmt = false;
				if(NFtag['truncate-on-overflow'] == "false") {
					if(NF.match(/h/)) NF = NF.replace(/h+/, "[$&]");
					else if(NF.match(/m/)) NF = NF.replace(/m+/, "[$&]");
					else if(NF.match(/s/)) NF = NF.replace(/s+/, "[$&]");
				}
				number_format_map[NFtag.name] = NF;
				NF = "";
			} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				infmt = true;
				NF = "";
				NFtag = parsexmltag(Rn[0], false);
			} break;

		// LibreOffice bug https://bugs.documentfoundation.org/show_bug.cgi?id=149484
		case 'boolean-style': // <number:boolean-style> 16.29.24
			if(Rn[1]==='/') {
				infmt = false;
				number_format_map[NFtag.name] = "General";
				NF = "";
			} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				infmt = true;
				NF = "";
				NFtag = parsexmltag(Rn[0], false);
			} break;

		/* Number Format Elements */
		case 'boolean': // <number:boolean> 16.29.25
			NF += "General"; // ODF spec is unfortunately underspecified here
			break;

		case 'text': // <number:text> 16.29.27
			if(Rn[1]==='/') {
				payload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);
				// NOTE: Excel has a different interpretation of "%%" and friends
				if(payload == "%" && NFtag[0] == '<number:percentage-style') NF += "%";
				else NF += '"' + payload.replace(/"/g, '""') + '"';
			} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				tidx = xlmlregex.lastIndex;
			} break;


		case 'day': { // <number:day> 16.29.12
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "d"; break;
				case "long": NF += "dd"; break;
				default: NF += "dd"; break; // TODO: error condition
			}
		} break;

		case 'day-of-week': { // <number:day-of-week> 16.29.16
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "ddd"; break;
				case "long": NF += "dddd"; break;
				default: NF += "ddd"; break;
			}
		} break;

		case 'era': { // <number:era> 16.29.15 TODO: proper mapping
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "ee"; break;
				case "long": NF += "eeee"; break;
				default: NF += "eeee"; break; // TODO: error condition
			}
		} break;

		case 'hours': { // <number:hours> 16.29.20
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "h"; break;
				case "long": NF += "hh"; break;
				default: NF += "hh"; break; // TODO: error condition
			}
		} break;

		case 'minutes': { // <number:minutes> 16.29.21
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "m"; break;
				case "long": NF += "mm"; break;
				default: NF += "mm"; break; // TODO: error condition
			}
		} break;

		case 'month': { // <number:month> 16.29.13
			y = parsexmltag(Rn[0], false);
			if(y["textual"]) NF += "mm";
			switch(y["style"]) {
				case "short": NF += "m"; break;
				case "long": NF += "mm"; break;
				default: NF += "m"; break;
			}
		} break;

		case 'seconds': { // <number:seconds> 16.29.22
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "s"; break;
				case "long": NF += "ss"; break;
				default: NF += "ss"; break; // TODO: error condition
			}
			if(y["decimal-places"]) NF += "." + fill("0", +y["decimal-places"]);
		} break;

		case 'year': { // <number:year> 16.29.14
			y = parsexmltag(Rn[0], false);
			switch(y["style"]) {
				case "short": NF += "yy"; break;
				case "long": NF += "yyyy"; break;
				default: NF += "yy"; break; // TODO: error condition
			}
		} break;

		case 'am-pm': // <number:am-pm> 16.29.23
			NF += "AM/PM"; // LO autocorrects A/P -> AM/PM
			break;

		case 'week-of-year': // <number:week-of-year> 16.29.17
		case 'quarter': // <number:quarter> 16.29.18
			console.error("Excel does not support ODS format token " + Rn[3]);
			break;

		case 'fill-character': // <number:fill-character> 16.29.5
			if(Rn[1]==='/') {
				payload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);
				// NOTE: Excel has a different interpretation of "%%" and friends
				NF += '"' + payload.replace(/"/g, '""') + '"*';
			} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				tidx = xlmlregex.lastIndex;
			} break;

		case 'scientific-number': // <number:scientific-number> 16.29.6
			// TODO: find a mapping for all parameters
			y = parsexmltag(Rn[0], false);
			NF += "0." + fill("0", +y["min-decimal-places"] || +y["decimal-places"] || 2) + fill("?", +y["decimal-places"] - +y["min-decimal-places"] || 0) + "E" + (parsexmlbool(y["forced-exponent-sign"]) ? "+" : "") + fill("0", +y["min-exponent-digits"] || 2);
			break;

		case 'fraction': // <number:fraction> 16.29.7
			// TODO: find a mapping for all parameters
			y = parsexmltag(Rn[0], false);
			if(!+y["min-integer-digits"]) NF += "#";
			else NF += fill("0", +y["min-integer-digits"]);
			NF += " ";
			NF += fill("?", +y["min-numerator-digits"] || 1);
			NF += "/";
			if(+y["denominator-value"]) NF += y["denominator-value"];
			else NF += fill("?", +y["min-denominator-digits"] || 1);
			break;

		case 'currency-symbol': // <number:currency-symbol> 16.29.9
			// TODO: localization with [$-...]
			if(Rn[1]==='/') {
				NF += '"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/"/g, '""') + '"';
			} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				tidx = xlmlregex.lastIndex;
			} else NF += "$";
			break;

		case 'text-properties': // <style:text-properties> 16.29.29
			y = parsexmltag(Rn[0], false);
			switch((y["color"]||"").toLowerCase().replace("#", "")) {
				case "ff0000": case "red": NF = "[Red]" + NF; break;
			}
			break;

		case 'text-content': // <number:text-content> 16.29.28
			NF += "@";
			break;

		case 'map': // <style:map> 16.3
			// TODO: handle more complex maps
			y = parsexmltag(Rn[0], false);
			if(unescapexml(y["condition"]) == "value()>=0") NF = number_format_map[y["apply-style-name"]] + ";" + NF;
			else console.error("ODS number format may be incorrect: " + y["condition"]);
			break;

		case 'number': // <number:number> 16.29.3
			// TODO: handle all the attributes
			if(Rn[1]==='/') break;
			y = parsexmltag(Rn[0], false);
			tNF = "";
			tNF += fill("0", +y["min-integer-digits"] || 1);
			if(parsexmlbool(y["grouping"])) tNF = commaify(fill("#", Math.max(0, 4 - tNF.length)) + tNF);
			if(+y["min-decimal-places"] || +y["decimal-places"]) tNF += ".";
			if(+y["min-decimal-places"]) tNF += fill("0", +y["min-decimal-places"] || 1);
			if(+y["decimal-places"] - (+y["min-decimal-places"]||0)) tNF += fill("0", +y["decimal-places"] - (+y["min-decimal-places"]||0)); // TODO: should this be "#" ?
			NF += tNF;
			break;

		case 'embedded-text': // <number:embedded-text> 16.29.4
			// TODO: verify interplay with grouping et al
			if(Rn[1]==='/') {
				if(etpos == 0) NF += '"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/"/g, '""') + '"';
				else NF = NF.slice(0, etpos) + '"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/"/g, '""') + '"' + NF.slice(etpos);
			} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
				tidx = xlmlregex.lastIndex;
				etpos = -+parsexmltag(Rn[0], false)["position"] || 0;
			} break;

	}}
	return number_format_map;
}

function parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {
		var opts = _opts || {};
		if(DENSE != null && opts.dense == null) opts.dense = DENSE;
		var str = xlml_normalize(d);
		var state/*:Array<any>*/ = [], tmp;
		var tag/*:: = {}*/;
		var nfidx, NF = "", pidx = 0;
		var sheetag/*:: = {name:"", '名称':""}*/;
		var rowtag/*:: = {'行号':""}*/;
		var Sheets = {}, SheetNames/*:Array<string>*/ = [];
		var ws = ({}/*:any*/); if(opts.dense) ws["!data"] = [];
		var Rn, q/*:: :any = ({t:"", v:null, z:null, w:"",c:[],}:any)*/;
		var ctag = ({value:""}/*:any*/), ctag2 = ({}/*:any*/);
		var textp = "", textpidx = 0, textptag/*:: = {}*/, oldtextp = "", oldtextpidx = 0;
		var textR = [], oldtextR = [];
		var R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};
		var row_ol = 0;
		var number_format_map = _nfm || {}, styles = {};
		var merges/*:Array<Range>*/ = [], mrange = {}, mR = 0, mC = 0;
		var rowinfo/*:Array<RowInfo>*/ = [], rowpeat = 1, colpeat = 1;
		var arrayf/*:Array<[Range, string]>*/ = [];
		var WB = {Names:[], WBProps:{}};
		var atag = ({}/*:any*/);
		var _Ref/*:[string, string]*/ = ["", ""];
		var comments/*:Array<Comment>*/ = [], comment/*:Comment*/ = ({}/*:any*/);
		var creator = "", creatoridx = 0;
		var isstub = false, intable = false;
		var i = 0;
		xlmlregex.lastIndex = 0;
		str = remove_doctype(str_remove_ng(str, "<!--", "-->"));
		while((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_[\s\S]*$/,""))) {

			case 'table': case '工作表': // 9.1.2 <table:table>
				if(Rn[1]==='/') {
					if(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);
					else ws['!ref'] = "A1:A1";
					if(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {
						ws['!fullref'] = ws['!ref'];
						range.e.r = opts.sheetRows - 1;
						ws['!ref'] = encode_range(range);
					}
					if(merges.length) ws['!merges'] = merges;
					if(rowinfo.length) ws["!rows"] = rowinfo;
					sheetag.name = sheetag['名称'] || sheetag.name;
					if(typeof JSON !== 'undefined') JSON.stringify(sheetag);
					SheetNames.push(sheetag.name);
					Sheets[sheetag.name] = ws;
					intable = false;
				}
				else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
					sheetag = parsexmltag(Rn[0], false);
					R = C = -1;
					range.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;
					ws = ({}/*:any*/); if(opts.dense) ws["!data"] = []; merges = [];
					rowinfo = [];
					intable = true;
				}
				break;

			case 'table-row-group': // 9.1.9 <table:table-row-group>
				if(Rn[1] === "/") --row_ol; else ++row_ol;
				break;
			case 'table-row': case '行': // 9.1.3 <table:table-row>
				if(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }
				rowtag = parsexmltag(Rn[0], false);
				if(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;
				rowpeat = +rowtag['number-rows-repeated'] || 1;
				/* TODO: remove magic */
				if(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};
				C = -1; break;
			case 'covered-table-cell': // 9.1.5 <table:covered-table-cell>
				if(Rn[1] !== '/') {
					++C;
					ctag = parsexmltag(Rn[0], false);
					colpeat = parseInt(ctag['number-columns-repeated']||"1",10) || 1;
					if(opts.sheetStubs) {
						while(colpeat-- > 0) {
							if(opts.dense) { if(!ws["!data"][R]) ws["!data"][R] = []; ws["!data"][R][C] = {t:'z'}; }
							else ws[encode_cell({r:R,c:C})] = {t:'z'};
							++C;
						} --C;
					}
					else C += colpeat - 1;
				}
				textp = ""; textR = [];
				break; /* stub */
			case 'table-cell': case '数据':
				if(Rn[0].charAt(Rn[0].length-2) === '/') {
					++C;
					ctag = parsexmltag(Rn[0], false);
					colpeat = parseInt(ctag['number-columns-repeated']||"1", 10)||1;
					q = ({t:'z', v:null/*:: , z:null, w:"",c:[]*/}/*:any*/);
					if(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));
					if(ctag["style-name"] && styles[ctag["style-name"]]) q.z = styles[ctag["style-name"]];
					if((ctag['数据类型'] || ctag['value-type']) == "string") {
						q.t = "s"; q.v = unescapexml(ctag['string-value'] || "");
						if(opts.dense) {
							if(!ws["!data"][R]) ws["!data"][R] = [];
							ws["!data"][R][C] = q;
						} else {
							ws[encode_col(C) + encode_row(R)] = q;
						}
					}
					C+= colpeat-1;
				} else if(Rn[1]!=='/') {
					++C;
					textp = oldtextp = ""; textpidx = oldtextpidx = 0; textR = []; oldtextR = [];
					colpeat = 1;
					var rptR = rowpeat ? R + rowpeat - 1 : R;
					if(C > range.e.c) range.e.c = C;
					if(C < range.s.c) range.s.c = C;
					if(R < range.s.r) range.s.r = R;
					if(rptR > range.e.r) range.e.r = rptR;
					ctag = parsexmltag(Rn[0], false);
					ctag2 = parsexmltagraw(Rn[0], true);
					comments = []; comment = ({}/*:any*/);
					q = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:"",c:[]*/}/*:any*/);
					if(ctag["style-name"] && styles[ctag["style-name"]]) q.z = styles[ctag["style-name"]];
					if(opts.cellFormula) {
						if(ctag.formula) ctag.formula = unescapexml(ctag.formula);
						if(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {
							mR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;
							mC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;
							mrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};
							q.F = encode_range(mrange);
							arrayf.push([mrange, q.F]);
						}
						if(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);
						else for(i = 0; i < arrayf.length; ++i)
							if(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)
								if(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)
									q.F = arrayf[i][1];
					}
					if(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {
						mR = parseInt(ctag['number-rows-spanned']||"1",10) || 1;
						mC = parseInt(ctag['number-columns-spanned']||"1",10) || 1;
						if(mR * mC > 1) {
							mrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};
							merges.push(mrange);
						}
					}

					/* 19.675.2 table:number-columns-repeated */
					if(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);

					/* 19.385 office:value-type TODO: verify ODS and UOS */
					switch(q.t) {
						case 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']) || (+ctag['boolean-value'] >= 1); break;
						case 'float': q.t = 'n'; q.v = parseFloat(ctag.value);
							if(opts.cellDates && q.z && fmt_is_date(q.z)) { q.v = numdate(q.v + (WB.WBProps.date1904 ? 1462 : 0)); q.t = typeof q.v == "number" ? 'n' : 'd'; }
							break;
						case 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;
						case 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;
						case 'date': q.t = 'd'; q.v = parseDate(ctag['date-value'], WB.WBProps.date1904);
							if(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904); }
							if(!q.z) q.z = 'm/d/yy'; break;
						/* NOTE: for `time`, Excel ODS export incorrectly uses durations relative to 1900 epoch even if 1904 is specified */
						case 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;
							if(opts.cellDates) { q.v = numdate(q.v); q.t = typeof q.v == "number" ? 'n' : 'd'; }
							if(!q.z) q.z = 'HH:MM:SS'; break;
						case 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']);
							break;
						default:
							if(q.t === 'string' || q.t === 'text' || !q.t) {
								q.t = 's';
								if(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }
							} else throw new Error('Unsupported value type ' + q.t);
					}
				} else {
					isstub = false;
					if(ctag2['calcext:value-type'] == "error" && RBErr[textp] != null) {
						q.t = 'e'; q.w = textp; q.v = RBErr[textp];
					}
					if(q.t === 's') {
						q.v = textp || '';
						if(textR.length) q.R = textR;
						isstub = textpidx == 0;
					}
					if(atag.Target) q.l = atag;
					if(comments.length > 0) { q.c = comments; comments = []; }
					if(textp && opts.cellText !== false) q.w = textp;
					if(isstub) { q.t = "z"; delete q.v; }
					if(!isstub || opts.sheetStubs) {
						if(!(opts.sheetRows && opts.sheetRows <= R)) {
							for(var rpt = 0; rpt < rowpeat; ++rpt) {
								colpeat = parseInt(ctag['number-columns-repeated']||"1", 10);
								if(opts.dense) {
									if(!ws["!data"][R + rpt]) ws["!data"][R + rpt] = [];
									ws["!data"][R + rpt][C] = rpt == 0 ? q : dup(q);
									while(--colpeat > 0) ws["!data"][R + rpt][C + colpeat] = dup(q);
								} else {
									ws[encode_cell({r:R + rpt,c:C})] = q;
									while(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);
								}
								if(range.e.c <= C) range.e.c = C;
							}
						}
					}
					colpeat = parseInt(ctag['number-columns-repeated']||"1", 10);
					C += colpeat-1; colpeat = 0;
					q = {/*:: t:"", v:null, z:null, w:"",c:[]*/};
					textp = ""; textR = [];
				}
				atag = ({}/*:any*/);
				break; // 9.1.4 <table:table-cell>

			/* pure state */
			case 'document': // TODO: <office:document> is the root for FODS
			case 'document-content': case '电子表格文档': // 3.1.3.2 <office:document-content>
			case 'spreadsheet': case '主体': // 3.7 <office:spreadsheet>
			case 'scripts': // 3.12 <office:scripts>
			case 'styles': // TODO <office:styles>
			case 'font-face-decls': // 3.14 <office:font-face-decls>
			case 'master-styles': // 3.15.4 <office:master-styles> -- relevant for FODS
				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);
				break;

			case 'annotation': // 14.1 <office:annotation>
				if(Rn[1]==='/'){
					if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;
					comment.t = textp;
					if(textR.length) /*::(*/comment/*:: :any)*/.R = textR;
					comment.a = creator;
					comments.push(comment);
					textp = oldtextp; textpidx = oldtextpidx; textR = oldtextR;
				}
				else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
					state.push([Rn[3], false]);
					var annotag = parsexmltag(Rn[0], true);
					/* office:display TODO: check if there is a global override */
					if(!(annotag["display"] && parsexmlbool(annotag["display"]))) comments.hidden = true;
					oldtextp = textp; oldtextpidx = textpidx; oldtextR = textR;
					textp = ""; textpidx = 0; textR = [];
				}
				creator = ""; creatoridx = 0;
				break;

			case 'creator': // 4.3.2.7 <dc:creator>
				if(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }
				else creatoridx = Rn.index + Rn[0].length;
				break;

			/* ignore state */
			case 'meta': case '元数据': // TODO: <office:meta> <uof:元数据> FODS/UOF
			case 'settings': // TODO: <office:settings>
			case 'config-item-set': // TODO: <office:config-item-set>
			case 'config-item-map-indexed': // TODO: <office:config-item-map-indexed>
			case 'config-item-map-entry': // TODO: <office:config-item-map-entry>
			case 'config-item-map-named': // TODO: <office:config-item-map-entry>
			case 'shapes': // 9.2.8 <table:shapes>
			case 'frame': // 10.4.2 <draw:frame>
			case 'text-box': // 10.4.3 <draw:text-box>
			case 'image': // 10.4.4 <draw:image>
			case 'data-pilot-tables': // 9.6.2 <table:data-pilot-tables>
			case 'list-style': // 16.30 <text:list-style>
			case 'form': // 13.13 <form:form>
			case 'dde-links': // 9.8 <table:dde-links>
			case 'event-listeners': // TODO
			case 'chart': // TODO
				if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;}
				else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);
				textp = ""; textpidx = 0; textR = [];
				break;

			case 'scientific-number': // <number:scientific-number>
			case 'currency-symbol': // <number:currency-symbol>
			case 'fill-character': // 16.29.5 <number:fill-character>
				break;

			case 'text-style': // 16.27.25 <number:text-style>
			case 'boolean-style': // 16.27.23 <number:boolean-style>
			case 'number-style': // 16.27.2 <number:number-style>
			case 'currency-style': // 16.29.8 <number:currency-style>
			case 'percentage-style': // 16.27.9 <number:percentage-style>
			case 'date-style': // 16.27.10 <number:date-style>
			case 'time-style': // 16.27.18 <number:time-style>
				if(Rn[1]==='/'){
					var xlmlidx = xlmlregex.lastIndex;
					parse_ods_styles(str.slice(nfidx, xlmlregex.lastIndex), _opts, number_format_map);
					xlmlregex.lastIndex = xlmlidx;
				} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {
					nfidx = xlmlregex.lastIndex - Rn[0].length;
				} break;

			case 'script': break; // 3.13 <office:script>
			case 'libraries': break; // TODO: <ooo:libraries>
			case 'automatic-styles': break; // 3.15.3 <office:automatic-styles>

			case 'default-style': // TODO: <style:default-style>
			case 'page-layout': break; // TODO: <style:page-layout>
			case 'style': { // 16.2 <style:style>
				var styletag = parsexmltag(Rn[0], false);
				if(styletag["family"] == "table-cell" && number_format_map[styletag["data-style-name"]]) styles[styletag["name"]] = number_format_map[styletag["data-style-name"]];
			} break;
			case 'map': break; // 16.3 <style:map>
			case 'font-face': break; // 16.21 <style:font-face>

			case 'paragraph-properties': break; // 17.6 <style:paragraph-properties>
			case 'table-properties': break; // 17.15 <style:table-properties>
			case 'table-column-properties': break; // 17.16 <style:table-column-properties>
			case 'table-row-properties': break; // 17.17 <style:table-row-properties>
			case 'table-cell-properties': break; // 17.18 <style:table-cell-properties>

			case 'number': // 16.27.3 <number:number>
				break;

			case 'fraction': break; // TODO 16.27.6 <number:fraction>

			case 'day': // 16.27.11 <number:day>
			case 'month': // 16.27.12 <number:month>
			case 'year': // 16.27.13 <number:year>
			case 'era': // 16.27.14 <number:era>
			case 'day-of-week': // 16.27.15 <number:day-of-week>
			case 'week-of-year': // 16.27.16 <number:week-of-year>
			case 'quarter': // 16.27.17 <number:quarter>
			case 'hours': // 16.27.19 <number:hours>
			case 'minutes': // 16.27.20 <number:minutes>
			case 'seconds': // 16.27.21 <number:seconds>
			case 'am-pm': // 16.27.22 <number:am-pm>
				break;

			case 'boolean': break; // 16.27.24 <number:boolean>
			case 'text': // 16.27.26 <number:text>
				if(Rn[0].slice(-2) === "/>") break;
				else if(Rn[1]==="/") switch(state[state.length-1][0]) {
					case 'number-style':
					case 'date-style':
					case 'time-style':
						NF += str.slice(pidx, Rn.index);
						break;
				}
				else pidx = Rn.index + Rn[0].length;
				break;

			case 'named-range': // 9.4.12 <table:named-range>
				tag = parsexmltag(Rn[0], false);
				_Ref = ods_to_csf_3D(tag['cell-range-address']);
				var nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);
				if(intable) nrange.Sheet = SheetNames.length;
				WB.Names.push(nrange);
				break;

			case 'text-content': break; // 16.27.27 <number:text-content>
			case 'text-properties': break; // 16.27.27 <style:text-properties>
			case 'embedded-text': break; // 16.27.4 <number:embedded-text>

			case 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3

			case 'forms': break; // 12.25.2 13.2
			case 'table-column': break; // 9.1.6 <table:table-column>
			case 'table-header-rows': break; // 9.1.7 <table:table-header-rows>
			case 'table-rows': break; // 9.1.12 <table:table-rows>
			/* TODO: outline levels */
			case 'table-column-group': break; // 9.1.10 <table:table-column-group>
			case 'table-header-columns': break; // 9.1.11 <table:table-header-columns>
			case 'table-columns': break; // 9.1.12 <table:table-columns>

			case 'null-date': // 9.4.2 <table:null-date>
				tag = parsexmltag(Rn[0], false);
				switch(tag["date-value"]) {
					case "1904-01-01": WB.WBProps.date1904 = true; break;
				}
				break;

			case 'graphic-properties': break; // 17.21 <style:graphic-properties>
			case 'calculation-settings': break; // 9.4.1 <table:calculation-settings>
			case 'named-expressions': break; // 9.4.11 <table:named-expressions>
			case 'label-range': break; // 9.4.9 <table:label-range>
			case 'label-ranges': break; // 9.4.10 <table:label-ranges>
			case 'named-expression': break; // 9.4.13 <table:named-expression>
			case 'sort': break; // 9.4.19 <table:sort>
			case 'sort-by': break; // 9.4.20 <table:sort-by>
			case 'sort-groups': break; // 9.4.22 <table:sort-groups>

			case 'tab': break; // 6.1.4 <text:tab>
			case 'line-break': break; // 6.1.5 <text:line-break>
			case 'span': break; // 6.1.7 <text:span>
			case 'p': case '文本串': // 5.1.3 <text:p>
				if(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;
				if(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {
					var ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);
					textp = (textp.length > 0 ? textp + "\n" : "") + ptp[0];
				} else if(Rn[0].slice(-2) == "/>") {
					/* TODO: is self-closing 文本串 valid? */
					textp += "\n";
				} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }
				break; // <text:p>
			case 's': break; // <text:s>

			case 'database-range': // 9.4.15 <table:database-range>
				if(Rn[1]==='/') break;
				try {
					_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);
					Sheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };
				} catch(e) {/* empty */}
				break;

			case 'date': break; // <*:date>

			case 'object': break; // 10.4.6.2 <draw:object>
			case 'title': case '标题': break; // <*:title> OR <uof:标题>
			case 'desc': break; // <*:desc>
			case 'binary-data': break; // 10.4.5 TODO: b64 blob

			/* 9.2 Advanced Tables */
			case 'table-source': break; // 9.2.6
			case 'scenario': break; // 9.2.6

			case 'iteration': break; // 9.4.3 <table:iteration>
			case 'content-validations': break; // 9.4.4 <table:
			case 'content-validation': break; // 9.4.5 <table:
			case 'help-message': break; // 9.4.6 <table:
			case 'error-message': break; // 9.4.7 <table:
			case 'database-ranges': break; // 9.4.14 <table:database-ranges>

			/* 9.5 Filters */
			case 'filter': break; // 9.5.2 <table:filter>
			case 'filter-and': break; // 9.5.3 <table:filter-and>
			case 'filter-or': break; // 9.5.4 <table:filter-or>
			case 'filter-condition': break; // 9.5.5 <table:filter-condition>
			case 'filter-set-item': break; // 9.5.6 <table:filter-condition>

			case 'list-level-style-bullet': break; // 16.31 <text:
			case 'list-level-style-number': break; // 16.32 <text:
			case 'list-level-properties': break; // 17.19 <style:

			/* 7.3 Document Fields */
			case 'sender-firstname': // 7.3.6.2
			case 'sender-lastname': // 7.3.6.3
			case 'sender-initials': // 7.3.6.4
			case 'sender-title': // 7.3.6.5
			case 'sender-position': // 7.3.6.6
			case 'sender-email': // 7.3.6.7
			case 'sender-phone-private': // 7.3.6.8
			case 'sender-fax': // 7.3.6.9
			case 'sender-company': // 7.3.6.10
			case 'sender-phone-work': // 7.3.6.11
			case 'sender-street': // 7.3.6.12
			case 'sender-city': // 7.3.6.13
			case 'sender-postal-code': // 7.3.6.14
			case 'sender-country': // 7.3.6.15
			case 'sender-state-or-province': // 7.3.6.16
			case 'author-name': // 7.3.7.1
			case 'author-initials': // 7.3.7.2
			case 'chapter': // 7.3.8
			case 'file-name': // 7.3.9
			case 'template-name': // 7.3.9
			case 'sheet-name': // 7.3.9
				break;

			case 'event-listener':
				break;
			/* TODO: FODS Properties */
			case 'initial-creator':
			case 'creation-date':
			case 'print-date':
			case 'generator':
			case 'document-statistic':
			case 'user-defined':
			case 'editing-duration':
			case 'editing-cycles':
				break;

			/* TODO: FODS Config */
			case 'config-item':
				break;

			/* TODO: style tokens */
			case 'page-number': break; // TODO <text:page-number>
			case 'page-count': break; // TODO <text:page-count>
			case 'time': break; // TODO <text:time>

			/* 9.3 Advanced Table Cells */
			case 'cell-range-source': break; // 9.3.1 <table:
			case 'detective': break; // 9.3.2 <table:
			case 'operation': break; // 9.3.3 <table:
			case 'highlighted-range': break; // 9.3.4 <table:

			/* 9.6 Data Pilot Tables <table: */
			case 'data-pilot-table': // 9.6.3
			case 'source-cell-range': // 9.6.5
			case 'source-service': // 9.6.6
			case 'data-pilot-field': // 9.6.7
			case 'data-pilot-level': // 9.6.8
			case 'data-pilot-subtotals': // 9.6.9
			case 'data-pilot-subtotal': // 9.6.10
			case 'data-pilot-members': // 9.6.11
			case 'data-pilot-member': // 9.6.12
			case 'data-pilot-display-info': // 9.6.13
			case 'data-pilot-sort-info': // 9.6.14
			case 'data-pilot-layout-info': // 9.6.15
			case 'data-pilot-field-reference': // 9.6.16
			case 'data-pilot-groups': // 9.6.17
			case 'data-pilot-group': // 9.6.18
			case 'data-pilot-group-member': // 9.6.19
				break;

			/* 10.3 Drawing Shapes */
			case 'rect': // 10.3.2
				break;

			/* 14.6 DDE Connections */
			case 'dde-connection-decls': // 14.6.2 <text:
			case 'dde-connection-decl': // 14.6.3 <text:
			case 'dde-link': // 14.6.4 <table:
			case 'dde-source': // 14.6.5 <office:
				break;

			case 'properties': break; // 13.7 <form:properties>
			case 'property': break; // 13.8 <form:property>

			case 'a': // 6.1.8 hyperlink
				if(Rn[1]!== '/') {
					atag = parsexmltag(Rn[0], false);
					if(!atag.href) break;
					atag.Target = unescapexml(atag.href); delete atag.href;
					if(atag.Target.charAt(0) == "#" && atag.Target.indexOf(".") > -1) {
						_Ref = ods_to_csf_3D(atag.Target.slice(1));
						atag.Target = "#" + _Ref[0] + "!" + _Ref[1];
					} else if(atag.Target.match(/^\.\.[\\\/]/)) atag.Target = atag.Target.slice(3);
				}
				break;

			/* non-standard */
			case 'table-protection': break;
			case 'data-pilot-grand-total': break; // <table:
			case 'office-document-common-attrs': break; // bare
			default: switch(Rn[2]) {
				case 'dc:':       // TODO: properties
				case 'calcext:':  // ignore undocumented extensions
				case 'loext:':    // ignore undocumented extensions
				case 'ooo:':      // ignore undocumented extensions
				case 'chartooo:': // ignore undocumented extensions
				case 'draw:':     // TODO: drawing
				case 'style:':    // TODO: styles
				case 'chart:':    // TODO: charts
				case 'form:':     // TODO: forms
				case 'uof:':      // TODO: uof
				case '表:':       // TODO: uof
				case '字:':       // TODO: uof
					break;
				default: if(opts.WTF) throw new Error(Rn);
			}
		}
		var out/*:Workbook*/ = ({
			Sheets: Sheets,
			SheetNames: SheetNames,
			Workbook: WB
		}/*:any*/);
		if(opts.bookSheets) delete /*::(*/out/*:: :any)*/.Sheets;
		return out;
}

function parse_ods(zip/*:ZIPFile*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	opts = opts || ({}/*:any*/);
	if(safegetzipfile(zip, 'META-INF/manifest.xml')) parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'), opts);
	var styles = getzipstr(zip, 'styles.xml');
	var Styles = styles && parse_ods_styles(utf8read(styles), opts);
	var content = getzipstr(zip, 'content.xml');
	if(!content) throw new Error("Missing content.xml in ODS / UOF file");
	var wb = parse_content_xml(utf8read(content), opts, Styles);
	if(safegetzipfile(zip, 'meta.xml')) wb.Props = parse_core_props(getzipdata(zip, 'meta.xml'));
	wb.bookType = "ods";
	return wb;
}
function parse_fods(data/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	var wb = parse_content_xml(data, opts);
	wb.bookType = "fods";
	return wb;
}
/* OpenDocument */
var write_styles_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {
	var master_styles = [
		'<office:master-styles>',
			'<style:master-page style:name="mp1" style:page-layout-name="mp1">',
				'<style:header/>',
				'<style:header-left style:display="false"/>',
				'<style:footer/>',
				'<style:footer-left style:display="false"/>',
			'</style:master-page>',
		'</office:master-styles>'
	].join("");

	var payload = '<office:document-styles ' + wxt_helper({
		'xmlns:office':   "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
		'xmlns:table':    "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
		'xmlns:style':    "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
		'xmlns:text':     "urn:oasis:names:tc:opendocument:xmlns:text:1.0",
		'xmlns:draw':     "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",
		'xmlns:fo':       "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
		'xmlns:xlink':    "http://www.w3.org/1999/xlink",
		'xmlns:dc':       "http://purl.org/dc/elements/1.1/",
		'xmlns:number':   "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",
		'xmlns:svg':      "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",
		'xmlns:of':       "urn:oasis:names:tc:opendocument:xmlns:of:1.2",
		'office:version': "1.2"
	}) + '>' + master_styles + '</office:document-styles>';

	return function wso(/*::wb, opts*/) {
		return XML_HEADER + payload;
	};
})();

// TODO: find out if anyone actually read the spec.  LO has some wild errors
function write_number_format_ods(nf/*:string*/, nfidx/*:string*/)/*:string*/ {
	var type = "number", payload = "", nopts = { "style:name": nfidx }, c = "", i = 0;
	nf = nf.replace(/"[$]"/g, "$");
	/* TODO: replace with an actual parser based on a real grammar */
	j: {
		// TODO: support style maps
		if(nf.indexOf(";") > -1) {
			console.error("Unsupported ODS Style Map exported.  Using first branch of " + nf);
			nf = nf.slice(0, nf.indexOf(";"));
		}

		if(nf == "@") { type = "text"; payload = "<number:text-content/>"; break j; }

		/* currency flag */
		if(nf.indexOf(/\$/) > -1) { type = "currency"; }

		/* opening string literal */
		if(nf[i] == '"') {
			c = "";
			while(nf[++i] != '"' || nf[++i] == '"') c += nf[i]; --i;
			if(nf[i+1] == "*") {
				i++;
				payload += '<number:fill-character>' + escapexml(c.replace(/""/g, '"')) + '</number:fill-character>';
			} else {
				payload += '<number:text>' + escapexml(c.replace(/""/g, '"')) + '</number:text>';
			}
			nf = nf.slice(i+1); i = 0;
		}

		/* fractions */
		var t = nf.match(/# (\?+)\/(\?+)/);
		if(t) { payload += writextag("number:fraction", null, {"number:min-integer-digits":0, "number:min-numerator-digits": t[1].length, "number:max-denominator-value": Math.max(+(t[1].replace(/./g, "9")), +(t[2].replace(/./g, "9"))) }); break j; }
		if((t=nf.match(/# (\?+)\/(\d+)/))) { payload += writextag("number:fraction", null, {"number:min-integer-digits":0, "number:min-numerator-digits": t[1].length, "number:denominator-value": +t[2]}); break j; }

		/* percentages */
		if((t=nf.match(/\b(\d+)(|\.\d+)%/))) { type = "percentage"; payload += writextag("number:number", null, {"number:decimal-places": t[2] && t.length - 1 || 0, "number:min-decimal-places": t[2] && t.length - 1 || 0, "number:min-integer-digits": t[1].length }) + "<number:text>%</number:text>"; break j; }

		/* datetime */
		var has_time = false;
		if(["y","m","d"].indexOf(nf[0]) > -1) {
			type = "date";
			k: for(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {
				case "h": case "s": has_time = true; --i; break k;
				case "m":
					l: for(var h = i+1; h < nf.length; ++h) switch(nf[h]) {
						case "y": case "d": break l;
						case "h": case "s": has_time = true; --i; break k;
					}
					/* falls through */
				case "y": case "d":
					while((nf[++i]||"").toLowerCase() == c[0]) c += c[0]; --i;
					switch(c) {
						case "y": case "yy": payload += "<number:year/>"; break;
						case "yyy": case "yyyy": payload += '<number:year number:style="long"/>'; break;
						case "mmmmm": console.error("ODS has no equivalent of format |mmmmm|");
							/* falls through */
						case "m": case "mm": case "mmm": case "mmmm":
							payload += '<number:month number:style="' + (c.length % 2 ? "short" : "long") + '" number:textual="' + (c.length >= 3 ? "true" : "false") + '"/>';
							break;
						case "d": case "dd": payload += '<number:day number:style="' + (c.length % 2 ? "short" : "long") + '"/>'; break;
						case "ddd": case "dddd": payload += '<number:day-of-week number:style="' + (c.length % 2 ? "short" : "long") + '"/>'; break;
					}
					break;
				case '"':
					while(nf[++i] != '"' || nf[++i] == '"') c += nf[i]; --i;
					payload += '<number:text>' + escapexml(c.slice(1).replace(/""/g, '"')) + '</number:text>';
					break;
				case '\\': c = nf[++i];
					payload += '<number:text>' + escapexml(c) + '</number:text>'; break;
				case '/': case ':': payload += '<number:text>' + escapexml(c) + '</number:text>'; break;
				default: console.error("unrecognized character " + c + " in ODF format " + nf);
			}
			if(!has_time) break j;
			nf = nf.slice(i+1); i = 0;
		}
		if(nf.match(/^\[?[hms]/)) {
			if(type == "number") type = "time";
			if(nf.match(/\[/)) {
				nf = nf.replace(/[\[\]]/g, "");
				nopts['number:truncate-on-overflow'] = "false";
			}
			for(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {
				case "h": case "m": case "s":
					while((nf[++i]||"").toLowerCase() == c[0]) c += c[0]; --i;
					switch(c) {
						case "h": case "hh": payload += '<number:hours number:style="' + (c.length % 2 ? "short" : "long") + '"/>'; break;
						case "m": case "mm": payload += '<number:minutes number:style="' + (c.length % 2 ? "short" : "long") + '"/>'; break;
						case "s": case "ss":
							if(nf[i+1] == ".") do { c += nf[i+1]; ++i; } while(nf[i+1] == "0");
							payload += '<number:seconds number:style="' + (c.match("ss") ? "long" : "short") + '"' + (c.match(/\./) ? ' number:decimal-places="' + (c.match(/0+/)||[""])[0].length + '"' : "")+ '/>'; break;
					}
					break;
				case '"':
					while(nf[++i] != '"' || nf[++i] == '"') c += nf[i]; --i;
					payload += '<number:text>' + escapexml(c.slice(1).replace(/""/g, '"')) + '</number:text>';
					break;
				case '/': case ':': payload += '<number:text>' + escapexml(c) + '</number:text>'; break;
				case "a":
					if(nf.slice(i, i+3).toLowerCase() == "a/p") { payload += '<number:am-pm/>'; i += 2; break; } // Note: ODF does not support A/P
					if(nf.slice(i, i+5).toLowerCase() == "am/pm")  { payload += '<number:am-pm/>'; i += 4; break; }
					/* falls through */
				default: console.error("unrecognized character " + c + " in ODF format " + nf);
			}
			break j;
		}

		/* currency flag */
		if(nf.indexOf(/\$/) > -1) { type = "currency"; }

		/* should be in a char loop */
		if(nf[0] == "$") { payload += '<number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol>'; nf = nf.slice(1); i = 0; }
		i = 0; if(nf[i] == '"') {
			while(nf[++i] != '"' || nf[++i] == '"') c += nf[i]; --i;
			if(nf[i+1] == "*") {
				i++;
				payload += '<number:fill-character>' + escapexml(c.replace(/""/g, '"')) + '</number:fill-character>';
			} else {
				payload += '<number:text>' + escapexml(c.replace(/""/g, '"')) + '</number:text>';
			}
			nf = nf.slice(i+1); i = 0;
		}

		/* number TODO: interstitial text e.g. 000)000-0000 */
		var np = nf.match(/([#0][0#,]*)(\.[0#]*|)(E[+]?0*|)/i);
		if(!np || !np[0]) console.error("Could not find numeric part of " + nf);
		else {
			var base = np[1].replace(/,/g, "");
			payload += '<number:' + (np[3] ? "scientific-" : "")+ 'number' +
				' number:min-integer-digits="' + (base.indexOf("0") == -1 ? "0" : base.length - base.indexOf("0")) + '"' +
				(np[0].indexOf(",") > -1 ? ' number:grouping="true"' : "") +
				(np[2] && ' number:decimal-places="' + (np[2].length - 1) + '"' || ' number:decimal-places="0"') +
				(np[3] && np[3].indexOf("+") > -1 ? ' number:forced-exponent-sign="true"' : "" ) +
				(np[3] ? ' number:min-exponent-digits="' + np[3].match(/0+/)[0].length + '"' : "" ) +
				'>' +
				/* TODO: interstitial text placeholders */
				'</number:' + (np[3] ? "scientific-" : "") + 'number>';
			i = np.index + np[0].length;
		}

		/* residual text */
		if(nf[i] == '"') {
			c = "";
			while(nf[++i] != '"' || nf[++i] == '"') c += nf[i]; --i;
			payload += '<number:text>' + escapexml(c.replace(/""/g, '"')) + '</number:text>';
		}
	}

	if(!payload) { console.error("Could not generate ODS number format for |" + nf + "|"); return ""; }
	return writextag("number:" + type + "-style", payload, nopts);
}

function write_names_ods(Names, SheetNames, idx) {
	//var scoped = Names.filter(function(name) { return name.Sheet == (idx == -1 ? null : idx); });
	var scoped = []; for(var namei = 0; namei < Names.length; ++namei) {
		var name = Names[namei];
		if(!name) continue;
		if(name.Sheet == (idx == -1 ? null : idx)) scoped.push(name);
	}
	if(!scoped.length) return "";
	return "      <table:named-expressions>\n" + scoped.map(function(name) {
		var odsref =  (idx == -1 ? "$" : "") + csf_to_ods_3D(name.Ref);
		return "        " + writextag("table:named-range", null, {
			"table:name": name.Name,
			"table:cell-range-address": odsref,
			"table:base-cell-address": odsref.replace(/[\.][^\.]*$/, ".$A$1")
		});
	}).join("\n") + "\n      </table:named-expressions>\n";
}
var write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {
	/* 6.1.2 White Space Characters */
	var write_text_p = function(text/*:string*/, span)/*:string*/ {
		return escapexml(text)
			.replace(/  +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
			.replace(/\t/g, "<text:tab/>")
			.replace(/\n/g, span ? "<text:line-break/>": "</text:p><text:p>")
			.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
	};

	var null_cell_xml = '          <table:table-cell />\n';
	var write_ws = function(ws, wb/*:Workbook*/, i/*:number*/, opts, nfs, date1904)/*:string*/ {
		/* Section 9 Tables */
		var o/*:Array<string>*/ = [];
		o.push('      <table:table table:name="' + escapexml(wb.SheetNames[i]) + '" table:style-name="ta1">\n');
		var R=0,C=0, range = decode_range(ws['!ref']||"A1");
		var marr/*:Array<Range>*/ = ws['!merges'] || [], mi = 0;
		var dense = ws["!data"] != null;
		if(ws["!cols"]) {
			for(C = 0; C <= range.e.c; ++C) o.push('        <table:table-column' + (ws["!cols"][C] ? ' table:style-name="co' + ws["!cols"][C].ods + '"' : '') + '></table:table-column>\n');
		}
		var H = "", ROWS = ws["!rows"]||[];
		for(R = 0; R < range.s.r; ++R) {
			H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : "";
			o.push('        <table:table-row' + H + '></table:table-row>\n');
		}
		for(; R <= range.e.r; ++R) {
			H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : "";
			o.push('        <table:table-row' + H + '>\n');
			for(C=0; C < range.s.c; ++C) o.push(null_cell_xml);
			for(; C <= range.e.c; ++C) {
				var skip = false, ct = {}, textp = "";
				for(mi = 0; mi != marr.length; ++mi) {
					if(marr[mi].s.c > C) continue;
					if(marr[mi].s.r > R) continue;
					if(marr[mi].e.c < C) continue;
					if(marr[mi].e.r < R) continue;
					if(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;
					ct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);
					ct['table:number-rows-spanned'] =    (marr[mi].e.r - marr[mi].s.r + 1);
					break;
				}
				if(skip) { o.push('          <table:covered-table-cell/>\n'); continue; }
				var ref = encode_cell({r:R, c:C}), cell = dense ? (ws["!data"][R]||[])[C]: ws[ref];
				if(cell && cell.f) {
					ct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));
					if(cell.F) {
						if(cell.F.slice(0, ref.length) == ref) {
							var _Fref = decode_range(cell.F);
							ct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);
							ct['table:number-matrix-rows-spanned'] =    (_Fref.e.r - _Fref.s.r + 1);
						}
					}
				}
				if(!cell) { o.push(null_cell_xml); continue; }
				switch(cell.t) {
					case 'b':
						textp = (cell.v ? 'TRUE' : 'FALSE');
						ct['office:value-type'] = "boolean";
						ct['office:boolean-value'] = (cell.v ? 'true' : 'false');
						break;
					case 'n':
						if(!isFinite(cell.v)) {
							if(isNaN(cell.v)) {
								textp = "#NUM!";
								ct['table:formula'] = "of:=#NUM!";
							} else {
								textp = "#DIV/0!";
								ct['table:formula'] = "of:=" + (cell.v < 0 ? "-" : "") + "1/0";
							}
							ct['office:string-value'] = "";
							ct['office:value-type'] = "string";
							ct['calcext:value-type'] = "error";
						} else {
							textp = (cell.w||String(cell.v||0));
							ct['office:value-type'] = "float";
							ct['office:value'] = (cell.v||0);
						}
						break;
					case 's': case 'str':
						textp = cell.v == null ? "" : cell.v;
						ct['office:value-type'] = "string";
						break;
					case 'd':
						textp = (cell.w||(parseDate(cell.v, date1904).toISOString()));
						ct['office:value-type'] = "date";
						ct['office:date-value'] = (parseDate(cell.v, date1904).toISOString());
						ct['table:style-name'] = "ce1";
						break;
					//case 'e': // TODO: translate to ODS errors
					default: o.push(null_cell_xml); continue; // TODO: empty cell with comments
				}
				var text_p = write_text_p(textp);
				if(cell.l && cell.l.Target) {
					var _tgt = cell.l.Target;
					_tgt = _tgt.charAt(0) == "#" ? "#" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;
					// TODO: choose correct parent path format based on link delimiters
					if(_tgt.charAt(0) != "#" && !_tgt.match(/^\w+:/)) _tgt = '../' + _tgt;
					text_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, "&amp;")});
				}
				if(nfs[cell.z]) ct["table:style-name"] = "ce" + nfs[cell.z].slice(1);
				var payload = writextag('text:p', text_p, {});
				if(cell.c) {
					var acreator = "", apayload = "", aprops = {};
					for(var ci = 0; ci < cell.c.length; ++ci) {
						if(!acreator && cell.c[ci].a) acreator = cell.c[ci].a;
						apayload += "<text:p>" + write_text_p(cell.c[ci].t) + "</text:p>";
					}
					if(!cell.c.hidden) aprops["office:display"] = true;
					payload = writextag('office:annotation', apayload, aprops) + payload;
				}
				o.push('          ' + writextag('table:table-cell', payload, ct) + '\n');
			}
			o.push('        </table:table-row>\n');
		}
		if((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, i));
		o.push('      </table:table>\n');
		return o.join("");
	};

	var write_automatic_styles_ods = function(o/*:Array<string>*/, wb) {
		o.push(' <office:automatic-styles>\n');

		/* column styles */
		var cidx = 0;
		wb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {
			if(!ws) return;
			if(ws["!cols"]) {
				for(var C = 0; C < ws["!cols"].length; ++C) if(ws["!cols"][C]) {
					var colobj = ws["!cols"][C];
					if(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;
					process_col(colobj);
					colobj.ods = cidx;
					var w = ws["!cols"][C].wpx + "px";
					o.push('  <style:style style:name="co' + cidx + '" style:family="table-column">\n');
					o.push('   <style:table-column-properties fo:break-before="auto" style:column-width="' + w + '"/>\n');
					o.push('  </style:style>\n');
					++cidx;
				}
			}
		});

		/* row styles */
		var ridx = 0;
		wb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {
			if(!ws) return;
			if(ws["!rows"]) {
				for(var R = 0; R < ws["!rows"].length; ++R) if(ws["!rows"][R]) {
					ws["!rows"][R].ods = ridx;
					var h = ws["!rows"][R].hpx + "px";
					o.push('  <style:style style:name="ro' + ridx + '" style:family="table-row">\n');
					o.push('   <style:table-row-properties fo:break-before="auto" style:row-height="' + h + '"/>\n');
					o.push('  </style:style>\n');
					++ridx;
				}
			}
		});

		/* table */
		o.push('  <style:style style:name="ta1" style:family="table" style:master-page-name="mp1">\n');
		o.push('   <style:table-properties table:display="true" style:writing-mode="lr-tb"/>\n');
		o.push('  </style:style>\n');

		o.push('  <number:date-style style:name="N37" number:automatic-order="true">\n');
		o.push('   <number:month number:style="long"/>\n');
		o.push('   <number:text>/</number:text>\n');
		o.push('   <number:day number:style="long"/>\n');
		o.push('   <number:text>/</number:text>\n');
		o.push('   <number:year/>\n');
		o.push('  </number:date-style>\n');

		/* number formats, table cells, text */
		var nfs = {};
		var nfi = 69;
		wb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {
			if(!ws) return;
			var dense = (ws["!data"] != null);
			if(!ws["!ref"]) return;
			var range = decode_range(ws["!ref"]);
			for(var R = 0; R <= range.e.r; ++R) for(var C = 0; C <= range.e.c; ++C) {
				var c = dense ? (ws["!data"][R]||[])[C] : ws[encode_cell({r:R,c:C})];
				if(!c || !c.z || c.z.toLowerCase() == "general") continue;
				if(!nfs[c.z]) {
					var out = write_number_format_ods(c.z, "N" + nfi);
					if(out) { nfs[c.z] = "N" + nfi; ++nfi; o.push(out + "\n"); }
				}
			}
		});
		o.push('  <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N37"/>\n');
		keys(nfs).forEach(function(nf) {
			o.push('<style:style style:name="ce' + nfs[nf].slice(1) + '" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="' + nfs[nf] + '"/>\n');
		});

		/* page-layout */

		o.push(' </office:automatic-styles>\n');
		return nfs;
	};

	return function wcx(wb, opts) {
		var o = [XML_HEADER];
		/* 3.1.3.2 */
		var attr = wxt_helper({
			'xmlns:office':       "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
			'xmlns:table':        "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
			'xmlns:style':        "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
			'xmlns:text':         "urn:oasis:names:tc:opendocument:xmlns:text:1.0",
			'xmlns:draw':         "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",
			'xmlns:fo':           "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
			'xmlns:xlink':        "http://www.w3.org/1999/xlink",
			'xmlns:dc':           "http://purl.org/dc/elements/1.1/",
			'xmlns:meta':         "urn:oasis:names:tc:opendocument:xmlns:meta:1.0",
			'xmlns:number':       "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",
			'xmlns:presentation': "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",
			'xmlns:svg':          "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",
			'xmlns:chart':        "urn:oasis:names:tc:opendocument:xmlns:chart:1.0",
			'xmlns:dr3d':         "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",
			'xmlns:math':         "http://www.w3.org/1998/Math/MathML",
			'xmlns:form':         "urn:oasis:names:tc:opendocument:xmlns:form:1.0",
			'xmlns:script':       "urn:oasis:names:tc:opendocument:xmlns:script:1.0",
			'xmlns:ooo':          "http://openoffice.org/2004/office",
			'xmlns:ooow':         "http://openoffice.org/2004/writer",
			'xmlns:oooc':         "http://openoffice.org/2004/calc",
			'xmlns:dom':          "http://www.w3.org/2001/xml-events",
			'xmlns:xforms':       "http://www.w3.org/2002/xforms",
			'xmlns:xsd':          "http://www.w3.org/2001/XMLSchema",
			'xmlns:xsi':          "http://www.w3.org/2001/XMLSchema-instance",
			'xmlns:sheet':        "urn:oasis:names:tc:opendocument:sh33tjs:1.0",
			'xmlns:rpt':          "http://openoffice.org/2005/report",
			'xmlns:of':           "urn:oasis:names:tc:opendocument:xmlns:of:1.2",
			'xmlns:xhtml':        "http://www.w3.org/1999/xhtml",
			'xmlns:grddl':        "http://www.w3.org/2003/g/data-view#",
			'xmlns:tableooo':     "http://openoffice.org/2009/table",
			'xmlns:drawooo':      "http://openoffice.org/2010/draw",
			'xmlns:calcext':      "urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0",
			'xmlns:loext':        "urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0",
			'xmlns:field':        "urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0",
			'xmlns:formx':        "urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0",
			'xmlns:css3t':        "http://www.w3.org/TR/css3-text/",
			'office:version':     "1.2"
		});

		var fods = wxt_helper({
			'xmlns:config':    "urn:oasis:names:tc:opendocument:xmlns:config:1.0",
			'office:mimetype': "application/vnd.oasis.opendocument.spreadsheet"
		});

		if(opts.bookType == "fods") {
			o.push('<office:document' + attr + fods + '>\n');
			o.push(write_meta_ods().replace(/<office:document-meta[^<>]*?>/, "").replace(/<\/office:document-meta>/, "") + "\n");
			// TODO: settings (equiv of settings.xml for ODS)
		} else o.push('<office:document-content' + attr  + '>\n');
		// o.push('  <office:scripts/>\n');
		var nfs = write_automatic_styles_ods(o, wb);
		o.push('  <office:body>\n');
		o.push('    <office:spreadsheet>\n');
		if(((wb.Workbook||{}).WBProps||{}).date1904) o.push('      <table:calculation-settings table:case-sensitive="false" table:search-criteria-must-apply-to-whole-cell="true" table:use-wildcards="true" table:use-regular-expressions="false" table:automatic-find-labels="false">\n        <table:null-date table:date-value="1904-01-01"/>\n      </table:calculation-settings>\n');
		for(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts, nfs, ((wb.Workbook||{}).WBProps||{}).date1904));
		if((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, -1));
		o.push('    </office:spreadsheet>\n');
		o.push('  </office:body>\n');
		if(opts.bookType == "fods") o.push('</office:document>');
		else o.push('</office:document-content>');
		return o.join("");
	};
})();

function write_ods(wb/*:any*/, opts/*:any*/) {
	if(opts.bookType == "fods") return write_content_ods(wb, opts);

	var zip = zip_new();
	var f = "";

	var manifest/*:Array<Array<string> >*/ = [];
	var rdf/*:Array<[string, string]>*/ = [];

	/* Part 3 Section 3.3 MIME Media Type */
	f = "mimetype";
	zip_add_file(zip, f, "application/vnd.oasis.opendocument.spreadsheet");

	/* Part 1 Section 2.2 Documents */
	f = "content.xml";
	zip_add_file(zip, f, write_content_ods(wb, opts));
	manifest.push([f, "text/xml"]);
	rdf.push([f, "ContentFile"]);

	/* TODO: these are hard-coded styles to satiate excel */
	f = "styles.xml";
	zip_add_file(zip, f, write_styles_ods(wb, opts));
	manifest.push([f, "text/xml"]);
	rdf.push([f, "StylesFile"]);

	/* TODO: this is hard-coded to satiate excel */
	f = "meta.xml";
	zip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));
	manifest.push([f, "text/xml"]);
	rdf.push([f, "MetadataFile"]);

	/* Part 3 Section 6 Metadata Manifest File */
	f = "manifest.rdf";
	zip_add_file(zip, f, write_rdf(rdf/*, opts*/));
	manifest.push([f, "application/rdf+xml"]);

	/* Part 3 Section 4 Manifest File */
	f = "META-INF/manifest.xml";
	zip_add_file(zip, f, write_manifest(manifest/*, opts*/));

	return zip;
}

/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */
var subarray = function() {
  try {
    if (typeof Uint8Array == "undefined")
      return "slice";
    if (typeof Uint8Array.prototype.subarray == "undefined")
      return "slice";
    if (typeof Buffer !== "undefined") {
      if (typeof Buffer.prototype.subarray == "undefined")
        return "slice";
      if ((typeof Buffer.from == "function" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)
        return "subarray";
      return "slice";
    }
    return "subarray";
  } catch (e) {
    return "slice";
  }
}();
function u8_to_dataview(array) {
  return new DataView(array.buffer, array.byteOffset, array.byteLength);
}
function u8str(u8) {
  return typeof TextDecoder != "undefined" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));
}
function stru8(str) {
  return typeof TextEncoder != "undefined" ? new TextEncoder().encode(str) : s2a(utf8write(str));
}
function u8concat(u8a) {
  var len = 0;
  for (var i = 0; i < u8a.length; ++i)
    len += u8a[i].length;
  var out = new Uint8Array(len);
  var off = 0;
  for (i = 0; i < u8a.length; ++i) {
    var u8 = u8a[i], L = u8.length;
    if (L < 250) {
      for (var j = 0; j < L; ++j)
        out[off++] = u8[j];
    } else {
      out.set(u8, off);
      off += L;
    }
  }
  return out;
}
function popcnt(x) {
  x -= x >> 1 & 1431655765;
  x = (x & 858993459) + (x >> 2 & 858993459);
  return (x + (x >> 4) & 252645135) * 16843009 >>> 24;
}
function readDecimal128LE(buf, offset) {
  var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;
  var mantissa = buf[offset + 14] & 1;
  for (var j = offset + 13; j >= offset; --j)
    mantissa = mantissa * 256 + buf[j];
  return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);
}
function writeDecimal128LE(buf, offset, value) {
  var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 16;
  var mantissa = value / Math.pow(10, exp - 6176);
  buf[offset + 15] |= exp >> 7;
  buf[offset + 14] |= (exp & 127) << 1;
  for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)
    buf[offset + i] = mantissa & 255;
  buf[offset + 15] |= value >= 0 ? 0 : 128;
}
function parse_varint49(buf, ptr) {
  var l = ptr.l;
  var usz = buf[l] & 127;
  varint:
    if (buf[l++] >= 128) {
      usz |= (buf[l] & 127) << 7;
      if (buf[l++] < 128)
        break varint;
      usz |= (buf[l] & 127) << 14;
      if (buf[l++] < 128)
        break varint;
      usz |= (buf[l] & 127) << 21;
      if (buf[l++] < 128)
        break varint;
      usz += (buf[l] & 127) * Math.pow(2, 28);
      ++l;
      if (buf[l++] < 128)
        break varint;
      usz += (buf[l] & 127) * Math.pow(2, 35);
      ++l;
      if (buf[l++] < 128)
        break varint;
      usz += (buf[l] & 127) * Math.pow(2, 42);
      ++l;
      if (buf[l++] < 128)
        break varint;
    }
  ptr.l = l;
  return usz;
}
function write_varint49(v) {
  var usz = new Uint8Array(7);
  usz[0] = v & 127;
  var L = 1;
  sz:
    if (v > 127) {
      usz[L - 1] |= 128;
      usz[L] = v >> 7 & 127;
      ++L;
      if (v <= 16383)
        break sz;
      usz[L - 1] |= 128;
      usz[L] = v >> 14 & 127;
      ++L;
      if (v <= 2097151)
        break sz;
      usz[L - 1] |= 128;
      usz[L] = v >> 21 & 127;
      ++L;
      if (v <= 268435455)
        break sz;
      usz[L - 1] |= 128;
      usz[L] = v / 256 >>> 21 & 127;
      ++L;
      if (v <= 34359738367)
        break sz;
      usz[L - 1] |= 128;
      usz[L] = v / 65536 >>> 21 & 127;
      ++L;
      if (v <= 4398046511103)
        break sz;
      usz[L - 1] |= 128;
      usz[L] = v / 16777216 >>> 21 & 127;
      ++L;
    }
  return usz[subarray](0, L);
}
function parse_packed_varints(buf) {
  var ptr = { l: 0 };
  var out = [];
  while (ptr.l < buf.length)
    out.push(parse_varint49(buf, ptr));
  return out;
}
function write_packed_varints(nums) {
  return u8concat(nums.map(function(x) {
    return write_varint49(x);
  }));
}
function varint_to_i32(buf) {
  var l = 0, i32 = buf[l] & 127;
  if (buf[l++] < 128)
    return i32;
  i32 |= (buf[l] & 127) << 7;
  if (buf[l++] < 128)
    return i32;
  i32 |= (buf[l] & 127) << 14;
  if (buf[l++] < 128)
    return i32;
  i32 |= (buf[l] & 127) << 21;
  if (buf[l++] < 128)
    return i32;
  i32 |= (buf[l] & 15) << 28;
  return i32;
}
function varint_to_u64(buf) {
  var l = 0, lo = buf[l] & 127, hi = 0;
  varint:
    if (buf[l++] >= 128) {
      lo |= (buf[l] & 127) << 7;
      if (buf[l++] < 128)
        break varint;
      lo |= (buf[l] & 127) << 14;
      if (buf[l++] < 128)
        break varint;
      lo |= (buf[l] & 127) << 21;
      if (buf[l++] < 128)
        break varint;
      lo |= (buf[l] & 127) << 28;
      hi = buf[l] >> 4 & 7;
      if (buf[l++] < 128)
        break varint;
      hi |= (buf[l] & 127) << 3;
      if (buf[l++] < 128)
        break varint;
      hi |= (buf[l] & 127) << 10;
      if (buf[l++] < 128)
        break varint;
      hi |= (buf[l] & 127) << 17;
      if (buf[l++] < 128)
        break varint;
      hi |= (buf[l] & 127) << 24;
      if (buf[l++] < 128)
        break varint;
      hi |= (buf[l] & 127) << 31;
    }
  return [lo >>> 0, hi >>> 0];
}
function parse_shallow(buf) {
  var out = [], ptr = { l: 0 };
  while (ptr.l < buf.length) {
    var off = ptr.l;
    var num = parse_varint49(buf, ptr);
    var type = num & 7;
    num = num / 8 | 0;
    var data;
    var l = ptr.l;
    switch (type) {
      case 0:
        {
          while (buf[l++] >= 128)
            ;
          data = buf[subarray](ptr.l, l);
          ptr.l = l;
        }
        break;
      case 1:
        {
          data = buf[subarray](l, l + 8);
          ptr.l = l + 8;
        }
        break;
      case 2:
        {
          var len = parse_varint49(buf, ptr);
          data = buf[subarray](ptr.l, ptr.l + len);
          ptr.l += len;
        }
        break;
      case 5:
        {
          data = buf[subarray](l, l + 4);
          ptr.l = l + 4;
        }
        break;
      default:
        throw new Error("PB Type ".concat(type, " for Field ").concat(num, " at offset ").concat(off));
    }
    var v = { data: data, type: type };
    if (out[num] == null)
      out[num] = [];
    out[num].push(v);
  }
  return out;
}
function write_shallow(proto) {
  var out = [];
  proto.forEach(function(field, idx) {
    if (idx == 0)
      return;
    field.forEach(function(item) {
      if (!item.data)
        return;
      out.push(write_varint49(idx * 8 + item.type));
      if (item.type == 2)
        out.push(write_varint49(item.data.length));
      out.push(item.data);
    });
  });
  return u8concat(out);
}
function mappa(data, cb) {
  return (data == null ? void 0 : data.map(function(d) {
    return cb(d.data);
  })) || [];
}
function parse_iwa_file(buf) {
  var _a;
  var out = [], ptr = { l: 0 };
  while (ptr.l < buf.length) {
    var len = parse_varint49(buf, ptr);
    var ai = parse_shallow(buf[subarray](ptr.l, ptr.l + len));
    ptr.l += len;
    var res = {
      id: varint_to_i32(ai[1][0].data),
      messages: []
    };
    ai[2].forEach(function(b) {
      var mi = parse_shallow(b.data);
      var fl = varint_to_i32(mi[3][0].data);
      res.messages.push({
        meta: mi,
        data: buf[subarray](ptr.l, ptr.l + fl)
      });
      ptr.l += fl;
    });
    if ((_a = ai[3]) == null ? void 0 : _a[0])
      res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;
    out.push(res);
  }
  return out;
}
function write_iwa_file(ias) {
  var bufs = [];
  ias.forEach(function(ia) {
    var ai = [
      [],
      [{ data: write_varint49(ia.id), type: 0 }],
      []
    ];
    if (ia.merge != null)
      ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];
    var midata = [];
    ia.messages.forEach(function(mi) {
      midata.push(mi.data);
      mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];
      ai[2].push({ data: write_shallow(mi.meta), type: 2 });
    });
    var aipayload = write_shallow(ai);
    bufs.push(write_varint49(aipayload.length));
    bufs.push(aipayload);
    midata.forEach(function(mid) {
      return bufs.push(mid);
    });
  });
  return u8concat(bufs);
}
function parse_snappy_chunk(type, buf) {
  if (type != 0)
    throw new Error("Unexpected Snappy chunk type ".concat(type));
  var ptr = { l: 0 };
  var usz = parse_varint49(buf, ptr);
  var chunks = [];
  var l = ptr.l;
  while (l < buf.length) {
    var tag = buf[l] & 3;
    if (tag == 0) {
      var len = buf[l++] >> 2;
      if (len < 60)
        ++len;
      else {
        var c = len - 59;
        len = buf[l];
        if (c > 1)
          len |= buf[l + 1] << 8;
        if (c > 2)
          len |= buf[l + 2] << 16;
        if (c > 3)
          len |= buf[l + 3] << 24;
        len >>>= 0;
        len++;
        l += c;
      }
      chunks.push(buf[subarray](l, l + len));
      l += len;
      continue;
    } else {
      var offset = 0, length = 0;
      if (tag == 1) {
        length = (buf[l] >> 2 & 7) + 4;
        offset = (buf[l++] & 224) << 3;
        offset |= buf[l++];
      } else {
        length = (buf[l++] >> 2) + 1;
        if (tag == 2) {
          offset = buf[l] | buf[l + 1] << 8;
          l += 2;
        } else {
          offset = (buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16 | buf[l + 3] << 24) >>> 0;
          l += 4;
        }
      }
      if (offset == 0)
        throw new Error("Invalid offset 0");
      var j = chunks.length - 1, off = offset;
      while (j >= 0 && off >= chunks[j].length) {
        off -= chunks[j].length;
        --j;
      }
      if (j < 0) {
        if (off == 0)
          off = chunks[j = 0].length;
        else
          throw new Error("Invalid offset beyond length");
      }
      if (length < off)
        chunks.push(chunks[j][subarray](chunks[j].length - off, chunks[j].length - off + length));
      else {
        if (off > 0) {
          chunks.push(chunks[j][subarray](chunks[j].length - off));
          length -= off;
        }
        ++j;
        while (length >= chunks[j].length) {
          chunks.push(chunks[j]);
          length -= chunks[j].length;
          ++j;
        }
        if (length)
          chunks.push(chunks[j][subarray](0, length));
      }
      if (chunks.length > 25)
        chunks = [u8concat(chunks)];
    }
  }
  var clen = 0;
  for (var u8i = 0; u8i < chunks.length; ++u8i)
    clen += chunks[u8i].length;
  if (clen != usz)
    throw new Error("Unexpected length: ".concat(clen, " != ").concat(usz));
  return chunks;
}
function decompress_iwa_file(buf) {
  if (Array.isArray(buf))
    buf = new Uint8Array(buf);
  var out = [];
  var l = 0;
  while (l < buf.length) {
    var t = buf[l++];
    var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;
    l += 3;
    out.push.apply(out, parse_snappy_chunk(t, buf[subarray](l, l + len)));
    l += len;
  }
  if (l !== buf.length)
    throw new Error("data is not a valid framed stream!");
  return out.length == 1 ? out[0] : u8concat(out);
}
function compress_iwa_file(buf) {
  var out = [];
  var l = 0;
  while (l < buf.length) {
    var c = Math.min(buf.length - l, 268435455);
    var frame = new Uint8Array(4);
    out.push(frame);
    var usz = write_varint49(c);
    var L = usz.length;
    out.push(usz);
    if (c <= 60) {
      L++;
      out.push(new Uint8Array([c - 1 << 2]));
    } else if (c <= 256) {
      L += 2;
      out.push(new Uint8Array([240, c - 1 & 255]));
    } else if (c <= 65536) {
      L += 3;
      out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));
    } else if (c <= 16777216) {
      L += 4;
      out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));
    } else if (c <= 4294967296) {
      L += 5;
      out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));
    }
    out.push(buf[subarray](l, l + c));
    L += c;
    frame[0] = 0;
    frame[1] = L & 255;
    frame[2] = L >> 8 & 255;
    frame[3] = L >> 16 & 255;
    l += c;
  }
  return u8concat(out);
}
var numbers_lut_new = function() {
  return { sst: [], rsst: [], ofmt: [], nfmt: [], fmla: [], ferr: [], cmnt: [] };
};
function numbers_format_cell(cell, t, flags, ofmt, nfmt) {
  var _a, _b, _c, _d;
  var ctype = t & 255, ver = t >> 8;
  var fmt = ver >= 5 ? nfmt : ofmt;
  dur:
    if (flags & (ver > 4 ? 8 : 4) && cell.t == "n" && ctype == 7) {
      var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? varint_to_i32(fmt[7][0].data) : -1;
      if (dstyle == -1)
        break dur;
      var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? varint_to_i32(fmt[15][0].data) : -1;
      var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? varint_to_i32(fmt[16][0].data) : -1;
      var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? varint_to_i32(fmt[40][0].data) : -1;
      var d = cell.v, dd = d;
      autodur:
        if (auto) {
          if (d == 0) {
            dmin = dmax = 2;
            break autodur;
          }
          if (d >= 604800)
            dmin = 1;
          else if (d >= 86400)
            dmin = 2;
          else if (d >= 3600)
            dmin = 4;
          else if (d >= 60)
            dmin = 8;
          else if (d >= 1)
            dmin = 16;
          else
            dmin = 32;
          if (Math.floor(d) != d)
            dmax = 32;
          else if (d % 60)
            dmax = 16;
          else if (d % 3600)
            dmax = 8;
          else if (d % 86400)
            dmax = 4;
          else if (d % 604800)
            dmax = 2;
          if (dmax < dmin)
            dmax = dmin;
        }
      if (dmin == -1 || dmax == -1)
        break dur;
      var dstr = [], zstr = [];
      if (dmin == 1) {
        dd = d / 604800;
        if (dmax == 1) {
          zstr.push('d"d"');
        } else {
          dd |= 0;
          d -= 604800 * dd;
        }
        dstr.push(dd + (dstyle == 2 ? " week" + (dd == 1 ? "" : "s") : dstyle == 1 ? "w" : ""));
      }
      if (dmin <= 2 && dmax >= 2) {
        dd = d / 86400;
        if (dmax > 2) {
          dd |= 0;
          d -= 86400 * dd;
        }
        zstr.push('d"d"');
        dstr.push(dd + (dstyle == 2 ? " day" + (dd == 1 ? "" : "s") : dstyle == 1 ? "d" : ""));
      }
      if (dmin <= 4 && dmax >= 4) {
        dd = d / 3600;
        if (dmax > 4) {
          dd |= 0;
          d -= 3600 * dd;
        }
        zstr.push((dmin >= 4 ? "[h]" : "h") + '"h"');
        dstr.push(dd + (dstyle == 2 ? " hour" + (dd == 1 ? "" : "s") : dstyle == 1 ? "h" : ""));
      }
      if (dmin <= 8 && dmax >= 8) {
        dd = d / 60;
        if (dmax > 8) {
          dd |= 0;
          d -= 60 * dd;
        }
        zstr.push((dmin >= 8 ? "[m]" : "m") + '"m"');
        if (dstyle == 0)
          dstr.push((dmin == 8 && dmax == 8 || dd >= 10 ? "" : "0") + dd);
        else
          dstr.push(dd + (dstyle == 2 ? " minute" + (dd == 1 ? "" : "s") : dstyle == 1 ? "m" : ""));
      }
      if (dmin <= 16 && dmax >= 16) {
        dd = d;
        if (dmax > 16) {
          dd |= 0;
          d -= dd;
        }
        zstr.push((dmin >= 16 ? "[s]" : "s") + '"s"');
        if (dstyle == 0)
          dstr.push((dmax == 16 && dmin == 16 || dd >= 10 ? "" : "0") + dd);
        else
          dstr.push(dd + (dstyle == 2 ? " second" + (dd == 1 ? "" : "s") : dstyle == 1 ? "s" : ""));
      }
      if (dmax >= 32) {
        dd = Math.round(1e3 * d);
        if (dmin < 32)
          zstr.push('.000"ms"');
        if (dstyle == 0)
          dstr.push((dd >= 100 ? "" : dd >= 10 ? "0" : "00") + dd);
        else
          dstr.push(dd + (dstyle == 2 ? " millisecond" + (dd == 1 ? "" : "s") : dstyle == 1 ? "ms" : ""));
      }
      cell.w = dstr.join(dstyle == 0 ? ":" : " ");
      cell.z = zstr.join(dstyle == 0 ? '":"' : " ");
      if (dstyle == 0)
        cell.w = cell.w.replace(/:(\d\d\d)$/, ".$1");
    }
}
function parse_old_storage(buf, lut, v, opts) {
  var dv = u8_to_dataview(buf);
  var flags = dv.getUint32(4, true);
  var ridx = -1, sidx = -1, zidx = -1, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1));
  var doff = v > 1 ? 12 : 8;
  if (flags & 2) {
    zidx = dv.getUint32(doff, true);
    doff += 4;
  }
  doff += popcnt(flags & (v > 1 ? 3468 : 396)) * 4;
  if (flags & 512) {
    ridx = dv.getUint32(doff, true);
    doff += 4;
  }
  doff += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;
  if (flags & 16) {
    sidx = dv.getUint32(doff, true);
    doff += 4;
  }
  if (flags & 32) {
    ieee = dv.getFloat64(doff, true);
    doff += 8;
  }
  if (flags & 64) {
    dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);
    doff += 8;
  }
  if (v > 1) {
    flags = dv.getUint32(8, true) >>> 16;
    if (flags & 255) {
      if (zidx == -1)
        zidx = dv.getUint32(doff, true);
      doff += 4;
    }
  }
  var ret;
  var t = buf[v >= 4 ? 1 : 2];
  switch (t) {
    case 0:
      return void 0;
    case 2:
      ret = { t: "n", v: ieee };
      break;
    case 3:
      ret = { t: "s", v: lut.sst[sidx] };
      break;
    case 5:
      {
        if (opts == null ? void 0 : opts.cellDates)
          ret = { t: "d", v: dt };
        else
          ret = { t: "n", v: dc / 86400 + 35430, z: table_fmt[14] };
      }
      break;
    case 6:
      ret = { t: "b", v: ieee > 0 };
      break;
    case 7:
      ret = { t: "n", v: ieee };
      break;
    case 8:
      ret = { t: "e", v: 0 };
      break;
    case 9:
      {
        if (ridx > -1) {
          var rts = lut.rsst[ridx];
          ret = { t: "s", v: rts.v };
          if (rts.l)
            ret.l = { Target: rts.l };
        } else
          throw new Error("Unsupported cell type ".concat(buf[subarray](0, 4)));
      }
      break;
    default:
      throw new Error("Unsupported cell type ".concat(buf[subarray](0, 4)));
  }
  if (zidx > -1)
    numbers_format_cell(ret, t | v << 8, flags, lut.ofmt[zidx], lut.nfmt[zidx]);
  if (t == 7)
    ret.v /= 86400;
  return ret;
}
function parse_new_storage(buf, lut, opts) {
  var dv = u8_to_dataview(buf);
  var flags = dv.getUint32(4, true);
  var fields = dv.getUint32(8, true);
  var doff = 12;
  var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1)), eidx = -1, fidx = -1;
  if (fields & 1) {
    d128 = readDecimal128LE(buf, doff);
    doff += 16;
  }
  if (fields & 2) {
    ieee = dv.getFloat64(doff, true);
    doff += 8;
  }
  if (fields & 4) {
    dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);
    doff += 8;
  }
  if (fields & 8) {
    sidx = dv.getUint32(doff, true);
    doff += 4;
  }
  if (fields & 16) {
    ridx = dv.getUint32(doff, true);
    doff += 4;
  }
  doff += popcnt(fields & 480) * 4;
  if (fields & 512) {
    fidx = dv.getUint32(doff, true);
    doff += 4;
  }
  doff += popcnt(fields & 1024) * 4;
  if (fields & 2048) {
    eidx = dv.getUint32(doff, true);
    doff += 4;
  }
  var ret;
  var t = buf[1];
  switch (t) {
    case 0:
      ret = { t: "z" };
      break;
    case 2:
      ret = { t: "n", v: d128 };
      break;
    case 3:
      ret = { t: "s", v: lut.sst[sidx] };
      break;
    case 5:
      {
        if (opts == null ? void 0 : opts.cellDates)
          ret = { t: "d", v: dt };
        else
          ret = { t: "n", v: dc / 86400 + 35430, z: table_fmt[14] };
      }
      break;
    case 6:
      ret = { t: "b", v: ieee > 0 };
      break;
    case 7:
      ret = { t: "n", v: ieee };
      break;
    case 8:
      ret = { t: "e", v: 0 };
      break;
    case 9:
      {
        if (ridx > -1) {
          var rts = lut.rsst[ridx];
          ret = { t: "s", v: rts.v };
          if (rts.l)
            ret.l = { Target: rts.l };
        } else
          throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(fields & 31, " : ").concat(buf[subarray](0, 4)));
      }
      break;
    case 10:
      ret = { t: "n", v: d128 };
      break;
    default:
      throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(fields & 31, " : ").concat(buf[subarray](0, 4)));
  }
  doff += popcnt(fields & 4096) * 4;
  if (fields & 516096) {
    if (zidx == -1)
      zidx = dv.getUint32(doff, true);
    doff += 4;
  }
  if (fields & 524288) {
    var cmntidx = dv.getUint32(doff, true);
    doff += 4;
    if (lut.cmnt[cmntidx])
      ret.c = iwa_to_s5s_comment(lut.cmnt[cmntidx]);
  }
  if (zidx > -1)
    numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
  if (t == 7)
    ret.v /= 86400;
  return ret;
}
function write_new_storage(cell, lut) {
  var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
  out[0] = 5;
  switch (cell.t) {
    case "n":
      if (cell.z && fmt_is_date(cell.z)) {
        out[1] = 5;
        dv.setFloat64(l, (numdate(cell.v + 1462).getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);
        fields |= 4;
        l += 8;
        break;
      } else {
        out[1] = 2;
        writeDecimal128LE(out, l, cell.v);
        fields |= 1;
        l += 16;
      }
      break;
    case "b":
      out[1] = 6;
      dv.setFloat64(l, cell.v ? 1 : 0, true);
      fields |= 2;
      l += 8;
      break;
    case "s":
      {
        var s = cell.v == null ? "" : String(cell.v);
        if (cell.l) {
          var irsst = lut.rsst.findIndex(function(v) {
            var _a;
            return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
          });
          if (irsst == -1)
            lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
          out[1] = 9;
          dv.setUint32(l, irsst, true);
          fields |= 16;
          l += 4;
        } else {
          var isst = lut.sst.indexOf(s);
          if (isst == -1)
            lut.sst[isst = lut.sst.length] = s;
          out[1] = 3;
          dv.setUint32(l, isst, true);
          fields |= 8;
          l += 4;
        }
      }
      break;
    case "d":
      out[1] = 5;
      dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);
      fields |= 4;
      l += 8;
      break;
    case "z":
      out[1] = 0;
      break;
    default:
      throw "unsupported cell type " + cell.t;
  }
  if (cell.c) {
    lut.cmnt.push(s5s_to_iwa_comment(cell.c));
    dv.setUint32(l, lut.cmnt.length - 1, true);
    fields |= 524288;
    l += 4;
  }
  dv.setUint32(8, fields, true);
  return out[subarray](0, l);
}
function write_old_storage(cell, lut) {
  var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0, s = "";
  out[0] = 4;
  switch (cell.t) {
    case "n":
      break;
    case "b":
      break;
    case "s":
      {
        s = cell.v == null ? "" : String(cell.v);
        if (cell.l) {
          var irsst = lut.rsst.findIndex(function(v) {
            var _a;
            return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
          });
          if (irsst == -1)
            lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
          out[1] = 9;
          dv.setUint32(l, irsst, true);
          fields |= 512;
          l += 4;
        } else {
        }
      }
      break;
    case "d":
      break;
    case "e":
      break;
    case "z":
      break;
    default:
      throw "unsupported cell type " + cell.t;
  }
  if (cell.c) {
    dv.setUint32(l, lut.cmnt.length - 1, true);
    fields |= 4096;
    l += 4;
  }
  switch (cell.t) {
    case "n":
      out[1] = 2;
      dv.setFloat64(l, cell.v, true);
      fields |= 32;
      l += 8;
      break;
    case "b":
      out[1] = 6;
      dv.setFloat64(l, cell.v ? 1 : 0, true);
      fields |= 32;
      l += 8;
      break;
    case "s":
      {
        s = cell.v == null ? "" : String(cell.v);
        if (cell.l) {
        } else {
          var isst = lut.sst.indexOf(s);
          if (isst == -1)
            lut.sst[isst = lut.sst.length] = s;
          out[1] = 3;
          dv.setUint32(l, isst, true);
          fields |= 16;
          l += 4;
        }
      }
      break;
    case "d":
      out[1] = 5;
      dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);
      fields |= 64;
      l += 8;
      break;
    case "z":
      out[1] = 0;
      break;
    default:
      throw "unsupported cell type " + cell.t;
  }
  dv.setUint32(8, fields, true);
  return out[subarray](0, l);
}
function parse_cell_storage(buf, lut, opts) {
  switch (buf[0]) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
      return parse_old_storage(buf, lut, buf[0], opts);
    case 5:
      return parse_new_storage(buf, lut, opts);
    default:
      throw new Error("Unsupported payload version ".concat(buf[0]));
  }
}
function parse_TSP_Reference(buf) {
  var pb = parse_shallow(buf);
  return varint_to_i32(pb[1][0].data);
}
function write_TSP_Reference(idx) {
  return write_shallow([
    [],
    [{ type: 0, data: write_varint49(idx) }]
  ]);
}
function numbers_add_oref(iwa, ref) {
  var _a;
  var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];
  var orefidx = orefs.indexOf(ref);
  if (orefidx == -1) {
    orefs.push(ref);
    iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
  }
}
function numbers_del_oref(iwa, ref) {
  var _a;
  var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];
  iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs.filter(function(r) {
    return r != ref;
  })) }];
}
function parse_TST_TableDataList(M, root) {
  var pb = parse_shallow(root.data);
  var type = varint_to_i32(pb[1][0].data);
  var entries = pb[3];
  var data = [];
  (entries || []).forEach(function(entry) {
    var _a, _b;
    var le = parse_shallow(entry.data);
    if (!le[1])
      return;
    var key = varint_to_i32(le[1][0].data) >>> 0;
    switch (type) {
      case 1:
        data[key] = u8str(le[3][0].data);
        break;
      case 8:
        {
          var rt = M[parse_TSP_Reference(le[9][0].data)][0];
          var rtp = parse_shallow(rt.data);
          var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];
          var mtype = varint_to_i32(rtpref.meta[1][0].data);
          if (mtype != 2001)
            throw new Error("2000 unexpected reference to ".concat(mtype));
          var tswpsa = parse_shallow(rtpref.data);
          var richtext = { v: tswpsa[3].map(function(x) {
            return u8str(x.data);
          }).join("") };
          data[key] = richtext;
          sfields:
            if ((_a = tswpsa == null ? void 0 : tswpsa[11]) == null ? void 0 : _a[0]) {
              var smartfields = (_b = parse_shallow(tswpsa[11][0].data)) == null ? void 0 : _b[1];
              if (!smartfields)
                break sfields;
              smartfields.forEach(function(sf) {
                var _a2, _b2, _c;
                var attr = parse_shallow(sf.data);
                if ((_a2 = attr[2]) == null ? void 0 : _a2[0]) {
                  var obj = M[parse_TSP_Reference((_b2 = attr[2]) == null ? void 0 : _b2[0].data)][0];
                  var objtype = varint_to_i32(obj.meta[1][0].data);
                  switch (objtype) {
                    case 2032:
                      var hlink = parse_shallow(obj.data);
                      if (((_c = hlink == null ? void 0 : hlink[2]) == null ? void 0 : _c[0]) && !richtext.l)
                        richtext.l = u8str(hlink[2][0].data);
                      break;
                    case 2039:
                      break;
                    default:
                      console.log("unrecognized ObjectAttribute type ".concat(objtype));
                  }
                }
              });
            }
        }
        break;
      case 2:
        data[key] = parse_shallow(le[6][0].data);
        break;
      case 3:
        data[key] = parse_shallow(le[5][0].data);
        break;
      case 10:
        {
          var cs = M[parse_TSP_Reference(le[10][0].data)][0];
          data[key] = parse_TSD_CommentStorageArchive(M, cs.data);
        }
        break;
      default:
        throw type;
    }
  });
  return data;
}
function parse_TST_TileRowInfo(u8, type) {
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
  var pb = parse_shallow(u8);
  var R = varint_to_i32(pb[1][0].data) >>> 0;
  var cnt = varint_to_i32(pb[2][0].data) >>> 0;
  var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;
  var used_storage_u8, used_storage;
  if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {
    used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;
    used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;
  } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {
    used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;
    used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;
  } else
    throw "NUMBERS Tile missing ".concat(type, " cell storage");
  var width = wide_offsets ? 4 : 1;
  var used_storage_offsets = u8_to_dataview(used_storage_u8);
  var offsets = [];
  for (var C = 0; C < used_storage_u8.length / 2; ++C) {
    var off = used_storage_offsets.getUint16(C * 2, true);
    if (off < 65535)
      offsets.push([C, off]);
  }
  if (offsets.length != cnt)
    throw "Expected ".concat(cnt, " cells, found ").concat(offsets.length);
  var cells = [];
  for (C = 0; C < offsets.length - 1; ++C)
    cells[offsets[C][0]] = used_storage[subarray](offsets[C][1] * width, offsets[C + 1][1] * width);
  if (offsets.length >= 1)
    cells[offsets[offsets.length - 1][0]] = used_storage[subarray](offsets[offsets.length - 1][1] * width);
  return { R: R, cells: cells };
}
function parse_TST_Tile(M, root) {
  var _a;
  var pb = parse_shallow(root.data);
  var storage = -1;
  if ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) {
    if (varint_to_i32(pb[7][0].data) >>> 0)
      storage = 1;
    else
      storage = 0;
  }
  var ri = mappa(pb[5], function(u8) {
    return parse_TST_TileRowInfo(u8, storage);
  });
  return {
    nrows: varint_to_i32(pb[4][0].data) >>> 0,
    data: ri.reduce(function(acc, x) {
      if (!acc[x.R])
        acc[x.R] = [];
      x.cells.forEach(function(cell, C) {
        if (acc[x.R][C])
          throw new Error("Duplicate cell r=".concat(x.R, " c=").concat(C));
        acc[x.R][C] = cell;
      });
      return acc;
    }, [])
  };
}
function parse_TSD_CommentStorageArchive(M, data) {
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
  var out = { t: "", a: "" };
  var csp = parse_shallow(data);
  if ((_b = (_a = csp == null ? void 0 : csp[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data)
    out.t = u8str((_d = (_c = csp == null ? void 0 : csp[1]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) || "";
  if ((_f = (_e = csp == null ? void 0 : csp[3]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data) {
    var as = M[parse_TSP_Reference((_h = (_g = csp == null ? void 0 : csp[3]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data)][0];
    var asp = parse_shallow(as.data);
    if ((_j = (_i = asp[1]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data)
      out.a = u8str(asp[1][0].data);
  }
  if (csp == null ? void 0 : csp[4]) {
    out.replies = [];
    csp[4].forEach(function(pi) {
      var cs = M[parse_TSP_Reference(pi.data)][0];
      out.replies.push(parse_TSD_CommentStorageArchive(M, cs.data));
    });
  }
  return out;
}
function iwa_to_s5s_comment(iwa) {
  var out = [];
  out.push({ t: iwa.t || "", a: iwa.a, T: iwa.replies && iwa.replies.length > 0 });
  if (iwa.replies)
    iwa.replies.forEach(function(reply) {
      out.push({ t: reply.t || "", a: reply.a, T: true });
    });
  return out;
}
function s5s_to_iwa_comment(s5s) {
  var out = { a: "", t: "", replies: [] };
  for (var i = 0; i < s5s.length; ++i) {
    if (i == 0) {
      out.a = s5s[i].a;
      out.t = s5s[i].t;
    } else {
      out.replies.push({ a: s5s[i].a, t: s5s[i].t });
    }
  }
  return out;
}
function parse_TST_TableModelArchive(M, root, ws, opts) {
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
  var pb = parse_shallow(root.data);
  var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
  range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;
  if (range.e.r < 0)
    throw new Error("Invalid row varint ".concat(pb[6][0].data));
  range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;
  if (range.e.c < 0)
    throw new Error("Invalid col varint ".concat(pb[7][0].data));
  ws["!ref"] = encode_range(range);
  var dense = ws["!data"] != null, dws = ws;
  var store = parse_shallow(pb[4][0].data);
  var lut = numbers_lut_new();
  if ((_a = store[4]) == null ? void 0 : _a[0])
    lut.sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);
  if ((_b = store[6]) == null ? void 0 : _b[0])
    lut.fmla = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[6][0].data)][0]);
  if ((_c = store[11]) == null ? void 0 : _c[0])
    lut.ofmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[11][0].data)][0]);
  if ((_d = store[12]) == null ? void 0 : _d[0])
    lut.ferr = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[12][0].data)][0]);
  if ((_e = store[17]) == null ? void 0 : _e[0])
    lut.rsst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]);
  if ((_f = store[19]) == null ? void 0 : _f[0])
    lut.cmnt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[19][0].data)][0]);
  if ((_g = store[22]) == null ? void 0 : _g[0])
    lut.nfmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[22][0].data)][0]);
  var tile = parse_shallow(store[3][0].data);
  var _R = 0;
  if (!((_h = store[9]) == null ? void 0 : _h[0]))
    throw "NUMBERS file missing row tree";
  var rtt = parse_shallow(store[9][0].data)[1].map(function(p) {
    return parse_shallow(p.data);
  });
  rtt.forEach(function(kv) {
    _R = varint_to_i32(kv[1][0].data);
    var tidx = varint_to_i32(kv[2][0].data);
    var t = tile[1][tidx];
    if (!t)
      throw "NUMBERS missing tile " + tidx;
    var tl = parse_shallow(t.data);
    var ref2 = M[parse_TSP_Reference(tl[2][0].data)][0];
    var mtype2 = varint_to_i32(ref2.meta[1][0].data);
    if (mtype2 != 6002)
      throw new Error("6001 unexpected reference to ".concat(mtype2));
    var _tile = parse_TST_Tile(M, ref2);
    _tile.data.forEach(function(row, R) {
      row.forEach(function(buf, C) {
        var res = parse_cell_storage(buf, lut, opts);
        if (res) {
          if (dense) {
            if (!dws["!data"][_R + R])
              dws["!data"][_R + R] = [];
            dws["!data"][_R + R][C] = res;
          } else {
            ws[encode_col(C) + encode_row(_R + R)] = res;
          }
        }
      });
    });
    _R += _tile.nrows;
  });
  if ((_i = store[13]) == null ? void 0 : _i[0]) {
    var ref = M[parse_TSP_Reference(store[13][0].data)][0];
    var mtype = varint_to_i32(ref.meta[1][0].data);
    if (mtype != 6144)
      throw new Error("Expected merge type 6144, found ".concat(mtype));
    ws["!merges"] = (_j = parse_shallow(ref.data)) == null ? void 0 : _j[1].map(function(pi) {
      var merge = parse_shallow(pi.data);
      var origin = u8_to_dataview(parse_shallow(merge[1][0].data)[1][0].data), size = u8_to_dataview(parse_shallow(merge[2][0].data)[1][0].data);
      return {
        s: { r: origin.getUint16(0, true), c: origin.getUint16(2, true) },
        e: {
          r: origin.getUint16(0, true) + size.getUint16(0, true) - 1,
          c: origin.getUint16(2, true) + size.getUint16(2, true) - 1
        }
      };
    });
  }
  if (!((_k = ws["!merges"]) == null ? void 0 : _k.length) && ((_l = pb[47]) == null ? void 0 : _l[0])) {
    var merge_owner = parse_shallow(pb[47][0].data);
    if ((_m = merge_owner[2]) == null ? void 0 : _m[0]) {
      var formula_store = parse_shallow(merge_owner[2][0].data);
      if ((_n = formula_store[3]) == null ? void 0 : _n[0]) {
        ws["!merges"] = mappa(formula_store[3], function(u) {
          var _a2, _b2, _c2, _d2, _e2;
          var formula_pair = parse_shallow(u);
          var formula = parse_shallow(formula_pair[2][0].data);
          var AST_node_array = parse_shallow(formula[1][0].data);
          if (!((_a2 = AST_node_array[1]) == null ? void 0 : _a2[0]))
            return;
          var AST_node0 = parse_shallow(AST_node_array[1][0].data);
          var AST_node_type = varint_to_i32(AST_node0[1][0].data);
          if (AST_node_type != 67)
            return;
          var AST_colon_tract = parse_shallow(AST_node0[40][0].data);
          if (!((_b2 = AST_colon_tract[3]) == null ? void 0 : _b2[0]) || !((_c2 = AST_colon_tract[4]) == null ? void 0 : _c2[0]))
            return;
          var colrange = parse_shallow(AST_colon_tract[3][0].data);
          var rowrange = parse_shallow(AST_colon_tract[4][0].data);
          var c = varint_to_i32(colrange[1][0].data);
          var C = ((_d2 = colrange[2]) == null ? void 0 : _d2[0]) ? varint_to_i32(colrange[2][0].data) : c;
          var r = varint_to_i32(rowrange[1][0].data);
          var R = ((_e2 = rowrange[2]) == null ? void 0 : _e2[0]) ? varint_to_i32(rowrange[2][0].data) : r;
          return { s: { r: r, c: c }, e: { r: R, c: C } };
        }).filter(function(x) {
          return x != null;
        });
      }
    }
  }
}
function parse_TST_TableInfoArchive(M, root, opts) {
  var pb = parse_shallow(root.data);
  var out = { "!ref": "A1" };
  if (opts == null ? void 0 : opts.dense)
    out["!data"] = [];
  var tableref = M[parse_TSP_Reference(pb[2][0].data)];
  var mtype = varint_to_i32(tableref[0].meta[1][0].data);
  if (mtype != 6001)
    throw new Error("6000 unexpected reference to ".concat(mtype));
  parse_TST_TableModelArchive(M, tableref[0], out, opts);
  return out;
}
function parse_TN_SheetArchive(M, root, opts) {
  var _a;
  var pb = parse_shallow(root.data);
  var out = {
    name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : "",
    sheets: []
  };
  var shapeoffs = mappa(pb[2], parse_TSP_Reference);
  shapeoffs.forEach(function(off) {
    M[off].forEach(function(m) {
      var mtype = varint_to_i32(m.meta[1][0].data);
      if (mtype == 6e3)
        out.sheets.push(parse_TST_TableInfoArchive(M, m, opts));
    });
  });
  return out;
}
function parse_TN_DocumentArchive(M, root, opts) {
  var _a;
  var out = book_new();
  out.Workbook = { WBProps: { date1904: true } };
  var pb = parse_shallow(root.data);
  if ((_a = pb[2]) == null ? void 0 : _a[0])
    throw new Error("Keynote presentations are not supported");
  var sheetoffs = mappa(pb[1], parse_TSP_Reference);
  sheetoffs.forEach(function(off) {
    M[off].forEach(function(m) {
      var mtype = varint_to_i32(m.meta[1][0].data);
      if (mtype == 2) {
        var root2 = parse_TN_SheetArchive(M, m, opts);
        root2.sheets.forEach(function(sheet, idx) {
          book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + "_" + idx, true);
        });
      }
    });
  });
  if (out.SheetNames.length == 0)
    throw new Error("Empty NUMBERS file");
  out.bookType = "numbers";
  return out;
}
function parse_numbers_iwa(cfb, opts) {
  var _a, _b, _c, _d, _e, _f, _g;
  var M = {}, indices = [];
  cfb.FullPaths.forEach(function(p) {
    if (p.match(/\.iwpv2/))
      throw new Error("Unsupported password protection");
  });
  cfb.FileIndex.forEach(function(s) {
    if (!s.name.match(/\.iwa$/))
      return;
    if (s.content[0] != 0)
      return;
    var o;
    try {
      o = decompress_iwa_file(s.content);
    } catch (e) {
      return console.log("?? " + s.content.length + " " + (e.message || e));
    }
    var packets;
    try {
      packets = parse_iwa_file(o);
    } catch (e) {
      return console.log("## " + (e.message || e));
    }
    packets.forEach(function(packet) {
      M[packet.id] = packet.messages;
      indices.push(packet.id);
    });
  });
  if (!indices.length)
    throw new Error("File has no messages");
  if (((_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0].meta) == null ? void 0 : _b[1]) == null ? void 0 : _c[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1e4)
    throw new Error("Pages documents are not supported");
  var docroot = ((_g = (_f = (_e = (_d = M == null ? void 0 : M[1]) == null ? void 0 : _d[0]) == null ? void 0 : _e.meta) == null ? void 0 : _f[1]) == null ? void 0 : _g[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];
  if (!docroot)
    indices.forEach(function(idx) {
      M[idx].forEach(function(iwam) {
        var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;
        if (mtype == 1) {
          if (!docroot)
            docroot = iwam;
          else
            throw new Error("Document has multiple roots");
        }
      });
    });
  if (!docroot)
    throw new Error("Cannot find Document root");
  return parse_TN_DocumentArchive(M, docroot, opts);
}
function write_TST_TileRowInfo(data, lut, wide) {
  var _a, _b, _c;
  var tri = [
    [],
    [{ type: 0, data: write_varint49(0) }],
    [{ type: 0, data: write_varint49(0) }],
    [{ type: 2, data: new Uint8Array([]) }],
    [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
      return 255;
    })) }],
    [{ type: 0, data: write_varint49(5) }],
    [{ type: 2, data: new Uint8Array([]) }],
    [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
      return 255;
    })) }],
    [{ type: 0, data: write_varint49(1) }]
  ];
  if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))
    throw "Mutation only works on post-BNC storages!";
  var cnt = 0;
  if (tri[7][0].data.length < 2 * data.length) {
    var new_7 = new Uint8Array(2 * data.length);
    new_7.set(tri[7][0].data);
    tri[7][0].data = new_7;
  }
  if (tri[4][0].data.length < 2 * data.length) {
    var new_4 = new Uint8Array(2 * data.length);
    new_4.set(tri[4][0].data);
    tri[4][0].data = new_4;
  }
  var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];
  var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];
  var width = wide ? 4 : 1;
  for (var C = 0; C < data.length; ++C) {
    if (data[C] == null || data[C].t == "z" && !((_c = data[C].c) == null ? void 0 : _c.length) || data[C].t == "e") {
      dv.setUint16(C * 2, 65535, true);
      _dv.setUint16(C * 2, 65535);
      continue;
    }
    dv.setUint16(C * 2, last_offset / width, true);
    _dv.setUint16(C * 2, _last_offset / width, true);
    var celload, _celload;
    switch (data[C].t) {
      case "d":
        if (data[C].v instanceof Date) {
          celload = write_new_storage(data[C], lut);
          _celload = write_old_storage(data[C], lut);
          break;
        }
        celload = write_new_storage(data[C], lut);
        _celload = write_old_storage(data[C], lut);
        break;
      case "s":
      case "n":
      case "b":
      case "z":
        celload = write_new_storage(data[C], lut);
        _celload = write_old_storage(data[C], lut);
        break;
      default:
        throw new Error("Unsupported value " + data[C]);
    }
    cell_storage.push(celload);
    last_offset += celload.length;
    {
      _cell_storage.push(_celload);
      _last_offset += _celload.length;
    }
    ++cnt;
  }
  tri[2][0].data = write_varint49(cnt);
  tri[5][0].data = write_varint49(5);
  for (; C < tri[7][0].data.length / 2; ++C) {
    dv.setUint16(C * 2, 65535, true);
    _dv.setUint16(C * 2, 65535, true);
  }
  tri[6][0].data = u8concat(cell_storage);
  tri[3][0].data = u8concat(_cell_storage);
  tri[8] = [{ type: 0, data: write_varint49(wide ? 1 : 0) }];
  return tri;
}
function write_iwam(type, payload) {
  return {
    meta: [
      [],
      [{ type: 0, data: write_varint49(type) }]
    ],
    data: payload
  };
}
function get_unique_msgid(dep, dependents) {
  if (!dependents.last)
    dependents.last = 927262;
  for (var i = dependents.last; i < 2e6; ++i)
    if (!dependents[i]) {
      dependents[dependents.last = i] = dep;
      return i;
    }
  throw new Error("Too many messages");
}
function build_numbers_deps(cfb) {
  var dependents = {};
  var indices = [];
  cfb.FileIndex.map(function(fi, idx) {
    return [fi, cfb.FullPaths[idx]];
  }).forEach(function(row) {
    var fi = row[0], fp = row[1];
    if (fi.type != 2)
      return;
    if (!fi.name.match(/\.iwa/))
      return;
    if (fi.content[0] != 0)
      return;
    parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {
      indices.push(packet.id);
      dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };
    });
  });
  cfb.FileIndex.forEach(function(fi) {
    if (!fi.name.match(/\.iwa/))
      return;
    if (fi.content[0] != 0)
      return;
    parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {
      ia.messages.forEach(function(mess) {
        [5, 6].forEach(function(f) {
          if (!mess.meta[f])
            return;
          mess.meta[f].forEach(function(x) {
            dependents[ia.id].deps.push(varint_to_i32(x.data));
          });
        });
      });
    });
  });
  return dependents;
}
function write_TSP_Color_RGB(r, g, b) {
  return write_shallow([
    [],
    [{ type: 0, data: write_varint49(1) }],
    [],
    [{ type: 5, data: new Uint8Array(Float32Array.from([r / 255]).buffer) }],
    [{ type: 5, data: new Uint8Array(Float32Array.from([g / 255]).buffer) }],
    [{ type: 5, data: new Uint8Array(Float32Array.from([b / 255]).buffer) }],
    [{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer) }],
    [],
    [],
    [],
    [],
    [],
    [{ type: 0, data: write_varint49(1) }]
  ]);
}
function get_author_color(n) {
  switch (n) {
    case 0:
      return write_TSP_Color_RGB(99, 222, 171);
    case 1:
      return write_TSP_Color_RGB(162, 197, 240);
    case 2:
      return write_TSP_Color_RGB(255, 189, 189);
  }
  return write_TSP_Color_RGB(Math.random() * 255, Math.random() * 255, Math.random() * 255);
}
function write_numbers_iwa(wb, opts) {
  if (!opts || !opts.numbers)
    throw new Error("Must pass a `numbers` option -- check the README");
  var cfb = CFB.read(opts.numbers, { type: "base64" });
  var deps = build_numbers_deps(cfb);
  var docroot = numbers_iwa_find(cfb, deps, 1);
  if (docroot == null)
    throw "Could not find message ".concat(1, " in Numbers template");
  var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);
  if (sheetrefs.length > 1)
    throw new Error("Template NUMBERS file must have exactly one sheet");
  wb.SheetNames.forEach(function(name, idx) {
    if (idx >= 1) {
      numbers_add_ws(cfb, deps, idx + 1);
      docroot = numbers_iwa_find(cfb, deps, 1);
      sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);
    }
    write_numbers_ws(cfb, deps, wb.Sheets[name], name, idx, sheetrefs[idx]);
  });
  return cfb;
}
function numbers_iwa_doit(cfb, deps, id, cb) {
  var entry = CFB.find(cfb, deps[id].location);
  if (!entry)
    throw "Could not find ".concat(deps[id].location, " in Numbers template");
  var x = parse_iwa_file(decompress_iwa_file(entry.content));
  var ainfo = x.find(function(packet) {
    return packet.id == id;
  });
  cb(ainfo, x);
  entry.content = compress_iwa_file(write_iwa_file(x));
  entry.size = entry.content.length;
}
function numbers_iwa_find(cfb, deps, id) {
  var entry = CFB.find(cfb, deps[id].location);
  if (!entry)
    throw "Could not find ".concat(deps[id].location, " in Numbers template");
  var x = parse_iwa_file(decompress_iwa_file(entry.content));
  var ainfo = x.find(function(packet) {
    return packet.id == id;
  });
  return ainfo;
}
function numbers_add_meta(mlist, newid, newloc) {
  mlist[3].push({ type: 2, data: write_shallow([
    [],
    [{ type: 0, data: write_varint49(newid) }],
    [{ type: 2, data: stru8(newloc.replace(/-[\s\S]*$/, "")) }],
    [{ type: 2, data: stru8(newloc) }],
    [{ type: 2, data: new Uint8Array([2, 0, 0]) }],
    [{ type: 2, data: new Uint8Array([2, 0, 0]) }],
    [],
    [],
    [],
    [],
    [{ type: 0, data: write_varint49(0) }],
    [],
    [{ type: 0, data: write_varint49(0) }]
  ]) });
  mlist[1] = [{ type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data))) }];
}
function numbers_add_msg(cfb, type, msg, path, deps, id) {
  if (!id)
    id = get_unique_msgid({ deps: [], location: "", type: type }, deps);
  var loc = "".concat(path, "-").concat(id, ".iwa");
  deps[id].location = "Root Entry" + loc;
  CFB.utils.cfb_add(cfb, loc, compress_iwa_file(write_iwa_file([{
    id: id,
    messages: [write_iwam(type, write_shallow(msg))]
  }])));
  var newloc = loc.replace(/^[\/]/, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
  numbers_iwa_doit(cfb, deps, 2, function(ai) {
    var mlist = parse_shallow(ai.messages[0].data);
    numbers_add_meta(mlist, id || 0, newloc);
    ai.messages[0].data = write_shallow(mlist);
  });
  return id;
}
function numbers_meta_add_dep(mlist, deps, id, dep) {
  var loc = deps[id].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
  var parentidx = mlist[3].findIndex(function(m) {
    var _a, _b;
    var mm = parse_shallow(m.data);
    if ((_a = mm[3]) == null ? void 0 : _a[0])
      return u8str(mm[3][0].data) == loc;
    if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
      return true;
    return false;
  });
  var parent = parse_shallow(mlist[3][parentidx].data);
  if (!parent[6])
    parent[6] = [];
  (Array.isArray(dep) ? dep : [dep]).forEach(function(dep2) {
    parent[6].push({
      type: 2,
      data: write_shallow([
        [],
        [{ type: 0, data: write_varint49(dep2) }]
      ])
    });
  });
  mlist[3][parentidx].data = write_shallow(parent);
}
function numbers_meta_del_dep(mlist, deps, id, dep) {
  var loc = deps[id].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
  var parentidx = mlist[3].findIndex(function(m) {
    var _a, _b;
    var mm = parse_shallow(m.data);
    if ((_a = mm[3]) == null ? void 0 : _a[0])
      return u8str(mm[3][0].data) == loc;
    if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
      return true;
    return false;
  });
  var parent = parse_shallow(mlist[3][parentidx].data);
  if (!parent[6])
    parent[6] = [];
  parent[6] = parent[6].filter(function(m) {
    return varint_to_i32(parse_shallow(m.data)[1][0].data) != dep;
  });
  mlist[3][parentidx].data = write_shallow(parent);
}
function numbers_add_ws(cfb, deps, wsidx) {
  var sheetref = -1, newsheetref = -1;
  var remap = {};
  numbers_iwa_doit(cfb, deps, 1, function(docroot, arch) {
    var doc = parse_shallow(docroot.messages[0].data);
    sheetref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);
    newsheetref = get_unique_msgid({ deps: [1], location: deps[sheetref].location, type: 2 }, deps);
    remap[sheetref] = newsheetref;
    numbers_add_oref(docroot, newsheetref);
    doc[1].push({ type: 2, data: write_TSP_Reference(newsheetref) });
    var sheet = numbers_iwa_find(cfb, deps, sheetref);
    sheet.id = newsheetref;
    if (deps[1].location == deps[newsheetref].location)
      arch.push(sheet);
    else
      numbers_iwa_doit(cfb, deps, newsheetref, function(_, x) {
        return x.push(sheet);
      });
    docroot.messages[0].data = write_shallow(doc);
  });
  var tiaref = -1;
  numbers_iwa_doit(cfb, deps, newsheetref, function(sheetroot, arch) {
    var sa = parse_shallow(sheetroot.messages[0].data);
    for (var i = 3; i <= 69; ++i)
      delete sa[i];
    var drawables = mappa(sa[2], parse_TSP_Reference);
    drawables.forEach(function(n) {
      return numbers_del_oref(sheetroot, n);
    });
    tiaref = get_unique_msgid({ deps: [newsheetref], location: deps[drawables[0]].location, type: deps[drawables[0]].type }, deps);
    numbers_add_oref(sheetroot, tiaref);
    remap[drawables[0]] = tiaref;
    sa[2] = [{ type: 2, data: write_TSP_Reference(tiaref) }];
    var tia = numbers_iwa_find(cfb, deps, drawables[0]);
    tia.id = tiaref;
    if (deps[drawables[0]].location == deps[newsheetref].location)
      arch.push(tia);
    else {
      numbers_iwa_doit(cfb, deps, 2, function(ai) {
        var mlist = parse_shallow(ai.messages[0].data);
        numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);
        ai.messages[0].data = write_shallow(mlist);
      });
      numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {
        return x.push(tia);
      });
    }
    sheetroot.messages[0].data = write_shallow(sa);
  });
  var tmaref = -1;
  numbers_iwa_doit(cfb, deps, tiaref, function(tiaroot, arch) {
    var tia = parse_shallow(tiaroot.messages[0].data);
    var da = parse_shallow(tia[1][0].data);
    for (var i = 3; i <= 69; ++i)
      delete da[i];
    var dap = parse_TSP_Reference(da[2][0].data);
    da[2][0].data = write_TSP_Reference(remap[dap]);
    tia[1][0].data = write_shallow(da);
    var oldtmaref = parse_TSP_Reference(tia[2][0].data);
    numbers_del_oref(tiaroot, oldtmaref);
    tmaref = get_unique_msgid({ deps: [tiaref], location: deps[oldtmaref].location, type: deps[oldtmaref].type }, deps);
    numbers_add_oref(tiaroot, tmaref);
    remap[oldtmaref] = tmaref;
    tia[2][0].data = write_TSP_Reference(tmaref);
    var tma = numbers_iwa_find(cfb, deps, oldtmaref);
    tma.id = tmaref;
    if (deps[tiaref].location == deps[tmaref].location)
      arch.push(tma);
    else
      numbers_iwa_doit(cfb, deps, tmaref, function(_, x) {
        return x.push(tma);
      });
    tiaroot.messages[0].data = write_shallow(tia);
  });
  numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {
    var _a, _b;
    var tma = parse_shallow(tmaroot.messages[0].data);
    var uuid = u8str(tma[1][0].data), new_uuid = uuid.replace(/-[A-Z0-9]*/, "-".concat(("0000" + wsidx.toString(16)).slice(-4)));
    tma[1][0].data = stru8(new_uuid);
    [12, 13, 29, 31, 32, 33, 39, 44, 47, 81, 82, 84].forEach(function(n) {
      return delete tma[n];
    });
    if (tma[45]) {
      var srrta = parse_shallow(tma[45][0].data);
      var ref = parse_TSP_Reference(srrta[1][0].data);
      numbers_del_oref(tmaroot, ref);
      delete tma[45];
    }
    if (tma[70]) {
      var hsoa = parse_shallow(tma[70][0].data);
      (_a = hsoa[2]) == null ? void 0 : _a.forEach(function(item) {
        var hsa = parse_shallow(item.data);
        [2, 3].map(function(n) {
          return hsa[n][0];
        }).forEach(function(hseadata) {
          var hsea = parse_shallow(hseadata.data);
          if (!hsea[8])
            return;
          var ref2 = parse_TSP_Reference(hsea[8][0].data);
          numbers_del_oref(tmaroot, ref2);
        });
      });
      delete tma[70];
    }
    [
      46,
      30,
      34,
      35,
      36,
      38,
      48,
      49,
      60,
      61,
      62,
      63,
      64,
      71,
      72,
      73,
      74,
      75,
      85,
      86,
      87,
      88,
      89
    ].forEach(function(n) {
      if (!tma[n])
        return;
      var ref2 = parse_TSP_Reference(tma[n][0].data);
      delete tma[n];
      numbers_del_oref(tmaroot, ref2);
    });
    var store = parse_shallow(tma[4][0].data);
    {
      [2, 4, 5, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22].forEach(function(n) {
        var _a2;
        if (!((_a2 = store[n]) == null ? void 0 : _a2[0]))
          return;
        var oldref = parse_TSP_Reference(store[n][0].data);
        var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);
        numbers_del_oref(tmaroot, oldref);
        numbers_add_oref(tmaroot, newref);
        remap[oldref] = newref;
        var msg = numbers_iwa_find(cfb, deps, oldref);
        msg.id = newref;
        if (deps[oldref].location == deps[tmaref].location)
          arch.push(msg);
        else {
          deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());
          if (deps[newref].location == deps[oldref].location)
            deps[newref].location = deps[newref].location.replace(/\.iwa/, "-".concat(newref, ".iwa"));
          CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));
          var newloc = deps[newref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
          numbers_iwa_doit(cfb, deps, 2, function(ai) {
            var mlist = parse_shallow(ai.messages[0].data);
            numbers_add_meta(mlist, newref, newloc);
            numbers_meta_add_dep(mlist, deps, tmaref, newref);
            ai.messages[0].data = write_shallow(mlist);
          });
        }
        store[n][0].data = write_TSP_Reference(newref);
      });
      var row_headers = parse_shallow(store[1][0].data);
      {
        (_b = row_headers[2]) == null ? void 0 : _b.forEach(function(tspref) {
          var oldref = parse_TSP_Reference(tspref.data);
          var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);
          numbers_del_oref(tmaroot, oldref);
          numbers_add_oref(tmaroot, newref);
          remap[oldref] = newref;
          var msg = numbers_iwa_find(cfb, deps, oldref);
          msg.id = newref;
          if (deps[oldref].location == deps[tmaref].location) {
            arch.push(msg);
          } else {
            deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());
            if (deps[newref].location == deps[oldref].location)
              deps[newref].location = deps[newref].location.replace(/\.iwa/, "-".concat(newref, ".iwa"));
            CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));
            var newloc = deps[newref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
            numbers_iwa_doit(cfb, deps, 2, function(ai) {
              var mlist = parse_shallow(ai.messages[0].data);
              numbers_add_meta(mlist, newref, newloc);
              numbers_meta_add_dep(mlist, deps, tmaref, newref);
              ai.messages[0].data = write_shallow(mlist);
            });
          }
          tspref.data = write_TSP_Reference(newref);
        });
      }
      store[1][0].data = write_shallow(row_headers);
      var tiles = parse_shallow(store[3][0].data);
      {
        tiles[1].forEach(function(t) {
          var tst = parse_shallow(t.data);
          var oldtileref = parse_TSP_Reference(tst[2][0].data);
          var newtileref = remap[oldtileref];
          if (!remap[oldtileref]) {
            newtileref = get_unique_msgid({ deps: [tmaref], location: "", type: deps[oldtileref].type }, deps);
            deps[newtileref].location = "Root Entry/Index/Tables/Tile-".concat(newtileref, ".iwa");
            remap[oldtileref] = newtileref;
            var oldtile = numbers_iwa_find(cfb, deps, oldtileref);
            oldtile.id = newtileref;
            numbers_del_oref(tmaroot, oldtileref);
            numbers_add_oref(tmaroot, newtileref);
            CFB.utils.cfb_add(cfb, "/Index/Tables/Tile-".concat(newtileref, ".iwa"), compress_iwa_file(write_iwa_file([oldtile])));
            numbers_iwa_doit(cfb, deps, 2, function(ai) {
              var mlist = parse_shallow(ai.messages[0].data);
              mlist[3].push({ type: 2, data: write_shallow([
                [],
                [{ type: 0, data: write_varint49(newtileref) }],
                [{ type: 2, data: stru8("Tables/Tile") }],
                [{ type: 2, data: stru8("Tables/Tile-".concat(newtileref)) }],
                [{ type: 2, data: new Uint8Array([2, 0, 0]) }],
                [{ type: 2, data: new Uint8Array([2, 0, 0]) }],
                [],
                [],
                [],
                [],
                [{ type: 0, data: write_varint49(0) }],
                [],
                [{ type: 0, data: write_varint49(0) }]
              ]) });
              mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];
              numbers_meta_add_dep(mlist, deps, tmaref, newtileref);
              ai.messages[0].data = write_shallow(mlist);
            });
          }
          tst[2][0].data = write_TSP_Reference(newtileref);
          t.data = write_shallow(tst);
        });
      }
      store[3][0].data = write_shallow(tiles);
    }
    tma[4][0].data = write_shallow(store);
    tmaroot.messages[0].data = write_shallow(tma);
  });
}
function write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {
  var drawables = [];
  numbers_iwa_doit(cfb, deps, rootref, function(docroot) {
    var sheetref = parse_shallow(docroot.messages[0].data);
    {
      sheetref[1] = [{ type: 2, data: stru8(wsname) }];
      drawables = mappa(sheetref[2], parse_TSP_Reference);
    }
    docroot.messages[0].data = write_shallow(sheetref);
  });
  var tia = numbers_iwa_find(cfb, deps, drawables[0]);
  var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);
  numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {
    return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);
  });
}
var USE_WIDE_ROWS = true;
function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
  if (!ws["!ref"])
    throw new Error("Cannot export empty sheet to NUMBERS");
  var range = decode_range(ws["!ref"]);
  range.s.r = range.s.c = 0;
  var trunc = false;
  if (range.e.c > 999) {
    trunc = true;
    range.e.c = 999;
  }
  if (range.e.r > 999999) {
    trunc = true;
    range.e.r = 999999;
  }
  if (trunc)
    console.error("Truncating to ".concat(encode_range(range)));
  var data = [];
  if (ws["!data"])
    data = ws["!data"];
  else {
    var colstr = [];
    for (var _C = 0; _C <= range.e.c; ++_C)
      colstr[_C] = encode_col(_C);
    for (var R_ = 0; R_ <= range.e.r; ++R_) {
      data[R_] = [];
      var _R = "" + (R_ + 1);
      for (_C = 0; _C <= range.e.c; ++_C) {
        var _cell = ws[colstr[_C] + _R];
        if (!_cell)
          continue;
        data[R_][_C] = _cell;
      }
    }
  }
  var LUT = {
    cmnt: [{ a: "~54ee77S~", t: "... the people who are crazy enough to think they can change the world, are the ones who do." }],
    ferr: [],
    fmla: [],
    nfmt: [],
    ofmt: [],
    rsst: [{ v: "~54ee77S~", l: "https://sheetjs.com/" }],
    sst: ["~Sh33tJ5~"]
  };
  var pb = parse_shallow(tmaroot.messages[0].data);
  {
    pb[6][0].data = write_varint49(range.e.r + 1);
    pb[7][0].data = write_varint49(range.e.c + 1);
    delete pb[46];
    var store = parse_shallow(pb[4][0].data);
    {
      var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);
      numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {
        var _a;
        var base_bucket = parse_shallow(rowhead.messages[0].data);
        if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])
          for (var R2 = 0; R2 < data.length; ++R2) {
            var _bucket = parse_shallow(base_bucket[2][0].data);
            _bucket[1][0].data = write_varint49(R2);
            _bucket[4][0].data = write_varint49(data[R2].length);
            base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
          }
        rowhead.messages[0].data = write_shallow(base_bucket);
      });
      var col_header_ref = parse_TSP_Reference(store[2][0].data);
      numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {
        var base_bucket = parse_shallow(colhead.messages[0].data);
        for (var C = 0; C <= range.e.c; ++C) {
          var _bucket = parse_shallow(base_bucket[2][0].data);
          _bucket[1][0].data = write_varint49(C);
          _bucket[4][0].data = write_varint49(range.e.r + 1);
          base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
        }
        colhead.messages[0].data = write_shallow(base_bucket);
      });
      var rbtree = parse_shallow(store[9][0].data);
      rbtree[1] = [];
      var tilestore = parse_shallow(store[3][0].data);
      {
        var tstride = 256;
        tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];
        var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);
        var save_token = function() {
          var metadata = numbers_iwa_find(cfb, deps, 2);
          var mlist = parse_shallow(metadata.messages[0].data);
          var mlst = mlist[3].filter(function(m) {
            return varint_to_i32(parse_shallow(m.data)[1][0].data) == tileref;
          });
          return (mlst == null ? void 0 : mlst.length) ? varint_to_i32(parse_shallow(mlst[0].data)[12][0].data) : 0;
        }();
        {
          CFB.utils.cfb_del(cfb, deps[tileref].location);
          numbers_iwa_doit(cfb, deps, 2, function(ai) {
            var mlist = parse_shallow(ai.messages[0].data);
            mlist[3] = mlist[3].filter(function(m) {
              return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;
            });
            numbers_meta_del_dep(mlist, deps, tmaref, tileref);
            ai.messages[0].data = write_shallow(mlist);
          });
          numbers_del_oref(tmaroot, tileref);
        }
        tilestore[1] = [];
        var ntiles = Math.ceil((range.e.r + 1) / tstride);
        for (var tidx = 0; tidx < ntiles; ++tidx) {
          var newtileid = get_unique_msgid({
            deps: [],
            location: "",
            type: 6002
          }, deps);
          deps[newtileid].location = "Root Entry/Index/Tables/Tile-".concat(newtileid, ".iwa");
          var tiledata = [
            [],
            [{ type: 0, data: write_varint49(0) }],
            [{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],
            [{ type: 0, data: write_varint49(0) }],
            [{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],
            [],
            [{ type: 0, data: write_varint49(5) }],
            [{ type: 0, data: write_varint49(1) }],
            [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
          ];
          for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
            var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);
            tilerow[1][0].data = write_varint49(R - tidx * tstride);
            tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
          }
          tilestore[1].push({ type: 2, data: write_shallow([
            [],
            [{ type: 0, data: write_varint49(tidx) }],
            [{ type: 2, data: write_TSP_Reference(newtileid) }]
          ]) });
          var newtile = {
            id: newtileid,
            messages: [write_iwam(6002, write_shallow(tiledata))]
          };
          var tilecontent = compress_iwa_file(write_iwa_file([newtile]));
          CFB.utils.cfb_add(cfb, "/Index/Tables/Tile-".concat(newtileid, ".iwa"), tilecontent);
          numbers_iwa_doit(cfb, deps, 2, function(ai) {
            var mlist = parse_shallow(ai.messages[0].data);
            mlist[3].push({ type: 2, data: write_shallow([
              [],
              [{ type: 0, data: write_varint49(newtileid) }],
              [{ type: 2, data: stru8("Tables/Tile") }],
              [{ type: 2, data: stru8("Tables/Tile-".concat(newtileid)) }],
              [{ type: 2, data: new Uint8Array([2, 0, 0]) }],
              [{ type: 2, data: new Uint8Array([2, 0, 0]) }],
              [],
              [],
              [],
              [],
              [{ type: 0, data: write_varint49(0) }],
              [],
              [{ type: 0, data: write_varint49(save_token) }]
            ]) });
            mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];
            numbers_meta_add_dep(mlist, deps, tmaref, newtileid);
            ai.messages[0].data = write_shallow(mlist);
          });
          numbers_add_oref(tmaroot, newtileid);
          rbtree[1].push({ type: 2, data: write_shallow([
            [],
            [{ type: 0, data: write_varint49(tidx * tstride) }],
            [{ type: 0, data: write_varint49(tidx) }]
          ]) });
        }
      }
      store[3][0].data = write_shallow(tilestore);
      store[9][0].data = write_shallow(rbtree);
      store[10] = [{ type: 2, data: new Uint8Array([]) }];
      if (ws["!merges"]) {
        var mergeid = get_unique_msgid({
          type: 6144,
          deps: [tmaref],
          location: deps[tmaref].location
        }, deps);
        tmafile.push({
          id: mergeid,
          messages: [write_iwam(6144, write_shallow([
            [],
            ws["!merges"].map(function(m) {
              return { type: 2, data: write_shallow([
                [],
                [{ type: 2, data: write_shallow([
                  [],
                  [{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
                ]) }],
                [{ type: 2, data: write_shallow([
                  [],
                  [{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
                ]) }]
              ]) };
            })
          ]))]
        });
        store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
        numbers_iwa_doit(cfb, deps, 2, function(ai) {
          var mlist = parse_shallow(ai.messages[0].data);
          numbers_meta_add_dep(mlist, deps, tmaref, mergeid);
          ai.messages[0].data = write_shallow(mlist);
        });
        numbers_add_oref(tmaroot, mergeid);
      } else
        delete store[13];
      var sstref = parse_TSP_Reference(store[4][0].data);
      numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {
        var sstdata = parse_shallow(sstroot.messages[0].data);
        {
          sstdata[3] = [];
          LUT.sst.forEach(function(str, i) {
            if (i == 0)
              return;
            sstdata[3].push({ type: 2, data: write_shallow([
              [],
              [{ type: 0, data: write_varint49(i) }],
              [{ type: 0, data: write_varint49(1) }],
              [{ type: 2, data: stru8(str) }]
            ]) });
          });
        }
        sstroot.messages[0].data = write_shallow(sstdata);
      });
      var rsstref = parse_TSP_Reference(store[17][0].data);
      numbers_iwa_doit(cfb, deps, rsstref, function(rsstroot) {
        var rsstdata = parse_shallow(rsstroot.messages[0].data);
        rsstdata[3] = [];
        var style_indices = [
          904980,
          903835,
          903815,
          903845
        ];
        LUT.rsst.forEach(function(rsst, i) {
          if (i == 0)
            return;
          var tswpsa = [
            [],
            [{ type: 0, data: new Uint8Array([5]) }],
            [],
            [{ type: 2, data: stru8(rsst.v) }]
          ];
          tswpsa[10] = [{ type: 0, data: new Uint8Array([1]) }];
          tswpsa[19] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 18, 2, 101, 110]) }];
          tswpsa[5] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 155, 149, 55]) }];
          tswpsa[2] = [{ type: 2, data: new Uint8Array([8, 148, 158, 55]) }];
          tswpsa[6] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];
          tswpsa[7] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 135, 149, 55]) }];
          tswpsa[8] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 165, 149, 55]) }];
          tswpsa[14] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];
          tswpsa[24] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];
          var tswpsaid = get_unique_msgid({ deps: [], location: "", type: 2001 }, deps);
          var tswpsarefs = [];
          if (rsst.l) {
            var newhlinkid = numbers_add_msg(cfb, 2032, [
              [],
              [],
              [{ type: 2, data: stru8(rsst.l) }]
            ], "/Index/Tables/DataList", deps);
            tswpsa[11] = [];
            var smartfield = [[], []];
            if (!smartfield[1])
              smartfield[1] = [];
            smartfield[1].push({ type: 2, data: write_shallow([
              [],
              [{ type: 0, data: write_varint49(0) }],
              [{ type: 2, data: write_TSP_Reference(newhlinkid) }]
            ]) });
            tswpsa[11][0] = { type: 2, data: write_shallow(smartfield) };
            tswpsarefs.push(newhlinkid);
          }
          numbers_add_msg(cfb, 2001, tswpsa, "/Index/Tables/DataList", deps, tswpsaid);
          numbers_iwa_doit(cfb, deps, tswpsaid, function(iwa) {
            style_indices.forEach(function(ref) {
              return numbers_add_oref(iwa, ref);
            });
            tswpsarefs.forEach(function(ref) {
              return numbers_add_oref(iwa, ref);
            });
          });
          var rtpaid = numbers_add_msg(cfb, 6218, [
            [],
            [{ type: 2, data: write_TSP_Reference(tswpsaid) }],
            [],
            [{ type: 2, data: new Uint8Array([13, 255, 255, 255, 0, 18, 10, 16, 255, 255, 1, 24, 255, 255, 255, 255, 7]) }]
          ], "/Index/Tables/DataList", deps);
          numbers_iwa_doit(cfb, deps, rtpaid, function(iwa) {
            return numbers_add_oref(iwa, tswpsaid);
          });
          rsstdata[3].push({ type: 2, data: write_shallow([
            [],
            [{ type: 0, data: write_varint49(i) }],
            [{ type: 0, data: write_varint49(1) }],
            [],
            [],
            [],
            [],
            [],
            [],
            [{ type: 2, data: write_TSP_Reference(rtpaid) }]
          ]) });
          numbers_add_oref(rsstroot, rtpaid);
          numbers_iwa_doit(cfb, deps, 2, function(ai) {
            var mlist = parse_shallow(ai.messages[0].data);
            numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);
            numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);
            numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);
            numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);
            ai.messages[0].data = write_shallow(mlist);
          });
        });
        rsstroot.messages[0].data = write_shallow(rsstdata);
      });
      if (LUT.cmnt.length > 1) {
        var cmntref = parse_TSP_Reference(store[19][0].data);
        var authors = {}, iauthor = 0;
        numbers_iwa_doit(cfb, deps, cmntref, function(cmntroot) {
          var cmntdata = parse_shallow(cmntroot.messages[0].data);
          {
            cmntdata[3] = [];
            LUT.cmnt.forEach(function(cc, i) {
              if (i == 0)
                return;
              var replies = [];
              if (cc.replies)
                cc.replies.forEach(function(c) {
                  if (!authors[c.a || ""])
                    authors[c.a || ""] = numbers_add_msg(cfb, 212, [
                      [],
                      [{ type: 2, data: stru8(c.a || "") }],
                      [{ type: 2, data: get_author_color(++iauthor) }],
                      [],
                      [{ type: 0, data: write_varint49(0) }]
                    ], "/Index/Tables/DataList", deps);
                  var aaaid2 = authors[c.a || ""];
                  var csaid2 = numbers_add_msg(cfb, 3056, [
                    [],
                    [{ type: 2, data: stru8(c.t || "") }],
                    [{ type: 2, data: write_shallow([
                      [],
                      [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
                    ]) }],
                    [{ type: 2, data: write_TSP_Reference(aaaid2) }]
                  ], "/Index/Tables/DataList", deps);
                  numbers_iwa_doit(cfb, deps, csaid2, function(iwa) {
                    return numbers_add_oref(iwa, aaaid2);
                  });
                  replies.push(csaid2);
                  numbers_iwa_doit(cfb, deps, 2, function(ai) {
                    var mlist = parse_shallow(ai.messages[0].data);
                    numbers_meta_add_dep(mlist, deps, csaid2, aaaid2);
                    ai.messages[0].data = write_shallow(mlist);
                  });
                });
              if (!authors[cc.a || ""])
                authors[cc.a || ""] = numbers_add_msg(cfb, 212, [
                  [],
                  [{ type: 2, data: stru8(cc.a || "") }],
                  [{ type: 2, data: get_author_color(++iauthor) }],
                  [],
                  [{ type: 0, data: write_varint49(0) }]
                ], "/Index/Tables/DataList", deps);
              var aaaid = authors[cc.a || ""];
              var csaid = numbers_add_msg(cfb, 3056, [
                [],
                [{ type: 2, data: stru8(cc.t || "") }],
                [{ type: 2, data: write_shallow([
                  [],
                  [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
                ]) }],
                [{ type: 2, data: write_TSP_Reference(aaaid) }],
                replies.map(function(r) {
                  return { type: 2, data: write_TSP_Reference(r) };
                }),
                [{ type: 2, data: write_shallow([
                  [],
                  [{ type: 0, data: write_varint49(i) }],
                  [{ type: 0, data: write_varint49(0) }]
                ]) }]
              ], "/Index/Tables/DataList", deps);
              numbers_iwa_doit(cfb, deps, csaid, function(iwa) {
                numbers_add_oref(iwa, aaaid);
                replies.forEach(function(r) {
                  return numbers_add_oref(iwa, r);
                });
              });
              cmntdata[3].push({ type: 2, data: write_shallow([
                [],
                [{ type: 0, data: write_varint49(i) }],
                [{ type: 0, data: write_varint49(1) }],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [{ type: 2, data: write_TSP_Reference(csaid) }]
              ]) });
              numbers_add_oref(cmntroot, csaid);
              numbers_iwa_doit(cfb, deps, 2, function(ai) {
                var mlist = parse_shallow(ai.messages[0].data);
                numbers_meta_add_dep(mlist, deps, cmntref, csaid);
                numbers_meta_add_dep(mlist, deps, csaid, aaaid);
                if (replies.length)
                  numbers_meta_add_dep(mlist, deps, csaid, replies);
                ai.messages[0].data = write_shallow(mlist);
              });
            });
          }
          cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);
          cmntroot.messages[0].data = write_shallow(cmntdata);
        });
      }
    }
    pb[4][0].data = write_shallow(store);
  }
  tmaroot.messages[0].data = write_shallow(pb);
}
function fix_opts_func(defaults/*:Array<Array<any> >*/)/*:{(o:any):void}*/ {
	return function fix_opts(opts) {
		for(var i = 0; i != defaults.length; ++i) {
			var d = defaults[i];
			if(opts[d[0]] === undefined) opts[d[0]] = d[1];
			if(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);
		}
	};
}

function fix_read_opts(opts) {
fix_opts_func([
	['cellNF', false], /* emit cell number format string as .z */
	['cellHTML', true], /* emit html string as .h */
	['cellFormula', true], /* emit formulae as .f */
	['cellStyles', false], /* emits style/theme as .s */
	['cellText', true], /* emit formatted text as .w */
	['cellDates', false], /* emit date cells with type `d` */

	['sheetStubs', false], /* emit empty cells */
	['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */

	['bookDeps', false], /* parse calculation chains */
	['bookSheets', false], /* only try to get sheet names (no Sheets) */
	['bookProps', false], /* only try to get properties (no Sheets) */
	['bookFiles', false], /* include raw file structure (keys, files, cfb) */
	['bookVBA', false], /* include vba raw data (vbaraw) */

	['password',''], /* password */
	['WTF', false] /* WTF mode (throws errors) */
])(opts);
}

function fix_write_opts(opts) {
fix_opts_func([
	['cellDates', false], /* write date cells with type `d` */

	['bookSST', false], /* Generate Shared String Table */

	['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */

	['compression', false], /* Use file compression */

	['WTF', false] /* WTF mode (throws errors) */
])(opts);
}
function get_sheet_type(n/*:string*/)/*:string*/ {
	if(RELS.WS.indexOf(n) > -1) return "sheet";
	if(RELS.CS && n == RELS.CS) return "chart";
	if(RELS.DS && n == RELS.DS) return "dialog";
	if(RELS.MS && n == RELS.MS) return "macro";
	return (n && n.length) ? n : "sheet";
}
function safe_parse_wbrels(wbrels, sheets) {
	if(!wbrels) return 0;
	try {
		wbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });
	} catch(e) { return null; }
	return !wbrels || wbrels.length === 0 ? null : wbrels;
}

function parse_sheet_legacy_drawing(sheet, type, zip, path, idx, opts, wb, comments) {
	if(!sheet || !sheet['!legdrawel']) return;
	var dfile = resolve_path(sheet['!legdrawel'].Target, path);
	var draw = getzipstr(zip, dfile, true);
	if(draw) parse_vml(utf8read(draw), sheet, comments||[]);
}

function safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {
	try {
		sheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);
		var data = getzipdata(zip, path);
		var _ws;
		switch(stype) {
			case 'sheet':  _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;
			case 'chart':  _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);
				if(!_ws || !_ws['!drawel']) break;
				var dfile = resolve_path(_ws['!drawel'].Target, path);
				var drelsp = get_rels_path(dfile);
				var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));
				var chartp = resolve_path(draw, dfile);
				var crelsp = get_rels_path(chartp);
				_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);
				break;
			case 'macro':  _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;
			case 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;
			default: throw new Error("Unrecognized sheet type " + stype);
		}
		sheets[sheet] = _ws;

		/* scan rels for comments and threaded comments */
		var comments = [], tcomments = [];
		if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
			var dfile = "";
			if(sheetRels[sheet][n].Type == RELS.CMNT) {
				dfile = resolve_path(sheetRels[sheet][n].Target, path);
				comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
				if(!comments || !comments.length) return;
				sheet_insert_comments(_ws, comments, false);
			}
			if(sheetRels[sheet][n].Type == RELS.TCMNT) {
				dfile = resolve_path(sheetRels[sheet][n].Target, path);
				tcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));
			}
		});
		if(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);
		parse_sheet_legacy_drawing(_ws, stype, zip, path, idx, opts, wb, comments);
	} catch(e) { if(opts.WTF) throw e; }
}

function strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }

function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	make_ssf();
	opts = opts || {};
	fix_read_opts(opts);

	/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */
	if(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);
	/* UOC */
	if(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);
	/* Numbers */
	if(safegetzipfile(zip, 'Index/Document.iwa')) {
		if(typeof Uint8Array == "undefined") throw new Error('NUMBERS file parsing requires Uint8Array support');
		if(typeof parse_numbers_iwa != "undefined") {
			if(zip.FileIndex) return parse_numbers_iwa(zip, opts);
			var _zip = CFB.utils.cfb_new();
			zipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });
			return parse_numbers_iwa(_zip, opts);
		}
		throw new Error('Unsupported NUMBERS file');
	}
	if(!safegetzipfile(zip, '[Content_Types].xml')) {
		if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');
		if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');
		var index_zip = CFB.find(zip, 'Index.zip');
		if(index_zip) {
			opts = dup(opts);
			delete opts.type;
			if(typeof index_zip.content == "string") opts.type = "binary";
			// TODO: Bun buffer bug
			if(typeof Bun !== "undefined" && Buffer.isBuffer(index_zip.content)) return readSync(new Uint8Array(index_zip.content), opts);
			return readSync(index_zip.content, opts);
		}
		throw new Error('Unsupported ZIP file');
	}

	var entries = zipentries(zip);
	var dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));
	var xlsb = false;
	var sheets, binname;
	if(dir.workbooks.length === 0) {
		binname = "xl/workbook.xml";
		if(getzipdata(zip,binname, true)) dir.workbooks.push(binname);
	}
	if(dir.workbooks.length === 0) {
		binname = "xl/workbook.bin";
		if(!getzipdata(zip,binname,true)) throw new Error("Could not find workbook");
		dir.workbooks.push(binname);
		xlsb = true;
	}
	if(dir.workbooks[0].slice(-3) == "bin") xlsb = true;

	var themes = ({}/*:any*/);
	var styles = ({}/*:any*/);
	if(!opts.bookSheets && !opts.bookProps) {
		strs = [];
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }

		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);

		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
	}

	/*var externbooks = */dir.links.map(function(link) {
		try {
			var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);
			return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);
		} catch(e) {}
	});

	var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);

	var props = {}, propdata = "";

	if(dir.coreprops.length) {
		propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);
		if(propdata) props = parse_core_props(propdata);
		if(dir.extprops.length !== 0) {
			propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);
			if(propdata) parse_ext_props(propdata, props, opts);
		}
	}

	var custprops = {};
	if(!opts.bookSheets || opts.bookProps) {
		if (dir.custprops.length !== 0) {
			propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);
			if(propdata) custprops = parse_cust_props(propdata, opts);
		}
	}

	var out = ({}/*:any*/);
	if(opts.bookSheets || opts.bookProps) {
		if(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });
		else if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;
		if(opts.bookProps) { out.Props = props; out.Custprops = custprops; }
		if(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;
		if(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;
	}
	sheets = {};

	var deps = {};
	if(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);

	var i=0;
	var sheetRels = ({}/*:any*/);
	var path, relsPath;

	{
		var wbsheets = wb.Sheets;
		props.Worksheets = wbsheets.length;
		props.SheetNames = [];
		for(var j = 0; j != wbsheets.length; ++j) {
			props.SheetNames[j] = wbsheets[j].name;
		}
	}

	var wbext = xlsb ? "bin" : "xml";
	var wbrelsi = dir.workbooks[0].lastIndexOf("/");
	var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + "_rels/" + dir.workbooks[0].slice(wbrelsi+1) + ".rels").replace(/^\//,"");
	if(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';
	var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, "s5s"));

	if((dir.metadata || []).length >= 1) {
		/* TODO: MDX and other types of metadata */
		opts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);
	}

	if((dir.people || []).length >= 1) {
		opts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);
	}

	if(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);

	/* Numbers iOS hack */
	var nmode = (getzipdata(zip,"xl/worksheets/sheet.xml",true))?1:0;
	wsloop: for(i = 0; i != props.Worksheets; ++i) {
		var stype = "sheet";
		if(wbrels && wbrels[i]) {
			path = 'xl/' + (wbrels[i][1]).replace(/[\/]?xl\//, "");
			if(!safegetzipfile(zip, path)) path = wbrels[i][1];
			if(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\/[\S\s]*$/,"") + wbrels[i][1];
			stype = wbrels[i][2];
		} else {
			path = 'xl/worksheets/sheet'+(i+1-nmode)+"." + wbext;
			path = path.replace(/sheet0\./,"sheet.");
		}
		relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels");
		if(opts && opts.sheets != null) switch(typeof opts.sheets) {
			case "number": if(i != opts.sheets) continue wsloop; break;
			case "string": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;
			default: if(Array.isArray && Array.isArray(opts.sheets)) {
				var snjseen = false;
				for(var snj = 0; snj != opts.sheets.length; ++snj) {
					if(typeof opts.sheets[snj] == "number" && opts.sheets[snj] == i) snjseen=1;
					if(typeof opts.sheets[snj] == "string" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;
				}
				if(!snjseen) continue wsloop;
			}
		}
		safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);
	}

	out = ({
		Directory: dir,
		Workbook: wb,
		Props: props,
		Custprops: custprops,
		Deps: deps,
		Sheets: sheets,
		SheetNames: props.SheetNames,
		Strings: strs,
		Styles: styles,
		Themes: themes,
		SSF: dup(table_fmt)
	}/*:any*/);
	if(opts && opts.bookFiles) {
		if(zip.files) {
			out.keys = entries;
			out.files = zip.files;
		} else {
			out.keys = [];
			out.files = {};
			zip.FullPaths.forEach(function(p, idx) {
				p = p.replace(/^Root Entry[\/]/, "");
				out.keys.push(p);
				out.files[p] = zip.FileIndex[idx];
			});
		}
	}
	if(opts && opts.bookVBA) {
		if(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);
		else if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);
	}
	// TODO: pass back content types metadata for xlsm/xlsx resolution
	out.bookType = xlsb ? "xlsb" : "xlsx";
	return out;
}

/* [MS-OFFCRYPTO] 2.1.1 */
function parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {
	var opts = _opts || {};
	var f = 'Workbook', data = CFB.find(cfb, f);
	try {
	f = '/!DataSpaces/Version';
	data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
	/*var version = */parse_DataSpaceVersionInfo(data.content);

	/* 2.3.4.1 */
	f = '/!DataSpaces/DataSpaceMap';
	data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
	var dsm = parse_DataSpaceMap(data.content);
	if(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== "StrongEncryptionDataSpace" || dsm[0].comps[0].v !== "EncryptedPackage")
		throw new Error("ECMA-376 Encrypted file bad " + f);

	/* 2.3.4.2 */
	f = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';
	data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
	var seds = parse_DataSpaceDefinition(data.content);
	if(seds.length != 1 || seds[0] != "StrongEncryptionTransform")
		throw new Error("ECMA-376 Encrypted file bad " + f);

	/* 2.3.4.3 */
	f = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';
	data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
	/*var hdr = */parse_Primary(data.content);
	} catch(e) {}

	f = '/EncryptionInfo';
	data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
	var einfo = parse_EncryptionInfo(data.content);

	/* 2.3.4.4 */
	f = '/EncryptedPackage';
	data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);

/*global decrypt_agile */
/*:: declare var decrypt_agile:any; */
	if(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || "", opts);
/*global decrypt_std76 */
/*:: declare var decrypt_std76:any; */
	if(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || "", opts);
	throw new Error("File is password-protected");
}

function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
	if(wb && !wb.SSF) {
		wb.SSF = dup(table_fmt);
	}
	if(wb && wb.SSF) {
		make_ssf(); SSF_load_table(wb.SSF);
		// $FlowIgnore
		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
		opts.ssf = wb.SSF;
	}
	opts.rels = {}; opts.wbrels = {};
	opts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;
	if(browser_has_Map) opts.revStrings = new Map();
	else { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }
	var wbext = "bin";
	var vbafmt = true;
	var ct = new_ct();
	fix_write_opts(opts = opts || {});
	var zip = zip_new();
	var f = "", rId = 0;

	opts.cellXfs = [];
	get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});

	if(!wb.Props) wb.Props = {};

	f = "docProps/core.xml";
	zip_add_file(zip, f, write_core_props(wb.Props, opts));
	ct.coreprops.push(f);
	add_rels(opts.rels, 2, f, RELS.CORE_PROPS);

	/*::if(!wb.Props) throw "unreachable"; */
	f = "docProps/app.xml";
	if(wb.Props && wb.Props.SheetNames){/* empty */}
	else if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;
	else {
		var _sn = [];
		for(var _i = 0; _i < wb.SheetNames.length; ++_i)
			if((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);
		wb.Props.SheetNames = _sn;
	}
	wb.Props.Worksheets = wb.Props.SheetNames.length;
	zip_add_file(zip, f, write_ext_props(wb.Props, opts));
	ct.extprops.push(f);
	add_rels(opts.rels, 3, f, RELS.EXT_PROPS);

	if(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {
		f = "docProps/custom.xml";
		zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));
		ct.custprops.push(f);
		add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
	}

	var people = ["SheetJ5"];
	opts.tcid = 0;

	for(rId=1;rId <= wb.SheetNames.length; ++rId) {
		var wsrels = {'!id':{}};
		var ws = wb.Sheets[wb.SheetNames[rId-1]];
		var _type = (ws || {})["!type"] || "sheet";
		switch(_type) {
		case "chart":
			/* falls through */
		default:
			f = "xl/worksheets/sheet" + rId + "." + wbext;
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
			ct.sheets.push(f);
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
		}

		if(ws) {
			var comments = ws['!comments'];
			var need_vml = false;
			var cf = "";
			if(comments && comments.length > 0) {
				var needtc = false;
				comments.forEach(function(carr) {
					carr[1].forEach(function(c) { if(c.T == true) needtc = true; });
				});
				if(needtc) {
					cf = "xl/threadedComments/threadedComment" + rId + ".xml";
					zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));
					ct.threadedcomments.push(cf);
					add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + ".xml", RELS.TCMNT);
				}

				cf = "xl/comments" + rId + "." + wbext;
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
				ct.comments.push(cf);
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
				need_vml = true;
			}
			if(ws['!legacy']) {
				if(need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + (rId) + ".vml", write_vml(rId, ws['!comments']));
			}
			delete ws['!comments'];
			delete ws['!legacy'];
		}

		if(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));
	}

	if(opts.Strings != null && opts.Strings.length > 0) {
		f = "xl/sharedStrings." + wbext;
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
		ct.strs.push(f);
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
	}

	f = "xl/workbook." + wbext;
	zip_add_file(zip, f, write_wb_bin(wb, opts));
	ct.workbooks.push(f);
	add_rels(opts.rels, 1, f, RELS.WB);

	/* TODO: something more intelligent with themes */

	f = "xl/theme/theme1.xml";
	var ww = write_theme(wb.Themes, opts);
	zip_add_file(zip, f, ww);
	ct.themes.push(f);
	add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);

	/* TODO: something more intelligent with styles */

	f = "xl/styles." + wbext;
	zip_add_file(zip, f, write_sty_bin(wb, opts));
	ct.styles.push(f);
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);

	if(wb.vbaraw && vbafmt) {
		f = "xl/vbaProject.bin";
		zip_add_file(zip, f, wb.vbaraw);
		ct.vba.push(f);
		add_rels(opts.wbrels, -1, "vbaProject.bin", RELS.VBA);
	}

	f = "xl/metadata." + wbext;
	zip_add_file(zip, f, write_xlmeta_bin());
	ct.metadata.push(f);
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);

	if(people.length > 1) {
		f = "xl/persons/person.xml";
		zip_add_file(zip, f, write_people_xml(people, opts));
		ct.people.push(f);
		add_rels(opts.wbrels, -1, "persons/person.xml", RELS.PEOPLE);
	}

	zip_add_file(zip, "[Content_Types].xml", write_ct(ct, opts));
	zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));
	zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));

	delete opts.revssf; delete opts.ssf;
	return zip;
}

function write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
	if(wb && !wb.SSF) {
		wb.SSF = dup(table_fmt);
	}
	if(wb && wb.SSF) {
		make_ssf(); SSF_load_table(wb.SSF);
		// $FlowIgnore
		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
		opts.ssf = wb.SSF;
	}
	opts.rels = {}; opts.wbrels = {};
	opts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;
	if(browser_has_Map) opts.revStrings = new Map();
	else { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }
	var wbext = "xml";
	var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;
	var ct = new_ct();
	fix_write_opts(opts = opts || {});
	var zip = zip_new();
	var f = "", rId = 0;

	opts.cellXfs = [];
	get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});

	if(!wb.Props) wb.Props = {};

	f = "docProps/core.xml";
	zip_add_file(zip, f, write_core_props(wb.Props, opts));
	ct.coreprops.push(f);
	add_rels(opts.rels, 2, f, RELS.CORE_PROPS);

	/*::if(!wb.Props) throw "unreachable"; */
	f = "docProps/app.xml";
	if(wb.Props && wb.Props.SheetNames){/* empty */}
	else if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;
	else {
		var _sn = [];
		for(var _i = 0; _i < wb.SheetNames.length; ++_i)
			if((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);
		wb.Props.SheetNames = _sn;
	}
	wb.Props.Worksheets = wb.Props.SheetNames.length;
	zip_add_file(zip, f, write_ext_props(wb.Props, opts));
	ct.extprops.push(f);
	add_rels(opts.rels, 3, f, RELS.EXT_PROPS);

	if(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {
		f = "docProps/custom.xml";
		zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));
		ct.custprops.push(f);
		add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
	}

	var people = ["SheetJ5"];
	opts.tcid = 0;

	for(rId=1;rId <= wb.SheetNames.length; ++rId) {
		var wsrels = {'!id':{}};
		var ws = wb.Sheets[wb.SheetNames[rId-1]];
		var _type = (ws || {})["!type"] || "sheet";
		switch(_type) {
		case "chart":
			/* falls through */
		default:
			f = "xl/worksheets/sheet" + rId + "." + wbext;
			zip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));
			ct.sheets.push(f);
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
		}

		if(ws) {
			var comments = ws['!comments'];
			var need_vml = false;
			var cf = "";
			if(comments && comments.length > 0) {
				var needtc = false;
				comments.forEach(function(carr) {
					carr[1].forEach(function(c) { if(c.T == true) needtc = true; });
				});
				if(needtc) {
					cf = "xl/threadedComments/threadedComment" + rId + ".xml";
					zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));
					ct.threadedcomments.push(cf);
					add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + ".xml", RELS.TCMNT);
				}

				cf = "xl/comments" + rId + "." + wbext;
				zip_add_file(zip, cf, write_comments_xml(comments, opts));
				ct.comments.push(cf);
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
				need_vml = true;
			}
			if(ws['!legacy']) {
				if(need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + (rId) + ".vml", write_vml(rId, ws['!comments']));
			}
			delete ws['!comments'];
			delete ws['!legacy'];
		}

		if(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));
	}

	if(opts.Strings != null && opts.Strings.length > 0) {
		f = "xl/sharedStrings." + wbext;
		zip_add_file(zip, f, write_sst_xml(opts.Strings, opts));
		ct.strs.push(f);
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
	}

	f = "xl/workbook." + wbext;
	zip_add_file(zip, f, write_wb_xml(wb, opts));
	ct.workbooks.push(f);
	add_rels(opts.rels, 1, f, RELS.WB);

	/* TODO: something more intelligent with themes */

	f = "xl/theme/theme1.xml";
	zip_add_file(zip, f, write_theme(wb.Themes, opts));
	ct.themes.push(f);
	add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);

	/* TODO: something more intelligent with styles */

	f = "xl/styles." + wbext;
	zip_add_file(zip, f, write_sty_xml(wb, opts));
	ct.styles.push(f);
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);

	if(wb.vbaraw && vbafmt) {
		f = "xl/vbaProject.bin";
		zip_add_file(zip, f, wb.vbaraw);
		ct.vba.push(f);
		add_rels(opts.wbrels, -1, "vbaProject.bin", RELS.VBA);
	}

	f = "xl/metadata." + wbext;
	zip_add_file(zip, f, write_xlmeta_xml());
	ct.metadata.push(f);
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);

	if(people.length > 1) {
		f = "xl/persons/person.xml";
		zip_add_file(zip, f, write_people_xml(people, opts));
		ct.people.push(f);
		add_rels(opts.wbrels, -1, "persons/person.xml", RELS.PEOPLE);
	}

	zip_add_file(zip, "[Content_Types].xml", write_ct(ct, opts));
	zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));
	zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));

	delete opts.revssf; delete opts.ssf;
	return zip;
}

function firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array<number>*/ {
	var x = "";
	switch((o||{}).type || "base64") {
		case 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];
		case 'base64': x = Base64_decode(f.slice(0,12)); break;
		case 'binary': x = f; break;
		case 'array':  return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];
		default: throw new Error("Unrecognized type " + (o && o.type || "undefined"));
	}
	return [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];
}

function read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	if(CFB.find(cfb, "EncryptedPackage")) return parse_xlsxcfb(cfb, opts);
	return parse_xlscfb(cfb, opts);
}

function read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	var zip, d = data;
	var o = opts||{};
	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
	zip = zip_read(d, o);
	return parse_zip(zip, o);
}

function read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {
	var i = 0;
	main: while(i < data.length) switch(data.charCodeAt(i)) {
		case 0x0A: case 0x0D: case 0x20: ++i; break;
		case 0x3C: return parse_xlml(data.slice(i),o);
		default: break main;
	}
	return PRN.to_workbook(data, o);
}

function read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {
	var str = "", bytes = firstbyte(data, o);
	switch(o.type) {
		case 'base64': str = Base64_decode(data); break;
		case 'binary': str = data; break;
		case 'buffer': str = data.toString('binary'); break;
		case 'array': str = cc2str(data); break;
		default: throw new Error("Unrecognized type " + o.type);
	}
	if(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);
	o.type = "binary";
	return read_plaintext(str, o);
}

function read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {
	var d = data;
	if(o.type == 'base64') d = Base64_decode(d);
	if(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) d = new Uint8Array(data);
	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : (
		(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString("utf16le") :
		(typeof Uint8Array !== "undefined" && d instanceof Uint8Array) ? (
			typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le").decode(d.slice(2)) : utf16lereadu(d.slice(2))
		) : utf16leread(d.slice(2))
	);
	o.type = "binary";
	return read_plaintext(d, o);
}

function bstrify(data/*:string*/)/*:string*/ {
	return !data.match(/[^\x00-\x7F]/) ? data : utf8write(data);
}

function read_prn(data, d, o, str) {
	if(str) { o.type = "string"; return PRN.to_workbook(data, o); }
	return PRN.to_workbook(d, o);
}

function readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	reset_cp();
	var o = opts||{};
	if(o.codepage && typeof $cptable === "undefined") console.error("Codepage tables are not loaded.  Non-ASCII characters may not give expected results");
	if(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = "array", o));
	/* Javet projects `byte[]` to `Int8Array` */
	if(typeof Int8Array !== 'undefined' && data instanceof Int8Array) return readSync(new Uint8Array(data.buffer, data.byteOffset, data.length), o);
	if(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== "undefined" ? "buffer" : "array";
	var d = data, n = [0,0,0,0], str = false;
	if(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }
	_ssfopts = {};
	if(o.dateNF) _ssfopts.dateNF = o.dateNF;
	if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
	if(o.type == "file") { o.type = has_buf ? "buffer" : "binary"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = "array"; }
	if(o.type == "string") { str = true; o.type = "binary"; o.codepage = 65001; d = bstrify(data); }
	if(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {
		// $FlowIgnore
		var ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo="bar";
		// $FlowIgnore
		if(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}
	}
	switch((n = firstbyte(d, o))[0]) {
		case 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;
		case 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;
		case 0x3C: return parse_xlml(d, o);
		case 0x49:
			if(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error("TIFF Image File is not a spreadsheet");
			if(n[1] === 0x44) return read_wb_ID(d, o);
			break;
		case 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;
		case 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);
		case 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);
		case 0xFF:
			if(n[1] === 0xFE) { return read_utf16(d, o); }
			else if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);
			break;
		case 0x00:
			if(n[1] === 0x00) {
				if(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);
				if(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);
			}
			break;
		case 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);
		case 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return rtf_to_workbook(d, o); break;
		case 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);
		case 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error("PNG Image File is not a spreadsheet"); break;
		case 0x08: if(n[1] === 0xE7) throw new Error("Unsupported Multiplan 1.x file!"); break;
		case 0x0C:
			if(n[1] === 0xEC) throw new Error("Unsupported Multiplan 2.x file!");
			if(n[1] === 0xED) throw new Error("Unsupported Multiplan 3.x file!");
			break;
	}
	if(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);
	return read_prn(data, d, o, str);
}

function readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
	var o = opts||{}; o.type = 'file';
	return readSync(filename, o);
}
function write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {
	switch(o.type) {
		case "base64": case "binary": break;
		case "buffer": case "array": o.type = ""; break;
		case "file": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : ""}));
		case "string": throw new Error("'string' output type invalid for '" + o.bookType + "' files");
		default: throw new Error("Unrecognized type " + o.type);
	}
	return CFB.write(cfb, o);
}

function write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
	switch(opts.bookType) {
		case "ods": return write_ods(wb, opts);
		case "numbers": return write_numbers_iwa(wb, opts);
		case "xlsb": return write_zip_xlsb(wb, opts);
		default: return write_zip_xlsx(wb, opts);
	}
}

/*:: declare var encrypt_agile:any; */
function write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
	var o = dup(opts||{});
	var z = write_zip(wb, o);
	return write_zip_denouement(z, o);
}
function write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
	var o = dup(opts||{});
	var z = write_zip_xlsx(wb, o);
	return write_zip_denouement(z, o);
}
function write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {
	var oopts = {};
	var ftype = has_buf ? "nodebuffer" : (typeof Uint8Array !== "undefined" ? "array" : "string");
	if(o.compression) oopts.compression = 'DEFLATE';
	if(o.password) oopts.type = ftype;
	else switch(o.type) {
		case "base64": oopts.type = "base64"; break;
		case "binary": oopts.type = "string"; break;
		case "string": throw new Error("'string' output type invalid for '" + o.bookType + "' files");
		case "buffer":
		case "file": oopts.type = ftype; break;
		default: throw new Error("Unrecognized type " + o.type);
	}
	var out = z.FullPaths ? CFB.write(z, {fileType:"zip", type: /*::(*/{"nodebuffer": "buffer", "string": "binary"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);
	if(typeof Deno !== "undefined") {
		if(typeof out == "string") {
			if(o.type == "binary" || o.type == "base64") return out;
			out = new Uint8Array(s2ab(out));
		}
	}
/*jshint -W083 */
	if(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef
/*jshint +W083 */
	if(o.type === "file") return write_dl(o.file, out);
	return o.type == "string" ? utf8read(/*::(*/out/*:: :any)*/) : out;
}

function write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
	var o = opts||{};
	var cfb/*:CFBContainer*/ = write_xlscfb(wb, o);
	return write_cfb_ctr(cfb, o);
}

function write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {
	if(!bom) bom = "";
	var o = bom + out;
	switch(opts.type) {
		case "base64": return Base64_encode(utf8write(o));
		case "binary": return utf8write(o);
		case "string": return out;
		case "file": return write_dl(opts.file, o, 'utf8');
		case "buffer": {
			if(has_buf) return Buffer_from(o, 'utf8');
			else if(typeof TextEncoder !== "undefined") return new TextEncoder().encode(o);
			else return write_string_type(o, {type:'binary'}).split("").map(function(c) { return c.charCodeAt(0); });
		}
	}
	throw new Error("Unrecognized type " + opts.type);
}

function write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {
	switch(opts.type) {
		case "base64": return Base64_encode_pass(out);
		case "binary": return out;
		case "string": return out; /* override in sheet_to_txt */
		case "file": return write_dl(opts.file, out, 'binary');
		case "buffer": {
			if(has_buf) return Buffer_from(out, 'binary');
			else return out.split("").map(function(c) { return c.charCodeAt(0); });
		}
	}
	throw new Error("Unrecognized type " + opts.type);
}

/* TODO: test consistency */
function write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {
	switch(opts.type) {
		case "string":
		case "base64":
		case "binary":
			var bstr = "";
			// $FlowIgnore
			for(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);
			return opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;
		case "file": return write_dl(opts.file, out);
		case "buffer": return out;
		default: throw new Error("Unrecognized type " + opts.type);
	}
}

function writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {
	reset_cp();
	check_wb(wb);
	var o = dup(opts||{});
	if(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }
	if(o.type == "array") { o.type = "binary"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = "array"; return s2ab(out); }
	return write_zip_typeXLSX(wb, o);
}

function writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {
	reset_cp();
	check_wb(wb);
	var o = dup(opts||{});
	if(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }
	if(o.type == "array") { o.type = "binary"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = "array"; return s2ab(out); }
	var idx = 0;
	if(o.sheet) {
		if(typeof o.sheet == "number") idx = o.sheet;
		else idx = wb.SheetNames.indexOf(o.sheet);
		if(!wb.SheetNames[idx]) throw new Error("Sheet not found: " + o.sheet + " : " + (typeof o.sheet));
	}
	switch(o.bookType || 'xlsb') {
		case 'xml':
		case 'xlml': return write_string_type(write_xlml(wb, o), o);
		case 'slk':
		case 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb), o);
		case 'htm':
		case 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, "\ufeff");
		case 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'rtf': return write_string_type(sheet_to_rtf(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'fods': return write_string_type(write_ods(wb, o), o);
		case 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);
		case 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);
		case 'biff2': if(!o.biff) o.biff = 2; /* falls through */
		case 'biff3': if(!o.biff) o.biff = 3; /* falls through */
		case 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);
		case 'biff5': if(!o.biff) o.biff = 5; /* falls through */
		case 'biff8':
		case 'xla':
		case 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);
		case 'xlsx':
		case 'xlsm':
		case 'xlam':
		case 'xlsb':
		case 'numbers':
		case 'ods': return write_zip_type(wb, o);
		default: throw new Error ("Unrecognized bookType |" + o.bookType + "|");
	}
}

function resolve_book_type(o/*:WriteFileOpts*/) {
	if(o.bookType) return;
	var _BT = {
		"xls": "biff8",
		"htm": "html",
		"slk": "sylk",
		"socialcalc": "eth",
		"Sh33tJS": "WTF"
	};
	var ext = o.file.slice(o.file.lastIndexOf(".")).toLowerCase();
	if(ext.match(/^\.[a-z]+$/)) o.bookType = ext.slice(1);
	o.bookType = _BT[o.bookType] || o.bookType;
}

function writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {
	var o = opts||{}; o.type = 'file';
	o.file = filename;
	resolve_book_type(o);
	return writeSync(wb, o);
}

function writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {
	var o = opts||{}; o.type = 'file';
	o.file = filename;
	resolve_book_type(o);
	return writeSyncXLSX(wb, o);
}


function writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {
	var o = opts||{}; o.type = 'file';
	o.file = filename;
	resolve_book_type(o);
	o.type = 'buffer';
	var _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);
	return _fs.writeFile(filename, writeSync(wb, o), _cb);
}
/*::
type MJRObject = {
	row: any;
	isempty: boolean;
};
*/
function make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array<string>*/, header/*:number*/, hdr/*:Array<any>*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {
	var rr = encode_row(R);
	var defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, "raw");
	var isempty = true, dense = (sheet["!data"] != null);
	var row/*:any*/ = (header === 1) ? [] : {};
	if(header !== 1) {
		if(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }
		else row.__rowNum__ = R;
	}
	if(!dense || sheet["!data"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {
		var val = dense ? (sheet["!data"][R]||[])[C] : sheet[cols[C] + rr];
		if(val == null || val.t === undefined) {
			if(defval === undefined) continue;
			if(hdr[C] != null) { row[hdr[C]] = defval; }
			continue;
		}
		var v = val.v;
		switch(val.t){
			case 'z': if(v == null) break; continue;
			case 'e': v = (v == 0 ? null : void 0); break;
			case 's': case 'b':
			case 'n': if(!val.z || !fmt_is_date(val.z)) break;
			v = numdate(v); // TODO: date1904 setting should also be stored in worksheet object
			if(typeof v == "number") break;
			/* falls through */
			case 'd': if(!(o && (o.UTC||(o.raw === false)))) v = utc_to_local(new Date(v)); break;
			default: throw new Error('unrecognized type ' + val.t);
		}
		if(hdr[C] != null) {
			if(v == null) {
				if(val.t == "e" && v === null) row[hdr[C]] = null;
				else if(defval !== undefined) row[hdr[C]] = defval;
				else if(raw && v === null) row[hdr[C]] = null;
				else continue;
			} else {
				row[hdr[C]] = (val.t === 'n' && typeof o.rawNumbers === 'boolean' ? o.rawNumbers : raw) ? v : format_cell(val, v, o);
			}
			if(v != null) isempty = false;
		}
	}
	return { row: row, isempty: isempty };
}


function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {
	if(sheet == null || sheet["!ref"] == null) return [];
	var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv="";
	var r = {s:{r:0,c:0},e:{r:0,c:0}};
	var o = opts || {};
	var range = o.range != null ? o.range : sheet["!ref"];
	if(o.header === 1) header = 1;
	else if(o.header === "A") header = 2;
	else if(Array.isArray(o.header)) header = 3;
	else if(o.header == null) header = 0;
	switch(typeof range) {
		case 'string': r = safe_decode_range(range); break;
		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break;
		default: r = range;
	}
	if(header > 0) offset = 0;
	var rr = encode_row(r.s.r);
	var cols/*:Array<string>*/ = [];
	var out/*:Array<any>*/ = [];
	var outi = 0, counter = 0;
	var dense = sheet["!data"] != null;
	var R = r.s.r, C = 0;
	var header_cnt = {};
	if(dense && !sheet["!data"][R]) sheet["!data"][R] = [];
	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || [];
	var rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!rows"] || [];
	for(C = r.s.c; C <= r.e.c; ++C) {
		if(((colinfo[C]||{}).hidden)) continue;
		cols[C] = encode_col(C);
		val = dense ? sheet["!data"][R][C] : sheet[cols[C] + rr];
		switch(header) {
			case 1: hdr[C] = C - r.s.c; break;
			case 2: hdr[C] = cols[C]; break;
			case 3: hdr[C] = o.header[C - r.s.c]; break;
			default:
				if(val == null) val = {w: "__EMPTY", t: "s"};
				vv = v = format_cell(val, null, o);
				counter = header_cnt[v] || 0;
				if(!counter) header_cnt[v] = 1;
				else {
					do { vv = v + "_" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;
					header_cnt[vv] = 1;
				}
				hdr[C] = vv;
		}
	}
	for (R = r.s.r + offset; R <= r.e.r; ++R) {
		if ((rowinfo[R]||{}).hidden) continue;
		var row = make_json_row(sheet, r, R, cols, header, hdr, o);
		if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;
	}
	out.length = outi;
	return out;
}

var qreg = /"/g;
function make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array<string>*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, w/*:number*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {
	var isempty = true;
	var row/*:Array<string>*/ = [], txt = "", rr = encode_row(R);
	var dense = sheet["!data"] != null;
	var datarow = dense && sheet["!data"][R] || [];
	for(var C = r.s.c; C <= r.e.c; ++C) {
		if (!cols[C]) continue;
		var val = dense ? datarow[C]: sheet[cols[C] + rr];
		if(val == null) txt = "";
		else if(val.v != null) {
			isempty = false;
			txt = ''+(o.rawNumbers && val.t == "n" ? val.v : format_cell(val, null, o));
			for(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = "\"" + txt.replace(qreg, '""') + "\""; break; }
			if(txt == "ID" && w == 0 && row.length == 0) txt = '"ID"';
		} else if(val.f != null && !val.F) {
			isempty = false;
			txt = '=' + val.f; if(txt.indexOf(",") >= 0) txt = '"' + txt.replace(qreg, '""') + '"';
		} else txt = "";
		/* NOTE: Excel CSV does not support array formulae */
		row.push(txt);
	}
	if(o.strip) while(row[row.length - 1] === "") --row.length;
	if(o.blankrows === false && isempty) return null;
	return row.join(FS);
}

function sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {
	var out/*:Array<string>*/ = [];
	var o = opts == null ? {} : opts;
	if(sheet == null || sheet["!ref"] == null) return "";
	var r = safe_decode_range(sheet["!ref"]);
	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0);
	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0);
	var row = "", cols/*:Array<string>*/ = [];
	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || [];
	var rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!rows"] || [];
	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);
	var w = 0;
	for(var R = r.s.r; R <= r.e.r; ++R) {
		if ((rowinfo[R]||{}).hidden) continue;
		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o);
		if(row == null) { continue; }
		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row);
	}
	return out.join("");
}

function sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {
	if(!opts) opts = {}; opts.FS = "\t"; opts.RS = "\n";
	var s = sheet_to_csv(sheet, opts);
	if(typeof $cptable == 'undefined' || opts.type == 'string') return s;
	var o = $cptable.utils.encode(1200, s, 'str');
	return String.fromCharCode(255) + String.fromCharCode(254) + o;
}

function sheet_to_formulae(sheet/*:Worksheet*/, opts/*:?Sheet2FormulaOpts*/)/*:Array<string>*/ {
	var y = "", x, val="";
	if(sheet == null || sheet["!ref"] == null) return [];
	var r = safe_decode_range(sheet['!ref']), rr = "", cols/*:Array<string>*/ = [], C;
	var cmds/*:Array<string>*/ = [];
	var dense = sheet["!data"] != null;
	for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
	for(var R = r.s.r; R <= r.e.r; ++R) {
		rr = encode_row(R);
		for(C = r.s.c; C <= r.e.c; ++C) {
			y = cols[C] + rr;
			x = dense ? (sheet["!data"][R]||[])[C] : sheet[y];
			val = "";
			if(x === undefined) continue;
			else if(x.F != null) {
				y = x.F;
				if(!x.f) continue;
				val = x.f;
				if(y.indexOf(":") == -1) y = y + ":" + y;
			}
			if(x.f != null) val = x.f;
			else if(opts && opts.values === false) continue;
			else if(x.t == 'z') continue;
			else if(x.t == 'n' && x.v != null) val = "" + x.v;
			else if(x.t == 'b') val = x.v ? "TRUE" : "FALSE";
			else if(x.w !== undefined) val = "'" + x.w;
			else if(x.v === undefined) continue;
			else if(x.t == 's') val = "'" + x.v;
			else val = ""+x.v;
			cmds[cmds.length] = y + "=" + val;
		}
	}
	return cmds;
}

function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet*/ {
	var o = opts || {};
	var dense = _ws ? (_ws["!data"] != null) : o.dense;
	if(DENSE != null && dense == null) dense = DENSE;
	var offset = +!o.skipHeader;
	var ws/*:Worksheet*/ = _ws || ({});
	if(!_ws && dense) ws["!data"] = [];
	var _R = 0, _C = 0;
	if(ws && o.origin != null) {
		if(typeof o.origin == 'number') _R = o.origin;
		else {
			var _origin/*:CellAddress*/ = typeof o.origin == "string" ? decode_cell(o.origin) : o.origin;
			_R = _origin.r; _C = _origin.c;
		}
	}
	var range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);
	if(ws['!ref']) {
		var _range = safe_decode_range(ws['!ref']);
		range.e.c = Math.max(range.e.c, _range.e.c);
		range.e.r = Math.max(range.e.r, _range.e.r);
		if(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }
	} else {
		if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
	}
	var hdr/*:Array<string>*/ = o.header || [], C = 0;
	var ROW = [];
	js.forEach(function (JS, R/*:number*/) {
		if(dense && !ws["!data"][_R + R + offset]) ws["!data"][_R + R + offset] = [];
		if(dense) ROW = ws["!data"][_R + R + offset];
		keys(JS).forEach(function(k) {
			if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
			var v = JS[k];
			var t = 'z';
			var z = "";
			var ref = dense ? "" : (encode_col(_C + C) + encode_row(_R + R + offset));
			var cell/*:Cell*/ = dense ? ROW[_C + C] : ws[ref];
			if(v && typeof v === 'object' && !(v instanceof Date)){
				if(dense) ROW[_C + C] = v;
				else ws[ref] = v;
			} else {
				if(typeof v == 'number') t = 'n';
				else if(typeof v == 'boolean') t = 'b';
				else if(typeof v == 'string') t = 's';
				else if(v instanceof Date) {
					t = 'd';
					if(!o.UTC) v = local_to_utc(v);
					if(!o.cellDates) { t = 'n'; v = datenum(v); }
					z = (cell != null && cell.z && fmt_is_date(cell.z)) ? cell.z : (o.dateNF || table_fmt[14]);
				}
				else if(v === null && o.nullError) { t = 'e'; v = 0; }
				if(!cell) {
					if(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);
					else ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);
				} else {
					cell.t = t; cell.v = v;
					delete cell.w; delete cell.R;
					if(z) cell.z = z;
				}
				if(z) cell.z = z;
			}
		});
	});
	range.e.c = Math.max(range.e.c, _C + hdr.length - 1);
	var __R = encode_row(_R);
	if(dense && !ws["!data"][_R]) ws["!data"][_R] = [];
	if(offset) for(C = 0; C < hdr.length; ++C) {
		if(dense) ws["!data"][_R][C + _C] = {t:'s', v:hdr[C]};
		else ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};
	}
	ws['!ref'] = encode_range(range);
	return ws;
}
function json_to_sheet(js/*:Array<any>*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }

/* get cell, creating a stub if necessary */
function ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {
	/* A1 cell address */
	if(typeof R == "string") {
		if(ws["!data"] != null) {
			var RC = decode_cell(R);
			if(!ws["!data"][RC.r]) ws["!data"][RC.r] = [];
			return ws["!data"][RC.r][RC.c] || (ws["!data"][RC.r][RC.c] = {t:'z'});
		}
		return ws[R] || (ws[R] = {t:'z'});
	}
	/* cell address object */
	if(typeof R != "number") return ws_get_cell_stub(ws, encode_cell(R));
	/* R and C are 0-based indices */
	return ws_get_cell_stub(ws, encode_col(C||0) + encode_row(R));
}

/* find sheet index for given name / validate index */
function wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {
	if(typeof sh == "number") {
		if(sh >= 0 && wb.SheetNames.length > sh) return sh;
		throw new Error("Cannot find sheet # " + sh);
	} else if(typeof sh == "string") {
		var idx = wb.SheetNames.indexOf(sh);
		if(idx > -1) return idx;
		throw new Error("Cannot find sheet name |" + sh + "|");
	} else throw new Error("Cannot find sheet |" + sh + "|");
}

/* simple blank or single-sheet workbook object */
function book_new(ws/*:?Worksheet*/, wsname/*:?string*/)/*:Workbook*/ {
	var wb = { SheetNames: [], Sheets: {} };
	if(ws) book_append_sheet(wb, ws, wsname || "Sheet1");
	return wb;
}

/* add a worksheet to the end of a given workbook */
function book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {
	var i = 1;
	if(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = "Sheet" + i) == -1) break;
	if(!name || wb.SheetNames.length >= 0xFFFF) throw new Error("Too many worksheets");
	if(roll && wb.SheetNames.indexOf(name) >= 0 && name.length < 32) {
		var m = name.match(/\d+$/); // at this point, name length is capped at 32
		i = m && +m[0] || 0;
		var root = m && name.slice(0, m.index) || name;
		for(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;
	}
	check_ws_name(name);
	if(wb.SheetNames.indexOf(name) >= 0) throw new Error("Worksheet with name |" + name + "| already exists!");

	wb.SheetNames.push(name);
	wb.Sheets[name] = ws;
	return name;
}

/* set sheet visibility (visible/hidden/very hidden) */
function book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {
	if(!wb.Workbook) wb.Workbook = {};
	if(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];

	var idx = wb_sheet_idx(wb, sh);
	// $FlowIgnore
	if(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};

	switch(vis) {
		case 0: case 1: case 2: break;
		default: throw new Error("Bad sheet visibility setting " + vis);
	}
	// $FlowIgnore
	wb.Workbook.Sheets[idx].Hidden = vis;
}

/* set number format */
function cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {
	cell.z = fmt;
	return cell;
}

/* set cell hyperlink */
function cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {
	if(!target) {
		delete cell.l;
	} else {
		cell.l = ({ Target: target }/*:Hyperlink*/);
		if(tooltip) cell.l.Tooltip = tooltip;
	}
	return cell;
}
function cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, "#" + range, tooltip); }

/* add to cell comments */
function cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {
	if(!cell.c) cell.c = [];
	cell.c.push({t:text, a:author||"SheetJS"});
}

/* set array formula and flush related cells */
function sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {
	var rng = typeof range != "string" ? range : safe_decode_range(range);
	var rngstr = typeof range == "string" ? range : encode_range(range);
	for(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {
		var cell = ws_get_cell_stub(ws, R, C);
		cell.t = 'n';
		cell.F = rngstr;
		delete cell.v;
		if(R == rng.s.r && C == rng.s.c) {
			cell.f = formula;
			if(dynamic) cell.D = true;
		}
	}
	var wsr = decode_range(ws["!ref"]);
	if(wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;
	if(wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;
	if(wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;
	if(wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;
	ws["!ref"] = encode_range(wsr);
	return ws;
}

var utils/*:any*/ = {
	encode_col: encode_col,
	encode_row: encode_row,
	encode_cell: encode_cell,
	encode_range: encode_range,
	decode_col: decode_col,
	decode_row: decode_row,
	split_cell: split_cell,
	decode_cell: decode_cell,
	decode_range: decode_range,
	format_cell: format_cell,
	sheet_new: sheet_new,
	sheet_add_aoa: sheet_add_aoa,
	sheet_add_json: sheet_add_json,
	sheet_add_dom: sheet_add_dom,
	aoa_to_sheet: aoa_to_sheet,
	json_to_sheet: json_to_sheet,
	table_to_sheet: parse_dom_table,
	table_to_book: table_to_book,
	sheet_to_csv: sheet_to_csv,
	sheet_to_txt: sheet_to_txt,
	sheet_to_json: sheet_to_json,
	sheet_to_html: sheet_to_html,
	sheet_to_formulae: sheet_to_formulae,
	sheet_to_row_object_array: sheet_to_json,
	sheet_get_cell: ws_get_cell_stub,
	book_new: book_new,
	book_append_sheet: book_append_sheet,
	book_set_sheet_visibility: book_set_sheet_visibility,
	cell_set_number_format: cell_set_number_format,
	cell_set_hyperlink: cell_set_hyperlink,
	cell_set_internal_link: cell_set_internal_link,
	cell_add_comment: cell_add_comment,
	sheet_set_array_formula: sheet_set_array_formula,
	consts: {
		SHEET_VISIBLE: 0,
		SHEET_HIDDEN: 1,
		SHEET_VERY_HIDDEN: 2
	}
};

var _Readable;
function set_readable(R) { _Readable = R; }

function write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {
	var stream = _Readable();
	var o = opts == null ? {} : opts;
	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; }
	var r = safe_decode_range(sheet["!ref"]);
	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0);
	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0);
	var row/*:?string*/ = "", cols/*:Array<string>*/ = [];
	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || [];
	var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || [];
	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);
	var R = r.s.r;
	var BOM = false, w = 0;
	stream._read = function() {
		if(!BOM) { BOM = true; return stream.push("\uFEFF"); }
		while(R <= r.e.r) {
			++R;
			if ((rowinfo[R-1]||{}).hidden) continue;
			row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, w, o);
			if(row != null) {
				if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row);
			}
		}
		return stream.push(null);
	};
	return stream;
}

function write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {
	var stream = _Readable();

	var o = opts || {};
	var header = o.header != null ? o.header : HTML_BEGIN;
	var footer = o.footer != null ? o.footer : HTML_END;
	stream.push(header);
	var r = decode_range(ws['!ref']);
	stream.push(make_html_preamble(ws, r, o));
	var R = r.s.r;
	var end = false;
	stream._read = function() {
		if(R > r.e.r) {
			if(!end) { end = true; stream.push("</table>" + footer); }
			return stream.push(null);
		}
		while(R <= r.e.r) {
			stream.push(make_html_row(ws, r, R, o));
			++R;
			break;
		}
	};
	return stream;
}

function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {
	var stream = _Readable({objectMode:true});

	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; }
	var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv="";
	var r = {s:{r:0,c:0},e:{r:0,c:0}};
	var o = opts || {};
	var range = o.range != null ? o.range : sheet["!ref"];
	if(o.header === 1) header = 1;
	else if(o.header === "A") header = 2;
	else if(Array.isArray(o.header)) header = 3;
	switch(typeof range) {
		case 'string': r = safe_decode_range(range); break;
		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break;
		default: r = range;
	}
	if(header > 0) offset = 0;
	var rr = encode_row(r.s.r);
	var cols/*:Array<string>*/ = [];
	var counter = 0;
	var dense = sheet["!data"] != null;
	var R = r.s.r, C = 0;
	var header_cnt = {};
	if(dense && !sheet["!data"][R]) sheet["!data"][R] = [];
	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || [];
	var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || [];
	for(C = r.s.c; C <= r.e.c; ++C) {
		if(((colinfo[C]||{}).hidden)) continue;
		cols[C] = encode_col(C);
		val = dense ? sheet["!data"][R][C] : sheet[cols[C] + rr];
		switch(header) {
			case 1: hdr[C] = C - r.s.c; break;
			case 2: hdr[C] = cols[C]; break;
			case 3: hdr[C] = o.header[C - r.s.c]; break;
			default:
				if(val == null) val = {w: "__EMPTY", t: "s"};
				vv = v = format_cell(val, null, o);
				counter = header_cnt[v] || 0;
				if(!counter) header_cnt[v] = 1;
				else {
					do { vv = v + "_" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;
					header_cnt[vv] = 1;
				}
				hdr[C] = vv;
		}
	}
	R = r.s.r + offset;
	stream._read = function() {
		while(R <= r.e.r) {
			if ((rowinfo[R-1]||{}).hidden) continue;
			var row = make_json_row(sheet, r, R, cols, header, hdr, o);
			++R;
			if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {
				stream.push(row.row);
				return;
			}
		}
		return stream.push(null);
	};
	return stream;
}

function write_xlml_stream(wb/*:Workbook*/, o/*:?Sheet2XLMLOpts*/) {
	var stream = _Readable();
	var opts = o == null ? {} : o;
	var stride = +opts.stride || 10;
	if(!wb.SSF) wb.SSF = dup(table_fmt);
	if(wb.SSF) {
		make_ssf(); SSF_load_table(wb.SSF);
		// $FlowIgnore
		opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
		opts.ssf = wb.SSF;
		opts.cellXfs = [];
		get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});
	}

	/* do one pass to determine styles since they must be added before tables */
	wb.SheetNames.forEach(function(n) {
		var ws = wb.Sheets[n];
		if(!ws || !ws["!ref"]) return;
		var range = decode_range(ws["!ref"]);
		var dense = ws["!data"] != null;
		var ddata = dense ? ws["!data"] : [];
		var addr = {r:0,c:0};
		for(var R = range.s.r; R <= range.e.r; ++R) {
			addr.r = R;
			if(dense && !ddata[R]) continue;
			for(var C = range.s.c; C <= range.e.c; ++C) {
				addr.c = C;
				var cell = dense ? ddata[R][C] : ws[encode_col(C) + encode_row(R)];
				if(!cell) continue;
				if(cell.t == "d" && cell.z == null) { cell = dup(cell); cell.z = table_fmt[14]; }
				void get_cell_style(opts.cellXfs, cell, opts);
			}
		}
	});
	var sty = write_sty_xlml(wb, opts);

	var stage = 0, wsidx = 0, ws = wb.Sheets[wb.SheetNames[wsidx]], range = safe_decode_range(ws), R = -1, T = false;

	var marr = [], mi = 0, dense = false, darr = [], addr = {r:0,c:0};

	stream._read = function() { switch(stage) {
		/* header */
		case 0: {
			stage = 1;
			stream.push(XML_HEADER);
			stream.push("<Workbook" + wxt_helper({
				'xmlns':      XLMLNS.ss,
				'xmlns:o':    XLMLNS.o,
				'xmlns:x':    XLMLNS.x,
				'xmlns:ss':   XLMLNS.ss,
				'xmlns:dt':   XLMLNS.dt,
				'xmlns:html': XLMLNS.html
			}) + ">");
		} break;

		/* preamble */
		case 1: {
			stage = 2;
			stream.push(write_props_xlml(wb, opts));
			stream.push(write_wb_xlml(wb, opts));
		} break;

		/* style and name tables */
		case 2: {
			stage = 3;
			stream.push(sty);
			stream.push(write_names_xlml(wb, opts));
		} break;

		/* worksheet preamble */
		case 3: {
			T = false;
			if(wsidx >= wb.SheetNames.length) { stage = -1; stream.push(""); break; }

			stream.push("<Worksheet" + wxt_helper({ "ss:Name": escapexml(wb.SheetNames[wsidx])}) + ">");

			ws = wb.Sheets[wb.SheetNames[wsidx]];
			if(!ws) { stream.push("</Worksheet>"); return void ++wsidx; }

			var names = write_ws_xlml_names(ws, opts, wsidx, wb);
			if(names.length) stream.push("<Names>" + names + "</Names>");

			if(!ws["!ref"]) return (stage = 5);
			range = safe_decode_range(ws["!ref"]);
			R = range.s.r;
			stage = 4;
		} break;

		/* worksheet intramble */
		case 4: {
			if(R < 0 || R > range.e.r) { if(T) stream.push("</Table>"); return void (stage = 5); }

			if(R <= range.s.r) {
				if(ws['!cols']) ws['!cols'].forEach(function(n, i) {
					process_col(n);
					var w = !!n.width;
					var p = col_obj_w(i, n);
					var k/*:any*/ = {"ss:Index":i+1};
					if(w) k['ss:Width'] = width2px(p.width);
					if(n.hidden) k['ss:Hidden']="1";
					if(!T) { T = true; stream.push("<Table>"); }
					stream.push(writextag("Column",null,k));
				});
				dense = ws["!data"] != null;
				if(dense) darr = ws["!data"];
				addr.r = addr.c = 0;
			}

			/* process `stride` rows per invocation */
			for(var cnt = 0; R <= range.e.r && cnt < stride; ++R, ++cnt) {
				var row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];
				addr.r = R;
				if(!(dense && !darr[R])) for(var C = range.s.c; C <= range.e.c; ++C) {
					addr.c = C;
					var skip = false;
					for(mi = 0; mi != marr.length; ++mi) {
						if(marr[mi].s.c > C) continue;
						if(marr[mi].s.r > R) continue;
						if(marr[mi].e.c < C) continue;
						if(marr[mi].e.r < R) continue;
						if(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;
						break;
					}
					if(skip) continue;
					var ref = encode_col(C) + encode_row(R), cell = dense ? darr[R][C] : ws[ref];
					row.push(write_ws_xlml_cell(cell, ref, ws, opts, wsidx, wb, addr));
				}
				row.push("</Row>");
				if(!T) { T = true; stream.push("<Table>"); }
				stream.push(row.join(""));
			}
		} break;

		/* worksheet postamble */
		case 5: {
			stream.push(write_ws_xlml_wsopts(ws, opts, wsidx, wb));
			if(ws && ws["!autofilter"]) stream.push('<AutoFilter x:Range="' + a1_to_rc(fix_range(ws["!autofilter"].ref), {r:0,c:0}) + '" xmlns="urn:schemas-microsoft-com:office:excel"></AutoFilter>');
			stream.push("</Worksheet>");
			wsidx++; R = -1;
			return void (stage = 3);
		}

		/* footer */
		case -1: {
			stage = -2;
			stream.push("</Workbook>");
		} break;

		/* exeunt */
		case -2: stream.push(null); break;
	}};
	return stream;
}

var __stream = {
	to_json: write_json_stream,
	to_html: write_html_stream,
	to_csv: write_csv_stream,
	to_xlml: write_xlml_stream,
	set_readable: set_readable
};
const version = XLSX.version;

/* harmony default export */ __webpack_exports__["default"] = ({
	parse_xlscfb,
	parse_zip,
	read: readSync,
	readFile: readFileSync,
	readFileSync,
	write: writeSync,
	writeFile: writeFileSync,
	writeFileSync,
	writeFileAsync,
	writeXLSX: writeSyncXLSX,
	writeFileXLSX: writeFileSyncXLSX,
	utils,
	set_fs,
	set_cptable,
	stream: __stream,
	SSF,
	CFB
});
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
/* harmony import */ var _components_ImportExport_ExportModal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ImportExport/ExportModal */ "./src/components/ImportExport/ExportModal.js");
/* harmony import */ var _components_ImportExport_ImportWizard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/ImportExport/ImportWizard */ "./src/components/ImportExport/ImportWizard.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetail.js",
  _div;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }






var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = dateStr => {
  if (!dateStr) return '-';
  try {
    return new Date(dateStr).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return dateStr;
  }
};
var formatCurrency = amount => {
  if (!amount) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(amount);
};
var getDisplayName = agreement => {
  // borrowerfirstname stores the business name in standalone agreements
  var businessName = agreement.borrowerfirstname || agreement.borrowerFirstName;
  if (businessName) return businessName;
  return agreement.accountnumber || agreement.accountNumber || 'Agreement';
};
var getSecondaryName = agreement => {
  var parts = [agreement.borrowerlastname || agreement.borrowerLastName].filter(Boolean);
  return parts.length > 0 ? parts.join(' ') : null;
};
var StandaloneAgreementDetail = _ref => {
  var {
    match,
    history
  } = _ref;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [showExport, setShowExport] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [showImport, setShowImport] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_3__["trackEvent"])('standalone_agreement_viewed', {
      agreementId
    });
  }, [agreementId]);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    var fetchData = /*#__PURE__*/function () {
      var _ref2 = _asyncToGenerator(function* () {
        setLoading(true);
        try {
          var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, '/data-studio/sql', 'POST', {}, {
            items: ['agreements'],
            queryService: 'datastudio',
            request: {
              query: "SELECT *\n            FROM agreement\n            WHERE id = '".concat(agreementId.replace(/'/g, "''"), "'\n            LIMIT 1")
            }
          });
          var item = res.data && res.data.Items && res.data.Items[0];
          setAgreement(item || null);
        } catch (err) {
          console.error('Failed to load agreement:', err);
          setAgreement(null);
        }
        setLoading(false);
      });
      return function fetchData() {
        return _ref2.apply(this, arguments);
      };
    }();
    fetchData();
  }, [agreementId]);
  if (loading) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account",
      "data-testid": "standalone-agreement-detail",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 79,
        columnNumber: 7
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__container",
      style: {
        paddingTop: '3rem',
        textAlign: 'center'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 80,
        columnNumber: 9
      }
    }, "Loading..."));
  }
  if (!agreement) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account",
      "data-testid": "standalone-agreement-detail",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 89,
        columnNumber: 7
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__container",
      style: {
        paddingTop: '3rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 90,
        columnNumber: 9
      }
    }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "alert alert-danger",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 91,
        columnNumber: 11
      }
    }, "Agreement not found."))));
  }
  var status = agreement.status || 'draft';
  var displayName = getDisplayName(agreement);
  var secondaryName = getSecondaryName(agreement);
  var borrowerEmail = agreement.borroweremail || agreement.borrowerEmail || '';
  var accountNumber = agreement.accountnumber || agreement.accountNumber || '';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 104,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 106,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container container-wide",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 107,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 108,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-8 no-padding-left no-padding-right",
    style: {
      textAlign: 'left',
      color: '#fff'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 109,
      columnNumber: 13
    }
  }, displayName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex",
    style: {
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 112,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    onClick: () => setShowImport(true),
    title: "Update this agreement's data from a file",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 113,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-upload",
    style: {
      marginRight: 4
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 118,
      columnNumber: 17
    }
  }), "Update From File"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    onClick: () => setShowExport(true),
    title: "Download this agreement's data",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 120,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-download",
    style: {
      marginRight: 4
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 125,
      columnNumber: 17
    }
  }), "Export Agreement"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 no-padding-left no-padding-right",
    style: {
      margin: '1rem 0rem 0.25rem',
      padding: '0.25rem 1rem',
      width: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 129,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 130,
      columnNumber: 13
    }
  }, "Primary Applicant: ", secondaryName || displayName, borrowerEmail ? " | ".concat(borrowerEmail) : '', " - #", accountNumber)))), showExport && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_ImportExport_ExportModal__WEBPACK_IMPORTED_MODULE_4__["default"], {
    agreements: [agreement],
    onClose: () => setShowExport(false),
    filenamePrefix: "agreement-".concat(accountNumber || agreementId),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 136,
      columnNumber: 9
    }
  }), showImport && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_ImportExport_ImportWizard__WEBPACK_IMPORTED_MODULE_5__["default"], {
    onClose: () => setShowImport(false),
    httpClient: _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"],
    existingAgreements: [agreement],
    defaultProcessId: agreement.processId || agreement.processid || 'default',
    singleAgreementMode: true,
    targetAgreement: agreement,
    targetAgreementName: displayName,
    onViewAgreements: () => {
      setShowImport(false);
      history.push('/dashboard/agreements');
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 144,
      columnNumber: 9
    }
  }));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetail));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _FieldSelector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FieldSelector */ "./src/components/ImportExport/FieldSelector.js");
/* harmony import */ var _FormatSelector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FormatSelector */ "./src/components/ImportExport/FormatSelector.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/agreementImportExport */ "./src/utils/agreementImportExport/index.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_3__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ExportModal.js",
  _h,
  _label;




var ExportModal = _ref => {
  var {
    agreements,
    onClose,
    filenamePrefix
  } = _ref;
  var allFields = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_3__["getExportableFieldKeys"])();
  var [selectedFields, setSelectedFields] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(allFields);
  var [format, setFormat] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('csv');
  var [exporting, setExporting] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var handleExport = () => {
    if (selectedFields.length === 0) {
      setError('Please select at least one field to export.');
      return;
    }
    setExporting(true);
    setError(null);
    try {
      var {
        blob,
        filename
      } = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_3__["exportAgreements"])(agreements, selectedFields, format, {
        filenamePrefix
      });
      Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_3__["triggerDownload"])(blob, filename);
      onClose();
    } catch (err) {
      setError(err.message || 'Export failed');
      setExporting(false);
    }
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert-wrapper alert-prompt alert-light-background active",
    "data-testid": "export-modal",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 31,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-times alert-close-button",
    onClick: onClose,
    style: {
      cursor: 'pointer',
      position: 'absolute',
      top: '1rem',
      right: '1rem',
      fontSize: '1.2rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 32,
      columnNumber: 7
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '2rem',
      maxWidth: 550,
      margin: '0 auto',
      maxHeight: '80vh',
      overflowY: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 37,
      columnNumber: 7
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 38,
      columnNumber: 9
    }
  }, "Export Agreements")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "text-muted mb-3",
    style: {
      fontSize: '0.9rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 39,
      columnNumber: 9
    }
  }, "Select the fields to include and choose your file format.", agreements.length === 1 ? ' Exporting 1 agreement.' : " Exporting ".concat(agreements.length, " agreements.")), error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 46,
      columnNumber: 19
    }
  }, error), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_FormatSelector__WEBPACK_IMPORTED_MODULE_2__["default"], {
    value: format,
    onChange: setFormat,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 48,
      columnNumber: 9
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 50,
      columnNumber: 9
    }
  }, _label || (_label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 51,
      columnNumber: 11
    }
  }, "Fields")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxHeight: 350,
      overflowY: 'auto',
      border: '1px solid #e5e7eb',
      borderRadius: 6,
      padding: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 52,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_FieldSelector__WEBPACK_IMPORTED_MODULE_1__["default"], {
    selectedFields: selectedFields,
    onChange: setSelectedFields,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 53,
      columnNumber: 13
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-end",
    style: {
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 57,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn btn-default",
    onClick: onClose,
    disabled: exporting,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 58,
      columnNumber: 11
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    onClick: handleExport,
    disabled: exporting || selectedFields.length === 0,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 61,
      columnNumber: 11
    }
  }, exporting ? 'Exporting...' : "Export ".concat(format.toUpperCase())))));
};
/* harmony default export */ __webpack_exports__["default"] = (ExportModal);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/agreementImportExport */ "./src/utils/agreementImportExport/index.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/FieldSelector.js";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }


var FieldSelector = _ref => {
  var {
    selectedFields,
    onChange
  } = _ref;
  var grouped = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getFieldsByCategory"])();
  var [collapsed, setCollapsed] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({});
  var toggleCategory = cat => {
    setCollapsed(prev => _objectSpread(_objectSpread({}, prev), {}, {
      [cat]: !prev[cat]
    }));
  };
  var toggleField = key => {
    var next = selectedFields.includes(key) ? selectedFields.filter(f => f !== key) : [...selectedFields, key];
    onChange(next);
  };
  var selectAllInCategory = cat => {
    var catKeys = grouped[cat].fields.map(f => f.key);
    var allSelected = catKeys.every(k => selectedFields.includes(k));
    if (allSelected) {
      onChange(selectedFields.filter(f => !catKeys.includes(f)));
    } else {
      var combined = new Set([...selectedFields, ...catKeys]);
      onChange(Array.from(combined));
    }
  };
  var selectAll = () => {
    var allKeys = Object.values(grouped).flatMap(g => g.fields.map(f => f.key));
    onChange(allKeys);
  };
  var deselectAll = () => {
    onChange([]);
  };
  var categoryOrder = Object.keys(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["FIELD_CATEGORIES"]);
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 42,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex mb-2",
    style: {
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 43,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "button",
    className: "btn btn-sm btn-outline-secondary",
    onClick: selectAll,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 44,
      columnNumber: 9
    }
  }, "Select All"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "button",
    className: "btn btn-sm btn-outline-secondary",
    onClick: deselectAll,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 47,
      columnNumber: 9
    }
  }, "Deselect All"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "text-muted",
    style: {
      fontSize: '0.8rem',
      alignSelf: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 50,
      columnNumber: 9
    }
  }, selectedFields.length, " field", selectedFields.length !== 1 ? 's' : '', " selected")), categoryOrder.filter(cat => grouped[cat]).map(cat => {
    var group = grouped[cat];
    var catKeys = group.fields.map(f => f.key);
    var allSelected = catKeys.every(k => selectedFields.includes(k));
    var isCollapsed = collapsed[cat];
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: cat,
      style: {
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 61,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "d-flex align-items-center",
      style: {
        cursor: 'pointer',
        userSelect: 'none',
        gap: '0.5rem',
        marginBottom: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 62,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-caret-".concat(isCollapsed ? 'right' : 'down'),
      style: {
        width: 12,
        color: '#6b7280'
      },
      onClick: () => toggleCategory(cat),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 66,
        columnNumber: 15
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
      style: {
        fontWeight: 600,
        fontSize: '0.85rem',
        margin: 0,
        cursor: 'pointer'
      },
      onClick: () => toggleCategory(cat),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 71,
        columnNumber: 15
      }
    }, group.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      type: "button",
      className: "btn btn-link btn-sm",
      style: {
        fontSize: '0.75rem',
        padding: 0
      },
      onClick: () => selectAllInCategory(cat),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 74,
        columnNumber: 15
      }
    }, allSelected ? 'Deselect' : 'Select all')), !isCollapsed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        paddingLeft: '1.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 84,
        columnNumber: 15
      }
    }, group.fields.map(field => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
      key: field.key,
      className: "d-flex align-items-center",
      style: {
        fontSize: '0.85rem',
        marginBottom: '0.15rem',
        cursor: 'pointer',
        gap: '0.4rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 86,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
      type: "checkbox",
      checked: selectedFields.includes(field.key),
      onChange: () => toggleField(field.key),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 91,
        columnNumber: 21
      }
    }), field.label))));
  }));
};
/* harmony default export */ __webpack_exports__["default"] = (FieldSelector);/**
 * Agreement Import/Export — public API.
 */

// Field definitions
var {
  AGREEMENT_FIELDS,
  FIELD_CATEGORIES,
  getAgreementFields,
  getFieldsByCategory,
  getRequiredFields,
  getFieldByKey,
  getExportableFieldKeys
} = __webpack_require__(/*! ./agreementFields */ "./src/utils/agreementImportExport/agreementFields.js");

// Type coercion
var {
  parseNumber,
  detectNumberColumn,
  parseDate,
  toISOString,
  detectDateColumn,
  parseBoolean,
  detectBooleanColumn,
  normalizeEmail,
  normalizePhone,
  coerceValue,
  detectColumnType
} = __webpack_require__(/*! ./typeCoercion */ "./src/utils/agreementImportExport/typeCoercion.js");

// Field mapping
var {
  autoMapHeaders,
  getAvailableTargetFields,
  scoreMatch
} = __webpack_require__(/*! ./fieldMapping */ "./src/utils/agreementImportExport/fieldMapping.js");

// Validation
var {
  validateRow,
  validateRows
} = __webpack_require__(/*! ./validation */ "./src/utils/agreementImportExport/validation.js");

// Adapters
var {
  registerAdapter,
  getAdapter,
  getAvailableFormats,
  getComingSoonFormats
} = __webpack_require__(/*! ./adapters/adapterRegistry */ "./src/utils/agreementImportExport/adapters/adapterRegistry.js");

// Export service
var {
  exportAgreements,
  triggerDownload
} = __webpack_require__(/*! ./exportService */ "./src/utils/agreementImportExport/exportService.js");

// Import service
var {
  parseFile,
  applyMappings,
  detectDuplicates,
  mergeAgreements,
  buildDryRun,
  executeImport
} = __webpack_require__(/*! ./importService */ "./src/utils/agreementImportExport/importService.js");
module.exports = {
  // Fields
  AGREEMENT_FIELDS,
  FIELD_CATEGORIES,
  getAgreementFields,
  getFieldsByCategory,
  getRequiredFields,
  getFieldByKey,
  getExportableFieldKeys,
  // Type coercion
  parseNumber,
  detectNumberColumn,
  parseDate,
  toISOString,
  detectDateColumn,
  parseBoolean,
  detectBooleanColumn,
  normalizeEmail,
  normalizePhone,
  coerceValue,
  detectColumnType,
  // Field mapping
  autoMapHeaders,
  getAvailableTargetFields,
  scoreMatch,
  // Validation
  validateRow,
  validateRows,
  // Adapters
  registerAdapter,
  getAdapter,
  getAvailableFormats,
  getComingSoonFormats,
  // Export
  exportAgreements,
  triggerDownload,
  // Import
  parseFile,
  applyMappings,
  detectDuplicates,
  mergeAgreements,
  buildDryRun,
  executeImport
};/**
 * Canonical agreement field definitions derived from the actual codebase schema.
 *
 * Each field includes:
 *  - key: the camelCase property name used in API payloads
 *  - label: human-readable name for UI display
 *  - category: grouping for the field selector / mapping UI
 *  - type: expected data type ('string' | 'number' | 'date' | 'boolean')
 *  - required: whether the field is required for import
 *  - aliases: common column header synonyms used for auto-mapping
 *  - dbColumn: the lowercase postgres column name (where it differs from key)
 */

var FIELD_CATEGORIES = {
  identity: 'Identity & Status',
  borrower: 'Borrower / Business',
  address: 'Address',
  companyAddress: 'Company Mailing Address',
  financial: 'Financial',
  dates: 'Dates',
  guarantor: 'Guarantor',
  loanOfficer: 'Loan Officer / Owner',
  application: 'Application',
  other: 'Other'
};
var AGREEMENT_FIELDS = [
// --- Identity & Status ---
{
  key: 'accountNumber',
  label: 'Account Number',
  category: 'identity',
  type: 'string',
  required: false,
  aliases: ['account number', 'account_number', 'account_no', 'acct', 'loan_number', 'loan number', 'loan_no'],
  dbColumn: 'accountnumber'
}, {
  key: 'status',
  label: 'Status',
  category: 'identity',
  type: 'string',
  required: false,
  aliases: ['status', 'loan_status', 'loan status', 'state', 'agreement_status'],
  dbColumn: 'status'
}, {
  key: 'processId',
  label: 'Process ID',
  category: 'identity',
  type: 'string',
  required: false,
  aliases: ['process_id', 'process id', 'processid'],
  dbColumn: 'processid'
}, {
  key: 'archived',
  label: 'Archived',
  category: 'identity',
  type: 'boolean',
  required: false,
  aliases: ['archived', 'is_archived'],
  dbColumn: 'archived'
},
// --- Borrower / Business ---
{
  key: 'borrowerFirstName',
  label: 'Business Name',
  category: 'borrower',
  type: 'string',
  required: true,
  aliases: ['business name', 'business_name', 'businessname', 'company', 'company_name', 'company name', 'borrower', 'borrower_first_name', 'borrower first name', 'first name', 'first_name', 'entity_name', 'entity name', 'name'],
  dbColumn: 'borrowerfirstname'
}, {
  key: 'borrowerLastName',
  label: 'Contact Last Name',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['last name', 'last_name', 'borrower_last_name', 'borrower last name', 'surname', 'contact_last_name'],
  dbColumn: 'borrowerlastname'
}, {
  key: 'borrowerMiddleName',
  label: 'Borrower Middle Name',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['middle name', 'middle_name', 'borrower_middle_name'],
  dbColumn: 'borrowermiddlename'
}, {
  key: 'borrowerNamePrefix',
  label: 'Borrower Name Prefix',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['prefix', 'name_prefix', 'title'],
  dbColumn: 'borrowernameprefix'
}, {
  key: 'borrowerNameSuffix',
  label: 'Borrower Name Suffix',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['suffix', 'name_suffix'],
  dbColumn: 'borrowernamesuffix'
}, {
  key: 'borrowerEmail',
  label: 'Email',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['email', 'borrower_email', 'borrower email', 'contact_email', 'contact email', 'email_address'],
  dbColumn: 'borroweremail'
}, {
  key: 'borrowerTelephoneNumber',
  label: 'Phone',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['phone', 'telephone', 'phone_number', 'phone number', 'borrower_phone', 'contact_phone', 'tel'],
  dbColumn: 'borrowertelephonenumber'
}, {
  key: 'businessName',
  label: 'Business Name (alt)',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['dba', 'doing_business_as', 'trade_name'],
  dbColumn: 'businessname'
}, {
  key: 'businessOwnerName',
  label: 'Business Owner Name',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['owner name', 'owner_name', 'business_owner', 'business owner'],
  dbColumn: 'businessownername'
}, {
  key: 'companyName',
  label: 'Company Name',
  category: 'borrower',
  type: 'string',
  required: false,
  aliases: ['company_name', 'organization', 'org_name'],
  dbColumn: 'companyname'
},
// --- Address ---
{
  key: 'borrowerStreet',
  label: 'Street',
  category: 'address',
  type: 'string',
  required: false,
  aliases: ['street', 'address', 'street_address', 'address_line_1', 'address1'],
  dbColumn: 'borrowerstreet'
}, {
  key: 'borrowerCity',
  label: 'City',
  category: 'address',
  type: 'string',
  required: false,
  aliases: ['city', 'borrower_city'],
  dbColumn: 'borrowercity'
}, {
  key: 'borrowerState',
  label: 'State',
  category: 'address',
  type: 'string',
  required: false,
  aliases: ['state', 'borrower_state', 'province', 'region'],
  dbColumn: 'borrowerstate'
}, {
  key: 'borrowerZipCode',
  label: 'Zip Code',
  category: 'address',
  type: 'string',
  required: false,
  aliases: ['zip', 'zip_code', 'zipcode', 'postal_code', 'postal code'],
  dbColumn: 'borrowerzipcode'
}, {
  key: 'borrowerCounty',
  label: 'County',
  category: 'address',
  type: 'string',
  required: false,
  aliases: ['county', 'borrower_county'],
  dbColumn: 'borrowercounty'
},
// --- Company Mailing Address ---
{
  key: 'companyMailingStreet',
  label: 'Company Mailing Street',
  category: 'companyAddress',
  type: 'string',
  required: false,
  aliases: ['mailing_street', 'mailing street', 'company_street'],
  dbColumn: 'companymailingstreet'
}, {
  key: 'companyMailingCity',
  label: 'Company Mailing City',
  category: 'companyAddress',
  type: 'string',
  required: false,
  aliases: ['mailing_city', 'mailing city', 'company_city'],
  dbColumn: 'companymailingcity'
}, {
  key: 'companyMailingState',
  label: 'Company Mailing State',
  category: 'companyAddress',
  type: 'string',
  required: false,
  aliases: ['mailing_state', 'mailing state', 'company_state'],
  dbColumn: 'companymailingstate'
}, {
  key: 'companyMailingZip',
  label: 'Company Mailing Zip',
  category: 'companyAddress',
  type: 'string',
  required: false,
  aliases: ['mailing_zip', 'mailing zip', 'company_zip'],
  dbColumn: 'companymailingzip'
}, {
  key: 'companyMailingCounty',
  label: 'Company Mailing County',
  category: 'companyAddress',
  type: 'string',
  required: false,
  aliases: ['mailing_county', 'mailing county', 'company_county'],
  dbColumn: 'companymailingcounty'
},
// --- Financial ---
{
  key: 'loanAmount',
  label: 'Loan Amount',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['loan_amount', 'loan amount', 'amount', 'requested_amount', 'requested amount'],
  dbColumn: 'loanamount'
}, {
  key: 'principal',
  label: 'Principal',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['principal', 'principal_amount', 'original_amount', 'original amount'],
  dbColumn: 'principal'
}, {
  key: 'approvedTotal',
  label: 'Approved Total',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['approved_total', 'approved total', 'approved_amount', 'approved amount'],
  dbColumn: 'approvedtotal'
}, {
  key: 'principalBalance',
  label: 'Principal Balance',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['principal_balance', 'principal balance', 'balance', 'outstanding_balance', 'remaining_balance'],
  dbColumn: 'principalbalance'
}, {
  key: 'interestRate',
  label: 'Interest Rate',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['interest_rate', 'interest rate', 'rate', 'apr', 'interest'],
  dbColumn: 'interestrate'
}, {
  key: 'interestBalance',
  label: 'Interest Balance',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['interest_balance', 'interest balance', 'accrued_interest'],
  dbColumn: 'interestbalance'
}, {
  key: 'feesBalance',
  label: 'Fees Balance',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['fees_balance', 'fees balance', 'fees', 'outstanding_fees'],
  dbColumn: 'feesbalance'
}, {
  key: 'unpaidTotal',
  label: 'Unpaid Total',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['unpaid_total', 'unpaid total', 'total_due', 'amount_due'],
  dbColumn: 'unpaidtotal'
}, {
  key: 'term',
  label: 'Term (months)',
  category: 'financial',
  type: 'number',
  required: false,
  aliases: ['term', 'loan_term', 'loan term', 'term_months', 'duration'],
  dbColumn: 'term'
}, {
  key: 'loanType',
  label: 'Loan Type',
  category: 'financial',
  type: 'string',
  required: false,
  aliases: ['loan_type', 'loan type', 'product_type', 'product type', 'type'],
  dbColumn: 'loantype'
}, {
  key: 'repaymentType',
  label: 'Repayment Type',
  category: 'financial',
  type: 'string',
  required: false,
  aliases: ['repayment_type', 'repayment type', 'payment_type', 'payment_method'],
  dbColumn: 'repaymenttype'
}, {
  key: 'loanFundName',
  label: 'Loan Fund Name',
  category: 'financial',
  type: 'string',
  required: false,
  aliases: ['fund_name', 'fund name', 'loan_fund', 'funding_source'],
  dbColumn: 'loanfundname'
}, {
  key: 'loanSubFundName',
  label: 'Loan Sub-Fund Name',
  category: 'financial',
  type: 'string',
  required: false,
  aliases: ['sub_fund', 'sub_fund_name', 'subfund'],
  dbColumn: 'loansubfundname'
},
// --- Dates ---
{
  key: 'dateCreated',
  label: 'Date Created',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['date_created', 'date created', 'created', 'created_date', 'created_at', 'creation_date'],
  dbColumn: 'datecreated'
}, {
  key: 'dateModified',
  label: 'Date Modified',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['date_modified', 'date modified', 'modified', 'updated', 'updated_at', 'last_modified'],
  dbColumn: 'datemodified'
}, {
  key: 'startDate',
  label: 'Start Date',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['start_date', 'start date', 'origination_date', 'origination date', 'funding_date'],
  dbColumn: 'startdate'
}, {
  key: 'endDate',
  label: 'End Date',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['end_date', 'end date', 'maturity_date', 'maturity date', 'expiration_date'],
  dbColumn: 'enddate'
}, {
  key: 'closingDate',
  label: 'Closing Date',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['closing_date', 'closing date', 'close_date'],
  dbColumn: 'closingdate'
}, {
  key: 'firstScheduledPaymentDate',
  label: 'First Payment Date',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['first_payment_date', 'first payment date', 'first_payment'],
  dbColumn: 'firstscheduledpaymentdate'
}, {
  key: 'nextScheduledPaymentDate',
  label: 'Next Payment Date',
  category: 'dates',
  type: 'date',
  required: false,
  aliases: ['next_payment_date', 'next payment date', 'next_payment'],
  dbColumn: 'nextscheduledpaymentdate'
}, {
  key: 'nextScheduledPaymentAmount',
  label: 'Next Payment Amount',
  category: 'dates',
  type: 'number',
  required: false,
  aliases: ['next_payment_amount', 'next payment amount', 'payment_amount', 'monthly_payment'],
  dbColumn: 'nextscheduledpaymentamount'
}, {
  key: 'graceTerm',
  label: 'Grace Period (months)',
  category: 'dates',
  type: 'number',
  required: false,
  aliases: ['grace_term', 'grace term', 'grace_period', 'grace period'],
  dbColumn: 'graceterm'
},
// --- Guarantor ---
{
  key: 'guarantorFirstName',
  label: 'Guarantor First Name',
  category: 'guarantor',
  type: 'string',
  required: false,
  aliases: ['guarantor_first_name', 'guarantor first name', 'guarantor_first', 'guarantor'],
  dbColumn: 'guarantorfirstname'
}, {
  key: 'guarantorLastName',
  label: 'Guarantor Last Name',
  category: 'guarantor',
  type: 'string',
  required: false,
  aliases: ['guarantor_last_name', 'guarantor last name', 'guarantor_last'],
  dbColumn: 'guarantorlastname'
}, {
  key: 'guarantorName',
  label: 'Guarantor Full Name',
  category: 'guarantor',
  type: 'string',
  required: false,
  aliases: ['guarantor_name', 'guarantor name', 'guarantor_full_name'],
  dbColumn: 'guarantorname'
}, {
  key: 'guarantorEntityName',
  label: 'Guarantor Entity',
  category: 'guarantor',
  type: 'string',
  required: false,
  aliases: ['guarantor_entity', 'guarantor entity', 'guarantor_entity_name', 'guarantor_company'],
  dbColumn: 'guarantorentityname'
},
// --- Loan Officer / Owner ---
{
  key: 'primaryLoanOfficerEmail',
  label: 'Loan Officer Email',
  category: 'loanOfficer',
  type: 'string',
  required: false,
  aliases: ['loan_officer_email', 'loan officer email', 'officer_email', 'lo_email', 'assigned_to'],
  dbColumn: 'primaryloanofficeremail'
}, {
  key: 'ownerEmail',
  label: 'Owner Email',
  category: 'loanOfficer',
  type: 'string',
  required: false,
  aliases: ['owner_email', 'owner email'],
  dbColumn: 'owneremail'
},
// --- Application ---
{
  key: 'applicationDecision',
  label: 'Application Decision',
  category: 'application',
  type: 'string',
  required: false,
  aliases: ['application_decision', 'application decision', 'decision'],
  dbColumn: 'applicationdecision'
}, {
  key: 'applicationPipelineStatus',
  label: 'Pipeline Status',
  category: 'application',
  type: 'string',
  required: false,
  aliases: ['pipeline_status', 'pipeline status', 'application_status'],
  dbColumn: 'applicationpipelinestatus'
}, {
  key: 'description',
  label: 'Description',
  category: 'application',
  type: 'string',
  required: false,
  aliases: ['description', 'notes', 'comments', 'memo'],
  dbColumn: 'description'
},
// --- Other ---
{
  key: 'migratedLoanIdentifier',
  label: 'Migrated Loan ID',
  category: 'other',
  type: 'string',
  required: false,
  aliases: ['migrated_loan_id', 'migrated loan id', 'external_id', 'external id', 'source_id', 'legacy_id', 'original_id'],
  dbColumn: 'migratedloanidentifier'
}, {
  key: 'portfolioSelectionName',
  label: 'Portfolio',
  category: 'other',
  type: 'string',
  required: false,
  aliases: ['portfolio', 'portfolio_name', 'portfolio name'],
  dbColumn: 'portfolioselectionname'
}, {
  key: 'campaignId',
  label: 'Campaign ID',
  category: 'other',
  type: 'string',
  required: false,
  aliases: ['campaign_id', 'campaign id', 'campaign'],
  dbColumn: 'campaignid'
}];

/**
 * Returns all field definitions.
 */
function getAgreementFields() {
  return AGREEMENT_FIELDS;
}

/**
 * Returns field definitions grouped by category.
 */
function getFieldsByCategory() {
  var grouped = {};
  AGREEMENT_FIELDS.forEach(field => {
    if (!grouped[field.category]) {
      grouped[field.category] = {
        label: FIELD_CATEGORIES[field.category] || field.category,
        fields: []
      };
    }
    grouped[field.category].fields.push(field);
  });
  return grouped;
}

/**
 * Returns only the required field definitions.
 */
function getRequiredFields() {
  return AGREEMENT_FIELDS.filter(f => f.required);
}

/**
 * Look up a field definition by key.
 */
function getFieldByKey(key) {
  return AGREEMENT_FIELDS.find(f => f.key === key) || null;
}

/**
 * Returns an array of field keys suitable for export (excludes internal-only fields).
 */
function getExportableFieldKeys() {
  return AGREEMENT_FIELDS.map(f => f.key);
}
module.exports = {
  AGREEMENT_FIELDS,
  FIELD_CATEGORIES,
  getAgreementFields,
  getFieldsByCategory,
  getRequiredFields,
  getFieldByKey,
  getExportableFieldKeys
};/**
 * Type coercion utilities for import data.
 *
 * Handles detecting and converting string values from CSV/JSON into the
 * appropriate types (numbers, dates, booleans) for agreement fields.
 */

// --- Number coercion ---

var CURRENCY_REGEX = /^[\s]*[($€£¥]*[\s]*([-(]?)[\s]*([0-9,]+\.?[0-9]*)[\s]*[)%]?[\s]*[)$€£¥]*[\s]*$/;

/**
 * Attempt to parse a string as a number. Handles:
 *  - Currency symbols: $1,234.56 → 1234.56
 *  - Commas as thousands separators: 1,234,567 → 1234567
 *  - Accounting negatives: (1,234.56) → -1234.56
 *  - Percentages: 5.5% → 0.055 (when asDecimal=true) or 5.5 (when asDecimal=false)
 *
 * Returns { value: number, isPercentage: boolean } or null if not parseable.
 */
function parseNumber(str) {
  var {
    asDecimal = false
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  if (str == null || str === '') return null;
  var s = String(str).trim();
  if (s === '') return null;
  var isPercentage = s.includes('%');
  var isNegative = s.includes('(') && s.includes(')') || s.startsWith('-');

  // Strip everything except digits, dots, and minus signs
  var cleaned = s.replace(/[$€£¥,\s]/g, '').replace(/[()]/g, '').replace(/%/g, '');
  if (cleaned === '' || cleaned === '-' || cleaned === '.') return null;
  var num = Number(cleaned);
  if (isNaN(num)) return null;
  var value = isNegative && num > 0 ? -num : num;
  if (isPercentage && asDecimal) {
    value = value / 100;
  }
  return {
    value,
    isPercentage
  };
}

/**
 * Detect whether a column of values is likely numeric.
 * Returns { isNumeric: boolean, hasPercentages: boolean, sampleParsed: Array }
 */
function detectNumberColumn(values) {
  var nonEmpty = values.filter(v => v != null && String(v).trim() !== '');
  if (nonEmpty.length === 0) return {
    isNumeric: false,
    hasPercentages: false,
    sampleParsed: []
  };
  var parsedCount = 0;
  var percentCount = 0;
  var sampleParsed = [];
  nonEmpty.forEach(v => {
    var result = parseNumber(v);
    if (result) {
      parsedCount++;
      if (result.isPercentage) percentCount++;
      if (sampleParsed.length < 5) {
        sampleParsed.push({
          raw: v,
          parsed: result.value,
          isPercentage: result.isPercentage
        });
      }
    }
  });
  var ratio = parsedCount / nonEmpty.length;
  return {
    isNumeric: ratio >= 0.8,
    hasPercentages: percentCount > 0 && percentCount / parsedCount >= 0.5,
    sampleParsed
  };
}

// --- Date coercion ---

var DATE_FORMATS = [{
  name: 'ISO',
  regex: /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}.*)?$/,
  parse: parseISO
}, {
  name: 'MM/DD/YYYY',
  regex: /^\d{1,2}\/\d{1,2}\/\d{4}$/,
  parse: parseMDY
}, {
  name: 'MM-DD-YYYY',
  regex: /^\d{1,2}-\d{1,2}-\d{4}$/,
  parse: s => parseMDY(s.replace(/-/g, '/'))
}, {
  name: 'M/D/YY',
  regex: /^\d{1,2}\/\d{1,2}\/\d{2}$/,
  parse: parseMDYShort
}, {
  name: 'YYYY/MM/DD',
  regex: /^\d{4}\/\d{2}\/\d{2}$/,
  parse: s => {
    var [y, m, d] = s.split('/');
    return makeDate(y, m, d);
  }
}, {
  name: 'Mon DD, YYYY',
  regex: /^[A-Za-z]{3,9}\s+\d{1,2},?\s+\d{4}$/,
  parse: s => new Date(s)
}, {
  name: 'DD-Mon-YYYY',
  regex: /^\d{1,2}-[A-Za-z]{3}-\d{4}$/,
  parse: s => new Date(s)
}, {
  name: 'DD Mon YYYY',
  regex: /^\d{1,2}\s+[A-Za-z]{3,9}\s+\d{4}$/,
  parse: s => new Date(s)
}];
function makeDate(y, m, d) {
  var year = Number(y);
  var month = Number(m) - 1;
  var day = Number(d);
  if (month < 0 || month > 11 || day < 1 || day > 31) return null;
  var date = new Date(year, month, day);
  if (isNaN(date.getTime())) return null;
  // Verify the date wasn't rolled forward by JS (e.g. Feb 31 → Mar 3)
  if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) return null;
  return date;
}
function parseISO(s) {
  // For date-only ISO strings (YYYY-MM-DD), validate via makeDate to reject impossible dates
  var dateOnly = s.match(/^(\d{4})-(\d{2})-(\d{2})$/);
  if (dateOnly) {
    return makeDate(dateOnly[1], dateOnly[2], dateOnly[3]);
  }
  // For datetime strings with time component, use native parsing but still verify the date part
  var dtMatch = s.match(/^(\d{4})-(\d{2})-(\d{2})T/);
  if (dtMatch) {
    var check = makeDate(dtMatch[1], dtMatch[2], dtMatch[3]);
    if (!check) return null;
  }
  return new Date(s);
}
function parseMDY(s) {
  var parts = s.split('/');
  return makeDate(parts[2], parts[0], parts[1]);
}
function parseMDYShort(s) {
  var parts = s.split('/');
  var year = Number(parts[2]);
  year = year < 50 ? 2000 + year : 1900 + year;
  return makeDate(year, parts[0], parts[1]);
}

/**
 * Attempt to parse a string as a date.
 * Returns { value: Date, format: string } or null.
 */
function parseDate(str) {
  if (str == null || str === '') return null;
  var s = String(str).trim();
  if (s === '') return null;

  // Try unix timestamp (seconds or milliseconds)
  if (/^\d{10,13}$/.test(s)) {
    var ts = Number(s);
    var date = s.length >= 13 ? new Date(ts) : new Date(ts * 1000);
    if (!isNaN(date.getTime()) && date.getFullYear() > 1970 && date.getFullYear() < 2100) {
      return {
        value: date,
        format: s.length >= 13 ? 'Unix ms' : 'Unix s'
      };
    }
  }
  for (var fmt of DATE_FORMATS) {
    if (fmt.regex.test(s)) {
      var _date = fmt.parse(s);
      if (_date && !isNaN(_date.getTime()) && _date.getFullYear() > 1900 && _date.getFullYear() < 2100) {
        return {
          value: _date,
          format: fmt.name
        };
      }
    }
  }
  return null;
}

/**
 * Convert a Date to ISO 8601 string for storage.
 */
function toISOString(date) {
  if (!date || isNaN(date.getTime())) return null;
  return date.toISOString();
}

/**
 * Detect the date format for a column of values.
 * Handles ambiguity: if all values could be MM/DD or DD/MM, flags it.
 *
 * Returns {
 *   isDate: boolean,
 *   detectedFormat: string | null,
 *   isAmbiguous: boolean,    // true if MM/DD vs DD/MM can't be determined
 *   sampleParsed: Array,
 * }
 */
function detectDateColumn(values) {
  var _Object$entries$sort$;
  var nonEmpty = values.filter(v => v != null && String(v).trim() !== '');
  if (nonEmpty.length === 0) return {
    isDate: false,
    detectedFormat: null,
    isAmbiguous: false,
    sampleParsed: []
  };
  var parsedCount = 0;
  var formatCounts = {};
  var sampleParsed = [];
  var hasValueAbove12InFirstPosition = false;
  var hasValueAbove12InSecondPosition = false;
  nonEmpty.forEach(v => {
    var result = parseDate(String(v).trim());
    if (result) {
      parsedCount++;
      formatCounts[result.format] = (formatCounts[result.format] || 0) + 1;
      if (sampleParsed.length < 5) {
        sampleParsed.push({
          raw: v,
          parsed: result.value.toISOString(),
          format: result.format
        });
      }
    }

    // Check for DD/MM vs MM/DD ambiguity
    var slashMatch = String(v).trim().match(/^(\d{1,2})[/-](\d{1,2})[/-]\d{2,4}$/);
    if (slashMatch) {
      if (Number(slashMatch[1]) > 12) hasValueAbove12InFirstPosition = true;
      if (Number(slashMatch[2]) > 12) hasValueAbove12InSecondPosition = true;
    }
  });
  var ratio = parsedCount / nonEmpty.length;
  if (ratio < 0.8) return {
    isDate: false,
    detectedFormat: null,
    isAmbiguous: false,
    sampleParsed: []
  };

  // Determine the most common format
  var detectedFormat = ((_Object$entries$sort$ = Object.entries(formatCounts).sort((a, b) => b[1] - a[1])[0]) === null || _Object$entries$sort$ === void 0 ? void 0 : _Object$entries$sort$[0]) || null;

  // Ambiguity: if neither position has a value > 12, we can't tell MM/DD from DD/MM
  var isSlashFormat = detectedFormat === 'MM/DD/YYYY' || detectedFormat === 'MM-DD-YYYY' || detectedFormat === 'M/D/YY';
  var isAmbiguous = isSlashFormat && !hasValueAbove12InFirstPosition && !hasValueAbove12InSecondPosition;
  return {
    isDate: true,
    detectedFormat,
    isAmbiguous,
    sampleParsed
  };
}

// --- Boolean coercion ---

var TRUE_VALUES = new Set(['true', 'yes', '1', 't', 'y']);
var FALSE_VALUES = new Set(['false', 'no', '0', 'f', 'n']);

/**
 * Parse a string as a boolean. Returns true, false, or null if not recognized.
 */
function parseBoolean(str) {
  if (str == null || str === '') return null;
  var s = String(str).trim().toLowerCase();
  if (TRUE_VALUES.has(s)) return true;
  if (FALSE_VALUES.has(s)) return false;
  return null;
}

/**
 * Detect whether a column of values is likely boolean.
 */
function detectBooleanColumn(values) {
  var nonEmpty = values.filter(v => v != null && String(v).trim() !== '');
  if (nonEmpty.length === 0) return false;
  var parsedCount = 0;
  nonEmpty.forEach(v => {
    if (parseBoolean(v) !== null) parsedCount++;
  });
  return parsedCount / nonEmpty.length >= 0.8;
}

// --- String cleanup ---

/**
 * Normalize an email address: trim and lowercase.
 */
function normalizeEmail(str) {
  if (!str) return str;
  return String(str).trim().toLowerCase();
}

/**
 * Normalize a phone number: strip non-digits, format as (XXX) XXX-XXXX for US numbers.
 */
function normalizePhone(str) {
  if (!str) return str;
  var digits = String(str).replace(/\D/g, '');
  if (digits.length === 10) {
    return "(".concat(digits.slice(0, 3), ") ").concat(digits.slice(3, 6), "-").concat(digits.slice(6));
  }
  if (digits.length === 11 && digits[0] === '1') {
    return "(".concat(digits.slice(1, 4), ") ").concat(digits.slice(4, 7), "-").concat(digits.slice(7));
  }
  return String(str).trim();
}

/**
 * Apply type coercion to a single value based on the target field type.
 *
 * Returns { value: any, warning: string | null }
 */
function coerceValue(rawValue, fieldType) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  if (rawValue == null || rawValue === '') return {
    value: null,
    warning: null
  };
  var str = String(rawValue).trim();
  if (str === '') return {
    value: null,
    warning: null
  };
  switch (fieldType) {
    case 'number':
      {
        var result = parseNumber(str, {
          asDecimal: options.asDecimal
        });
        if (!result) return {
          value: str,
          warning: "Could not parse \"".concat(str, "\" as a number")
        };
        return {
          value: result.value,
          warning: null
        };
      }
    case 'date':
      {
        var _result = parseDate(str);
        if (!_result) return {
          value: str,
          warning: "Could not parse \"".concat(str, "\" as a date")
        };
        return {
          value: toISOString(_result.value),
          warning: null
        };
      }
    case 'boolean':
      {
        var _result2 = parseBoolean(str);
        if (_result2 === null) return {
          value: str,
          warning: "Could not parse \"".concat(str, "\" as boolean")
        };
        return {
          value: _result2,
          warning: null
        };
      }
    default:
      return {
        value: str,
        warning: null
      };
  }
}

/**
 * Auto-detect the likely type of a column from sample values.
 * Returns 'number' | 'date' | 'boolean' | 'string'
 */
function detectColumnType(values) {
  if (detectBooleanColumn(values)) return 'boolean';
  var numResult = detectNumberColumn(values);
  if (numResult.isNumeric) return 'number';
  var dateResult = detectDateColumn(values);
  if (dateResult.isDate) return 'date';
  return 'string';
}
module.exports = {
  parseNumber,
  detectNumberColumn,
  parseDate,
  toISOString,
  detectDateColumn,
  parseBoolean,
  detectBooleanColumn,
  normalizeEmail,
  normalizePhone,
  coerceValue,
  detectColumnType
};/**
 * Field mapping engine for import.
 *
 * Takes source column headers from an uploaded file and maps them to
 * canonical agreement fields using exact match, case-insensitive match,
 * alias/synonym match, and fuzzy substring match — each with a confidence score.
 */
var {
  AGREEMENT_FIELDS
} = __webpack_require__(/*! ./agreementFields */ "./src/utils/agreementImportExport/agreementFields.js");

/**
 * Normalize a string for comparison: lowercase, trim, collapse whitespace,
 * strip non-alphanumeric (except spaces).
 */
function normalize(str) {
  return String(str || '').toLowerCase().trim().replace(/[^a-z0-9\s]/g, ' ').replace(/\s+/g, ' ').trim();
}

/**
 * Convert a camelCase key to space-separated words.
 * e.g. "borrowerFirstName" → "borrower first name"
 */
function camelToWords(str) {
  return str.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();
}

/**
 * Score how well a source header matches a target field.
 * Returns a number 0–100, or 0 if no match.
 */
function scoreMatch(sourceHeader, field) {
  var src = normalize(sourceHeader);
  if (!src) return 0;
  var keyNorm = normalize(field.key);
  var keyWords = camelToWords(field.key);
  var labelNorm = normalize(field.label);
  var dbColNorm = normalize(field.dbColumn || '');

  // Exact key match
  if (src === keyNorm || src === keyWords) return 100;
  // Exact label match
  if (src === labelNorm) return 95;
  // Exact dbColumn match
  if (dbColNorm && src === dbColNorm) return 95;

  // Alias exact match
  for (var alias of field.aliases) {
    if (src === normalize(alias)) return 90;
  }

  // Key/label contains source or source contains key/label
  if (src.includes(keyWords) || keyWords.includes(src)) return 70;
  if (src.includes(labelNorm) || labelNorm.includes(src)) return 65;

  // Alias substring match
  for (var _alias of field.aliases) {
    var aliasNorm = normalize(_alias);
    if (src.includes(aliasNorm) || aliasNorm.includes(src)) return 60;
  }
  return 0;
}

/**
 * Auto-map an array of source column headers to agreement fields.
 *
 * Returns an array of mapping objects:
 * [
 *   {
 *     sourceHeader: 'Business Name',
 *     targetField: { ...fieldDef } | null,
 *     confidence: 90,
 *     alternatives: [{ field, confidence }, ...],  // other possible matches
 *   },
 *   ...
 * ]
 *
 * Rules:
 *  - Each target field can only be mapped once (highest-confidence source wins)
 *  - Unmapped sources get targetField: null
 *  - confidence < 70 are treated as "needs review" in the UI
 */
function autoMapHeaders(sourceHeaders) {
  // Score every source header against every field
  var allScores = sourceHeaders.map(header => {
    var scores = AGREEMENT_FIELDS.map(field => ({
      field,
      confidence: scoreMatch(header, field)
    })).filter(s => s.confidence > 0).sort((a, b) => b.confidence - a.confidence);
    return {
      sourceHeader: header,
      scores
    };
  });

  // Greedy assignment: iterate by highest confidence first, assign each target field once
  var assignedTargets = new Set();
  var mappings = sourceHeaders.map(() => null);

  // Build a flat list of (sourceIndex, field, confidence) sorted by confidence desc
  var candidates = [];
  allScores.forEach((entry, sourceIndex) => {
    entry.scores.forEach(s => {
      candidates.push({
        sourceIndex,
        field: s.field,
        confidence: s.confidence
      });
    });
  });
  candidates.sort((a, b) => b.confidence - a.confidence);

  // Assign greedily
  var assignedSources = new Set();
  var _loop = function _loop(candidate) {
      if (assignedSources.has(candidate.sourceIndex)) return 0; // continue
      if (assignedTargets.has(candidate.field.key)) return 0; // continue
      assignedSources.add(candidate.sourceIndex);
      assignedTargets.add(candidate.field.key);
      var alternatives = allScores[candidate.sourceIndex].scores.filter(s => s.field.key !== candidate.field.key).slice(0, 3);
      mappings[candidate.sourceIndex] = {
        sourceHeader: sourceHeaders[candidate.sourceIndex],
        targetField: candidate.field,
        confidence: candidate.confidence,
        alternatives
      };
    },
    _ret;
  for (var candidate of candidates) {
    _ret = _loop(candidate);
    if (_ret === 0) continue;
  }

  // Fill in unmapped sources
  return sourceHeaders.map((header, i) => {
    if (mappings[i]) return mappings[i];
    return {
      sourceHeader: header,
      targetField: null,
      confidence: 0,
      alternatives: allScores[i].scores.slice(0, 3)
    };
  });
}

/**
 * Get all available target fields (for populating mapping dropdowns).
 */
function getAvailableTargetFields() {
  return AGREEMENT_FIELDS.map(f => ({
    key: f.key,
    label: f.label,
    category: f.category,
    required: f.required
  }));
}
module.exports = {
  autoMapHeaders,
  getAvailableTargetFields,
  scoreMatch,
  normalize
};/**
 * Row-level validation for imported agreement data.
 *
 * Validates each row against the field definitions and type requirements,
 * producing per-row error lists that the UI can display.
 */
var {
  getRequiredFields,
  getFieldByKey
} = __webpack_require__(/*! ./agreementFields */ "./src/utils/agreementImportExport/agreementFields.js");
var {
  coerceValue,
  normalizeEmail,
  normalizePhone
} = __webpack_require__(/*! ./typeCoercion */ "./src/utils/agreementImportExport/typeCoercion.js");

/**
 * Validate and coerce a single row of mapped data.
 *
 * @param {Object} row - Raw row data keyed by target field key (after mapping)
 * @param {number} rowIndex - 0-based row index (for error messages)
 * @param {Object} options
 * @param {boolean} options.asDecimalPercent - Whether to store percentages as decimals
 * @returns {{ row: Object, errors: Array<{ row: number, field: string, message: string }>, warnings: Array }}
 */
function validateRow(row, rowIndex) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  var errors = [];
  var warnings = [];
  var coercedRow = {};

  // Check required fields
  var requiredFields = getRequiredFields();
  for (var field of requiredFields) {
    var value = row[field.key];
    if (value == null || String(value).trim() === '') {
      errors.push({
        row: rowIndex + 1,
        field: field.key,
        message: "".concat(field.label, " is required")
      });
    }
  }

  // Coerce and validate each field present in the row
  for (var [key, rawValue] of Object.entries(row)) {
    if (rawValue == null || rawValue === '') {
      coercedRow[key] = null;
      continue;
    }
    var fieldDef = getFieldByKey(key);
    if (!fieldDef) {
      // Unknown field — pass through as string
      coercedRow[key] = String(rawValue).trim();
      continue;
    }

    // Apply type coercion
    var coercionOpts = {};
    if (fieldDef.key === 'interestRate') {
      coercionOpts.asDecimal = !!options.asDecimalPercent;
    }
    var {
      value: _value,
      warning
    } = coerceValue(rawValue, fieldDef.type, coercionOpts);
    coercedRow[key] = _value;
    if (warning) {
      warnings.push({
        row: rowIndex + 1,
        field: key,
        message: warning
      });
    }

    // Field-specific normalization
    if (key === 'borrowerEmail' && typeof _value === 'string') {
      coercedRow[key] = normalizeEmail(_value);
    }
    if (key === 'borrowerTelephoneNumber' && typeof _value === 'string') {
      coercedRow[key] = normalizePhone(_value);
    }
  }
  return {
    row: coercedRow,
    errors,
    warnings
  };
}

/**
 * Validate an array of mapped rows.
 *
 * @param {Array<Object>} rows - Array of row objects keyed by target field key
 * @param {Object} options
 * @returns {{
 *   validRows: Array<{ index: number, row: Object }>,
 *   invalidRows: Array<{ index: number, row: Object, errors: Array }>,
 *   allWarnings: Array,
 *   summary: { total: number, valid: number, invalid: number }
 * }}
 */
function validateRows(rows) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var validRows = [];
  var invalidRows = [];
  var allWarnings = [];
  rows.forEach((row, i) => {
    var result = validateRow(row, i, options);
    allWarnings.push(...result.warnings);
    if (result.errors.length > 0) {
      invalidRows.push({
        index: i,
        row: result.row,
        errors: result.errors
      });
    } else {
      validRows.push({
        index: i,
        row: result.row
      });
    }
  });
  return {
    validRows,
    invalidRows,
    allWarnings,
    summary: {
      total: rows.length,
      valid: validRows.length,
      invalid: invalidRows.length
    }
  };
}
module.exports = {
  validateRow,
  validateRows
};/**
 * Adapter registry for format adapters.
 *
 * Provides a central place to register and look up format adapters by name
 * or by File object. Extensible — new adapters (competitor formats, Excel, etc.)
 * can be registered at any time.
 */
var CsvAdapter = __webpack_require__(/*! ./CsvAdapter */ "./src/utils/agreementImportExport/adapters/CsvAdapter.js");
var JsonAdapter = __webpack_require__(/*! ./JsonAdapter */ "./src/utils/agreementImportExport/adapters/JsonAdapter.js");
var ExcelAdapter = __webpack_require__(/*! ./ExcelAdapter */ "./src/utils/agreementImportExport/adapters/ExcelAdapter.js");
var NorthridgeAdapter = __webpack_require__(/*! ./NorthridgeAdapter */ "./src/utils/agreementImportExport/adapters/NorthridgeAdapter.js");
var registry = new Map();

/**
 * Formats that are planned but not yet implemented.
 * Shown as "Coming Soon" in the UI.
 */
var COMING_SOON_FORMATS = [{
  name: 'spark',
  label: 'Spark',
  description: 'Import/export from Spark Financial'
}, {
  name: 'numerated',
  label: 'Numerated',
  description: 'Import/export from Numerated'
}, {
  name: 'abrigo',
  label: 'Abrigo',
  description: 'Import/export from Abrigo'
}];

/**
 * Register a format adapter class.
 * @param {typeof import('./BaseFormatAdapter')} AdapterClass
 */
function registerAdapter(AdapterClass) {
  registry.set(AdapterClass.formatName, AdapterClass);
}

/**
 * Get an adapter by format name (e.g. 'csv', 'json') or by File object.
 * @param {string|File} formatOrFile
 * @returns {typeof import('./BaseFormatAdapter')|null}
 */
function getAdapter(formatOrFile) {
  if (typeof formatOrFile === 'string') {
    return registry.get(formatOrFile.toLowerCase()) || null;
  }

  // File object — detect by extension/mime
  for (var AdapterClass of registry.values()) {
    if (AdapterClass.canHandle(formatOrFile)) {
      return AdapterClass;
    }
  }
  return null;
}

/**
 * Get all registered (active) adapter formats.
 * @returns {Array<{ name: string, label: string, extensions: string[] }>}
 */
function getAvailableFormats() {
  var formats = [];
  for (var AdapterClass of registry.values()) {
    formats.push({
      name: AdapterClass.formatName,
      label: AdapterClass.formatLabel,
      extensions: AdapterClass.extensions,
      preMapped: AdapterClass.preMapped || false
    });
  }
  return formats;
}

/**
 * Get the list of coming-soon (planned but not yet implemented) formats.
 * @returns {Array<{ name: string, label: string, description: string }>}
 */
function getComingSoonFormats() {
  return COMING_SOON_FORMATS;
}

// Register built-in adapters
registerAdapter(CsvAdapter);
registerAdapter(JsonAdapter);
registerAdapter(ExcelAdapter);
registerAdapter(NorthridgeAdapter);
module.exports = {
  registerAdapter,
  getAdapter,
  getAvailableFormats,
  getComingSoonFormats
};var Papa = __webpack_require__(/*! papaparse */ "./node_modules/papaparse/papaparse.min.js");
var BaseFormatAdapter = __webpack_require__(/*! ./BaseFormatAdapter */ "./src/utils/agreementImportExport/adapters/BaseFormatAdapter.js");
class CsvAdapter extends BaseFormatAdapter {
  static get formatName() {
    return 'csv';
  }
  static get formatLabel() {
    return 'CSV';
  }
  static get extensions() {
    return ['.csv'];
  }
  static get mimeTypes() {
    return ['text/csv', 'application/csv'];
  }

  /**
   * Parse CSV string into rows.
   * @param {string} data - CSV file contents
   * @param {Object} options
   * @param {boolean} options.header - Whether first row is headers (default true)
   * @returns {{ rows: Object[], headers: string[], errors: string[] }}
   */
  parse(data) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var {
      header = true
    } = options;
    var errors = [];
    var result = Papa.parse(data, {
      header,
      skipEmptyLines: 'greedy',
      dynamicTyping: false,
      // We handle type coercion ourselves
      transformHeader: h => h.trim()
    });
    if (result.errors && result.errors.length > 0) {
      result.errors.forEach(err => {
        errors.push("Row ".concat(err.row != null ? err.row + 1 : '?', ": ").concat(err.message));
      });
    }
    var rows = result.data || [];
    var headers = result.meta && result.meta.fields ? result.meta.fields : [];

    // Filter out completely empty rows
    var filteredRows = rows.filter(row => {
      return Object.values(row).some(v => v != null && String(v).trim() !== '');
    });
    return {
      rows: filteredRows,
      headers,
      errors
    };
  }

  /**
   * Serialize rows to CSV string and return as Blob.
   * @param {Object[]} rows
   * @param {string[]} fields - Field keys to include
   * @param {Object} options
   * @param {Object} options.fieldLabels - Map of field key → display label for headers
   * @returns {{ blob: Blob, suggestedFilename: string }}
   */
  serialize(rows, fields) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var {
      fieldLabels = {}
    } = options;

    // Build header row using labels if available
    var headerRow = fields.map(f => fieldLabels[f] || f);

    // Build data rows
    var dataRows = rows.map(row => {
      return fields.map(f => {
        var val = row[f];
        if (val == null) return '';
        return String(val);
      });
    });
    var csv = Papa.unparse({
      fields: headerRow,
      data: dataRows
    });
    var blob = new Blob([csv], {
      type: 'text/csv;charset=utf-8;'
    });
    var date = new Date().toISOString().slice(0, 10);
    return {
      blob,
      suggestedFilename: "agreements-export-".concat(date, ".csv")
    };
  }
}
module.exports = CsvAdapter;/**
 * Base class for format adapters.
 *
 * Each adapter handles one file format (CSV, JSON, Excel, etc.).
 * Subclasses must implement parse() and serialize().
 */
class BaseFormatAdapter {
  /**
   * @returns {string} Format identifier, e.g. 'csv', 'json'
   */
  static get formatName() {
    throw new Error('Subclass must define formatName');
  }

  /**
   * @returns {string} Human-readable format label for UI display
   */
  static get formatLabel() {
    return this.formatName.toUpperCase();
  }

  /**
   * @returns {string[]} File extensions this adapter handles, e.g. ['.csv']
   */
  static get extensions() {
    throw new Error('Subclass must define extensions');
  }

  /**
   * @returns {string[]} MIME types this adapter handles
   */
  static get mimeTypes() {
    return [];
  }

  /**
   * @returns {boolean} Whether this adapter's parse() output is already mapped
   * to LoanWell field keys. Competitor format adapters (e.g. Northridge) return true
   * because they handle field mapping internally. Generic adapters (CSV, JSON, Excel)
   * return false — the user maps columns in the wizard.
   */
  static get preMapped() {
    return false;
  }

  /**
   * Check if this adapter can handle the given File object.
   * @param {File} file
   * @returns {boolean}
   */
  static canHandle(file) {
    var name = (file.name || '').toLowerCase();
    var type = file.type || '';
    return this.extensions.some(ext => name.endsWith(ext)) || this.mimeTypes.some(mime => type === mime);
  }

  /**
   * Parse raw file data into structured rows.
   *
   * @param {string|ArrayBuffer} data - File contents
   * @param {Object} options - Format-specific options
   * @returns {{ rows: Object[], headers: string[], errors: string[] }}
   */
  parse(data) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    throw new Error('Subclass must implement parse()');
  }

  /**
   * Serialize rows into a downloadable format.
   *
   * @param {Object[]} rows - Array of objects to serialize
   * @param {string[]} fields - Field keys to include (in order)
   * @param {Object} options - Format-specific options
   * @returns {{ blob: Blob, suggestedFilename: string }}
   */
  serialize(rows, fields) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    throw new Error('Subclass must implement serialize()');
  }
}
module.exports = BaseFormatAdapter;var BaseFormatAdapter = __webpack_require__(/*! ./BaseFormatAdapter */ "./src/utils/agreementImportExport/adapters/BaseFormatAdapter.js");
class JsonAdapter extends BaseFormatAdapter {
  static get formatName() {
    return 'json';
  }
  static get formatLabel() {
    return 'JSON';
  }
  static get extensions() {
    return ['.json'];
  }
  static get mimeTypes() {
    return ['application/json'];
  }

  /**
   * Parse JSON string into rows.
   * Accepts an array of objects or a single object (wrapped into an array).
   *
   * @param {string} data - JSON file contents
   * @returns {{ rows: Object[], headers: string[], errors: string[] }}
   */
  parse(data) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var errors = [];
    var parsed;
    try {
      parsed = JSON.parse(data);
    } catch (err) {
      return {
        rows: [],
        headers: [],
        errors: ["Invalid JSON: ".concat(err.message)]
      };
    }

    // Wrap single object in array
    if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
      parsed = [parsed];
    }
    if (!Array.isArray(parsed)) {
      return {
        rows: [],
        headers: [],
        errors: ['JSON must be an array of objects or a single object']
      };
    }

    // Filter non-objects
    var rows = parsed.filter(item => {
      if (item && typeof item === 'object' && !Array.isArray(item)) return true;
      errors.push('Skipped non-object entry in JSON array');
      return false;
    });

    // Collect all unique keys as headers
    var headerSet = new Set();
    rows.forEach(row => Object.keys(row).forEach(k => headerSet.add(k)));
    var headers = Array.from(headerSet);

    // Stringify any nested objects/arrays to flat strings
    var flatRows = rows.map(row => {
      var flat = {};
      for (var [key, val] of Object.entries(row)) {
        if (val != null && typeof val === 'object') {
          flat[key] = JSON.stringify(val);
        } else {
          flat[key] = val == null ? '' : String(val);
        }
      }
      return flat;
    });
    return {
      rows: flatRows,
      headers,
      errors
    };
  }

  /**
   * Serialize rows to pretty-printed JSON and return as Blob.
   * @param {Object[]} rows
   * @param {string[]} fields - Field keys to include
   * @returns {{ blob: Blob, suggestedFilename: string }}
   */
  serialize(rows, fields) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var filtered = rows.map(row => {
      var obj = {};
      fields.forEach(f => {
        if (row[f] !== undefined) {
          obj[f] = row[f];
        }
      });
      return obj;
    });
    var json = JSON.stringify(filtered, null, 2);
    var blob = new Blob([json], {
      type: 'application/json;charset=utf-8;'
    });
    var date = new Date().toISOString().slice(0, 10);
    return {
      blob,
      suggestedFilename: "agreements-export-".concat(date, ".json")
    };
  }
}
module.exports = JsonAdapter;var XLSX = __webpack_require__(/*! xlsx */ "./node_modules/xlsx/xlsx.mjs");
var BaseFormatAdapter = __webpack_require__(/*! ./BaseFormatAdapter */ "./src/utils/agreementImportExport/adapters/BaseFormatAdapter.js");
class ExcelAdapter extends BaseFormatAdapter {
  static get formatName() {
    return 'excel';
  }
  static get formatLabel() {
    return 'Excel';
  }
  static get extensions() {
    return ['.xlsx', '.xls'];
  }
  static get mimeTypes() {
    return ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-excel'];
  }

  /**
   * Parse Excel file data into rows.
   * @param {ArrayBuffer|Uint8Array} data - Excel file contents (binary)
   * @param {Object} options
   * @param {string} options.sheetName - Specific sheet to read (default: first sheet)
   * @returns {{ rows: Object[], headers: string[], errors: string[] }}
   */
  parse(data) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var errors = [];
    var workbook;
    try {
      workbook = XLSX.read(data, {
        type: 'array'
      });
    } catch (err) {
      return {
        rows: [],
        headers: [],
        errors: ["Failed to parse Excel file: ".concat(err.message)]
      };
    }
    if (!workbook.SheetNames || workbook.SheetNames.length === 0) {
      return {
        rows: [],
        headers: [],
        errors: ['No sheets found in workbook']
      };
    }
    var sheetName = options.sheetName || workbook.SheetNames[0];
    var sheet = workbook.Sheets[sheetName];
    if (!sheet) {
      return {
        rows: [],
        headers: [],
        errors: ["Sheet \"".concat(sheetName, "\" not found")]
      };
    }

    // Convert to array of objects with first row as headers
    var rawRows = XLSX.utils.sheet_to_json(sheet, {
      defval: ''
    });

    // Ensure all values are strings (to match CSV/JSON adapter behavior)
    var rows = rawRows.map(row => {
      var stringRow = {};
      for (var [key, val] of Object.entries(row)) {
        stringRow[key.trim()] = val == null ? '' : String(val);
      }
      return stringRow;
    });

    // Extract headers from first row keys
    var headers = rows.length > 0 ? Object.keys(rows[0]) : [];

    // Filter out completely empty rows
    var filteredRows = rows.filter(row => Object.values(row).some(v => v != null && String(v).trim() !== ''));
    return {
      rows: filteredRows,
      headers,
      errors
    };
  }

  /**
   * Serialize rows to an Excel file and return as Blob.
   * @param {Object[]} rows
   * @param {string[]} fields - Field keys to include
   * @param {Object} options
   * @param {Object} options.fieldLabels - Map of field key to display label for headers
   * @param {string} options.sheetName - Sheet name (default: 'Agreements')
   * @returns {{ blob: Blob, suggestedFilename: string }}
   */
  serialize(rows, fields) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var {
      fieldLabels = {},
      sheetName = 'Agreements'
    } = options;

    // Build header row using labels
    var headerRow = fields.map(f => fieldLabels[f] || f);

    // Build data as array of arrays (header + data rows)
    var aoa = [headerRow];
    rows.forEach(row => {
      var dataRow = fields.map(f => {
        var val = row[f];
        if (val == null) return '';
        return val;
      });
      aoa.push(dataRow);
    });
    var workbook = XLSX.utils.book_new();
    var worksheet = XLSX.utils.aoa_to_sheet(aoa);

    // Auto-size columns based on content width
    var colWidths = fields.map((f, i) => {
      var label = headerRow[i] || f;
      var maxLen = label.length;
      rows.forEach(row => {
        var val = row[f];
        if (val != null) {
          maxLen = Math.max(maxLen, String(val).length);
        }
      });
      return {
        wch: Math.min(maxLen + 2, 50)
      };
    });
    worksheet['!cols'] = colWidths;
    XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);
    var xlsxData = XLSX.write(workbook, {
      bookType: 'xlsx',
      type: 'array'
    });
    var blob = new Blob([xlsxData], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    });
    var date = new Date().toISOString().slice(0, 10);
    return {
      blob,
      suggestedFilename: "agreements-export-".concat(date, ".xlsx")
    };
  }
}
module.exports = ExcelAdapter;/**
 * Northridge format adapter.
 *
 * Handles importing CSV/Excel files exported from Northridge's platform.
 * Northridge uses different column names that need to be mapped to our schema.
 *
 * Known Northridge export columns:
 *   Loan Number        → accountNumber
 *   Borrower Name      → borrowerFirstName (business name)
 *   Borrower Last Name → borrowerLastName
 *   Contact Email      → borrowerEmail
 *   Contact Phone      → borrowerTelephoneNumber
 *   Loan Amount        → principal
 *   Interest Rate      → interestRate
 *   Loan Status        → status
 *   Application Date   → applicationDate
 *   Closing Date       → closingDate
 *   Address            → borrowerStreetAddress
 *   City               → borrowerCity
 *   State              → borrowerState
 *   Zip Code           → borrowerZip
 *   Guarantor          → guarantorName
 *   SBA Loan Number    → migratedLoanIdentifier
 *   Term (Months)      → loanTermMonths
 *   Collateral Desc    → collateral
 *   Notes              → notes
 */
var Papa = __webpack_require__(/*! papaparse */ "./node_modules/papaparse/papaparse.min.js");
var BaseFormatAdapter = __webpack_require__(/*! ./BaseFormatAdapter */ "./src/utils/agreementImportExport/adapters/BaseFormatAdapter.js");

/**
 * Mapping from Northridge column names to LoanWell field keys.
 * Keys are lowercase-normalized Northridge headers.
 */
var NORTHRIDGE_FIELD_MAP = {
  'loan number': 'accountNumber',
  'loan #': 'accountNumber',
  'borrower name': 'borrowerFirstName',
  'business name': 'borrowerFirstName',
  'borrower last name': 'borrowerLastName',
  'last name': 'borrowerLastName',
  'contact email': 'borrowerEmail',
  'email': 'borrowerEmail',
  'contact phone': 'borrowerTelephoneNumber',
  'phone': 'borrowerTelephoneNumber',
  'loan amount': 'principal',
  'principal': 'principal',
  'amount': 'principal',
  'interest rate': 'interestRate',
  'rate': 'interestRate',
  'loan status': 'status',
  'status': 'status',
  'application date': 'applicationDate',
  'app date': 'applicationDate',
  'closing date': 'closingDate',
  'close date': 'closingDate',
  'funded date': 'closingDate',
  'address': 'borrowerStreetAddress',
  'street address': 'borrowerStreetAddress',
  'city': 'borrowerCity',
  'state': 'borrowerState',
  'zip code': 'borrowerZip',
  'zip': 'borrowerZip',
  'postal code': 'borrowerZip',
  'guarantor': 'guarantorName',
  'guarantor name': 'guarantorName',
  'sba loan number': 'migratedLoanIdentifier',
  'external id': 'migratedLoanIdentifier',
  'term (months)': 'loanTermMonths',
  'term': 'loanTermMonths',
  'loan term': 'loanTermMonths',
  'collateral desc': 'collateral',
  'collateral description': 'collateral',
  'collateral': 'collateral',
  'notes': 'notes',
  'comments': 'notes'
};

/**
 * Northridge status values → LoanWell status mapping
 */
var NORTHRIDGE_STATUS_MAP = {
  'active': 'active',
  'funded': 'active',
  'closed': 'completed',
  'paid off': 'completed',
  'in review': 'in_review',
  'pending': 'pending',
  'denied': 'declined',
  'declined': 'declined',
  'withdrawn': 'withdrawn',
  'draft': 'draft',
  'new': 'new'
};
class NorthridgeAdapter extends BaseFormatAdapter {
  static get formatName() {
    return 'northridge';
  }
  static get formatLabel() {
    return 'Northridge';
  }
  static get extensions() {
    return ['.csv', '.xlsx', '.xls'];
  }
  static get mimeTypes() {
    return [];
  } // We identify by content, not mime
  static get preMapped() {
    return true;
  } // parse() maps Northridge headers → LoanWell fields

  /**
   * Northridge files use the same extensions as CSV/Excel, so we can't
   * auto-detect purely by extension. The user must select "Northridge" format.
   * canHandle returns false to prevent auto-detection conflicts.
   */
  static canHandle(/* file */
  ) {
    return false;
  }

  /**
   * Parse a Northridge export file.
   * Supports both CSV and Excel formats.
   * Automatically maps Northridge column names to LoanWell field keys.
   *
   * @param {string|ArrayBuffer} data - File contents
   * @param {Object} options
   * @returns {{ rows: Object[], headers: string[], errors: string[] }}
   */
  parse(data) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var errors = [];
    var rawRows = [];
    var rawHeaders = [];

    // Detect format: if data is string, treat as CSV; if ArrayBuffer, try Excel
    if (typeof data === 'string') {
      var result = Papa.parse(data, {
        header: true,
        skipEmptyLines: 'greedy',
        dynamicTyping: false,
        transformHeader: h => h.trim()
      });
      if (result.errors && result.errors.length > 0) {
        result.errors.forEach(err => {
          errors.push("Row ".concat(err.row != null ? err.row + 1 : '?', ": ").concat(err.message));
        });
      }
      rawRows = result.data || [];
      rawHeaders = result.meta && result.meta.fields ? result.meta.fields : [];
    } else {
      // ArrayBuffer — try Excel
      try {
        var XLSX = __webpack_require__(/*! xlsx */ "./node_modules/xlsx/xlsx.mjs");
        var workbook = XLSX.read(data, {
          type: 'array'
        });
        if (workbook.SheetNames.length > 0) {
          var sheet = workbook.Sheets[workbook.SheetNames[0]];
          rawRows = XLSX.utils.sheet_to_json(sheet, {
            defval: ''
          });
          if (rawRows.length > 0) {
            rawHeaders = Object.keys(rawRows[0]);
          }
        }
      } catch (err) {
        return {
          rows: [],
          headers: [],
          errors: ["Failed to parse Northridge Excel file: ".concat(err.message)]
        };
      }
    }

    // Map Northridge headers to LoanWell field keys
    var mappedRows = rawRows.map(row => {
      var mapped = {};
      for (var [header, value] of Object.entries(row)) {
        var normalizedHeader = header.toLowerCase().trim();
        var lwField = NORTHRIDGE_FIELD_MAP[normalizedHeader];
        if (lwField) {
          var val = value == null ? '' : String(value).trim();

          // Normalize status values
          if (lwField === 'status' && val) {
            val = NORTHRIDGE_STATUS_MAP[val.toLowerCase()] || val;
          }
          mapped[lwField] = val;
        } else {
          // Pass through unmapped fields with original header
          mapped[header] = value == null ? '' : String(value).trim();
        }
      }
      return mapped;
    });

    // Build mapped headers
    var mappedHeaders = rawHeaders.map(h => {
      var normalizedHeader = h.toLowerCase().trim();
      return NORTHRIDGE_FIELD_MAP[normalizedHeader] || h;
    });

    // Filter empty rows
    var filteredRows = mappedRows.filter(row => Object.values(row).some(v => v != null && String(v).trim() !== ''));
    return {
      rows: filteredRows,
      headers: mappedHeaders,
      errors
    };
  }

  /**
   * Serialize rows to Northridge-compatible CSV (for export).
   * Maps LoanWell fields back to Northridge column names.
   *
   * @param {Object[]} rows
   * @param {string[]} fields - LoanWell field keys
   * @param {Object} options
   * @returns {{ blob: Blob, suggestedFilename: string }}
   */
  serialize(rows, fields) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    // Build reverse mapping: LoanWell key → Northridge header
    var reverseMap = {};
    for (var [nrHeader, lwKey] of Object.entries(NORTHRIDGE_FIELD_MAP)) {
      // Use the most human-readable version (longest) for each key
      if (!reverseMap[lwKey] || nrHeader.length > reverseMap[lwKey].length) {
        reverseMap[lwKey] = nrHeader;
      }
    }

    // Title-case the headers
    var toTitleCase = s => s.replace(/\b\w/g, c => c.toUpperCase());
    var headerRow = fields.map(f => {
      var nrHeader = reverseMap[f];
      return nrHeader ? toTitleCase(nrHeader) : f;
    });

    // Build data rows, reverse-mapping status
    var reverseStatusMap = {};
    for (var [nrStatus, lwStatus] of Object.entries(NORTHRIDGE_STATUS_MAP)) {
      if (!reverseStatusMap[lwStatus]) reverseStatusMap[lwStatus] = nrStatus;
    }
    var dataRows = rows.map(row => {
      return fields.map(f => {
        var val = row[f];
        if (val == null) return '';
        if (f === 'status' && typeof val === 'string') {
          val = reverseStatusMap[val.toLowerCase()] || val;
          return val.charAt(0).toUpperCase() + val.slice(1);
        }
        return String(val);
      });
    });
    var csv = Papa.unparse({
      fields: headerRow,
      data: dataRows
    });
    var blob = new Blob([csv], {
      type: 'text/csv;charset=utf-8;'
    });
    var date = new Date().toISOString().slice(0, 10);
    return {
      blob,
      suggestedFilename: "northridge-export-".concat(date, ".csv")
    };
  }
}
module.exports = NorthridgeAdapter;
module.exports.NORTHRIDGE_FIELD_MAP = NORTHRIDGE_FIELD_MAP;
module.exports.NORTHRIDGE_STATUS_MAP = NORTHRIDGE_STATUS_MAP;/**
 * Export service — orchestrates exporting agreements to files.
 *
 * Handles field filtering, format selection, and triggering browser downloads.
 */
var {
  getAdapter
} = __webpack_require__(/*! ./adapters/adapterRegistry */ "./src/utils/agreementImportExport/adapters/adapterRegistry.js");
var {
  getFieldByKey
} = __webpack_require__(/*! ./agreementFields */ "./src/utils/agreementImportExport/agreementFields.js");

/**
 * Export agreements to a downloadable file.
 *
 * @param {Object[]} agreements - Array of agreement objects (from API/state)
 * @param {string[]} selectedFields - Field keys to include in export
 * @param {string} format - Format name: 'csv' or 'json'
 * @param {Object} options
 * @param {string} options.filenamePrefix - Custom filename prefix (default: 'agreements-export')
 * @returns {{ blob: Blob, filename: string }}
 */
function exportAgreements(agreements, selectedFields, format) {
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
  var AdapterClass = getAdapter(format);
  if (!AdapterClass) {
    throw new Error("Unsupported export format: ".concat(format));
  }

  // Build field labels map for CSV headers
  var fieldLabels = {};
  selectedFields.forEach(key => {
    var field = getFieldByKey(key);
    fieldLabels[key] = field ? field.label : key;
  });
  var adapter = new AdapterClass();
  var {
    blob,
    suggestedFilename
  } = adapter.serialize(agreements, selectedFields, {
    fieldLabels
  });
  var prefix = options.filenamePrefix || 'agreements-export';
  var date = new Date().toISOString().slice(0, 10);
  var ext = AdapterClass.extensions[0] || '.txt';
  var filename = "".concat(prefix, "-").concat(date).concat(ext);
  return {
    blob,
    filename
  };
}

/**
 * Trigger a browser download for a Blob.
 * @param {Blob} blob
 * @param {string} filename
 */
function triggerDownload(blob, filename) {
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.style.display = 'none';
  document.body.appendChild(a);
  a.click();
  // Cleanup after a brief delay to ensure download starts
  setTimeout(() => {
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  }, 100);
}
module.exports = {
  exportAgreements,
  triggerDownload
};function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
 * Import service — orchestrates the full import pipeline.
 *
 * Steps: parse file → auto-map headers → validate rows → detect duplicates →
 * dry run → execute (create/update agreements via API).
 */
var {
  getAdapter
} = __webpack_require__(/*! ./adapters/adapterRegistry */ "./src/utils/agreementImportExport/adapters/adapterRegistry.js");
var {
  autoMapHeaders
} = __webpack_require__(/*! ./fieldMapping */ "./src/utils/agreementImportExport/fieldMapping.js");
var {
  validateRows
} = __webpack_require__(/*! ./validation */ "./src/utils/agreementImportExport/validation.js");

/**
 * Parse a file using the appropriate adapter.
 *
 * @param {string|ArrayBuffer} fileData - Raw file contents
 * @param {File} file - The File object (for format detection)
 * @param {Object} options
 * @param {string} options.formatOverride - Force a specific adapter by name (e.g. 'northridge')
 * @returns {{ rows: Object[], headers: string[], errors: string[], format: string, preMapped: boolean }}
 */
function parseFile(fileData, file) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  var {
    formatOverride
  } = options;

  // If a specific format was selected, use that adapter directly
  var AdapterClass = formatOverride ? getAdapter(formatOverride) : getAdapter(file);
  if (!AdapterClass) {
    var ext = file.name ? file.name.split('.').pop() : 'unknown';
    return {
      rows: [],
      headers: [],
      errors: ["Unsupported file format: .".concat(ext)],
      format: null,
      preMapped: false
    };
  }
  var adapter = new AdapterClass();
  var result = adapter.parse(fileData);
  return _objectSpread(_objectSpread({}, result), {}, {
    format: AdapterClass.formatName,
    preMapped: AdapterClass.preMapped || false
  });
}

/**
 * Apply field mappings to raw rows.
 * Transforms rows from source column names to target field keys.
 *
 * @param {Object[]} rawRows - Rows with source column keys
 * @param {Array} mappings - Mapping array from autoMapHeaders (or user-adjusted)
 * @returns {Object[]} Rows keyed by target field keys
 */
function applyMappings(rawRows, mappings) {
  return rawRows.map(row => {
    var mapped = {};
    mappings.forEach(mapping => {
      if (mapping.targetField) {
        var sourceValue = row[mapping.sourceHeader];
        mapped[mapping.targetField.key] = sourceValue;
      }
    });
    return mapped;
  });
}

/**
 * Detect duplicates between imported rows and existing agreements.
 *
 * Accepts either plain row objects or {index, row} pairs from validateRows.
 * When {index, row} pairs are provided, the original index is preserved in importIndex
 * so that downstream consumers (buildDryRun, strategies UI) use stable indices even
 * when invalid rows have been filtered out.
 *
 * @param {Array<Object|{index: number, row: Object}>} importedRows - Rows keyed by target field keys
 * @param {Object[]} existingAgreements - Existing agreements from the database
 * @returns {Array<{ importIndex: number, existingAgreement: Object|null, matchType: string|null }>}
 */
function detectDuplicates(importedRows, existingAgreements) {
  return importedRows.map((entry, i) => {
    // Support both plain row objects and {index, row} pairs
    var row = entry.row != null ? entry.row : entry;
    var originalIndex = entry.row != null && entry.index != null ? entry.index : i;

    // 1. Match by migratedLoanIdentifier
    if (row.migratedLoanIdentifier) {
      var match = existingAgreements.find(a => a.migratedLoanIdentifier && a.migratedLoanIdentifier === row.migratedLoanIdentifier);
      if (match) return {
        importIndex: originalIndex,
        existingAgreement: match,
        matchType: 'migratedLoanIdentifier'
      };
    }

    // 2. Match by accountNumber
    if (row.accountNumber) {
      var _match = existingAgreements.find(a => a.accountNumber && a.accountNumber.toLowerCase() === row.accountNumber.toLowerCase());
      if (_match) return {
        importIndex: originalIndex,
        existingAgreement: _match,
        matchType: 'accountNumber'
      };
    }

    // 3. Fuzzy match: businessName + principal
    if (row.borrowerFirstName) {
      var nameLower = String(row.borrowerFirstName).toLowerCase().trim();
      var _match2 = existingAgreements.find(a => {
        var existingName = String(a.borrowerFirstName || a.borrowerfirstname || '').toLowerCase().trim();
        if (existingName !== nameLower) return false;

        // If both have principal/loanAmount, check if they're close
        var importAmount = Number(row.principal || row.loanAmount) || 0;
        var existingAmount = Number(a.principal || a.loanAmount) || 0;
        if (importAmount > 0 && existingAmount > 0) {
          return Math.abs(importAmount - existingAmount) / Math.max(importAmount, existingAmount) < 0.01;
        }

        // Name match alone is a weak signal — only match if amounts also match or both are 0
        return importAmount === 0 && existingAmount === 0;
      });
      if (_match2) return {
        importIndex: originalIndex,
        existingAgreement: _match2,
        matchType: 'businessName+amount'
      };
    }
    return {
      importIndex: originalIndex,
      existingAgreement: null,
      matchType: null
    };
  });
}

/**
 * Merge two agreement objects according to the specified strategy.
 *
 * @param {Object} importRow - The imported row data
 * @param {Object} existingAgreement - The existing agreement
 * @param {'importWins'|'existingWins'} priority - Which side takes precedence for conflicts
 * @returns {Object} Merged agreement fields
 */
function mergeAgreements(importRow, existingAgreement, priority) {
  var merged = {};
  var allKeys = new Set([...Object.keys(importRow), ...Object.keys(existingAgreement)]);
  for (var key of allKeys) {
    // Skip internal fields
    if (key === 'id') {
      merged[key] = existingAgreement[key];
      continue;
    }
    var importVal = importRow[key];
    var existingVal = existingAgreement[key];
    var importHasValue = importVal != null && importVal !== '';
    var existingHasValue = existingVal != null && existingVal !== '';
    if (importHasValue && existingHasValue) {
      // Both have values — priority wins
      merged[key] = priority === 'importWins' ? importVal : existingVal;
    } else if (importHasValue) {
      merged[key] = importVal;
    } else if (existingHasValue) {
      merged[key] = existingVal;
    } else {
      merged[key] = null;
    }
  }
  return merged;
}

/**
 * Build the dry-run summary: what will happen for each row.
 *
 * @param {Array} validRows - From validateRows
 * @param {Array} duplicates - From detectDuplicates
 * @param {Object} strategies - Map of importIndex → 'skip' | 'overwrite' | 'mergeImportWins' | 'mergeExistingWins'
 * @returns {Array<{ index: number, action: string, row: Object, existingId: string|null }>}
 */
function buildDryRun(validRows, duplicates, strategies) {
  return validRows.map(_ref => {
    var {
      index,
      row
    } = _ref;
    var dup = duplicates.find(d => d.importIndex === index);
    var strategy = strategies[index] || 'create';
    if (!dup || !dup.existingAgreement) {
      return {
        index,
        action: 'create',
        row,
        existingId: null
      };
    }
    switch (strategy) {
      case 'skip':
        return {
          index,
          action: 'skip',
          row,
          existingId: dup.existingAgreement.id
        };
      case 'overwrite':
        return {
          index,
          action: 'update',
          row,
          existingId: dup.existingAgreement.id
        };
      case 'mergeImportWins':
        return {
          index,
          action: 'update',
          row: mergeAgreements(row, dup.existingAgreement, 'importWins'),
          existingId: dup.existingAgreement.id
        };
      case 'mergeExistingWins':
        return {
          index,
          action: 'update',
          row: mergeAgreements(row, dup.existingAgreement, 'existingWins'),
          existingId: dup.existingAgreement.id
        };
      default:
        return {
          index,
          action: 'create',
          row,
          existingId: null
        };
    }
  });
}

/**
 * Execute the import: create or update agreements via API.
 *
 * @param {Array} dryRunPlan - From buildDryRun
 * @param {Object} httpClient - The httpClient instance for API calls
 * @param {Object} options
 * @param {string} options.defaultProcessId - processId for new agreements
 * @param {function} options.onProgress - Called with (completed, total) after each row
 * @returns {Promise<{ created: number, updated: number, skipped: number, failed: Array }>}
 */
function executeImport(_x, _x2) {
  return _executeImport.apply(this, arguments);
}
function _executeImport() {
  _executeImport = _asyncToGenerator(function* (dryRunPlan, httpClient) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var {
      defaultProcessId = 'default',
      onProgress
    } = options;
    var created = 0;
    var updated = 0;
    var skipped = 0;
    var failed = [];
    var actionable = dryRunPlan.filter(item => item.action !== 'skip');
    var skippedItems = dryRunPlan.filter(item => item.action === 'skip');
    skipped = skippedItems.length;
    for (var i = 0; i < actionable.length; i++) {
      var item = actionable[i];
      try {
        if (item.action === 'create') {
          var body = _objectSpread(_objectSpread({}, item.row), {}, {
            processId: item.row.processId || defaultProcessId,
            borrowerName: item.row.borrowerFirstName || item.row.businessName,
            status: item.row.status || 'draft'
          });
          yield httpClient.invokeApi({}, '/agreement', 'POST', {}, body);
          created++;
        } else if (item.action === 'update') {
          var _body = _objectSpread(_objectSpread({}, item.row), {}, {
            id: item.existingId
          });
          yield httpClient.invokeApi({}, "/agreement/".concat(item.existingId), 'PUT', {}, _body);
          updated++;
        }
      } catch (err) {
        failed.push({
          index: item.index,
          error: err.message || 'Unknown error',
          row: item.row
        });
      }
      if (onProgress) {
        onProgress(i + 1 + skipped, dryRunPlan.length);
      }
    }
    return {
      created,
      updated,
      skipped,
      failed
    };
  });
  return _executeImport.apply(this, arguments);
}
module.exports = {
  parseFile,
  applyMappings,
  detectDuplicates,
  mergeAgreements,
  buildDryRun,
  executeImport,
  autoMapHeaders,
  validateRows
};__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/agreementImportExport */ "./src/utils/agreementImportExport/index.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/FormatSelector.js";


var FormatSelector = _ref => {
  var {
    value,
    onChange,
    label = 'Format'
  } = _ref;
  var formats = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getAvailableFormats"])();
  var comingSoon = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getComingSoonFormats"])();
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 9,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 10,
      columnNumber: 7
    }
  }, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexWrap: 'wrap',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 11,
      columnNumber: 7
    }
  }, formats.map(fmt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: fmt.name,
    type: "button",
    onClick: () => onChange(fmt.name),
    style: {
      padding: '0.5rem 1rem',
      border: value === fmt.name ? '2px solid #00a5fa' : '1px solid #d1d5db',
      borderRadius: 6,
      backgroundColor: value === fmt.name ? '#f0f9ff' : '#fff',
      color: value === fmt.name ? '#00a5fa' : '#374151',
      fontWeight: value === fmt.name ? 600 : 400,
      fontSize: '0.85rem',
      cursor: 'pointer',
      transition: 'all 0.15s',
      display: 'flex',
      alignItems: 'center',
      gap: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 13,
      columnNumber: 11
    }
  }, fmt.label, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.75rem',
      color: '#9ca3af',
      fontWeight: 400
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 33,
      columnNumber: 13
    }
  }, fmt.extensions.join(', ')))), comingSoon.map(fmt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: fmt.name,
    title: fmt.description,
    style: {
      padding: '0.5rem 1rem',
      border: '1px dashed #d1d5db',
      borderRadius: 6,
      backgroundColor: '#f9fafb',
      color: '#9ca3af',
      fontSize: '0.85rem',
      display: 'flex',
      alignItems: 'center',
      gap: '0.35rem',
      cursor: 'default'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 39,
      columnNumber: 11
    }
  }, fmt.label, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.65rem',
      fontWeight: 600,
      color: '#00a5fa',
      backgroundColor: '#eff6ff',
      padding: '1px 5px',
      borderRadius: 3,
      textTransform: 'uppercase',
      letterSpacing: '0.03em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 56,
      columnNumber: 13
    }
  }, "Soon")))));
};
/* harmony default export */ __webpack_exports__["default"] = (FormatSelector);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ImportStepUpload__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ImportStepUpload */ "./src/components/ImportExport/ImportStepUpload.js");
/* harmony import */ var _ImportStepPreview__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ImportStepPreview */ "./src/components/ImportExport/ImportStepPreview.js");
/* harmony import */ var _ImportStepMapping__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ImportStepMapping */ "./src/components/ImportExport/ImportStepMapping.js");
/* harmony import */ var _ImportStepDuplicates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ImportStepDuplicates */ "./src/components/ImportExport/ImportStepDuplicates.js");
/* harmony import */ var _ImportStepConfirm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ImportStepConfirm */ "./src/components/ImportExport/ImportStepConfirm.js");
/* harmony import */ var _ImportStepResult__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ImportStepResult */ "./src/components/ImportExport/ImportStepResult.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/agreementImportExport */ "./src/utils/agreementImportExport/index.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportWizard.js";
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }








var ImportWizard = _ref => {
  var {
    onClose,
    httpClient,
    existingAgreements,
    defaultProcessId,
    onViewAgreements,
    singleAgreementMode = false,
    targetAgreement = null,
    targetAgreementName = null
  } = _ref;
  var [step, setStep] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('upload');
  var [parseError, setParseError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);

  // Data flowing through the wizard
  var [rawRows, setRawRows] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var [headers, setHeaders] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var [format, setFormat] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [preMapped, setPreMapped] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [mappings, setMappings] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var [mappedRows, setMappedRows] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var [validationResult, setValidationResult] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [duplicates, setDuplicates] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var [strategies, setStrategies] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({});
  var [dryRunPlan, setDryRunPlan] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var [importResult, setImportResult] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [importing, setImporting] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [progress, setProgress] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({
    done: 0,
    total: 0
  });

  // Dynamic steps based on whether mapping is needed
  var steps = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => {
    if (preMapped) {
      return ['upload', 'preview', 'duplicates', 'confirm', 'result'];
    }
    return ['upload', 'preview', 'mapping', 'duplicates', 'confirm', 'result'];
  }, [preMapped]);
  var STEP_LABELS = {
    upload: 'Upload',
    preview: 'Preview',
    mapping: 'Map Fields',
    duplicates: 'Duplicates',
    confirm: 'Confirm',
    result: 'Done'
  };

  // Step 1: File loaded
  var handleFileLoaded = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(function (fileData, file) {
    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    setParseError(null);
    var result = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["parseFile"])(fileData, file, options);
    if (result.errors.length > 0 && result.rows.length === 0) {
      setParseError(result.errors.join('; '));
      return;
    }
    setRawRows(result.rows);
    setHeaders(result.headers);
    setFormat(result.format);
    setPreMapped(result.preMapped || false);
    setStep('preview');
  }, []);

  // Helper: run validation + dedup on mapped rows (used by both mapping and pre-mapped paths)
  var runValidationAndDedup = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(mapped => {
    setMappedRows(mapped);
    var validation = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["validateRows"])(mapped);
    setValidationResult(validation);
    var existing = existingAgreements || [];
    var dups = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["detectDuplicates"])(validation.validRows, existing);
    setDuplicates(dups);
    var hasDups = dups.some(d => d.existingAgreement);
    if (!hasDups) {
      var plan = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["buildDryRun"])(validation.validRows, dups, {});
      setDryRunPlan(plan);
    }
    return hasDups;
  }, [existingAgreements]);

  // In single-agreement mode, only the first row is applied
  var effectiveRawRows = singleAgreementMode ? rawRows.slice(0, 1) : rawRows;

  // Step 2 → 3 (or skip to validation for pre-mapped)
  var handlePreviewNext = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(() => {
    if (preMapped) {
      // Rows are already mapped by the adapter — skip mapping step
      var hasDups = runValidationAndDedup(effectiveRawRows);
      setStep(hasDups ? 'duplicates' : 'confirm');
    } else {
      setStep('mapping');
    }
  }, [preMapped, effectiveRawRows, runValidationAndDedup]);

  // Step 3: Mappings confirmed (only for non-pre-mapped)
  var handleMappingsConfirmed = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(confirmedMappings => {
    setMappings(confirmedMappings);
    var mapped = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["applyMappings"])(effectiveRawRows, confirmedMappings);
    var hasDups = runValidationAndDedup(mapped);
    setStep(hasDups ? 'duplicates' : 'confirm');
  }, [effectiveRawRows, runValidationAndDedup]);

  // Step 4: Duplicate strategies confirmed
  var handleStrategiesConfirmed = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(confirmedStrategies => {
    setStrategies(confirmedStrategies);
    var plan = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["buildDryRun"])(validationResult.validRows, duplicates, confirmedStrategies);
    setDryRunPlan(plan);
    setStep('confirm');
  }, [validationResult, duplicates]);

  // Step 5: Import confirmed
  var handleConfirm = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(/*#__PURE__*/_asyncToGenerator(function* () {
    setImporting(true);
    try {
      var result = yield Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_7__["executeImport"])(dryRunPlan, httpClient, {
        defaultProcessId: defaultProcessId || 'default',
        onProgress: (done, t) => setProgress({
          done,
          total: t
        })
      });
      setImportResult(result);
      setStep('result');
    } catch (err) {
      setImportResult({
        created: 0,
        updated: 0,
        skipped: 0,
        failed: [{
          index: -1,
          error: err.message || 'Import failed',
          row: null
        }]
      });
      setStep('result');
    }
    setImporting(false);
  }), [dryRunPlan, httpClient, defaultProcessId]);

  // Back navigation from duplicates goes to mapping or preview depending on pre-mapped
  var handleDuplicatesBack = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(() => {
    setStep(preMapped ? 'preview' : 'mapping');
  }, [preMapped]);

  // Back navigation from confirm goes to duplicates or mapping/preview
  var handleConfirmBack = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(() => {
    var hasDups = duplicates.some(d => d.existingAgreement);
    if (hasDups) {
      setStep('duplicates');
    } else {
      setStep(preMapped ? 'preview' : 'mapping');
    }
  }, [duplicates, preMapped]);
  var currentStepIndex = steps.indexOf(step);
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert-wrapper alert-prompt alert-light-background active",
    "data-testid": "import-wizard",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 173,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-times alert-close-button",
    onClick: onClose,
    style: {
      cursor: 'pointer',
      position: 'absolute',
      top: '1rem',
      right: '1rem',
      fontSize: '1.2rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 174,
      columnNumber: 7
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '2rem',
      maxWidth: 700,
      margin: '0 auto',
      maxHeight: '85vh',
      overflowY: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 179,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex mb-3",
    style: {
      gap: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 181,
      columnNumber: 9
    }
  }, steps.map((s, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: s,
    style: {
      flex: 1,
      height: 4,
      borderRadius: 2,
      backgroundColor: i <= currentStepIndex ? '#00a5fa' : '#e5e7eb',
      transition: 'background-color 0.2s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 183,
      columnNumber: 13
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex mb-3",
    style: {
      gap: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 197,
      columnNumber: 9
    }
  }, steps.map((s, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: s,
    style: {
      flex: 1,
      textAlign: 'center',
      fontSize: '0.7rem',
      fontWeight: i === currentStepIndex ? 600 : 400,
      color: i <= currentStepIndex ? '#00a5fa' : '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 199,
      columnNumber: 13
    }
  }, STEP_LABELS[s]))), importing && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      padding: '2rem 0'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 216,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.1rem',
      fontWeight: 600,
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 217,
      columnNumber: 13
    }
  }, "Importing..."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: '100%',
      height: 8,
      backgroundColor: '#e5e7eb',
      borderRadius: 4,
      overflow: 'hidden',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 220,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      height: '100%',
      width: progress.total > 0 ? "".concat(progress.done / progress.total * 100, "%") : '0%',
      backgroundColor: '#00a5fa',
      borderRadius: 4,
      transition: 'width 0.3s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 15
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.85rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 231,
      columnNumber: 13
    }
  }, progress.done, " of ", progress.total, " processed")), !importing && step === 'upload' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ImportStepUpload__WEBPACK_IMPORTED_MODULE_1__["default"], {
    onFileLoaded: handleFileLoaded,
    error: parseError,
    singleAgreementMode: singleAgreementMode,
    targetAgreementName: targetAgreementName,
    onGoToBulkImport: onViewAgreements,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 239,
      columnNumber: 11
    }
  }), !importing && step === 'preview' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ImportStepPreview__WEBPACK_IMPORTED_MODULE_2__["default"], {
    rows: rawRows,
    headers: headers,
    format: format,
    preMapped: preMapped,
    singleAgreementMode: singleAgreementMode,
    targetAgreementName: targetAgreementName,
    onNext: handlePreviewNext,
    onBack: () => setStep('upload'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 249,
      columnNumber: 11
    }
  }), !importing && step === 'mapping' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ImportStepMapping__WEBPACK_IMPORTED_MODULE_3__["default"], {
    headers: headers,
    sampleRows: rawRows.slice(0, 3),
    onMappingsConfirmed: handleMappingsConfirmed,
    onBack: () => setStep('preview'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 262,
      columnNumber: 11
    }
  }), !importing && step === 'duplicates' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ImportStepDuplicates__WEBPACK_IMPORTED_MODULE_4__["default"], {
    duplicates: duplicates,
    mappedRows: mappedRows,
    onStrategiesConfirmed: handleStrategiesConfirmed,
    onBack: handleDuplicatesBack,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 271,
      columnNumber: 11
    }
  }), !importing && step === 'confirm' && validationResult && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ImportStepConfirm__WEBPACK_IMPORTED_MODULE_5__["default"], {
    validationResult: validationResult,
    dryRunPlan: dryRunPlan,
    onConfirm: handleConfirm,
    onBack: handleConfirmBack,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 280,
      columnNumber: 11
    }
  }), !importing && step === 'result' && importResult && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ImportStepResult__WEBPACK_IMPORTED_MODULE_6__["default"], {
    result: importResult,
    onClose: onClose,
    onViewAgreements: onViewAgreements,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 289,
      columnNumber: 11
    }
  })));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportWizard);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/agreementImportExport */ "./src/utils/agreementImportExport/index.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportStepUpload.js",
  _strong,
  _i,
  _span;


var formats = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getAvailableFormats"])();
var comingSoon = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getComingSoonFormats"])();
var ACCEPTED_EXTENSIONS = [...new Set(formats.flatMap(f => f.extensions))];

// Separate generic formats (CSV/JSON/Excel) from competitor formats (Northridge, etc.)
var genericFormats = formats.filter(f => !f.preMapped);
var competitorFormats = formats.filter(f => f.preMapped);
var ImportStepUpload = _ref => {
  var _competitorFormats$fi;
  var {
    onFileLoaded,
    error: externalError,
    singleAgreementMode = false,
    targetAgreementName = null,
    onGoToBulkImport = null
  } = _ref;
  var fileInputRef = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(null);
  var [dragging, setDragging] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [error, setError] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [fileName, setFileName] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [selectedFormat, setSelectedFormat] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('auto');
  var handleFile = file => {
    if (!file) return;
    setError(null);
    setFileName(file.name);
    var ext = '.' + file.name.split('.').pop().toLowerCase();
    if (!ACCEPTED_EXTENSIONS.includes(ext)) {
      setError("Unsupported file type: ".concat(ext, ". Accepted: ").concat(ACCEPTED_EXTENSIONS.join(', ')));
      return;
    }
    var reader = new FileReader();
    reader.onload = e => {
      // Pass the selected format so the wizard knows which adapter to use
      var formatOverride = selectedFormat !== 'auto' ? selectedFormat : null;
      onFileLoaded(e.target.result, file, {
        formatOverride
      });
    };
    reader.onerror = () => {
      setError('Failed to read file');
    };
    // CSV and JSON are text; Excel/binary formats need ArrayBuffer
    if (ext === '.json' || ext === '.csv') {
      reader.readAsText(file);
    } else {
      reader.readAsArrayBuffer(file);
    }
  };
  var handleDrop = e => {
    e.preventDefault();
    setDragging(false);
    var file = e.dataTransfer.files[0];
    handleFile(file);
  };
  var handleDragOver = e => {
    e.preventDefault();
    setDragging(true);
  };
  var displayError = error || externalError;
  var renderFormatButton = (name, label, isActive, onClick, extras) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: name,
    type: "button",
    onClick: onClick,
    style: {
      padding: '0.5rem 1rem',
      border: isActive ? '2px solid #00a5fa' : '1px solid #d1d5db',
      borderRadius: 6,
      backgroundColor: isActive ? '#f0f9ff' : '#fff',
      color: isActive ? '#00a5fa' : '#374151',
      fontWeight: isActive ? 600 : 400,
      fontSize: '0.85rem',
      cursor: 'pointer',
      transition: 'all 0.15s',
      display: 'flex',
      alignItems: 'center',
      gap: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 68,
      columnNumber: 5
    }
  }, label, extras);
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 93,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 94,
      columnNumber: 7
    }
  }, singleAgreementMode ? 'Update Agreement Data' : 'Import Data'), singleAgreementMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '0.75rem 0.9rem',
      borderRadius: 6,
      backgroundColor: '#fffbeb',
      border: '1px solid #fde68a',
      marginBottom: '1rem',
      fontSize: '0.85rem',
      color: '#78350f'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 100,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'flex-start',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 109,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-info-circle",
    style: {
      color: '#d97706',
      marginTop: 2,
      fontSize: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 110,
      columnNumber: 13
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      lineHeight: 1.45
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 111,
      columnNumber: 13
    }
  }, "You are updating ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 112,
      columnNumber: 32
    }
  }, targetAgreementName || 'this agreement'), " only. Data from your file will be applied to this single agreement \u2014 other agreements will not be affected.", onGoToBulkImport && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, ' ', "Need to import multiple agreements?", ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    type: "button",
    onClick: onGoToBulkImport,
    style: {
      background: 'none',
      border: 'none',
      padding: 0,
      color: '#b45309',
      textDecoration: 'underline',
      fontWeight: 600,
      cursor: 'pointer',
      fontSize: 'inherit'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 117,
      columnNumber: 19
    }
  }, "Go to all agreements"), ".")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'flex-start',
      gap: '0.6rem',
      padding: '0.65rem 0.85rem',
      borderRadius: 6,
      backgroundColor: '#f0f9ff',
      border: '1px solid #bae6fd',
      marginBottom: '1rem',
      fontSize: '0.82rem',
      color: '#0c4a6e'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 141,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-shield",
    style: {
      color: '#0284c7',
      marginTop: 2,
      fontSize: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 153,
      columnNumber: 9
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      lineHeight: 1.45
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 154,
      columnNumber: 9
    }
  }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 155,
      columnNumber: 11
    }
  }, "Your data is safe.")), " LoanWell is SOC 2 compliant and follows rigorous standards for data handling, encryption, and access control.", ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
    href: "/security",
    target: "_blank",
    rel: "noopener noreferrer",
    style: {
      color: '#0284c7',
      textDecoration: 'underline',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 157,
      columnNumber: 11
    }
  }, "Learn more about our security"), ".")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 170,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    className: "form-label",
    style: {
      fontWeight: 600,
      fontSize: '0.85rem',
      color: '#374151',
      marginBottom: '0.5rem',
      display: 'block'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 171,
      columnNumber: 9
    }
  }, "File Format"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexWrap: 'wrap',
      gap: '0.5rem',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 174,
      columnNumber: 9
    }
  }, renderFormatButton('auto', 'Auto-Detect', selectedFormat === 'auto', () => setSelectedFormat('auto'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.7rem',
      color: '#9ca3af',
      fontWeight: 400
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 181,
      columnNumber: 13
    }
  }, "CSV, JSON, Excel")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 1,
      height: 24,
      backgroundColor: '#e5e7eb',
      margin: '0 0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 185,
      columnNumber: 11
    }
  }), competitorFormats.map(fmt => renderFormatButton(fmt.name, fmt.label, selectedFormat === fmt.name, () => setSelectedFormat(fmt.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.65rem',
      fontWeight: 600,
      color: '#059669',
      backgroundColor: '#ecfdf5',
      padding: '1px 5px',
      borderRadius: 3,
      textTransform: 'uppercase'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 193,
      columnNumber: 13
    }
  }, "Auto-Map"))), comingSoon.map(fmt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: fmt.name,
    title: fmt.description,
    style: {
      padding: '0.5rem 1rem',
      border: '1px dashed #d1d5db',
      borderRadius: 6,
      backgroundColor: '#f9fafb',
      color: '#9ca3af',
      fontSize: '0.85rem',
      display: 'flex',
      alignItems: 'center',
      gap: '0.35rem',
      cursor: 'default'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 208,
      columnNumber: 13
    }
  }, fmt.label, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.65rem',
      fontWeight: 600,
      color: '#00a5fa',
      backgroundColor: '#eff6ff',
      padding: '1px 5px',
      borderRadius: 3,
      textTransform: 'uppercase',
      letterSpacing: '0.03em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 225,
      columnNumber: 15
    }
  }, "Soon")))), selectedFormat !== 'auto' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#059669',
      marginTop: '0.4rem',
      display: 'flex',
      alignItems: 'center',
      gap: '0.3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 243,
      columnNumber: 11
    }
  }, _i || (_i = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-check-circle",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 244,
      columnNumber: 13
    }
  })), (_competitorFormats$fi = competitorFormats.find(f => f.name === selectedFormat)) === null || _competitorFormats$fi === void 0 ? void 0 : _competitorFormats$fi.label, " format selected \u2014 fields will be mapped automatically, no manual mapping needed.")), displayError && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 250,
      columnNumber: 24
    }
  }, displayError), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    "data-testid": "drop-zone",
    onDrop: handleDrop,
    onDragOver: handleDragOver,
    onDragLeave: () => setDragging(false),
    onClick: () => fileInputRef.current && fileInputRef.current.click(),
    style: {
      border: "2px dashed ".concat(dragging ? '#00a5fa' : '#d1d5db'),
      borderRadius: 8,
      padding: '3rem 2rem',
      textAlign: 'center',
      cursor: 'pointer',
      backgroundColor: dragging ? '#f0f9ff' : '#fafafa',
      transition: 'all 0.15s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 252,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-cloud-upload",
    style: {
      fontSize: '2.5rem',
      color: '#9ca3af',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 268,
      columnNumber: 9
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: '#6b7280',
      fontSize: '0.95rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 269,
      columnNumber: 9
    }
  }, fileName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 271,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 271,
      columnNumber: 21
    }
  }, fileName), " \u2014 drop a new file to replace") : _span || (_span = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 272,
      columnNumber: 15
    }
  }, "Drop your file here, or ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 272,
      columnNumber: 45
    }
  }, "click to browse")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: '#9ca3af',
      fontSize: '0.8rem',
      marginTop: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 275,
      columnNumber: 9
    }
  }, "Supported: ", ACCEPTED_EXTENSIONS.join(', '))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    ref: fileInputRef,
    type: "file",
    accept: ACCEPTED_EXTENSIONS.join(','),
    onChange: e => handleFile(e.target.files[0]),
    style: {
      display: 'none'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 280,
      columnNumber: 7
    }
  }));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportStepUpload);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportStepPreview.js",
  _h,
  _div;

var MAX_PREVIEW_ROWS = 10;
var FORMAT_DISPLAY = {
  csv: {
    label: 'CSV',
    icon: 'fa-file-text-o',
    color: '#2563eb'
  },
  json: {
    label: 'JSON',
    icon: 'fa-file-code-o',
    color: '#7c3aed'
  },
  excel: {
    label: 'Excel',
    icon: 'fa-file-excel-o',
    color: '#059669'
  },
  northridge: {
    label: 'Northridge',
    icon: 'fa-exchange',
    color: '#d97706'
  }
};
var ImportStepPreview = _ref => {
  var {
    rows,
    headers,
    format,
    preMapped,
    singleAgreementMode = false,
    targetAgreementName = null,
    onNext,
    onBack
  } = _ref;
  var previewRows = rows.slice(0, MAX_PREVIEW_ROWS);
  var fmtInfo = FORMAT_DISPLAY[format] || {
    label: format || 'File',
    icon: 'fa-file-o',
    color: '#6b7280'
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 26,
      columnNumber: 5
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 27,
      columnNumber: 7
    }
  }, "Preview Data")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex align-items-center mb-3",
    style: {
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 30,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'inline-flex',
      alignItems: 'center',
      gap: '0.4rem',
      padding: '0.35rem 0.75rem',
      borderRadius: 20,
      backgroundColor: fmtInfo.color + '12',
      border: "1px solid ".concat(fmtInfo.color, "40"),
      fontSize: '0.85rem',
      fontWeight: 600,
      color: fmtInfo.color
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 31,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(fmtInfo.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 43,
      columnNumber: 11
    }
  }), fmtInfo.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.9rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 46,
      columnNumber: 9
    }
  }, rows.length, " record", rows.length !== 1 ? 's' : '', " detected", rows.length > MAX_PREVIEW_ROWS && " (showing first ".concat(MAX_PREVIEW_ROWS, ")"))), singleAgreementMode && rows.length > 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'flex-start',
      gap: '0.5rem',
      padding: '0.6rem 0.8rem',
      borderRadius: 6,
      backgroundColor: '#fef2f2',
      border: '1px solid #fecaca',
      fontSize: '0.85rem',
      color: '#7f1d1d',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 54,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-exclamation-triangle",
    style: {
      color: '#dc2626',
      marginTop: 2
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 66,
      columnNumber: 11
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      lineHeight: 1.45
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 67,
      columnNumber: 11
    }
  }, "Your file has ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 68,
      columnNumber: 27
    }
  }, rows.length, " rows"), ", but you are only updating", ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 69,
      columnNumber: 13
    }
  }, targetAgreementName || 'this agreement'), ". Only the first row will be applied to this agreement. To import multiple agreements, cancel and use the all-agreements import instead.")), preMapped && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem',
      padding: '0.5rem 0.75rem',
      borderRadius: 6,
      backgroundColor: '#ecfdf5',
      border: '1px solid #a7f3d0',
      fontSize: '0.85rem',
      color: '#065f46',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 77,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-check-circle",
    style: {
      color: '#059669'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 89,
      columnNumber: 11
    }
  }), "Fields auto-mapped from ", fmtInfo.label, " format \u2014 manual mapping will be skipped."), headers.length === 0 ? _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-warning",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 95,
      columnNumber: 9
    }
  }, "No columns detected. Check your file format.")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      overflowX: 'auto',
      maxHeight: 350,
      border: '1px solid #e5e7eb',
      borderRadius: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 97,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("table", {
    className: "table table-sm table-bordered",
    style: {
      fontSize: '0.8rem',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 98,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("thead", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 99,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
    style: {
      backgroundColor: '#f9fafb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 100,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      color: '#9ca3af',
      width: 40,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 101,
      columnNumber: 17
    }
  }, "#"), headers.map(h => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    key: h,
    style: {
      whiteSpace: 'nowrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 103,
      columnNumber: 19
    }
  }, h)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tbody", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 107,
      columnNumber: 13
    }
  }, previewRows.map((row, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
    key: i,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 109,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
    style: {
      color: '#9ca3af',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 110,
      columnNumber: 19
    }
  }, i + 1), headers.map(h => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
    key: h,
    style: {
      maxWidth: 200,
      overflow: 'hidden',
      textOverflow: 'ellipsis',
      whiteSpace: 'nowrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 112,
      columnNumber: 21
    }
  }, row[h] != null ? String(row[h]) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      color: '#d1d5db'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 113,
      columnNumber: 58
    }
  }, "\u2014")))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between mt-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 123,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn btn-default",
    onClick: onBack,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 124,
      columnNumber: 9
    }
  }, "Back"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    onClick: onNext,
    disabled: rows.length === 0,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 125,
      columnNumber: 9
    }
  }, preMapped ? 'Continue to Validation' : 'Continue to Mapping')));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportStepPreview);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/agreementImportExport */ "./src/utils/agreementImportExport/index.js");
/* harmony import */ var _utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportStepMapping.js",
  _h,
  _option;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }


var targetFields = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getAvailableTargetFields"])();
var grouped = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getFieldsByCategory"])();
var categoryOrder = Object.keys(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["FIELD_CATEGORIES"]);
var ImportStepMapping = _ref => {
  var {
    headers,
    sampleRows,
    onMappingsConfirmed,
    onBack
  } = _ref;
  var [mappings, setMappings] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    var autoMapped = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["autoMapHeaders"])(headers);
    setMappings(autoMapped);
  }, [headers]);
  var usedTargets = new Set(mappings.filter(m => m.targetField).map(m => m.targetField.key));
  var updateMapping = (sourceIndex, targetKey) => {
    setMappings(prev => {
      var next = [...prev];
      if (targetKey === '') {
        next[sourceIndex] = _objectSpread(_objectSpread({}, next[sourceIndex]), {}, {
          targetField: null,
          confidence: 0
        });
      } else {
        var field = targetFields.find(f => f.key === targetKey);
        next[sourceIndex] = _objectSpread(_objectSpread({}, next[sourceIndex]), {}, {
          targetField: field || null,
          confidence: 100
        });
      }
      return next;
    });
  };

  // Check if required fields are mapped
  var requiredMissing = targetFields.filter(f => f.required).filter(f => !usedTargets.has(f.key));
  var handleContinue = () => {
    onMappingsConfirmed(mappings);
  };

  // Get a sample parsed preview for a mapping
  var getSamplePreview = mapping => {
    if (!mapping.targetField || !sampleRows || sampleRows.length === 0) return null;
    var rawVal = sampleRows[0][mapping.sourceHeader];
    if (rawVal == null || rawVal === '') return null;
    var fieldDef = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["getFieldByKey"])(mapping.targetField.key);
    if (!fieldDef || fieldDef.type === 'string') return null;
    var result = Object(_utils_agreementImportExport__WEBPACK_IMPORTED_MODULE_1__["coerceValue"])(rawVal, fieldDef.type);
    return {
      raw: rawVal,
      parsed: result.value,
      warning: result.warning
    };
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 61,
      columnNumber: 5
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 62,
      columnNumber: 7
    }
  }, "Map Fields")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "text-muted mb-3",
    style: {
      fontSize: '0.9rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 63,
      columnNumber: 7
    }
  }, "We auto-detected mappings from your column headers. Review and adjust as needed. Fields marked with ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      color: '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 65,
      columnNumber: 28
    }
  }, "*"), " are required."), requiredMissing.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-warning mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 69,
      columnNumber: 9
    }
  }, "Required field", requiredMissing.length > 1 ? 's' : '', " not mapped:", ' ', requiredMissing.map(f => f.label).join(', ')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxHeight: 400,
      overflowY: 'auto',
      border: '1px solid #e5e7eb',
      borderRadius: 6,
      padding: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 75,
      columnNumber: 7
    }
  }, mappings.map((mapping, i) => {
    var preview = getSamplePreview(mapping);
    var isLowConfidence = mapping.targetField && mapping.confidence < 70;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: mapping.sourceHeader,
      className: "d-flex align-items-start",
      style: {
        padding: '0.5rem',
        borderBottom: i < mappings.length - 1 ? '1px solid #f3f4f6' : 'none',
        backgroundColor: isLowConfidence ? '#fffbeb' : 'transparent',
        gap: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 81,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1,
        minWidth: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 92,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 93,
        columnNumber: 17
      }
    }, mapping.sourceHeader), preview && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.75rem',
        color: preview.warning ? '#dc2626' : '#6b7280',
        marginTop: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 95,
        columnNumber: 19
      }
    }, "\"", preview.raw, "\" \u2192 ", preview.warning || String(preview.parsed))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        alignSelf: 'center',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 102,
        columnNumber: 15
      }
    }, "\u2192"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1,
        minWidth: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 105,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
      className: "form-control form-control-sm",
      value: mapping.targetField ? mapping.targetField.key : '',
      onChange: e => updateMapping(i, e.target.value),
      style: {
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 106,
        columnNumber: 17
      }
    }, _option || (_option = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
      value: "",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 112,
        columnNumber: 19
      }
    }, "Skip this column")), categoryOrder.filter(cat => grouped[cat]).map(cat => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("optgroup", {
      key: cat,
      label: grouped[cat].label,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 114,
        columnNumber: 21
      }
    }, grouped[cat].fields.map(f => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
      key: f.key,
      value: f.key,
      disabled: usedTargets.has(f.key) && (!mapping.targetField || mapping.targetField.key !== f.key),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 116,
        columnNumber: 25
      }
    }, f.label, f.required ? ' *' : ''))))), isLowConfidence && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.7rem',
        color: '#d97706',
        marginTop: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 128,
        columnNumber: 19
      }
    }, "Low confidence \u2014 please verify")));
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between mt-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 138,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn btn-default",
    onClick: onBack,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 139,
      columnNumber: 9
    }
  }, "Back"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    onClick: handleContinue,
    disabled: requiredMissing.length > 0,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 140,
      columnNumber: 9
    }
  }, "Continue")));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportStepMapping);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportStepDuplicates.js",
  _h,
  _div,
  _h2,
  _th,
  _th2,
  _th3,
  _th4;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }

var STRATEGIES = [{
  value: 'skip',
  label: 'Skip',
  desc: 'Keep existing, ignore import'
}, {
  value: 'overwrite',
  label: 'Overwrite',
  desc: 'Replace existing with imported data'
}, {
  value: 'mergeImportWins',
  label: 'Merge (import wins)',
  desc: 'Combine fields, imported values take priority'
}, {
  value: 'mergeExistingWins',
  label: 'Merge (existing wins)',
  desc: 'Combine fields, existing values take priority'
}];
var ImportStepDuplicates = _ref => {
  var {
    duplicates,
    mappedRows,
    onStrategiesConfirmed,
    onBack
  } = _ref;
  var dupsWithMatch = duplicates.filter(d => d.existingAgreement);
  var [defaultStrategy, setDefaultStrategy] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('skip');
  var [perRowStrategy, setPerRowStrategy] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({});
  var getStrategy = importIndex => {
    return perRowStrategy[importIndex] || defaultStrategy;
  };
  var setRowStrategy = (importIndex, strategy) => {
    setPerRowStrategy(prev => _objectSpread(_objectSpread({}, prev), {}, {
      [importIndex]: strategy
    }));
  };
  var handleContinue = () => {
    var strategies = {};
    duplicates.forEach(d => {
      if (d.existingAgreement) {
        strategies[d.importIndex] = getStrategy(d.importIndex);
      }
    });
    onStrategiesConfirmed(strategies);
  };

  // If no duplicates, auto-advance
  if (dupsWithMatch.length === 0) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 37,
        columnNumber: 7
      }
    }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
      className: "mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 38,
        columnNumber: 9
      }
    }, "Duplicate Check")), _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "alert alert-success mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 39,
        columnNumber: 9
      }
    }, "No duplicates found. All records will be created as new agreements.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "d-flex justify-content-between mt-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 42,
        columnNumber: 9
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      className: "btn btn-default",
      onClick: onBack,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 43,
        columnNumber: 11
      }
    }, "Back"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      className: "btn lw-btn",
      onClick: () => onStrategiesConfirmed({}),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 44,
        columnNumber: 11
      }
    }, "Continue")));
  }
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 53,
      columnNumber: 5
    }
  }, _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 54,
      columnNumber: 7
    }
  }, "Duplicate Detection")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
    className: "text-muted mb-3",
    style: {
      fontSize: '0.9rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 55,
      columnNumber: 7
    }
  }, dupsWithMatch.length, " record", dupsWithMatch.length !== 1 ? 's' : '', " match existing agreements. Choose how to handle each."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "mb-3",
    style: {
      padding: '0.75rem',
      backgroundColor: '#f9fafb',
      borderRadius: 6,
      border: '1px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 61,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    className: "form-label fw-bold",
    style: {
      fontSize: '0.85rem',
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 62,
      columnNumber: 9
    }
  }, "Default strategy for all duplicates:"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    className: "form-control form-control-sm",
    value: defaultStrategy,
    onChange: e => setDefaultStrategy(e.target.value),
    style: {
      maxWidth: 280
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 65,
      columnNumber: 9
    }
  }, STRATEGIES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s.value,
    value: s.value,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 72,
      columnNumber: 13
    }
  }, s.label, " \u2014 ", s.desc)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxHeight: 350,
      overflowY: 'auto',
      border: '1px solid #e5e7eb',
      borderRadius: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 78,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("table", {
    className: "table table-sm",
    style: {
      fontSize: '0.8rem',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 79,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("thead", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 80,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
    style: {
      backgroundColor: '#f9fafb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 81,
      columnNumber: 13
    }
  }, _th || (_th = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 82,
      columnNumber: 15
    }
  }, "Import Row")), _th2 || (_th2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 83,
      columnNumber: 15
    }
  }, "Matched Existing")), _th3 || (_th3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 84,
      columnNumber: 15
    }
  }, "Match Type")), _th4 || (_th4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 85,
      columnNumber: 15
    }
  }, "Strategy")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tbody", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 88,
      columnNumber: 11
    }
  }, dupsWithMatch.map(dup => {
    var row = mappedRows[dup.importIndex] || {};
    var existing = dup.existingAgreement;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
      key: dup.importIndex,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 93,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 94,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 95,
        columnNumber: 21
      }
    }, row.borrowerFirstName || row.businessName || "Row ".concat(dup.importIndex + 1)), row.accountNumber && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 96,
        columnNumber: 43
      }
    }, row.accountNumber)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 98,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 99,
        columnNumber: 21
      }
    }, existing.borrowerFirstName || existing.borrowerfirstname || existing.businessName || 'Unknown'), existing.accountNumber && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 100,
        columnNumber: 48
      }
    }, existing.accountNumber)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 102,
        columnNumber: 19
      }
    }, dup.matchType), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 103,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
      className: "form-control form-control-sm",
      value: getStrategy(dup.importIndex),
      onChange: e => setRowStrategy(dup.importIndex, e.target.value),
      style: {
        fontSize: '0.8rem',
        minWidth: 130
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 104,
        columnNumber: 21
      }
    }, STRATEGIES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
      key: s.value,
      value: s.value,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 111,
        columnNumber: 25
      }
    }, s.label)))));
  })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between mt-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 122,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn btn-default",
    onClick: onBack,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 123,
      columnNumber: 9
    }
  }, "Back"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    onClick: handleContinue,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 124,
      columnNumber: 9
    }
  }, "Continue")));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportStepDuplicates);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportStepConfirm.js",
  _h;

var ImportStepConfirm = _ref => {
  var {
    validationResult,
    dryRunPlan,
    onConfirm,
    onBack
  } = _ref;
  var {
    summary,
    invalidRows,
    allWarnings
  } = validationResult;
  var creates = dryRunPlan.filter(p => p.action === 'create').length;
  var updates = dryRunPlan.filter(p => p.action === 'update').length;
  var skips = dryRunPlan.filter(p => p.action === 'skip').length;
  var totalToProcess = creates + updates;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 12,
      columnNumber: 5
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 13,
      columnNumber: 7
    }
  }, "Confirm Import")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex mb-3",
    style: {
      gap: '0.75rem',
      flexWrap: 'wrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 16,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#ecfdf5',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 17,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#059669'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 18,
      columnNumber: 11
    }
  }, summary.valid), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#065f46'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 19,
      columnNumber: 11
    }
  }, "Valid")), summary.invalid > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#fef2f2',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 22,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 23,
      columnNumber: 13
    }
  }, summary.invalid), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#991b1b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 24,
      columnNumber: 13
    }
  }, "Errors")), creates > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#eff6ff',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 28,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#2563eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 29,
      columnNumber: 13
    }
  }, creates), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#1e40af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 30,
      columnNumber: 13
    }
  }, "New")), updates > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#fefce8',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 34,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#ca8a04'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 35,
      columnNumber: 13
    }
  }, updates), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#854d0e'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 36,
      columnNumber: 13
    }
  }, "Updates")), skips > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#f9fafb',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 40,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 41,
      columnNumber: 13
    }
  }, skips), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 42,
      columnNumber: 13
    }
  }, "Skipped"))), invalidRows.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 49,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex align-items-center justify-content-between mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 50,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    style: {
      fontSize: '0.85rem',
      color: '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 51,
      columnNumber: 13
    }
  }, invalidRows.length, " row", invalidRows.length !== 1 ? 's' : '', " with errors \u2014 will be skipped")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxHeight: 150,
      overflowY: 'auto',
      border: '1px solid #fecaca',
      borderRadius: 6,
      padding: '0.5rem',
      backgroundColor: '#fef2f2'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 55,
      columnNumber: 11
    }
  }, invalidRows.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: r.index,
    style: {
      fontSize: '0.8rem',
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 57,
      columnNumber: 15
    }
  }, r.errors.map((e, ei) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: ei,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 59,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 59,
      columnNumber: 33
    }
  }, "Row ", e.row, ":"), " ", e.message)))))), allWarnings.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 69,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    style: {
      fontSize: '0.85rem',
      color: '#d97706'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 70,
      columnNumber: 11
    }
  }, allWarnings.length, " warning", allWarnings.length !== 1 ? 's' : ''), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxHeight: 100,
      overflowY: 'auto',
      fontSize: '0.8rem',
      color: '#92400e',
      marginTop: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 73,
      columnNumber: 11
    }
  }, allWarnings.slice(0, 10).map((w, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: i,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 75,
      columnNumber: 15
    }
  }, "Row ", w.row, ": ", w.message)), allWarnings.length > 10 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 77,
      columnNumber: 41
    }
  }, "...and ", allWarnings.length - 10, " more"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between mt-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 82,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn btn-default",
    onClick: onBack,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 83,
      columnNumber: 9
    }
  }, "Back"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    onClick: () => onConfirm(),
    disabled: totalToProcess === 0,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 84,
      columnNumber: 9
    }
  }, "Import ", totalToProcess, " Agreement", totalToProcess !== 1 ? 's' : '')));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportStepConfirm);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/ImportExport/ImportStepResult.js",
  _h;

var ImportStepResult = _ref => {
  var {
    result,
    onClose,
    onViewAgreements
  } = _ref;
  var {
    created,
    updated,
    skipped,
    failed
  } = result;
  var totalSuccess = created + updated;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 8,
      columnNumber: 5
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 9,
      columnNumber: 7
    }
  }, "Import Complete")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex mb-3",
    style: {
      gap: '0.75rem',
      flexWrap: 'wrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 12,
      columnNumber: 7
    }
  }, created > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#ecfdf5',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 14,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#059669'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 15,
      columnNumber: 13
    }
  }, created), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#065f46'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 16,
      columnNumber: 13
    }
  }, "Created")), updated > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#eff6ff',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 20,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#2563eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 21,
      columnNumber: 13
    }
  }, updated), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#1e40af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 22,
      columnNumber: 13
    }
  }, "Updated")), skipped > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#f9fafb',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 26,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 27,
      columnNumber: 13
    }
  }, skipped), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 28,
      columnNumber: 13
    }
  }, "Skipped")), failed.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 100,
      padding: '0.75rem',
      backgroundColor: '#fef2f2',
      borderRadius: 6,
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 32,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 33,
      columnNumber: 13
    }
  }, failed.length), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#991b1b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 34,
      columnNumber: 13
    }
  }, "Failed"))), totalSuccess > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-success",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 40,
      columnNumber: 9
    }
  }, "Successfully imported ", totalSuccess, " agreement", totalSuccess !== 1 ? 's' : '', "."), failed.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 47,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    style: {
      fontSize: '0.85rem',
      color: '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 48,
      columnNumber: 11
    }
  }, "Failed rows:"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxHeight: 200,
      overflowY: 'auto',
      border: '1px solid #fecaca',
      borderRadius: 6,
      padding: '0.5rem',
      backgroundColor: '#fef2f2',
      marginTop: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 49,
      columnNumber: 11
    }
  }, failed.map((f, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: i,
    style: {
      fontSize: '0.8rem',
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 51,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 52,
      columnNumber: 17
    }
  }, "Row ", f.index + 1, ":"), " ", f.error, f.row && f.row.borrowerFirstName && " (".concat(f.row.borrowerFirstName, ")"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-end",
    style: {
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 60,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn btn-default",
    onClick: onClose,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 61,
      columnNumber: 9
    }
  }, "Close"), onViewAgreements && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    onClick: onViewAgreements,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 63,
      columnNumber: 11
    }
  }, "View Agreements")));
};
/* harmony default export */ __webpack_exports__["default"] = (ImportStepResult);__webpack_require__.r(__webpack_exports__);
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
/* harmony import */ var _actions_agreementActions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../actions/agreementActions */ "./src/actions/agreementActions.js");
/* harmony import */ var _actions_apiActions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../actions/apiActions */ "./src/actions/apiActions.js");
/* harmony import */ var _actions_memberActions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../actions/memberActions */ "./src/actions/memberActions.js");
/* harmony import */ var _actions_taskActions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../actions/taskActions */ "./src/actions/taskActions.js");
/* harmony import */ var _components_DataTable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/DataTable */ "./src/components/DataTable.js");
/* harmony import */ var _components_EmptyState__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/EmptyState */ "./src/components/EmptyState.js");
/* harmony import */ var _components_TaskCard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/TaskCard */ "./src/components/TaskCard.js");
/* harmony import */ var _images_zero_item_views_task_png__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../images/zero-item-views/task.png */ "./src/images/zero-item-views/task.png");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../styles/dashboard-page.scss */ "./src/styles/dashboard-page.scss");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var _utils_QuestionnaireHelper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/QuestionnaireHelper */ "./src/utils/QuestionnaireHelper.js");
/* harmony import */ var _components_ImportExport_ExportModal__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../components/ImportExport/ExportModal */ "./src/components/ImportExport/ExportModal.js");
/* harmony import */ var _components_ImportExport_ImportWizard__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../components/ImportExport/ImportWizard */ "./src/components/ImportExport/ImportWizard.js");
/* harmony import */ var _utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../utils/QueryServiceHelper */ "./src/utils/QueryServiceHelper.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_posthog__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utils/posthog */ "./src/utils/posthog.js");
/* harmony import */ var _utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../utils/standaloneRoles */ "./src/utils/standaloneRoles.js");

var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneDashboard.js",
  _h,
  _p,
  _h2,
  _p2,
  _h3,
  _p3,
  _div,
  _thead,
  _div2,
  _p4,
  _button2,
  _h4,
  _h5,
  _h6,
  _p5,
  _label,
  _label2,
  _label3,
  _h7,
  _p6,
  _label4,
  _label5,
  _option,
  _option2,
  _option3,
  _label6,
  _label7,
  _option4,
  _label8,
  _h8,
  _p7,
  _label9,
  _label0;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }




















var StandaloneDashboard = Object(react_router_dom__WEBPACK_IMPORTED_MODULE_3__["withRouter"])(_ref => {
  var _button, _button3;
  var {
    user,
    history,
    match,
    tasks,
    agreements,
    accountConfig,
    taskActions,
    agreementActions,
    memberActions,
    apiActions,
    loggedInMember,
    members,
    users,
    accountName,
    taskTemplates
  } = _ref;
  var isMember = Object(react__WEBPACK_IMPORTED_MODULE_1__["useMemo"])(() => !!(loggedInMember && loggedInMember.id), [loggedInMember === null || loggedInMember === void 0 ? void 0 : loggedInMember.id]);
  var sectionType = lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(match, 'params.sectionType', null);
  var [showAllTasks, setShowAllTasks] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [createModalOpen, setCreateModalOpen] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(!!(history.location && history.location.state && history.location.state.openCreateAgreement));
  var [createForm, setCreateForm] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])({
    businessName: '',
    guarantorFirstName: '',
    guarantorLastName: '',
    guarantorEntityName: ''
  });
  var [createSubmitting, setCreateSubmitting] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [showExportModal, setShowExportModal] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [showImportWizard, setShowImportWizard] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [sqlAgreements, setSqlAgreements] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);

  /**
   * Fetch the current agreement set from SQL — same source as the DataTable grid.
   * Used by import (for duplicate detection) and export (for data consistency).
   */
  var fetchAgreementsFromSql = Object(react__WEBPACK_IMPORTED_MODULE_1__["useCallback"])(/*#__PURE__*/_asyncToGenerator(function* () {
    try {
      var query = "SELECT\n          id,\n          accountnumber AS \"accountNumber\",\n          borrowerfirstname AS \"borrowerFirstName\",\n          borrowerlastname AS \"borrowerLastName\",\n          borroweremail AS \"borrowerEmail\",\n          status,\n          processid AS \"processId\",\n          principal,\n          migratedloanidentifier AS \"migratedLoanIdentifier\",\n          ((datecreated)::timestamp AT TIME ZONE 'America/New_York') AS \"dateCreated\"\n        FROM agreement\n        WHERE (archived IS NULL OR archived <> true)\n        ORDER BY datecreated DESC";
      var result = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_18__["client"].invokeApi({}, '/data-studio/sql', 'POST', {}, {
        query
      });
      var rows = result && result.data && result.data.rows || result && result.data || [];
      setSqlAgreements(Array.isArray(rows) ? rows : []);
      return Array.isArray(rows) ? rows : [];
    } catch (err) {
      console.error('Failed to fetch agreements for import/export:', err);
      // Fall back to Redux state
      var fallback = Array.isArray(agreements) ? agreements : [];
      setSqlAgreements(fallback);
      return fallback;
    }
  }), [agreements]);
  var [createError, setCreateError] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var [inviteModalOpen, setInviteModalOpen] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [inviteForm, setInviteForm] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])({
    firstName: '',
    lastName: '',
    email: '',
    role: 'member'
  });
  var [inviteSubmitting, setInviteSubmitting] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [inviteError, setInviteError] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var [taskModalOpen, setTaskModalOpen] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [taskForm, setTaskForm] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])({
    title: '',
    description: '',
    assignTo: '',
    priority: 'medium',
    dueDate: '',
    agreementId: ''
  });
  var [taskSubmitting, setTaskSubmitting] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [taskError, setTaskError] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var memberCount = Array.isArray(members) ? members.length : 0;
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_dashboard_viewed', {
      section: sectionType || 'home'
    });
  }, [sectionType]);

  // Clear location state so refreshing doesn't re-open the modal
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    if (history.location && history.location.state && history.location.state.openCreateAgreement) {
      history.replace('/dashboard', {});
    }
  }, []);

  // Gate: redirect to billing setup if account is still pending
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    if (!accountName) return;
    var resolvedName = accountName || 'app';
    _utils_httpClient__WEBPACK_IMPORTED_MODULE_18__["client"].invokeApi({}, "/account/by-name/".concat(resolvedName), 'GET', {}, {}).then(res => {
      if (res.data && res.data.status === 'pending') {
        history.replace('/signup/billing-pending');
      }
    }).catch(() => {}); // fail silently — don't block the dashboard
  }, [accountName]);
  var openCreateModal = () => {
    setCreateForm({
      businessName: '',
      guarantorFirstName: '',
      guarantorLastName: '',
      guarantorEntityName: ''
    });
    setCreateError(null);
    setCreateSubmitting(false);
    setCreateModalOpen(true);
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_create_agreement_opened');
  };
  var closeCreateModal = () => {
    if (!createSubmitting) setCreateModalOpen(false);
  };
  var handleCreateChange = e => {
    setCreateForm(_objectSpread(_objectSpread({}, createForm), {}, {
      [e.target.name]: e.target.value
    }));
  };
  var handleCreateSubmit = /*#__PURE__*/function () {
    var _ref3 = _asyncToGenerator(function* (e) {
      e.preventDefault();
      if (!createForm.businessName.trim()) {
        setCreateError('Business Name is required.');
        return;
      }
      setCreateSubmitting(true);
      setCreateError(null);
      try {
        var guarantorFirstName = createForm.guarantorFirstName.trim() || undefined;
        var guarantorLastName = createForm.guarantorLastName.trim() || undefined;
        var guarantorName = [guarantorFirstName, guarantorLastName].filter(Boolean).join(' ') || undefined;
        var defaultProcessId = lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(accountConfig, 'defaultProcessId', 'default');
        var result = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_18__["client"].invokeApi({}, '/agreement', 'POST', {}, {
          processId: defaultProcessId,
          businessName: createForm.businessName.trim(),
          borrowerFirstName: createForm.businessName.trim(),
          borrowerLastName: guarantorLastName,
          guarantorFirstName,
          guarantorLastName,
          guarantorName,
          guarantorEntityName: createForm.guarantorEntityName.trim() || undefined,
          borrowerName: createForm.businessName.trim(),
          status: 'draft'
        });
        var agreement = result.data;
        setCreateModalOpen(false);
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_agreement_created', {
          agreementId: agreement.id,
          businessName: createForm.businessName.trim()
        });
        history.push("/agreements/".concat(agreement.id));
      } catch (err) {
        console.error('Failed to create agreement:', err);
        setCreateError('Failed to create agreement. Please try again.');
        setCreateSubmitting(false);
      }
    });
    return function handleCreateSubmit(_x) {
      return _ref3.apply(this, arguments);
    };
  }();
  var openInviteModal = () => {
    setInviteForm({
      firstName: '',
      lastName: '',
      email: '',
      role: 'member'
    });
    setInviteError(null);
    setInviteSubmitting(false);
    setInviteModalOpen(true);
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_invite_member_opened');
  };
  var closeInviteModal = () => {
    if (!inviteSubmitting) setInviteModalOpen(false);
  };
  var handleInviteChange = e => {
    setInviteForm(_objectSpread(_objectSpread({}, inviteForm), {}, {
      [e.target.name]: e.target.value
    }));
  };
  var handleInviteSubmit = /*#__PURE__*/function () {
    var _ref4 = _asyncToGenerator(function* (e) {
      e.preventDefault();
      if (!inviteForm.firstName.trim()) {
        setInviteError('First name is required.');
        return;
      }
      if (!inviteForm.email.trim()) {
        setInviteError('Email is required.');
        return;
      }
      setInviteSubmitting(true);
      setInviteError(null);
      try {
        yield memberActions.inviteMember({
          firstName: inviteForm.firstName.trim(),
          lastName: inviteForm.lastName.trim() || undefined,
          email: inviteForm.email.trim(),
          role: inviteForm.role
        });
        yield memberActions.getMembers({}, true, true);
        setInviteModalOpen(false);
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_member_invited', {
          role: inviteForm.role
        });
      } catch (err) {
        console.error('Failed to invite member:', err);
        setInviteError('Failed to invite member. Please try again.');
        setInviteSubmitting(false);
      }
    });
    return function handleInviteSubmit(_x2) {
      return _ref4.apply(this, arguments);
    };
  }();
  var activeMemberList = Object(react__WEBPACK_IMPORTED_MODULE_1__["useMemo"])(() => {
    if (!Array.isArray(members)) return [];
    return members.filter(m => m.status === 'active' || !m.status);
  }, [members]);
  var openTaskModal = () => {
    setTaskForm({
      title: '',
      description: '',
      assignTo: '',
      priority: 'medium',
      dueDate: '',
      agreementId: ''
    });
    setTaskError(null);
    setTaskSubmitting(false);
    setTaskModalOpen(true);
    Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_create_task_opened');
  };
  var closeTaskModal = () => {
    if (!taskSubmitting) setTaskModalOpen(false);
  };
  var handleTaskChange = e => {
    setTaskForm(_objectSpread(_objectSpread({}, taskForm), {}, {
      [e.target.name]: e.target.value
    }));
  };
  var handleTaskSubmit = /*#__PURE__*/function () {
    var _ref5 = _asyncToGenerator(function* (e) {
      e.preventDefault();
      if (!taskForm.title.trim()) {
        setTaskError('Title is required.');
        return;
      }
      setTaskSubmitting(true);
      setTaskError(null);
      try {
        var selectedMember = activeMemberList.find(m => m.id === taskForm.assignTo);
        var selectedAgreement = taskForm.agreementId ? (Array.isArray(agreements) ? agreements : []).find(a => a.id === taskForm.agreementId) : null;
        var taskPayload = {
          title: taskForm.title.trim(),
          description: taskForm.description.trim() || undefined,
          taskStatus: 'assigned',
          priority: taskForm.priority,
          dueDate: taskForm.dueDate || undefined,
          userEmail: selectedMember ? selectedMember.email : user.email,
          userName: selectedMember ? [selectedMember.firstName, selectedMember.lastName].filter(Boolean).join(' ') : [user.firstName, user.lastName].filter(Boolean).join(' ') || user.email,
          agreementId: taskForm.agreementId || undefined,
          accountNumber: selectedAgreement ? selectedAgreement.accountNumber : undefined
        };
        yield taskActions.postTask(taskPayload);
        setTaskModalOpen(false);
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_task_created', {
          priority: taskForm.priority,
          hasAssignee: !!taskForm.assignTo
        });
        fetchTasks();
      } catch (err) {
        console.error('Failed to create task:', err);
        setTaskError('Failed to create task. Please try again.');
        setTaskSubmitting(false);
      }
    });
    return function handleTaskSubmit(_x3) {
      return _ref5.apply(this, arguments);
    };
  }();

  // Fetch tasks for current user
  var fetchTasks = Object(react__WEBPACK_IMPORTED_MODULE_1__["useCallback"])(() => {
    if (!user || !user.email) return;
    var email = isMember && loggedInMember !== null && loggedInMember !== void 0 && loggedInMember.email ? loggedInMember.email : user.email;
    var sqlQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_17__["getHomeTasksByEmailQuery"])({
      accountName,
      email
    });
    taskActions.getTasksFromSqlSearch({
      items: sqlQuery.items,
      queryService: sqlQuery.queryService,
      request: {
        query: sqlQuery.query
      }
    }, false);
  }, [user === null || user === void 0 ? void 0 : user.email, isMember, loggedInMember === null || loggedInMember === void 0 ? void 0 : loggedInMember.email, accountName]);
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    fetchTasks();
  }, [fetchTasks]);

  // Load members to check member count for zero state
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    if (isMember && memberActions.getMembers) {
      memberActions.getMembers();
    }
  }, [isMember]);

  // Active tasks (not completed)
  var activeTasks = Object(react__WEBPACK_IMPORTED_MODULE_1__["useMemo"])(() => {
    if (!Array.isArray(tasks)) return [];
    return tasks.filter(t => (t.taskStatus || '').toLowerCase() !== 'completed');
  }, [tasks]);

  // Agreements map for task rendering
  var agreementsById = Object(react__WEBPACK_IMPORTED_MODULE_1__["useMemo"])(() => new Map((Array.isArray(agreements) ? agreements : []).map(a => [a.id, a])), [agreements]);
  var formatDate = dateStr => {
    if (!dateStr) return '-';
    var d = new Date(dateStr);
    return isNaN(d) ? dateStr : d.toLocaleDateString();
  };
  var formatCurrency = amount => {
    if (!amount) return '-';
    return new Intl.NumberFormat('en-US', {
      style: 'currency',
      currency: 'USD'
    }).format(amount);
  };
  var renderTaskCards = () => {
    if (tasks === null) {
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "p-3",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 333,
          columnNumber: 11
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        style: {
          background: '#f1f3f5',
          height: 14,
          width: '40%',
          borderRadius: 6,
          marginBottom: 12
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 334,
          columnNumber: 13
        }
      }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        style: {
          background: '#f1f3f5',
          height: 10,
          width: '85%',
          borderRadius: 6,
          marginBottom: 8
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 335,
          columnNumber: 13
        }
      }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        style: {
          background: '#f1f3f5',
          height: 10,
          width: '78%',
          borderRadius: 6,
          marginBottom: 8
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 336,
          columnNumber: 13
        }
      }));
    }
    if (!tasks || activeTasks.length === 0) {
      return renderZeroState();
    }
    var visibleTasks = showAllTasks ? activeTasks : activeTasks.slice(0, 10);
    return visibleTasks.map(task => {
      var agreementId = task.agreementId || task.agreementid;
      var agreement = agreementsById.get(agreementId) || {};
      var processId = agreement.processId || task.processId || accountConfig && accountConfig.defaultProcessId;
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_TaskCard__WEBPACK_IMPORTED_MODULE_11__["default"], {
        key: task.id,
        task: task,
        agreementId: agreementId,
        processId: processId,
        isMember: true,
        accountConfig: accountConfig,
        isLegacy: false,
        taskTemplates: taskTemplates,
        loggedInUser: user,
        fields: ['assignedTo', 'priority', 'dueDate', 'accountNumber'],
        onCompleteTask: task => taskActions.completeTask(task),
        onButtonClick: () => {
          if (apiActions && typeof apiActions.receiveTaskSuccess === 'function') {
            apiActions.receiveTaskSuccess(task);
          }
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 352,
          columnNumber: 11
        }
      });
    });
  };
  var renderZeroState = () => {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "row",
      "data-testid": "zero-state",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 376,
        columnNumber: 9
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "col-12 col-md-6 mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 377,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "bg-white rounded shadow-sm p-4 text-center",
      style: {
        minHeight: 200,
        display: 'flex',
        flexDirection: 'column',
        alignItems: 'center',
        justifyContent: 'center'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 378,
        columnNumber: 13
      }
    }, memberCount <= 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h4", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 384,
        columnNumber: 19
      }
    }, "Build your team first")), _p || (_p = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
      className: "text-muted mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 385,
        columnNumber: 19
      }
    }, "Invite team members so you can assign tasks and coordinate work together. Once your team is set up, you can create tasks to track who is doing what and when.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
      className: "btn btn-outline-dark",
      onClick: () => {
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_zero_state_clicked', {
          action: 'invite_team'
        });
        history.push('/dashboard/members');
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 389,
        columnNumber: 19
      }
    }, "Invite Team Members")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h4", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 398,
        columnNumber: 19
      }
    }, "Coordinate with your team")), _p2 || (_p2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
      className: "text-muted mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 399,
        columnNumber: 19
      }
    }, "Create tasks to assign work to team members, set priorities and due dates, and keep everyone on the same page.")), _button || (_button = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
      className: "btn btn-dark",
      onClick: openTaskModal,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 403,
        columnNumber: 19
      }
    }, "Create a Task"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "col-12 col-md-6 mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 413,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "bg-white rounded shadow-sm p-4 text-center",
      style: {
        minHeight: 200,
        display: 'flex',
        flexDirection: 'column',
        alignItems: 'center',
        justifyContent: 'center'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 414,
        columnNumber: 13
      }
    }, _h3 || (_h3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h4", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 418,
        columnNumber: 15
      }
    }, "Stay organized")), _p3 || (_p3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
      className: "text-muted mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 419,
        columnNumber: 15
      }
    }, "Tasks keep your team aligned. Assign work, set deadlines, and track progress all in one place. Start by creating your first task.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
      className: "btn btn-outline-dark",
      onClick: () => {
        Object(_utils_posthog__WEBPACK_IMPORTED_MODULE_19__["trackEvent"])('standalone_zero_state_clicked', {
          action: 'create_task_zero'
        });
        openTaskModal();
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 423,
        columnNumber: 15
      }
    }, "Create a Task"))));
  };
  var renderSectionContent = () => {
    if (sectionType === 'users') {
      history.replace('/dashboard/members');
      return null;
    }
    if (sectionType === 'members') {
      if (!Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_20__["isOwnerOrAdmin"])(loggedInMember)) {
        history.replace('/dashboard');
        return null;
      }
      var memberList = Array.isArray(members) ? members : [];
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "row",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 448,
          columnNumber: 11
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "col-12",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 449,
          columnNumber: 13
        }
      }, memberList.length === 0 ? _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "bg-white rounded shadow-sm p-4",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 451,
          columnNumber: 17
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_EmptyState__WEBPACK_IMPORTED_MODULE_10__["default"], {
        title: "No members yet",
        message: "Invite team members to collaborate on agreements and tasks.",
        imageSrc: _images_zero_item_views_task_png__WEBPACK_IMPORTED_MODULE_12__["default"],
        __source: {
          fileName: _jsxFileName,
          lineNumber: 452,
          columnNumber: 19
        }
      }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "bg-white rounded shadow-sm",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 459,
          columnNumber: 17
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("table", {
        className: "table mb-0",
        "data-testid": "members-list",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 460,
          columnNumber: 19
        }
      }, _thead || (_thead = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("thead", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 461,
          columnNumber: 21
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("tr", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 462,
          columnNumber: 23
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("th", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 463,
          columnNumber: 25
        }
      }, "Name"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("th", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 464,
          columnNumber: 25
        }
      }, "Email"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("th", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 465,
          columnNumber: 25
        }
      }, "Role"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("th", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 466,
          columnNumber: 25
        }
      }, "Status")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("tbody", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 469,
          columnNumber: 21
        }
      }, memberList.map(member => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("tr", {
        key: member.id,
        onClick: () => history.push("/dashboard/members/".concat(member.id)),
        style: {
          cursor: 'pointer'
        },
        "data-testid": "member-row",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 471,
          columnNumber: 25
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("td", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 477,
          columnNumber: 27
        }
      }, [member.firstName, member.lastName].filter(Boolean).join(' ') || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("td", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 478,
          columnNumber: 27
        }
      }, member.email || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("td", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 479,
          columnNumber: 27
        }
      }, Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_20__["getRoleDisplayName"])(member.role)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("td", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 480,
          columnNumber: 27
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
        className: "badge bg-".concat(member.status === 'active' ? 'success' : member.status === 'pending' ? 'warning' : 'secondary'),
        __source: {
          fileName: _jsxFileName,
          lineNumber: 481,
          columnNumber: 29
        }
      }, member.status || 'Active')))))))));
    }
    if (sectionType === 'tasks') {
      var tasksTableData = {
        data: {
          baseTable: {
            name: 'baseTable',
            order: 1,
            dataType: 'task',
            origin: 'tasks',
            sql: true,
            sqlSettings: {
              queryService: 'datastudio',
              query: "SELECT\n                  t.id AS \"id\",\n                  t.title AS \"title\",\n                  t.description AS \"description\",\n                  t.taskstatus AS \"taskStatus\",\n                  t.useremail AS \"userEmail\",\n                  t.username AS \"userName\",\n                  t.priority AS \"priority\",\n                  t.agreementid AS \"agreementId\",\n                  a.accountnumber AS \"accountNumber\",\n                  ((t.duedate)::timestamp AT TIME ZONE 'America/New_York') AS \"dueDate\",\n                  ((t.datecreated)::timestamp AT TIME ZONE 'America/New_York') AS \"dateCreated\"\n                FROM task t\n                LEFT JOIN agreement a ON a.id = t.agreementid\n                WHERE (t.archived IS NULL OR t.archived <> 'true')\n                ORDER BY t.duedate DESC NULLS LAST, t.datecreated DESC"
            },
            sqlDataType: 'task',
            primaryKey: 'id',
            visibleFields: [{
              field: 'title',
              headerText: 'Title',
              textAlign: 'Left',
              width: '20%',
              visible: true,
              order: 1,
              type: 'string'
            }, {
              field: 'userName',
              headerText: 'Assigned To',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 2,
              type: 'string'
            }, {
              field: 'taskStatus',
              headerText: 'Status',
              textAlign: 'Left',
              width: '10%',
              visible: true,
              order: 3,
              type: 'string'
            }, {
              field: 'priority',
              headerText: 'Priority',
              textAlign: 'Left',
              width: '10%',
              visible: true,
              order: 4,
              type: 'string'
            }, {
              field: 'dueDate',
              headerText: 'Due Date',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 5,
              type: 'date',
              format: 'MM/dd/yyyy'
            }, {
              field: 'dateCreated',
              headerText: 'Created',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 6,
              type: 'date',
              format: 'MM/dd/yyyy'
            }],
            tableSettings: {
              allowPaging: true,
              allowSorting: true,
              allowFiltering: true,
              filterSettings: {
                type: 'Excel',
                allowSaveFilter: true
              },
              allowResizing: true,
              allowReordering: true,
              showColumnMenu: true,
              showColumnChooser: true,
              allowExcelExport: true,
              allowPdfExport: false,
              showActions: false,
              autoFitColumns: false,
              toolbar: ['Search', 'ColumnChooser', 'ExcelExport'],
              pageSettings: {
                pageSize: 12,
                pageSizes: [8, 12, 20, 50]
              },
              height: '600',
              rowHeight: 40,
              emptyRecordTemplate: '<div style="padding: 40px 20px; text-align: center;"><h5 style="margin-bottom: 8px;">No tasks yet</h5><p style="color: #6c757d; margin: 0;">Create a task to coordinate work with your team. Assign it to a member, set a priority and due date, and track progress.</p></div>',
              sortSettings: {
                columns: [{
                  field: 'dueDate',
                  direction: 'Descending'
                }]
              }
            }
          }
        }
      };
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "row",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 558,
          columnNumber: 11
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "col-12",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 559,
          columnNumber: 13
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_DataTable__WEBPACK_IMPORTED_MODULE_9__["default"], {
        apiActions: apiActions,
        tableData: tasksTableData,
        tableType: "tasks",
        tasks: Array.isArray(tasks) ? tasks : [],
        sql: true,
        legacy: false,
        accountConfig: accountConfig,
        accountName: accountName,
        loggedInMember: loggedInMember,
        __source: {
          fileName: _jsxFileName,
          lineNumber: 560,
          columnNumber: 15
        }
      })));
    }
    if (sectionType === 'apps') {
      var defaultApps = [{
        id: 'app-send-email',
        name: 'Send Email',
        description: 'Send a templated email notification',
        icon: 'fa-envelope'
      }, {
        id: 'app-send-sms',
        name: 'Send SMS',
        description: 'Send an SMS text message',
        icon: 'fa-comment'
      }, {
        id: 'app-generate-doc',
        name: 'Generate Document',
        description: 'Auto-generate a PDF document',
        icon: 'fa-file-pdf-o'
      }, {
        id: 'app-assign-task',
        name: 'Assign Task',
        description: 'Create and assign a task to a team member',
        icon: 'fa-tasks'
      }, {
        id: 'app-webhook',
        name: 'Call Webhook',
        description: 'Send data to an external webhook URL',
        icon: 'fa-plug'
      }, {
        id: 'app-update-status',
        name: 'Update Status',
        description: 'Automatically change agreement status',
        icon: 'fa-refresh'
      }];
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "row",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 586,
          columnNumber: 11
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "col-12",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 587,
          columnNumber: 13
        }
      }, _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "d-flex justify-content-between align-items-center mb-3",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 588,
          columnNumber: 15
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 589,
          columnNumber: 17
        }
      }, "Apps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
        className: "btn btn-dark btn-sm",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 590,
          columnNumber: 17
        }
      }, "Create App"))), _p4 || (_p4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
        className: "text-muted mb-3",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 592,
          columnNumber: 15
        }
      }, "Apps are reusable actions you can attach to triggers on any agreement. Configure them here, then use them in your agreement triggers.")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "row",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 595,
          columnNumber: 15
        }
      }, defaultApps.map(app => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        key: app.id,
        className: "col-12 col-md-6 col-lg-4 mb-3",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 597,
          columnNumber: 19
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "bg-white rounded shadow-sm p-3",
        style: {
          height: '100%'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 598,
          columnNumber: 21
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "d-flex align-items-center mb-2",
        style: {
          gap: '0.75rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 599,
          columnNumber: 23
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        style: {
          width: 36,
          height: 36,
          borderRadius: 8,
          background: 'rgba(0,165,250,0.1)',
          color: '#00a5fa',
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'center'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 600,
          columnNumber: 25
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("i", {
        className: "fa ".concat(app.icon),
        __source: {
          fileName: _jsxFileName,
          lineNumber: 605,
          columnNumber: 27
        }
      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("strong", {
        style: {
          fontSize: '0.95rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 607,
          columnNumber: 25
        }
      }, app.name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
        className: "text-muted mb-2",
        style: {
          fontSize: '0.85rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 609,
          columnNumber: 23
        }
      }, app.description), _button2 || (_button2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
        className: "btn btn-sm btn-outline-dark",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 610,
          columnNumber: 23
        }
      }, "Configure"))))))));
    }
    if (sectionType === 'agreements') {
      var agreementsTableData = {
        data: {
          baseTable: {
            name: 'baseTable',
            order: 1,
            dataType: 'agreement',
            origin: 'agreements',
            sql: true,
            sqlSettings: {
              queryService: 'datastudio',
              query: "SELECT\n                  id,\n                  accountnumber AS \"accountNumber\",\n                  borrowerfirstname AS \"businessName\",\n                  borrowerlastname AS \"borrowerLastName\",\n                  borroweremail AS \"borrowerEmail\",\n                  status,\n                  processid AS \"processId\",\n                  ((datecreated)::timestamp AT TIME ZONE 'America/New_York') AS \"dateCreated\"\n                FROM agreement\n                WHERE (archived IS NULL OR archived <> true)\n                ORDER BY datecreated DESC"
            },
            sqlDataType: 'agreement',
            primaryKey: 'id',
            visibleFields: [{
              field: 'businessName',
              headerText: 'Business Name',
              textAlign: 'Left',
              width: '20%',
              visible: true,
              order: 1,
              type: 'string'
            }, {
              field: 'borrowerLastName',
              headerText: 'Last Name',
              textAlign: 'Left',
              width: '12%',
              visible: true,
              order: 2,
              type: 'string'
            }, {
              field: 'accountNumber',
              headerText: 'Account #',
              textAlign: 'Left',
              width: '12%',
              visible: true,
              order: 3,
              type: 'string'
            }, {
              field: 'id',
              headerText: 'Agreement ID',
              textAlign: 'Left',
              width: '12%',
              visible: true,
              order: 4,
              type: 'string'
            }, {
              field: 'borrowerEmail',
              headerText: 'Email',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 5,
              type: 'string'
            }, {
              field: 'status',
              headerText: 'Status',
              textAlign: 'Left',
              width: '10%',
              visible: true,
              order: 6,
              type: 'string'
            }, {
              field: 'dateCreated',
              headerText: 'Date Created',
              textAlign: 'Left',
              width: '12%',
              visible: true,
              order: 7,
              type: 'date',
              format: 'MM/dd/yyyy'
            }],
            actions: [{
              label: 'View',
              className: 'lw-btn-light',
              onActionClick: row => history.push("/agreements/".concat(row.id))
            }],
            tableSettings: {
              allowPaging: true,
              allowSorting: true,
              allowFiltering: true,
              filterSettings: {
                type: 'Excel',
                allowSaveFilter: true
              },
              allowResizing: true,
              allowReordering: true,
              showColumnMenu: true,
              showColumnChooser: true,
              allowExcelExport: true,
              allowPdfExport: false,
              showActions: true,
              autoFitColumns: false,
              toolbar: ['Search', 'ColumnChooser', 'ExcelExport'],
              pageSettings: {
                pageSize: 12,
                pageSizes: [8, 12, 20, 50]
              },
              height: '600',
              rowHeight: 40,
              emptyRecordTemplate: '<div style="padding: 20px; text-align: center;">No agreements found</div>',
              sortSettings: {
                columns: [{
                  field: 'dateCreated',
                  direction: 'Descending'
                }]
              }
            }
          }
        }
      };
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "row",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 686,
          columnNumber: 11
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
        className: "col-12",
        __source: {
          fileName: _jsxFileName,
          lineNumber: 687,
          columnNumber: 13
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_DataTable__WEBPACK_IMPORTED_MODULE_9__["default"], {
        apiActions: apiActions,
        tableData: agreementsTableData,
        tableType: "agreements",
        sql: true,
        legacy: false,
        accountConfig: accountConfig,
        accountName: accountName,
        __source: {
          fileName: _jsxFileName,
          lineNumber: 688,
          columnNumber: 15
        }
      })));
    }

    // Default: dashboard home (tasks + recent agreements)
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "row",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 705,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "col-12",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 706,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "d-flex justify-content-between align-items-center mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 707,
        columnNumber: 15
      }
    }, _h4 || (_h4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 708,
        columnNumber: 17
      }
    }, "Tasks")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "d-flex align-items-center gap-2",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 709,
        columnNumber: 17
      }
    }, activeTasks.length > 0 && (_button3 || (_button3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
      className: "btn btn-dark btn-sm",
      onClick: openTaskModal,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 711,
        columnNumber: 21
      }
    }, "Create Task"))), tasks !== null && activeTasks.length > 10 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", {
      href: "#",
      className: "small",
      style: {
        color: '#222',
        fontWeight: 500,
        textDecoration: 'underline'
      },
      onClick: e => {
        e.preventDefault();
        setShowAllTasks(!showAllTasks);
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 719,
        columnNumber: 21
      }
    }, showAllTasks ? 'Show less' : "See all ".concat(activeTasks.length, " items")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "mb-5",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 733,
        columnNumber: 15
      }
    }, renderTaskCards()))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "row",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 736,
        columnNumber: 11
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "col-12",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 737,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
      className: "d-flex justify-content-between align-items-center mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 738,
        columnNumber: 15
      }
    }, _h5 || (_h5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 739,
        columnNumber: 17
      }
    }, "Recent Agreements")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__["Link"], {
      to: "/dashboard/agreements",
      className: "small",
      style: {
        color: '#222',
        fontWeight: 500,
        textDecoration: 'underline'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 740,
        columnNumber: 17
      }
    }, "View all")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_DataTable__WEBPACK_IMPORTED_MODULE_9__["default"], {
      apiActions: apiActions,
      tableData: {
        data: {
          baseTable: {
            name: 'baseTable',
            order: 1,
            dataType: 'agreement',
            origin: 'agreements',
            sql: true,
            sqlSettings: {
              queryService: 'datastudio',
              query: "SELECT\n                          id,\n                          accountnumber AS \"accountNumber\",\n                          borrowerfirstname AS \"businessName\",\n                          borrowerlastname AS \"borrowerLastName\",\n                          status,\n                          ((datecreated)::timestamp AT TIME ZONE 'America/New_York') AS \"dateCreated\"\n                        FROM agreement\n                        WHERE (archived IS NULL OR archived <> true)\n                        ORDER BY datecreated DESC\n                        LIMIT 10"
            },
            sqlDataType: 'agreement',
            primaryKey: 'id',
            visibleFields: [{
              field: 'businessName',
              headerText: 'Business Name',
              textAlign: 'Left',
              width: '25%',
              visible: true,
              order: 1,
              type: 'string'
            }, {
              field: 'borrowerLastName',
              headerText: 'Last Name',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 2,
              type: 'string'
            }, {
              field: 'status',
              headerText: 'Status',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 3,
              type: 'string'
            }, {
              field: 'dateCreated',
              headerText: 'Date Created',
              textAlign: 'Left',
              width: '15%',
              visible: true,
              order: 4,
              type: 'date',
              format: 'MM/dd/yyyy'
            }],
            actions: [{
              label: 'View',
              className: 'lw-btn-light',
              onActionClick: row => history.push("/agreements/".concat(row.id))
            }],
            tableSettings: {
              allowPaging: false,
              allowSorting: true,
              allowFiltering: false,
              showActions: true,
              autoFitColumns: false,
              height: 'auto',
              rowHeight: 40,
              emptyRecordTemplate: '<div style="padding: 20px; text-align: center;">No agreements yet</div>',
              sortSettings: {
                columns: [{
                  field: 'dateCreated',
                  direction: 'Descending'
                }]
              }
            }
          }
        }
      },
      tableType: "agreements",
      sql: true,
      legacy: false,
      accountConfig: accountConfig,
      accountName: accountName,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 744,
        columnNumber: 15
      }
    }))));
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "container-fluid no-padding",
    "data-testid": "standalone-dashboard",
    style: {
      background: '#fafbfa',
      minHeight: '100vh'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 810,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 811,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 812,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 813,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-10",
    style: {
      textAlign: 'left',
      color: '#fff'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 814,
      columnNumber: 15
    }
  }, sectionType === 'agreements' ? 'Agreements' : sectionType === 'tasks' ? 'Tasks' : sectionType === 'members' ? 'Members' : sectionType === 'apps' ? 'Apps' : 'Dashboard'), sectionType === 'agreements' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex",
    style: {
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 818,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    onClick: () => {
      fetchAgreementsFromSql().then(() => setShowImportWizard(true));
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 819,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("i", {
    className: "fa fa-upload",
    style: {
      marginRight: 4
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 820,
      columnNumber: 21
    }
  }), "Import"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    onClick: () => {
      fetchAgreementsFromSql().then(() => setShowExportModal(true));
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 822,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("i", {
    className: "fa fa-download",
    style: {
      marginRight: 4
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 823,
      columnNumber: 21
    }
  }), "Export"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    onClick: openCreateModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 825,
      columnNumber: 19
    }
  }, "New Agreement")), sectionType === 'members' && Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_20__["isOwnerOrAdmin"])(loggedInMember) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    "data-testid": "invite-member-button",
    onClick: openInviteModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 831,
      columnNumber: 17
    }
  }, "Invite Member"), sectionType === 'tasks' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "btn lw-btn lw-btn-white",
    onClick: openTaskModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 836,
      columnNumber: 17
    }
  }, "Create Task")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 843,
      columnNumber: 9
    }
  }, renderSectionContent()), showExportModal && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_ImportExport_ExportModal__WEBPACK_IMPORTED_MODULE_15__["default"], {
    agreements: sqlAgreements || (Array.isArray(agreements) ? agreements : []),
    onClose: () => setShowExportModal(false),
    filenamePrefix: "agreements-export",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 849,
      columnNumber: 11
    }
  }), showImportWizard && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_ImportExport_ImportWizard__WEBPACK_IMPORTED_MODULE_16__["default"], {
    onClose: () => setShowImportWizard(false),
    httpClient: _utils_httpClient__WEBPACK_IMPORTED_MODULE_18__["client"],
    existingAgreements: sqlAgreements || (Array.isArray(agreements) ? agreements : []),
    defaultProcessId: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(accountConfig, 'defaultProcessId', 'default'),
    onViewAgreements: () => {
      setShowImportWizard(false);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 858,
      columnNumber: 11
    }
  }), createModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert-wrapper alert-prompt alert-light-background active",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 869,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("i", {
    className: "fa fa-times-circle prompt-close-btn",
    onClick: closeCreateModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 870,
      columnNumber: 13
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      padding: '2rem',
      maxWidth: 500,
      margin: '0 auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 874,
      columnNumber: 13
    }
  }, _h6 || (_h6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 875,
      columnNumber: 15
    }
  }, "Create Agreement")), _p5 || (_p5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
    className: "text-muted mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 876,
      columnNumber: 15
    }
  }, "Enter the basic details to create an agreement. You can add more information later.")), createError && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert alert-danger",
    role: "alert",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 881,
      columnNumber: 17
    }
  }, createError), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("form", {
    onSubmit: handleCreateSubmit,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 886,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 887,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "businessName",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 888,
      columnNumber: 19
    }
  }, "Business Name ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    style: {
      color: '#dc3545'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 889,
      columnNumber: 35
    }
  }, "*")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "businessName",
    name: "businessName",
    className: "form-control",
    value: createForm.businessName,
    onChange: handleCreateChange,
    placeholder: "Enter business name",
    autoFocus: true,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 891,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 903,
      columnNumber: 17
    }
  }, _label || (_label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "guarantorFirstName",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 904,
      columnNumber: 19
    }
  }, "Guarantor First Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "guarantorFirstName",
    name: "guarantorFirstName",
    className: "form-control",
    value: createForm.guarantorFirstName,
    onChange: handleCreateChange,
    placeholder: "Enter first name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 907,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 918,
      columnNumber: 17
    }
  }, _label2 || (_label2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "guarantorLastName",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 919,
      columnNumber: 19
    }
  }, "Guarantor Last Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "guarantorLastName",
    name: "guarantorLastName",
    className: "form-control",
    value: createForm.guarantorLastName,
    onChange: handleCreateChange,
    placeholder: "Enter last name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 922,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 933,
      columnNumber: 17
    }
  }, _label3 || (_label3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "guarantorEntityName",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 934,
      columnNumber: 19
    }
  }, "Guarantor Entity Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "guarantorEntityName",
    name: "guarantorEntityName",
    className: "form-control",
    value: createForm.guarantorEntityName,
    onChange: handleCreateChange,
    placeholder: "Enter entity name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 937,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between",
    style: {
      marginTop: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 948,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "button",
    className: "btn",
    onClick: closeCreateModal,
    disabled: createSubmitting,
    style: {
      backgroundColor: '#6c757d',
      borderColor: '#6c757d',
      color: '#fff',
      minWidth: 100
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 949,
      columnNumber: 19
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "submit",
    className: "btn",
    disabled: createSubmitting,
    style: {
      backgroundColor: '#343a40',
      borderColor: '#343a40',
      color: '#fff',
      minWidth: 160
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 958,
      columnNumber: 19
    }
  }, createSubmitting ? 'Creating...' : 'Create Agreement'))))), taskModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert-wrapper alert-prompt alert-light-background active",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 974,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("i", {
    className: "fa fa-times-circle prompt-close-btn",
    onClick: closeTaskModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 975,
      columnNumber: 13
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      padding: '2rem',
      maxWidth: 500,
      margin: '0 auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 979,
      columnNumber: 13
    }
  }, _h7 || (_h7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 980,
      columnNumber: 15
    }
  }, "Create Task")), _p6 || (_p6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
    className: "text-muted mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 981,
      columnNumber: 15
    }
  }, "Create a task and assign it to a team member. Set a priority and due date to keep things on track.")), taskError && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert alert-danger",
    role: "alert",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 986,
      columnNumber: 17
    }
  }, taskError), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("form", {
    onSubmit: handleTaskSubmit,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 991,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 992,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "taskTitle",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 993,
      columnNumber: 19
    }
  }, "Title ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    style: {
      color: '#dc3545'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 994,
      columnNumber: 27
    }
  }, "*")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "taskTitle",
    name: "title",
    className: "form-control",
    value: taskForm.title,
    onChange: handleTaskChange,
    placeholder: "What needs to be done?",
    autoFocus: true,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 996,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1008,
      columnNumber: 17
    }
  }, _label4 || (_label4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "taskAssignTo",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1009,
      columnNumber: 19
    }
  }, "Assign To")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", {
    id: "taskAssignTo",
    name: "assignTo",
    className: "form-control",
    value: taskForm.assignTo,
    onChange: handleTaskChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1012,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1019,
      columnNumber: 21
    }
  }, "Myself (", user.email, ")"), activeMemberList.map(member => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    key: member.id,
    value: member.id,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1021,
      columnNumber: 23
    }
  }, [member.firstName, member.lastName].filter(Boolean).join(' ') || member.email)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "row mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1028,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-6",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1029,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1030,
      columnNumber: 21
    }
  }, _label5 || (_label5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "taskPriority",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1031,
      columnNumber: 23
    }
  }, "Priority")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", {
    id: "taskPriority",
    name: "priority",
    className: "form-control",
    value: taskForm.priority,
    onChange: handleTaskChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1034,
      columnNumber: 23
    }
  }, _option || (_option = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    value: "low",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1041,
      columnNumber: 25
    }
  }, "Low")), _option2 || (_option2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    value: "medium",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1042,
      columnNumber: 25
    }
  }, "Medium")), _option3 || (_option3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    value: "high",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1043,
      columnNumber: 25
    }
  }, "High"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-6",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1047,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1048,
      columnNumber: 21
    }
  }, _label6 || (_label6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "taskDueDate",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1049,
      columnNumber: 23
    }
  }, "Due Date")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "date",
    id: "taskDueDate",
    name: "dueDate",
    className: "form-control",
    value: taskForm.dueDate,
    onChange: handleTaskChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1052,
      columnNumber: 23
    }
  })))), Array.isArray(agreements) && agreements.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1065,
      columnNumber: 19
    }
  }, _label7 || (_label7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "taskAgreementId",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1066,
      columnNumber: 21
    }
  }, "Agreement")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", {
    id: "taskAgreementId",
    name: "agreementId",
    className: "form-control",
    value: taskForm.agreementId,
    onChange: handleTaskChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1069,
      columnNumber: 21
    }
  }, _option4 || (_option4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1076,
      columnNumber: 23
    }
  }, "None")), (Array.isArray(agreements) ? agreements : []).map(a => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    key: a.id,
    value: a.id,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1078,
      columnNumber: 25
    }
  }, [a.accountNumber, a.borrowerFirstName, a.borrowerLastName].filter(Boolean).join(' - ') || a.id)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1086,
      columnNumber: 17
    }
  }, _label8 || (_label8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "taskDescription",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1087,
      columnNumber: 19
    }
  }, "Description")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("textarea", {
    id: "taskDescription",
    name: "description",
    className: "form-control",
    value: taskForm.description,
    onChange: handleTaskChange,
    placeholder: "Add details about what this task involves...",
    rows: 4,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1090,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between",
    style: {
      marginTop: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1101,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "button",
    className: "btn",
    onClick: closeTaskModal,
    disabled: taskSubmitting,
    style: {
      backgroundColor: '#6c757d',
      borderColor: '#6c757d',
      color: '#fff',
      minWidth: 100
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1102,
      columnNumber: 19
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "submit",
    className: "btn",
    disabled: taskSubmitting,
    style: {
      backgroundColor: '#343a40',
      borderColor: '#343a40',
      color: '#fff',
      minWidth: 160
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1111,
      columnNumber: 19
    }
  }, taskSubmitting ? 'Creating...' : 'Create Task'))))), inviteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert-wrapper alert-prompt alert-light-background active",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1127,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("i", {
    className: "fa fa-times-circle prompt-close-btn",
    onClick: closeInviteModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1128,
      columnNumber: 13
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      padding: '2rem',
      maxWidth: 500,
      margin: '0 auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1132,
      columnNumber: 13
    }
  }, _h8 || (_h8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1133,
      columnNumber: 15
    }
  }, "Invite Member")), _p7 || (_p7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", {
    className: "text-muted mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1134,
      columnNumber: 15
    }
  }, "Send an invitation to join your organization. They will receive an email to create their account.")), inviteError && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "alert alert-danger",
    role: "alert",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1139,
      columnNumber: 17
    }
  }, inviteError), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("form", {
    onSubmit: handleInviteSubmit,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1144,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1145,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "inviteFirstName",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1146,
      columnNumber: 19
    }
  }, "First Name ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    style: {
      color: '#dc3545'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1147,
      columnNumber: 32
    }
  }, "*")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "inviteFirstName",
    name: "firstName",
    className: "form-control",
    value: inviteForm.firstName,
    onChange: handleInviteChange,
    placeholder: "Enter first name",
    autoFocus: true,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1149,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1161,
      columnNumber: 17
    }
  }, _label9 || (_label9 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "inviteLastName",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1162,
      columnNumber: 19
    }
  }, "Last Name")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "text",
    id: "inviteLastName",
    name: "lastName",
    className: "form-control",
    value: inviteForm.lastName,
    onChange: handleInviteChange,
    placeholder: "Enter last name",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1165,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1176,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "inviteEmail",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1177,
      columnNumber: 19
    }
  }, "Email ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
    style: {
      color: '#dc3545'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1178,
      columnNumber: 27
    }
  }, "*")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", {
    type: "email",
    id: "inviteEmail",
    name: "email",
    className: "form-control",
    value: inviteForm.email,
    onChange: handleInviteChange,
    placeholder: "Enter email address",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1180,
      columnNumber: 19
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "form-group mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1191,
      columnNumber: 17
    }
  }, _label0 || (_label0 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", {
    htmlFor: "inviteRole",
    className: "form-label fw-bold",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1192,
      columnNumber: 19
    }
  }, "Role")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", {
    id: "inviteRole",
    name: "role",
    className: "form-control",
    value: inviteForm.role,
    onChange: handleInviteChange,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1195,
      columnNumber: 19
    }
  }, Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_20__["getAssignableRoles"])(loggedInMember).map(role => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", {
    key: role,
    value: role,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1203,
      columnNumber: 23
    }
  }, Object(_utils_standaloneRoles__WEBPACK_IMPORTED_MODULE_20__["getRoleDisplayName"])(role))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between",
    style: {
      marginTop: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1210,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "button",
    className: "btn",
    onClick: closeInviteModal,
    disabled: inviteSubmitting,
    style: {
      backgroundColor: '#6c757d',
      borderColor: '#6c757d',
      color: '#fff',
      minWidth: 100
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1211,
      columnNumber: 19
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "submit",
    className: "btn",
    disabled: inviteSubmitting,
    style: {
      backgroundColor: '#343a40',
      borderColor: '#343a40',
      color: '#fff',
      minWidth: 160
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 1220,
      columnNumber: 19
    }
  }, inviteSubmitting ? 'Sending...' : 'Send Invitation'))))));
});
var mapStateToProps = state => ({
  tasks: state.tasks,
  agreements: state.agreementsByLenderId || state.agreementsByBorrowerId || null,
  accountConfig: state.accountConfig || {},
  taskTemplates: state.taskTemplates || [],
  loggedInMember: state.loggedInMember || {},
  members: state.members || [],
  users: state.users || [],
  accountName: state.accountName || ''
});
var mapDispatchToProps = dispatch => ({
  taskActions: Object(redux__WEBPACK_IMPORTED_MODULE_4__["bindActionCreators"])(_actions_taskActions__WEBPACK_IMPORTED_MODULE_8__, dispatch),
  agreementActions: Object(redux__WEBPACK_IMPORTED_MODULE_4__["bindActionCreators"])(_actions_agreementActions__WEBPACK_IMPORTED_MODULE_5__, dispatch),
  memberActions: Object(redux__WEBPACK_IMPORTED_MODULE_4__["bindActionCreators"])(_actions_memberActions__WEBPACK_IMPORTED_MODULE_7__, dispatch),
  apiActions: Object(redux__WEBPACK_IMPORTED_MODULE_4__["bindActionCreators"])(_actions_apiActions__WEBPACK_IMPORTED_MODULE_6__["apiActions"], dispatch)
});
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(StandaloneDashboard));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetailB.js",
  _div,
  _strong,
  _div2;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }




/**
 * VARIATION B — Full-width dashboard with horizontal stat bar + tabbed triggers/activity
 *
 * Key differences from Variation A:
 * - No two-column split; everything is full-width and stacked
 * - Horizontal stat cards row at top (status, triggers count, success rate, Ask Agent)
 * - Tabbed view: "Triggers" | "Activity Log" | "Agreement Info"
 * - Triggers shown as a clean table with inline expand
 * - Activity as a full-width timeline
 */

var AVAILABLE_APPS = [{
  id: 'app-send-email',
  name: 'Send Email',
  description: 'Send a templated email notification',
  icon: 'fa-envelope'
}, {
  id: 'app-send-sms',
  name: 'Send SMS',
  description: 'Send an SMS text message',
  icon: 'fa-comment'
}, {
  id: 'app-generate-doc',
  name: 'Generate Document',
  description: 'Auto-generate a PDF document',
  icon: 'fa-file-pdf-o'
}, {
  id: 'app-assign-task',
  name: 'Assign Task',
  description: 'Create and assign a task to a team member',
  icon: 'fa-tasks'
}, {
  id: 'app-webhook',
  name: 'Call Webhook',
  description: 'Send data to an external webhook URL',
  icon: 'fa-plug'
}, {
  id: 'app-update-status',
  name: 'Update Status',
  description: 'Automatically change agreement status',
  icon: 'fa-refresh'
}];
var STATUS_OPTIONS = ['draft', 'new', 'in_review', 'approved', 'denied', 'withdrawn', 'completed'];
var MOCK_TRIGGERS = [{
  id: 'trigger-1',
  name: 'New Application Notification',
  type: 'status_change',
  config: {
    fromStatus: '*',
    toStatus: 'new'
  },
  appId: 'app-send-email',
  appConfig: {
    to: 'team@company.com',
    template: 'new_application'
  },
  isDefault: false,
  executions: [{
    id: 'exec-1',
    timestamp: '2026-04-05T14:30:00Z',
    status: 'success',
    summary: 'Email sent to team@company.com'
  }]
}, {
  id: 'trigger-2',
  name: 'Denial Letter',
  type: 'status_change',
  config: {
    fromStatus: 'in_review',
    toStatus: 'denied'
  },
  appId: 'app-generate-doc',
  appConfig: {
    template: 'denial_letter',
    format: 'pdf'
  },
  isDefault: true,
  executions: []
}, {
  id: 'trigger-3',
  name: 'Follow-up Reminder',
  type: 'time_based',
  config: {
    duration: 7,
    unit: 'days',
    from: 'dateCreated'
  },
  appId: 'app-assign-task',
  appConfig: {
    assignee: 'loan.officer@company.com',
    title: 'Follow up with applicant'
  },
  isDefault: true,
  executions: [{
    id: 'exec-2',
    timestamp: '2026-04-04T09:00:00Z',
    status: 'success',
    summary: 'Task assigned to loan.officer@company.com'
  }, {
    id: 'exec-3',
    timestamp: '2026-03-28T09:00:00Z',
    status: 'success',
    summary: 'Task assigned to loan.officer@company.com'
  }]
}, {
  id: 'trigger-4',
  name: 'Amount Change Alert',
  type: 'field_change',
  config: {
    field: 'loanAmount'
  },
  appId: 'app-send-sms',
  appConfig: {
    to: '+15551234567',
    message: 'Loan amount updated for {{businessName}}'
  },
  isDefault: false,
  executions: [{
    id: 'exec-4',
    timestamp: '2026-04-03T16:45:00Z',
    status: 'failed',
    summary: 'SMS delivery failed — invalid number'
  }]
}];
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = dateStr => {
  if (!dateStr) return '-';
  try {
    return new Date(dateStr).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return dateStr;
  }
};
var formatDateTime = dateStr => {
  if (!dateStr) return '-';
  try {
    var d = new Date(dateStr);
    return d.toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric'
    }) + ' at ' + d.toLocaleTimeString('en-US', {
      hour: 'numeric',
      minute: '2-digit'
    });
  } catch (_unused2) {
    return dateStr;
  }
};
var formatCurrency = amount => {
  if (!amount) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(amount);
};
var getApp = appId => AVAILABLE_APPS.find(a => a.id === appId);
var describeTrigger = t => {
  if (t.type === 'status_change') return "".concat(t.config.fromStatus === '*' ? 'Any' : t.config.fromStatus, " \u2192 ").concat(t.config.toStatus);
  if (t.type === 'field_change') return "When \"".concat(t.config.field, "\" changes");
  if (t.type === 'time_based') return "".concat(t.config.duration, " ").concat(t.config.unit, " after ").concat(t.config.from);
  return '-';
};
var typeLabel = t => ({
  status_change: 'Status Change',
  field_change: 'Field Change',
  time_based: 'Time Based'
})[t] || t;
var TABS = {
  TRIGGERS: 'triggers',
  ACTIVITY: 'activity',
  INFO: 'info'
};
var StandaloneAgreementDetailB = _ref => {
  var {
    match,
    history
  } = _ref;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [triggers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(MOCK_TRIGGERS);
  var [activeTab, setActiveTab] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(TABS.TRIGGERS);
  var [expandedTriggerId, setExpandedTriggerId] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    _asyncToGenerator(function* () {
      setLoading(true);
      try {
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/agreement/".concat(agreementId), 'GET', {}, {});
        setAgreement(res.data);
      } catch (_unused3) {
        setAgreement({
          id: agreementId,
          businessName: 'Acme Coffee Roasters',
          guarantorName: 'John Smith',
          borrowerEmail: 'john@acmecoffee.com',
          loanType: 'SBA 7(a)',
          loanAmount: 250000,
          status: 'draft',
          dateCreated: new Date().toISOString(),
          businessOwnerName: 'John Smith'
        });
      }
      setLoading(false);
    })();
  }, [agreementId]);
  var allExecutions = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => triggers.flatMap(t => t.executions.map(e => _objectSpread(_objectSpread({}, e), {}, {
    triggerId: t.id,
    triggerName: t.name,
    appId: t.appId
  }))).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp)), [triggers]);
  var successCount = allExecutions.filter(e => e.status === 'success').length;
  var totalExec = allExecutions.length;
  if (loading) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 124,
      columnNumber: 23
    }
  }, "Loading...");
  if (!agreement) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 125,
      columnNumber: 26
    }
  }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 125,
      columnNumber: 90
    }
  }, "Agreement not found.")));
  var status = agreement.status || 'draft';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail-b",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 130,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 132,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 133,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title",
    style: {
      textAlign: 'left',
      color: '#fff',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 134,
      columnNumber: 11
    }
  }, agreement.businessName || 'Agreement'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 140,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["Link"], {
    to: "/dashboard",
    style: {
      color: '#6b7280',
      fontSize: '0.85rem',
      textDecoration: 'none',
      display: 'inline-block',
      marginBottom: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 141,
      columnNumber: 9
    }
  }, "\u2190 Back to Dashboard"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 146,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-6 col-md-3 mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 147,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      padding: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 148,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      marginBottom: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 149,
      columnNumber: 15
    }
  }, "Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getStatusBadgeClass(status)),
    style: {
      fontSize: '1.1rem',
      padding: '0.3em 1em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 150,
      columnNumber: 15
    }
  }, status), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#9ca3af',
      marginTop: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 151,
      columnNumber: 15
    }
  }, "Since ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-6 col-md-3 mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 154,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      padding: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 155,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      marginBottom: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 156,
      columnNumber: 15
    }
  }, "Amount"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 157,
      columnNumber: 15
    }
  }, formatCurrency(agreement.loanAmount || agreement.amount)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-6 col-md-3 mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 160,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      padding: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 161,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      marginBottom: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 162,
      columnNumber: 15
    }
  }, "Triggers"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '1.5rem',
      fontWeight: 700,
      color: '#00a5fa'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 163,
      columnNumber: 15
    }
  }, triggers.length), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#9ca3af',
      marginTop: '0.2rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 164,
      columnNumber: 15
    }
  }, successCount, "/", totalExec, " successful"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-6 col-md-3 mb-2",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 167,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      padding: '1.25rem',
      cursor: 'pointer',
      background: 'linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%)',
      color: '#fff'
    },
    onClick: () => history.push('/loanwell-ai'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 168,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-magic",
    style: {
      fontSize: '1.5rem',
      marginBottom: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.95rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 170,
      columnNumber: 15
    }
  }, "Ask an Agent"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.75rem',
      opacity: 0.8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 171,
      columnNumber: 15
    }
  }, "LoanWell AI")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      borderBottom: '2px solid #e5e7eb',
      marginBottom: '1rem',
      display: 'flex',
      gap: '0'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 177,
      columnNumber: 9
    }
  }, [{
    key: TABS.TRIGGERS,
    label: 'Triggers',
    icon: 'fa-bolt'
  }, {
    key: TABS.ACTIVITY,
    label: 'Activity Log',
    icon: 'fa-history'
  }, {
    key: TABS.INFO,
    label: 'Agreement Info',
    icon: 'fa-info-circle'
  }].map(tab => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: tab.key,
    onClick: () => setActiveTab(tab.key),
    style: {
      padding: '0.75rem 1.25rem',
      border: 'none',
      background: 'none',
      cursor: 'pointer',
      fontWeight: activeTab === tab.key ? 600 : 400,
      color: activeTab === tab.key ? '#00a5fa' : '#6b7280',
      borderBottom: activeTab === tab.key ? '2px solid #00a5fa' : '2px solid transparent',
      marginBottom: '-2px',
      fontSize: '0.9rem',
      transition: 'all 0.15s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 183,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tab.icon),
    style: {
      marginRight: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 194,
      columnNumber: 15
    }
  }), tab.label)), activeTab === TABS.TRIGGERS && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginLeft: 'auto',
      display: 'flex',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 198,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    className: "btn lw-btn",
    style: {
      fontSize: '0.8rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 199,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus",
    style: {
      marginRight: 4
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 200,
      columnNumber: 17
    }
  }), " Add Trigger"))), activeTab === TABS.TRIGGERS && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 208,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("table", {
    style: {
      width: '100%',
      borderCollapse: 'collapse'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 209,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("thead", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 210,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 211,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      textAlign: 'left',
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      padding: '0.6rem 0.75rem',
      borderBottom: '2px solid #e5e7eb',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 212,
      columnNumber: 19
    }
  }, "Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      textAlign: 'left',
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      padding: '0.6rem 0.75rem',
      borderBottom: '2px solid #e5e7eb',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 213,
      columnNumber: 19
    }
  }, "Type"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      textAlign: 'left',
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      padding: '0.6rem 0.75rem',
      borderBottom: '2px solid #e5e7eb',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 214,
      columnNumber: 19
    }
  }, "Condition"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      textAlign: 'left',
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      padding: '0.6rem 0.75rem',
      borderBottom: '2px solid #e5e7eb',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 215,
      columnNumber: 19
    }
  }, "App"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      textAlign: 'center',
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      padding: '0.6rem 0.75rem',
      borderBottom: '2px solid #e5e7eb',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 216,
      columnNumber: 19
    }
  }, "Runs"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      textAlign: 'center',
      fontSize: '0.75rem',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      color: '#6b7280',
      padding: '0.6rem 0.75rem',
      borderBottom: '2px solid #e5e7eb',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 217,
      columnNumber: 19
    }
  }, "Last Run"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", {
    style: {
      width: 40,
      borderBottom: '2px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 218,
      columnNumber: 19
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tbody", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 15
    }
  }, triggers.map(trigger => {
    var app = getApp(trigger.appId);
    var isExpanded = expandedTriggerId === trigger.id;
    var lastExec = trigger.executions[0];
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: trigger.id,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 227,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
      style: {
        cursor: 'pointer',
        transition: 'background 0.1s'
      },
      onClick: () => setExpandedTriggerId(isExpanded ? null : trigger.id),
      onMouseEnter: e => e.currentTarget.style.background = '#fafbfc',
      onMouseLeave: e => e.currentTarget.style.background = '',
      __source: {
        fileName: _jsxFileName,
        lineNumber: 228,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        fontSize: '0.9rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 234,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 235,
        columnNumber: 27
      }
    }, trigger.name), trigger.isDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        marginLeft: 8,
        display: 'inline-block',
        padding: '0.1em 0.5em',
        borderRadius: 4,
        fontSize: '0.6rem',
        fontWeight: 600,
        textTransform: 'uppercase',
        background: '#ede9fe',
        color: '#7c3aed'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 236,
        columnNumber: 49
      }
    }, "Default")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        fontSize: '0.85rem',
        color: '#4b5563'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 238,
        columnNumber: 25
      }
    }, typeLabel(trigger.type)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        fontSize: '0.85rem',
        color: '#4b5563'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 239,
        columnNumber: 25
      }
    }, describeTrigger(trigger)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 240,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        background: '#f3f4f6',
        padding: '0.2em 0.5em',
        borderRadius: 4,
        fontSize: '0.8rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 241,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        marginRight: 4
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 242,
        columnNumber: 29
      }
    }), app === null || app === void 0 ? void 0 : app.name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        textAlign: 'center',
        fontSize: '0.85rem',
        fontWeight: 600,
        color: trigger.executions.length > 0 ? '#059669' : '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 245,
        columnNumber: 25
      }
    }, trigger.executions.length), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        textAlign: 'center',
        fontSize: '0.8rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 246,
        columnNumber: 25
      }
    }, lastExec ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      className: "standalone-account__badge ".concat(getStatusBadgeClass(lastExec.status)),
      style: {
        fontSize: '0.7rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 248,
        columnNumber: 29
      }
    }, lastExec.status) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        color: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 249,
        columnNumber: 31
      }
    }, "\u2014")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      style: {
        padding: '0.7rem 0.75rem',
        borderBottom: '1px solid #f3f4f6',
        textAlign: 'center'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 251,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'),
      style: {
        color: '#9ca3af',
        fontSize: '0.7rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 252,
        columnNumber: 27
      }
    }))), isExpanded && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 256,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", {
      colSpan: 7,
      style: {
        padding: 0,
        background: '#fafbfc',
        borderBottom: '1px solid #e5e7eb'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 257,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        padding: '1rem 1.5rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 258,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.85rem',
        color: '#374151',
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 259,
        columnNumber: 31
      }
    }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 260,
        columnNumber: 33
      }
    }, "App:")), " ", app === null || app === void 0 ? void 0 : app.name, " \u2014 ", app === null || app === void 0 ? void 0 : app.description), trigger.executions.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.7rem',
        textTransform: 'uppercase',
        letterSpacing: '0.04em',
        color: '#6b7280',
        fontWeight: 600,
        marginBottom: '0.4rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 264,
        columnNumber: 35
      }
    }, "Execution History"), trigger.executions.map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem',
        padding: '0.4rem 0.5rem',
        borderRadius: 6,
        cursor: 'pointer',
        marginBottom: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 266,
        columnNumber: 37
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      className: "standalone-account__badge ".concat(getStatusBadgeClass(exec.status)),
      style: {
        fontSize: '0.7rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 267,
        columnNumber: 39
      }
    }, exec.status), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.82rem',
        color: '#374151'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 268,
        columnNumber: 39
      }
    }, exec.summary), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 269,
        columnNumber: 39
      }
    }, formatDateTime(exec.timestamp))))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        color: '#9ca3af',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 274,
        columnNumber: 33
      }
    }, "This trigger has not fired yet.")))));
  })))), activeTab === TABS.ACTIVITY && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 290,
      columnNumber: 11
    }
  }, allExecutions.length === 0 ? _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__empty",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 292,
      columnNumber: 15
    }
  }, "No activity yet.")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative',
      paddingLeft: '2rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 294,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      left: '0.55rem',
      top: 8,
      bottom: 8,
      width: 2,
      background: '#e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 296,
      columnNumber: 17
    }
  }), allExecutions.map(exec => {
    var app = getApp(exec.appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      style: {
        position: 'relative',
        paddingBottom: '1.5rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 300,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        position: 'absolute',
        left: '-1.7rem',
        top: 4,
        width: 12,
        height: 12,
        borderRadius: '50%',
        background: exec.status === 'success' ? '#059669' : '#dc2626',
        border: '2px solid #fff'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 302,
        columnNumber: 23
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'flex-start'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 306,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 307,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.9rem',
        color: '#001433',
        marginBottom: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 308,
        columnNumber: 27
      }
    }, exec.triggerName, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        marginLeft: 8,
        fontSize: '0.7rem',
        background: '#f3f4f6',
        padding: '0.1em 0.45em',
        borderRadius: 3,
        color: '#6b7280',
        fontWeight: 500
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 310,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(app === null || app === void 0 ? void 0 : app.icon),
      style: {
        marginRight: 3
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 311,
        columnNumber: 31
      }
    }), app === null || app === void 0 ? void 0 : app.name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.85rem',
        color: '#4b5563'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 314,
        columnNumber: 27
      }
    }, exec.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        textAlign: 'right',
        flexShrink: 0,
        marginLeft: '1rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 316,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      className: "standalone-account__badge ".concat(getStatusBadgeClass(exec.status)),
      style: {
        fontSize: '0.7rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 317,
        columnNumber: 27
      }
    }, exec.status), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.75rem',
        color: '#9ca3af',
        marginTop: 4
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 318,
        columnNumber: 27
      }
    }, formatDateTime(exec.timestamp)))));
  }))), activeTab === TABS.INFO && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 331,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dl", {
    className: "standalone-account__info-grid",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 332,
      columnNumber: 13
    }
  }, Object.entries(agreement).filter(_ref3 => {
    var [key] = _ref3;
    return !['id', 'accountId', 'processId', 'token', 'cognitoId'].includes(key);
  }).filter(_ref4 => {
    var [, val] = _ref4;
    return val !== null && val !== undefined && val !== '';
  }).slice(0, 16).map(_ref5 => {
    var [key, val] = _ref5;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: key,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 338,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dt", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 339,
        columnNumber: 21
      }
    }, key.replace(/([A-Z])/g, ' $1').replace(/^./, s => s.toUpperCase())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("dd", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 340,
        columnNumber: 21
      }
    }, typeof val === 'object' ? JSON.stringify(val) : String(val)));
  })))));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetailB));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetailC.js",
  _div,
  _strong,
  _strong2,
  _strong3,
  _strong4,
  _strong5,
  _strong6,
  _h,
  _strong7;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }




/**
 * VARIATION C — Left info sidebar + trigger cards grid + inline execution
 *
 * Key differences from A and B:
 * - Persistent left sidebar with status, agreement info, and Ask Agent CTA
 * - Triggers rendered as individual large cards in a 2-column grid (not a list)
 * - Each trigger card shows condition, app, and recent executions inline
 * - No separate activity feed — execution history is embedded in each card
 * - "Add Trigger" is a prominent empty-state card in the grid
 */

var AVAILABLE_APPS = [{
  id: 'app-send-email',
  name: 'Send Email',
  description: 'Send a templated email notification',
  icon: 'fa-envelope'
}, {
  id: 'app-send-sms',
  name: 'Send SMS',
  description: 'Send an SMS text message',
  icon: 'fa-comment'
}, {
  id: 'app-generate-doc',
  name: 'Generate Document',
  description: 'Auto-generate a PDF document',
  icon: 'fa-file-pdf-o'
}, {
  id: 'app-assign-task',
  name: 'Assign Task',
  description: 'Create and assign a task to a team member',
  icon: 'fa-tasks'
}, {
  id: 'app-webhook',
  name: 'Call Webhook',
  description: 'Send data to an external webhook URL',
  icon: 'fa-plug'
}, {
  id: 'app-update-status',
  name: 'Update Status',
  description: 'Automatically change agreement status',
  icon: 'fa-refresh'
}];
var MOCK_TRIGGERS = [{
  id: 'trigger-1',
  name: 'New Application Notification',
  type: 'status_change',
  config: {
    fromStatus: '*',
    toStatus: 'new'
  },
  appId: 'app-send-email',
  appConfig: {
    to: 'team@company.com',
    template: 'new_application'
  },
  isDefault: false,
  executions: [{
    id: 'exec-1',
    timestamp: '2026-04-05T14:30:00Z',
    status: 'success',
    summary: 'Email sent to team@company.com'
  }]
}, {
  id: 'trigger-2',
  name: 'Denial Letter',
  type: 'status_change',
  config: {
    fromStatus: 'in_review',
    toStatus: 'denied'
  },
  appId: 'app-generate-doc',
  appConfig: {
    template: 'denial_letter',
    format: 'pdf'
  },
  isDefault: true,
  executions: []
}, {
  id: 'trigger-3',
  name: 'Follow-up Reminder',
  type: 'time_based',
  config: {
    duration: 7,
    unit: 'days',
    from: 'dateCreated'
  },
  appId: 'app-assign-task',
  appConfig: {
    assignee: 'loan.officer@company.com',
    title: 'Follow up with applicant'
  },
  isDefault: true,
  executions: [{
    id: 'exec-2',
    timestamp: '2026-04-04T09:00:00Z',
    status: 'success',
    summary: 'Task assigned to loan.officer@company.com'
  }, {
    id: 'exec-3',
    timestamp: '2026-03-28T09:00:00Z',
    status: 'success',
    summary: 'Task assigned to loan.officer@company.com'
  }]
}, {
  id: 'trigger-4',
  name: 'Amount Change Alert',
  type: 'field_change',
  config: {
    field: 'loanAmount'
  },
  appId: 'app-send-sms',
  appConfig: {
    to: '+15551234567',
    message: 'Loan amount updated for {{businessName}}'
  },
  isDefault: false,
  executions: [{
    id: 'exec-4',
    timestamp: '2026-04-03T16:45:00Z',
    status: 'failed',
    summary: 'SMS delivery failed — invalid number'
  }]
}];
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = d => {
  if (!d) return '-';
  try {
    return new Date(d).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return d;
  }
};
var formatDateTime = d => {
  if (!d) return '-';
  try {
    var dt = new Date(d);
    return dt.toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric'
    }) + ' ' + dt.toLocaleTimeString('en-US', {
      hour: 'numeric',
      minute: '2-digit'
    });
  } catch (_unused2) {
    return d;
  }
};
var formatCurrency = a => {
  if (!a) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(a);
};
var getApp = id => AVAILABLE_APPS.find(a => a.id === id);
var describeTrigger = t => {
  if (t.type === 'status_change') return "".concat(t.config.fromStatus === '*' ? 'Any' : t.config.fromStatus, " \u2192 ").concat(t.config.toStatus);
  if (t.type === 'field_change') return "When \"".concat(t.config.field, "\" changes");
  if (t.type === 'time_based') return "".concat(t.config.duration, " ").concat(t.config.unit, " after ").concat(t.config.from);
  return '-';
};
var typeIcon = t => ({
  status_change: 'fa-exchange',
  field_change: 'fa-pencil',
  time_based: 'fa-clock-o'
})[t] || 'fa-bolt';
var typeLabel = t => ({
  status_change: 'Status Change',
  field_change: 'Field Change',
  time_based: 'Time Based'
})[t] || t;
var StandaloneAgreementDetailC = _ref => {
  var {
    match,
    history
  } = _ref;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [triggers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(MOCK_TRIGGERS);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    _asyncToGenerator(function* () {
      setLoading(true);
      try {
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/agreement/".concat(agreementId), 'GET', {}, {});
        setAgreement(res.data);
      } catch (_unused3) {
        setAgreement({
          id: agreementId,
          businessName: 'Acme Coffee Roasters',
          guarantorName: 'John Smith',
          borrowerEmail: 'john@acmecoffee.com',
          loanType: 'SBA 7(a)',
          loanAmount: 250000,
          status: 'draft',
          dateCreated: new Date().toISOString(),
          businessOwnerName: 'John Smith'
        });
      }
      setLoading(false);
    })();
  }, [agreementId]);
  if (loading) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 97,
      columnNumber: 23
    }
  }, "Loading...");
  if (!agreement) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 98,
      columnNumber: 26
    }
  }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 98,
      columnNumber: 90
    }
  }, "Agreement not found.")));
  var status = agreement.status || 'draft';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail-c",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 103,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 105,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 106,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex align-items-center justify-content-between",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 107,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 108,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title",
    style: {
      textAlign: 'left',
      color: '#fff',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 109,
      columnNumber: 15
    }
  }, agreement.businessName || 'Agreement'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: 'rgba(255,255,255,0.7)',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 112,
      columnNumber: 15
    }
  }, formatCurrency(agreement.loanAmount), " \xB7 ", formatDate(agreement.dateCreated))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["Link"], {
    to: "/dashboard",
    className: "btn lw-btn lw-btn-white",
    style: {
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 116,
      columnNumber: 13
    }
  }, "\u2190 Dashboard")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 123,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 124,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-3 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 126,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 128,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      paddingBottom: '0.75rem',
      borderBottom: '1px solid #eee',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 129,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getStatusBadgeClass(status)),
    style: {
      fontSize: '1.1rem',
      padding: '0.35em 1.25em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 130,
      columnNumber: 17
    }
  }, status)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#6b7280',
      lineHeight: 1.8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 132,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 133,
      columnNumber: 17
    }
  }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 133,
      columnNumber: 22
    }
  }, "Business:")), " ", agreement.businessName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 134,
      columnNumber: 17
    }
  }, _strong2 || (_strong2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 134,
      columnNumber: 22
    }
  }, "Owner:")), " ", agreement.businessOwnerName || agreement.guarantorName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 135,
      columnNumber: 17
    }
  }, _strong3 || (_strong3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 135,
      columnNumber: 22
    }
  }, "Email:")), " ", agreement.borrowerEmail || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 136,
      columnNumber: 17
    }
  }, _strong4 || (_strong4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 136,
      columnNumber: 22
    }
  }, "Type:")), " ", agreement.loanType || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 137,
      columnNumber: 17
    }
  }, _strong5 || (_strong5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 137,
      columnNumber: 22
    }
  }, "Amount:")), " ", formatCurrency(agreement.loanAmount)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 138,
      columnNumber: 17
    }
  }, _strong6 || (_strong6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 138,
      columnNumber: 22
    }
  }, "Created:")), " ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 143,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 144,
      columnNumber: 15
    }
  }, "Overview")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 145,
      columnNumber: 15
    }
  }, [{
    label: 'Triggers',
    value: triggers.length,
    color: '#00a5fa'
  }, {
    label: 'Total Runs',
    value: triggers.reduce((s, t) => s + t.executions.length, 0),
    color: '#059669'
  }, {
    label: 'Failures',
    value: triggers.reduce((s, t) => s + t.executions.filter(e => e.status === 'failed').length, 0),
    color: '#dc2626'
  }].map(stat => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: stat.label,
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 151,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.85rem',
      color: '#4b5563'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 152,
      columnNumber: 21
    }
  }, stat.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '1.1rem',
      fontWeight: 700,
      color: stat.color
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 153,
      columnNumber: 21
    }
  }, stat.value))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: 'linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%)',
      borderRadius: 10,
      padding: '1.25rem',
      color: '#fff',
      cursor: 'pointer',
      textAlign: 'center'
    },
    onClick: () => history.push('/loanwell-ai'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 160,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-magic",
    style: {
      fontSize: '1.5rem',
      marginBottom: '0.5rem',
      display: 'block'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 167,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 168,
      columnNumber: 15
    }
  }, "Ask an Agent"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      opacity: 0.85
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 15
    }
  }, "Get AI-powered insights about this agreement"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-9",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 174,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 175,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: 0,
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 176,
      columnNumber: 15
    }
  }, "Triggers")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 179,
      columnNumber: 13
    }
  }, triggers.map(trigger => {
    var app = getApp(trigger.appId);
    var firedCount = trigger.executions.length;
    var lastExec = trigger.executions[0];
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: trigger.id,
      className: "col-md-6 mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 185,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__card",
      style: {
        height: '100%',
        display: 'flex',
        flexDirection: 'column'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 186,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'flex-start',
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 188,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 189,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(0,165,250,0.1)',
        color: '#00a5fa',
        fontSize: '0.9rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 190,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(typeIcon(trigger.type)),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 194,
        columnNumber: 29
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 196,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.92rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 197,
        columnNumber: 29
      }
    }, trigger.name, trigger.isDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        marginLeft: 6,
        display: 'inline-block',
        padding: '0.1em 0.45em',
        borderRadius: 4,
        fontSize: '0.6rem',
        fontWeight: 600,
        textTransform: 'uppercase',
        background: '#ede9fe',
        color: '#7c3aed'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 199,
        columnNumber: 53
      }
    }, "Default")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 201,
        columnNumber: 29
      }
    }, typeLabel(trigger.type)))), firedCount > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        fontWeight: 600,
        color: '#059669'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 205,
        columnNumber: 27
      }
    }, "Fired ", firedCount, "x") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        color: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 207,
        columnNumber: 27
      }
    }, "Not fired")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        background: '#f9fafb',
        borderRadius: 6,
        padding: '0.5rem 0.75rem',
        marginBottom: '0.75rem',
        fontSize: '0.82rem',
        color: '#374151'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 212,
        columnNumber: 23
      }
    }, _strong7 || (_strong7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 213,
        columnNumber: 25
      }
    }, "When:")), " ", describeTrigger(trigger)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.5rem',
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 217,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 28,
        height: 28,
        borderRadius: 6,
        background: '#f3f4f6',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '0.8rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 218,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 219,
        columnNumber: 27
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 221,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.82rem',
        fontWeight: 600,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 222,
        columnNumber: 27
      }
    }, app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 223,
        columnNumber: 27
      }
    }, app === null || app === void 0 ? void 0 : app.description))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: 'auto',
        borderTop: '1px solid #f3f4f6',
        paddingTop: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 228,
        columnNumber: 23
      }
    }, trigger.executions.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        textTransform: 'uppercase',
        letterSpacing: '0.04em',
        color: '#9ca3af',
        fontWeight: 600,
        marginBottom: '0.35rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 231,
        columnNumber: 29
      }
    }, "Recent Runs"), trigger.executions.slice(0, 2).map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.5rem',
        marginBottom: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 233,
        columnNumber: 31
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 6,
        height: 6,
        borderRadius: '50%',
        background: exec.status === 'success' ? '#059669' : '#dc2626',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 234,
        columnNumber: 33
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.78rem',
        color: '#374151',
        whiteSpace: 'nowrap',
        overflow: 'hidden',
        textOverflow: 'ellipsis'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 235,
        columnNumber: 33
      }
    }, exec.summary), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.7rem',
        color: '#9ca3af',
        whiteSpace: 'nowrap'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 236,
        columnNumber: 33
      }
    }, formatDateTime(exec.timestamp))))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.8rem',
        color: '#d1d5db',
        textAlign: 'center',
        padding: '0.25rem 0'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 241,
        columnNumber: 27
      }
    }, "Waiting to fire..."))));
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 250,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      border: '2px dashed #d1d5db',
      background: '#fafbfc',
      cursor: 'pointer',
      minHeight: 200
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 251,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus-circle",
    style: {
      fontSize: '2rem',
      color: '#00a5fa',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 258,
      columnNumber: 19
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      color: '#001433',
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 259,
      columnNumber: 19
    }
  }, "Add Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#9ca3af',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 260,
      columnNumber: 19
    }
  }, "Set up a new automation for this agreement"))))))));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetailC));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetailD.js",
  _option,
  _option2,
  _option3,
  _option4,
  _option5,
  _option6,
  _option7,
  _option8,
  _option9,
  _option0,
  _option1,
  _i,
  _i2,
  _i3,
  _div,
  _div2,
  _strong,
  _strong2,
  _strong3,
  _strong4,
  _strong5,
  _strong6,
  _h,
  _strong7;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }




/**
 * VARIATION D — Based on C: left sidebar + multi-step trigger cards + execution side panel
 *
 * Changes from C:
 * - Status label reads "Status: Draft" not just "Draft"
 * - No dashboard button in top right (already in nav)
 * - Multi-step triggers: each trigger has a pipeline of steps (apps)
 * - Execution detail side panel (from A) — click any run to see detail
 * - "History" link in sub-nav
 * - Add Trigger modal styled like document upload popover (dashed border, clean)
 * - All buttons use blue/white color scheme (no green/red)
 * - Dropdowns for status from/to, field names
 * - Default badge with "Set as Default" explanation
 */

var AVAILABLE_APPS = [{
  id: 'app-send-email',
  name: 'Send Email',
  description: 'Send a templated email notification',
  icon: 'fa-envelope'
}, {
  id: 'app-send-sms',
  name: 'Send SMS',
  description: 'Send an SMS text message',
  icon: 'fa-comment'
}, {
  id: 'app-generate-doc',
  name: 'Generate Document',
  description: 'Auto-generate a PDF document',
  icon: 'fa-file-pdf-o'
}, {
  id: 'app-assign-task',
  name: 'Assign Task',
  description: 'Create and assign a task to a team member',
  icon: 'fa-tasks'
}, {
  id: 'app-webhook',
  name: 'Call Webhook',
  description: 'Send data to an external webhook URL',
  icon: 'fa-plug'
}, {
  id: 'app-update-status',
  name: 'Update Status',
  description: 'Automatically change agreement status',
  icon: 'fa-refresh'
}, {
  id: 'app-run-agent',
  name: 'Run AI Agent',
  description: 'Execute an AI agent to analyze or act on data',
  icon: 'fa-magic'
}, {
  id: 'app-pull-credit',
  name: 'Pull Credit',
  description: 'Request a credit report from bureau',
  icon: 'fa-credit-card'
}, {
  id: 'app-create-task',
  name: 'Create Task',
  description: 'Create a follow-up task for your team',
  icon: 'fa-check-square-o'
}];
var STATUSES = ['new', 'draft', 'in_review', 'approved', 'denied', 'withdrawn', 'completed'];
var FIELDS = ['loanAmount', 'businessName', 'borrowerEmail', 'loanType', 'guarantorName', 'status', 'dateCreated'];
var MOCK_TRIGGERS = [{
  id: 'trigger-1',
  name: 'New Application Pipeline',
  type: 'status_change',
  config: {
    fromStatus: '*',
    toStatus: 'new'
  },
  isDefault: false,
  steps: [{
    id: 'step-1a',
    appId: 'app-run-agent',
    config: {
      agent: 'risk-scorer',
      saveAs: 'riskScore'
    },
    order: 1
  }, {
    id: 'step-1b',
    appId: 'app-pull-credit',
    config: {
      bureau: 'experian'
    },
    order: 2
  }, {
    id: 'step-1c',
    appId: 'app-send-email',
    config: {
      to: 'team@company.com',
      template: 'new_application'
    },
    order: 3
  }, {
    id: 'step-1d',
    appId: 'app-create-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Review new application'
    },
    order: 4
  }],
  executions: [{
    id: 'exec-1',
    timestamp: '2026-04-05T14:30:00Z',
    status: 'success',
    summary: 'Pipeline completed — 4/4 steps succeeded',
    stepResults: [{
      stepId: 'step-1a',
      status: 'success',
      summary: 'Risk score: 72 (Medium)',
      duration: '3.2s'
    }, {
      stepId: 'step-1b',
      status: 'success',
      summary: 'Credit pulled — Experian score 680',
      duration: '8.1s'
    }, {
      stepId: 'step-1c',
      status: 'success',
      summary: 'Email sent to team@company.com',
      duration: '1.1s'
    }, {
      stepId: 'step-1d',
      status: 'success',
      summary: 'Task created for loan.officer@company.com',
      duration: '0.4s'
    }]
  }]
}, {
  id: 'trigger-2',
  name: 'Denial Letter',
  type: 'status_change',
  config: {
    fromStatus: 'in_review',
    toStatus: 'denied'
  },
  isDefault: true,
  steps: [{
    id: 'step-2a',
    appId: 'app-generate-doc',
    config: {
      template: 'denial_letter',
      format: 'pdf'
    },
    order: 1
  }, {
    id: 'step-2b',
    appId: 'app-send-email',
    config: {
      to: '{{borrowerEmail}}',
      template: 'denial_notification'
    },
    order: 2
  }],
  executions: []
}, {
  id: 'trigger-3',
  name: 'Follow-up Reminder',
  type: 'time_based',
  config: {
    duration: 7,
    unit: 'days',
    from: 'dateCreated'
  },
  isDefault: true,
  steps: [{
    id: 'step-3a',
    appId: 'app-assign-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Follow up with applicant'
    },
    order: 1
  }, {
    id: 'step-3b',
    appId: 'app-send-email',
    config: {
      to: 'loan.officer@company.com',
      template: 'reminder'
    },
    order: 2
  }],
  executions: [{
    id: 'exec-2',
    timestamp: '2026-04-04T09:00:00Z',
    status: 'success',
    summary: 'Pipeline completed — 2/2 steps succeeded',
    stepResults: [{
      stepId: 'step-3a',
      status: 'success',
      summary: 'Task assigned to loan.officer@company.com',
      duration: '0.5s'
    }, {
      stepId: 'step-3b',
      status: 'success',
      summary: 'Email sent to loan.officer@company.com',
      duration: '1.0s'
    }]
  }, {
    id: 'exec-3',
    timestamp: '2026-03-28T09:00:00Z',
    status: 'success',
    summary: 'Pipeline completed — 2/2 steps succeeded',
    stepResults: [{
      stepId: 'step-3a',
      status: 'success',
      summary: 'Task assigned to loan.officer@company.com',
      duration: '0.5s'
    }, {
      stepId: 'step-3b',
      status: 'success',
      summary: 'Email sent to loan.officer@company.com',
      duration: '0.9s'
    }]
  }]
}, {
  id: 'trigger-4',
  name: 'Amount Change Alert',
  type: 'field_change',
  config: {
    field: 'loanAmount'
  },
  isDefault: false,
  steps: [{
    id: 'step-4a',
    appId: 'app-run-agent',
    config: {
      agent: 'compliance-check',
      saveAs: 'complianceFlag'
    },
    order: 1
  }, {
    id: 'step-4b',
    appId: 'app-send-sms',
    config: {
      to: '+15551234567',
      message: 'Loan amount updated for {{businessName}}'
    },
    order: 2
  }, {
    id: 'step-4c',
    appId: 'app-webhook',
    config: {
      url: 'https://api.partner.com/notify'
    },
    order: 3
  }],
  executions: [{
    id: 'exec-4',
    timestamp: '2026-04-03T16:45:00Z',
    status: 'failed',
    summary: 'Pipeline failed at step 2/3',
    stepResults: [{
      stepId: 'step-4a',
      status: 'success',
      summary: 'Compliance check passed',
      duration: '2.8s'
    }, {
      stepId: 'step-4b',
      status: 'failed',
      summary: 'SMS delivery failed — invalid number',
      duration: '0.3s'
    }, {
      stepId: 'step-4c',
      status: 'skipped',
      summary: 'Skipped — previous step failed',
      duration: '-'
    }]
  }]
}];
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = d => {
  if (!d) return '-';
  try {
    return new Date(d).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return d;
  }
};
var formatDateTime = d => {
  if (!d) return '-';
  try {
    var dt = new Date(d);
    return dt.toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric'
    }) + ' ' + dt.toLocaleTimeString('en-US', {
      hour: 'numeric',
      minute: '2-digit'
    });
  } catch (_unused2) {
    return d;
  }
};
var formatCurrency = a => {
  if (!a) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(a);
};
var getApp = id => AVAILABLE_APPS.find(a => a.id === id);
var describeTrigger = t => {
  if (t.type === 'status_change') return "".concat(t.config.fromStatus === '*' ? 'Any' : t.config.fromStatus, " \u2192 ").concat(t.config.toStatus);
  if (t.type === 'field_change') return "When \"".concat(t.config.field, "\" changes");
  if (t.type === 'time_based') return "".concat(t.config.duration, " ").concat(t.config.unit, " after ").concat(t.config.from);
  return '-';
};
var typeIcon = t => ({
  status_change: 'fa-exchange',
  field_change: 'fa-pencil',
  time_based: 'fa-clock-o'
})[t] || 'fa-bolt';
var typeLabel = t => ({
  status_change: 'Status Change',
  field_change: 'Field Change',
  time_based: 'Time Based'
})[t] || t;
var stepStatusColor = s => ({
  success: '#059669',
  failed: '#dc2626',
  skipped: '#9ca3af'
})[s] || '#9ca3af';
var stepStatusIcon = s => ({
  success: 'fa-check-circle',
  failed: 'fa-times-circle',
  skipped: 'fa-minus-circle'
})[s] || 'fa-circle-o';

/* ─── Add Trigger Modal ─── */
var AddTriggerModal = _ref => {
  var {
    open,
    onClose
  } = _ref;
  var [step, setStep] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(1);
  var [triggerType, setTriggerType] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [condition, setCondition] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({
    fromStatus: '',
    toStatus: '',
    field: '',
    duration: '',
    unit: 'days',
    from: ''
  });
  var [selectedApps, setSelectedApps] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var reset = () => {
    setStep(1);
    setTriggerType('');
    setCondition({
      fromStatus: '',
      toStatus: '',
      field: '',
      duration: '',
      unit: 'days',
      from: ''
    });
    setSelectedApps([]);
  };
  if (!open) return null;
  var triggerTypes = [{
    id: 'status_change',
    label: 'Status Change',
    icon: 'fa-exchange',
    desc: 'Fires when agreement status changes'
  }, {
    id: 'field_change',
    label: 'Field Change',
    icon: 'fa-pencil',
    desc: 'Fires when a specific field is updated'
  }, {
    id: 'time_based',
    label: 'Time Based',
    icon: 'fa-clock-o',
    desc: 'Fires after a set duration'
  }];
  var addApp = appId => {
    if (!selectedApps.includes(appId)) setSelectedApps([...selectedApps, appId]);
  };
  var removeApp = appId => setSelectedApps(selectedApps.filter(a => a !== appId));
  var moveApp = (idx, dir) => {
    var arr = [...selectedApps];
    var target = idx + dir;
    if (target < 0 || target >= arr.length) return;
    [arr[idx], arr[target]] = [arr[target], arr[idx]];
    setSelectedApps(arr);
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      zIndex: 1050,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 167,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      inset: 0,
      background: 'rgba(0,20,51,0.4)'
    },
    onClick: () => {
      reset();
      onClose();
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 168,
      columnNumber: 7
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative',
      background: '#fff',
      borderRadius: 12,
      width: 560,
      maxHeight: '85vh',
      overflow: 'auto',
      boxShadow: '0 8px 30px rgba(0,0,0,0.18)',
      border: '2px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 174,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 175,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1.1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 176,
      columnNumber: 13
    }
  }, "Add Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280',
      marginTop: 2
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 177,
      columnNumber: 13
    }
  }, "Step ", step, " of 3 \u2014 ", step === 1 ? 'Choose type' : step === 2 ? 'Set condition' : 'Select apps')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      reset();
      onClose();
    },
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af',
      padding: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 181,
      columnNumber: 11
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 184,
      columnNumber: 9
    }
  }, step === 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 187,
      columnNumber: 13
    }
  }, triggerTypes.map(tt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: tt.id,
    onClick: () => setTriggerType(tt.id),
    style: {
      border: triggerType === tt.id ? '2px solid #00a5fa' : '2px dashed #d1d5db',
      borderRadius: 8,
      padding: '1rem 1.25rem',
      cursor: 'pointer',
      background: triggerType === tt.id ? 'rgba(0,165,250,0.04)' : '#fafbfc',
      display: 'flex',
      alignItems: 'center',
      gap: '1rem',
      transition: 'all 0.15s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 40,
      height: 40,
      borderRadius: 8,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      background: triggerType === tt.id ? 'rgba(0,165,250,0.12)' : '#f3f4f6',
      color: triggerType === tt.id ? '#00a5fa' : '#6b7280',
      fontSize: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 199,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tt.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 204,
      columnNumber: 21
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 206,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.9rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 207,
      columnNumber: 21
    }
  }, tt.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 208,
      columnNumber: 21
    }
  }, tt.desc))))), step === 2 && triggerType === 'status_change' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 217,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 218,
      columnNumber: 15
    }
  }, "From Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.fromStatus,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      fromStatus: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 219,
      columnNumber: 15
    }
  }, _option || (_option = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 224,
      columnNumber: 17
    }
  }, "Select...")), _option2 || (_option2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "*",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 225,
      columnNumber: 17
    }
  }, "Any status")), STATUSES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s,
    value: s,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 226,
      columnNumber: 38
    }
  }, s))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 228,
      columnNumber: 15
    }
  }, "To Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.toStatus,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      toStatus: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 229,
      columnNumber: 15
    }
  }, _option3 || (_option3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 234,
      columnNumber: 17
    }
  }, "Select...")), STATUSES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s,
    value: s,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 235,
      columnNumber: 38
    }
  }, s)))), step === 2 && triggerType === 'field_change' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 241,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 242,
      columnNumber: 15
    }
  }, "Field"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.field,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      field: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 243,
      columnNumber: 15
    }
  }, _option4 || (_option4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 248,
      columnNumber: 17
    }
  }, "Select a field...")), FIELDS.map(f => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: f,
    value: f,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 249,
      columnNumber: 36
    }
  }, f)))), step === 2 && triggerType === 'time_based' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 255,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 256,
      columnNumber: 15
    }
  }, "Duration"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 257,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    type: "number",
    min: "1",
    placeholder: "7",
    value: condition.duration,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      duration: e.target.value
    })),
    style: {
      flex: 1,
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 258,
      columnNumber: 17
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.unit,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      unit: e.target.value
    })),
    style: {
      width: 120,
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 264,
      columnNumber: 17
    }
  }, _option5 || (_option5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "hours",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 269,
      columnNumber: 19
    }
  }, "Hours")), _option6 || (_option6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "days",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 270,
      columnNumber: 19
    }
  }, "Days")), _option7 || (_option7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "weeks",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 271,
      columnNumber: 19
    }
  }, "Weeks")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 274,
      columnNumber: 15
    }
  }, "After"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.from,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      from: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 275,
      columnNumber: 15
    }
  }, _option8 || (_option8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 280,
      columnNumber: 17
    }
  }, "Select...")), _option9 || (_option9 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "dateCreated",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 281,
      columnNumber: 17
    }
  }, "Date Created")), _option0 || (_option0 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "lastUpdated",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 282,
      columnNumber: 17
    }
  }, "Last Updated")), _option1 || (_option1 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "lastStatusChange",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 283,
      columnNumber: 17
    }
  }, "Last Status Change")))), step === 3 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 290,
      columnNumber: 13
    }
  }, selectedApps.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginBottom: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 292,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 293,
      columnNumber: 19
    }
  }, "Pipeline Steps"), selectedApps.map((appId, idx) => {
    var app = getApp(appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: "".concat(appId, "-").concat(idx),
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem',
        padding: '0.6rem 0.75rem',
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        borderRadius: 8,
        marginBottom: '0.5rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 297,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        fontWeight: 700,
        color: '#00a5fa',
        width: 20
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 301,
        columnNumber: 25
      }
    }, idx + 1, "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        color: '#00a5fa',
        fontSize: '0.85rem',
        width: 18
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 302,
        columnNumber: 25
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.85rem',
        fontWeight: 500,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 303,
        columnNumber: 25
      }
    }, app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => moveApp(idx, -1),
      disabled: idx === 0,
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: idx === 0 ? '#d1d5db' : '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 304,
        columnNumber: 25
      }
    }, _i || (_i = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-arrow-up",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 305,
        columnNumber: 27
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => moveApp(idx, 1),
      disabled: idx === selectedApps.length - 1,
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: idx === selectedApps.length - 1 ? '#d1d5db' : '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 307,
        columnNumber: 25
      }
    }, _i2 || (_i2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-arrow-down",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 308,
        columnNumber: 27
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => removeApp(appId),
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 310,
        columnNumber: 25
      }
    }, _i3 || (_i3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-trash-o",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 311,
        columnNumber: 27
      }
    }))));
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 319,
      columnNumber: 15
    }
  }, "Available Apps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 320,
      columnNumber: 15
    }
  }, AVAILABLE_APPS.map(app => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: app.id,
    onClick: () => addApp(app.id),
    style: {
      border: '2px dashed #d1d5db',
      borderRadius: 8,
      padding: '0.75rem 1rem',
      cursor: 'pointer',
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem',
      background: '#fafbfc',
      transition: 'all 0.15s'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#00a5fa';
      e.currentTarget.style.background = 'rgba(0,165,250,0.03)';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
      e.currentTarget.style.background = '#fafbfc';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 322,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 32,
      height: 32,
      borderRadius: 6,
      background: '#f3f4f6',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      color: '#6b7280',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 332,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(app.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 333,
      columnNumber: 23
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 335,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 336,
      columnNumber: 23
    }
  }, app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 337,
      columnNumber: 23
    }
  }, app.description)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus",
    style: {
      color: '#00a5fa',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 339,
      columnNumber: 21
    }
  })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1rem 1.5rem',
      borderTop: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 348,
      columnNumber: 9
    }
  }, step > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setStep(step - 1),
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      background: '#fff',
      color: '#374151',
      fontSize: '0.85rem',
      cursor: 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 350,
      columnNumber: 13
    }
  }, "Back") : _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 351,
      columnNumber: 15
    }
  })), step < 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setStep(step + 1),
    disabled: step === 1 && !triggerType,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: step === 1 && !triggerType ? '#d1d5db' : '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: step === 1 && !triggerType ? 'default' : 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 353,
      columnNumber: 13
    }
  }, "Next") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      reset();
      onClose();
    },
    disabled: selectedApps.length === 0,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: selectedApps.length === 0 ? '#d1d5db' : '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: selectedApps.length === 0 ? 'default' : 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 363,
      columnNumber: 13
    }
  }, "Create Trigger"))));
};

/* ─── Execution Detail Side Panel ─── */
var ExecutionPanel = _ref2 => {
  var {
    execution,
    trigger,
    onClose
  } = _ref2;
  if (!execution || !trigger) return null;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      top: 0,
      right: 0,
      bottom: 0,
      width: 420,
      background: '#fff',
      zIndex: 1040,
      boxShadow: '-4px 0 20px rgba(0,0,0,0.12)',
      display: 'flex',
      flexDirection: 'column',
      overflowY: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 384,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'flex-start'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 388,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 389,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 390,
      columnNumber: 11
    }
  }, "Execution Detail"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280',
      marginTop: 2
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 391,
      columnNumber: 11
    }
  }, trigger.name, " \xB7 ", formatDateTime(execution.timestamp))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: onClose,
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 393,
      columnNumber: 9
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 396,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '0.75rem 1rem',
      borderRadius: 8,
      marginBottom: '1.25rem',
      background: execution.status === 'success' ? '#ecfdf5' : '#fef2f2',
      border: "1px solid ".concat(execution.status === 'success' ? '#a7f3d0' : '#fecaca')
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 398,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.85rem',
      color: execution.status === 'success' ? '#065f46' : '#991b1b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 403,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(execution.status === 'success' ? 'fa-check-circle' : 'fa-times-circle'),
    style: {
      marginRight: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 404,
      columnNumber: 13
    }
  }), execution.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 410,
      columnNumber: 9
    }
  }, "Step Results"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 411,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      left: 15,
      top: 20,
      bottom: 20,
      width: 2,
      background: '#e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 413,
      columnNumber: 11
    }
  }), (execution.stepResults || []).map((sr, idx) => {
    var stepDef = trigger.steps.find(s => s.id === sr.stepId);
    var app = stepDef ? getApp(stepDef.appId) : null;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: sr.stepId,
      style: {
        display: 'flex',
        gap: '1rem',
        marginBottom: '1rem',
        position: 'relative'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 419,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 32,
        height: 32,
        borderRadius: '50%',
        flexShrink: 0,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: '#fff',
        border: "2px solid ".concat(stepStatusColor(sr.status)),
        zIndex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 420,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(stepStatusIcon(sr.status)),
      style: {
        color: stepStatusColor(sr.status),
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 425,
        columnNumber: 19
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1,
        background: '#f9fafb',
        borderRadius: 8,
        padding: '0.75rem 1rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 427,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'center',
        marginBottom: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 428,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontWeight: 600,
        fontSize: '0.82rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 429,
        columnNumber: 21
      }
    }, idx + 1, ". ", (app === null || app === void 0 ? void 0 : app.name) || 'Unknown App'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 432,
        columnNumber: 21
      }
    }, sr.duration)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#374151'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 434,
        columnNumber: 19
      }
    }, sr.summary)));
  }))));
};

/* ─── Main Component ─── */
var StandaloneAgreementDetailD = _ref3 => {
  var {
    match,
    history
  } = _ref3;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [triggers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(MOCK_TRIGGERS);
  var [showAddModal, setShowAddModal] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [selectedExec, setSelectedExec] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [selectedTrigger, setSelectedTrigger] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [activeView, setActiveView] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('triggers'); // 'triggers' | 'history'

  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    _asyncToGenerator(function* () {
      setLoading(true);
      try {
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/agreement/".concat(agreementId), 'GET', {}, {});
        setAgreement(res.data);
      } catch (_unused3) {
        setAgreement({
          id: agreementId,
          businessName: 'Acme Coffee Roasters',
          guarantorName: 'John Smith',
          borrowerEmail: 'john@acmecoffee.com',
          loanType: 'SBA 7(a)',
          loanAmount: 250000,
          status: 'draft',
          dateCreated: new Date().toISOString(),
          businessOwnerName: 'John Smith'
        });
      }
      setLoading(false);
    })();
  }, [agreementId]);
  var allExecutions = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => {
    var execs = [];
    triggers.forEach(t => {
      t.executions.forEach(e => execs.push(_objectSpread(_objectSpread({}, e), {}, {
        triggerName: t.name,
        triggerId: t.id,
        triggerSteps: t.steps
      })));
    });
    return execs.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
  }, [triggers]);
  if (loading) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 482,
      columnNumber: 23
    }
  }, "Loading...");
  if (!agreement) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 483,
      columnNumber: 26
    }
  }, _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 483,
      columnNumber: 90
    }
  }, "Agreement not found.")));
  var status = agreement.status || 'draft';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail-d",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 488,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 490,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 491,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title",
    style: {
      textAlign: 'left',
      color: '#fff',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 492,
      columnNumber: 11
    }
  }, agreement.businessName || 'Agreement'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: 'rgba(255,255,255,0.7)',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 495,
      columnNumber: 11
    }
  }, formatCurrency(agreement.loanAmount), " \xB7 ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#fff',
      borderBottom: '1px solid #e5e7eb',
      padding: '0 1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 502,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container",
    style: {
      display: 'flex',
      gap: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 503,
      columnNumber: 9
    }
  }, [{
    key: 'triggers',
    label: 'Triggers',
    icon: 'fa-bolt'
  }, {
    key: 'history',
    label: 'History',
    icon: 'fa-history'
  }].map(tab => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: tab.key,
    onClick: () => setActiveView(tab.key),
    style: {
      background: 'none',
      border: 'none',
      borderBottom: activeView === tab.key ? '2px solid #00a5fa' : '2px solid transparent',
      padding: '0.75rem 0.25rem',
      cursor: 'pointer',
      fontSize: '0.85rem',
      fontWeight: 500,
      color: activeView === tab.key ? '#00a5fa' : '#6b7280',
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 505,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tab.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 514,
      columnNumber: 15
    }
  }), " ", tab.label)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 520,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 521,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-3 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 523,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 524,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      paddingBottom: '0.75rem',
      borderBottom: '1px solid #eee',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 525,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.68rem',
      textTransform: 'uppercase',
      letterSpacing: '0.06em',
      color: '#6b7280',
      fontWeight: 600,
      marginBottom: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 526,
      columnNumber: 17
    }
  }, "Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getStatusBadgeClass(status)),
    style: {
      fontSize: '1.1rem',
      padding: '0.35em 1.25em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 527,
      columnNumber: 17
    }
  }, status)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#6b7280',
      lineHeight: 1.8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 529,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 530,
      columnNumber: 17
    }
  }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 530,
      columnNumber: 22
    }
  }, "Business:")), " ", agreement.businessName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 531,
      columnNumber: 17
    }
  }, _strong2 || (_strong2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 531,
      columnNumber: 22
    }
  }, "Owner:")), " ", agreement.businessOwnerName || agreement.guarantorName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 532,
      columnNumber: 17
    }
  }, _strong3 || (_strong3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 532,
      columnNumber: 22
    }
  }, "Email:")), " ", agreement.borrowerEmail || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 533,
      columnNumber: 17
    }
  }, _strong4 || (_strong4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 533,
      columnNumber: 22
    }
  }, "Type:")), " ", agreement.loanType || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 534,
      columnNumber: 17
    }
  }, _strong5 || (_strong5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 534,
      columnNumber: 22
    }
  }, "Amount:")), " ", formatCurrency(agreement.loanAmount)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 535,
      columnNumber: 17
    }
  }, _strong6 || (_strong6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 535,
      columnNumber: 22
    }
  }, "Created:")), " ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 539,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 540,
      columnNumber: 15
    }
  }, "Overview")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 541,
      columnNumber: 15
    }
  }, [{
    label: 'Triggers',
    value: triggers.length,
    color: '#00a5fa'
  }, {
    label: 'Total Runs',
    value: triggers.reduce((s, t) => s + t.executions.length, 0),
    color: '#059669'
  }, {
    label: 'Failures',
    value: triggers.reduce((s, t) => s + t.executions.filter(e => e.status === 'failed').length, 0),
    color: '#dc2626'
  }].map(stat => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: stat.label,
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 547,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.85rem',
      color: '#4b5563'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 548,
      columnNumber: 21
    }
  }, stat.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '1.1rem',
      fontWeight: 700,
      color: stat.color
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 549,
      columnNumber: 21
    }
  }, stat.value))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: 'linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%)',
      borderRadius: 10,
      padding: '1.25rem',
      color: '#fff',
      cursor: 'pointer',
      textAlign: 'center'
    },
    onClick: () => history.push('/loanwell-ai'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 555,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-magic",
    style: {
      fontSize: '1.5rem',
      marginBottom: '0.5rem',
      display: 'block'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 562,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 563,
      columnNumber: 15
    }
  }, "Ask an Agent"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      opacity: 0.85
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 564,
      columnNumber: 15
    }
  }, "Get AI-powered insights about this agreement"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-9",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 569,
      columnNumber: 11
    }
  }, activeView === 'triggers' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 573,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: 0,
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 574,
      columnNumber: 19
    }
  }, "Triggers")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 576,
      columnNumber: 17
    }
  }, triggers.map(trigger => {
    var firedCount = trigger.executions.length;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: trigger.id,
      className: "col-md-6 mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 580,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__card",
      style: {
        height: '100%',
        display: 'flex',
        flexDirection: 'column'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 581,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'flex-start',
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 583,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 584,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(0,165,250,0.1)',
        color: '#00a5fa',
        fontSize: '0.9rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 585,
        columnNumber: 31
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(typeIcon(trigger.type)),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 589,
        columnNumber: 33
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 591,
        columnNumber: 31
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.92rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 592,
        columnNumber: 33
      }
    }, trigger.name, trigger.isDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      title: "Applied to all new agreements",
      style: {
        marginLeft: 6,
        display: 'inline-block',
        padding: '0.1em 0.45em',
        borderRadius: 4,
        fontSize: '0.6rem',
        fontWeight: 600,
        textTransform: 'uppercase',
        background: '#ede9fe',
        color: '#7c3aed',
        cursor: 'help'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 595,
        columnNumber: 37
      }
    }, "Default")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 598,
        columnNumber: 33
      }
    }, typeLabel(trigger.type)))), firedCount > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        fontWeight: 600,
        color: '#059669'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 602,
        columnNumber: 31
      }
    }, "Fired ", firedCount, "x") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        color: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 604,
        columnNumber: 31
      }
    }, "Not fired")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        background: '#f9fafb',
        borderRadius: 6,
        padding: '0.5rem 0.75rem',
        marginBottom: '0.75rem',
        fontSize: '0.82rem',
        color: '#374151'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 609,
        columnNumber: 27
      }
    }, _strong7 || (_strong7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 610,
        columnNumber: 29
      }
    }, "When:")), " ", describeTrigger(trigger)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 614,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        textTransform: 'uppercase',
        letterSpacing: '0.04em',
        color: '#9ca3af',
        fontWeight: 600,
        marginBottom: '0.4rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 615,
        columnNumber: 29
      }
    }, "Pipeline (", trigger.steps.length, " step", trigger.steps.length !== 1 ? 's' : '', ")"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.35rem',
        flexWrap: 'wrap'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 618,
        columnNumber: 29
      }
    }, trigger.steps.map((step, idx) => {
      var app = getApp(step.appId);
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
        key: step.id,
        __source: {
          fileName: _jsxFileName,
          lineNumber: 622,
          columnNumber: 35
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
        style: {
          display: 'inline-flex',
          alignItems: 'center',
          gap: '0.35rem',
          padding: '0.25rem 0.6rem',
          borderRadius: 6,
          background: '#f0f7ff',
          border: '1px solid #bfdbfe',
          fontSize: '0.75rem',
          color: '#001433',
          fontWeight: 500,
          whiteSpace: 'nowrap'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 623,
          columnNumber: 37
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
        className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
        style: {
          color: '#00a5fa',
          fontSize: '0.7rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 628,
          columnNumber: 39
        }
      }), app === null || app === void 0 ? void 0 : app.name), idx < trigger.steps.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
        className: "fa fa-long-arrow-right",
        style: {
          color: '#d1d5db',
          fontSize: '0.7rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 632,
          columnNumber: 39
        }
      }));
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: 'auto',
        borderTop: '1px solid #f3f4f6',
        paddingTop: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 641,
        columnNumber: 27
      }
    }, trigger.executions.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        textTransform: 'uppercase',
        letterSpacing: '0.04em',
        color: '#9ca3af',
        fontWeight: 600,
        marginBottom: '0.35rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 644,
        columnNumber: 33
      }
    }, "Recent Runs"), trigger.executions.slice(0, 2).map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      onClick: () => {
        setSelectedExec(exec);
        setSelectedTrigger(trigger);
      },
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.5rem',
        marginBottom: '0.25rem',
        cursor: 'pointer',
        borderRadius: 4,
        padding: '0.2rem 0.25rem',
        transition: 'background 0.1s'
      },
      onMouseEnter: e => e.currentTarget.style.background = '#f0f7ff',
      onMouseLeave: e => e.currentTarget.style.background = 'transparent',
      __source: {
        fileName: _jsxFileName,
        lineNumber: 646,
        columnNumber: 35
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 6,
        height: 6,
        borderRadius: '50%',
        background: exec.status === 'success' ? '#059669' : '#dc2626',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 653,
        columnNumber: 37
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.78rem',
        color: '#374151',
        whiteSpace: 'nowrap',
        overflow: 'hidden',
        textOverflow: 'ellipsis'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 654,
        columnNumber: 37
      }
    }, exec.summary), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-chevron-right",
      style: {
        fontSize: '0.6rem',
        color: '#00a5fa'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 655,
        columnNumber: 37
      }
    })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.8rem',
        color: '#d1d5db',
        textAlign: 'center',
        padding: '0.25rem 0'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 660,
        columnNumber: 31
      }
    }, "Waiting to fire..."))));
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 669,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    onClick: () => setShowAddModal(true),
    className: "standalone-account__card",
    style: {
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      border: '2px dashed #d1d5db',
      background: '#fafbfc',
      cursor: 'pointer',
      minHeight: 200
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 670,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus-circle",
    style: {
      fontSize: '2rem',
      color: '#00a5fa',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 678,
      columnNumber: 23
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      color: '#001433',
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 679,
      columnNumber: 23
    }
  }, "Add Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#9ca3af',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 680,
      columnNumber: 23
    }
  }, "Set up a new automation for this agreement"))))), activeView === 'history' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: '0 0 1rem',
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 690,
      columnNumber: 17
    }
  }, "Trigger History"), allExecutions.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      padding: '2rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 692,
      columnNumber: 19
    }
  }, "No executions yet.") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 694,
      columnNumber: 19
    }
  }, allExecutions.map(exec => {
    var t = triggers.find(tr => tr.id === exec.triggerId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      className: "standalone-account__card",
      style: {
        height: 'auto',
        cursor: 'pointer',
        transition: 'box-shadow 0.15s'
      },
      onClick: () => {
        setSelectedExec(exec);
        setSelectedTrigger(t);
        setActiveView('triggers');
      },
      onMouseEnter: e => e.currentTarget.style.boxShadow = '0 2px 8px rgba(0,165,250,0.15)',
      onMouseLeave: e => e.currentTarget.style.boxShadow = '',
      __source: {
        fileName: _jsxFileName,
        lineNumber: 698,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 706,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 8,
        height: 8,
        borderRadius: '50%',
        flexShrink: 0,
        background: exec.status === 'success' ? '#059669' : '#dc2626'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 707,
        columnNumber: 29
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 711,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.88rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 712,
        columnNumber: 31
      }
    }, exec.triggerName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 713,
        columnNumber: 31
      }
    }, exec.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        textAlign: 'right',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 715,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        fontWeight: 600,
        color: exec.status === 'success' ? '#059669' : '#dc2626'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 716,
        columnNumber: 31
      }
    }, exec.status === 'success' ? 'Success' : 'Failed'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 720,
        columnNumber: 31
      }
    }, formatDateTime(exec.timestamp))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-chevron-right",
      style: {
        color: '#00a5fa',
        fontSize: '0.7rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 722,
        columnNumber: 29
      }
    })));
  })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(AddTriggerModal, {
    open: showAddModal,
    onClose: () => setShowAddModal(false),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 736,
      columnNumber: 7
    }
  }), selectedExec && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      background: 'rgba(0,0,0,0.2)',
      zIndex: 1030
    },
    onClick: () => {
      setSelectedExec(null);
      setSelectedTrigger(null);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 739,
      columnNumber: 11
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ExecutionPanel, {
    execution: selectedExec,
    trigger: selectedTrigger,
    onClose: () => {
      setSelectedExec(null);
      setSelectedTrigger(null);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 740,
      columnNumber: 11
    }
  })));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetailD));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetailE.js",
  _option,
  _option2,
  _option3,
  _option4,
  _option5,
  _option6,
  _option7,
  _option8,
  _option9,
  _option0,
  _option1,
  _i,
  _i2,
  _i3,
  _div,
  _div2,
  _strong,
  _strong2,
  _strong3,
  _strong4,
  _strong5,
  _strong6,
  _h,
  _i4;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }




/**
 * VARIATION E — Based on C: left sidebar + vertical trigger timeline + inline step detail
 *
 * Key differences from D:
 * - Triggers displayed as a vertical timeline (not card grid)
 * - Each trigger expands inline to show the full step pipeline + execution detail
 * - No separate side panel — everything opens within the trigger row
 * - "Kanban-ish" pipeline visualization within each trigger
 * - Compact, scroll-friendly layout for accounts with many triggers
 * - Same left sidebar, same sub-nav with History
 */

var AVAILABLE_APPS = [{
  id: 'app-send-email',
  name: 'Send Email',
  description: 'Send a templated email notification',
  icon: 'fa-envelope'
}, {
  id: 'app-send-sms',
  name: 'Send SMS',
  description: 'Send an SMS text message',
  icon: 'fa-comment'
}, {
  id: 'app-generate-doc',
  name: 'Generate Document',
  description: 'Auto-generate a PDF document',
  icon: 'fa-file-pdf-o'
}, {
  id: 'app-assign-task',
  name: 'Assign Task',
  description: 'Create and assign a task to a team member',
  icon: 'fa-tasks'
}, {
  id: 'app-webhook',
  name: 'Call Webhook',
  description: 'Send data to an external webhook URL',
  icon: 'fa-plug'
}, {
  id: 'app-update-status',
  name: 'Update Status',
  description: 'Automatically change agreement status',
  icon: 'fa-refresh'
}, {
  id: 'app-run-agent',
  name: 'Run AI Agent',
  description: 'Execute an AI agent to analyze or act on data',
  icon: 'fa-magic'
}, {
  id: 'app-pull-credit',
  name: 'Pull Credit',
  description: 'Request a credit report from bureau',
  icon: 'fa-credit-card'
}, {
  id: 'app-create-task',
  name: 'Create Task',
  description: 'Create a follow-up task for your team',
  icon: 'fa-check-square-o'
}];
var STATUSES = ['new', 'draft', 'in_review', 'approved', 'denied', 'withdrawn', 'completed'];
var FIELDS = ['loanAmount', 'businessName', 'borrowerEmail', 'loanType', 'guarantorName', 'status', 'dateCreated'];
var MOCK_TRIGGERS = [{
  id: 'trigger-1',
  name: 'New Application Pipeline',
  type: 'status_change',
  config: {
    fromStatus: '*',
    toStatus: 'new'
  },
  isDefault: false,
  steps: [{
    id: 'step-1a',
    appId: 'app-run-agent',
    config: {
      agent: 'risk-scorer',
      saveAs: 'riskScore'
    },
    order: 1
  }, {
    id: 'step-1b',
    appId: 'app-pull-credit',
    config: {
      bureau: 'experian'
    },
    order: 2
  }, {
    id: 'step-1c',
    appId: 'app-send-email',
    config: {
      to: 'team@company.com',
      template: 'new_application'
    },
    order: 3
  }, {
    id: 'step-1d',
    appId: 'app-create-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Review new application'
    },
    order: 4
  }],
  executions: [{
    id: 'exec-1',
    timestamp: '2026-04-05T14:30:00Z',
    status: 'success',
    summary: 'Pipeline completed — 4/4 steps succeeded',
    stepResults: [{
      stepId: 'step-1a',
      status: 'success',
      summary: 'Risk score: 72 (Medium)',
      duration: '3.2s'
    }, {
      stepId: 'step-1b',
      status: 'success',
      summary: 'Credit pulled — Experian score 680',
      duration: '8.1s'
    }, {
      stepId: 'step-1c',
      status: 'success',
      summary: 'Email sent to team@company.com',
      duration: '1.1s'
    }, {
      stepId: 'step-1d',
      status: 'success',
      summary: 'Task created for loan.officer@company.com',
      duration: '0.4s'
    }]
  }]
}, {
  id: 'trigger-2',
  name: 'Denial Letter',
  type: 'status_change',
  config: {
    fromStatus: 'in_review',
    toStatus: 'denied'
  },
  isDefault: true,
  steps: [{
    id: 'step-2a',
    appId: 'app-generate-doc',
    config: {
      template: 'denial_letter',
      format: 'pdf'
    },
    order: 1
  }, {
    id: 'step-2b',
    appId: 'app-send-email',
    config: {
      to: '{{borrowerEmail}}',
      template: 'denial_notification'
    },
    order: 2
  }],
  executions: []
}, {
  id: 'trigger-3',
  name: 'Follow-up Reminder',
  type: 'time_based',
  config: {
    duration: 7,
    unit: 'days',
    from: 'dateCreated'
  },
  isDefault: true,
  steps: [{
    id: 'step-3a',
    appId: 'app-assign-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Follow up with applicant'
    },
    order: 1
  }, {
    id: 'step-3b',
    appId: 'app-send-email',
    config: {
      to: 'loan.officer@company.com',
      template: 'reminder'
    },
    order: 2
  }],
  executions: [{
    id: 'exec-2',
    timestamp: '2026-04-04T09:00:00Z',
    status: 'success',
    summary: 'Pipeline completed — 2/2 steps succeeded',
    stepResults: [{
      stepId: 'step-3a',
      status: 'success',
      summary: 'Task assigned to loan.officer@company.com',
      duration: '0.5s'
    }, {
      stepId: 'step-3b',
      status: 'success',
      summary: 'Email sent to loan.officer@company.com',
      duration: '1.0s'
    }]
  }, {
    id: 'exec-3',
    timestamp: '2026-03-28T09:00:00Z',
    status: 'success',
    summary: 'Pipeline completed — 2/2 steps succeeded',
    stepResults: [{
      stepId: 'step-3a',
      status: 'success',
      summary: 'Task assigned to loan.officer@company.com',
      duration: '0.5s'
    }, {
      stepId: 'step-3b',
      status: 'success',
      summary: 'Email sent to loan.officer@company.com',
      duration: '0.9s'
    }]
  }]
}, {
  id: 'trigger-4',
  name: 'Amount Change Alert',
  type: 'field_change',
  config: {
    field: 'loanAmount'
  },
  isDefault: false,
  steps: [{
    id: 'step-4a',
    appId: 'app-run-agent',
    config: {
      agent: 'compliance-check',
      saveAs: 'complianceFlag'
    },
    order: 1
  }, {
    id: 'step-4b',
    appId: 'app-send-sms',
    config: {
      to: '+15551234567',
      message: 'Loan amount updated for {{businessName}}'
    },
    order: 2
  }, {
    id: 'step-4c',
    appId: 'app-webhook',
    config: {
      url: 'https://api.partner.com/notify'
    },
    order: 3
  }],
  executions: [{
    id: 'exec-4',
    timestamp: '2026-04-03T16:45:00Z',
    status: 'failed',
    summary: 'Pipeline failed at step 2/3',
    stepResults: [{
      stepId: 'step-4a',
      status: 'success',
      summary: 'Compliance check passed',
      duration: '2.8s'
    }, {
      stepId: 'step-4b',
      status: 'failed',
      summary: 'SMS delivery failed — invalid number',
      duration: '0.3s'
    }, {
      stepId: 'step-4c',
      status: 'skipped',
      summary: 'Skipped — previous step failed',
      duration: '-'
    }]
  }]
}];
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = d => {
  if (!d) return '-';
  try {
    return new Date(d).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return d;
  }
};
var formatDateTime = d => {
  if (!d) return '-';
  try {
    var dt = new Date(d);
    return dt.toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric'
    }) + ' ' + dt.toLocaleTimeString('en-US', {
      hour: 'numeric',
      minute: '2-digit'
    });
  } catch (_unused2) {
    return d;
  }
};
var formatCurrency = a => {
  if (!a) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(a);
};
var getApp = id => AVAILABLE_APPS.find(a => a.id === id);
var describeTrigger = t => {
  if (t.type === 'status_change') return "".concat(t.config.fromStatus === '*' ? 'Any' : t.config.fromStatus, " \u2192 ").concat(t.config.toStatus);
  if (t.type === 'field_change') return "When \"".concat(t.config.field, "\" changes");
  if (t.type === 'time_based') return "".concat(t.config.duration, " ").concat(t.config.unit, " after ").concat(t.config.from);
  return '-';
};
var typeIcon = t => ({
  status_change: 'fa-exchange',
  field_change: 'fa-pencil',
  time_based: 'fa-clock-o'
})[t] || 'fa-bolt';
var typeLabel = t => ({
  status_change: 'Status Change',
  field_change: 'Field Change',
  time_based: 'Time Based'
})[t] || t;
var stepStatusColor = s => ({
  success: '#059669',
  failed: '#dc2626',
  skipped: '#9ca3af'
})[s] || '#9ca3af';

/* ─── Add Trigger Modal ─── */
var AddTriggerModal = _ref => {
  var {
    open,
    onClose
  } = _ref;
  var [step, setStep] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(1);
  var [triggerType, setTriggerType] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [condition, setCondition] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({
    fromStatus: '',
    toStatus: '',
    field: '',
    duration: '',
    unit: 'days',
    from: ''
  });
  var [selectedApps, setSelectedApps] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var reset = () => {
    setStep(1);
    setTriggerType('');
    setCondition({
      fromStatus: '',
      toStatus: '',
      field: '',
      duration: '',
      unit: 'days',
      from: ''
    });
    setSelectedApps([]);
  };
  if (!open) return null;
  var triggerTypes = [{
    id: 'status_change',
    label: 'Status Change',
    icon: 'fa-exchange',
    desc: 'Fires when agreement status changes'
  }, {
    id: 'field_change',
    label: 'Field Change',
    icon: 'fa-pencil',
    desc: 'Fires when a specific field is updated'
  }, {
    id: 'time_based',
    label: 'Time Based',
    icon: 'fa-clock-o',
    desc: 'Fires after a set duration'
  }];
  var addApp = appId => {
    if (!selectedApps.includes(appId)) setSelectedApps([...selectedApps, appId]);
  };
  var removeApp = appId => setSelectedApps(selectedApps.filter(a => a !== appId));
  var moveApp = (idx, dir) => {
    var arr = [...selectedApps];
    var target = idx + dir;
    if (target < 0 || target >= arr.length) return;
    [arr[idx], arr[target]] = [arr[target], arr[idx]];
    setSelectedApps(arr);
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      zIndex: 1050,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 163,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      inset: 0,
      background: 'rgba(0,20,51,0.4)'
    },
    onClick: () => {
      reset();
      onClose();
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 164,
      columnNumber: 7
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative',
      background: '#fff',
      borderRadius: 12,
      width: 560,
      maxHeight: '85vh',
      overflow: 'auto',
      boxShadow: '0 8px 30px rgba(0,0,0,0.18)',
      border: '2px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 165,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 170,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1.1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 171,
      columnNumber: 13
    }
  }, "Add Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280',
      marginTop: 2
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 172,
      columnNumber: 13
    }
  }, "Step ", step, " of 3 \u2014 ", step === 1 ? 'Choose type' : step === 2 ? 'Set condition' : 'Build pipeline')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      reset();
      onClose();
    },
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af',
      padding: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 176,
      columnNumber: 11
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 179,
      columnNumber: 9
    }
  }, step === 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 181,
      columnNumber: 13
    }
  }, triggerTypes.map(tt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: tt.id,
    onClick: () => setTriggerType(tt.id),
    style: {
      border: triggerType === tt.id ? '2px solid #00a5fa' : '2px dashed #d1d5db',
      borderRadius: 8,
      padding: '1rem 1.25rem',
      cursor: 'pointer',
      background: triggerType === tt.id ? 'rgba(0,165,250,0.04)' : '#fafbfc',
      display: 'flex',
      alignItems: 'center',
      gap: '1rem',
      transition: 'all 0.15s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 183,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 40,
      height: 40,
      borderRadius: 8,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      background: triggerType === tt.id ? 'rgba(0,165,250,0.12)' : '#f3f4f6',
      color: triggerType === tt.id ? '#00a5fa' : '#6b7280',
      fontSize: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 193,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tt.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 198,
      columnNumber: 21
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 200,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.9rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 201,
      columnNumber: 21
    }
  }, tt.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 202,
      columnNumber: 21
    }
  }, tt.desc))))), step === 2 && triggerType === 'status_change' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 210,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 211,
      columnNumber: 15
    }
  }, "From Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.fromStatus,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      fromStatus: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 212,
      columnNumber: 15
    }
  }, _option || (_option = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 213,
      columnNumber: 17
    }
  }, "Select...")), _option2 || (_option2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "*",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 214,
      columnNumber: 17
    }
  }, "Any status")), STATUSES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s,
    value: s,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 215,
      columnNumber: 38
    }
  }, s))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 217,
      columnNumber: 15
    }
  }, "To Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.toStatus,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      toStatus: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 218,
      columnNumber: 15
    }
  }, _option3 || (_option3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 219,
      columnNumber: 17
    }
  }, "Select...")), STATUSES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s,
    value: s,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 220,
      columnNumber: 38
    }
  }, s)))), step === 2 && triggerType === 'field_change' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 226,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 227,
      columnNumber: 15
    }
  }, "Field"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.field,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      field: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 228,
      columnNumber: 15
    }
  }, _option4 || (_option4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 229,
      columnNumber: 17
    }
  }, "Select a field...")), FIELDS.map(f => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: f,
    value: f,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 36
    }
  }, f)))), step === 2 && triggerType === 'time_based' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 236,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 237,
      columnNumber: 15
    }
  }, "Duration"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 238,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    type: "number",
    min: "1",
    placeholder: "7",
    value: condition.duration,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      duration: e.target.value
    })),
    style: {
      flex: 1,
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 239,
      columnNumber: 17
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.unit,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      unit: e.target.value
    })),
    style: {
      width: 120,
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 240,
      columnNumber: 17
    }
  }, _option5 || (_option5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "hours",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 241,
      columnNumber: 19
    }
  }, "Hours")), _option6 || (_option6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "days",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 242,
      columnNumber: 19
    }
  }, "Days")), _option7 || (_option7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "weeks",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 243,
      columnNumber: 19
    }
  }, "Weeks")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 246,
      columnNumber: 15
    }
  }, "After"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.from,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      from: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 247,
      columnNumber: 15
    }
  }, _option8 || (_option8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 248,
      columnNumber: 17
    }
  }, "Select...")), _option9 || (_option9 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "dateCreated",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 249,
      columnNumber: 17
    }
  }, "Date Created")), _option0 || (_option0 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "lastUpdated",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 250,
      columnNumber: 17
    }
  }, "Last Updated")), _option1 || (_option1 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "lastStatusChange",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 251,
      columnNumber: 17
    }
  }, "Last Status Change")))), step === 3 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 257,
      columnNumber: 13
    }
  }, selectedApps.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginBottom: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 259,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 260,
      columnNumber: 19
    }
  }, "Pipeline Steps"), selectedApps.map((appId, idx) => {
    var app = getApp(appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: "".concat(appId, "-").concat(idx),
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem',
        padding: '0.6rem 0.75rem',
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        borderRadius: 8,
        marginBottom: '0.5rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 264,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        fontWeight: 700,
        color: '#00a5fa',
        width: 20
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 268,
        columnNumber: 25
      }
    }, idx + 1, "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        color: '#00a5fa',
        fontSize: '0.85rem',
        width: 18
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 269,
        columnNumber: 25
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.85rem',
        fontWeight: 500,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 270,
        columnNumber: 25
      }
    }, app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => moveApp(idx, -1),
      disabled: idx === 0,
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: idx === 0 ? '#d1d5db' : '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 271,
        columnNumber: 25
      }
    }, _i || (_i = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-arrow-up",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 271,
        columnNumber: 235
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => moveApp(idx, 1),
      disabled: idx === selectedApps.length - 1,
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: idx === selectedApps.length - 1 ? '#d1d5db' : '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 272,
        columnNumber: 25
      }
    }, _i2 || (_i2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-arrow-down",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 272,
        columnNumber: 278
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => removeApp(appId),
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 273,
        columnNumber: 25
      }
    }, _i3 || (_i3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-trash-o",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 273,
        columnNumber: 190
      }
    }))));
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 279,
      columnNumber: 15
    }
  }, "Available Apps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 280,
      columnNumber: 15
    }
  }, AVAILABLE_APPS.map(app => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: app.id,
    onClick: () => addApp(app.id),
    style: {
      border: '2px dashed #d1d5db',
      borderRadius: 8,
      padding: '0.75rem 1rem',
      cursor: 'pointer',
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem',
      background: '#fafbfc',
      transition: 'all 0.15s'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#00a5fa';
      e.currentTarget.style.background = 'rgba(0,165,250,0.03)';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
      e.currentTarget.style.background = '#fafbfc';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 282,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 32,
      height: 32,
      borderRadius: 6,
      background: '#f3f4f6',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      color: '#6b7280',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 286,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(app.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 286,
      columnNumber: 204
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 287,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 288,
      columnNumber: 23
    }
  }, app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 289,
      columnNumber: 23
    }
  }, app.description)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus",
    style: {
      color: '#00a5fa',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 291,
      columnNumber: 21
    }
  })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1rem 1.5rem',
      borderTop: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 299,
      columnNumber: 9
    }
  }, step > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setStep(step - 1),
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      background: '#fff',
      color: '#374151',
      fontSize: '0.85rem',
      cursor: 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 301,
      columnNumber: 13
    }
  }, "Back") : _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 302,
      columnNumber: 15
    }
  })), step < 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setStep(step + 1),
    disabled: step === 1 && !triggerType,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: step === 1 && !triggerType ? '#d1d5db' : '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: step === 1 && !triggerType ? 'default' : 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 304,
      columnNumber: 13
    }
  }, "Next") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      reset();
      onClose();
    },
    disabled: selectedApps.length === 0,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: selectedApps.length === 0 ? '#d1d5db' : '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: selectedApps.length === 0 ? 'default' : 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 306,
      columnNumber: 13
    }
  }, "Create Trigger"))));
};

/* ─── Inline Trigger Row (expandable) ─── */
var TriggerRow = _ref2 => {
  var {
    trigger
  } = _ref2;
  var [expanded, setExpanded] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [selectedExecId, setSelectedExecId] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var firedCount = trigger.executions.length;
  var selectedExec = selectedExecId ? trigger.executions.find(e => e.id === selectedExecId) : null;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 324,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    onClick: () => setExpanded(!expanded),
    style: {
      height: 'auto',
      cursor: 'pointer',
      transition: 'all 0.15s',
      borderLeft: expanded ? '3px solid #00a5fa' : '3px solid transparent'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 326,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 334,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 40,
      height: 40,
      borderRadius: 10,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      background: 'rgba(0,165,250,0.1)',
      color: '#00a5fa',
      fontSize: '1rem',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 335,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(typeIcon(trigger.type)),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 339,
      columnNumber: 13
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 342,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.5rem',
      flexWrap: 'wrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 343,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontWeight: 600,
      fontSize: '0.92rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 344,
      columnNumber: 15
    }
  }, trigger.name), trigger.isDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    title: "Applied to all new agreements",
    style: {
      padding: '0.1em 0.45em',
      borderRadius: 4,
      fontSize: '0.6rem',
      fontWeight: 600,
      textTransform: 'uppercase',
      background: '#ede9fe',
      color: '#7c3aed',
      cursor: 'help'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 346,
      columnNumber: 17
    }
  }, "Default")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 349,
      columnNumber: 13
    }
  }, typeLabel(trigger.type), ": ", describeTrigger(trigger))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.25rem',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 353,
      columnNumber: 11
    }
  }, trigger.steps.slice(0, 3).map(s => {
    var app = getApp(s.appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: s.id,
      title: app === null || app === void 0 ? void 0 : app.name,
      style: {
        width: 28,
        height: 28,
        borderRadius: 6,
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '0.7rem',
        color: '#00a5fa'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 357,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 361,
        columnNumber: 19
      }
    }));
  }), trigger.steps.length > 3 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.72rem',
      color: '#6b7280',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 366,
      columnNumber: 15
    }
  }, "+", trigger.steps.length - 3)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'right',
      flexShrink: 0,
      minWidth: 60
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 370,
      columnNumber: 11
    }
  }, firedCount > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.75rem',
      fontWeight: 600,
      color: '#059669'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 372,
      columnNumber: 15
    }
  }, "Fired ", firedCount, "x") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.75rem',
      color: '#d1d5db'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 374,
      columnNumber: 15
    }
  }, "Not fired")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-chevron-".concat(expanded ? 'up' : 'down'),
    style: {
      color: '#00a5fa',
      fontSize: '0.75rem',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 378,
      columnNumber: 11
    }
  }))), expanded && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#f9fafb',
      borderRadius: '0 0 10px 10px',
      padding: '1.25rem',
      marginTop: -4,
      borderTop: 'none'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 384,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginBottom: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 386,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 387,
      columnNumber: 13
    }
  }, "Pipeline \u2014 ", trigger.steps.length, " Steps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'stretch',
      gap: 0,
      position: 'relative'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 390,
      columnNumber: 13
    }
  }, trigger.steps.map((step, idx) => {
    var app = getApp(step.appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: step.id,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 394,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1,
        background: '#fff',
        border: '1px solid #e5e7eb',
        borderRadius: 8,
        padding: '0.75rem',
        textAlign: 'center',
        position: 'relative',
        minWidth: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 395,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        margin: '0 auto 0.4rem',
        background: 'rgba(0,165,250,0.1)',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        color: '#00a5fa',
        fontSize: '0.9rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 399,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 404,
        columnNumber: 25
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        fontWeight: 600,
        color: '#001433',
        marginBottom: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 406,
        columnNumber: 23
      }
    }, app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 407,
        columnNumber: 23
      }
    }, "Step ", idx + 1)), idx < trigger.steps.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        padding: '0 0.35rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 410,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-long-arrow-right",
      style: {
        color: '#d1d5db',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 411,
        columnNumber: 25
      }
    })));
  }))), trigger.executions.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 422,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 423,
      columnNumber: 15
    }
  }, "Execution History"), trigger.executions.map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: exec.id,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 427,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    onClick: e => {
      e.stopPropagation();
      setSelectedExecId(selectedExecId === exec.id ? null : exec.id);
    },
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem',
      padding: '0.6rem 0.75rem',
      background: selectedExecId === exec.id ? '#f0f7ff' : '#fff',
      border: '1px solid #e5e7eb',
      borderRadius: selectedExecId === exec.id ? '8px 8px 0 0' : 8,
      cursor: 'pointer',
      marginBottom: selectedExecId === exec.id ? 0 : '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 428,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 8,
      height: 8,
      borderRadius: '50%',
      background: exec.status === 'success' ? '#059669' : '#dc2626',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 436,
      columnNumber: 21
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      flex: 1,
      fontSize: '0.82rem',
      fontWeight: 500,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 437,
      columnNumber: 21
    }
  }, exec.summary), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 438,
      columnNumber: 21
    }
  }, formatDateTime(exec.timestamp)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-chevron-".concat(selectedExecId === exec.id ? 'up' : 'down'),
    style: {
      color: '#00a5fa',
      fontSize: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 439,
      columnNumber: 21
    }
  })), selectedExecId === exec.id && exec.stepResults && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#fff',
      border: '1px solid #e5e7eb',
      borderTop: 'none',
      borderRadius: '0 0 8px 8px',
      padding: '0.75rem',
      marginBottom: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 444,
      columnNumber: 21
    }
  }, exec.stepResults.map((sr, idx) => {
    var stepDef = trigger.steps.find(s => s.id === sr.stepId);
    var app = stepDef ? getApp(stepDef.appId) : null;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: sr.stepId,
      style: {
        display: 'flex',
        alignItems: 'flex-start',
        gap: '0.75rem',
        padding: '0.4rem 0',
        borderBottom: idx < exec.stepResults.length - 1 ? '1px solid #f3f4f6' : 'none'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 449,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 24,
        height: 24,
        borderRadius: '50%',
        flexShrink: 0,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: sr.status === 'success' ? '#ecfdf5' : sr.status === 'failed' ? '#fef2f2' : '#f9fafb',
        marginTop: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 450,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(sr.status === 'success' ? 'fa-check' : sr.status === 'failed' ? 'fa-times' : 'fa-minus'),
      style: {
        fontSize: '0.65rem',
        color: stepStatusColor(sr.status)
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 451,
        columnNumber: 31
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 453,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.8rem',
        fontWeight: 600,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 454,
        columnNumber: 31
      }
    }, idx + 1, ". ", app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.75rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 455,
        columnNumber: 31
      }
    }, sr.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.7rem',
        color: '#9ca3af',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 457,
        columnNumber: 29
      }
    }, sr.duration));
  }))))), trigger.executions.length === 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      padding: '1rem',
      color: '#d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 469,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-clock-o",
    style: {
      marginRight: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 470,
      columnNumber: 15
    }
  }), "This trigger hasn't fired yet")));
};

/* ─── Main Component ─── */
var StandaloneAgreementDetailE = _ref3 => {
  var {
    match,
    history
  } = _ref3;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [triggers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(MOCK_TRIGGERS);
  var [showAddModal, setShowAddModal] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [activeView, setActiveView] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('triggers');
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    _asyncToGenerator(function* () {
      setLoading(true);
      try {
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/agreement/".concat(agreementId), 'GET', {}, {});
        setAgreement(res.data);
      } catch (_unused3) {
        setAgreement({
          id: agreementId,
          businessName: 'Acme Coffee Roasters',
          guarantorName: 'John Smith',
          borrowerEmail: 'john@acmecoffee.com',
          loanType: 'SBA 7(a)',
          loanAmount: 250000,
          status: 'draft',
          dateCreated: new Date().toISOString(),
          businessOwnerName: 'John Smith'
        });
      }
      setLoading(false);
    })();
  }, [agreementId]);
  var allExecutions = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => {
    var execs = [];
    triggers.forEach(t => {
      t.executions.forEach(e => execs.push(_objectSpread(_objectSpread({}, e), {}, {
        triggerName: t.name,
        triggerId: t.id,
        steps: t.steps
      })));
    });
    return execs.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
  }, [triggers]);
  if (loading) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 515,
      columnNumber: 23
    }
  }, "Loading...");
  if (!agreement) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 516,
      columnNumber: 26
    }
  }, _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 516,
      columnNumber: 90
    }
  }, "Agreement not found.")));
  var status = agreement.status || 'draft';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail-e",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 521,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 523,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 524,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title",
    style: {
      textAlign: 'left',
      color: '#fff',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 525,
      columnNumber: 11
    }
  }, agreement.businessName || 'Agreement'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: 'rgba(255,255,255,0.7)',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 528,
      columnNumber: 11
    }
  }, formatCurrency(agreement.loanAmount), " \xB7 ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#fff',
      borderBottom: '1px solid #e5e7eb',
      padding: '0 1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 535,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container",
    style: {
      display: 'flex',
      gap: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 536,
      columnNumber: 9
    }
  }, [{
    key: 'triggers',
    label: 'Triggers',
    icon: 'fa-bolt'
  }, {
    key: 'history',
    label: 'History',
    icon: 'fa-history'
  }].map(tab => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: tab.key,
    onClick: () => setActiveView(tab.key),
    style: {
      background: 'none',
      border: 'none',
      borderBottom: activeView === tab.key ? '2px solid #00a5fa' : '2px solid transparent',
      padding: '0.75rem 0.25rem',
      cursor: 'pointer',
      fontSize: '0.85rem',
      fontWeight: 500,
      color: activeView === tab.key ? '#00a5fa' : '#6b7280',
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 538,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tab.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 547,
      columnNumber: 15
    }
  }), " ", tab.label)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 553,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 554,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-3 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 556,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 557,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      paddingBottom: '0.75rem',
      borderBottom: '1px solid #eee',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 558,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.68rem',
      textTransform: 'uppercase',
      letterSpacing: '0.06em',
      color: '#6b7280',
      fontWeight: 600,
      marginBottom: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 559,
      columnNumber: 17
    }
  }, "Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getStatusBadgeClass(status)),
    style: {
      fontSize: '1.1rem',
      padding: '0.35em 1.25em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 560,
      columnNumber: 17
    }
  }, status)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#6b7280',
      lineHeight: 1.8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 562,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 563,
      columnNumber: 17
    }
  }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 563,
      columnNumber: 22
    }
  }, "Business:")), " ", agreement.businessName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 564,
      columnNumber: 17
    }
  }, _strong2 || (_strong2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 564,
      columnNumber: 22
    }
  }, "Owner:")), " ", agreement.businessOwnerName || agreement.guarantorName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 565,
      columnNumber: 17
    }
  }, _strong3 || (_strong3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 565,
      columnNumber: 22
    }
  }, "Email:")), " ", agreement.borrowerEmail || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 566,
      columnNumber: 17
    }
  }, _strong4 || (_strong4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 566,
      columnNumber: 22
    }
  }, "Type:")), " ", agreement.loanType || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 567,
      columnNumber: 17
    }
  }, _strong5 || (_strong5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 567,
      columnNumber: 22
    }
  }, "Amount:")), " ", formatCurrency(agreement.loanAmount)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 568,
      columnNumber: 17
    }
  }, _strong6 || (_strong6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 568,
      columnNumber: 22
    }
  }, "Created:")), " ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 572,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 573,
      columnNumber: 15
    }
  }, "Overview")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 574,
      columnNumber: 15
    }
  }, [{
    label: 'Triggers',
    value: triggers.length,
    color: '#00a5fa'
  }, {
    label: 'Total Runs',
    value: triggers.reduce((s, t) => s + t.executions.length, 0),
    color: '#059669'
  }, {
    label: 'Failures',
    value: triggers.reduce((s, t) => s + t.executions.filter(e => e.status === 'failed').length, 0),
    color: '#dc2626'
  }].map(stat => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: stat.label,
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 580,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.85rem',
      color: '#4b5563'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 581,
      columnNumber: 21
    }
  }, stat.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '1.1rem',
      fontWeight: 700,
      color: stat.color
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 582,
      columnNumber: 21
    }
  }, stat.value))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: 'linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%)',
      borderRadius: 10,
      padding: '1.25rem',
      color: '#fff',
      cursor: 'pointer',
      textAlign: 'center'
    },
    onClick: () => history.push('/loanwell-ai'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 588,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-magic",
    style: {
      fontSize: '1.5rem',
      marginBottom: '0.5rem',
      display: 'block'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 589,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 590,
      columnNumber: 15
    }
  }, "Ask an Agent"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      opacity: 0.85
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 591,
      columnNumber: 15
    }
  }, "Get AI-powered insights about this agreement"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-9",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 596,
      columnNumber: 11
    }
  }, activeView === 'triggers' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 599,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: 0,
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 600,
      columnNumber: 19
    }
  }, "Triggers"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setShowAddModal(true),
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      fontWeight: 500,
      cursor: 'pointer',
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 601,
      columnNumber: 19
    }
  }, _i4 || (_i4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 602,
      columnNumber: 21
    }
  })), " Add Trigger")), triggers.map(trigger => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TriggerRow, {
    key: trigger.id,
    trigger: trigger,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 607,
      columnNumber: 19
    }
  }))), activeView === 'history' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: '0 0 1rem',
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 614,
      columnNumber: 17
    }
  }, "Trigger History"), allExecutions.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      padding: '2rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 616,
      columnNumber: 19
    }
  }, "No executions yet.") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 618,
      columnNumber: 19
    }
  }, allExecutions.map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: exec.id,
    className: "standalone-account__card",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 620,
      columnNumber: 23
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 621,
      columnNumber: 25
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 8,
      height: 8,
      borderRadius: '50%',
      flexShrink: 0,
      background: exec.status === 'success' ? '#059669' : '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 622,
      columnNumber: 27
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 623,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.88rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 624,
      columnNumber: 29
    }
  }, exec.triggerName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 625,
      columnNumber: 29
    }
  }, exec.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'right',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 627,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      fontWeight: 600,
      color: exec.status === 'success' ? '#059669' : '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 628,
      columnNumber: 29
    }
  }, exec.status === 'success' ? 'Success' : 'Failed'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 629,
      columnNumber: 29
    }
  }, formatDateTime(exec.timestamp)))), exec.stepResults && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginTop: '0.75rem',
      paddingTop: '0.75rem',
      borderTop: '1px solid #f3f4f6'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 634,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.35rem',
      flexWrap: 'wrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 635,
      columnNumber: 29
    }
  }, exec.stepResults.map((sr, idx) => {
    var stepDef = exec.steps ? exec.steps.find(s => s.id === sr.stepId) : null;
    var app = stepDef ? getApp(stepDef.appId) : null;
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: sr.stepId,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 640,
        columnNumber: 35
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'inline-flex',
        alignItems: 'center',
        gap: '0.3rem',
        padding: '0.2rem 0.5rem',
        borderRadius: 6,
        fontSize: '0.72rem',
        fontWeight: 500,
        background: sr.status === 'success' ? '#ecfdf5' : sr.status === 'failed' ? '#fef2f2' : '#f9fafb',
        color: sr.status === 'success' ? '#065f46' : sr.status === 'failed' ? '#991b1b' : '#6b7280',
        border: "1px solid ".concat(sr.status === 'success' ? '#a7f3d0' : sr.status === 'failed' ? '#fecaca' : '#e5e7eb')
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 641,
        columnNumber: 37
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        fontSize: '0.65rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 648,
        columnNumber: 39
      }
    }), app === null || app === void 0 ? void 0 : app.name), idx < exec.stepResults.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-long-arrow-right",
      style: {
        color: '#d1d5db',
        fontSize: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 652,
        columnNumber: 39
      }
    }));
  })))))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(AddTriggerModal, {
    open: showAddModal,
    onClose: () => setShowAddModal(false),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 670,
      columnNumber: 7
    }
  }));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetailE));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetailF.js",
  _i,
  _i2,
  _i3,
  _i4,
  _i5,
  _i6,
  _div,
  _strong,
  _strong2,
  _strong3,
  _strong4,
  _strong5,
  _strong6,
  _h,
  _strong7;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }




/**
 * VARIATION F — D-style overview + full pipeline editor view
 *
 * Overview: condensed trigger cards (from D) with "Edit" link per trigger
 * Edit view: full-screen pipeline editor with:
 *   - Drag-and-drop step reordering
 *   - Conditional logic (if/then branching)
 *   - App prerequisite validation
 *   - SurveyJS "Ask Questions" step
 *   - Document Request trigger type + OCR app
 *   - Manual trigger option
 */

var AVAILABLE_APPS = [{
  id: 'app-send-email',
  name: 'Send Email',
  description: 'Send a templated email notification',
  icon: 'fa-envelope',
  prereqs: []
}, {
  id: 'app-send-sms',
  name: 'Send SMS',
  description: 'Send an SMS text message',
  icon: 'fa-comment',
  prereqs: []
}, {
  id: 'app-generate-doc',
  name: 'Generate Document',
  description: 'Auto-generate a PDF document',
  icon: 'fa-file-pdf-o',
  prereqs: []
}, {
  id: 'app-assign-task',
  name: 'Assign Task',
  description: 'Create and assign a task to a team member',
  icon: 'fa-tasks',
  prereqs: []
}, {
  id: 'app-webhook',
  name: 'Call Webhook',
  description: 'Send data to an external webhook URL',
  icon: 'fa-plug',
  prereqs: []
}, {
  id: 'app-update-status',
  name: 'Update Status',
  description: 'Automatically change agreement status',
  icon: 'fa-refresh',
  prereqs: []
}, {
  id: 'app-run-agent',
  name: 'Run AI Agent',
  description: 'Execute an AI agent to analyze or act on data',
  icon: 'fa-magic',
  prereqs: []
}, {
  id: 'app-pull-credit',
  name: 'Pull Credit',
  description: 'Request a credit report from bureau',
  icon: 'fa-credit-card',
  prereqs: ['app-run-agent']
}, {
  id: 'app-create-task',
  name: 'Create Task',
  description: 'Create a follow-up task for your team',
  icon: 'fa-check-square-o',
  prereqs: []
}, {
  id: 'app-ask-questions',
  name: 'Ask Questions',
  description: 'Collect form input via SurveyJS questionnaire',
  icon: 'fa-wpforms',
  prereqs: []
}, {
  id: 'app-ocr-document',
  name: 'OCR Document',
  description: 'Extract text and data from uploaded document',
  icon: 'fa-file-text-o',
  prereqs: []
}, {
  id: 'app-request-document',
  name: 'Request Document',
  description: 'Request a document upload from borrower',
  icon: 'fa-upload',
  prereqs: []
}];
var MOCK_TRIGGERS = [{
  id: 'trigger-1',
  name: 'New Application Pipeline',
  type: 'status_change',
  config: {
    fromStatus: '*',
    toStatus: 'new'
  },
  isDefault: false,
  steps: [{
    id: 'step-1a',
    type: 'app',
    appId: 'app-run-agent',
    config: {
      agent: 'risk-scorer',
      saveAs: 'riskScore'
    }
  }, {
    id: 'step-1b',
    type: 'condition',
    condition: {
      field: 'riskScore',
      operator: '>=',
      value: '60'
    },
    ifSteps: ['step-1c'],
    elseSteps: ['step-1e']
  }, {
    id: 'step-1c',
    type: 'app',
    appId: 'app-pull-credit',
    config: {
      bureau: 'experian'
    }
  }, {
    id: 'step-1d',
    type: 'app',
    appId: 'app-send-email',
    config: {
      to: 'team@company.com',
      template: 'new_application'
    }
  }, {
    id: 'step-1e',
    type: 'app',
    appId: 'app-create-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Manual review — low risk score'
    }
  }],
  executions: [{
    id: 'exec-1',
    timestamp: '2026-04-05T14:30:00Z',
    status: 'success',
    summary: 'Pipeline completed — 4/4 steps (condition: riskScore >= 60 → true)',
    stepResults: [{
      stepId: 'step-1a',
      status: 'success',
      summary: 'Risk score: 72 (Medium)',
      duration: '3.2s'
    }, {
      stepId: 'step-1b',
      status: 'success',
      summary: 'Condition passed: riskScore (72) >= 60',
      duration: '0.01s'
    }, {
      stepId: 'step-1c',
      status: 'success',
      summary: 'Credit pulled — Experian score 680',
      duration: '8.1s'
    }, {
      stepId: 'step-1d',
      status: 'success',
      summary: 'Email sent to team@company.com',
      duration: '1.1s'
    }]
  }]
}, {
  id: 'trigger-2',
  name: 'Denial Letter',
  type: 'status_change',
  config: {
    fromStatus: 'in_review',
    toStatus: 'denied'
  },
  isDefault: true,
  steps: [{
    id: 'step-2a',
    type: 'app',
    appId: 'app-generate-doc',
    config: {
      template: 'denial_letter',
      format: 'pdf'
    }
  }, {
    id: 'step-2b',
    type: 'app',
    appId: 'app-send-email',
    config: {
      to: '{{borrowerEmail}}',
      template: 'denial_notification'
    }
  }],
  executions: []
}, {
  id: 'trigger-3',
  name: 'Document Intake',
  type: 'document_uploaded',
  config: {
    documentType: 'bank_statement'
  },
  isDefault: false,
  steps: [{
    id: 'step-3a',
    type: 'app',
    appId: 'app-ocr-document',
    config: {
      extractFields: ['income', 'balances']
    }
  }, {
    id: 'step-3b',
    type: 'app',
    appId: 'app-run-agent',
    config: {
      agent: 'doc-verifier',
      saveAs: 'docValid'
    }
  }, {
    id: 'step-3c',
    type: 'condition',
    condition: {
      field: 'docValid',
      operator: '==',
      value: 'true'
    },
    ifSteps: ['step-3d'],
    elseSteps: ['step-3e']
  }, {
    id: 'step-3d',
    type: 'app',
    appId: 'app-update-status',
    config: {
      toStatus: 'docs_verified'
    }
  }, {
    id: 'step-3e',
    type: 'app',
    appId: 'app-request-document',
    config: {
      message: 'Document could not be verified. Please re-upload.'
    }
  }],
  executions: [{
    id: 'exec-3',
    timestamp: '2026-04-04T11:20:00Z',
    status: 'success',
    summary: 'Pipeline completed — document verified',
    stepResults: [{
      stepId: 'step-3a',
      status: 'success',
      summary: 'OCR extracted 12 fields from bank_statement.pdf',
      duration: '4.5s'
    }, {
      stepId: 'step-3b',
      status: 'success',
      summary: 'Document verified — all fields match',
      duration: '2.1s'
    }, {
      stepId: 'step-3c',
      status: 'success',
      summary: 'Condition passed: docValid == true',
      duration: '0.01s'
    }, {
      stepId: 'step-3d',
      status: 'success',
      summary: 'Status updated to docs_verified',
      duration: '0.3s'
    }]
  }]
}, {
  id: 'trigger-4',
  name: 'Onboarding Questionnaire',
  type: 'status_change',
  config: {
    fromStatus: 'new',
    toStatus: 'in_review'
  },
  isDefault: true,
  steps: [{
    id: 'step-4a',
    type: 'app',
    appId: 'app-ask-questions',
    config: {
      formId: 'onboarding-v2',
      fields: ['businessType', 'annualRevenue', 'yearsInBusiness', 'numberOfEmployees']
    }
  }, {
    id: 'step-4b',
    type: 'condition',
    condition: {
      field: 'annualRevenue',
      operator: '>=',
      value: '500000'
    },
    ifSteps: ['step-4c'],
    elseSteps: ['step-4d']
  }, {
    id: 'step-4c',
    type: 'app',
    appId: 'app-assign-task',
    config: {
      assignee: 'senior.officer@company.com',
      title: 'High-value application review'
    }
  }, {
    id: 'step-4d',
    type: 'app',
    appId: 'app-assign-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Standard application review'
    }
  }],
  executions: []
}];
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = d => {
  if (!d) return '-';
  try {
    return new Date(d).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return d;
  }
};
var formatDateTime = d => {
  if (!d) return '-';
  try {
    var dt = new Date(d);
    return dt.toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric'
    }) + ' ' + dt.toLocaleTimeString('en-US', {
      hour: 'numeric',
      minute: '2-digit'
    });
  } catch (_unused2) {
    return d;
  }
};
var formatCurrency = a => {
  if (!a) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(a);
};
var getApp = id => AVAILABLE_APPS.find(a => a.id === id);
var describeTrigger = t => {
  if (t.type === 'status_change') return "".concat(t.config.fromStatus === '*' ? 'Any' : t.config.fromStatus, " \u2192 ").concat(t.config.toStatus);
  if (t.type === 'field_change') return "When \"".concat(t.config.field, "\" changes");
  if (t.type === 'time_based') return "".concat(t.config.duration, " ").concat(t.config.unit, " after ").concat(t.config.from);
  if (t.type === 'document_uploaded') return "When \"".concat(t.config.documentType, "\" is uploaded");
  return '-';
};
var typeIcon = t => ({
  status_change: 'fa-exchange',
  field_change: 'fa-pencil',
  time_based: 'fa-clock-o',
  document_uploaded: 'fa-upload'
})[t] || 'fa-bolt';
var typeLabel = t => ({
  status_change: 'Status Change',
  field_change: 'Field Change',
  time_based: 'Time Based',
  document_uploaded: 'Document Uploaded'
})[t] || t;
var stepStatusColor = s => ({
  success: '#059669',
  failed: '#dc2626',
  skipped: '#9ca3af'
})[s] || '#9ca3af';

/* ─── Pipeline Editor ─── */
var PipelineEditor = _ref => {
  var {
    trigger,
    onClose
  } = _ref;
  var [steps, setSteps] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(trigger.steps || []);
  var [dragIdx, setDragIdx] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [showAppPicker, setShowAppPicker] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [insertAt, setInsertAt] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [showConditionBuilder, setShowConditionBuilder] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var handleDragStart = idx => setDragIdx(idx);
  var handleDragOver = (e, idx) => {
    e.preventDefault();
  };
  var handleDrop = idx => {
    if (dragIdx === null || dragIdx === idx) {
      setDragIdx(null);
      return;
    }
    var arr = [...steps];
    var [moved] = arr.splice(dragIdx, 1);
    arr.splice(idx, 0, moved);
    setSteps(arr);
    setDragIdx(null);
  };
  var removeStep = idx => setSteps(steps.filter((_, i) => i !== idx));
  var addStep = appId => {
    var newStep = {
      id: "step-new-".concat(Date.now()),
      type: 'app',
      appId,
      config: {}
    };
    if (insertAt !== null) {
      var arr = [...steps];
      arr.splice(insertAt, 0, newStep);
      setSteps(arr);
    } else {
      setSteps([...steps, newStep]);
    }
    setShowAppPicker(false);
    setInsertAt(null);
  };
  var addCondition = () => {
    var newStep = {
      id: "step-cond-".concat(Date.now()),
      type: 'condition',
      condition: {
        field: '',
        operator: '>=',
        value: ''
      },
      ifSteps: [],
      elseSteps: []
    };
    if (insertAt !== null) {
      var arr = [...steps];
      arr.splice(insertAt, 0, newStep);
      setSteps(arr);
    } else {
      setSteps([...steps, newStep]);
    }
    setShowConditionBuilder(false);
    setInsertAt(null);
  };

  // Check prerequisites
  var checkPrereqs = appId => {
    var app = getApp(appId);
    if (!app || !app.prereqs || app.prereqs.length === 0) return {
      valid: true,
      missing: []
    };
    var existingAppIds = steps.filter(s => s.type === 'app').map(s => s.appId);
    var missing = app.prereqs.filter(p => !existingAppIds.includes(p));
    return {
      valid: missing.length === 0,
      missing
    };
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      zIndex: 1050,
      background: '#f7f7f7',
      overflowY: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 180,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#001433',
      color: '#fff',
      padding: '1rem 2rem',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'space-between'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 182,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 183,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: onClose,
    style: {
      background: 'none',
      border: 'none',
      color: '#fff',
      fontSize: '1.2rem',
      cursor: 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 184,
      columnNumber: 11
    }
  }, _i || (_i = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-arrow-left",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 185,
      columnNumber: 13
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 187,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: 0,
      fontSize: '1.1rem',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 188,
      columnNumber: 13
    }
  }, "Edit Pipeline: ", trigger.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      opacity: 0.7
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 13
    }
  }, typeLabel(trigger.type), " \xB7 ", describeTrigger(trigger)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 192,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: onClose,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: '1px solid rgba(255,255,255,0.3)',
      background: 'transparent',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 193,
      columnNumber: 11
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: onClose,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: 'pointer',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 194,
      columnNumber: 11
    }
  }, "Save Pipeline"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      maxWidth: 720,
      margin: '2rem auto',
      padding: '0 1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 198,
      columnNumber: 7
    }
  }, steps.map((step, idx) => {
    var _step$config, _step$condition, _step$condition2, _step$condition3;
    var app = step.type === 'app' ? getApp(step.appId) : null;
    var prereqCheck = step.type === 'app' ? checkPrereqs(step.appId) : {
      valid: true,
      missing: []
    };
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: step.id,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 205,
        columnNumber: 13
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      draggable: true,
      onDragStart: () => handleDragStart(idx),
      onDragOver: e => handleDragOver(e, idx),
      onDrop: () => handleDrop(idx),
      style: {
        background: '#fff',
        borderRadius: 10,
        padding: '1rem 1.25rem',
        marginBottom: 0,
        border: dragIdx === idx ? '2px solid #00a5fa' : prereqCheck.valid ? '1px solid #e5e7eb' : '2px solid #f59e0b',
        boxShadow: dragIdx === idx ? '0 4px 12px rgba(0,165,250,0.2)' : '0 1px 3px rgba(0,0,0,0.06)',
        cursor: 'grab',
        position: 'relative'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 206,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 218,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        color: '#d1d5db',
        fontSize: '0.9rem',
        cursor: 'grab',
        padding: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 219,
        columnNumber: 19
      }
    }, _i2 || (_i2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-bars",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 220,
        columnNumber: 21
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.72rem',
        fontWeight: 700,
        color: '#00a5fa',
        width: 24
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 222,
        columnNumber: 19
      }
    }, idx + 1), step.type === 'app' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 40,
        height: 40,
        borderRadius: 10,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(0,165,250,0.08)',
        color: '#00a5fa',
        fontSize: '1rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 226,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 230,
        columnNumber: 25
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 232,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.9rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 233,
        columnNumber: 25
      }
    }, (app === null || app === void 0 ? void 0 : app.name) || step.appId), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.75rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 234,
        columnNumber: 25
      }
    }, app === null || app === void 0 ? void 0 : app.description), step.appId === 'app-ask-questions' && ((_step$config = step.config) === null || _step$config === void 0 ? void 0 : _step$config.fields) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: '0.4rem',
        display: 'flex',
        gap: '0.35rem',
        flexWrap: 'wrap'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 236,
        columnNumber: 27
      }
    }, step.config.fields.map(f => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      key: f,
      style: {
        padding: '0.15rem 0.5rem',
        borderRadius: 4,
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        fontSize: '0.68rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 238,
        columnNumber: 31
      }
    }, f))))), step.type === 'condition' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 40,
        height: 40,
        borderRadius: 10,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(245,158,11,0.1)',
        color: '#f59e0b',
        fontSize: '1rem',
        flexShrink: 0,
        transform: 'rotate(45deg)'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 248,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-code-fork",
      style: {
        transform: 'rotate(-45deg)'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 253,
        columnNumber: 25
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 255,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.9rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 256,
        columnNumber: 25
      }
    }, "Conditional Branch"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.75rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 257,
        columnNumber: 25
      }
    }, "If ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 258,
        columnNumber: 30
      }
    }, ((_step$condition = step.condition) === null || _step$condition === void 0 ? void 0 : _step$condition.field) || '...'), " ", ((_step$condition2 = step.condition) === null || _step$condition2 === void 0 ? void 0 : _step$condition2.operator) || '...', " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 258,
        columnNumber: 116
      }
    }, ((_step$condition3 = step.condition) === null || _step$condition3 === void 0 ? void 0 : _step$condition3.value) || '...')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        gap: '0.75rem',
        marginTop: '0.5rem',
        fontSize: '0.72rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 260,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        color: '#059669'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 261,
        columnNumber: 27
      }
    }, _i3 || (_i3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-check",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 261,
        columnNumber: 62
      }
    })), " Then \u2192 continue"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        color: '#dc2626'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 262,
        columnNumber: 27
      }
    }, _i4 || (_i4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-times",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 262,
        columnNumber: 62
      }
    })), " Else \u2192 skip to fallback")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => removeStep(idx),
      style: {
        background: 'none',
        border: 'none',
        color: '#00a5fa',
        cursor: 'pointer',
        padding: '0.25rem',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 268,
        columnNumber: 19
      }
    }, _i5 || (_i5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-trash-o",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 269,
        columnNumber: 21
      }
    })))), !prereqCheck.valid && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: '0.75rem',
        padding: '0.5rem 0.75rem',
        borderRadius: 6,
        background: '#fffbeb',
        border: '1px solid #fde68a',
        fontSize: '0.78rem',
        color: '#92400e'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 275,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-exclamation-triangle",
      style: {
        marginRight: 6
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 279,
        columnNumber: 21
      }
    }), "Requires: ", prereqCheck.missing.map(p => {
      var _getApp;
      return (_getApp = getApp(p)) === null || _getApp === void 0 ? void 0 : _getApp.name;
    }).join(', '), " \u2014 add ", prereqCheck.missing.length === 1 ? 'it' : 'them', " as a prior step")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        padding: '0.35rem 0'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 286,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 2,
        height: 16,
        background: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 287,
        columnNumber: 17
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'center',
        marginBottom: '0.35rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 289,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => {
        setInsertAt(idx + 1);
        setShowAppPicker(true);
      },
      style: {
        background: 'none',
        border: '1px dashed #d1d5db',
        borderRadius: 20,
        padding: '0.2rem 0.75rem',
        fontSize: '0.7rem',
        color: '#9ca3af',
        cursor: 'pointer',
        display: 'flex',
        alignItems: 'center',
        gap: '0.3rem'
      },
      onMouseEnter: e => {
        e.currentTarget.style.borderColor = '#00a5fa';
        e.currentTarget.style.color = '#00a5fa';
      },
      onMouseLeave: e => {
        e.currentTarget.style.borderColor = '#d1d5db';
        e.currentTarget.style.color = '#9ca3af';
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 290,
        columnNumber: 17
      }
    }, _i6 || (_i6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-plus",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 300,
        columnNumber: 19
      }
    })), " Insert step")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        paddingBottom: '0.35rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 303,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 2,
        height: 16,
        background: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 304,
        columnNumber: 17
      }
    })));
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.75rem',
      justifyContent: 'center',
      marginTop: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 311,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      setInsertAt(null);
      setShowAppPicker(true);
    },
    style: {
      padding: '0.75rem 1.5rem',
      borderRadius: 8,
      border: '2px dashed #d1d5db',
      background: '#fafbfc',
      cursor: 'pointer',
      fontSize: '0.85rem',
      color: '#001433',
      fontWeight: 500,
      display: 'flex',
      alignItems: 'center',
      gap: '0.5rem'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#00a5fa';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 312,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus-circle",
    style: {
      color: '#00a5fa'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 322,
      columnNumber: 13
    }
  }), " Add App Step"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      setInsertAt(null);
      addCondition();
    },
    style: {
      padding: '0.75rem 1.5rem',
      borderRadius: 8,
      border: '2px dashed #d1d5db',
      background: '#fafbfc',
      cursor: 'pointer',
      fontSize: '0.85rem',
      color: '#001433',
      fontWeight: 500,
      display: 'flex',
      alignItems: 'center',
      gap: '0.5rem'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#f59e0b';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 324,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-code-fork",
    style: {
      color: '#f59e0b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 334,
      columnNumber: 13
    }
  }), " Add Condition"))), showAppPicker && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      zIndex: 1060,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 341,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      inset: 0,
      background: 'rgba(0,20,51,0.4)'
    },
    onClick: () => {
      setShowAppPicker(false);
      setInsertAt(null);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 342,
      columnNumber: 11
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative',
      background: '#fff',
      borderRadius: 12,
      width: 520,
      maxHeight: '80vh',
      overflow: 'auto',
      boxShadow: '0 8px 30px rgba(0,0,0,0.18)',
      border: '2px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 343,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 344,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1.1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 345,
      columnNumber: 15
    }
  }, "Choose an App"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      setShowAppPicker(false);
      setInsertAt(null);
    },
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 346,
      columnNumber: 15
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1rem 1.5rem',
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 348,
      columnNumber: 13
    }
  }, AVAILABLE_APPS.map(app => {
    var prereqCheck = checkPrereqs(app.id);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: app.id,
      onClick: () => addStep(app.id),
      style: {
        border: '2px dashed #d1d5db',
        borderRadius: 8,
        padding: '0.75rem 1rem',
        cursor: 'pointer',
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem',
        background: '#fafbfc',
        transition: 'all 0.15s',
        opacity: prereqCheck.valid ? 1 : 0.6
      },
      onMouseEnter: e => {
        e.currentTarget.style.borderColor = '#00a5fa';
        e.currentTarget.style.background = 'rgba(0,165,250,0.03)';
      },
      onMouseLeave: e => {
        e.currentTarget.style.borderColor = '#d1d5db';
        e.currentTarget.style.background = '#fafbfc';
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 352,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        background: '#f3f4f6',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        color: '#6b7280',
        fontSize: '0.9rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 363,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(app.icon),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 364,
        columnNumber: 23
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 366,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.85rem',
        fontWeight: 600,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 367,
        columnNumber: 23
      }
    }, app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 368,
        columnNumber: 23
      }
    }, app.description), !prereqCheck.valid && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        color: '#f59e0b',
        marginTop: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 370,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-exclamation-triangle",
      style: {
        marginRight: 4
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 371,
        columnNumber: 27
      }
    }), "Requires: ", prereqCheck.missing.map(p => {
      var _getApp2;
      return (_getApp2 = getApp(p)) === null || _getApp2 === void 0 ? void 0 : _getApp2.name;
    }).join(', '))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-plus",
      style: {
        color: '#00a5fa',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 376,
        columnNumber: 21
      }
    }));
  })))));
};

/* ─── Execution Panel ─── */
var ExecutionPanel = _ref2 => {
  var {
    execution,
    trigger,
    onClose
  } = _ref2;
  if (!execution || !trigger) return null;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      top: 0,
      right: 0,
      bottom: 0,
      width: 420,
      background: '#fff',
      zIndex: 1040,
      boxShadow: '-4px 0 20px rgba(0,0,0,0.12)',
      display: 'flex',
      flexDirection: 'column',
      overflowY: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 393,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'flex-start'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 394,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 395,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 396,
      columnNumber: 11
    }
  }, "Execution Detail"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280',
      marginTop: 2
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 397,
      columnNumber: 11
    }
  }, trigger.name, " \xB7 ", formatDateTime(execution.timestamp))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: onClose,
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 399,
      columnNumber: 9
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 401,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '0.75rem 1rem',
      borderRadius: 8,
      marginBottom: '1.25rem',
      background: execution.status === 'success' ? '#ecfdf5' : '#fef2f2',
      border: "1px solid ".concat(execution.status === 'success' ? '#a7f3d0' : '#fecaca')
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 402,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.85rem',
      color: execution.status === 'success' ? '#065f46' : '#991b1b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 407,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(execution.status === 'success' ? 'fa-check-circle' : 'fa-times-circle'),
    style: {
      marginRight: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 408,
      columnNumber: 13
    }
  }), execution.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 412,
      columnNumber: 9
    }
  }, "Step Results"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 413,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      left: 15,
      top: 20,
      bottom: 20,
      width: 2,
      background: '#e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 414,
      columnNumber: 11
    }
  }), (execution.stepResults || []).map((sr, idx) => {
    var stepDef = trigger.steps.find(s => s.id === sr.stepId);
    var app = (stepDef === null || stepDef === void 0 ? void 0 : stepDef.type) === 'app' ? getApp(stepDef.appId) : null;
    var isCondition = (stepDef === null || stepDef === void 0 ? void 0 : stepDef.type) === 'condition';
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: sr.stepId,
      style: {
        display: 'flex',
        gap: '1rem',
        marginBottom: '1rem',
        position: 'relative'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 420,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 32,
        height: 32,
        borderRadius: isCondition ? 6 : '50%',
        flexShrink: 0,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: '#fff',
        border: "2px solid ".concat(stepStatusColor(sr.status)),
        zIndex: 1,
        transform: isCondition ? 'rotate(45deg)' : 'none'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 421,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(isCondition ? 'fa-code-fork' : sr.status === 'success' ? 'fa-check' : 'fa-times'),
      style: {
        color: stepStatusColor(sr.status),
        fontSize: '0.75rem',
        transform: isCondition ? 'rotate(-45deg)' : 'none'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 427,
        columnNumber: 19
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1,
        background: '#f9fafb',
        borderRadius: 8,
        padding: '0.75rem 1rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 429,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'center',
        marginBottom: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 430,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontWeight: 600,
        fontSize: '0.82rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 431,
        columnNumber: 21
      }
    }, idx + 1, ". ", isCondition ? 'Condition' : (app === null || app === void 0 ? void 0 : app.name) || 'Unknown'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 434,
        columnNumber: 21
      }
    }, sr.duration)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#374151'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 436,
        columnNumber: 19
      }
    }, sr.summary)));
  }))));
};

/* ─── Main Component ─── */
var StandaloneAgreementDetailF = _ref3 => {
  var {
    match,
    history
  } = _ref3;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [triggers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(MOCK_TRIGGERS);
  var [activeView, setActiveView] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('triggers');
  var [editingTrigger, setEditingTrigger] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [selectedExec, setSelectedExec] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [selectedTrigger, setSelectedTrigger] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    _asyncToGenerator(function* () {
      setLoading(true);
      try {
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/agreement/".concat(agreementId), 'GET', {}, {});
        setAgreement(res.data);
      } catch (_unused3) {
        setAgreement({
          id: agreementId,
          businessName: 'Acme Coffee Roasters',
          guarantorName: 'John Smith',
          borrowerEmail: 'john@acmecoffee.com',
          loanType: 'SBA 7(a)',
          loanAmount: 250000,
          status: 'draft',
          dateCreated: new Date().toISOString(),
          businessOwnerName: 'John Smith'
        });
      }
      setLoading(false);
    })();
  }, [agreementId]);
  var allExecutions = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => {
    var execs = [];
    triggers.forEach(t => {
      t.executions.forEach(e => execs.push(_objectSpread(_objectSpread({}, e), {}, {
        triggerName: t.name,
        triggerId: t.id,
        steps: t.steps
      })));
    });
    return execs.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
  }, [triggers]);
  if (loading) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 484,
      columnNumber: 23
    }
  }, "Loading...");
  if (!agreement) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 485,
      columnNumber: 26
    }
  }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 485,
      columnNumber: 90
    }
  }, "Agreement not found.")));
  if (editingTrigger) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(PipelineEditor, {
    trigger: editingTrigger,
    onClose: () => setEditingTrigger(null),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 486,
      columnNumber: 30
    }
  });
  var status = agreement.status || 'draft';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail-f",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 491,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 492,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 493,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title",
    style: {
      textAlign: 'left',
      color: '#fff',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 494,
      columnNumber: 11
    }
  }, agreement.businessName || 'Agreement'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: 'rgba(255,255,255,0.7)',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 495,
      columnNumber: 11
    }
  }, formatCurrency(agreement.loanAmount), " \xB7 ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#fff',
      borderBottom: '1px solid #e5e7eb',
      padding: '0 1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 499,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container",
    style: {
      display: 'flex',
      gap: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 500,
      columnNumber: 9
    }
  }, [{
    key: 'triggers',
    label: 'Triggers',
    icon: 'fa-bolt'
  }, {
    key: 'history',
    label: 'History',
    icon: 'fa-history'
  }].map(tab => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: tab.key,
    onClick: () => setActiveView(tab.key),
    style: {
      background: 'none',
      border: 'none',
      borderBottom: activeView === tab.key ? '2px solid #00a5fa' : '2px solid transparent',
      padding: '0.75rem 0.25rem',
      cursor: 'pointer',
      fontSize: '0.85rem',
      fontWeight: 500,
      color: activeView === tab.key ? '#00a5fa' : '#6b7280',
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 502,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tab.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 507,
      columnNumber: 15
    }
  }), " ", tab.label)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 513,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 514,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-3 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 516,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 517,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      paddingBottom: '0.75rem',
      borderBottom: '1px solid #eee',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 518,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.68rem',
      textTransform: 'uppercase',
      letterSpacing: '0.06em',
      color: '#6b7280',
      fontWeight: 600,
      marginBottom: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 519,
      columnNumber: 17
    }
  }, "Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getStatusBadgeClass(status)),
    style: {
      fontSize: '1.1rem',
      padding: '0.35em 1.25em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 520,
      columnNumber: 17
    }
  }, status)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#6b7280',
      lineHeight: 1.8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 522,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 523,
      columnNumber: 17
    }
  }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 523,
      columnNumber: 22
    }
  }, "Business:")), " ", agreement.businessName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 524,
      columnNumber: 17
    }
  }, _strong2 || (_strong2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 524,
      columnNumber: 22
    }
  }, "Owner:")), " ", agreement.businessOwnerName || agreement.guarantorName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 525,
      columnNumber: 17
    }
  }, _strong3 || (_strong3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 525,
      columnNumber: 22
    }
  }, "Email:")), " ", agreement.borrowerEmail || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 526,
      columnNumber: 17
    }
  }, _strong4 || (_strong4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 526,
      columnNumber: 22
    }
  }, "Type:")), " ", agreement.loanType || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 527,
      columnNumber: 17
    }
  }, _strong5 || (_strong5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 527,
      columnNumber: 22
    }
  }, "Amount:")), " ", formatCurrency(agreement.loanAmount)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 528,
      columnNumber: 17
    }
  }, _strong6 || (_strong6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 528,
      columnNumber: 22
    }
  }, "Created:")), " ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 531,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 532,
      columnNumber: 15
    }
  }, "Overview")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 533,
      columnNumber: 15
    }
  }, [{
    label: 'Triggers',
    value: triggers.length,
    color: '#00a5fa'
  }, {
    label: 'Total Runs',
    value: triggers.reduce((s, t) => s + t.executions.length, 0),
    color: '#059669'
  }, {
    label: 'Failures',
    value: triggers.reduce((s, t) => s + t.executions.filter(e => e.status === 'failed').length, 0),
    color: '#dc2626'
  }].map(stat => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: stat.label,
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 539,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.85rem',
      color: '#4b5563'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 540,
      columnNumber: 21
    }
  }, stat.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '1.1rem',
      fontWeight: 700,
      color: stat.color
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 541,
      columnNumber: 21
    }
  }, stat.value))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: 'linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%)',
      borderRadius: 10,
      padding: '1.25rem',
      color: '#fff',
      cursor: 'pointer',
      textAlign: 'center'
    },
    onClick: () => history.push('/loanwell-ai'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 546,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-magic",
    style: {
      fontSize: '1.5rem',
      marginBottom: '0.5rem',
      display: 'block'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 547,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 548,
      columnNumber: 15
    }
  }, "Ask an Agent"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      opacity: 0.85
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 549,
      columnNumber: 15
    }
  }, "Get AI-powered insights about this agreement"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-9",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 554,
      columnNumber: 11
    }
  }, activeView === 'triggers' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 557,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: 0,
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 558,
      columnNumber: 19
    }
  }, "Triggers")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 560,
      columnNumber: 17
    }
  }, triggers.map(trigger => {
    var firedCount = trigger.executions.length;
    var appSteps = trigger.steps.filter(s => s.type === 'app');
    var condSteps = trigger.steps.filter(s => s.type === 'condition');
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: trigger.id,
      className: "col-md-6 mb-3",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 566,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__card",
      style: {
        height: '100%',
        display: 'flex',
        flexDirection: 'column'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 567,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'flex-start',
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 568,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 569,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(0,165,250,0.1)',
        color: '#00a5fa',
        fontSize: '0.9rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 570,
        columnNumber: 31
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(typeIcon(trigger.type)),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 571,
        columnNumber: 33
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 573,
        columnNumber: 31
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.92rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 574,
        columnNumber: 33
      }
    }, trigger.name, trigger.isDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      title: "Applied to all new agreements",
      style: {
        marginLeft: 6,
        padding: '0.1em 0.45em',
        borderRadius: 4,
        fontSize: '0.6rem',
        fontWeight: 600,
        textTransform: 'uppercase',
        background: '#ede9fe',
        color: '#7c3aed'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 576,
        columnNumber: 57
      }
    }, "Default")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 578,
        columnNumber: 33
      }
    }, typeLabel(trigger.type)))), firedCount > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        fontWeight: 600,
        color: '#059669'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 582,
        columnNumber: 31
      }
    }, "Fired ", firedCount, "x") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        color: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 584,
        columnNumber: 31
      }
    }, "Not fired")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        background: '#f9fafb',
        borderRadius: 6,
        padding: '0.5rem 0.75rem',
        marginBottom: '0.75rem',
        fontSize: '0.82rem',
        color: '#374151'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 588,
        columnNumber: 27
      }
    }, _strong7 || (_strong7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 589,
        columnNumber: 29
      }
    }, "When:")), " ", describeTrigger(trigger)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginBottom: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 592,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'space-between',
        alignItems: 'center',
        marginBottom: '0.4rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 593,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.68rem',
        textTransform: 'uppercase',
        letterSpacing: '0.04em',
        color: '#9ca3af',
        fontWeight: 600
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 594,
        columnNumber: 31
      }
    }, "Pipeline (", appSteps.length, " app", appSteps.length !== 1 ? 's' : '', condSteps.length > 0 ? ", ".concat(condSteps.length, " condition").concat(condSteps.length !== 1 ? 's' : '') : '', ")"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => setEditingTrigger(trigger),
      style: {
        background: 'none',
        border: 'none',
        fontSize: '0.75rem',
        color: '#00a5fa',
        cursor: 'pointer',
        fontWeight: 500,
        padding: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 597,
        columnNumber: 31
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-pencil",
      style: {
        marginRight: 3
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 598,
        columnNumber: 33
      }
    }), " Edit")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.3rem',
        flexWrap: 'wrap'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 601,
        columnNumber: 29
      }
    }, trigger.steps.map((step, idx) => {
      if (step.type === 'condition') {
        return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
          key: step.id,
          __source: {
            fileName: _jsxFileName,
            lineNumber: 605,
            columnNumber: 37
          }
        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
          style: {
            padding: '0.2rem 0.45rem',
            borderRadius: 4,
            background: '#fffbeb',
            border: '1px solid #fde68a',
            fontSize: '0.68rem',
            color: '#92400e',
            fontWeight: 500
          },
          __source: {
            fileName: _jsxFileName,
            lineNumber: 606,
            columnNumber: 39
          }
        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
          className: "fa fa-code-fork",
          style: {
            marginRight: 3
          },
          __source: {
            fileName: _jsxFileName,
            lineNumber: 607,
            columnNumber: 41
          }
        }), " if"), idx < trigger.steps.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
          className: "fa fa-long-arrow-right",
          style: {
            color: '#d1d5db',
            fontSize: '0.6rem'
          },
          __source: {
            fileName: _jsxFileName,
            lineNumber: 609,
            columnNumber: 74
          }
        }));
      }
      var app = getApp(step.appId);
      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
        key: step.id,
        __source: {
          fileName: _jsxFileName,
          lineNumber: 615,
          columnNumber: 35
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
        style: {
          display: 'inline-flex',
          alignItems: 'center',
          gap: '0.3rem',
          padding: '0.2rem 0.5rem',
          borderRadius: 6,
          background: '#f0f7ff',
          border: '1px solid #bfdbfe',
          fontSize: '0.7rem',
          color: '#001433',
          fontWeight: 500,
          whiteSpace: 'nowrap'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 616,
          columnNumber: 37
        }
      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
        className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
        style: {
          color: '#00a5fa',
          fontSize: '0.65rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 617,
          columnNumber: 39
        }
      }), app === null || app === void 0 ? void 0 : app.name), idx < trigger.steps.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
        className: "fa fa-long-arrow-right",
        style: {
          color: '#d1d5db',
          fontSize: '0.6rem'
        },
        __source: {
          fileName: _jsxFileName,
          lineNumber: 620,
          columnNumber: 72
        }
      }));
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: 'auto',
        borderTop: '1px solid #f3f4f6',
        paddingTop: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 627,
        columnNumber: 27
      }
    }, trigger.executions.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        textTransform: 'uppercase',
        letterSpacing: '0.04em',
        color: '#9ca3af',
        fontWeight: 600,
        marginBottom: '0.35rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 630,
        columnNumber: 33
      }
    }, "Recent Runs"), trigger.executions.slice(0, 2).map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      onClick: () => {
        setSelectedExec(exec);
        setSelectedTrigger(trigger);
      },
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.5rem',
        marginBottom: '0.25rem',
        cursor: 'pointer',
        borderRadius: 4,
        padding: '0.2rem 0.25rem'
      },
      onMouseEnter: e => e.currentTarget.style.background = '#f0f7ff',
      onMouseLeave: e => e.currentTarget.style.background = 'transparent',
      __source: {
        fileName: _jsxFileName,
        lineNumber: 632,
        columnNumber: 35
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 6,
        height: 6,
        borderRadius: '50%',
        background: exec.status === 'success' ? '#059669' : '#dc2626',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 637,
        columnNumber: 37
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.78rem',
        color: '#374151',
        whiteSpace: 'nowrap',
        overflow: 'hidden',
        textOverflow: 'ellipsis'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 638,
        columnNumber: 37
      }
    }, exec.summary), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-chevron-right",
      style: {
        fontSize: '0.6rem',
        color: '#00a5fa'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 639,
        columnNumber: 37
      }
    })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.8rem',
        color: '#d1d5db',
        textAlign: 'center',
        padding: '0.25rem 0'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 644,
        columnNumber: 31
      }
    }, "Waiting to fire..."))));
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-6 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 652,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      height: '100%',
      display: 'flex',
      flexDirection: 'column',
      alignItems: 'center',
      justifyContent: 'center',
      border: '2px dashed #d1d5db',
      background: '#fafbfc',
      cursor: 'pointer',
      minHeight: 200
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 653,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus-circle",
    style: {
      fontSize: '2rem',
      color: '#00a5fa',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 654,
      columnNumber: 23
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      color: '#001433',
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 655,
      columnNumber: 23
    }
  }, "Add Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#9ca3af',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 656,
      columnNumber: 23
    }
  }, "Set up a new automation for this agreement"))))), activeView === 'history' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: '0 0 1rem',
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 665,
      columnNumber: 17
    }
  }, "Trigger History"), allExecutions.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      padding: '2rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 667,
      columnNumber: 19
    }
  }, "No executions yet.") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 669,
      columnNumber: 19
    }
  }, allExecutions.map(exec => {
    var t = triggers.find(tr => tr.id === exec.triggerId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: exec.id,
      className: "standalone-account__card",
      style: {
        height: 'auto',
        cursor: 'pointer'
      },
      onClick: () => {
        setSelectedExec(exec);
        setSelectedTrigger(t);
      },
      onMouseEnter: e => e.currentTarget.style.boxShadow = '0 2px 8px rgba(0,165,250,0.15)',
      onMouseLeave: e => e.currentTarget.style.boxShadow = '',
      __source: {
        fileName: _jsxFileName,
        lineNumber: 673,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 678,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 8,
        height: 8,
        borderRadius: '50%',
        flexShrink: 0,
        background: exec.status === 'success' ? '#059669' : '#dc2626'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 679,
        columnNumber: 29
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 680,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.88rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 681,
        columnNumber: 31
      }
    }, exec.triggerName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 682,
        columnNumber: 31
      }
    }, exec.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        textAlign: 'right',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 684,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        fontWeight: 600,
        color: exec.status === 'success' ? '#059669' : '#dc2626'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 685,
        columnNumber: 31
      }
    }, exec.status === 'success' ? 'Success' : 'Failed'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 686,
        columnNumber: 31
      }
    }, formatDateTime(exec.timestamp))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-chevron-right",
      style: {
        color: '#00a5fa',
        fontSize: '0.7rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 688,
        columnNumber: 29
      }
    })));
  })))))), selectedExec && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      background: 'rgba(0,0,0,0.2)',
      zIndex: 1030
    },
    onClick: () => {
      setSelectedExec(null);
      setSelectedTrigger(null);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 703,
      columnNumber: 11
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ExecutionPanel, {
    execution: selectedExec,
    trigger: selectedTrigger,
    onClose: () => {
      setSelectedExec(null);
      setSelectedTrigger(null);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 704,
      columnNumber: 11
    }
  })));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetailF));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDetailG.js",
  _option,
  _option2,
  _option3,
  _option4,
  _option5,
  _option6,
  _option7,
  _option8,
  _option9,
  _option0,
  _option1,
  _option10,
  _option11,
  _option12,
  _option13,
  _option14,
  _i,
  _i2,
  _i3,
  _div,
  _i4,
  _i5,
  _i6,
  _i7,
  _i8,
  _i9,
  _i0,
  _div2,
  _strong,
  _strong2,
  _strong3,
  _strong4,
  _strong5,
  _strong6,
  _h,
  _i1;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }




/**
 * VARIATION G — E-style vertical list where clicking a trigger expands it into an inline editor
 *
 * Key approach:
 * - Compact vertical list of triggers (like E)
 * - Click a trigger → it expands into the full pipeline editor INLINE
 * - Drag-and-drop step reordering within the expanded view
 * - Conditional logic (if/then branching)
 * - App prerequisite validation
 * - SurveyJS "Ask Questions" step, OCR, Document Request
 * - No separate full-screen editor — editing happens in-place
 */

var AVAILABLE_APPS = [{
  id: 'app-send-email',
  name: 'Send Email',
  description: 'Send a templated email notification',
  icon: 'fa-envelope',
  prereqs: []
}, {
  id: 'app-send-sms',
  name: 'Send SMS',
  description: 'Send an SMS text message',
  icon: 'fa-comment',
  prereqs: []
}, {
  id: 'app-generate-doc',
  name: 'Generate Document',
  description: 'Auto-generate a PDF document',
  icon: 'fa-file-pdf-o',
  prereqs: []
}, {
  id: 'app-assign-task',
  name: 'Assign Task',
  description: 'Create and assign a task to a team member',
  icon: 'fa-tasks',
  prereqs: []
}, {
  id: 'app-webhook',
  name: 'Call Webhook',
  description: 'Send data to an external webhook URL',
  icon: 'fa-plug',
  prereqs: []
}, {
  id: 'app-update-status',
  name: 'Update Status',
  description: 'Automatically change agreement status',
  icon: 'fa-refresh',
  prereqs: []
}, {
  id: 'app-run-agent',
  name: 'Run AI Agent',
  description: 'Execute an AI agent to analyze or act on data',
  icon: 'fa-magic',
  prereqs: []
}, {
  id: 'app-pull-credit',
  name: 'Pull Credit',
  description: 'Request a credit report from bureau',
  icon: 'fa-credit-card',
  prereqs: ['app-run-agent']
}, {
  id: 'app-create-task',
  name: 'Create Task',
  description: 'Create a follow-up task for your team',
  icon: 'fa-check-square-o',
  prereqs: []
}, {
  id: 'app-ask-questions',
  name: 'Ask Questions',
  description: 'Collect form input via SurveyJS questionnaire',
  icon: 'fa-wpforms',
  prereqs: []
}, {
  id: 'app-ocr-document',
  name: 'OCR Document',
  description: 'Extract text and data from uploaded document',
  icon: 'fa-file-text-o',
  prereqs: []
}, {
  id: 'app-request-document',
  name: 'Request Document',
  description: 'Request a document upload from borrower',
  icon: 'fa-upload',
  prereqs: []
}];
var STATUSES = ['new', 'draft', 'in_review', 'approved', 'denied', 'withdrawn', 'completed'];
var FIELDS = ['loanAmount', 'businessName', 'borrowerEmail', 'loanType', 'guarantorName', 'status', 'dateCreated'];
var MOCK_TRIGGERS = [{
  id: 'trigger-1',
  name: 'New Application Pipeline',
  type: 'status_change',
  config: {
    fromStatus: '*',
    toStatus: 'new'
  },
  isDefault: false,
  steps: [{
    id: 'step-1a',
    type: 'app',
    appId: 'app-run-agent',
    config: {
      agent: 'risk-scorer',
      saveAs: 'riskScore'
    }
  }, {
    id: 'step-1b',
    type: 'condition',
    condition: {
      field: 'riskScore',
      operator: '>=',
      value: '60'
    },
    ifSteps: ['step-1c'],
    elseSteps: ['step-1e']
  }, {
    id: 'step-1c',
    type: 'app',
    appId: 'app-pull-credit',
    config: {
      bureau: 'experian'
    }
  }, {
    id: 'step-1d',
    type: 'app',
    appId: 'app-send-email',
    config: {
      to: 'team@company.com',
      template: 'new_application'
    }
  }, {
    id: 'step-1e',
    type: 'app',
    appId: 'app-create-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Manual review — low risk score'
    }
  }],
  executions: [{
    id: 'exec-1',
    timestamp: '2026-04-05T14:30:00Z',
    status: 'success',
    summary: 'Pipeline completed — 4/4 steps (condition: riskScore >= 60 → true)',
    stepResults: [{
      stepId: 'step-1a',
      status: 'success',
      summary: 'Risk score: 72 (Medium)',
      duration: '3.2s'
    }, {
      stepId: 'step-1b',
      status: 'success',
      summary: 'Condition passed: riskScore (72) >= 60',
      duration: '0.01s'
    }, {
      stepId: 'step-1c',
      status: 'success',
      summary: 'Credit pulled — Experian score 680',
      duration: '8.1s'
    }, {
      stepId: 'step-1d',
      status: 'success',
      summary: 'Email sent to team@company.com',
      duration: '1.1s'
    }]
  }]
}, {
  id: 'trigger-2',
  name: 'Denial Letter',
  type: 'status_change',
  config: {
    fromStatus: 'in_review',
    toStatus: 'denied'
  },
  isDefault: true,
  steps: [{
    id: 'step-2a',
    type: 'app',
    appId: 'app-generate-doc',
    config: {
      template: 'denial_letter',
      format: 'pdf'
    }
  }, {
    id: 'step-2b',
    type: 'app',
    appId: 'app-send-email',
    config: {
      to: '{{borrowerEmail}}',
      template: 'denial_notification'
    }
  }],
  executions: []
}, {
  id: 'trigger-3',
  name: 'Document Intake',
  type: 'document_uploaded',
  config: {
    documentType: 'bank_statement'
  },
  isDefault: false,
  steps: [{
    id: 'step-3a',
    type: 'app',
    appId: 'app-ocr-document',
    config: {
      extractFields: ['income', 'balances']
    }
  }, {
    id: 'step-3b',
    type: 'app',
    appId: 'app-run-agent',
    config: {
      agent: 'doc-verifier',
      saveAs: 'docValid'
    }
  }, {
    id: 'step-3c',
    type: 'condition',
    condition: {
      field: 'docValid',
      operator: '==',
      value: 'true'
    },
    ifSteps: ['step-3d'],
    elseSteps: ['step-3e']
  }, {
    id: 'step-3d',
    type: 'app',
    appId: 'app-update-status',
    config: {
      toStatus: 'docs_verified'
    }
  }, {
    id: 'step-3e',
    type: 'app',
    appId: 'app-request-document',
    config: {
      message: 'Document could not be verified. Please re-upload.'
    }
  }],
  executions: [{
    id: 'exec-3',
    timestamp: '2026-04-04T11:20:00Z',
    status: 'success',
    summary: 'Pipeline completed — document verified',
    stepResults: [{
      stepId: 'step-3a',
      status: 'success',
      summary: 'OCR extracted 12 fields from bank_statement.pdf',
      duration: '4.5s'
    }, {
      stepId: 'step-3b',
      status: 'success',
      summary: 'Document verified — all fields match',
      duration: '2.1s'
    }, {
      stepId: 'step-3c',
      status: 'success',
      summary: 'Condition passed: docValid == true',
      duration: '0.01s'
    }, {
      stepId: 'step-3d',
      status: 'success',
      summary: 'Status updated to docs_verified',
      duration: '0.3s'
    }]
  }]
}, {
  id: 'trigger-4',
  name: 'Onboarding Questionnaire',
  type: 'status_change',
  config: {
    fromStatus: 'new',
    toStatus: 'in_review'
  },
  isDefault: true,
  steps: [{
    id: 'step-4a',
    type: 'app',
    appId: 'app-ask-questions',
    config: {
      formId: 'onboarding-v2',
      fields: ['businessType', 'annualRevenue', 'yearsInBusiness', 'numberOfEmployees']
    }
  }, {
    id: 'step-4b',
    type: 'condition',
    condition: {
      field: 'annualRevenue',
      operator: '>=',
      value: '500000'
    },
    ifSteps: ['step-4c'],
    elseSteps: ['step-4d']
  }, {
    id: 'step-4c',
    type: 'app',
    appId: 'app-assign-task',
    config: {
      assignee: 'senior.officer@company.com',
      title: 'High-value application review'
    }
  }, {
    id: 'step-4d',
    type: 'app',
    appId: 'app-assign-task',
    config: {
      assignee: 'loan.officer@company.com',
      title: 'Standard application review'
    }
  }],
  executions: []
}];
var getStatusBadgeClass = status => {
  var s = (status || '').toLowerCase();
  if (['approved', 'completed', 'active', 'success'].includes(s)) return 'standalone-account__badge--active';
  if (['new', 'in_review', 'pending', 'draft'].includes(s)) return 'standalone-account__badge--pending';
  return 'standalone-account__badge--inactive';
};
var formatDate = d => {
  if (!d) return '-';
  try {
    return new Date(d).toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric',
      year: 'numeric'
    });
  } catch (_unused) {
    return d;
  }
};
var formatDateTime = d => {
  if (!d) return '-';
  try {
    var dt = new Date(d);
    return dt.toLocaleDateString('en-US', {
      month: 'short',
      day: 'numeric'
    }) + ' ' + dt.toLocaleTimeString('en-US', {
      hour: 'numeric',
      minute: '2-digit'
    });
  } catch (_unused2) {
    return d;
  }
};
var formatCurrency = a => {
  if (!a) return '-';
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(a);
};
var getApp = id => AVAILABLE_APPS.find(a => a.id === id);
var describeTrigger = t => {
  if (t.type === 'status_change') return "".concat(t.config.fromStatus === '*' ? 'Any' : t.config.fromStatus, " \u2192 ").concat(t.config.toStatus);
  if (t.type === 'field_change') return "When \"".concat(t.config.field, "\" changes");
  if (t.type === 'time_based') return "".concat(t.config.duration, " ").concat(t.config.unit, " after ").concat(t.config.from);
  if (t.type === 'document_uploaded') return "When \"".concat(t.config.documentType, "\" is uploaded");
  return '-';
};
var typeIcon = t => ({
  status_change: 'fa-exchange',
  field_change: 'fa-pencil',
  time_based: 'fa-clock-o',
  document_uploaded: 'fa-upload'
})[t] || 'fa-bolt';
var typeLabel = t => ({
  status_change: 'Status Change',
  field_change: 'Field Change',
  time_based: 'Time Based',
  document_uploaded: 'Document Uploaded'
})[t] || t;
var stepStatusColor = s => ({
  success: '#059669',
  failed: '#dc2626',
  skipped: '#9ca3af'
})[s] || '#9ca3af';

/* ─── Add Trigger Modal ─── */
var AddTriggerModal = _ref => {
  var {
    open,
    onClose
  } = _ref;
  var [step, setStep] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(1);
  var [triggerType, setTriggerType] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('');
  var [condition, setCondition] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({
    fromStatus: '',
    toStatus: '',
    field: '',
    duration: '',
    unit: 'days',
    from: '',
    documentType: ''
  });
  var [selectedApps, setSelectedApps] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])([]);
  var reset = () => {
    setStep(1);
    setTriggerType('');
    setCondition({
      fromStatus: '',
      toStatus: '',
      field: '',
      duration: '',
      unit: 'days',
      from: '',
      documentType: ''
    });
    setSelectedApps([]);
  };
  if (!open) return null;
  var triggerTypes = [{
    id: 'status_change',
    label: 'Status Change',
    icon: 'fa-exchange',
    desc: 'Fires when agreement status changes'
  }, {
    id: 'field_change',
    label: 'Field Change',
    icon: 'fa-pencil',
    desc: 'Fires when a specific field is updated'
  }, {
    id: 'time_based',
    label: 'Time Based',
    icon: 'fa-clock-o',
    desc: 'Fires after a set duration'
  }, {
    id: 'document_uploaded',
    label: 'Document Uploaded',
    icon: 'fa-upload',
    desc: 'Fires when a document is uploaded'
  }];
  var addApp = appId => {
    if (!selectedApps.includes(appId)) setSelectedApps([...selectedApps, appId]);
  };
  var removeApp = appId => setSelectedApps(selectedApps.filter(a => a !== appId));
  var moveApp = (idx, dir) => {
    var arr = [...selectedApps];
    var target = idx + dir;
    if (target < 0 || target >= arr.length) return;
    [arr[idx], arr[target]] = [arr[target], arr[idx]];
    setSelectedApps(arr);
  };
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      zIndex: 1050,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 154,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      inset: 0,
      background: 'rgba(0,20,51,0.4)'
    },
    onClick: () => {
      reset();
      onClose();
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 155,
      columnNumber: 7
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative',
      background: '#fff',
      borderRadius: 12,
      width: 560,
      maxHeight: '85vh',
      overflow: 'auto',
      boxShadow: '0 8px 30px rgba(0,0,0,0.18)',
      border: '2px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 156,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 157,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 158,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1.1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 159,
      columnNumber: 13
    }
  }, "Add Trigger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280',
      marginTop: 2
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 160,
      columnNumber: 13
    }
  }, "Step ", step, " of 3 \u2014 ", step === 1 ? 'Choose type' : step === 2 ? 'Set condition' : 'Build pipeline')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      reset();
      onClose();
    },
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af',
      padding: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 162,
      columnNumber: 11
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 165,
      columnNumber: 9
    }
  }, step === 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 167,
      columnNumber: 13
    }
  }, triggerTypes.map(tt => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: tt.id,
    onClick: () => setTriggerType(tt.id),
    style: {
      border: triggerType === tt.id ? '2px solid #00a5fa' : '2px dashed #d1d5db',
      borderRadius: 8,
      padding: '1rem 1.25rem',
      cursor: 'pointer',
      background: triggerType === tt.id ? 'rgba(0,165,250,0.04)' : '#fafbfc',
      display: 'flex',
      alignItems: 'center',
      gap: '1rem',
      transition: 'all 0.15s'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 169,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 40,
      height: 40,
      borderRadius: 8,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      background: triggerType === tt.id ? 'rgba(0,165,250,0.12)' : '#f3f4f6',
      color: triggerType === tt.id ? '#00a5fa' : '#6b7280',
      fontSize: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 173,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tt.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 174,
      columnNumber: 21
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 176,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.9rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 177,
      columnNumber: 21
    }
  }, tt.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 178,
      columnNumber: 21
    }
  }, tt.desc))))), step === 2 && triggerType === 'status_change' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 186,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 187,
      columnNumber: 15
    }
  }, "From Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.fromStatus,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      fromStatus: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 188,
      columnNumber: 15
    }
  }, _option || (_option = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 17
    }
  }, "Select...")), _option2 || (_option2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "*",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 189,
      columnNumber: 52
    }
  }, "Any status")), STATUSES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s,
    value: s,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 190,
      columnNumber: 38
    }
  }, s))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 192,
      columnNumber: 15
    }
  }, "To Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.toStatus,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      toStatus: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 193,
      columnNumber: 15
    }
  }, _option3 || (_option3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 194,
      columnNumber: 17
    }
  }, "Select...")), STATUSES.map(s => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: s,
    value: s,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 195,
      columnNumber: 38
    }
  }, s)))), step === 2 && triggerType === 'field_change' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 201,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 202,
      columnNumber: 15
    }
  }, "Field"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.field,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      field: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 203,
      columnNumber: 15
    }
  }, _option4 || (_option4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 204,
      columnNumber: 17
    }
  }, "Select a field...")), FIELDS.map(f => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    key: f,
    value: f,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 205,
      columnNumber: 36
    }
  }, f)))), step === 2 && triggerType === 'time_based' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 211,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 212,
      columnNumber: 15
    }
  }, "Duration"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 213,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", {
    type: "number",
    min: "1",
    placeholder: "7",
    value: condition.duration,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      duration: e.target.value
    })),
    style: {
      flex: 1,
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 214,
      columnNumber: 17
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.unit,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      unit: e.target.value
    })),
    style: {
      width: 120,
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 215,
      columnNumber: 17
    }
  }, _option5 || (_option5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "hours",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 216,
      columnNumber: 19
    }
  }, "Hours")), _option6 || (_option6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "days",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 216,
      columnNumber: 55
    }
  }, "Days")), _option7 || (_option7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "weeks",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 216,
      columnNumber: 89
    }
  }, "Weeks")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 219,
      columnNumber: 15
    }
  }, "After"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.from,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      from: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 220,
      columnNumber: 15
    }
  }, _option8 || (_option8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 17
    }
  }, "Select...")), _option9 || (_option9 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "dateCreated",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 52
    }
  }, "Date Created")), _option0 || (_option0 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "lastUpdated",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 101
    }
  }, "Last Updated")), _option1 || (_option1 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "lastStatusChange",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 221,
      columnNumber: 150
    }
  }, "Last Status Change")))), step === 2 && triggerType === 'document_uploaded' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 227,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 228,
      columnNumber: 15
    }
  }, "Document Type"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("select", {
    value: condition.documentType,
    onChange: e => setCondition(_objectSpread(_objectSpread({}, condition), {}, {
      documentType: e.target.value
    })),
    style: {
      width: '100%',
      padding: '0.6rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      fontSize: '0.85rem',
      color: '#374151'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 229,
      columnNumber: 15
    }
  }, _option10 || (_option10 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 17
    }
  }, "Select...")), _option11 || (_option11 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "bank_statement",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 52
    }
  }, "Bank Statement")), _option12 || (_option12 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "tax_return",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 106
    }
  }, "Tax Return")), _option13 || (_option13 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "id_document",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 152
    }
  }, "ID Document")), _option14 || (_option14 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("option", {
    value: "other",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 230,
      columnNumber: 200
    }
  }, "Other")))), step === 3 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 236,
      columnNumber: 13
    }
  }, selectedApps.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginBottom: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 238,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 239,
      columnNumber: 19
    }
  }, "Pipeline Steps"), selectedApps.map((appId, idx) => {
    var app = getApp(appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: "".concat(appId, "-").concat(idx),
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem',
        padding: '0.6rem 0.75rem',
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        borderRadius: 8,
        marginBottom: '0.5rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 243,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.75rem',
        fontWeight: 700,
        color: '#00a5fa',
        width: 20
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 244,
        columnNumber: 25
      }
    }, idx + 1, "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        color: '#00a5fa',
        fontSize: '0.85rem',
        width: 18
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 245,
        columnNumber: 25
      }
    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        flex: 1,
        fontSize: '0.85rem',
        fontWeight: 500,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 246,
        columnNumber: 25
      }
    }, app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => moveApp(idx, -1),
      disabled: idx === 0,
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: idx === 0 ? '#d1d5db' : '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 247,
        columnNumber: 25
      }
    }, _i || (_i = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-arrow-up",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 247,
        columnNumber: 235
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => moveApp(idx, 1),
      disabled: idx === selectedApps.length - 1,
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: idx === selectedApps.length - 1 ? '#d1d5db' : '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 248,
        columnNumber: 25
      }
    }, _i2 || (_i2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-arrow-down",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 248,
        columnNumber: 278
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: () => removeApp(appId),
      style: {
        background: 'none',
        border: 'none',
        cursor: 'pointer',
        color: '#00a5fa',
        fontSize: '0.8rem',
        padding: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 249,
        columnNumber: 25
      }
    }, _i3 || (_i3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-trash-o",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 249,
        columnNumber: 190
      }
    }))));
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 255,
      columnNumber: 15
    }
  }, "Available Apps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 256,
      columnNumber: 15
    }
  }, AVAILABLE_APPS.map(app => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: app.id,
    onClick: () => addApp(app.id),
    style: {
      border: '2px dashed #d1d5db',
      borderRadius: 8,
      padding: '0.75rem 1rem',
      cursor: 'pointer',
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem',
      background: '#fafbfc',
      transition: 'all 0.15s'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#00a5fa';
      e.currentTarget.style.background = 'rgba(0,165,250,0.03)';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
      e.currentTarget.style.background = '#fafbfc';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 258,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 32,
      height: 32,
      borderRadius: 6,
      background: '#f3f4f6',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      color: '#6b7280',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 262,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(app.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 262,
      columnNumber: 204
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 263,
      columnNumber: 21
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.85rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 264,
      columnNumber: 23
    }
  }, app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 265,
      columnNumber: 23
    }
  }, app.description)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus",
    style: {
      color: '#00a5fa',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 267,
      columnNumber: 21
    }
  })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1rem 1.5rem',
      borderTop: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 275,
      columnNumber: 9
    }
  }, step > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setStep(step - 1),
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      background: '#fff',
      color: '#374151',
      fontSize: '0.85rem',
      cursor: 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 277,
      columnNumber: 13
    }
  }, "Back") : _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 278,
      columnNumber: 15
    }
  })), step < 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setStep(step + 1),
    disabled: step === 1 && !triggerType,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: step === 1 && !triggerType ? '#d1d5db' : '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: step === 1 && !triggerType ? 'default' : 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 280,
      columnNumber: 13
    }
  }, "Next") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      reset();
      onClose();
    },
    disabled: selectedApps.length === 0,
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: selectedApps.length === 0 ? '#d1d5db' : '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      cursor: selectedApps.length === 0 ? 'default' : 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 282,
      columnNumber: 13
    }
  }, "Create Trigger"))));
};

/* ─── Inline Trigger Editor Row ─── */
var TriggerRow = _ref2 => {
  var {
    trigger
  } = _ref2;
  var [mode, setMode] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('collapsed'); // collapsed | view | edit
  var [steps, setSteps] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(trigger.steps || []);
  var [dragIdx, setDragIdx] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [showAppPicker, setShowAppPicker] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [insertAt, setInsertAt] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [selectedExecId, setSelectedExecId] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var firedCount = trigger.executions.length;
  var handleDragStart = idx => setDragIdx(idx);
  var handleDragOver = e => {
    e.preventDefault();
  };
  var handleDrop = idx => {
    if (dragIdx === null || dragIdx === idx) {
      setDragIdx(null);
      return;
    }
    var arr = [...steps];
    var [moved] = arr.splice(dragIdx, 1);
    arr.splice(idx, 0, moved);
    setSteps(arr);
    setDragIdx(null);
  };
  var removeStep = idx => setSteps(steps.filter((_, i) => i !== idx));
  var addStep = appId => {
    var newStep = {
      id: "step-new-".concat(Date.now()),
      type: 'app',
      appId,
      config: {}
    };
    if (insertAt !== null) {
      var arr = [...steps];
      arr.splice(insertAt, 0, newStep);
      setSteps(arr);
    } else {
      setSteps([...steps, newStep]);
    }
    setShowAppPicker(false);
    setInsertAt(null);
  };
  var addCondition = () => {
    var newStep = {
      id: "step-cond-".concat(Date.now()),
      type: 'condition',
      condition: {
        field: '',
        operator: '>=',
        value: ''
      },
      ifSteps: [],
      elseSteps: []
    };
    if (insertAt !== null) {
      var arr = [...steps];
      arr.splice(insertAt, 0, newStep);
      setSteps(arr);
    } else {
      setSteps([...steps, newStep]);
    }
    setInsertAt(null);
  };
  var checkPrereqs = appId => {
    var app = getApp(appId);
    if (!app || !app.prereqs || app.prereqs.length === 0) return {
      valid: true,
      missing: []
    };
    var existingAppIds = steps.filter(s => s.type === 'app').map(s => s.appId);
    var missing = app.prereqs.filter(p => !existingAppIds.includes(p));
    return {
      valid: missing.length === 0,
      missing
    };
  };
  var handleRowClick = () => {
    if (mode === 'collapsed') setMode('view');else if (mode === 'view') setMode('collapsed');
  };
  var selectedExec = selectedExecId ? trigger.executions.find(e => e.id === selectedExecId) : null;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 350,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    onClick: handleRowClick,
    style: {
      height: 'auto',
      cursor: 'pointer',
      transition: 'all 0.15s',
      borderLeft: mode !== 'collapsed' ? '3px solid #00a5fa' : '3px solid transparent',
      borderRadius: mode === 'edit' ? '10px 10px 0 0' : undefined
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 352,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 361,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 40,
      height: 40,
      borderRadius: 10,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      background: 'rgba(0,165,250,0.1)',
      color: '#00a5fa',
      fontSize: '1rem',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 362,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(typeIcon(trigger.type)),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 366,
      columnNumber: 13
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1,
      minWidth: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 369,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.5rem',
      flexWrap: 'wrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 370,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontWeight: 600,
      fontSize: '0.92rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 371,
      columnNumber: 15
    }
  }, trigger.name), trigger.isDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      padding: '0.1em 0.45em',
      borderRadius: 4,
      fontSize: '0.6rem',
      fontWeight: 600,
      textTransform: 'uppercase',
      background: '#ede9fe',
      color: '#7c3aed'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 373,
      columnNumber: 17
    }
  }, "Default")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 376,
      columnNumber: 13
    }
  }, typeLabel(trigger.type), ": ", describeTrigger(trigger))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.25rem',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 380,
      columnNumber: 11
    }
  }, trigger.steps.filter(s => s.type === 'app').slice(0, 3).map(s => {
    var app = getApp(s.appId);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: s.id,
      title: app === null || app === void 0 ? void 0 : app.name,
      style: {
        width: 28,
        height: 28,
        borderRadius: 6,
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '0.7rem',
        color: '#00a5fa'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 384,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 388,
        columnNumber: 19
      }
    }));
  }), trigger.steps.filter(s => s.type === 'condition').length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    title: "Has conditions",
    style: {
      width: 28,
      height: 28,
      borderRadius: 6,
      background: '#fffbeb',
      border: '1px solid #fde68a',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      fontSize: '0.7rem',
      color: '#f59e0b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 393,
      columnNumber: 15
    }
  }, _i4 || (_i4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-code-fork",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 397,
      columnNumber: 17
    }
  }))), trigger.steps.filter(s => s.type === 'app').length > 3 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.72rem',
      color: '#6b7280',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 401,
      columnNumber: 15
    }
  }, "+", trigger.steps.filter(s => s.type === 'app').length - 3)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'right',
      flexShrink: 0,
      minWidth: 60
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 405,
      columnNumber: 11
    }
  }, firedCount > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.75rem',
      fontWeight: 600,
      color: '#059669'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 407,
      columnNumber: 15
    }
  }, "Fired ", firedCount, "x") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.75rem',
      color: '#d1d5db'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 409,
      columnNumber: 15
    }
  }, "Not fired")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-chevron-".concat(mode !== 'collapsed' ? 'up' : 'down'),
    style: {
      color: '#00a5fa',
      fontSize: '0.75rem',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 413,
      columnNumber: 11
    }
  }))), mode === 'view' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#f9fafb',
      borderRadius: '0 0 10px 10px',
      padding: '1.25rem',
      marginTop: -4
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 419,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center',
      marginBottom: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 421,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 422,
      columnNumber: 13
    }
  }, "Pipeline \u2014 ", steps.length, " Steps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: e => {
      e.stopPropagation();
      setMode('edit');
    },
    style: {
      background: '#00a5fa',
      border: 'none',
      borderRadius: 6,
      padding: '0.35rem 1rem',
      fontSize: '0.78rem',
      color: '#fff',
      fontWeight: 600,
      cursor: 'pointer',
      display: 'flex',
      alignItems: 'center',
      gap: '0.3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 425,
      columnNumber: 13
    }
  }, _i5 || (_i5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-pencil",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 429,
      columnNumber: 15
    }
  })), " Edit Pipeline")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'stretch',
      gap: 0,
      marginBottom: '1.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 434,
      columnNumber: 11
    }
  }, steps.map((step, idx) => {
    var _step$condition, _step$condition2, _step$condition3;
    var app = step.type === 'app' ? getApp(step.appId) : null;
    var isCondition = step.type === 'condition';
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: step.id,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 439,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1,
        background: '#fff',
        border: isCondition ? '1px solid #fde68a' : '1px solid #e5e7eb',
        borderRadius: 8,
        padding: '0.75rem',
        textAlign: 'center',
        minWidth: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 440,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: isCondition ? 6 : 8,
        margin: '0 auto 0.4rem',
        background: isCondition ? 'rgba(245,158,11,0.1)' : 'rgba(0,165,250,0.1)',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        color: isCondition ? '#f59e0b' : '#00a5fa',
        fontSize: '0.9rem',
        transform: isCondition ? 'rotate(45deg)' : 'none'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 444,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(isCondition ? 'fa-code-fork' : (app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        transform: isCondition ? 'rotate(-45deg)' : 'none'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 451,
        columnNumber: 23
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.78rem',
        fontWeight: 600,
        color: '#001433',
        marginBottom: '0.15rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 453,
        columnNumber: 21
      }
    }, isCondition ? 'Condition' : app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 456,
        columnNumber: 21
      }
    }, isCondition ? "".concat((_step$condition = step.condition) === null || _step$condition === void 0 ? void 0 : _step$condition.field, " ").concat((_step$condition2 = step.condition) === null || _step$condition2 === void 0 ? void 0 : _step$condition2.operator, " ").concat((_step$condition3 = step.condition) === null || _step$condition3 === void 0 ? void 0 : _step$condition3.value) : "Step ".concat(idx + 1))), idx < steps.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        padding: '0 0.35rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 461,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-long-arrow-right",
      style: {
        color: '#d1d5db',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 462,
        columnNumber: 23
      }
    })));
  })), trigger.executions.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 472,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      fontWeight: 600,
      color: '#6b7280',
      textTransform: 'uppercase',
      letterSpacing: '0.04em',
      marginBottom: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 473,
      columnNumber: 15
    }
  }, "Execution History"), trigger.executions.map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: exec.id,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 475,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    onClick: e => {
      e.stopPropagation();
      setSelectedExecId(selectedExecId === exec.id ? null : exec.id);
    },
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem',
      padding: '0.6rem 0.75rem',
      background: selectedExecId === exec.id ? '#f0f7ff' : '#fff',
      border: '1px solid #e5e7eb',
      borderRadius: selectedExecId === exec.id ? '8px 8px 0 0' : 8,
      cursor: 'pointer',
      marginBottom: selectedExecId === exec.id ? 0 : '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 476,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 8,
      height: 8,
      borderRadius: '50%',
      background: exec.status === 'success' ? '#059669' : '#dc2626',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 484,
      columnNumber: 21
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      flex: 1,
      fontSize: '0.82rem',
      fontWeight: 500,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 485,
      columnNumber: 21
    }
  }, exec.summary), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 486,
      columnNumber: 21
    }
  }, formatDateTime(exec.timestamp)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-chevron-".concat(selectedExecId === exec.id ? 'up' : 'down'),
    style: {
      color: '#00a5fa',
      fontSize: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 487,
      columnNumber: 21
    }
  })), selectedExecId === exec.id && exec.stepResults && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#fff',
      border: '1px solid #e5e7eb',
      borderTop: 'none',
      borderRadius: '0 0 8px 8px',
      padding: '0.75rem',
      marginBottom: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 490,
      columnNumber: 21
    }
  }, exec.stepResults.map((sr, srIdx) => {
    var stepDef = trigger.steps.find(s => s.id === sr.stepId);
    var app = (stepDef === null || stepDef === void 0 ? void 0 : stepDef.type) === 'app' ? getApp(stepDef.appId) : null;
    var isCondition = (stepDef === null || stepDef === void 0 ? void 0 : stepDef.type) === 'condition';
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: sr.stepId,
      style: {
        display: 'flex',
        alignItems: 'flex-start',
        gap: '0.75rem',
        padding: '0.4rem 0',
        borderBottom: srIdx < exec.stepResults.length - 1 ? '1px solid #f3f4f6' : 'none'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 496,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 24,
        height: 24,
        borderRadius: isCondition ? 4 : '50%',
        flexShrink: 0,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: sr.status === 'success' ? '#ecfdf5' : sr.status === 'failed' ? '#fef2f2' : '#f9fafb',
        marginTop: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 497,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(sr.status === 'success' ? 'fa-check' : sr.status === 'failed' ? 'fa-times' : 'fa-minus'),
      style: {
        fontSize: '0.65rem',
        color: stepStatusColor(sr.status)
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 502,
        columnNumber: 31
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 504,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.8rem',
        fontWeight: 600,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 505,
        columnNumber: 31
      }
    }, srIdx + 1, ". ", isCondition ? 'Condition' : app === null || app === void 0 ? void 0 : app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.75rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 506,
        columnNumber: 31
      }
    }, sr.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.7rem',
        color: '#9ca3af',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 508,
        columnNumber: 29
      }
    }, sr.duration));
  }))))), trigger.executions.length === 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      padding: '1rem',
      color: '#d1d5db',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 519,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-clock-o",
    style: {
      marginRight: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 520,
      columnNumber: 15
    }
  }), "This trigger hasn't fired yet")), mode === 'edit' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#f0f4f8',
      borderRadius: '0 0 10px 10px',
      padding: '1.25rem',
      marginTop: -4,
      border: '2px solid #00a5fa',
      borderTop: 'none'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 528,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center',
      marginBottom: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 529,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      fontWeight: 600,
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 530,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-pencil",
    style: {
      color: '#00a5fa',
      marginRight: 6
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 531,
      columnNumber: 15
    }
  }), "Editing Pipeline \u2014 ", steps.length, " steps"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 534,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: e => {
      e.stopPropagation();
      setSteps(trigger.steps);
      setMode('view');
    },
    style: {
      padding: '0.35rem 0.75rem',
      borderRadius: 6,
      border: '1px solid #d1d5db',
      background: '#fff',
      color: '#374151',
      fontSize: '0.78rem',
      cursor: 'pointer'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 535,
      columnNumber: 15
    }
  }, "Cancel"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: e => {
      e.stopPropagation();
      setMode('view');
    },
    style: {
      padding: '0.35rem 0.75rem',
      borderRadius: 6,
      border: 'none',
      background: '#00a5fa',
      color: '#fff',
      fontSize: '0.78rem',
      cursor: 'pointer',
      fontWeight: 600
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 536,
      columnNumber: 15
    }
  }, "Save"))), steps.map((step, idx) => {
    var _step$config, _step$condition4, _step$condition5, _step$condition6;
    var app = step.type === 'app' ? getApp(step.appId) : null;
    var prereqCheck = step.type === 'app' ? checkPrereqs(step.appId) : {
      valid: true,
      missing: []
    };
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: step.id,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 546,
        columnNumber: 15
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      draggable: true,
      onDragStart: () => handleDragStart(idx),
      onDragOver: handleDragOver,
      onDrop: () => handleDrop(idx),
      style: {
        background: '#fff',
        borderRadius: 10,
        padding: '0.85rem 1rem',
        marginBottom: 0,
        border: dragIdx === idx ? '2px solid #00a5fa' : prereqCheck.valid ? '1px solid #e5e7eb' : '2px solid #f59e0b',
        boxShadow: dragIdx === idx ? '0 4px 12px rgba(0,165,250,0.2)' : '0 1px 3px rgba(0,0,0,0.06)',
        cursor: 'grab',
        position: 'relative'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 547,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 559,
        columnNumber: 19
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        color: '#d1d5db',
        fontSize: '0.9rem',
        cursor: 'grab',
        padding: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 560,
        columnNumber: 21
      }
    }, _i6 || (_i6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-bars",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 561,
        columnNumber: 23
      }
    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        fontSize: '0.72rem',
        fontWeight: 700,
        color: '#00a5fa',
        width: 24
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 563,
        columnNumber: 21
      }
    }, idx + 1), step.type === 'app' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(0,165,250,0.08)',
        color: '#00a5fa',
        fontSize: '0.95rem',
        flexShrink: 0
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 567,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat((app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 571,
        columnNumber: 27
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 573,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.85rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 574,
        columnNumber: 27
      }
    }, (app === null || app === void 0 ? void 0 : app.name) || step.appId), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 575,
        columnNumber: 27
      }
    }, app === null || app === void 0 ? void 0 : app.description), step.appId === 'app-ask-questions' && ((_step$config = step.config) === null || _step$config === void 0 ? void 0 : _step$config.fields) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: '0.35rem',
        display: 'flex',
        gap: '0.3rem',
        flexWrap: 'wrap'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 577,
        columnNumber: 29
      }
    }, step.config.fields.map(f => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      key: f,
      style: {
        padding: '0.1rem 0.4rem',
        borderRadius: 4,
        background: '#f0f7ff',
        border: '1px solid #bfdbfe',
        fontSize: '0.65rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 579,
        columnNumber: 33
      }
    }, f))))), step.type === 'condition' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        background: 'rgba(245,158,11,0.1)',
        color: '#f59e0b',
        fontSize: '0.95rem',
        flexShrink: 0,
        transform: 'rotate(45deg)'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 589,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-code-fork",
      style: {
        transform: 'rotate(-45deg)'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 594,
        columnNumber: 27
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 596,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontWeight: 600,
        fontSize: '0.85rem',
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 597,
        columnNumber: 27
      }
    }, "Conditional Branch"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#6b7280'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 598,
        columnNumber: 27
      }
    }, "If ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 599,
        columnNumber: 32
      }
    }, ((_step$condition4 = step.condition) === null || _step$condition4 === void 0 ? void 0 : _step$condition4.field) || '...'), " ", ((_step$condition5 = step.condition) === null || _step$condition5 === void 0 ? void 0 : _step$condition5.operator) || '...', " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 599,
        columnNumber: 118
      }
    }, ((_step$condition6 = step.condition) === null || _step$condition6 === void 0 ? void 0 : _step$condition6.value) || '...')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        gap: '0.75rem',
        marginTop: '0.35rem',
        fontSize: '0.68rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 601,
        columnNumber: 27
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        color: '#059669'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 602,
        columnNumber: 29
      }
    }, _i7 || (_i7 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-check",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 602,
        columnNumber: 64
      }
    })), " Then \u2192 continue"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
      style: {
        color: '#dc2626'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 603,
        columnNumber: 29
      }
    }, _i8 || (_i8 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-times",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 603,
        columnNumber: 64
      }
    })), " Else \u2192 skip to fallback")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: e => {
        e.stopPropagation();
        removeStep(idx);
      },
      style: {
        background: 'none',
        border: 'none',
        color: '#00a5fa',
        cursor: 'pointer',
        padding: '0.25rem',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 609,
        columnNumber: 21
      }
    }, _i9 || (_i9 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-trash-o",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 610,
        columnNumber: 23
      }
    })))), !prereqCheck.valid && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        marginTop: '0.6rem',
        padding: '0.4rem 0.65rem',
        borderRadius: 6,
        background: '#fffbeb',
        border: '1px solid #fde68a',
        fontSize: '0.72rem',
        color: '#92400e'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 615,
        columnNumber: 21
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-exclamation-triangle",
      style: {
        marginRight: 5
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 619,
        columnNumber: 23
      }
    }), "Requires: ", prereqCheck.missing.map(p => {
      var _getApp;
      return (_getApp = getApp(p)) === null || _getApp === void 0 ? void 0 : _getApp.name;
    }).join(', '), " \u2014 add ", prereqCheck.missing.length === 1 ? 'it' : 'them', " as a prior step")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        padding: '0.25rem 0'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 626,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 2,
        height: 12,
        background: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 627,
        columnNumber: 19
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        justifyContent: 'center',
        marginBottom: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 629,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
      onClick: e => {
        e.stopPropagation();
        setInsertAt(idx + 1);
        setShowAppPicker(true);
      },
      style: {
        background: 'none',
        border: '1px dashed #d1d5db',
        borderRadius: 20,
        padding: '0.15rem 0.65rem',
        fontSize: '0.68rem',
        color: '#9ca3af',
        cursor: 'pointer',
        display: 'flex',
        alignItems: 'center',
        gap: '0.25rem'
      },
      onMouseEnter: e => {
        e.currentTarget.style.borderColor = '#00a5fa';
        e.currentTarget.style.color = '#00a5fa';
      },
      onMouseLeave: e => {
        e.currentTarget.style.borderColor = '#d1d5db';
        e.currentTarget.style.color = '#9ca3af';
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 630,
        columnNumber: 19
      }
    }, _i0 || (_i0 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-plus",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 640,
        columnNumber: 21
      }
    })), " Insert step")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        paddingBottom: '0.25rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 643,
        columnNumber: 17
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 2,
        height: 12,
        background: '#d1d5db'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 644,
        columnNumber: 19
      }
    })));
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      gap: '0.5rem',
      justifyContent: 'center',
      marginTop: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 651,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: e => {
      e.stopPropagation();
      setInsertAt(null);
      setShowAppPicker(true);
    },
    style: {
      padding: '0.6rem 1.25rem',
      borderRadius: 8,
      border: '2px dashed #d1d5db',
      background: '#fff',
      cursor: 'pointer',
      fontSize: '0.82rem',
      color: '#001433',
      fontWeight: 500,
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#00a5fa';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 652,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus-circle",
    style: {
      color: '#00a5fa'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 662,
      columnNumber: 15
    }
  }), " Add App Step"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: e => {
      e.stopPropagation();
      setInsertAt(null);
      addCondition();
    },
    style: {
      padding: '0.6rem 1.25rem',
      borderRadius: 8,
      border: '2px dashed #d1d5db',
      background: '#fff',
      cursor: 'pointer',
      fontSize: '0.82rem',
      color: '#001433',
      fontWeight: 500,
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    onMouseEnter: e => {
      e.currentTarget.style.borderColor = '#f59e0b';
    },
    onMouseLeave: e => {
      e.currentTarget.style.borderColor = '#d1d5db';
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 664,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-code-fork",
    style: {
      color: '#f59e0b'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 674,
      columnNumber: 15
    }
  }), " Add Condition")), showAppPicker && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'fixed',
      inset: 0,
      zIndex: 1060,
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 680,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'absolute',
      inset: 0,
      background: 'rgba(0,20,51,0.4)'
    },
    onClick: () => {
      setShowAppPicker(false);
      setInsertAt(null);
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 681,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      position: 'relative',
      background: '#fff',
      borderRadius: 12,
      width: 520,
      maxHeight: '80vh',
      overflow: 'auto',
      boxShadow: '0 8px 30px rgba(0,0,0,0.18)',
      border: '2px solid #e5e7eb'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 682,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1.25rem 1.5rem',
      borderBottom: '1px solid #e5e7eb',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 683,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", {
    style: {
      margin: 0,
      fontSize: '1.1rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 684,
      columnNumber: 19
    }
  }, "Choose an App"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => {
      setShowAppPicker(false);
      setInsertAt(null);
    },
    style: {
      background: 'none',
      border: 'none',
      fontSize: '1.2rem',
      cursor: 'pointer',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 685,
      columnNumber: 19
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      padding: '1rem 1.5rem',
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 687,
      columnNumber: 17
    }
  }, AVAILABLE_APPS.map(app => {
    var prereqCheck = checkPrereqs(app.id);
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      key: app.id,
      onClick: () => addStep(app.id),
      style: {
        border: '2px dashed #d1d5db',
        borderRadius: 8,
        padding: '0.75rem 1rem',
        cursor: 'pointer',
        display: 'flex',
        alignItems: 'center',
        gap: '0.75rem',
        background: '#fafbfc',
        transition: 'all 0.15s',
        opacity: prereqCheck.valid ? 1 : 0.6
      },
      onMouseEnter: e => {
        e.currentTarget.style.borderColor = '#00a5fa';
        e.currentTarget.style.background = 'rgba(0,165,250,0.03)';
      },
      onMouseLeave: e => {
        e.currentTarget.style.borderColor = '#d1d5db';
        e.currentTarget.style.background = '#fafbfc';
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 691,
        columnNumber: 23
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        width: 36,
        height: 36,
        borderRadius: 8,
        background: '#f3f4f6',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        color: '#6b7280',
        fontSize: '0.9rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 699,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(app.icon),
      __source: {
        fileName: _jsxFileName,
        lineNumber: 700,
        columnNumber: 27
      }
    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        flex: 1
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 702,
        columnNumber: 25
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.85rem',
        fontWeight: 600,
        color: '#001433'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 703,
        columnNumber: 27
      }
    }, app.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.72rem',
        color: '#9ca3af'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 704,
        columnNumber: 27
      }
    }, app.description), !prereqCheck.valid && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        fontSize: '0.68rem',
        color: '#f59e0b',
        marginTop: 2
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 706,
        columnNumber: 29
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-exclamation-triangle",
      style: {
        marginRight: 4
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 707,
        columnNumber: 31
      }
    }), "Requires: ", prereqCheck.missing.map(p => {
      var _getApp2;
      return (_getApp2 = getApp(p)) === null || _getApp2 === void 0 ? void 0 : _getApp2.name;
    }).join(', '))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-plus",
      style: {
        color: '#00a5fa',
        fontSize: '0.85rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 712,
        columnNumber: 25
      }
    }));
  }))))));
};

/* ─── Main Component ─── */
var StandaloneAgreementDetailG = _ref3 => {
  var {
    match,
    history
  } = _ref3;
  var {
    id: agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  var [triggers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(MOCK_TRIGGERS);
  var [showAddModal, setShowAddModal] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(false);
  var [activeView, setActiveView] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('triggers');
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    _asyncToGenerator(function* () {
      setLoading(true);
      try {
        var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, "/agreement/".concat(agreementId), 'GET', {}, {});
        setAgreement(res.data);
      } catch (_unused3) {
        setAgreement({
          id: agreementId,
          businessName: 'Acme Coffee Roasters',
          guarantorName: 'John Smith',
          borrowerEmail: 'john@acmecoffee.com',
          loanType: 'SBA 7(a)',
          loanAmount: 250000,
          status: 'draft',
          dateCreated: new Date().toISOString(),
          businessOwnerName: 'John Smith'
        });
      }
      setLoading(false);
    })();
  }, [agreementId]);
  var allExecutions = Object(react__WEBPACK_IMPORTED_MODULE_0__["useMemo"])(() => {
    var execs = [];
    triggers.forEach(t => {
      t.executions.forEach(e => execs.push(_objectSpread(_objectSpread({}, e), {}, {
        triggerName: t.name,
        triggerId: t.id,
        steps: t.steps
      })));
    });
    return execs.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
  }, [triggers]);
  if (loading) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem',
      textAlign: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 761,
      columnNumber: 23
    }
  }, "Loading...");
  if (!agreement) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    style: {
      padding: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 762,
      columnNumber: 26
    }
  }, _div2 || (_div2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "alert alert-danger",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 762,
      columnNumber: 90
    }
  }, "Agreement not found.")));
  var status = agreement.status || 'draft';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-detail-g",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 767,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 769,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 770,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title",
    style: {
      textAlign: 'left',
      color: '#fff',
      marginBottom: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 771,
      columnNumber: 11
    }
  }, agreement.businessName || 'Agreement'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      color: 'rgba(255,255,255,0.7)',
      fontSize: '0.85rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 774,
      columnNumber: 11
    }
  }, formatCurrency(agreement.loanAmount), " \xB7 ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: '#fff',
      borderBottom: '1px solid #e5e7eb',
      padding: '0 1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 781,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container",
    style: {
      display: 'flex',
      gap: '1.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 782,
      columnNumber: 9
    }
  }, [{
    key: 'triggers',
    label: 'Triggers',
    icon: 'fa-bolt'
  }, {
    key: 'history',
    label: 'History',
    icon: 'fa-history'
  }].map(tab => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    key: tab.key,
    onClick: () => setActiveView(tab.key),
    style: {
      background: 'none',
      border: 'none',
      borderBottom: activeView === tab.key ? '2px solid #00a5fa' : '2px solid transparent',
      padding: '0.75rem 0.25rem',
      cursor: 'pointer',
      fontSize: '0.85rem',
      fontWeight: 500,
      color: activeView === tab.key ? '#00a5fa' : '#6b7280',
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 784,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa ".concat(tab.icon),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 789,
      columnNumber: 15
    }
  }), " ", tab.label)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 795,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 796,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-3 mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 798,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 799,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'center',
      paddingBottom: '0.75rem',
      borderBottom: '1px solid #eee',
      marginBottom: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 800,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.68rem',
      textTransform: 'uppercase',
      letterSpacing: '0.06em',
      color: '#6b7280',
      fontWeight: 600,
      marginBottom: '0.35rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 801,
      columnNumber: 17
    }
  }, "Status"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    className: "standalone-account__badge ".concat(getStatusBadgeClass(status)),
    style: {
      fontSize: '1.1rem',
      padding: '0.35em 1.25em'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 802,
      columnNumber: 17
    }
  }, status)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.8rem',
      color: '#6b7280',
      lineHeight: 1.8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 804,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 805,
      columnNumber: 17
    }
  }, _strong || (_strong = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 805,
      columnNumber: 22
    }
  }, "Business:")), " ", agreement.businessName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 806,
      columnNumber: 17
    }
  }, _strong2 || (_strong2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 806,
      columnNumber: 22
    }
  }, "Owner:")), " ", agreement.businessOwnerName || agreement.guarantorName || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 807,
      columnNumber: 17
    }
  }, _strong3 || (_strong3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 807,
      columnNumber: 22
    }
  }, "Email:")), " ", agreement.borrowerEmail || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 808,
      columnNumber: 17
    }
  }, _strong4 || (_strong4 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 808,
      columnNumber: 22
    }
  }, "Type:")), " ", agreement.loanType || '-'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 809,
      columnNumber: 17
    }
  }, _strong5 || (_strong5 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 809,
      columnNumber: 22
    }
  }, "Amount:")), " ", formatCurrency(agreement.loanAmount)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 810,
      columnNumber: 17
    }
  }, _strong6 || (_strong6 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", {
    __source: {
      fileName: _jsxFileName,
      lineNumber: 810,
      columnNumber: 22
    }
  }, "Created:")), " ", formatDate(agreement.dateCreated)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card mb-3",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 814,
      columnNumber: 13
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    className: "standalone-account__card-title",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 815,
      columnNumber: 15
    }
  }, "Overview")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.6rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 816,
      columnNumber: 15
    }
  }, [{
    label: 'Triggers',
    value: triggers.length,
    color: '#00a5fa'
  }, {
    label: 'Total Runs',
    value: triggers.reduce((s, t) => s + t.executions.length, 0),
    color: '#059669'
  }, {
    label: 'Failures',
    value: triggers.reduce((s, t) => s + t.executions.filter(e => e.status === 'failed').length, 0),
    color: '#dc2626'
  }].map(stat => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: stat.label,
    style: {
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 822,
      columnNumber: 19
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '0.85rem',
      color: '#4b5563'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 823,
      columnNumber: 21
    }
  }, stat.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
    style: {
      fontSize: '1.1rem',
      fontWeight: 700,
      color: stat.color
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 824,
      columnNumber: 21
    }
  }, stat.value))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      background: 'linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%)',
      borderRadius: 10,
      padding: '1.25rem',
      color: '#fff',
      cursor: 'pointer',
      textAlign: 'center'
    },
    onClick: () => history.push('/loanwell-ai'),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 830,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-magic",
    style: {
      fontSize: '1.5rem',
      marginBottom: '0.5rem',
      display: 'block'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 831,
      columnNumber: 15
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      marginBottom: '0.25rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 832,
      columnNumber: 15
    }
  }, "Ask an Agent"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      opacity: 0.85
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 833,
      columnNumber: 15
    }
  }, "Get AI-powered insights about this agreement"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-md-9",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 838,
      columnNumber: 11
    }
  }, activeView === 'triggers' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 841,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: 0,
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 842,
      columnNumber: 19
    }
  }, "Triggers"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {
    onClick: () => setShowAddModal(true),
    style: {
      padding: '0.5rem 1.25rem',
      borderRadius: 6,
      border: 'none',
      background: '#00a5fa',
      color: '#fff',
      fontSize: '0.85rem',
      fontWeight: 500,
      cursor: 'pointer',
      display: 'flex',
      alignItems: 'center',
      gap: '0.4rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 843,
      columnNumber: 19
    }
  }, _i1 || (_i1 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
    className: "fa fa-plus",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 844,
      columnNumber: 21
    }
  })), " Add Trigger")), triggers.map(trigger => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TriggerRow, {
    key: trigger.id,
    trigger: trigger,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 849,
      columnNumber: 19
    }
  }))), activeView === 'history' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {
    style: {
      margin: '0 0 1rem',
      fontSize: '1.25rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 856,
      columnNumber: 17
    }
  }, "Trigger History"), allExecutions.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account__card",
    style: {
      textAlign: 'center',
      padding: '2rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 858,
      columnNumber: 19
    }
  }, "No executions yet.") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      flexDirection: 'column',
      gap: '0.5rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 860,
      columnNumber: 19
    }
  }, allExecutions.map(exec => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    key: exec.id,
    className: "standalone-account__card",
    style: {
      height: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 862,
      columnNumber: 23
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.75rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 863,
      columnNumber: 25
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      width: 8,
      height: 8,
      borderRadius: '50%',
      flexShrink: 0,
      background: exec.status === 'success' ? '#059669' : '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 864,
      columnNumber: 27
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      flex: 1
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 865,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontWeight: 600,
      fontSize: '0.88rem',
      color: '#001433'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 866,
      columnNumber: 29
    }
  }, exec.triggerName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.78rem',
      color: '#6b7280'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 867,
      columnNumber: 29
    }
  }, exec.summary)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      textAlign: 'right',
      flexShrink: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 869,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      fontWeight: 600,
      color: exec.status === 'success' ? '#059669' : '#dc2626'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 870,
      columnNumber: 29
    }
  }, exec.status === 'success' ? 'Success' : 'Failed'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      fontSize: '0.72rem',
      color: '#9ca3af'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 871,
      columnNumber: 29
    }
  }, formatDateTime(exec.timestamp)))), exec.stepResults && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      marginTop: '0.75rem',
      paddingTop: '0.75rem',
      borderTop: '1px solid #f3f4f6'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 875,
      columnNumber: 27
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    style: {
      display: 'flex',
      alignItems: 'center',
      gap: '0.35rem',
      flexWrap: 'wrap'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 876,
      columnNumber: 29
    }
  }, exec.stepResults.map((sr, idx) => {
    var stepDef = exec.steps ? exec.steps.find(s => s.id === sr.stepId) : null;
    var app = (stepDef === null || stepDef === void 0 ? void 0 : stepDef.type) === 'app' ? getApp(stepDef.appId) : null;
    var isCondition = (stepDef === null || stepDef === void 0 ? void 0 : stepDef.type) === 'condition';
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {
      key: sr.stepId,
      __source: {
        fileName: _jsxFileName,
        lineNumber: 882,
        columnNumber: 35
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        display: 'inline-flex',
        alignItems: 'center',
        gap: '0.3rem',
        padding: '0.2rem 0.5rem',
        borderRadius: 6,
        fontSize: '0.72rem',
        fontWeight: 500,
        background: sr.status === 'success' ? '#ecfdf5' : sr.status === 'failed' ? '#fef2f2' : '#f9fafb',
        color: sr.status === 'success' ? '#065f46' : sr.status === 'failed' ? '#991b1b' : '#6b7280',
        border: "1px solid ".concat(sr.status === 'success' ? '#a7f3d0' : sr.status === 'failed' ? '#fecaca' : '#e5e7eb')
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 883,
        columnNumber: 37
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa ".concat(isCondition ? 'fa-code-fork' : (app === null || app === void 0 ? void 0 : app.icon) || 'fa-bolt'),
      style: {
        fontSize: '0.65rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 890,
        columnNumber: 39
      }
    }), isCondition ? 'Condition' : app === null || app === void 0 ? void 0 : app.name), idx < exec.stepResults.length - 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
      className: "fa fa-long-arrow-right",
      style: {
        color: '#d1d5db',
        fontSize: '0.6rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 894,
        columnNumber: 39
      }
    }));
  })))))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(AddTriggerModal, {
    open: showAddModal,
    onClose: () => setShowAddModal(false),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 912,
      columnNumber: 7
    }
  }));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDetailG));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");


var StandaloneNewAgreement = _ref => {
  var {
    history
  } = _ref;
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    history.replace('/dashboard', {
      openCreateAgreement: true
    });
  }, []);
  return null;
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneNewAgreement));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jwt-decode */ "./node_modules/jwt-decode/lib/index.js");
/* harmony import */ var jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jwt_decode__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/AccountNameHelper */ "./src/utils/AccountNameHelper.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/components/StandaloneBillingGuard.js";





var getTenantAccountName = () => {
  try {
    var token = sessionStorage.getItem("loanWellIdToken" || false);
    if (!token) return null;
    var decoded = jwt_decode__WEBPACK_IMPORTED_MODULE_2___default()(token);
    for (var key of Object.keys(decoded)) {
      if (key.startsWith('http://') && key.endsWith('.loanwell.com')) {
        return decoded[key] || null;
      }
    }
    return null;
  } catch (e) {
    return null;
  }
};

/**
 * Wraps standalone pages and redirects to /signup/billing-pending
 * if the account has no valid Stripe billing set up.
 *
 * Checks account.stripeCustomerId — if missing, the user hasn't
 * completed Stripe Checkout and must do so before accessing the app.
 */
var StandaloneBillingGuard = _ref => {
  var {
    children,
    history
  } = _ref;
  var [status, setStatus] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])('checking'); // checking | ok | redirect

  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    var accountName = getTenantAccountName() || Object(_utils_AccountNameHelper__WEBPACK_IMPORTED_MODULE_4__["getAccountNameFromOrigin"])() || 'app';
    _utils_httpClient__WEBPACK_IMPORTED_MODULE_3__["client"].invokeApi({}, "/account/by-name/".concat(accountName), 'GET', {}, {}).then(res => {
      var account = res.data;
      if (!account || !account.stripeCustomerId) {
        history.replace('/signup/billing-pending');
        setStatus('redirect');
      } else {
        setStatus('ok');
      }
    }).catch(() => {
      // If we can't verify billing, let the page render rather than blocking
      setStatus('ok');
    });
  }, []); // eslint-disable-line react-hooks/exhaustive-deps

  if (status === 'checking') {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      style: {
        paddingTop: '3rem',
        textAlign: 'center'
      },
      "data-testid": "billing-guard-loading",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 55,
        columnNumber: 7
      }
    }, "Loading...");
  }
  if (status === 'redirect') {
    return null;
  }
  return children;
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneBillingGuard));__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/httpClient */ "./src/utils/httpClient.js");
/* harmony import */ var _components_FileManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/FileManager */ "./src/components/FileManager.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/StandaloneAgreementDocuments.js",
  _div;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }




var getDisplayName = agreement => {
  var businessName = agreement.borrowerfirstname || agreement.borrowerFirstName;
  if (businessName) return businessName;
  return agreement.accountnumber || agreement.accountNumber || 'Agreement';
};
var getSecondaryName = agreement => {
  var parts = [agreement.borrowerlastname || agreement.borrowerLastName].filter(Boolean);
  return parts.length > 0 ? parts.join(' ') : null;
};
var StandaloneAgreementDocuments = _ref => {
  var {
    match
  } = _ref;
  var {
    agreementId
  } = match.params;
  var [agreement, setAgreement] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(null);
  var [loading, setLoading] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(true);
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
    var fetchData = /*#__PURE__*/function () {
      var _ref2 = _asyncToGenerator(function* () {
        setLoading(true);
        try {
          var res = yield _utils_httpClient__WEBPACK_IMPORTED_MODULE_2__["client"].invokeApi({}, '/data-studio/sql', 'POST', {}, {
            items: ['agreements'],
            queryService: 'datastudio',
            request: {
              query: "SELECT *\n            FROM agreement\n            WHERE id = '".concat(agreementId.replace(/'/g, "''"), "'\n            LIMIT 1")
            }
          });
          var item = res.data && res.data.Items && res.data.Items[0];
          setAgreement(item || null);
        } catch (err) {
          console.error('Failed to load agreement:', err);
          setAgreement(null);
        }
        setLoading(false);
      });
      return function fetchData() {
        return _ref2.apply(this, arguments);
      };
    }();
    fetchData();
  }, [agreementId]);
  if (loading) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account",
      "data-testid": "standalone-agreement-documents",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 49,
        columnNumber: 7
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__container",
      style: {
        paddingTop: '3rem',
        textAlign: 'center'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 50,
        columnNumber: 9
      }
    }, "Loading..."));
  }
  if (!agreement) {
    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account",
      "data-testid": "standalone-agreement-documents",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 59,
        columnNumber: 7
      }
    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "standalone-account__container",
      style: {
        paddingTop: '3rem'
      },
      __source: {
        fileName: _jsxFileName,
        lineNumber: 60,
        columnNumber: 9
      }
    }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
      className: "alert alert-danger",
      __source: {
        fileName: _jsxFileName,
        lineNumber: 61,
        columnNumber: 11
      }
    }, "Agreement not found."))));
  }
  var displayName = getDisplayName(agreement);
  var secondaryName = getSecondaryName(agreement);
  var borrowerEmail = agreement.borroweremail || agreement.borrowerEmail || '';
  var accountNumber = agreement.accountnumber || agreement.accountNumber || '';
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "standalone-account",
    "data-testid": "standalone-agreement-documents",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 73,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 74,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 container container-wide",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 75,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
    className: "page-title col-xs-12 no-padding-left no-padding-right",
    style: {
      textAlign: 'left',
      color: '#fff'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 76,
      columnNumber: 11
    }
  }, displayName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "col-xs-12 no-padding-left no-padding-right",
    style: {
      margin: '1rem 0rem 0.25rem',
      padding: '0.25rem 1rem',
      width: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 79,
      columnNumber: 11
    }
  }, "Primary Applicant: ", secondaryName || displayName, borrowerEmail ? " | ".concat(borrowerEmail) : '', " - #", accountNumber))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    className: "container",
    style: {
      paddingTop: '1rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 85,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_FileManager__WEBPACK_IMPORTED_MODULE_3__["default"], {
    agreement: agreement,
    params: {
      agreementId
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 86,
      columnNumber: 9
    }
  })));
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_router_dom__WEBPACK_IMPORTED_MODULE_1__["withRouter"])(StandaloneAgreementDocuments));__webpack_require__.r(__webpack_exports__);
/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var lodash_isNumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isNumber */ "./node_modules/lodash/isNumber.js");
/* harmony import */ var lodash_isNumber__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isNumber__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var accounting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! accounting */ "./node_modules/accounting/accounting.js");
/* harmony import */ var accounting__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(accounting__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react_loadable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-loadable */ "./node_modules/react-loadable/lib/index.js");
/* harmony import */ var react_loadable__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_loadable__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
/* harmony import */ var _actions_apiActions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../actions/apiActions */ "./src/actions/apiActions.js");
/* harmony import */ var _components_ActivityTimeline__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/ActivityTimeline */ "./src/components/ActivityTimeline.js");
/* harmony import */ var _components_InfoCard__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/InfoCard */ "./src/components/InfoCard.js");
/* harmony import */ var _components_InfoCardVariant__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/InfoCardVariant */ "./src/components/InfoCardVariant.js");
/* harmony import */ var _components_Loading__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../components/Loading */ "./src/components/Loading.js");
/* harmony import */ var _components_UploadComponent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/UploadComponent */ "./src/components/UploadComponent.js");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../styles/dashboard-page.scss */ "./src/styles/dashboard-page.scss");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var _styles_details_css__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../styles/details.css */ "./src/styles/details.css");
/* harmony import */ var _styles_details_css__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_styles_details_css__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var _utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../utils/QueryServiceHelper */ "./src/utils/QueryServiceHelper.js");


var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/CompanyPage.js",
  _h,
  _h2;
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }















var DataTable = react_loadable__WEBPACK_IMPORTED_MODULE_4___default()({
  loader: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(null, /*! ../components/DataTable */ "./src/components/DataTable.js")),
  modules: ['../components/DataTable'],
  webpack: () => [/*require.resolve*/(/*! ../components/DataTable */ "./src/components/DataTable.js")],
  loading: _components_Loading__WEBPACK_IMPORTED_MODULE_12__["default"],
  modules: ['../components/DataTable']
});
var CompanyPage = _ref => {
  var _currentLoans$;
  var {
    match,
    accountConfig,
    apiActions,
    accountName,
    auth
  } = _ref;
  var companyId = lodash_get__WEBPACK_IMPORTED_MODULE_1___default()(match, 'params.entityId');
  var isLegacy = !!(accountConfig && accountConfig.account && accountConfig.account.legacy);
  var [showUploadModal, setShowUploadModal] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])(false);
  var [comprehensiveData, setComprehensiveData] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])(null);
  var isProduction = process && process.env && "production" === 'production';
  var [documentsList, setDocumentsList] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])(isProduction ? [] : []);
  var [companyContacts, setCompanyContacts] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])([]);
  var [currentLoans, setCurrentLoans] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])([]);
  var [isLoading, setIsLoading] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])(true);
  var [connectionsLoading, setConnectionsLoading] = Object(react__WEBPACK_IMPORTED_MODULE_3__["useState"])(true);
  Object(react__WEBPACK_IMPORTED_MODULE_3__["useEffect"])(() => {
    var isActive = true;
    var fetchComprehensiveData = /*#__PURE__*/function () {
      var _ref2 = _asyncToGenerator(function* () {
        setIsLoading(true);
        if (!companyId || !apiActions || !accountName || !accountConfig) {
          setIsLoading(false);
          return;
        }
        try {
          var sqlWhereClauses = [];
          var additionalSqlWhereClauses = [];
          additionalSqlWhereClauses.push("c.id = '".concat(companyId, "'"));
          var sqlQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__["generateSqlQuery"])({
            type: 'comprehensiveBusinessData',
            auth,
            accountName,
            accountConfig,
            currentProcessId: null,
            sqlWhereClauses,
            additionalSqlWhereClauses
          });
          var result = yield apiActions.sqlSearch({
            items: sqlQuery.items,
            queryService: sqlQuery.queryService,
            request: {
              query: sqlQuery.query
            }
          }, true);
          if (!isActive) return;
          if (result.Items && result.Items.length > 0) {
            setComprehensiveData(result.Items[0]);
          } else {
            setComprehensiveData(null);
          }
        } catch (error) {
          console.error('Error fetching comprehensive business data:', error);
          if (!isActive) return;
          setComprehensiveData(null);
        } finally {
          if (!isActive) return;
          setIsLoading(false);
        }
      });
      return function fetchComprehensiveData() {
        return _ref2.apply(this, arguments);
      };
    }();
    fetchComprehensiveData();
    return () => {
      isActive = false;
    };
  }, [companyId, apiActions, accountName, accountConfig, auth]);

  // Load current loans (agreements) for this company (status = completed)
  Object(react__WEBPACK_IMPORTED_MODULE_3__["useEffect"])(() => {
    var isActive = true;
    var fetchCurrentLoans = /*#__PURE__*/function () {
      var _ref3 = _asyncToGenerator(function* () {
        if (!companyId || !apiActions || !accountName || !accountConfig) return;
        try {
          var sqlWhereClauses = [];
          var additionalSqlWhereClauses = [];
          // Scope agreements by:
          // 1) Being listed in this company's associations.agreement array
          // 2) agreement.associations.company containing this companyId
          // 3) legacy agreement.companyid column matching this companyId
          additionalSqlWhereClauses.push(Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__["getCompanyCurrentLoansAssociationScopeClause"])({
            companyId
          }));
          var sqlQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__["generateSqlQuery"])({
            type: 'currentLoans',
            auth,
            accountName,
            accountConfig,
            currentProcessId: null,
            sqlWhereClauses,
            additionalSqlWhereClauses
          });
          var result = yield apiActions.sqlSearch({
            items: sqlQuery.items,
            queryService: sqlQuery.queryService,
            request: {
              query: sqlQuery.query
            }
          }, true);
          var items = ((result === null || result === void 0 ? void 0 : result.Items) || []).map(row => {
            var principalRaw = (row === null || row === void 0 ? void 0 : row.principal) != null ? row.principal : row === null || row === void 0 ? void 0 : row.principalBalance;
            var principal = lodash_isNumber__WEBPACK_IMPORTED_MODULE_0___default()(principalRaw) ? accounting__WEBPACK_IMPORTED_MODULE_2___default.a.formatMoney(principalRaw) : principalRaw ? accounting__WEBPACK_IMPORTED_MODULE_2___default.a.formatMoney(Number(principalRaw)) : '';
            var businessName = (row === null || row === void 0 ? void 0 : row.name) || (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.name) || 'Business';
            var loanTag = row !== null && row !== void 0 && row.accountNumber ? " - ".concat(row.accountNumber) : '';
            var title = "".concat(principal || '', " loan for ").concat(businessName).concat(loanTag).trim();
            var npAmt = row === null || row === void 0 ? void 0 : row.nextScheduledPaymentAmount;
            var nextAmt = lodash_isNumber__WEBPACK_IMPORTED_MODULE_0___default()(npAmt) ? accounting__WEBPACK_IMPORTED_MODULE_2___default.a.formatMoney(npAmt) : npAmt ? accounting__WEBPACK_IMPORTED_MODULE_2___default.a.formatMoney(Number(npAmt)) : '';
            var nextPayment = nextAmt && row !== null && row !== void 0 && row.nextScheduledPaymentDate ? "".concat(nextAmt, " on ").concat(new Date(row.nextScheduledPaymentDate).toLocaleDateString('en-US')) : '';
            var agreementId = (row === null || row === void 0 ? void 0 : row.agreementId) || (row === null || row === void 0 ? void 0 : row.id);
            return {
              title,
              nextPayment,
              action: agreementId ? {
                label: 'See payment schedule',
                href: "/agreements/".concat(agreementId, "/pages/schedule")
              } : null,
              active: true
            };
          });
          if (!isActive) return;
          setCurrentLoans(items);
        } catch (e) {
          console.error('Error fetching current loans for company:', e);
          if (!isActive) return;
          setCurrentLoans([]);
        }
      });
      return function fetchCurrentLoans() {
        return _ref3.apply(this, arguments);
      };
    }();
    fetchCurrentLoans();
    return () => {
      isActive = false;
    };
  }, [companyId, apiActions, accountName, accountConfig, auth]);
  Object(react__WEBPACK_IMPORTED_MODULE_3__["useEffect"])(() => {
    var isActive = true;
    var fetchCompanyContacts = /*#__PURE__*/function () {
      var _ref4 = _asyncToGenerator(function* () {
        setConnectionsLoading(true);
        if (!companyId || !apiActions || !accountName || !accountConfig) {
          if (!isActive) return;
          setConnectionsLoading(false);
          return;
        }
        try {
          var sqlWhereClauses = [];
          var additionalSqlWhereClauses = [];
          // contacts whose id is listed in this company's associations.contact array
          additionalSqlWhereClauses.push(Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__["getCompanyContactsAssociationScopeClause"])({
            companyId
          }));
          var sqlQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__["generateSqlQuery"])({
            type: 'companyContacts',
            auth,
            accountName,
            accountConfig,
            currentProcessId: null,
            sqlWhereClauses,
            additionalSqlWhereClauses
          });
          var result = yield apiActions.sqlSearch({
            items: sqlQuery.items,
            queryService: sqlQuery.queryService,
            request: {
              query: sqlQuery.query
            }
          }, true);
          var contactItems = ((result === null || result === void 0 ? void 0 : result.Items) || []).map(row => {
            var id = row === null || row === void 0 ? void 0 : row.contactId;
            var first = (row === null || row === void 0 ? void 0 : row.contactFirstName) || '';
            var last = (row === null || row === void 0 ? void 0 : row.contactLastName) || '';
            var title = "".concat(first, " ").concat(last).trim() || 'Contact';
            return {
              title,
              subtitle: 'Contact',
              action: {
                label: 'View',
                href: id ? "/contacts/".concat(id, "/summary") : '#'
              },
              active: true
            };
          });
          // Agreements associated to this company via company's associations.agreement (supports object or array)
          var agreementsQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_16__["getAgreementsAssociatedToCompanyQuery"])({
            companyId
          });
          var agreementsResult = yield apiActions.sqlSearch({
            items: agreementsQuery.items,
            queryService: agreementsQuery.queryService,
            request: {
              query: agreementsQuery.query
            }
          }, true);
          var agreementItems = ((agreementsResult === null || agreementsResult === void 0 ? void 0 : agreementsResult.Items) || []).map(row => {
            var agreementId = (row === null || row === void 0 ? void 0 : row.agreementId) || (row === null || row === void 0 ? void 0 : row.id);
            var acctNum = row !== null && row !== void 0 && row.accountNumber ? "#".concat(row.accountNumber) : '';
            var title = acctNum ? "Agreement ".concat(acctNum) : "Agreement ".concat(agreementId);
            return {
              title,
              subtitle: 'Agreement',
              action: agreementId ? {
                label: 'View',
                href: "/agreements/".concat(agreementId, "/summary")
              } : null,
              active: true
            };
          });
          if (!isActive) return;
          setCompanyContacts([...(contactItems || []), ...(agreementItems || [])]);
        } catch (error) {
          console.error('Error fetching company contacts:', error);
          if (!isActive) return;
          setCompanyContacts([]);
        } finally {
          if (!isActive) return;
          setConnectionsLoading(false);
        }
      });
      return function fetchCompanyContacts() {
        return _ref4.apply(this, arguments);
      };
    }();
    fetchCompanyContacts();
    return () => {
      isActive = false;
    };
  }, [companyId, apiActions, accountName, accountConfig, auth]);
  var businessInfoItems = Object(react__WEBPACK_IMPORTED_MODULE_3__["useMemo"])(() => {
    var name = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.name) || '';
    var industry = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.industry) || '';
    var description = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.description) || '';
    var naics = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.naicsCode) || '';
    var estDateRaw = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.dateEstablished) || '';
    var address1 = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.physicalAddressLine1) || '';
    var address2 = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.physicalAddressLine2) || '';
    var city = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.city) || '';
    var state = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.state) || '';
    var postal = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.postalCode) || '';
    var physicalAddress = [address1, address2, city, state, postal].filter(Boolean).join(', ');
    return [{
      label: 'Business name',
      value: name
    }, {
      label: 'Industry',
      value: industry
    }, {
      label: 'Description',
      value: description
    }, {
      label: 'Physical address',
      value: physicalAddress
    }, {
      label: 'NAICS code',
      value: naics
    }];
  }, [comprehensiveData]);
  var documentsTableData = {
    data: {
      baseTable: {
        name: 'baseTable',
        order: 1,
        dataType: 'document',
        origin: 'documents',
        dataSource: documentsList,
        actions: [{
          label: 'Remove',
          onActionClick: props => {
            console.log('remove clicked for item at index', props === null || props === void 0 ? void 0 : props.index);
          },
          className: 'lw-btn-danger'
        }, {
          label: 'Preview',
          onActionClick: props => {
            console.log('preview clicked for item at index', props === null || props === void 0 ? void 0 : props.index);
          },
          className: 'lw-btn-light'
        }],
        visibleFields: [{
          field: 'documentName',
          headerText: 'Document name',
          textAlign: 'Left',
          minWidth: 200,
          width: 'auto',
          visible: true,
          order: 1,
          type: 'string'
        }, {
          field: 'dateUploaded',
          headerText: 'Date uploaded',
          textAlign: 'Left',
          minWidth: 160,
          width: 'auto',
          visible: true,
          order: 2,
          type: 'date',
          format: 'MM/dd/yyyy'
        }, {
          field: 'description',
          headerText: 'Description',
          textAlign: 'Left',
          minWidth: 200,
          width: 'auto',
          visible: true,
          order: 3,
          type: 'string'
        }, {
          field: 'documentOwner',
          headerText: 'Document owner',
          textAlign: 'Left',
          minWidth: 160,
          width: 'auto',
          visible: true,
          order: 4,
          type: 'string'
        }, {
          field: 'verified',
          headerText: 'Verified',
          textAlign: 'Center',
          width: 100,
          visible: true,
          order: 5,
          type: 'boolean'
        }],
        tableSettings: {
          allowPaging: true,
          allowSorting: true,
          allowFiltering: false,
          allowResizing: true,
          allowReordering: true,
          showColumnMenu: true,
          showColumnChooser: true,
          allowExcelExport: true,
          allowPdfExport: false,
          showActions: true,
          toolbar: ['Search', 'ColumnChooser', 'ExcelExport'],
          pageSettings: {
            pageSize: 8,
            pageSizes: [4, 8, 12, 16]
          },
          height: '300',
          rowHeight: 40,
          emptyRecordTemplate: '<div style="padding: 20px; text-align: center;">No documents found</div>'
        }
      }
    }
  };
  var showDocumentsSection = false;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "container-fluid no-padding",
    style: {
      background: '#fafbfa',
      minHeight: '100vh'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 384,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 385,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "col-xs-12 flex-padding",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 386,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-10",
    style: {
      textAlign: 'left',
      color: '#fff',
      paddingLeft: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 387,
      columnNumber: 11
    }
  }, (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.name) || ''), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    class: "col-xs-12",
    style: {
      margin: '1rem 0rem 0.25rem',
      padding: '0.25rem 3rem',
      width: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 393,
      columnNumber: 11
    }
  }, comprehensiveData !== null && comprehensiveData !== void 0 && comprehensiveData.industry ? "Industry ".concat(comprehensiveData.industry) : ''))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 398,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 399,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "col-md-6 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 400,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 401,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_InfoCard__WEBPACK_IMPORTED_MODULE_10__["default"], {
    title: "Business Information",
    actionLink: "/companies/".concat(companyId),
    actionButton: "Edit",
    visibleCount: 7,
    auth: auth,
    accountName: accountName,
    accountConfig: accountConfig,
    apiActions: apiActions,
    items: !isLoading ? businessInfoItems : undefined,
    loading: isLoading,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 402,
      columnNumber: 15
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 415,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_InfoCardVariant__WEBPACK_IMPORTED_MODULE_11__["default"], {
    title: "Current loans",
    seeAllLink: null,
    items: !isLoading ? currentLoans : undefined,
    loading: isLoading,
    maxWidth: "100%",
    emptyText: "No current loans",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 416,
      columnNumber: 15
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "col-md-6 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 426,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 427,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_InfoCardVariant__WEBPACK_IMPORTED_MODULE_11__["default"], {
    title: "Connections",
    seeAllLink: null,
    items: !connectionsLoading ? companyContacts : undefined,
    loading: connectionsLoading,
    maxWidth: "100%",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 428,
      columnNumber: 15
    }
  })))), showDocumentsSection && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 441,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "col-md-12 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 442,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 443,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 444,
      columnNumber: 17
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h2", {
    className: "mb-0 text-bold lw-color-main-color",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 445,
      columnNumber: 19
    }
  }, "Documents")), !isLegacy && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", {
    className: "lw-btn lw-btn-dark",
    onClick: () => setShowUploadModal(true),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 447,
      columnNumber: 21
    }
  }, "Upload")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(DataTable, {
    tableData: documentsTableData,
    documents: documentsList,
    tableType: "documents",
    sql: false,
    legacy: false,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 452,
      columnNumber: 17
    }
  })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 464,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "col-md-12 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 465,
      columnNumber: 11
    }
  }, _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h2", {
    className: "mb-3 text-bold lw-color-main-color",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 466,
      columnNumber: 13
    }
  }, "Recent activity")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_ActivityTimeline__WEBPACK_IMPORTED_MODULE_9__["default"], {
    wide: true,
    loadActivities: true,
    filterByCompanyId: companyId,
    auth: auth,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 467,
      columnNumber: 13
    }
  }))), !isLegacy && showUploadModal && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    style: {
      position: 'fixed',
      top: 0,
      left: 0,
      right: 0,
      bottom: 0,
      backgroundColor: 'rgba(0, 0, 0, 0.5)',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      zIndex: 1050
    },
    onClick: () => setShowUploadModal(false),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 472,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    style: {
      background: '#fff',
      borderRadius: '8px',
      padding: '24px',
      maxWidth: '600px',
      width: '90%',
      maxHeight: '90vh',
      overflow: 'auto'
    },
    onClick: e => e.stopPropagation(),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 487,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 499,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h4", {
    style: {
      margin: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 500,
      columnNumber: 17
    }
  }, "Upload Document"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", {
    type: "button",
    className: "btn-close",
    onClick: () => setShowUploadModal(false),
    style: {
      background: 'none',
      border: 'none',
      fontSize: '24px',
      cursor: 'pointer',
      padding: '0',
      width: '24px',
      height: '24px',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 501,
      columnNumber: 17
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_UploadComponent__WEBPACK_IMPORTED_MODULE_13__["default"], {
    onUploadSuccess: newDoc => {
      setShowUploadModal(false);
      if (newDoc && newDoc.documentName) {
        setDocumentsList(prev => [{
          description: 'Uploaded document',
          dateUploaded: newDoc.dateUploaded || new Date().toLocaleDateString('en-US'),
          documentName: newDoc.documentName,
          documentOwner: 'Company',
          verified: false
        }, ...prev]);
      }
    },
    agreementId: (currentLoans === null || currentLoans === void 0 || (_currentLoans$ = currentLoans[0]) === null || _currentLoans$ === void 0 || (_currentLoans$ = _currentLoans$.action) === null || _currentLoans$ === void 0 || (_currentLoans$ = _currentLoans$.href) === null || _currentLoans$ === void 0 ? void 0 : _currentLoans$.split('/')[2]) || null,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 521,
      columnNumber: 15
    }
  })))));
};
var mapDispatchToProps = dispatch => ({
  apiActions: Object(redux__WEBPACK_IMPORTED_MODULE_7__["bindActionCreators"])(_actions_apiActions__WEBPACK_IMPORTED_MODULE_8__["apiActions"], dispatch)
});
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(null, mapDispatchToProps)(Object(react_router_dom__WEBPACK_IMPORTED_MODULE_6__["withRouter"])(CompanyPage)));
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "./node_modules/process/browser.js")))__webpack_require__.r(__webpack_exports__);
/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var accounting__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! accounting */ "./node_modules/accounting/accounting.js");
/* harmony import */ var accounting__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(accounting__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_loadable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-loadable */ "./node_modules/react-loadable/lib/index.js");
/* harmony import */ var react_loadable__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_loadable__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js");
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
/* harmony import */ var _actions_apiActions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../actions/apiActions */ "./src/actions/apiActions.js");
/* harmony import */ var _components_ActivityTimeline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/ActivityTimeline */ "./src/components/ActivityTimeline.js");
/* harmony import */ var _components_EmptyState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/EmptyState */ "./src/components/EmptyState.js");
/* harmony import */ var _components_ExpandableProgressGroup__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/ExpandableProgressGroup */ "./src/components/ExpandableProgressGroup.js");
/* harmony import */ var _components_InfoBox__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/InfoBox */ "./src/components/InfoBox.js");
/* harmony import */ var _components_InfoCard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/InfoCard */ "./src/components/InfoCard.js");
/* harmony import */ var _components_InfoCardVariant__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../components/InfoCardVariant */ "./src/components/InfoCardVariant.js");
/* harmony import */ var _components_Loading__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/Loading */ "./src/components/Loading.js");
/* harmony import */ var _components_UploadComponent__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../components/UploadComponent */ "./src/components/UploadComponent.js");
/* harmony import */ var _images_zero_item_views_task_png__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../images/zero-item-views/task.png */ "./src/images/zero-item-views/task.png");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../styles/dashboard-page.scss */ "./src/styles/dashboard-page.scss");
/* harmony import */ var _styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_styles_dashboard_page_scss__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var _styles_details_css__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../styles/details.css */ "./src/styles/details.css");
/* harmony import */ var _styles_details_css__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_styles_details_css__WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var _utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/QueryServiceHelper */ "./src/utils/QueryServiceHelper.js");
var _jsxFileName = "/opt/atlassian/pipelines/agent/build/app/src/pages/ContactPage.js",
  _div,
  _EmptyState,
  _h,
  _h2,
  _h3;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }



















var DataTable = react_loadable__WEBPACK_IMPORTED_MODULE_2___default()({
  loader: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(null, /*! ../components/DataTable */ "./src/components/DataTable.js")),
  modules: ['../components/DataTable'],
  webpack: () => [/*require.resolve*/(/*! ../components/DataTable */ "./src/components/DataTable.js")],
  loading: _components_Loading__WEBPACK_IMPORTED_MODULE_13__["default"],
  modules: ['../components/DataTable']
});
var ContactPage = _ref => {
  var _currentLoans$;
  var {
    match,
    contact,
    accountConfig,
    apiActions,
    accountName,
    auth,
    loggedInMember,
    user,
    members
  } = _ref;
  var isLegacy = !!(accountConfig && accountConfig.account && accountConfig.account.legacy);
  var {
    entityId: contactId
  } = match.params;
  var [showUploadModal, setShowUploadModal] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(false);
  var [comprehensiveData, setComprehensiveData] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var [isLoading, setIsLoading] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(true);
  var isProduction = process && process.env && "production" === 'production';
  var [documentsList, setDocumentsList] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(isProduction ? [] : [{
    description: 'Tax Return from 2023',
    dateUploaded: '11/16/2024',
    documentName: 'tax_return.pdf',
    documentOwner: 'Contact',
    verified: true
  }, {
    description: 'Photo ID',
    dateUploaded: '11/20/2024',
    documentName: 'id.jpg',
    documentOwner: 'Contact',
    verified: false
  }]);
  var [tasksForContact, setTasksForContact] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])([]);
  var [contactConnections, setContactConnections] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])([]);
  var [connectionsLoading, setConnectionsLoading] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(true);
  var [linkedCompanyId, setLinkedCompanyId] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])(null);
  var [currentLoans, setCurrentLoans] = Object(react__WEBPACK_IMPORTED_MODULE_1__["useState"])([]);

  // Fetch comprehensive contact data from Data Studio
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    var fetchComprehensiveData = /*#__PURE__*/function () {
      var _ref2 = _asyncToGenerator(function* () {
        setIsLoading(true);
        if (!contactId || !apiActions || !accountName || !accountConfig) {
          setIsLoading(false);
          return;
        }
        try {
          var sqlWhereClauses = [];
          var additionalSqlWhereClauses = [];

          // Add the contact ID to the where clause
          additionalSqlWhereClauses.push("ct.id = '".concat(contactId, "'"));
          var sqlQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__["generateSqlQuery"])({
            type: 'comprehensiveClientData',
            auth,
            accountName,
            accountConfig,
            currentProcessId: null,
            sqlWhereClauses,
            additionalSqlWhereClauses
          });
          var result = yield apiActions.sqlSearch({
            items: sqlQuery.items,
            queryService: sqlQuery.queryService,
            request: {
              query: sqlQuery.query
            }
          }, true);
          if (result.Items && result.Items.length > 0) {
            var data = result.Items[0];
            setComprehensiveData(data);
            setLinkedCompanyId((data === null || data === void 0 ? void 0 : data.linkedCompanyId) || null);
          } else {
            console.log('No Data Studio data found for contact ID:', contactId);
            setComprehensiveData(null);
            setLinkedCompanyId(null);
          }
        } catch (error) {
          console.error('Error fetching comprehensive contact data:', error);
          setComprehensiveData(null);
          setLinkedCompanyId(null);
        } finally {
          setIsLoading(false);
        }
      });
      return function fetchComprehensiveData() {
        return _ref2.apply(this, arguments);
      };
    }();
    fetchComprehensiveData();
  }, [contactId, apiActions, accountName, accountConfig, auth]);

  // Fetch companies that reference this contact via associations.contact
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    var fetchCompaniesForContact = /*#__PURE__*/function () {
      var _ref3 = _asyncToGenerator(function* () {
        setConnectionsLoading(true);
        if (!contactId || !apiActions || !accountName || !accountConfig) {
          setContactConnections([]);
          setLinkedCompanyId(null);
          setConnectionsLoading(false);
          return;
        }
        try {
          var sqlWhereClauses = [];
          var additionalSqlWhereClauses = [];
          // companies whose associations.contact array contains this contactId
          additionalSqlWhereClauses.push(Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__["getCompaniesAssociationsContactScopeClause"])({
            contactId
          }));
          var companiesQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__["getCompaniesAssociatedToContactQuery"])({
            contactId,
            sqlWhereClauses,
            additionalSqlWhereClauses
          });
          var result = yield apiActions.sqlSearch({
            items: companiesQuery.items,
            queryService: companiesQuery.queryService,
            request: {
              query: companiesQuery.query
            }
          }, true);
          var companies = Array.isArray(result === null || result === void 0 ? void 0 : result.Items) ? result.Items : [];
          // Agreements associated to this contact via contact.associations.agreement (supports object or array)
          var agreementsQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__["getAgreementsAssociatedToContactQuery"])({
            contactId
          });
          var agreementsResult = yield apiActions.sqlSearch({
            items: agreementsQuery.items,
            queryService: agreementsQuery.queryService,
            request: {
              query: agreementsQuery.query
            }
          }, true);
          var agreementItems = ((agreementsResult === null || agreementsResult === void 0 ? void 0 : agreementsResult.Items) || []).map(row => {
            var agreementId = (row === null || row === void 0 ? void 0 : row.agreementId) || (row === null || row === void 0 ? void 0 : row.id);
            var acctNum = row !== null && row !== void 0 && row.accountNumber ? "#".concat(row.accountNumber) : '';
            var title = acctNum ? "Agreement ".concat(acctNum) : "Agreement ".concat(agreementId);
            return {
              title,
              subtitle: 'Agreement',
              action: agreementId ? {
                label: 'View',
                href: "/agreements/".concat(agreementId, "/summary")
              } : null,
              active: true
            };
          });
          if (companies.length > 0 || agreementItems.length > 0) {
            var first = companies[0];
            setLinkedCompanyId((first === null || first === void 0 ? void 0 : first.companyId) || null);
            var companyItems = companies.map(co => ({
              title: co.name || 'Business',
              subtitle: 'Company',
              action: {
                label: 'View',
                href: "/companies/".concat(co.companyId, "/summary")
              },
              active: true
            }));
            setContactConnections([...(companyItems || []), ...(agreementItems || [])]);
          } else {
            setLinkedCompanyId(null);
            setContactConnections([]);
          }
        } catch (e) {
          console.error('Error fetching companies for contact:', e);
          setLinkedCompanyId(null);
          setContactConnections([]);
        } finally {
          setConnectionsLoading(false);
        }
      });
      return function fetchCompaniesForContact() {
        return _ref3.apply(this, arguments);
      };
    }();
    fetchCompaniesForContact();
  }, [contactId, apiActions, accountName, accountConfig]);

  // Load current loans for this contact (agreements where borrower email matches contact email and status = completed)
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    var fetchCurrentLoansForContact = /*#__PURE__*/function () {
      var _ref4 = _asyncToGenerator(function* () {
        try {
          var email = comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.contactEmail;
          if (!email || !apiActions || !accountName || !accountConfig) return;
          var sqlWhereClauses = [];
          var additionalSqlWhereClauses = [];
          additionalSqlWhereClauses.push("LOWER(borroweremail) = LOWER('".concat(email, "')"));
          var sqlQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__["generateSqlQuery"])({
            type: 'currentLoans',
            auth,
            accountName,
            accountConfig,
            currentProcessId: null,
            sqlWhereClauses,
            additionalSqlWhereClauses
          });
          var result = yield apiActions.sqlSearch({
            items: sqlQuery.items,
            queryService: sqlQuery.queryService,
            request: {
              query: sqlQuery.query
            }
          }, true);
          var items = ((result === null || result === void 0 ? void 0 : result.Items) || []).map(row => {
            var principalRaw = (row === null || row === void 0 ? void 0 : row.principal) != null ? row.principal : row === null || row === void 0 ? void 0 : row.principalBalance;
            var principal = _.isNumber(principalRaw) ? accounting__WEBPACK_IMPORTED_MODULE_0___default.a.formatMoney(principalRaw) : principalRaw ? accounting__WEBPACK_IMPORTED_MODULE_0___default.a.formatMoney(Number(principalRaw)) : '';
            var businessName = (row === null || row === void 0 ? void 0 : row.name) || (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.name) || 'Business';
            var loanTag = row !== null && row !== void 0 && row.accountNumber ? " - ".concat(row.accountNumber) : '';
            var title = "".concat(principal || '', " loan for ").concat(businessName).concat(loanTag).trim();
            var npAmt = row === null || row === void 0 ? void 0 : row.nextScheduledPaymentAmount;
            var nextAmt = _.isNumber(npAmt) ? accounting__WEBPACK_IMPORTED_MODULE_0___default.a.formatMoney(npAmt) : npAmt ? accounting__WEBPACK_IMPORTED_MODULE_0___default.a.formatMoney(Number(npAmt)) : '';
            var nextPayment = nextAmt && row !== null && row !== void 0 && row.nextScheduledPaymentDate ? "".concat(nextAmt, " on ").concat(new Date(row.nextScheduledPaymentDate).toLocaleDateString('en-US')) : '';
            var agreementId = (row === null || row === void 0 ? void 0 : row.agreementId) || (row === null || row === void 0 ? void 0 : row.id);
            return {
              title,
              nextPayment,
              action: agreementId ? {
                label: 'See payment schedule',
                href: "/agreements/".concat(agreementId, "/pages/schedule")
              } : null,
              active: true
            };
          });
          setCurrentLoans(items);
        } catch (e) {
          console.error('Error fetching current loans for contact:', e);
          setCurrentLoans([]);
        }
      });
      return function fetchCurrentLoansForContact() {
        return _ref4.apply(this, arguments);
      };
    }();
    fetchCurrentLoansForContact();
  }, [comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.contactEmail, apiActions, accountName, accountConfig, auth]);

  // Load tasks for this contact (mirror borrower homepage logic, filtered by contact email)
  Object(react__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(() => {
    var fetchTasks = /*#__PURE__*/function () {
      var _ref5 = _asyncToGenerator(function* () {
        try {
          var email = comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData.contactEmail;
          if (!email || !apiActions || typeof apiActions.sqlSearch !== 'function') return;
          var taskQuery = Object(_utils_QueryServiceHelper__WEBPACK_IMPORTED_MODULE_18__["getTasksForUserEmailQuery"])({
            accountConfig,
            accountName,
            email
          });
          var result = yield apiActions.sqlSearch({
            items: taskQuery.items,
            queryService: taskQuery.queryService,
            request: {
              query: taskQuery.query
            }
          }, false);
          setTasksForContact((result === null || result === void 0 ? void 0 : result.Items) || []);
        } catch (e) {
          console.error('Failed to load tasks for contact:', e);
          setTasksForContact([]);
        }
      });
      return function fetchTasks() {
        return _ref5.apply(this, arguments);
      };
    }();
    fetchTasks();
  }, [comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData['Contact Email'], apiActions]);
  var handleAddDocument = () => {
    setShowUploadModal(true);
  };
  var handleCloseUploadModal = () => {
    setShowUploadModal(false);
  };
  var handleUploadSuccess = newDoc => {
    setShowUploadModal(false);
    if (newDoc && newDoc.documentName) {
      setDocumentsList(prev => [{
        description: 'Uploaded document',
        dateUploaded: newDoc.dateUploaded || new Date().toLocaleDateString('en-US'),
        documentName: newDoc.documentName,
        documentOwner: 'Contact',
        verified: false
      }, ...prev]);
    }
  };

  // Transform Data Studio data to InfoCard format
  var transformDataStudioToInfoCard = (data, type) => {
    if (type === 'contact') {
      return [{
        label: 'Email',
        value: (data === null || data === void 0 ? void 0 : data['Contact Email']) || ''
      }, {
        label: 'Phone number',
        value: (data === null || data === void 0 ? void 0 : data['Contact Phone']) || ''
      }, {
        label: 'First name',
        value: (data === null || data === void 0 ? void 0 : data['Contact First Name']) || ''
      }, {
        label: 'Last name',
        value: (data === null || data === void 0 ? void 0 : data['Contact Last Name']) || ''
      }, {
        label: 'Title',
        value: (data === null || data === void 0 ? void 0 : data['Contact Title']) || ''
      }, {
        label: 'Preferred contact method',
        value: (data === null || data === void 0 ? void 0 : data['Preferred Contact Type']) || ''
      }, {
        label: 'Referral source',
        value: (data === null || data === void 0 ? void 0 : data['Referral Source']) || ''
      }];
    }
    if (type === 'business') {
      return [{
        label: 'Business name',
        value: (data === null || data === void 0 ? void 0 : data['Company Name']) || ''
      }, {
        label: 'Years in business',
        value: data !== null && data !== void 0 && data['Date Established'] ? (new Date().getFullYear() - new Date(data === null || data === void 0 ? void 0 : data['Date Established']).getFullYear()).toString() : ''
      }, {
        label: 'Number of employees',
        value: (data === null || data === void 0 ? void 0 : data['Business Employee Count']) || ''
      }, {
        label: 'Industry',
        value: (data === null || data === void 0 ? void 0 : data['Industry']) || ''
      }, {
        label: 'Business assessment',
        value: 'See responses'
      }, {
        label: 'Hatchery tenant',
        value: data !== null && data !== void 0 && data['Company Date Created'] ? "Since ".concat(new Date(data === null || data === void 0 ? void 0 : data['Company Date Created']).toLocaleDateString('en-US', {
          month: '2-digit',
          day: '2-digit',
          year: '2-digit'
        })) : ''
      }];
    }
    return [];
  };
  var contactInfoItems = react__WEBPACK_IMPORTED_MODULE_1___default.a.useMemo(() => {
    var data = comprehensiveData || {};
    return [{
      label: 'Email',
      value: data.contactEmail || ''
    }, {
      label: 'Phone number',
      value: data.contactPhone || ''
    }, {
      label: 'First name',
      value: data.contactFirstName || ''
    }, {
      label: 'Last name',
      value: data.contactLastName || ''
    }, {
      label: 'Title',
      value: data.contactTitle || ''
    }];
  }, [comprehensiveData]);
  var businessInfoItems = react__WEBPACK_IMPORTED_MODULE_1___default.a.useMemo(() => {
    var data = comprehensiveData || {};
    var yearsInBusiness = data.dateEstablished ? (new Date().getFullYear() - new Date(data.dateEstablished).getFullYear()).toString() : '';
    var address1 = data.physicalAddressLine1 || '';
    var address2 = data.physicalAddressLine2 || '';
    var city = data.city || '';
    var state = data.state || '';
    var postal = data.postalCode || '';
    var physicalAddress = [address1, address2, city, state, postal].filter(Boolean).join(', ');
    return [{
      label: 'Business name',
      value: data.name || ''
    }, {
      label: 'Industry',
      value: data.industry || ''
    }, {
      label: 'Description',
      value: data.description || ''
    }, {
      label: 'Physical address',
      value: physicalAddress
    }, {
      label: 'NAICS code',
      value: data.naicsCode || ''
    }, {
      label: 'Years in business',
      value: yearsInBusiness
    }, {
      label: 'Number of employees',
      value: data.businessEmployeeCount || ''
    }];
  }, [comprehensiveData]);

  // Prepare header and appointment display values without any sample fallback
  var contactFullName = comprehensiveData !== null && comprehensiveData !== void 0 && comprehensiveData.contactFirstName && comprehensiveData !== null && comprehensiveData !== void 0 && comprehensiveData.contactLastName ? "".concat(comprehensiveData.contactFirstName, " ").concat(comprehensiveData.contactLastName) : '';
  var appointmentWith = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData['Upcoming Appointment With']) || '';
  var appointmentDate = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData['Upcoming Appointment Date']) || '';
  var appointmentTime = (comprehensiveData === null || comprehensiveData === void 0 ? void 0 : comprehensiveData['Upcoming Appointment Time']) || '';
  var hasAppointment = Boolean(appointmentWith || appointmentDate && appointmentTime);

  // Build progress groups from live tasks like the borrower homepage
  var taskGroupsByAgreement = react__WEBPACK_IMPORTED_MODULE_1___default.a.useMemo(() => {
    if (!Array.isArray(tasksForContact) || tasksForContact.length === 0) return [];
    var groupsByAgreementId = new Map();
    var groups = [];
    var statusFromTaskStatus = taskStatus => {
      if (taskStatus === 'completed') return 'completed';
      if (taskStatus === 'in_progress') return 'in progress';
      return 'not started';
    };
    tasksForContact.forEach(task => {
      var agreementId = task.agreementId || task.agreementid;
      var key = agreementId || task.accountNumber || task.name || 'unknown';
      var group = groupsByAgreementId.get(key);
      if (!group) {
        var processTitle = 'Application';
        var companyOrBorrower = task.name || task.borrowerFullName || '';
        var acct = task.accountNumber || '';
        var title = "".concat(processTitle).concat(acct ? " (".concat(acct, ")") : '').concat(companyOrBorrower ? " for ".concat(companyOrBorrower) : '');
        group = {
          title,
          items: [],
          agreementId: agreementId || null
        };
        groupsByAgreementId.set(key, group);
        groups.push(group);
      }
      group.items.push({
        name: task.title || task.name || "Task ".concat(task.id),
        status: statusFromTaskStatus(task.taskStatus)
      });
    });
    return groups;
  }, [tasksForContact]);

  // TODO: Remove this once the API is implemented
  var testUpdateVerified = index => {
    setDocumentsList(prevDocuments => {
      var newDocuments = [...prevDocuments];
      newDocuments[index] = _objectSpread(_objectSpread({}, newDocuments[index]), {}, {
        verified: true
      });
      return newDocuments;
    });
  };
  var handleAddGoal = () => {
    console.log('Add goal clicked');
  };

  // Convert documents to DataTable format
  var documentsTableData = {
    data: {
      baseTable: {
        name: 'baseTable',
        order: 1,
        dataType: 'document',
        origin: 'documents',
        dataSource: documentsList,
        actions: [{
          label: 'Remove',
          onActionClick: props => {
            console.log('remove clicked for item at index', props === null || props === void 0 ? void 0 : props.index);
          },
          className: 'lw-btn-danger'
        }, {
          label: 'Preview',
          onActionClick: props => {
            console.log('preview clicked for item at index', props === null || props === void 0 ? void 0 : props.index);
          },
          className: 'lw-btn-light'
        }],
        visibleFields: [{
          field: 'documentName',
          headerText: 'Document name',
          textAlign: 'Left',
          minWidth: 200,
          width: 'auto',
          visible: true,
          order: 1,
          type: 'string'
        }, {
          field: 'dateUploaded',
          headerText: 'Date uploaded',
          textAlign: 'Left',
          minWidth: 160,
          width: 'auto',
          visible: true,
          order: 2,
          type: 'date',
          format: 'MM/dd/yyyy'
        }, {
          field: 'description',
          headerText: 'Description',
          textAlign: 'Left',
          minWidth: 200,
          width: 'auto',
          visible: true,
          order: 3,
          type: 'string'
        }, {
          field: 'documentOwner',
          headerText: 'Document owner',
          textAlign: 'Left',
          minWidth: 160,
          width: 'auto',
          visible: true,
          order: 4,
          type: 'string'
        }, {
          field: 'verified',
          headerText: 'Verified',
          textAlign: 'Center',
          width: 100,
          visible: true,
          order: 5,
          type: 'boolean'
        }],
        tableSettings: {
          allowPaging: true,
          allowSorting: true,
          allowFiltering: false,
          allowResizing: true,
          allowReordering: true,
          showColumnMenu: true,
          showColumnChooser: true,
          allowExcelExport: true,
          allowPdfExport: false,
          showActions: true,
          toolbar: ['Search', 'ColumnChooser', 'ExcelExport'],
          pageSettings: {
            pageSize: 8,
            pageSizes: [4, 8, 12, 16]
          },
          height: '300',
          rowHeight: 40,
          emptyRecordTemplate: '<div style="padding: 20px; text-align: center;">No documents found</div>'
        }
      }
    }
  };
  var showDocumentsSection = false;
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "container-fluid no-padding",
    style: {
      background: '#fafbfa',
      minHeight: '100vh'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 597,
      columnNumber: 5
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "lw-page-header",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 598,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-xs-12 flex-padding",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 599,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h1", {
    className: "page-title col-xs-12 col-md-10",
    style: {
      textAlign: 'left',
      color: '#fff',
      paddingLeft: '3rem'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 600,
      columnNumber: 11
    }
  }, isLoading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "lw-skeleton lw-skeleton-line lg",
    style: {
      width: '40%'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 604,
      columnNumber: 26
    }
  }) : contactFullName), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    class: "col-xs-12",
    style: {
      margin: '1rem 0rem 0.25rem',
      padding: '0.25rem 3rem',
      width: 'auto'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 606,
      columnNumber: 11
    }
  }, "Client since", ' ', comprehensiveData !== null && comprehensiveData !== void 0 && comprehensiveData.contactDateCreated ? new Date(comprehensiveData.contactDateCreated).toLocaleDateString('en-US', {
    month: '2-digit',
    day: '2-digit',
    year: '2-digit'
  }) : ''))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 618,
      columnNumber: 7
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 619,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-md-6 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 621,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 623,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_InfoCard__WEBPACK_IMPORTED_MODULE_11__["default"], {
    title: "Contact Information",
    actionLink: "/contacts/".concat(contactId),
    actionButton: "Edit",
    visibleCount: 7,
    auth: auth,
    accountName: accountName,
    accountConfig: accountConfig,
    apiActions: apiActions,
    loggedInMember: loggedInMember,
    items: !isLoading ? contactInfoItems : undefined,
    loading: isLoading,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 624,
      columnNumber: 15
    }
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 640,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_InfoCardVariant__WEBPACK_IMPORTED_MODULE_12__["default"], {
    title: "Current loans",
    items: !isLoading ? currentLoans : undefined,
    loading: isLoading,
    maxWidth: "100%",
    emptyText: "No current loans",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 641,
      columnNumber: 15
    }
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-md-6 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 652,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 654,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_InfoCardVariant__WEBPACK_IMPORTED_MODULE_12__["default"], {
    title: "Connections",
    seeAllLink: null,
    items: !connectionsLoading ? contactConnections : undefined,
    loading: connectionsLoading,
    maxWidth: "100%",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 655,
      columnNumber: 15
    }
  })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 683,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-md-8 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 684,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 686,
      columnNumber: 13
    }
  }, _div || (_div = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 687,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-0 text-bold lw-color-main-color",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 688,
      columnNumber: 17
    }
  }, "Tasks"))), taskGroupsByAgreement === null ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "p-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 691,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      background: '#f1f3f5',
      height: 14,
      width: '30%',
      borderRadius: 6,
      marginBottom: 12
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 692,
      columnNumber: 19
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      background: '#f1f3f5',
      height: 10,
      width: '90%',
      borderRadius: 6,
      marginBottom: 8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 693,
      columnNumber: 19
    }
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      background: '#f1f3f5',
      height: 10,
      width: '80%',
      borderRadius: 6,
      marginBottom: 8
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 694,
      columnNumber: 19
    }
  })) : taskGroupsByAgreement && taskGroupsByAgreement.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_ExpandableProgressGroup__WEBPACK_IMPORTED_MODULE_9__["default"], {
    title: "",
    expandAllText: "See all",
    collapseAllText: "Collapse all",
    groups: taskGroupsByAgreement,
    showExpandAll: false,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 697,
      columnNumber: 17
    }
  }) : _EmptyState || (_EmptyState = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_EmptyState__WEBPACK_IMPORTED_MODULE_8__["default"], {
    title: "No tasks yet",
    message: "Tasks assigned to this contact will appear here.",
    imageSrc: _images_zero_item_views_task_png__WEBPACK_IMPORTED_MODULE_15__["default"],
    __source: {
      fileName: _jsxFileName,
      lineNumber: 705,
      columnNumber: 17
    }
  })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-md-4 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 713,
      columnNumber: 11
    }
  }, hasAppointment && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 716,
      columnNumber: 15
    }
  }, _h || (_h = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-3 text-bold lw-color-main-color",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 717,
      columnNumber: 17
    }
  }, "Upcoming appointments")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-center",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 718,
      columnNumber: 17
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_InfoBox__WEBPACK_IMPORTED_MODULE_10__["default"], {
    title: "".concat(contactFullName, " has an upcoming appointment").concat(appointmentWith ? " with ".concat(appointmentWith) : ''),
    subTitle: "".concat(appointmentDate).concat(appointmentDate && appointmentTime ? ' at ' : '').concat(appointmentTime),
    button: "Reschedule",
    buttonAction: () => {},
    className: "lw-light-container",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 719,
      columnNumber: 19
    }
  }))))), showDocumentsSection && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 735,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-md-12 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 736,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 738,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 739,
      columnNumber: 17
    }
  }, _h2 || (_h2 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-0 text-bold lw-color-main-color",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 740,
      columnNumber: 19
    }
  }, "Documents")), !isLegacy && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    className: "lw-btn lw-btn-dark",
    onClick: handleAddDocument,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 742,
      columnNumber: 21
    }
  }, "Upload")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(DataTable, {
    tableData: documentsTableData,
    documents: documentsList,
    tableType: "documents",
    sql: false,
    legacy: false,
    emptyTitle: "No documents found",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 748,
      columnNumber: 17
    }
  })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "row",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 761,
      columnNumber: 9
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "col-md-12 mb-4",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 762,
      columnNumber: 11
    }
  }, _h3 || (_h3 = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", {
    className: "mb-3 text-bold lw-color-main-color",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 763,
      columnNumber: 13
    }
  }, "Recent activity")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_ActivityTimeline__WEBPACK_IMPORTED_MODULE_7__["default"], {
    wide: true,
    loadActivities: true,
    filterByContactId: contactId,
    role: loggedInMember ? 'lender' : 'borrower',
    auth: auth,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 764,
      columnNumber: 13
    }
  }))), !isLegacy && showUploadModal && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      position: 'fixed',
      top: 0,
      left: 0,
      right: 0,
      bottom: 0,
      backgroundColor: 'rgba(0, 0, 0, 0.5)',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      zIndex: 1050
    },
    onClick: handleCloseUploadModal,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 776,
      columnNumber: 11
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    style: {
      background: '#fff',
      borderRadius: '8px',
      padding: '24px',
      maxWidth: '600px',
      width: '90%',
      maxHeight: '90vh',
      overflow: 'auto'
    },
    onClick: e => e.stopPropagation(),
    __source: {
      fileName: _jsxFileName,
      lineNumber: 791,
      columnNumber: 13
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    className: "d-flex justify-content-between align-items-center mb-3",
    __source: {
      fileName: _jsxFileName,
      lineNumber: 803,
      columnNumber: 15
    }
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h4", {
    style: {
      margin: 0
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 804,
      columnNumber: 17
    }
  }, "Upload Document"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
    type: "button",
    className: "btn-close",
    onClick: handleCloseUploadModal,
    style: {
      background: 'none',
      border: 'none',
      fontSize: '24px',
      cursor: 'pointer',
      padding: '0',
      width: '24px',
      height: '24px',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center'
    },
    __source: {
      fileName: _jsxFileName,
      lineNumber: 805,
      columnNumber: 17
    }
  }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_UploadComponent__WEBPACK_IMPORTED_MODULE_14__["default"], {
    onUploadSuccess: handleUploadSuccess,
    agreementId: (currentLoans === null || currentLoans === void 0 || (_currentLoans$ = currentLoans[0]) === null || _currentLoans$ === void 0 || (_currentLoans$ = _currentLoans$.action) === null || _currentLoans$ === void 0 || (_currentLoans$ = _currentLoans$.href) === null || _currentLoans$ === void 0 ? void 0 : _currentLoans$.split('/')[2]) || null,
    __source: {
      fileName: _jsxFileName,
      lineNumber: 825,
      columnNumber: 15
    }
  })))));
};
var mapStateToProps = state => ({
  contact: state.contact || {},
  accountConfig: state.accountConfig || {},
  accountName: state.accountName,
  loggedInMember: state.loggedInMember,
  user: state.loggedInUser || {},
  members: state.members || []
});
var mapDispatchToProps = dispatch => ({
  apiActions: Object(redux__WEBPACK_IMPORTED_MODULE_5__["bindActionCreators"])(_actions_apiActions__WEBPACK_IMPORTED_MODULE_6__["apiActions"], dispatch)
});
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(Object(react_router_dom__WEBPACK_IMPORTED_MODULE_4__["withRouter"])(ContactPage)));
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "./node_modules/process/browser.js")))module.exports = JSON.parse("{\"title\":\"Validate Input Harness - currency\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Currency\",\"customMetadata\":{\"maskType\":\"currency\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - decimal\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Decimal\",\"customMetadata\":{\"maskType\":\"decimal\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Driver's License\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Driver's License\",\"customMetadata\":{\"maskType\":\"driversLicense\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - DUNS\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"DUNS\",\"customMetadata\":{\"maskType\":\"dunbradstreet\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - EIN\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"EIN\",\"customMetadata\":{\"maskType\":\"einNumber\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - integerCurrency\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Integer Currency\",\"customMetadata\":{\"maskType\":\"integerCurrency\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Last 4 of SSN\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Last 4 SSN\",\"customMetadata\":{\"maskType\":\"last4OfSocial\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Micro Deposit\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Micro Deposit\",\"customMetadata\":{\"maskType\":\"microDeposit\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Number\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Number\",\"customMetadata\":{\"maskType\":\"number\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Percentage\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Percentage\",\"customMetadata\":{\"maskType\":\"percentage\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Phone Number\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Phone Number\",\"customMetadata\":{\"maskType\":\"phoneNumber\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - SSN\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"SSN\",\"customMetadata\":{\"maskType\":\"socialSecurity\"}}]}]}");module.exports = JSON.parse("{\"title\":\"Validate Input Harness - Zip Code\",\"showQuestionNumbers\":\"off\",\"pages\":[{\"name\":\"page1\",\"elements\":[{\"type\":\"validate_input\",\"name\":\"maskedInput\",\"title\":\"Zip Code\",\"customMetadata\":{\"maskType\":\"zipCode\"}}]}]}");