@sarasanalytics-com/design-system 0.0.147 → 0.0.149

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +24 -24
  2. package/esm2022/interfaces/avatar-interface.mjs +1 -1
  3. package/esm2022/interfaces/button-interface.mjs +1 -1
  4. package/esm2022/interfaces/card-carousel-interface.mjs +1 -1
  5. package/esm2022/interfaces/chip-interface.mjs +1 -1
  6. package/esm2022/interfaces/form-layout.interface.mjs +1 -1
  7. package/esm2022/interfaces/grid-interface.mjs +1 -1
  8. package/esm2022/interfaces/guide-card-interface.mjs +1 -1
  9. package/esm2022/interfaces/header-interface.mjs +1 -1
  10. package/esm2022/interfaces/icon-interface.mjs +1 -1
  11. package/esm2022/interfaces/layout-section-interface.mjs +1 -1
  12. package/esm2022/interfaces/left-nav-interface.mjs +1 -1
  13. package/esm2022/interfaces/menu.interface.mjs +1 -1
  14. package/esm2022/interfaces/message-banner.mjs +1 -1
  15. package/esm2022/interfaces/option-interface.mjs +1 -1
  16. package/esm2022/interfaces/scrolling-card-interface.mjs +1 -1
  17. package/esm2022/interfaces/select-interface.mjs +1 -1
  18. package/esm2022/interfaces/status-dot.interface.mjs +1 -1
  19. package/esm2022/interfaces/tab-interface.mjs +1 -1
  20. package/esm2022/interfaces/toast-interface.mjs +1 -1
  21. package/esm2022/interfaces/typography-animation-interface.mjs +1 -1
  22. package/esm2022/lib/accordion/accordion.component.mjs +3 -3
  23. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  24. package/esm2022/lib/button/button.component.mjs +3 -3
  25. package/esm2022/lib/calendar-header/calendar-header.component.mjs +3 -3
  26. package/esm2022/lib/card/card-body/card-body.component.mjs +1 -1
  27. package/esm2022/lib/card/card-custom-header/card-custom-header.component.mjs +1 -1
  28. package/esm2022/lib/card/card-footer-actions/card-footer-actions.component.mjs +3 -3
  29. package/esm2022/lib/card/card-icon/card-icon.component.mjs +1 -1
  30. package/esm2022/lib/card/card-title-actions/card-title-actions.component.mjs +1 -1
  31. package/esm2022/lib/card/card.component.mjs +3 -3
  32. package/esm2022/lib/card/checkbox-card/checkbox-card.component.mjs +3 -3
  33. package/esm2022/lib/card/guide-card/guide-card.component.mjs +3 -3
  34. package/esm2022/lib/card/menu-card/menu-card.component.mjs +3 -3
  35. package/esm2022/lib/card/thumbnail-card/thumbnail-card.component.mjs +3 -3
  36. package/esm2022/lib/card-carousel/card-carousel.component.mjs +3 -3
  37. package/esm2022/lib/categories-nav/categories-nav.component.mjs +3 -3
  38. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  39. package/esm2022/lib/chips/chips.component.mjs +3 -3
  40. package/esm2022/lib/component-library.component.mjs +9 -9
  41. package/esm2022/lib/component-library.service.mjs +1 -1
  42. package/esm2022/lib/dashboard-loader/dashboard-loader.component.mjs +1 -1
  43. package/esm2022/lib/data-grid/data-grid.component.mjs +3 -3
  44. package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
  45. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  46. package/esm2022/lib/dropdown/category-dropdown/category-dropdown.component.mjs +239 -0
  47. package/esm2022/lib/dropdown/ng-select/ng-select.component.mjs +111 -0
  48. package/esm2022/lib/filter/filter.component.mjs +3 -3
  49. package/esm2022/lib/form-input/form-input.component.mjs +4 -5
  50. package/esm2022/lib/form-select/form-select.component.mjs +3 -3
  51. package/esm2022/lib/grid-cell/grid-cell.component.mjs +10 -10
  52. package/esm2022/lib/header/header.component.mjs +3 -3
  53. package/esm2022/lib/icon/icon.component.mjs +3 -3
  54. package/esm2022/lib/icon/icon.service.mjs +1 -1
  55. package/esm2022/lib/layout-section/layout-section.component.mjs +3 -3
  56. package/esm2022/lib/left-nav/left-nav.component.mjs +3 -3
  57. package/esm2022/lib/list/list.component.mjs +3 -3
  58. package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
  59. package/esm2022/lib/menu/menu.component.mjs +3 -3
  60. package/esm2022/lib/menu/menu.directive.mjs +1 -1
  61. package/esm2022/lib/message-banner/message-banner.component.mjs +3 -3
  62. package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +3 -3
  63. package/esm2022/lib/mini-card/mini-card.component.mjs +3 -3
  64. package/esm2022/lib/page-layout/page-layout.component.mjs +3 -3
  65. package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
  66. package/esm2022/lib/query-builder/query-builder-demo.component.mjs +45 -45
  67. package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
  68. package/esm2022/lib/query-builder/query-builder.service.mjs +1 -1
  69. package/esm2022/lib/query-builder-formly/query-builder-formly.component.mjs +191 -0
  70. package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +39 -39
  71. package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +3 -3
  72. package/esm2022/lib/radio-button/radio-button.component.mjs +3 -3
  73. package/esm2022/lib/scrolling-cards/scrolling-cards.component.mjs +3 -3
  74. package/esm2022/lib/skeleton/skeleton-base.component.mjs +1 -1
  75. package/esm2022/lib/skeleton/skeleton-container.component.mjs +9 -9
  76. package/esm2022/lib/skeleton/skeleton-loader.component.mjs +193 -193
  77. package/esm2022/lib/skeleton/skeleton-presets.mjs +1 -1
  78. package/esm2022/lib/skeleton/skeleton-shapes.component.mjs +1 -1
  79. package/esm2022/lib/spinner/spinner.component.mjs +1 -1
  80. package/esm2022/lib/status-dot/status-dot.component.mjs +17 -17
  81. package/esm2022/lib/stepper/stepper.component.mjs +3 -3
  82. package/esm2022/lib/tabs/tabs.component.mjs +3 -3
  83. package/esm2022/lib/toast/toast.component.mjs +3 -3
  84. package/esm2022/lib/tool-tip/tool-tip.component.mjs +3 -3
  85. package/esm2022/lib/typography-animation/typography-animation.component.mjs +3 -3
  86. package/esm2022/public-api.mjs +4 -1
  87. package/esm2022/utils/validators.mjs +1 -1
  88. package/fesm2022/sarasanalytics-com-design-system.mjs +890 -411
  89. package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
  90. package/lib/data-grid/data-grid.component.d.ts +1 -1
  91. package/lib/dropdown/category-dropdown/category-dropdown.component.d.ts +40 -0
  92. package/lib/dropdown/ng-select/ng-select.component.d.ts +20 -0
  93. package/lib/query-builder-formly/query-builder-formly.component.d.ts +81 -0
  94. package/package.json +1 -1
  95. package/public-api.d.ts +3 -0
  96. package/styles/styles.css +432 -460
@@ -209,11 +209,11 @@ export class FilterComponent {
209
209
  window.scrollTo({ top: 0, behavior: 'smooth' });
210
210
  }
211
211
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FilterComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
212
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FilterComponent, isStandalone: true, selector: "sa-filter", inputs: { config: "config", filterValues: "filterValues" }, outputs: { onClickEvent: "onClickEvent", filterSelected: "filterSelected", filterRemoved: "filterRemoved", dropdownToggled: "dropdownToggled" }, viewQueries: [{ propertyName: "filterByContent", first: true, predicate: ["filterByContent"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n\r\n <div class=\"filter-container\">\r\n <!-- Main Filter By Dropdown -->\r\n <div class=\"dropdown filter-by-dropdown\">\r\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\r\n 'filled-btn': config?.filterButtonStyle === 'filled',\r\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span>{{config?.filterLabel}}</span>\r\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </button>\r\n\r\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\r\n (touchend)=\"onTouchEnd()\">\r\n <div class=\"filter-section\">\r\n <!-- Dynamic Filter Items -->\r\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\r\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\r\n <span class=\"filter-label\">{{item.text}}</span>\r\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\r\n [size]=\"'16'\" \r\n [matTooltip]=\"item?.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\r\n </div>\r\n <ng-container *ngIf=\"item?.subMenu?.length\">\r\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\r\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\r\n [attr.data-value]=\"option.value\"\r\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\r\n (click)=\"selectFilter($event)\">\r\n <span>{{option.label}}</span>\r\n <div class=\"info-icon\" *ngIf=\"option.icon\">\r\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\r\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\r\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\r\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
212
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FilterComponent, isStandalone: true, selector: "sa-filter", inputs: { config: "config", filterValues: "filterValues" }, outputs: { onClickEvent: "onClickEvent", filterSelected: "filterSelected", filterRemoved: "filterRemoved", dropdownToggled: "dropdownToggled" }, viewQueries: [{ propertyName: "filterByContent", first: true, predicate: ["filterByContent"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\n\n <div class=\"filter-container\">\n <!-- Main Filter By Dropdown -->\n <div class=\"dropdown filter-by-dropdown\">\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\n 'filled-btn': config?.filterButtonStyle === 'filled',\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\n }\" (click)=\"toggleDropdown($event)\">\n <span>{{config?.filterLabel}}</span>\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\n </button>\n\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\n (touchend)=\"onTouchEnd()\">\n <div class=\"filter-section\">\n <!-- Dynamic Filter Items -->\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\n <span class=\"filter-label\">{{item.text}}</span>\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\n [size]=\"'16'\" \n [matTooltip]=\"item?.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\n </div>\n <ng-container *ngIf=\"item?.subMenu?.length\">\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\n [attr.data-value]=\"option.value\"\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\n (click)=\"selectFilter($event)\">\n <span>{{option.label}}</span>\n <div class=\"info-icon\" *ngIf=\"option.icon\">\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
213
213
  }
214
214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FilterComponent, decorators: [{
215
215
  type: Component,
216
- args: [{ selector: 'sa-filter', standalone: true, imports: [CommonModule, IconComponent, HttpClientModule, MatTooltipModule], template: "<div class=\"container\">\r\n\r\n <div class=\"filter-container\">\r\n <!-- Main Filter By Dropdown -->\r\n <div class=\"dropdown filter-by-dropdown\">\r\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\r\n 'filled-btn': config?.filterButtonStyle === 'filled',\r\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span>{{config?.filterLabel}}</span>\r\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </button>\r\n\r\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\r\n (touchend)=\"onTouchEnd()\">\r\n <div class=\"filter-section\">\r\n <!-- Dynamic Filter Items -->\r\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\r\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\r\n <span class=\"filter-label\">{{item.text}}</span>\r\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\r\n [size]=\"'16'\" \r\n [matTooltip]=\"item?.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\r\n </div>\r\n <ng-container *ngIf=\"item?.subMenu?.length\">\r\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\r\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\r\n [attr.data-value]=\"option.value\"\r\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\r\n (click)=\"selectFilter($event)\">\r\n <span>{{option.label}}</span>\r\n <div class=\"info-icon\" *ngIf=\"option.icon\">\r\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\r\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\r\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\r\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"] }]
216
+ args: [{ selector: 'sa-filter', standalone: true, imports: [CommonModule, IconComponent, HttpClientModule, MatTooltipModule], template: "<div class=\"container\">\n\n <div class=\"filter-container\">\n <!-- Main Filter By Dropdown -->\n <div class=\"dropdown filter-by-dropdown\">\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\n 'filled-btn': config?.filterButtonStyle === 'filled',\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\n }\" (click)=\"toggleDropdown($event)\">\n <span>{{config?.filterLabel}}</span>\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\n </button>\n\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\n (touchend)=\"onTouchEnd()\">\n <div class=\"filter-section\">\n <!-- Dynamic Filter Items -->\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\n <span class=\"filter-label\">{{item.text}}</span>\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\n [size]=\"'16'\" \n [matTooltip]=\"item?.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\n </div>\n <ng-container *ngIf=\"item?.subMenu?.length\">\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\n [attr.data-value]=\"option.value\"\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\n (click)=\"selectFilter($event)\">\n <span>{{option.label}}</span>\n <div class=\"info-icon\" *ngIf=\"option.icon\">\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\" \n class=\"tooltip-icon d-flex\"\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".filter-container{display:flex;gap:1rem;align-items:flex-start;flex-wrap:wrap}.dropdown{position:relative;display:flex}.dropdown-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;border-radius:6px;cursor:pointer;transition:all .2s ease-in-out}.filled-btn{background-color:#7f56d9;color:#fff;border:none;border-radius:4px}.outlined-btn{border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}.outlined-btn:hover{background-color:#f9fafb}.filter-by-btn{padding:0 12px;height:36px;cursor:pointer;display:flex;align-items:center;flex:1 0 0;font-size:.875rem;font-weight:500;transition:all .2s ease;min-width:120px;justify-content:space-between}.filter-by-btn span{font-family:var(--font-family, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.filter-by-btn:active{transform:translateY(0)}.filter-by-content{position:absolute;top:100%;left:0;min-width:-webkit-fill-available;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.dropdown.active .filter-by-content{opacity:1;visibility:visible;transform:translateY(0)}.filter-section{padding:0rem}.filter-item{border-bottom:1px solid #f3f4f6;position:relative}.filter-item:last-child{border-bottom:none}.filter-header{padding:.75rem .6rem;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s ease}.filter-header:hover{background:var(--Primary-50, #F4EBFF)}.filter-label{font-weight:500;color:#374151;font-size:.875rem}.filter-arrow{transition:transform .2s ease;color:#9ca3af}.filter-item.active{background:var(--Primary-50, #F4EBFF)}.filter-submenu{position:absolute;top:0;left:100%;background:#fff;border:1px solid #e5e7eb;min-width:169px;opacity:0;visibility:hidden;transform:translate(-10px);transition:all .2s ease;z-index:1001}.filter-submenu.show-left{left:auto;right:100%;transform:translate(10px);margin-left:0;margin-right:.5rem}.filter-item.active .filter-submenu{opacity:1;visibility:visible;transform:translate(0)}.filter-item.active .filter-submenu.show-left{transform:translate(0)}.filter-option{padding:.5rem;gap:4px;display:flex;align-items:center;cursor:pointer;transition:all .2s ease;align-self:stretch}.filter-option:hover,.filter-option.selected{background:var(--Primary-50, #F4EBFF)}.filter-option span{font-size:.875rem;color:#374151;margin-right:5px}.info-icon{opacity:.6;transition:opacity .2s ease;margin-top:5px}.info-icon:hover{opacity:1}.info-icon svg{width:14px;height:14px;color:#9ca3af}.add-user-btn{background:#7c3aed;color:#fff;border:none;padding:.75rem 1rem;border-radius:.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:all .2s ease}.selected-filters{background:#fff;padding:1.5rem;border-radius:.75rem;border:1px solid #e5e7eb;box-shadow:0 2px 8px #0000000d}@keyframes fadeIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.container{padding:1rem}.filter-container{flex-direction:column;align-items:stretch}.filter-by-content{position:fixed;top:auto;left:1rem;right:1rem;bottom:1rem;min-width:auto;max-height:70vh;overflow-y:auto}.filter-by-btn,.add-user-btn{width:100%;justify-content:center}.filter-submenu{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;max-width:90vw;max-height:60vh;overflow-y:auto}.filter-submenu.show-left{left:50%;right:auto;transform:translate(-50%,-50%);margin:0}.filter-item.active .filter-submenu,.filter-item.active .filter-submenu.show-left{transform:translate(-50%,-50%)}}.dropdown.filter-by-dropdown.active{border-radius:4px;border:1px solid var(--Primary-500, #7F56D9);background:var(--Structural-White, #FFF)}.filter-by-content{-webkit-overflow-scrolling:touch}\n"] }]
217
217
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { config: [{
218
218
  type: Input
219
219
  }], filterValues: [{
@@ -231,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
231
231
  }], dropdownToggled: [{
232
232
  type: Output
233
233
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFTN0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsSUFBMkIsWUFBWSxDQUFDLEtBQW1CO1FBQ3pELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQWdCRCxZQUFvQixRQUFtQixFQUFVLFdBQXVCO1FBQXBELGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTFCL0QsV0FBTSxHQUFpQjtZQUM5QixXQUFXLEVBQUUsV0FBVztZQUN4QixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7UUFVUSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ3BELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDMUQs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QUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E5T1UsZUFBZTtrR0FBZixlQUFlLHNZQ2I1Qiw0MkdBbURNLGc2SEQxQ00sWUFBWSw4VkFBRSxhQUFhLG9NQUFFLGdCQUFnQiw4QkFBRSxnQkFBZ0I7OzJGQUk5RCxlQUFlO2tCQVAzQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO3VHQU1qRSxNQUFNO3NCQUFkLEtBQUs7Z0JBTXFCLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsY0FBYztnQkFNUyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFbEIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYS1maWx0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgSHR0cENsaWVudE1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XHJcbiAgICBmaWx0ZXJMYWJlbDogJ0ZpbHRlciBieScsXHJcbiAgICBmaWx0ZXJCdXR0b25TdHlsZTogJ291dGxpbmVkJyxcclxuICAgIGZpbHRlckl0ZW1zOiBbXVxyXG4gIH07XHJcbiAgXHJcbiAgQElucHV0KCdmaWx0ZXJWYWx1ZXMnKSBzZXQgZmlsdGVyVmFsdWVzKHZhbHVlOiBGaWx0ZXJDb25maWcpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyQnlDb250ZW50JykgZmlsdGVyQnlDb250ZW50ITogRWxlbWVudFJlZjtcclxuICBcclxuICBAT3V0cHV0KCkgb25DbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDbGlja0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU2VsZWN0aW9uRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlclJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclJlbW92YWxFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZHJvcGRvd25Ub2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICB0b3VjaFN0YXJ0WSA9IDA7XHJcbiAgdG91Y2hFbmRZID0gMDtcclxuICBkcm9wZG93bkFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RlZEZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj4gPSB7fTtcclxuICBzdWJtZW51QWN0aXZlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlR2xvYmFsQ2xpY2soZSkpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgdGhpcy5jbG9zZUFsbCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHRoaXMuaGFuZGxlUmVzaXplKCkpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bicpO1xyXG4gICAgZHJvcGRvd24uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICB0aGlzLmRyb3Bkb3duQWN0aXZlID0gZHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKTtcclxuICAgIHRoaXMuZHJvcGRvd25Ub2dnbGVkLmVtaXQodGhpcy5kcm9wZG93bkFjdGl2ZSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTdWJtZW51KGVsZW1lbnQ6IGFueSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50SGVhZGVyID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBjdXJyZW50SGVhZGVyLmNsb3Nlc3QoJy5maWx0ZXItaXRlbScpO1xyXG5cclxuICAgIC8vIENsb3NlIGFsbCBvdGhlciBmaWx0ZXIgaXRlbXNcclxuICAgIGNvbnN0IGFsbEl0ZW1zID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpO1xyXG4gICAgYWxsSXRlbXMuZm9yRWFjaCgoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgICAgaWYgKGl0ZW0gIT09IGN1cnJlbnRJdGVtKSB7XHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVG9nZ2xlIHRoZSBjdXJyZW50IGl0ZW1cclxuICAgIGN1cnJlbnRJdGVtLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xyXG5cclxuICAgIC8vIElmIGl0J3Mgbm93IGFjdGl2ZSwgcG9zaXRpb24gaXRzIHN1Ym1lbnVcclxuICAgIGlmIChjdXJyZW50SXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XHJcbiAgICAgIGNvbnN0IHN1Ym1lbnUgPSBjdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCcuZmlsdGVyLXN1Ym1lbnUnKTtcclxuICAgICAgdGhpcy5wb3NpdGlvblN1Ym1lbnUoc3VibWVudSBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIExlZ2FjeSBldmVudFxyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQuZW1pdCh7IFxyXG4gICAgICBldmVudDogJ2NsaWNrJywgXHJcbiAgICAgIHR5cGU6ICdNZW51JywgXHJcbiAgICAgIGl0ZW06IGVsZW1lbnQsXHJcbiAgICAgIGZpbHRlclR5cGU6IGVsZW1lbnQsXHJcbiAgICAgIGlzQWN0aXZlOiBjdXJyZW50SXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUb2dnbGUgYWN0aXZlIHN0YXRlXHJcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuc3VibWVudUFjdGl2ZVtlbGVtZW50XTtcclxuICAgIHRoaXMuc3VibWVudUFjdGl2ZSA9IHt9OyAvLyBjbG9zZSBhbGxcclxuICAgIGlmICghaXNBY3RpdmUpIHtcclxuICAgICAgdGhpcy5zdWJtZW51QWN0aXZlW2VsZW1lbnRdID0gdHJ1ZTsgLy8gb3BlbiBjdXJyZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaWx0ZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBvcHRpb24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb24uZGF0YXNldFsndmFsdWUnXSB8fCAnJztcclxuICAgIGNvbnN0IHRleHQgPSBvcHRpb24ucXVlcnlTZWxlY3Rvcignc3BhbicpPy50ZXh0Q29udGVudCB8fCAnJztcclxuXHJcbiAgICAvLyBGaW5kIHBhcmVudCBzdWJtZW51IGFuZCBpdHMgZmlsdGVyIHR5cGVcclxuICAgIGNvbnN0IHN1Ym1lbnUgPSBvcHRpb24uY2xvc2VzdCgnLmZpbHRlci1zdWJtZW51JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIXN1Ym1lbnUgfHwgIXN1Ym1lbnUuaWQuZW5kc1dpdGgoJ1N1Ym1lbnUnKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlclR5cGUgPSBzdWJtZW51LmlkLnJlcGxhY2UoJ1N1Ym1lbnUnLCAnJyk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBmaWx0ZXIgaXMgYWxyZWFkeSBzZWxlY3RlZCAodG9nZ2xlIGZ1bmN0aW9uYWxpdHkpXHJcbiAgICBjb25zdCBpc0N1cnJlbnRseVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEZpbHRlcnNbZmlsdGVyVHlwZV0gJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyc1tmaWx0ZXJUeXBlXS52YWx1ZSA9PT0gdmFsdWU7XHJcblxyXG4gICAgaWYgKGlzQ3VycmVudGx5U2VsZWN0ZWQpIHtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBmaWx0ZXIgaWYgaXQncyBhbHJlYWR5IHNlbGVjdGVkXHJcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKGZpbHRlclR5cGUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVzZWxlY3QgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51XHJcbiAgICBzdWJtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9uJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcclxuXHJcbiAgICAvLyBTZWxlY3QgdGhlIGNsaWNrZWQgb3B0aW9uXHJcbiAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcclxuXHJcbiAgICAvLyBTdG9yZSBzZWxlY3RlZCBmaWx0ZXJcclxuICAgIGNvbnN0IHNlbGVjdGlvbjogRmlsdGVyU2VsZWN0aW9uID0geyB2YWx1ZSwgdGV4dCwgZmlsdGVyVHlwZSB9O1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnNbZmlsdGVyVHlwZV0gPSBzZWxlY3Rpb247XHJcblxyXG4gICAgLy8gRW1pdCBlbmhhbmNlZCBldmVudHNcclxuICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgIGZpbHRlclR5cGUsXHJcbiAgICAgIHNlbGVjdGlvbixcclxuICAgICAgYWxsU2VsZWN0aW9uczogeyAuLi50aGlzLnNlbGVjdGVkRmlsdGVycyB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBMZWdhY3kgZXZlbnRcclxuICAgIHRoaXMub25DbGlja0V2ZW50LmVtaXQoeyBcclxuICAgICAgZXZlbnQ6ICdjbGljaycsIFxyXG4gICAgICB0eXBlOiAnU3ViIE1lbnUnLCBcclxuICAgICAgaXRlbTogdmFsdWUsXHJcbiAgICAgIGZpbHRlclR5cGUsXHJcbiAgICAgIHNlbGVjdGlvblxyXG4gICAgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlQWxsKCksIDEwMCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWx0ZXIodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZW1vdmVkU2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEZpbHRlcnNbdHlwZV07XHJcbiAgICBkZWxldGUgdGhpcy5zZWxlY3RlZEZpbHRlcnNbdHlwZV07XHJcbiAgICBcclxuICAgIGNvbnN0IHN1Ym1lbnUgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dHlwZX1TdWJtZW51YCk7XHJcbiAgICBpZiAoc3VibWVudSkge1xyXG4gICAgICBzdWJtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9uJykuZm9yRWFjaCgob3B0OiBIVE1MRWxlbWVudCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVtaXQgcmVtb3ZhbCBldmVudFxyXG4gICAgdGhpcy5maWx0ZXJSZW1vdmVkLmVtaXQoe1xyXG4gICAgICBmaWx0ZXJUeXBlOiB0eXBlLFxyXG4gICAgICByZW1vdmVkU2VsZWN0aW9uLFxyXG4gICAgICByZW1haW5pbmdTZWxlY3Rpb25zOiB7IC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIGZpbHRlciBvcHRpb24gaXMgc2VsZWN0ZWRcclxuICBpc0ZpbHRlck9wdGlvblNlbGVjdGVkKGZpbHRlclR5cGU6IHN0cmluZywgb3B0aW9uVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdICYmIFxyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdLnZhbHVlID09PSBvcHRpb25WYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIFB1YmxpYyBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgc2VsZWN0aW9uc1xyXG4gIGdldFNlbGVjdGVkRmlsdGVycygpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJTZWxlY3Rpb24+IHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzIH07XHJcbiAgfVxyXG5cclxuICAvLyBQdWJsaWMgbWV0aG9kIHRvIGNsZWFyIGFsbCBmaWx0ZXJzXHJcbiAgY2xlYXJBbGxGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZEZpbHRlcnMpLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKHR5cGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBQdWJsaWMgbWV0aG9kIHRvIHNldCBmaWx0ZXJzIHByb2dyYW1tYXRpY2FsbHlcclxuICBzZXRGaWx0ZXJzKGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj4pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0geyAuLi5maWx0ZXJzIH07XHJcbiAgICAvLyBVcGRhdGUgVUkgdG8gcmVmbGVjdCBzZWxlY3Rpb25zXHJcbiAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzKS5mb3JFYWNoKChbdHlwZSwgc2VsZWN0aW9uXSkgPT4ge1xyXG4gICAgICBjb25zdCBzdWJtZW51ID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3R5cGV9U3VibWVudWApO1xyXG4gICAgICBpZiAoc3VibWVudSkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHN1Ym1lbnUucXVlcnlTZWxlY3RvcihgW2RhdGEtdmFsdWU9XCIke3NlbGVjdGlvbi52YWx1ZX1cIl1gKTtcclxuICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VBbGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkcm9wZG93biA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24nKTtcclxuICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUdsb2JhbENsaWNrKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvc2l0aW9uU3VibWVudShzdWJtZW51OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKCFzdWJtZW51KSByZXR1cm47XHJcbiAgICBzdWJtZW51LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3ctbGVmdCcpO1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2OCkgcmV0dXJuO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBzdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBpZiAocmVjdC5sZWZ0ICsgc3VibWVudS5vZmZzZXRXaWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoIC0gMjApIHtcclxuICAgICAgICBzdWJtZW51LmNsYXNzTGlzdC5hZGQoJ3Nob3ctbGVmdCcpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUoKTogdm9pZCB7XHJcbiAgICBjbGVhclRpbWVvdXQoKHRoaXMgYXMgYW55KS5fcmVzaXplVGltZW91dCk7XHJcbiAgICAodGhpcyBhcyBhbnkpLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlQWxsKCksIDI1MCk7XHJcbiAgfVxyXG5cclxuICBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy50b3VjaFN0YXJ0WSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWTtcclxuICB9XHJcblxyXG4gIG9uVG91Y2hFbmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdWNoRW5kWSA9IGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudCA/IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblkgOiAwO1xyXG4gICAgdGhpcy5oYW5kbGVTd2lwZUdlc3R1cmUoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVN3aXBlR2VzdHVyZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN3aXBlVGhyZXNob2xkID0gNTA7XHJcbiAgICBjb25zdCBzd2lwZURpc3RhbmNlID0gdGhpcy50b3VjaFN0YXJ0WSAtIHRoaXMudG91Y2hFbmRZO1xyXG4gICAgaWYgKHN3aXBlRGlzdGFuY2UgPCAtc3dpcGVUaHJlc2hvbGQgJiYgdGhpcy5maWx0ZXJCeUNvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duJyk7XHJcbiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc21vb3RoU2Nyb2xsVG9Ub3AoKTogdm9pZCB7XHJcbiAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICB9XHJcblxyXG59XHJcblxyXG4vLyBFbmhhbmNlZCBpbnRlcmZhY2VzXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZmlnIHtcclxuICBmaWx0ZXJMYWJlbDogc3RyaW5nO1xyXG4gIGZpbHRlckJ1dHRvblN0eWxlPzogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnO1xyXG4gIGZpbHRlckl0ZW1zOiBGaWx0ZXJDYXRlZ29yeVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNhdGVnb3J5IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBzdWJNZW51PzogRmlsdGVyT3B0aW9uW107XHJcbiAgdG9vbHRpcD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICB0b29sdGlwPzogc3RyaW5nO1xyXG4gIGljb24/OiB7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBzaXplOiBzdHJpbmc7XHJcbiAgICBpY29uUGF0aD86IHN0cmluZztcclxuICAgIGljb25Vcmw/OiBzdHJpbmc7XHJcbiAgICBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICAgIHRvb2x0aXA/OiBzdHJpbmc7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTZWxlY3Rpb24ge1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGZpbHRlclR5cGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDbGlja0V2ZW50IHtcclxuICBldmVudDogc3RyaW5nO1xyXG4gIHR5cGU6ICdNZW51JyB8ICdTdWIgTWVudSc7XHJcbiAgaXRlbTogYW55O1xyXG4gIGZpbHRlclR5cGU/OiBzdHJpbmc7XHJcbiAgc2VsZWN0aW9uPzogRmlsdGVyU2VsZWN0aW9uO1xyXG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTZWxlY3Rpb25FdmVudCB7XHJcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGlvbjogRmlsdGVyU2VsZWN0aW9uO1xyXG4gIGFsbFNlbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUmVtb3ZhbEV2ZW50IHtcclxuICBmaWx0ZXJUeXBlOiBzdHJpbmc7XHJcbiAgcmVtb3ZlZFNlbGVjdGlvbj86IEZpbHRlclNlbGVjdGlvbjtcclxuICByZW1haW5pbmdTZWxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJTZWxlY3Rpb24+O1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS0gTWFpbiBGaWx0ZXIgQnkgRHJvcGRvd24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIGZpbHRlci1ieS1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24tYnRuIGZpbHRlci1ieS1idG5cIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnZmlsbGVkLWJ0bic6IGNvbmZpZz8uZmlsdGVyQnV0dG9uU3R5bGUgPT09ICdmaWxsZWQnLFxyXG4gICAgICAgICAgICAgICAgJ291dGxpbmVkLWJ0bic6IGNvbmZpZz8uZmlsdGVyQnV0dG9uU3R5bGUgPT09ICdvdXRsaW5lZCdcclxuICAgICAgICAgICAgfVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2NvbmZpZz8uZmlsdGVyTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIFtpY29uXT1cIidkb3duQ2hldnJvbk91dGxpbmVkJ1wiIFtzaXplXT1cIicyMCdcIj48L3NhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRlbnQgZmlsdGVyLWJ5LWNvbnRlbnRcIiAjZmlsdGVyQnlDb250ZW50ICh0b3VjaHN0YXJ0KT1cIm9uVG91Y2hTdGFydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvblRvdWNoRW5kKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBGaWx0ZXIgSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb25maWc/LmZpbHRlckl0ZW1zXCIgY2xhc3M9XCJmaWx0ZXItaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWhlYWRlclwiIFtpZF09XCJpdGVtLnRleHQrJ0hlYWRlcidcIiAoY2xpY2spPVwidG9nZ2xlU3VibWVudShpdGVtLnRleHQsJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItbGFiZWxcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtPy5zdWJNZW51Py5sZW5ndGhcIiBbaWNvbl09XCIncmlnaHRDaGV2cm9uT3V0bGluZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInMTYnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXRlbT8udG9vbHRpcCB8fCAnJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFpdGVtPy50b29sdGlwXCI+PC9zYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0/LnN1Yk1lbnU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1zdWJtZW51XCIgW2lkXT1cIml0ZW0udGV4dCsnU3VibWVudSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbS5zdWJNZW51XCIgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS12YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogaXNGaWx0ZXJPcHRpb25TZWxlY3RlZChpdGVtLmlkLCBvcHRpb24udmFsdWUpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e29wdGlvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1pY29uXCIgKm5nSWY9XCJvcHRpb24uaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwib3B0aW9uLmljb24uaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25QYXRoXT1cIm9wdGlvbi5pY29uLmljb25QYXRoXCIgW2ljb25VcmxdPVwib3B0aW9uLmljb24uaWNvblVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwib3B0aW9uLmljb24uc2l6ZVwiIFtjdXN0b21DbGFzc109XCJvcHRpb24uaWNvbi5jdXN0b21DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwib3B0aW9uLmRlc2NyaXB0aW9uIHx8IG9wdGlvbi50b29sdGlwIHx8IG9wdGlvbi5pY29uLnRvb2x0aXAgfHwgJydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhKG9wdGlvbi5kZXNjcmlwdGlvbiB8fCBvcHRpb24udG9vbHRpcCB8fCBvcHRpb24uaWNvbi50b29sdGlwKVwiPjwvc2EtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFTN0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsSUFBMkIsWUFBWSxDQUFDLEtBQW1CO1FBQ3pELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQWdCRCxZQUFvQixRQUFtQixFQUFVLFdBQXVCO1FBQXBELGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTFCL0QsV0FBTSxHQUFpQjtZQUM5QixXQUFXLEVBQUUsV0FBVztZQUN4QixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7UUFVUSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ3BELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDMUQs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QUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E5T1UsZUFBZTtrR0FBZixlQUFlLHNZQ2I1Qixzd0dBbURNLGc2SEQxQ00sWUFBWSw4VkFBRSxhQUFhLG9NQUFFLGdCQUFnQiw4QkFBRSxnQkFBZ0I7OzJGQUk5RCxlQUFlO2tCQVAzQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO3VHQU1qRSxNQUFNO3NCQUFkLEtBQUs7Z0JBTXFCLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsY0FBYztnQkFNUyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFbEIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgSHR0cENsaWVudE1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgY29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XG4gICAgZmlsdGVyTGFiZWw6ICdGaWx0ZXIgYnknLFxuICAgIGZpbHRlckJ1dHRvblN0eWxlOiAnb3V0bGluZWQnLFxuICAgIGZpbHRlckl0ZW1zOiBbXVxuICB9O1xuICBcbiAgQElucHV0KCdmaWx0ZXJWYWx1ZXMnKSBzZXQgZmlsdGVyVmFsdWVzKHZhbHVlOiBGaWx0ZXJDb25maWcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyQnlDb250ZW50JykgZmlsdGVyQnlDb250ZW50ITogRWxlbWVudFJlZjtcbiAgXG4gIEBPdXRwdXQoKSBvbkNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU2VsZWN0aW9uRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJSZW1vdmFsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcm9wZG93blRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgdG91Y2hTdGFydFkgPSAwO1xuICB0b3VjaEVuZFkgPSAwO1xuICBkcm9wZG93bkFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkRmlsdGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyU2VsZWN0aW9uPiA9IHt9O1xuICBzdWJtZW51QWN0aXZlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVHbG9iYWxDbGljayhlKSk7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHRoaXMuY2xvc2VBbGwoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHRoaXMuaGFuZGxlUmVzaXplKCkpO1xuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duJyk7XG4gICAgZHJvcGRvd24uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG4gICAgdGhpcy5kcm9wZG93bkFjdGl2ZSA9IGRyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJyk7XG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZWQuZW1pdCh0aGlzLmRyb3Bkb3duQWN0aXZlKTtcbiAgfVxuXG4gIHRvZ2dsZVN1Ym1lbnUoZWxlbWVudDogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IGN1cnJlbnRIZWFkZXIgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBjdXJyZW50SGVhZGVyLmNsb3Nlc3QoJy5maWx0ZXItaXRlbScpO1xuXG4gICAgLy8gQ2xvc2UgYWxsIG90aGVyIGZpbHRlciBpdGVtc1xuICAgIGNvbnN0IGFsbEl0ZW1zID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpO1xuICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXRlbSAhPT0gY3VycmVudEl0ZW0pIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRvZ2dsZSB0aGUgY3VycmVudCBpdGVtXG4gICAgY3VycmVudEl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG5cbiAgICAvLyBJZiBpdCdzIG5vdyBhY3RpdmUsIHBvc2l0aW9uIGl0cyBzdWJtZW51XG4gICAgaWYgKGN1cnJlbnRJdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcbiAgICAgIGNvbnN0IHN1Ym1lbnUgPSBjdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCcuZmlsdGVyLXN1Ym1lbnUnKTtcbiAgICAgIHRoaXMucG9zaXRpb25TdWJtZW51KHN1Ym1lbnUgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgICBcbiAgICAvLyBMZWdhY3kgZXZlbnRcbiAgICB0aGlzLm9uQ2xpY2tFdmVudC5lbWl0KHsgXG4gICAgICBldmVudDogJ2NsaWNrJywgXG4gICAgICB0eXBlOiAnTWVudScsIFxuICAgICAgaXRlbTogZWxlbWVudCxcbiAgICAgIGZpbHRlclR5cGU6IGVsZW1lbnQsXG4gICAgICBpc0FjdGl2ZTogY3VycmVudEl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKVxuICAgIH0pO1xuXG4gICAgLy8gVG9nZ2xlIGFjdGl2ZSBzdGF0ZVxuICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5zdWJtZW51QWN0aXZlW2VsZW1lbnRdO1xuICAgIHRoaXMuc3VibWVudUFjdGl2ZSA9IHt9OyAvLyBjbG9zZSBhbGxcbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICB0aGlzLnN1Ym1lbnVBY3RpdmVbZWxlbWVudF0gPSB0cnVlOyAvLyBvcGVuIGN1cnJlbnRcbiAgICB9XG4gIH1cblxuICBzZWxlY3RGaWx0ZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBvcHRpb24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uLmRhdGFzZXRbJ3ZhbHVlJ10gfHwgJyc7XG4gICAgY29uc3QgdGV4dCA9IG9wdGlvbi5xdWVyeVNlbGVjdG9yKCdzcGFuJyk/LnRleHRDb250ZW50IHx8ICcnO1xuXG4gICAgLy8gRmluZCBwYXJlbnQgc3VibWVudSBhbmQgaXRzIGZpbHRlciB0eXBlXG4gICAgY29uc3Qgc3VibWVudSA9IG9wdGlvbi5jbG9zZXN0KCcuZmlsdGVyLXN1Ym1lbnUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIXN1Ym1lbnUgfHwgIXN1Ym1lbnUuaWQuZW5kc1dpdGgoJ1N1Ym1lbnUnKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsdGVyVHlwZSA9IHN1Ym1lbnUuaWQucmVwbGFjZSgnU3VibWVudScsICcnKTtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgZmlsdGVyIGlzIGFscmVhZHkgc2VsZWN0ZWQgKHRvZ2dsZSBmdW5jdGlvbmFsaXR5KVxuICAgIGNvbnN0IGlzQ3VycmVudGx5U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkRmlsdGVyc1tmaWx0ZXJUeXBlXSAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyc1tmaWx0ZXJUeXBlXS52YWx1ZSA9PT0gdmFsdWU7XG5cbiAgICBpZiAoaXNDdXJyZW50bHlTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBmaWx0ZXIgaWYgaXQncyBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZXNlbGVjdCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnVcbiAgICBzdWJtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9uJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcblxuICAgIC8vIFNlbGVjdCB0aGUgY2xpY2tlZCBvcHRpb25cbiAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcblxuICAgIC8vIFN0b3JlIHNlbGVjdGVkIGZpbHRlclxuICAgIGNvbnN0IHNlbGVjdGlvbjogRmlsdGVyU2VsZWN0aW9uID0geyB2YWx1ZSwgdGV4dCwgZmlsdGVyVHlwZSB9O1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdID0gc2VsZWN0aW9uO1xuXG4gICAgLy8gRW1pdCBlbmhhbmNlZCBldmVudHNcbiAgICB0aGlzLmZpbHRlclNlbGVjdGVkLmVtaXQoe1xuICAgICAgZmlsdGVyVHlwZSxcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIGFsbFNlbGVjdGlvbnM6IHsgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMgfVxuICAgIH0pO1xuXG4gICAgLy8gTGVnYWN5IGV2ZW50XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQuZW1pdCh7IFxuICAgICAgZXZlbnQ6ICdjbGljaycsIFxuICAgICAgdHlwZTogJ1N1YiBNZW51JywgXG4gICAgICBpdGVtOiB2YWx1ZSxcbiAgICAgIGZpbHRlclR5cGUsXG4gICAgICBzZWxlY3Rpb25cbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZUFsbCgpLCAxMDApO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlbW92ZWRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkRmlsdGVyc1t0eXBlXTtcbiAgICBkZWxldGUgdGhpcy5zZWxlY3RlZEZpbHRlcnNbdHlwZV07XG4gICAgXG4gICAgY29uc3Qgc3VibWVudSA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0eXBlfVN1Ym1lbnVgKTtcbiAgICBpZiAoc3VibWVudSkge1xuICAgICAgc3VibWVudS5xdWVyeVNlbGVjdG9yQWxsKCcuZmlsdGVyLW9wdGlvbicpLmZvckVhY2goKG9wdDogSFRNTEVsZW1lbnQpID0+IG9wdC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IHJlbW92YWwgZXZlbnRcbiAgICB0aGlzLmZpbHRlclJlbW92ZWQuZW1pdCh7XG4gICAgICBmaWx0ZXJUeXBlOiB0eXBlLFxuICAgICAgcmVtb3ZlZFNlbGVjdGlvbixcbiAgICAgIHJlbWFpbmluZ1NlbGVjdGlvbnM6IHsgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIGZpbHRlciBvcHRpb24gaXMgc2VsZWN0ZWRcbiAgaXNGaWx0ZXJPcHRpb25TZWxlY3RlZChmaWx0ZXJUeXBlOiBzdHJpbmcsIG9wdGlvblZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlcnNbZmlsdGVyVHlwZV0gJiYgXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzW2ZpbHRlclR5cGVdLnZhbHVlID09PSBvcHRpb25WYWx1ZTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgc2VsZWN0aW9uc1xuICBnZXRTZWxlY3RlZEZpbHRlcnMoKTogUmVjb3JkPHN0cmluZywgRmlsdGVyU2VsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMgfTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBtZXRob2QgdG8gY2xlYXIgYWxsIGZpbHRlcnNcbiAgY2xlYXJBbGxGaWx0ZXJzKCk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVGaWx0ZXIodHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQdWJsaWMgbWV0aG9kIHRvIHNldCBmaWx0ZXJzIHByb2dyYW1tYXRpY2FsbHlcbiAgc2V0RmlsdGVycyhmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJTZWxlY3Rpb24+KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMgPSB7IC4uLmZpbHRlcnMgfTtcbiAgICAvLyBVcGRhdGUgVUkgdG8gcmVmbGVjdCBzZWxlY3Rpb25zXG4gICAgT2JqZWN0LmVudHJpZXMoZmlsdGVycykuZm9yRWFjaCgoW3R5cGUsIHNlbGVjdGlvbl0pID0+IHtcbiAgICAgIGNvbnN0IHN1Ym1lbnUgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dHlwZX1TdWJtZW51YCk7XG4gICAgICBpZiAoc3VibWVudSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzdWJtZW51LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXZhbHVlPVwiJHtzZWxlY3Rpb24udmFsdWV9XCJdYCk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duJyk7XG4gICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItaXRlbScpLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgfVxuXG4gIGhhbmRsZUdsb2JhbENsaWNrKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRyb3Bkb3duJykpIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgICB9XG4gIH1cblxuICBwb3NpdGlvblN1Ym1lbnUoc3VibWVudTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXN1Ym1lbnUpIHJldHVybjtcbiAgICBzdWJtZW51LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3ctbGVmdCcpO1xuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA3NjgpIHJldHVybjtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBzdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHJlY3QubGVmdCArIHN1Ym1lbnUub2Zmc2V0V2lkdGggPiB3aW5kb3cuaW5uZXJXaWR0aCAtIDIwKSB7XG4gICAgICAgIHN1Ym1lbnUuY2xhc3NMaXN0LmFkZCgnc2hvdy1sZWZ0Jyk7XG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbiAgaGFuZGxlUmVzaXplKCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCgodGhpcyBhcyBhbnkpLl9yZXNpemVUaW1lb3V0KTtcbiAgICAodGhpcyBhcyBhbnkpLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlQWxsKCksIDI1MCk7XG4gIH1cblxuICBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hTdGFydFkgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblk7XG4gIH1cblxuICBvblRvdWNoRW5kKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hFbmRZID0gZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50ID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWSA6IDA7XG4gICAgdGhpcy5oYW5kbGVTd2lwZUdlc3R1cmUoKTtcbiAgfVxuXG4gIGhhbmRsZVN3aXBlR2VzdHVyZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzd2lwZVRocmVzaG9sZCA9IDUwO1xuICAgIGNvbnN0IHN3aXBlRGlzdGFuY2UgPSB0aGlzLnRvdWNoU3RhcnRZIC0gdGhpcy50b3VjaEVuZFk7XG4gICAgaWYgKHN3aXBlRGlzdGFuY2UgPCAtc3dpcGVUaHJlc2hvbGQgJiYgdGhpcy5maWx0ZXJCeUNvbnRlbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bicpO1xuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgc21vb3RoU2Nyb2xsVG9Ub3AoKTogdm9pZCB7XG4gICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gIH1cblxufVxuXG4vLyBFbmhhbmNlZCBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmZpZyB7XG4gIGZpbHRlckxhYmVsOiBzdHJpbmc7XG4gIGZpbHRlckJ1dHRvblN0eWxlPzogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnO1xuICBmaWx0ZXJJdGVtczogRmlsdGVyQ2F0ZWdvcnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDYXRlZ29yeSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgc3ViTWVudT86IEZpbHRlck9wdGlvbltdO1xuICB0b29sdGlwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck9wdGlvbiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBpY29uPzoge1xuICAgIGljb246IHN0cmluZztcbiAgICBzaXplOiBzdHJpbmc7XG4gICAgaWNvblBhdGg/OiBzdHJpbmc7XG4gICAgaWNvblVybD86IHN0cmluZztcbiAgICBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgICB0b29sdGlwPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclNlbGVjdGlvbiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNsaWNrRXZlbnQge1xuICBldmVudDogc3RyaW5nO1xuICB0eXBlOiAnTWVudScgfCAnU3ViIE1lbnUnO1xuICBpdGVtOiBhbnk7XG4gIGZpbHRlclR5cGU/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbj86IEZpbHRlclNlbGVjdGlvbjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclNlbGVjdGlvbkV2ZW50IHtcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xuICBzZWxlY3Rpb246IEZpbHRlclNlbGVjdGlvbjtcbiAgYWxsU2VsZWN0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyU2VsZWN0aW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJSZW1vdmFsRXZlbnQge1xuICBmaWx0ZXJUeXBlOiBzdHJpbmc7XG4gIHJlbW92ZWRTZWxlY3Rpb24/OiBGaWx0ZXJTZWxlY3Rpb247XG4gIHJlbWFpbmluZ1NlbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj47XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8IS0tIE1haW4gRmlsdGVyIEJ5IERyb3Bkb3duIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gZmlsdGVyLWJ5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24tYnRuIGZpbHRlci1ieS1idG5cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2ZpbGxlZC1idG4nOiBjb25maWc/LmZpbHRlckJ1dHRvblN0eWxlID09PSAnZmlsbGVkJyxcbiAgICAgICAgICAgICAgICAnb3V0bGluZWQtYnRuJzogY29uZmlnPy5maWx0ZXJCdXR0b25TdHlsZSA9PT0gJ291dGxpbmVkJ1xuICAgICAgICAgICAgfVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tjb25maWc/LmZpbHRlckxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiJ2Rvd25DaGV2cm9uT3V0bGluZWQnXCIgW3NpemVdPVwiJzIwJ1wiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGVudCBmaWx0ZXItYnktY29udGVudFwiICNmaWx0ZXJCeUNvbnRlbnQgKHRvdWNoc3RhcnQpPVwib25Ub3VjaFN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvblRvdWNoRW5kKClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljIEZpbHRlciBJdGVtcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb25maWc/LmZpbHRlckl0ZW1zXCIgY2xhc3M9XCJmaWx0ZXItaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkZXJcIiBbaWRdPVwiaXRlbS50ZXh0KydIZWFkZXInXCIgKGNsaWNrKT1cInRvZ2dsZVN1Ym1lbnUoaXRlbS50ZXh0LCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1sYWJlbFwiPnt7aXRlbS50ZXh0fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtPy5zdWJNZW51Py5sZW5ndGhcIiBbaWNvbl09XCIncmlnaHRDaGV2cm9uT3V0bGluZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJzE2J1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpdGVtPy50b29sdGlwIHx8ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWl0ZW0/LnRvb2x0aXBcIj48L3NhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtPy5zdWJNZW51Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXN1Ym1lbnVcIiBbaWRdPVwiaXRlbS50ZXh0KydTdWJtZW51J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbS5zdWJNZW51XCIgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiBpc0ZpbHRlck9wdGlvblNlbGVjdGVkKGl0ZW0uaWQsIG9wdGlvbi52YWx1ZSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tvcHRpb24ubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWljb25cIiAqbmdJZj1cIm9wdGlvbi5pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwib3B0aW9uLmljb24uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uUGF0aF09XCJvcHRpb24uaWNvbi5pY29uUGF0aFwiIFtpY29uVXJsXT1cIm9wdGlvbi5pY29uLmljb25VcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJvcHRpb24uaWNvbi5zaXplXCIgW2N1c3RvbUNsYXNzXT1cIm9wdGlvbi5pY29uLmN1c3RvbUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwib3B0aW9uLmRlc2NyaXB0aW9uIHx8IG9wdGlvbi50b29sdGlwIHx8IG9wdGlvbi5pY29uLnRvb2x0aXAgfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhKG9wdGlvbi5kZXNjcmlwdGlvbiB8fCBvcHRpb24udG9vbHRpcCB8fCBvcHRpb24uaWNvbi50b29sdGlwKVwiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -37,8 +37,7 @@ export class FormInputComponent extends FieldType {
37
37
  };
38
38
  }
39
39
  ngOnInit() {
40
- this.inputVal =
41
- this.field.props['value'] || this.model[this.key] || '';
40
+ this.inputVal = _get(this.field.props, 'value', _get(this.model, this.key)) || '';
42
41
  this.disabled = this.field.props.disabled || false;
43
42
  this.formControl?.setValue(this.inputVal);
44
43
  this.params = this.params || this.field.props['params'];
@@ -292,7 +291,7 @@ export class FormInputComponent extends FieldType {
292
291
  }
293
292
  }
294
293
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
295
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormInputComponent, isStandalone: true, selector: "sa-input", inputs: { icon: "icon", params: "params" }, viewQueries: [{ propertyName: "formInput", first: true, predicate: ["formInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-input-container {{props?.['inputContainerClass']}}\" [ngStyle]=\"{'gap': getLabelFieldGap()}\">\r\n @if (!!props?.['bigLabel'] || !!props?.['bigDescription']) {\r\n <div class=\"sa-input-big-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <h2 class=\"sa-input-big-label\">\r\n {{props?.['bigLabel']}}\r\n </h2>\r\n <p class=\"sa-input-big-description\">\r\n {{props?.['bigDescription']}}\r\n </p>\r\n </div>\r\n }\r\n @if(!!props?.['label']){\r\n <div class=\"sa-input-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <div class=\"sa-input-label-tooltip-container\">\r\n <span class=\"sa-input-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-input-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-input\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n @if((pretext || (!!inputVal?.length && (!!params?.placeholder || !!props?.placeholder))) && props?.['showTag']\r\n !== false){\r\n <span class=\"sa-input-tag\">{{params?.placeholder || props?.placeholder}}</span>\r\n }\r\n <div class=\"sa-input-field\" [ngClass]=\"formControl.invalid && formControl.touched ? 'invalid' : 'idle' \"\r\n (click)=\"onInputFieldClick($event)\">\r\n @if(pretext){\r\n <div class=\"sa-input-pretext\">\r\n {{pretext}}\r\n </div>\r\n }\r\n\r\n <!-- Multi-value chip display -->\r\n @if(isMultiValue) {\r\n <div class=\"chip-container\">\r\n <sa-chip \r\n *ngFor=\"let chip of (chipValues || [])?.slice(startInd,startInd+labelLimit) let i = index\"\r\n [text]=\"chip?.value || chip?.label || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'primary'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"removeChip(i)\">\r\n </sa-chip>\r\n \r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"(chipValues || []).length > (startInd + labelLimit)\">\r\n <sa-chip [text]=\"'+' + ((chipValues || []).length - (startInd + labelLimit))\" \r\n type=\"regular\" \r\n state=\"primary\" \r\n filling=\"filled\">\r\n </sa-chip>\r\n </div>\r\n\r\n <input\r\n [ngClass]=\"'chip-input'\"\r\n matInput [type]=\"type\"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"chipValues.length === 0 ? (props?.placeholder || params?.placeholder || '') : ''\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onChipBlur()\"\r\n (input)=\"onChipInputChange($event)\"\r\n (keydown)=\"onChipKeyDown($event)\"\r\n [(ngModel)]=\"currentInputValue\"\r\n #formInput />\r\n </div>\r\n } @else {\r\n <!-- Standard single-value input (backward compatibility) -->\r\n <input\r\n [ngClass]=\"(!!inputVal && (params?.type === 'password' || props?.type === 'password') && icon.name !== 'eyeOff') ? 'masked' : ''\"\r\n matInput [type]=\"type\" value=\"\" [pattern]=\"type==='tel' ? '[0-9]' : '' \"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"!pretext && props?.placeholder || params?.placeholder || ''\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (input)=\"onInput($event)\" [(ngModel)]=\"inputVal\" #formInput />\r\n }\r\n\r\n @if(params?.type === 'password'){\r\n <sa-icon class=\"flex\" icon=\"eyeOutlined\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"!icon.name || icon.name === 'eyeOutlined' ? '' : 'hide'\"></sa-icon>\r\n <sa-icon class=\"flex\" icon=\"eyeOff\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"icon.name === 'eyeOff' ? '' : 'hide'\"></sa-icon>\r\n }@else if(params?.type === 'email' && icon.show){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name || 'checkCircleOutlined'\" [size]=\"icon.size || '24'\"\r\n (click)=\"inputIconClick()\" [ngClass]=\"showEmailIcon ? '' : 'hide'\"></sa-icon>\r\n }\r\n @else if(icon?.name){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name\" [size]=\"icon?.size || '24'\" [color]=\"icon?.color || ''\"\r\n [ngClass]=\"icon?.show ? '' : 'hide'\"></sa-icon>\r\n }\r\n </div>\r\n @if((!formControl.valid) || (params?.supportText)){\r\n <div class=\"support-label {{formControl.invalid && formControl.touched ? params?.className : ''}}\" [ngClass]=\"[\r\n formControl.invalid && formControl.touched ? 'invalid' : 'idle'\r\n ]\">\r\n <!-- {{!formControl.valid ? inputErrorText : params.supportText}} -->\r\n {{getFormSupportText()}}\r\n </div>\r\n }\r\n </div>\r\n</div>", styles: ["*{--error-red: #e25c61 }.idle{--border: 1px solid var(--grey-50)}.focus{--border: 1px solid var(--primary-300)}.masked{font-size:28px;font-weight:500;padding-top:4px}.disabled .sa-input-field,[disabled]{background-color:#fafafa;cursor:not-allowed}.disabled .sa-input-field input{color:#989da3}.sa-input-field>input,.sa-input-field>input:focus-visible{--border: 1px solid var(--primary-300);border:none;outline:none}.sa-input-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.sa-input-field sa-icon{color:var(--icon-grey1)}.sa-input-field>input:focus-visible~sa-icon,.sa-input-field:hover sa-icon{color:var(--primary-300)}.sa-input-field.invalid>input,.sa-input-field.invalid sa-icon,.sa-input-field.invalid .sa-input-pretext{color:var(--semantic-error-500, #BD271E)}.sa-input-field.invalid{--border: 1px solid var(--semantic-error-500, #BD271E)}.sa-input-field.invalid sa-icon{--form-email-icon-color: var(--semantic-error-500, #BD271E)}.sa-input-field.idle sa-icon{--form-email-icon-color: #33961F}.sa-input{position:relative;padding:8px 0}.sa-input-pretext{margin-right:2px}.sa-input-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.sa-input-field input{width:inherit}.sa-input-tag{position:absolute;background:#fff;padding:2px 6px;top:-1px;left:12px;z-index:2;font-size:11px;font-weight:500;line-height:16px;letter-spacing:.5px;text-align:left;color:var(--text-lowemphasis)}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.support-label.invalid{color:var(--error-red)}.hide{display:none}.sa-input-big-label-container,.sa-input-label-container{display:flex;flex-direction:column;gap:var(--small-8px, 8px)}.sa-input-big-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px, 22px);font-style:normal;font-weight:500;line-height:var(--medium-28px, 28px);margin:0}.sa-input-big-description,.sa-input-description{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-roboto, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.sa-input-container{display:flex;flex-direction:column;gap:var(--medium-20px, 20px)}.sa-input-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.sa-input-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.d-flex{display:flex}.chip-container{display:flex;flex-wrap:wrap;align-items:center;gap:4px;width:100%;min-height:20px}.chip-input{border:none;outline:none;background:transparent;flex:1;min-width:60px;font-size:14px;font-family:inherit;color:inherit}.chip-input::placeholder{color:var(--text-medium-emphasis, #6D6979)}.chip-container sa-chip{margin:2px 0}@media screen and (max-width: 1024px){.masked{font-weight:unset}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }] }); }
294
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormInputComponent, isStandalone: true, selector: "sa-input", inputs: { icon: "icon", params: "params" }, viewQueries: [{ propertyName: "formInput", first: true, predicate: ["formInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-input-container {{props?.['inputContainerClass']}}\" [ngStyle]=\"{'gap': getLabelFieldGap()}\">\n @if (!!props?.['bigLabel'] || !!props?.['bigDescription']) {\n <div class=\"sa-input-big-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\n <h2 class=\"sa-input-big-label\">\n {{props?.['bigLabel']}}\n </h2>\n <p class=\"sa-input-big-description\">\n {{props?.['bigDescription']}}\n </p>\n </div>\n }\n @if(!!props?.['label']){\n <div class=\"sa-input-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\n <div class=\"sa-input-label-tooltip-container\">\n <span class=\"sa-input-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-input-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-input\" [ngClass]=\"disabled ? 'disabled' : '' \">\n @if((pretext || (!!inputVal?.length && (!!params?.placeholder || !!props?.placeholder))) && props?.['showTag']\n !== false){\n <span class=\"sa-input-tag\">{{params?.placeholder || props?.placeholder}}</span>\n }\n <div class=\"sa-input-field\" [ngClass]=\"formControl.invalid && formControl.touched ? 'invalid' : 'idle' \"\n (click)=\"onInputFieldClick($event)\">\n @if(pretext){\n <div class=\"sa-input-pretext\">\n {{pretext}}\n </div>\n }\n\n <!-- Multi-value chip display -->\n @if(isMultiValue) {\n <div class=\"chip-container\">\n <sa-chip \n *ngFor=\"let chip of (chipValues || [])?.slice(startInd,startInd+labelLimit) let i = index\"\n [text]=\"chip?.value || chip?.label || chip\"\n [type]=\"'regular'\"\n [state]=\"'primary'\"\n [filling]=\"'filled'\"\n [iconPosition]=\"'right'\"\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\n (onClickEvent)=\"removeChip(i)\">\n </sa-chip>\n \n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"(chipValues || []).length > (startInd + labelLimit)\">\n <sa-chip [text]=\"'+' + ((chipValues || []).length - (startInd + labelLimit))\" \n type=\"regular\" \n state=\"primary\" \n filling=\"filled\">\n </sa-chip>\n </div>\n\n <input\n [ngClass]=\"'chip-input'\"\n matInput [type]=\"type\"\n [disabled]=\"field.props.disabled || false\"\n [placeholder]=\"chipValues.length === 0 ? (props?.placeholder || params?.placeholder || '') : ''\"\n (focus)=\"onFocus()\"\n (blur)=\"onChipBlur()\"\n (input)=\"onChipInputChange($event)\"\n (keydown)=\"onChipKeyDown($event)\"\n [(ngModel)]=\"currentInputValue\"\n #formInput />\n </div>\n } @else {\n <!-- Standard single-value input (backward compatibility) -->\n <input\n [ngClass]=\"(!!inputVal && (params?.type === 'password' || props?.type === 'password') && icon.name !== 'eyeOff') ? 'masked' : ''\"\n matInput [type]=\"props?.type || type\" value=\"\" [pattern]=\"type==='tel' ? '[0-9]' : '' \"\n [disabled]=\"field.props.disabled || false\"\n [placeholder]=\"!pretext && props?.placeholder || params?.placeholder || ''\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\" (input)=\"onInput($event)\" [(ngModel)]=\"inputVal\" #formInput />\n }\n\n @if(params?.type === 'password'){\n <sa-icon class=\"flex\" icon=\"eyeOutlined\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\n [ngClass]=\"!icon.name || icon.name === 'eyeOutlined' ? '' : 'hide'\"></sa-icon>\n <sa-icon class=\"flex\" icon=\"eyeOff\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\n [ngClass]=\"icon.name === 'eyeOff' ? '' : 'hide'\"></sa-icon>\n }@else if(params?.type === 'email' && icon.show){\n <sa-icon class=\"flex\" [icon]=\"icon.name || 'checkCircleOutlined'\" [size]=\"icon.size || '24'\"\n (click)=\"inputIconClick()\" [ngClass]=\"showEmailIcon ? '' : 'hide'\"></sa-icon>\n }\n @else if(icon?.name){\n <sa-icon class=\"flex\" [icon]=\"icon.name\" [size]=\"icon?.size || '24'\" [color]=\"icon?.color || ''\"\n [ngClass]=\"icon?.show ? '' : 'hide'\"></sa-icon>\n }\n </div>\n @if((!formControl.valid) || (params?.supportText)){\n <div class=\"support-label {{formControl.invalid && formControl.touched ? params?.className : ''}}\" [ngClass]=\"[\n formControl.invalid && formControl.touched ? 'invalid' : 'idle'\n ]\">\n <!-- {{!formControl.valid ? inputErrorText : params.supportText}} -->\n {{getFormSupportText()}}\n </div>\n }\n </div>\n</div>", styles: ["*{--error-red: #e25c61 }.idle{--border: 1px solid var(--grey-50)}.focus{--border: 1px solid var(--primary-300)}.masked{font-size:28px;font-weight:500;padding-top:4px}.disabled .sa-input-field,[disabled]{background-color:#fafafa;cursor:not-allowed}.disabled .sa-input-field input{color:#989da3}.sa-input-field>input,.sa-input-field>input:focus-visible{--border: 1px solid var(--primary-300);border:none;outline:none}.sa-input-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.sa-input-field sa-icon{color:var(--icon-grey1)}.sa-input-field>input:focus-visible~sa-icon,.sa-input-field:hover sa-icon{color:var(--primary-300)}.sa-input-field.invalid>input,.sa-input-field.invalid sa-icon,.sa-input-field.invalid .sa-input-pretext{color:var(--semantic-error-500, #BD271E)}.sa-input-field.invalid{--border: 1px solid var(--semantic-error-500, #BD271E)}.sa-input-field.invalid sa-icon{--form-email-icon-color: var(--semantic-error-500, #BD271E)}.sa-input-field.idle sa-icon{--form-email-icon-color: #33961F}.sa-input{position:relative;padding:8px 0}.sa-input-pretext{margin-right:2px}.sa-input-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.sa-input-field input{width:inherit}.sa-input-tag{position:absolute;background:#fff;padding:2px 6px;top:-1px;left:12px;z-index:2;font-size:11px;font-weight:500;line-height:16px;letter-spacing:.5px;text-align:left;color:var(--text-lowemphasis)}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.support-label.invalid{color:var(--error-red)}.hide{display:none}.sa-input-big-label-container,.sa-input-label-container{display:flex;flex-direction:column;gap:var(--small-8px, 8px)}.sa-input-big-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px, 22px);font-style:normal;font-weight:500;line-height:var(--medium-28px, 28px);margin:0}.sa-input-big-description,.sa-input-description{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-roboto, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.sa-input-container{display:flex;flex-direction:column;gap:var(--medium-20px, 20px)}.sa-input-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.sa-input-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.d-flex{display:flex}.chip-container{display:flex;flex-wrap:wrap;align-items:center;gap:4px;width:100%;min-height:20px}.chip-input{border:none;outline:none;background:transparent;flex:1;min-width:60px;font-size:14px;font-family:inherit;color:inherit}.chip-input::placeholder{color:var(--text-medium-emphasis, #6D6979)}.chip-container sa-chip{margin:2px 0}@media screen and (max-width: 1024px){.masked{font-weight:unset}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }] }); }
296
295
  }
297
296
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormInputComponent, decorators: [{
298
297
  type: Component,
@@ -304,7 +303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
304
303
  IconComponent,
305
304
  MatTooltipModule,
306
305
  ChipsComponent
307
- ], template: "<div class=\"sa-input-container {{props?.['inputContainerClass']}}\" [ngStyle]=\"{'gap': getLabelFieldGap()}\">\r\n @if (!!props?.['bigLabel'] || !!props?.['bigDescription']) {\r\n <div class=\"sa-input-big-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <h2 class=\"sa-input-big-label\">\r\n {{props?.['bigLabel']}}\r\n </h2>\r\n <p class=\"sa-input-big-description\">\r\n {{props?.['bigDescription']}}\r\n </p>\r\n </div>\r\n }\r\n @if(!!props?.['label']){\r\n <div class=\"sa-input-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <div class=\"sa-input-label-tooltip-container\">\r\n <span class=\"sa-input-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-input-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-input\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n @if((pretext || (!!inputVal?.length && (!!params?.placeholder || !!props?.placeholder))) && props?.['showTag']\r\n !== false){\r\n <span class=\"sa-input-tag\">{{params?.placeholder || props?.placeholder}}</span>\r\n }\r\n <div class=\"sa-input-field\" [ngClass]=\"formControl.invalid && formControl.touched ? 'invalid' : 'idle' \"\r\n (click)=\"onInputFieldClick($event)\">\r\n @if(pretext){\r\n <div class=\"sa-input-pretext\">\r\n {{pretext}}\r\n </div>\r\n }\r\n\r\n <!-- Multi-value chip display -->\r\n @if(isMultiValue) {\r\n <div class=\"chip-container\">\r\n <sa-chip \r\n *ngFor=\"let chip of (chipValues || [])?.slice(startInd,startInd+labelLimit) let i = index\"\r\n [text]=\"chip?.value || chip?.label || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'primary'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"removeChip(i)\">\r\n </sa-chip>\r\n \r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"(chipValues || []).length > (startInd + labelLimit)\">\r\n <sa-chip [text]=\"'+' + ((chipValues || []).length - (startInd + labelLimit))\" \r\n type=\"regular\" \r\n state=\"primary\" \r\n filling=\"filled\">\r\n </sa-chip>\r\n </div>\r\n\r\n <input\r\n [ngClass]=\"'chip-input'\"\r\n matInput [type]=\"type\"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"chipValues.length === 0 ? (props?.placeholder || params?.placeholder || '') : ''\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onChipBlur()\"\r\n (input)=\"onChipInputChange($event)\"\r\n (keydown)=\"onChipKeyDown($event)\"\r\n [(ngModel)]=\"currentInputValue\"\r\n #formInput />\r\n </div>\r\n } @else {\r\n <!-- Standard single-value input (backward compatibility) -->\r\n <input\r\n [ngClass]=\"(!!inputVal && (params?.type === 'password' || props?.type === 'password') && icon.name !== 'eyeOff') ? 'masked' : ''\"\r\n matInput [type]=\"type\" value=\"\" [pattern]=\"type==='tel' ? '[0-9]' : '' \"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"!pretext && props?.placeholder || params?.placeholder || ''\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (input)=\"onInput($event)\" [(ngModel)]=\"inputVal\" #formInput />\r\n }\r\n\r\n @if(params?.type === 'password'){\r\n <sa-icon class=\"flex\" icon=\"eyeOutlined\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"!icon.name || icon.name === 'eyeOutlined' ? '' : 'hide'\"></sa-icon>\r\n <sa-icon class=\"flex\" icon=\"eyeOff\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"icon.name === 'eyeOff' ? '' : 'hide'\"></sa-icon>\r\n }@else if(params?.type === 'email' && icon.show){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name || 'checkCircleOutlined'\" [size]=\"icon.size || '24'\"\r\n (click)=\"inputIconClick()\" [ngClass]=\"showEmailIcon ? '' : 'hide'\"></sa-icon>\r\n }\r\n @else if(icon?.name){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name\" [size]=\"icon?.size || '24'\" [color]=\"icon?.color || ''\"\r\n [ngClass]=\"icon?.show ? '' : 'hide'\"></sa-icon>\r\n }\r\n </div>\r\n @if((!formControl.valid) || (params?.supportText)){\r\n <div class=\"support-label {{formControl.invalid && formControl.touched ? params?.className : ''}}\" [ngClass]=\"[\r\n formControl.invalid && formControl.touched ? 'invalid' : 'idle'\r\n ]\">\r\n <!-- {{!formControl.valid ? inputErrorText : params.supportText}} -->\r\n {{getFormSupportText()}}\r\n </div>\r\n }\r\n </div>\r\n</div>", styles: ["*{--error-red: #e25c61 }.idle{--border: 1px solid var(--grey-50)}.focus{--border: 1px solid var(--primary-300)}.masked{font-size:28px;font-weight:500;padding-top:4px}.disabled .sa-input-field,[disabled]{background-color:#fafafa;cursor:not-allowed}.disabled .sa-input-field input{color:#989da3}.sa-input-field>input,.sa-input-field>input:focus-visible{--border: 1px solid var(--primary-300);border:none;outline:none}.sa-input-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.sa-input-field sa-icon{color:var(--icon-grey1)}.sa-input-field>input:focus-visible~sa-icon,.sa-input-field:hover sa-icon{color:var(--primary-300)}.sa-input-field.invalid>input,.sa-input-field.invalid sa-icon,.sa-input-field.invalid .sa-input-pretext{color:var(--semantic-error-500, #BD271E)}.sa-input-field.invalid{--border: 1px solid var(--semantic-error-500, #BD271E)}.sa-input-field.invalid sa-icon{--form-email-icon-color: var(--semantic-error-500, #BD271E)}.sa-input-field.idle sa-icon{--form-email-icon-color: #33961F}.sa-input{position:relative;padding:8px 0}.sa-input-pretext{margin-right:2px}.sa-input-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.sa-input-field input{width:inherit}.sa-input-tag{position:absolute;background:#fff;padding:2px 6px;top:-1px;left:12px;z-index:2;font-size:11px;font-weight:500;line-height:16px;letter-spacing:.5px;text-align:left;color:var(--text-lowemphasis)}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.support-label.invalid{color:var(--error-red)}.hide{display:none}.sa-input-big-label-container,.sa-input-label-container{display:flex;flex-direction:column;gap:var(--small-8px, 8px)}.sa-input-big-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px, 22px);font-style:normal;font-weight:500;line-height:var(--medium-28px, 28px);margin:0}.sa-input-big-description,.sa-input-description{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-roboto, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.sa-input-container{display:flex;flex-direction:column;gap:var(--medium-20px, 20px)}.sa-input-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.sa-input-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.d-flex{display:flex}.chip-container{display:flex;flex-wrap:wrap;align-items:center;gap:4px;width:100%;min-height:20px}.chip-input{border:none;outline:none;background:transparent;flex:1;min-width:60px;font-size:14px;font-family:inherit;color:inherit}.chip-input::placeholder{color:var(--text-medium-emphasis, #6D6979)}.chip-container sa-chip{margin:2px 0}@media screen and (max-width: 1024px){.masked{font-weight:unset}}\n"] }]
306
+ ], template: "<div class=\"sa-input-container {{props?.['inputContainerClass']}}\" [ngStyle]=\"{'gap': getLabelFieldGap()}\">\n @if (!!props?.['bigLabel'] || !!props?.['bigDescription']) {\n <div class=\"sa-input-big-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\n <h2 class=\"sa-input-big-label\">\n {{props?.['bigLabel']}}\n </h2>\n <p class=\"sa-input-big-description\">\n {{props?.['bigDescription']}}\n </p>\n </div>\n }\n @if(!!props?.['label']){\n <div class=\"sa-input-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\n <div class=\"sa-input-label-tooltip-container\">\n <span class=\"sa-input-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-input-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-input\" [ngClass]=\"disabled ? 'disabled' : '' \">\n @if((pretext || (!!inputVal?.length && (!!params?.placeholder || !!props?.placeholder))) && props?.['showTag']\n !== false){\n <span class=\"sa-input-tag\">{{params?.placeholder || props?.placeholder}}</span>\n }\n <div class=\"sa-input-field\" [ngClass]=\"formControl.invalid && formControl.touched ? 'invalid' : 'idle' \"\n (click)=\"onInputFieldClick($event)\">\n @if(pretext){\n <div class=\"sa-input-pretext\">\n {{pretext}}\n </div>\n }\n\n <!-- Multi-value chip display -->\n @if(isMultiValue) {\n <div class=\"chip-container\">\n <sa-chip \n *ngFor=\"let chip of (chipValues || [])?.slice(startInd,startInd+labelLimit) let i = index\"\n [text]=\"chip?.value || chip?.label || chip\"\n [type]=\"'regular'\"\n [state]=\"'primary'\"\n [filling]=\"'filled'\"\n [iconPosition]=\"'right'\"\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\n (onClickEvent)=\"removeChip(i)\">\n </sa-chip>\n \n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"(chipValues || []).length > (startInd + labelLimit)\">\n <sa-chip [text]=\"'+' + ((chipValues || []).length - (startInd + labelLimit))\" \n type=\"regular\" \n state=\"primary\" \n filling=\"filled\">\n </sa-chip>\n </div>\n\n <input\n [ngClass]=\"'chip-input'\"\n matInput [type]=\"type\"\n [disabled]=\"field.props.disabled || false\"\n [placeholder]=\"chipValues.length === 0 ? (props?.placeholder || params?.placeholder || '') : ''\"\n (focus)=\"onFocus()\"\n (blur)=\"onChipBlur()\"\n (input)=\"onChipInputChange($event)\"\n (keydown)=\"onChipKeyDown($event)\"\n [(ngModel)]=\"currentInputValue\"\n #formInput />\n </div>\n } @else {\n <!-- Standard single-value input (backward compatibility) -->\n <input\n [ngClass]=\"(!!inputVal && (params?.type === 'password' || props?.type === 'password') && icon.name !== 'eyeOff') ? 'masked' : ''\"\n matInput [type]=\"props?.type || type\" value=\"\" [pattern]=\"type==='tel' ? '[0-9]' : '' \"\n [disabled]=\"field.props.disabled || false\"\n [placeholder]=\"!pretext && props?.placeholder || params?.placeholder || ''\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\" (input)=\"onInput($event)\" [(ngModel)]=\"inputVal\" #formInput />\n }\n\n @if(params?.type === 'password'){\n <sa-icon class=\"flex\" icon=\"eyeOutlined\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\n [ngClass]=\"!icon.name || icon.name === 'eyeOutlined' ? '' : 'hide'\"></sa-icon>\n <sa-icon class=\"flex\" icon=\"eyeOff\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\n [ngClass]=\"icon.name === 'eyeOff' ? '' : 'hide'\"></sa-icon>\n }@else if(params?.type === 'email' && icon.show){\n <sa-icon class=\"flex\" [icon]=\"icon.name || 'checkCircleOutlined'\" [size]=\"icon.size || '24'\"\n (click)=\"inputIconClick()\" [ngClass]=\"showEmailIcon ? '' : 'hide'\"></sa-icon>\n }\n @else if(icon?.name){\n <sa-icon class=\"flex\" [icon]=\"icon.name\" [size]=\"icon?.size || '24'\" [color]=\"icon?.color || ''\"\n [ngClass]=\"icon?.show ? '' : 'hide'\"></sa-icon>\n }\n </div>\n @if((!formControl.valid) || (params?.supportText)){\n <div class=\"support-label {{formControl.invalid && formControl.touched ? params?.className : ''}}\" [ngClass]=\"[\n formControl.invalid && formControl.touched ? 'invalid' : 'idle'\n ]\">\n <!-- {{!formControl.valid ? inputErrorText : params.supportText}} -->\n {{getFormSupportText()}}\n </div>\n }\n </div>\n</div>", styles: ["*{--error-red: #e25c61 }.idle{--border: 1px solid var(--grey-50)}.focus{--border: 1px solid var(--primary-300)}.masked{font-size:28px;font-weight:500;padding-top:4px}.disabled .sa-input-field,[disabled]{background-color:#fafafa;cursor:not-allowed}.disabled .sa-input-field input{color:#989da3}.sa-input-field>input,.sa-input-field>input:focus-visible{--border: 1px solid var(--primary-300);border:none;outline:none}.sa-input-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.sa-input-field sa-icon{color:var(--icon-grey1)}.sa-input-field>input:focus-visible~sa-icon,.sa-input-field:hover sa-icon{color:var(--primary-300)}.sa-input-field.invalid>input,.sa-input-field.invalid sa-icon,.sa-input-field.invalid .sa-input-pretext{color:var(--semantic-error-500, #BD271E)}.sa-input-field.invalid{--border: 1px solid var(--semantic-error-500, #BD271E)}.sa-input-field.invalid sa-icon{--form-email-icon-color: var(--semantic-error-500, #BD271E)}.sa-input-field.idle sa-icon{--form-email-icon-color: #33961F}.sa-input{position:relative;padding:8px 0}.sa-input-pretext{margin-right:2px}.sa-input-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.sa-input-field input{width:inherit}.sa-input-tag{position:absolute;background:#fff;padding:2px 6px;top:-1px;left:12px;z-index:2;font-size:11px;font-weight:500;line-height:16px;letter-spacing:.5px;text-align:left;color:var(--text-lowemphasis)}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.support-label.invalid{color:var(--error-red)}.hide{display:none}.sa-input-big-label-container,.sa-input-label-container{display:flex;flex-direction:column;gap:var(--small-8px, 8px)}.sa-input-big-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px, 22px);font-style:normal;font-weight:500;line-height:var(--medium-28px, 28px);margin:0}.sa-input-big-description,.sa-input-description{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-roboto, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.sa-input-container{display:flex;flex-direction:column;gap:var(--medium-20px, 20px)}.sa-input-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.sa-input-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.d-flex{display:flex}.chip-container{display:flex;flex-wrap:wrap;align-items:center;gap:4px;width:100%;min-height:20px}.chip-input{border:none;outline:none;background:transparent;flex:1;min-width:60px;font-size:14px;font-family:inherit;color:inherit}.chip-input::placeholder{color:var(--text-medium-emphasis, #6D6979)}.chip-container sa-chip{margin:2px 0}@media screen and (max-width: 1024px){.masked{font-weight:unset}}\n"] }]
308
307
  }], ctorParameters: () => [], propDecorators: { formInput: [{
309
308
  type: ViewChild,
310
309
  args: ['formInput']
@@ -320,4 +319,4 @@ export var IInputEventType;
320
319
  IInputEventType["STATE_CHANGE"] = "STATE_CHANGE";
321
320
  IInputEventType["ICON_CLICK"] = "ICON_CLICK";
322
321
  })(IInputEventType || (IInputEventType = {}));
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQWdCN0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQTBCO0lBK0JoRTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBekJWLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsYUFBUSxHQUFHLEVBQUUs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QWtCO2tCQWY5QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsY0FBYztxQkFDZjt3REFLdUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUVQLElBQUk7c0JBQWxCLEtBQUs7dUJBQUMsTUFBTTtnQkFNSixNQUFNO3NCQUFkLEtBQUs7O0FBZ1ZSLE1BQU0sQ0FBTixJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsZ0RBQTZCLENBQUE7SUFDN0IsZ0RBQTZCLENBQUE7SUFDN0IsNENBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBnZXRWYWxpZGF0aW9uTWVzc2FnZSxcclxuICBwaG9uZU51bWJlclZhbGlkYXRvcixcclxufSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4uL2NoaXBzL2NoaXBzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGdldCBhcyBfZ2V0LCBzZXQgYXMgX3NldCwgbWFwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLWlucHV0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1seU1vZHVsZSxcclxuICAgIEljb25Db21wb25lbnQsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgQ2hpcHNDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1JbnB1dENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IHtcclxuICBAVmlld0NoaWxkKCdmb3JtSW5wdXQnKSBmb3JtSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ2ljb24nKSBpY29uOiBJSW5wdXRJY29uO1xyXG5cclxuICBwcmV0ZXh0OiBzdHJpbmc7XHJcblxyXG4gIGlucHV0U3RhdGUgPSAnaWRsZSc7XHJcbiAgaW5wdXRWYWwgPSAnJztcclxuICBASW5wdXQoKSBwYXJhbXM6IElJbnB1dFBhcmFtIHwgbnVsbDtcclxuICBkZXBlbmRlbnQ6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfCBudWxsO1xyXG4gIGRlcGVuZGVudFZhbDogYW55ID0gbnVsbDtcclxuICAvLyBkeW5hbWljSWNvbjogRHluYW1pY0ljb24gfCBudWxsO1xyXG4gIC8vIGljb246IElJbnB1dEljb24gfCBudWxsO1xyXG5cclxuICB0eXBlOiBzdHJpbmcgPSAnJztcclxuICB2YWxpZGF0b3JzOiBhbnlbXTtcclxuICBhc3luY1ZhbGlkYXRvcnM6IGFueVtdO1xyXG5cclxuICBpbnB1dEVycm9yVGV4dDogc3RyaW5nID0gJ2ludmFsaWQgaW5wdXQnO1xyXG5cclxuICBzaG93RW1haWxJY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjaGlwVmFsdWVzOiBhbnlbXSA9IFtdO1xyXG4gIGlzTXVsdGlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRJbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcclxuICBzdGFydEluZDogbnVtYmVyID0gMDtcclxuICBsYWJlbExpbWl0OiBudW1iZXIgPSAxO1xyXG5cclxuICBwcml2YXRlIHN1cHByZXNzT25CbHVyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbnB1dFZhbCA9XHJcbiAgICAgIHRoaXMuZmllbGQucHJvcHNbJ3ZhbHVlJ10gfHwgdGhpcy5tb2RlbFt0aGlzLmtleSBhcyBzdHJpbmddIHx8ICcnO1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuZmllbGQucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2U7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcclxuXHJcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMucGFyYW1zIHx8IHRoaXMuZmllbGQucHJvcHNbJ3BhcmFtcyddO1xyXG4gICAgdGhpcy5pY29uID0gdGhpcy5pY29uIHx8IHRoaXMuZmllbGQucHJvcHNbJ2ljb24nXSB8fCB7fTtcclxuICAgIHRoaXMudHlwZSA9IHRoaXMucGFyYW1zPy50eXBlIHx8ICcnO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgX3NldCh0aGlzLmZvcm1JbnB1dCwgJ25hdGl2ZUVsZW1lbnQudmFsdWUnLCB2YWwpO1xyXG4gICAgICAvLyBIYW5kbGUgbXVsdGktdmFsdWUgY2hpcCB1cGRhdGVzXHJcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlWYWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgICB0aGlzLmNoaXBWYWx1ZXMgPSB2YWw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgbXVsdGktdmFsdWUgbW9kZSBpZiBzcGVjaWZpZWRcclxuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ211bHRpLXZhbHVlJyB8fCB0aGlzLnBhcmFtcz8ubXVsdGlWYWx1ZSkge1xyXG4gICAgICB0aGlzLmlzTXVsdGlWYWx1ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hpcFZhbHVlcyA9IHRoaXMubW9kZWxbdGhpcy5rZXkgYXMgc3RyaW5nXSB8fCB0aGlzLnBhcmFtcz8uY2hpcFZhbHVlcyB8fCBbXTtcclxuICAgICAgdGhpcy5jdXJyZW50SW5wdXRWYWx1ZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuZHluYW1pY0ljb24gPSB0aGlzLmZpZWxkLnByb3BzWydkeW5hbWljSWNvbiddO1xyXG4gICAgdGhpcy5zZXRWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLnNldERlcGVuZGVudHMoKTtcclxuXHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy50eXBlID09PSAnZW1haWwnKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5pbnB1dFZhbCAmJiAhdGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93RW1haWxJY29uID1cclxuICAgICAgICAgIHN0YXRlID09PSAnVkFMSUQnIHx8XHJcbiAgICAgICAgICAoc3RhdGUgPT09ICdJTlZBTElEJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLmhhc0Vycm9yKCdpbnZhbGlkJykgJiZcclxuICAgICAgICAgICAgISF0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICBfc2V0KHRoaXMuZm9ybUlucHV0LCAnbmF0aXZlRWxlbWVudC52YWx1ZScsIHZhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRvcnMoKSB7XHJcbiAgICB0aGlzLnZhbGlkYXRvcnMgPSB0aGlzLnBhcmFtcz8udmFsaWRhdG9ycyB8fCB0aGlzLnByZWRlZmluZWRWYWxpZGF0b3JzW3RoaXMudHlwZV0gfHwgW107XHJcbiAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycyA9IHRoaXMucGFyYW1zPy5hc3luY1ZhbGlkYXRvcnMgfHwgW107XHJcbiAgICBpZighX2dldCh0aGlzLmZpZWxkLCAndmFsaWRhdG9ycy52YWxpZGF0aW9uJywgbnVsbCkpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbXHJcbiAgICAgICAgLi4uKHRoaXMudHlwZSA/IHRoaXMucHJlZGVmaW5lZFZhbGlkYXRvcnNbdGhpcy50eXBlXSB8fCBbXSA6IFtdKSxcclxuICAgICAgICAuLi4odGhpcy52YWxpZGF0b3JzKSxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnMpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBBc3N1bWluZyBkZXBlbmRlbnQgZmllbGQgaXMgYSBzaW5nbGUgc2VsZWN0IGRyb3Bkb3duXHJcbiAgKi9cclxuICBzZXREZXBlbmRlbnRzKCkge1xyXG4gICAgaWYgKHRoaXMucGFyYW1zPy5kZXBlbmRlbnQpIHtcclxuICAgICAgdGhpcy5kZXBlbmRlbnQgPSB0aGlzLmZvcm0uZ2V0KFt0aGlzLnBhcmFtcz8uZGVwZW5kZW50XSk7XHJcblxyXG4gICAgICB0aGlzLmRlcGVuZGVudFZhbCA9IHRoaXMuZ2V0RGVwZW5kZW50VmFsKF9nZXQodGhpcy5kZXBlbmRlbnQsICd2YWx1ZScpKTtcclxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RlbCcpIHtcclxuICAgICAgICB0aGlzLnByZXRleHQgPSB0aGlzLmRlcGVuZGVudFZhbD8uZGlhbF9jb2RlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRlcGVuZGVudD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXBlbmRlbnRWYWwgPSB0aGlzLmdldERlcGVuZGVudFZhbCh2YWwpO1xyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuaW5wdXRWYWwpO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZWwnKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXRleHQgPSB0aGlzLmRlcGVuZGVudFZhbD8uZGlhbF9jb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldERlcGVuZGVudFZhbCh2YWx1ZTogYW55KSB7XHJcbiAgICBsZXQgZGVwZW5kZW50VmFsdWU6IGFueTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICBkZXBlbmRlbnRWYWx1ZSA9IHZhbHVlLmxlbmd0aCA/IHZhbHVlWzBdIDogbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlcGVuZGVudFZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVwZW5kZW50VmFsdWU7XHJcbiAgfVxyXG5cclxuICBjaGVja1ZhbGlkaXR5KGRlZmF1bHRJbnB1dFN0YXRlID0gJ2ZvY3VzJykge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sICYmXHJcbiAgICAgICF0aGlzLmZvcm1Db250cm9sLnZhbGlkICYmXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCAmJlxyXG4gICAgICAhdGhpcy5mb3JtQ29udHJvbC5wZW5kaW5nXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbnB1dFN0YXRlID0gJ2ludmFsaWQnO1xyXG4gICAgICB0aGlzLmlucHV0RXJyb3JUZXh0ID1cclxuICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmZvcm1Db250cm9sLmVycm9ycywgdGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdJbnB1dCcsIHtcclxuICAgICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxyXG4gICAgICAgICAgbmF0aXZlVmFsaWRhdGlvbk9iamVjdDogdGhpcy5maWVsZC52YWxpZGF0aW9uLFxyXG4gICAgICAgIH0pIHx8IGBpbnZhbGlkICR7dGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdpbnB1dCd9YFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dFN0YXRlID0gZGVmYXVsdElucHV0U3RhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsaWQpIHRoaXMuaW5wdXRTdGF0ZSA9ICdmb2N1cyc7XHJcbiAgfVxyXG4gIG9uQmx1cigpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuc3VwcHJlc3NPbkJsdXIpIHtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLmNoZWNrVmFsaWRpdHkoJ2lkbGUnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN1cHByZXNzT25CbHVyID0gZmFsc2U7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbXM/LnR5cGUgPT09ICd0ZWwnKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRWYWwgPSB0aGlzLmlucHV0VmFsLnJlcGxhY2UoL1teMC05KCkrXFwtIF0vZywgJycpO1xyXG4gICAgICB0aGlzLmlucHV0VmFsID0gdGhpcy5oeXBoZW5hdGVQaG9uZU51bWJlcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFyYW1zPy50eXBlID09PSAncGVyY2VudGFnZScpIHtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5pbnB1dFZhbC5yZXBsYWNlKC9bXjAtOS5dL2csICcnKTtcclxuICAgICAgdGhpcy5pbnB1dFZhbCA9IHZhbHVlID8gYCR7dmFsdWV9JWAgOiAnJztcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldFZhbHVlKHRoaXMuaW5wdXRWYWwpO1xyXG4gICAgdGhpcy5jaGVja1ZhbGlkaXR5KCk7XHJcbiAgICAvKmlmICh0aGlzLnBhcmFtcz8uZXZlbnRMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLnBhcmFtcz8uZXZlbnRMaXN0ZW5lcih7XHJcbiAgICAgICAgdHlwZTogSUlucHV0RXZlbnRUeXBlLklOUFVUX0NIQU5HRSxcclxuICAgICAgICB2YWx1ZTogdGhpcy5pbnB1dFZhbCxcclxuICAgICAgICBmb3JtQ29udHJvbDogdGhpcy5mb3JtQ29udHJvbFxyXG4gICAgICB9IGFzIElJbnB1dEV2ZW50KS50aGVuKHRoaXMub25GaWVsZENhbGxiYWNrLmJpbmQodGhpcykpO1xyXG4gICAgfSovXHJcbiAgfVxyXG5cclxuICBoeXBoZW5hdGVQaG9uZU51bWJlcigpIHtcclxuICAgIGxldCBuZXdTdHIgPSAnJztcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBoeXBoZW5hdGVkQ291bnQgPSAxO1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0VmFsLnJlcGxhY2VBbGwoJy0nLCAnJyk7XHJcbiAgICBmb3IgKDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIG5ld1N0ciA9IG5ld1N0ciArIHZhbHVlLmNoYXJBdChpKTtcclxuICAgICAgaWYgKCEoaHlwaGVuYXRlZENvdW50ICUgMykpIHtcclxuICAgICAgICBpZiAoISgoaSArIDEpICUgMTApICYmIGkgKyAxIDwgdmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIgKyAnLSc7XHJcbiAgICAgICAgICBoeXBoZW5hdGVkQ291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgISgoaSArIDEgLSBNYXRoLmZsb29yKGh5cGhlbmF0ZWRDb3VudCAvIDMpKSAlIDMpICYmXHJcbiAgICAgICAgaSArIDEgPCB2YWx1ZS5sZW5ndGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgbmV3U3RyID0gbmV3U3RyICsgJy0nO1xyXG4gICAgICAgIGh5cGhlbmF0ZWRDb3VudCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld1N0cjtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRGaWVsZENsaWNrKGV2ZW50OiBhbnkgPSAnaW5wdXQnKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50ID09PSAnaW5wdXQnIHx8XHJcbiAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3NhLWlucHV0LWZpZWxkJylcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZvcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSAhPT0gJ2VtYWlsJylcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWwubGVuZ3RoLFxyXG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsLmxlbmd0aCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSwgMTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRJY29uQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbXM/LnR5cGUgPT09ICdwYXNzd29yZCcpIHtcclxuICAgICAgdGhpcy5zdXBwcmVzc09uQmx1ciA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcpIHtcclxuICAgICAgICB0aGlzLnR5cGUgPSAndGV4dCc7XHJcbiAgICAgICAgdGhpcy5pY29uLm5hbWUgPSAnZXllT2ZmJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnR5cGUgPSAncGFzc3dvcmQnO1xyXG4gICAgICAgIHRoaXMuaWNvbi5uYW1lID0gJ2V5ZU91dGxpbmVkJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uSW5wdXRGaWVsZENsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDaGlwKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5pc011bHRpVmFsdWUgfHwgIXZhbHVlLnRyaW0oKSkgcmV0dXJuOyAgXHJcbiAgICBjb25zdCBjaGlwVmFsdWUgPSB7XHJcbiAgICAgIGxhYmVsOiB2YWx1ZS50cmltKCksXHJcbiAgICAgIHZhbHVlOiB2YWx1ZS50cmltKCksXHJcbiAgICAgIHJlbW92YWJsZTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2hpcFZhbHVlcy5wdXNoKGNoaXBWYWx1ZSk7ICAgIFxyXG4gICAgY29uc3QgYWN0dWFsVmFsdWVzID0gbWFwKHRoaXMuY2hpcFZhbHVlcywgKGNoaXA6IGFueSkgPT4gY2hpcC52YWx1ZSB8fCBjaGlwLmxhYmVsIHx8IGNoaXApO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUoYWN0dWFsVmFsdWVzKTtcclxuICAgIHRoaXMuY3VycmVudElucHV0VmFsdWUgPSAnJztcclxuICAgIHRoaXMubW9kZWxbdGhpcy5rZXkgYXMgc3RyaW5nXSA9IGFjdHVhbFZhbHVlcztcclxuICB9XHJcbiAgXHJcbiAgcmVtb3ZlQ2hpcChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47ICBcclxuICAgIHRoaXMuY2hpcFZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpOyAgXHJcbiAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSBtYXAodGhpcy5jaGlwVmFsdWVzLCAoY2hpcDogYW55KSA9PiBjaGlwLnZhbHVlIHx8IGNoaXAubGFiZWwgfHwgY2hpcCk7XHJcbiAgICB0aGlzLm1vZGVsW3RoaXMua2V5IGFzIHN0cmluZ10gPSBhY3R1YWxWYWx1ZXM7XHJcbiAgfVxyXG5cclxuICBvbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJywnKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuYWRkQ2hpcCh0aGlzLmN1cnJlbnRJbnB1dFZhbHVlKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5jdXJyZW50SW5wdXRWYWx1ZSAmJiB0aGlzLmNoaXBWYWx1ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUNoaXAodGhpcy5jaGlwVmFsdWVzLmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBvbkNoaXBJbnB1dENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47XHJcbiAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb25DaGlwQmx1cigpIHtcclxuICAgIGlmICghdGhpcy5pc011bHRpVmFsdWUpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRJbnB1dFZhbHVlLnRyaW0oKSkge1xyXG4gICAgICB0aGlzLmFkZENoaXAodGhpcy5jdXJyZW50SW5wdXRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qb25GaWVsZENhbGxiYWNrKHBhcmFtOiBJSW5wdXRQYXJhbSkge1xyXG4gICAgdGhpcy5pY29uID0gcGFyYW0uaWNvbiB8fCB0aGlzLmljb247XHJcbiAgICB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcclxuICB9Ki9cclxuXHJcbiAgZ2V0Rm9ybVN1cHBvcnRUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmZvcm1Db250cm9sLmVycm9ycywgdGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdJbnB1dCcse1xyXG4gICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXHJcbiAgICAgICAgICBuYXRpdmVWYWxpZGF0aW9uT2JqZWN0OiBfZ2V0KHRoaXMuZmllbGQsICd2YWxpZGF0aW9uJyksXHJcbiAgICAgICAgfSkgfHxcclxuICAgICAgICBgaW52YWxpZCAke3RoaXMucGFyYW1zPy5wbGFjZWhvbGRlciB8fCB0aGlzLmZpZWxkLnByb3BzPy5sYWJlbCB8fCAnaW5wdXQnfWBcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmFtcz8uc3VwcG9ydFRleHQgfHwgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmVkZWZpbmVkVmFsaWRhdG9yczogYW55ID0ge1xyXG4gICAgZW1haWw6IFtWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIHBhc3N3b3JkOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB0ZWw6IFtWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05ICtcXFxcLSgpXSokJyldLFxyXG4gIH07XHJcblxyXG4gIGdldExhYmVsRmllbGRHYXAoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnByb3BzPy5bJ2JpZ0xhYmVsJ10pIHtcclxuICAgICAgcmV0dXJuICd2YXIoLS1tZWRpdW0tMjBweCknO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzPy5bJ2xhYmVsJ10pIHtcclxuICAgICAgcmV0dXJuICd2YXIoLS1zbWFsbC00cHgpJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnMHB4JzsgLy8gTm8gZ2FwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaGlmdExhYmVsKGFjdGlvbjogJ2NsaWNrZWQnIHwgJ2NsZWFyZWQnKSB7XHJcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2tlZCcpIHtcclxuICAgICAgdGhpcy5zdGFydEluZCA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0SW5kID0gTWF0aC5tYXgoMCwgdGhpcy5jaGlwVmFsdWVzLmxlbmd0aCAtIHRoaXMubGFiZWxMaW1pdCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dEljb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBzaG93PzogYm9vbGVhbjtcclxuICBjb2xvcj86IHN0cmluZztcclxuICBzaXplPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dFBhcmFtIHtcclxuICB2YWxpZGF0b3JzPzogYW55W107XHJcbiAgYXN5bmNWYWxpZGF0b3JzPzogYW55W107XHJcbiAgc3VwcG9ydFRleHQ/OiBzdHJpbmc7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgdHlwZT86IHN0cmluZztcclxuICBkZXBlbmRlbnQ/OiBzdHJpbmc7XHJcbiAgZXZlbnRMaXN0ZW5lcj86IEZ1bmN0aW9uO1xyXG4gIGljb24/OiBJSW5wdXRJY29uO1xyXG4gIGVycm9ycz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIG11bHRpVmFsdWU/OiBib29sZWFuOyAvLyBmb3IgbXVsdGktdmFsdWUgY2hpcCBzdXBwb3J0XHJcbiAgY2hpcFZhbHVlcz86IGFueVtdOyAvLyBmb3IgbXVsdGktdmFsdWUgY2hpcCBzdXBwb3J0XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0RXZlbnQge1xyXG4gIHR5cGU6IElJbnB1dEV2ZW50VHlwZTtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGNhbGxCYWNrOiBhbnk7XHJcbiAgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xyXG59XHJcbmV4cG9ydCBlbnVtIElJbnB1dEV2ZW50VHlwZSB7XHJcbiAgSU5QVVRfQ0hBTkdFID0gJ0lOUFVUX0NIQU5HRScsXHJcbiAgU1RBVEVfQ0hBTkdFID0gJ1NUQVRFX0NIQU5HRScsXHJcbiAgSUNPTl9DTElDSyA9ICdJQ09OX0NMSUNLJyxcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic2EtaW5wdXQtY29udGFpbmVyIHt7cHJvcHM/LlsnaW5wdXRDb250YWluZXJDbGFzcyddfX1cIiBbbmdTdHlsZV09XCJ7J2dhcCc6IGdldExhYmVsRmllbGRHYXAoKX1cIj5cclxuICAgIEBpZiAoISFwcm9wcz8uWydiaWdMYWJlbCddIHx8ICEhcHJvcHM/LlsnYmlnRGVzY3JpcHRpb24nXSkge1xyXG4gICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWJpZy1sYWJlbC1jb250YWluZXJcIiBbbmdDbGFzc109XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiAnJyBcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJzYS1pbnB1dC1iaWctbGFiZWxcIj5cclxuICAgICAgICAgICAge3twcm9wcz8uWydiaWdMYWJlbCddfX1cclxuICAgICAgICA8L2gyPlxyXG4gICAgICAgIDxwIGNsYXNzPVwic2EtaW5wdXQtYmlnLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgIHt7cHJvcHM/LlsnYmlnRGVzY3JpcHRpb24nXX19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBAaWYoISFwcm9wcz8uWydsYWJlbCddKXtcclxuICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1sYWJlbC1jb250YWluZXJcIiBbbmdDbGFzc109XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiAnJyBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2EtaW5wdXQtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYS1pbnB1dC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3twcm9wcz8uWydsYWJlbCddfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYoISFwcm9wcz8uWyd0b29sdGlwJ10pe1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInByb3BzPy5bJ3Rvb2x0aXAnXVwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJwcm9wcz8uWyd0b29sdGlwSWNvblNpemUnXSB8fCAnMjAnXCI+PC9zYS1pY29uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYoISFwcm9wcz8uWydkZXNjcmlwdGlvbiddKSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJzYS1pbnB1dC1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICB7e3Byb3BzPy5bJ2Rlc2NyaXB0aW9uJ119fVxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dFwiIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnIFwiPlxyXG4gICAgICAgIEBpZigocHJldGV4dCB8fCAoISFpbnB1dFZhbD8ubGVuZ3RoICYmICghIXBhcmFtcz8ucGxhY2Vob2xkZXIgfHwgISFwcm9wcz8ucGxhY2Vob2xkZXIpKSkgJiYgcHJvcHM/Llsnc2hvd1RhZyddXHJcbiAgICAgICAgIT09IGZhbHNlKXtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNhLWlucHV0LXRhZ1wiPnt7cGFyYW1zPy5wbGFjZWhvbGRlciB8fCBwcm9wcz8ucGxhY2Vob2xkZXJ9fTwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWZpZWxkXCIgW25nQ2xhc3NdPVwiZm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkID8gJ2ludmFsaWQnIDogJ2lkbGUnIFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbklucHV0RmllbGRDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIEBpZihwcmV0ZXh0KXtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LXByZXRleHRcIj5cclxuICAgICAgICAgICAgICAgIHt7cHJldGV4dH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIE11bHRpLXZhbHVlIGNoaXAgZGlzcGxheSAtLT5cclxuICAgICAgICAgICAgQGlmKGlzTXVsdGlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNhLWNoaXAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlwIG9mIChjaGlwVmFsdWVzIHx8IFtdKT8uc2xpY2Uoc3RhcnRJbmQsc3RhcnRJbmQrbGFiZWxMaW1pdCkgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNoaXA/LnZhbHVlIHx8IGNoaXA/LmxhYmVsIHx8IGNoaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCIncmVndWxhcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiJ3ByaW1hcnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGxpbmddPVwiJ2ZpbGxlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvblBhdGhdPVwiJy4uL2Fzc2V0cy9jbG9zZUJsdWVPdXRsaW5lZC5zdmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2tFdmVudCk9XCJyZW1vdmVDaGlwKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zYS1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInNoaWZ0TGFiZWwoJ2NsaWNrZWQnKVwiIGNsYXNzPVwibmctdmFsdWUgb3ZlcmZsb3ctbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihjaGlwVmFsdWVzIHx8IFtdKS5sZW5ndGggPiAoc3RhcnRJbmQgKyBsYWJlbExpbWl0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2EtY2hpcCBbdGV4dF09XCInKycgKyAoKGNoaXBWYWx1ZXMgfHwgW10pLmxlbmd0aCAtIChzdGFydEluZCArIGxhYmVsTGltaXQpKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyZWd1bGFyXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlPVwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxpbmc9XCJmaWxsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zYS1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ2NoaXAtaW5wdXQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgW3R5cGVdPVwidHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjaGlwVmFsdWVzLmxlbmd0aCA9PT0gMCA/IChwcm9wcz8ucGxhY2Vob2xkZXIgfHwgcGFyYW1zPy5wbGFjZWhvbGRlciB8fCAnJykgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkNoaXBCbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGlwSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ2hpcEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudElucHV0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZm9ybUlucHV0IC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIHNpbmdsZS12YWx1ZSBpbnB1dCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgLS0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoISFpbnB1dFZhbCAmJiAocGFyYW1zPy50eXBlID09PSAncGFzc3dvcmQnIHx8IHByb3BzPy50eXBlID09PSAncGFzc3dvcmQnKSAmJiBpY29uLm5hbWUgIT09ICdleWVPZmYnKSA/ICdtYXNrZWQnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFt0eXBlXT1cInR5cGVcIiB2YWx1ZT1cIlwiIFtwYXR0ZXJuXT1cInR5cGU9PT0ndGVsJyA/ICdbMC05XScgOiAnJyBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIiFwcmV0ZXh0ICYmIHByb3BzPy5wbGFjZWhvbGRlciB8fCBwYXJhbXM/LnBsYWNlaG9sZGVyIHx8ICcnXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIiAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJpbnB1dFZhbFwiICNmb3JtSW5wdXQgLz5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQGlmKHBhcmFtcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJyl7XHJcbiAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIGljb249XCJleWVPdXRsaW5lZFwiIFtzaXplXT1cImljb24uc2l6ZSB8fCAnMjQnXCIgKGNsaWNrKT1cImlucHV0SWNvbkNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiIWljb24ubmFtZSB8fCBpY29uLm5hbWUgPT09ICdleWVPdXRsaW5lZCcgPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cclxuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgaWNvbj1cImV5ZU9mZlwiIFtzaXplXT1cImljb24uc2l6ZSB8fCAnMjQnXCIgKGNsaWNrKT1cImlucHV0SWNvbkNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbi5uYW1lID09PSAnZXllT2ZmJyA/ICcnIDogJ2hpZGUnXCI+PC9zYS1pY29uPlxyXG4gICAgICAgICAgICB9QGVsc2UgaWYocGFyYW1zPy50eXBlID09PSAnZW1haWwnICYmIGljb24uc2hvdyl7XHJcbiAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIFtpY29uXT1cImljb24ubmFtZSB8fCAnY2hlY2tDaXJjbGVPdXRsaW5lZCdcIiBbc2l6ZV09XCJpY29uLnNpemUgfHwgJzI0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5wdXRJY29uQ2xpY2soKVwiIFtuZ0NsYXNzXT1cInNob3dFbWFpbEljb24gPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAZWxzZSBpZihpY29uPy5uYW1lKXtcclxuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiaWNvbi5uYW1lXCIgW3NpemVdPVwiaWNvbj8uc2l6ZSB8fCAnMjQnXCIgW2NvbG9yXT1cImljb24/LmNvbG9yIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImljb24/LnNob3cgPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZigoIWZvcm1Db250cm9sLnZhbGlkKSB8fCAocGFyYW1zPy5zdXBwb3J0VGV4dCkpe1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VwcG9ydC1sYWJlbCB7e2Zvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZCA/IHBhcmFtcz8uY2xhc3NOYW1lIDogJyd9fVwiIFtuZ0NsYXNzXT1cIltcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZCA/ICdpbnZhbGlkJyA6ICdpZGxlJ1xyXG4gICAgICAgICAgICAgIF1cIj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3shZm9ybUNvbnRyb2wudmFsaWQgPyBpbnB1dEVycm9yVGV4dCA6IHBhcmFtcy5zdXBwb3J0VGV4dH19IC0tPlxyXG4gICAgICAgICAgICAgICAge3tnZXRGb3JtU3VwcG9ydFRleHQoKX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQWdCN0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQTBCO0lBK0JoRTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBekJWLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsYUFBUSxHQUFHLEVBQUUs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QUNoQixjQUFjOzsyRkFLTCxrQkFBa0I7a0JBZjlCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixjQUFjO3FCQUNmO3dEQUt1QixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRVAsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQU1KLE1BQU07c0JBQWQsS0FBSzs7QUErVVIsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixnREFBNkIsQ0FBQTtJQUM3QixnREFBNkIsQ0FBQTtJQUM3Qiw0Q0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBnZXRWYWxpZGF0aW9uTWVzc2FnZSxcbiAgcGhvbmVOdW1iZXJWYWxpZGF0b3IsXG59IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuLi9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0IGFzIF9nZXQsIHNldCBhcyBfc2V0LCBtYXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybWx5TW9kdWxlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBDaGlwc0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtLWlucHV0LmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiB7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1JbnB1dCcpIGZvcm1JbnB1dCE6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCdpY29uJykgaWNvbjogSUlucHV0SWNvbjtcblxuICBwcmV0ZXh0OiBzdHJpbmc7XG5cbiAgaW5wdXRTdGF0ZSA9ICdpZGxlJztcbiAgaW5wdXRWYWwgPSAnJztcbiAgQElucHV0KCkgcGFyYW1zOiBJSW5wdXRQYXJhbSB8IG51bGw7XG4gIGRlcGVuZGVudDogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IG51bGw7XG4gIGRlcGVuZGVudFZhbDogYW55ID0gbnVsbDtcbiAgLy8gZHluYW1pY0ljb246IER5bmFtaWNJY29uIHwgbnVsbDtcbiAgLy8gaWNvbjogSUlucHV0SWNvbiB8IG51bGw7XG5cbiAgdHlwZTogc3RyaW5nID0gJyc7XG4gIHZhbGlkYXRvcnM6IGFueVtdO1xuICBhc3luY1ZhbGlkYXRvcnM6IGFueVtdO1xuXG4gIGlucHV0RXJyb3JUZXh0OiBzdHJpbmcgPSAnaW52YWxpZCBpbnB1dCc7XG5cbiAgc2hvd0VtYWlsSWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGlwVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBpc011bHRpVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudElucHV0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBzdGFydEluZDogbnVtYmVyID0gMDtcbiAgbGFiZWxMaW1pdDogbnVtYmVyID0gMTtcblxuICBwcml2YXRlIHN1cHByZXNzT25CbHVyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5wdXRWYWwgPSBfZ2V0KHRoaXMuZmllbGQucHJvcHMsICd2YWx1ZScsIF9nZXQodGhpcy5tb2RlbCwgdGhpcy5rZXkpKSB8fCAnJztcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5maWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZTtcbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcblxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5wYXJhbXMgfHwgdGhpcy5maWVsZC5wcm9wc1sncGFyYW1zJ107XG4gICAgdGhpcy5pY29uID0gdGhpcy5pY29uIHx8IHRoaXMuZmllbGQucHJvcHNbJ2ljb24nXSB8fCB7fTtcbiAgICB0aGlzLnR5cGUgPSB0aGlzLnBhcmFtcz8udHlwZSB8fCAnJztcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgX3NldCh0aGlzLmZvcm1JbnB1dCwgJ25hdGl2ZUVsZW1lbnQudmFsdWUnLCB2YWwpO1xuICAgICAgLy8gSGFuZGxlIG11bHRpLXZhbHVlIGNoaXAgdXBkYXRlc1xuICAgICAgaWYgKHRoaXMuaXNNdWx0aVZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB0aGlzLmNoaXBWYWx1ZXMgPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIG11bHRpLXZhbHVlIG1vZGUgaWYgc3BlY2lmaWVkXG4gICAgaWYgKHRoaXMucGFyYW1zPy50eXBlID09PSAnbXVsdGktdmFsdWUnIHx8IHRoaXMucGFyYW1zPy5tdWx0aVZhbHVlKSB7XG4gICAgICB0aGlzLmlzTXVsdGlWYWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLmNoaXBWYWx1ZXMgPSB0aGlzLm1vZGVsW3RoaXMua2V5IGFzIHN0cmluZ10gfHwgdGhpcy5wYXJhbXM/LmNoaXBWYWx1ZXMgfHwgW107XG4gICAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgLy8gdGhpcy5keW5hbWljSWNvbiA9IHRoaXMuZmllbGQucHJvcHNbJ2R5bmFtaWNJY29uJ107XG4gICAgdGhpcy5zZXRWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5zZXREZXBlbmRlbnRzKCk7XG5cbiAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2VtYWlsJykge1xuICAgICAgICBpZiAoISF0aGlzLmlucHV0VmFsICYmICF0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dFbWFpbEljb24gPVxuICAgICAgICAgIHN0YXRlID09PSAnVkFMSUQnIHx8XG4gICAgICAgICAgKHN0YXRlID09PSAnSU5WQUxJRCcgJiZcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ2ludmFsaWQnKSAmJlxuICAgICAgICAgICAgISF0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgX3NldCh0aGlzLmZvcm1JbnB1dCwgJ25hdGl2ZUVsZW1lbnQudmFsdWUnLCB2YWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0VmFsaWRhdG9ycygpIHtcbiAgICB0aGlzLnZhbGlkYXRvcnMgPSB0aGlzLnBhcmFtcz8udmFsaWRhdG9ycyB8fCB0aGlzLnByZWRlZmluZWRWYWxpZGF0b3JzW3RoaXMudHlwZV0gfHwgW107XG4gICAgdGhpcy5hc3luY1ZhbGlkYXRvcnMgPSB0aGlzLnBhcmFtcz8uYXN5bmNWYWxpZGF0b3JzIHx8IFtdO1xuICAgIGlmKCFfZ2V0KHRoaXMuZmllbGQsICd2YWxpZGF0b3JzLnZhbGlkYXRpb24nLCBudWxsKSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgIC4uLih0aGlzLnR5cGUgPyB0aGlzLnByZWRlZmluZWRWYWxpZGF0b3JzW3RoaXMudHlwZV0gfHwgW10gOiBbXSksXG4gICAgICAgIC4uLih0aGlzLnZhbGlkYXRvcnMpLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIEFzc3VtaW5nIGRlcGVuZGVudCBmaWVsZCBpcyBhIHNpbmdsZSBzZWxlY3QgZHJvcGRvd25cbiAgKi9cbiAgc2V0RGVwZW5kZW50cygpIHtcbiAgICBpZiAodGhpcy5wYXJhbXM/LmRlcGVuZGVudCkge1xuICAgICAgdGhpcy5kZXBlbmRlbnQgPSB0aGlzLmZvcm0uZ2V0KFt0aGlzLnBhcmFtcz8uZGVwZW5kZW50XSk7XG5cbiAgICAgIHRoaXMuZGVwZW5kZW50VmFsID0gdGhpcy5nZXREZXBlbmRlbnRWYWwoX2dldCh0aGlzLmRlcGVuZGVudCwgJ3ZhbHVlJykpO1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgdGhpcy5wcmV0ZXh0ID0gdGhpcy5kZXBlbmRlbnRWYWw/LmRpYWxfY29kZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZXBlbmRlbnQ/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICB0aGlzLmRlcGVuZGVudFZhbCA9IHRoaXMuZ2V0RGVwZW5kZW50VmFsKHZhbCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgICB0aGlzLnByZXRleHQgPSB0aGlzLmRlcGVuZGVudFZhbD8uZGlhbF9jb2RlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0RGVwZW5kZW50VmFsKHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgZGVwZW5kZW50VmFsdWU6IGFueTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGRlcGVuZGVudFZhbHVlID0gdmFsdWUubGVuZ3RoID8gdmFsdWVbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXBlbmRlbnRWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGVwZW5kZW50VmFsdWU7XG4gIH1cblxuICBjaGVja1ZhbGlkaXR5KGRlZmF1bHRJbnB1dFN0YXRlID0gJ2ZvY3VzJykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgJiZcbiAgICAgICF0aGlzLmZvcm1Db250cm9sLnZhbGlkICYmXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQgJiZcbiAgICAgICF0aGlzLmZvcm1Db250cm9sLnBlbmRpbmdcbiAgICApIHtcbiAgICAgIHRoaXMuaW5wdXRTdGF0ZSA9ICdpbnZhbGlkJztcbiAgICAgIHRoaXMuaW5wdXRFcnJvclRleHQgPVxuICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmZvcm1Db250cm9sLmVycm9ycywgdGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdJbnB1dCcsIHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgICAgICBuYXRpdmVWYWxpZGF0aW9uT2JqZWN0OiB0aGlzLmZpZWxkLnZhbGlkYXRpb24sXG4gICAgICAgIH0pIHx8IGBpbnZhbGlkICR7dGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdpbnB1dCd9YFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0U3RhdGUgPSBkZWZhdWx0SW5wdXRTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbGlkKSB0aGlzLmlucHV0U3RhdGUgPSAnZm9jdXMnO1xuICB9XG4gIG9uQmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zdXBwcmVzc09uQmx1cikge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkaXR5KCdpZGxlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cHByZXNzT25CbHVyID0gZmFsc2U7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWwgPSB0aGlzLmlucHV0VmFsLnJlcGxhY2UoL1teMC05KCkrXFwtIF0vZywgJycpO1xuICAgICAgdGhpcy5pbnB1dFZhbCA9IHRoaXMuaHlwaGVuYXRlUGhvbmVOdW1iZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyYW1zPy50eXBlID09PSAncGVyY2VudGFnZScpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuaW5wdXRWYWwucmVwbGFjZSgvW14wLTkuXS9nLCAnJyk7XG4gICAgICB0aGlzLmlucHV0VmFsID0gdmFsdWUgPyBgJHt2YWx1ZX0lYCA6ICcnO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcbiAgICB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAvKmlmICh0aGlzLnBhcmFtcz8uZXZlbnRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5wYXJhbXM/LmV2ZW50TGlzdGVuZXIoe1xuICAgICAgICB0eXBlOiBJSW5wdXRFdmVudFR5cGUuSU5QVVRfQ0hBTkdFLFxuICAgICAgICB2YWx1ZTogdGhpcy5pbnB1dFZhbCxcbiAgICAgICAgZm9ybUNvbnRyb2w6IHRoaXMuZm9ybUNvbnRyb2xcbiAgICAgIH0gYXMgSUlucHV0RXZlbnQpLnRoZW4odGhpcy5vbkZpZWxkQ2FsbGJhY2suYmluZCh0aGlzKSk7XG4gICAgfSovXG4gIH1cblxuICBoeXBoZW5hdGVQaG9uZU51bWJlcigpIHtcbiAgICBsZXQgbmV3U3RyID0gJyc7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBoeXBoZW5hdGVkQ291bnQgPSAxO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnB1dFZhbC5yZXBsYWNlQWxsKCctJywgJycpO1xuICAgIGZvciAoOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1N0ciA9IG5ld1N0ciArIHZhbHVlLmNoYXJBdChpKTtcbiAgICAgIGlmICghKGh5cGhlbmF0ZWRDb3VudCAlIDMpKSB7XG4gICAgICAgIGlmICghKChpICsgMSkgJSAxMCkgJiYgaSArIDEgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIgKyAnLSc7XG4gICAgICAgICAgaHlwaGVuYXRlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICEoKGkgKyAxIC0gTWF0aC5mbG9vcihoeXBoZW5hdGVkQ291bnQgLyAzKSkgJSAzKSAmJlxuICAgICAgICBpICsgMSA8IHZhbHVlLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIG5ld1N0ciA9IG5ld1N0ciArICctJztcbiAgICAgICAgaHlwaGVuYXRlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0cjtcbiAgfVxuXG4gIG9uSW5wdXRGaWVsZENsaWNrKGV2ZW50OiBhbnkgPSAnaW5wdXQnKSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQgPT09ICdpbnB1dCcgfHxcbiAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3NhLWlucHV0LWZpZWxkJylcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSAhPT0gJ2VtYWlsJylcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb3JtSW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWwubGVuZ3RoLFxuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbC5sZW5ndGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0SWNvbkNsaWNrKCkge1xuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgdGhpcy5zdXBwcmVzc09uQmx1ciA9IHRydWU7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgdGhpcy5pY29uLm5hbWUgPSAnZXllT2ZmJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgIHRoaXMuaWNvbi5uYW1lID0gJ2V5ZU91dGxpbmVkJztcbiAgICAgIH1cbiAgICAgIHRoaXMub25JbnB1dEZpZWxkQ2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBhZGRDaGlwKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlIHx8ICF2YWx1ZS50cmltKCkpIHJldHVybjsgIFxuICAgIGNvbnN0IGNoaXBWYWx1ZSA9IHtcbiAgICAgIGxhYmVsOiB2YWx1ZS50cmltKCksXG4gICAgICB2YWx1ZTogdmFsdWUudHJpbSgpLFxuICAgICAgcmVtb3ZhYmxlOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLmNoaXBWYWx1ZXMucHVzaChjaGlwVmFsdWUpOyAgICBcbiAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSBtYXAodGhpcy5jaGlwVmFsdWVzLCAoY2hpcDogYW55KSA9PiBjaGlwLnZhbHVlIHx8IGNoaXAubGFiZWwgfHwgY2hpcCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUoYWN0dWFsVmFsdWVzKTtcbiAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5tb2RlbFt0aGlzLmtleSBhcyBzdHJpbmddID0gYWN0dWFsVmFsdWVzO1xuICB9XG4gIFxuICByZW1vdmVDaGlwKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47ICBcbiAgICB0aGlzLmNoaXBWYWx1ZXMuc3BsaWNlKGluZGV4LCAxKTsgIFxuICAgIGNvbnN0IGFjdHVhbFZhbHVlcyA9IG1hcCh0aGlzLmNoaXBWYWx1ZXMsIChjaGlwOiBhbnkpID0+IGNoaXAudmFsdWUgfHwgY2hpcC5sYWJlbCB8fCBjaGlwKTtcbiAgICB0aGlzLm1vZGVsW3RoaXMua2V5IGFzIHN0cmluZ10gPSBhY3R1YWxWYWx1ZXM7XG4gIH1cblxuICBvbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlWYWx1ZSkgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnLCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmFkZENoaXAodGhpcy5jdXJyZW50SW5wdXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmICF0aGlzLmN1cnJlbnRJbnB1dFZhbHVlICYmIHRoaXMuY2hpcFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbW92ZUNoaXAodGhpcy5jaGlwVmFsdWVzLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuICBcbiAgb25DaGlwSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5pc011bHRpVmFsdWUpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgb25DaGlwQmx1cigpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY3VycmVudElucHV0VmFsdWUudHJpbSgpKSB7XG4gICAgICB0aGlzLmFkZENoaXAodGhpcy5jdXJyZW50SW5wdXRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qb25GaWVsZENhbGxiYWNrKHBhcmFtOiBJSW5wdXRQYXJhbSkge1xuICAgIHRoaXMuaWNvbiA9IHBhcmFtLmljb24gfHwgdGhpcy5pY29uO1xuICAgIHRoaXMuY2hlY2tWYWxpZGl0eSgpO1xuICB9Ki9cblxuICBnZXRGb3JtU3VwcG9ydFRleHQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzLnBhcmFtcz8ucGxhY2Vob2xkZXIgfHwgdGhpcy5maWVsZC5wcm9wcz8ubGFiZWwgfHwgJ0lucHV0Jyx7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgbmF0aXZlVmFsaWRhdGlvbk9iamVjdDogX2dldCh0aGlzLmZpZWxkLCAndmFsaWRhdGlvbicpLFxuICAgICAgICB9KSB8fFxuICAgICAgICBgaW52YWxpZCAke3RoaXMucGFyYW1zPy5wbGFjZWhvbGRlciB8fCB0aGlzLmZpZWxkLnByb3BzPy5sYWJlbCB8fCAnaW5wdXQnfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmFtcz8uc3VwcG9ydFRleHQgfHwgJyc7XG4gICAgfVxuICB9XG5cbiAgcHJlZGVmaW5lZFZhbGlkYXRvcnM6IGFueSA9IHtcbiAgICBlbWFpbDogW1ZhbGlkYXRvcnMuZW1haWwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIHBhc3N3b3JkOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgdGVsOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOSArXFxcXC0oKV0qJCcpXSxcbiAgfTtcblxuICBnZXRMYWJlbEZpZWxkR2FwKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcHM/LlsnYmlnTGFiZWwnXSkge1xuICAgICAgcmV0dXJuICd2YXIoLS1tZWRpdW0tMjBweCknO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcz8uWydsYWJlbCddKSB7XG4gICAgICByZXR1cm4gJ3ZhcigtLXNtYWxsLTRweCknO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzBweCc7IC8vIE5vIGdhcFxuICAgIH1cbiAgfVxuXG4gIHNoaWZ0TGFiZWwoYWN0aW9uOiAnY2xpY2tlZCcgfCAnY2xlYXJlZCcpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2tlZCcpIHtcbiAgICAgIHRoaXMuc3RhcnRJbmQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0SW5kID0gTWF0aC5tYXgoMCwgdGhpcy5jaGlwVmFsdWVzLmxlbmd0aCAtIHRoaXMubGFiZWxMaW1pdCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0SWNvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2hvdz86IGJvb2xlYW47XG4gIGNvbG9yPzogc3RyaW5nO1xuICBzaXplPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dFBhcmFtIHtcbiAgdmFsaWRhdG9ycz86IGFueVtdO1xuICBhc3luY1ZhbGlkYXRvcnM/OiBhbnlbXTtcbiAgc3VwcG9ydFRleHQ/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBkZXBlbmRlbnQ/OiBzdHJpbmc7XG4gIGV2ZW50TGlzdGVuZXI/OiBGdW5jdGlvbjtcbiAgaWNvbj86IElJbnB1dEljb247XG4gIGVycm9ycz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlWYWx1ZT86IGJvb2xlYW47IC8vIGZvciBtdWx0aS12YWx1ZSBjaGlwIHN1cHBvcnRcbiAgY2hpcFZhbHVlcz86IGFueVtdOyAvLyBmb3IgbXVsdGktdmFsdWUgY2hpcCBzdXBwb3J0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0RXZlbnQge1xuICB0eXBlOiBJSW5wdXRFdmVudFR5cGU7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNhbGxCYWNrOiBhbnk7XG4gIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbn1cbmV4cG9ydCBlbnVtIElJbnB1dEV2ZW50VHlwZSB7XG4gIElOUFVUX0NIQU5HRSA9ICdJTlBVVF9DSEFOR0UnLFxuICBTVEFURV9DSEFOR0UgPSAnU1RBVEVfQ0hBTkdFJyxcbiAgSUNPTl9DTElDSyA9ICdJQ09OX0NMSUNLJyxcbn1cbiIsIjxkaXYgY2xhc3M9XCJzYS1pbnB1dC1jb250YWluZXIge3twcm9wcz8uWydpbnB1dENvbnRhaW5lckNsYXNzJ119fVwiIFtuZ1N0eWxlXT1cInsnZ2FwJzogZ2V0TGFiZWxGaWVsZEdhcCgpfVwiPlxuICAgIEBpZiAoISFwcm9wcz8uWydiaWdMYWJlbCddIHx8ICEhcHJvcHM/LlsnYmlnRGVzY3JpcHRpb24nXSkge1xuICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1iaWctbGFiZWwtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJycgXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cInNhLWlucHV0LWJpZy1sYWJlbFwiPlxuICAgICAgICAgICAge3twcm9wcz8uWydiaWdMYWJlbCddfX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPHAgY2xhc3M9XCJzYS1pbnB1dC1iaWctZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIHt7cHJvcHM/LlsnYmlnRGVzY3JpcHRpb24nXX19XG4gICAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmKCEhcHJvcHM/LlsnbGFiZWwnXSl7XG4gICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWxhYmVsLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnIFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2EtaW5wdXQtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2EtaW5wdXQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7e3Byb3BzPy5bJ2xhYmVsJ119fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgQGlmKCEhcHJvcHM/LlsndG9vbHRpcCddKXtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJwcm9wcz8uWyd0b29sdGlwJ11cIiBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cInByb3BzPy5bJ3Rvb2x0aXBJY29uU2l6ZSddIHx8ICcyMCdcIj48L3NhLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYoISFwcm9wcz8uWydkZXNjcmlwdGlvbiddKSB7XG4gICAgICAgIDxwIGNsYXNzPVwic2EtaW5wdXQtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIHt7cHJvcHM/LlsnZGVzY3JpcHRpb24nXX19XG4gICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwic2EtaW5wdXRcIiBbbmdDbGFzc109XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiAnJyBcIj5cbiAgICAgICAgQGlmKChwcmV0ZXh0IHx8ICghIWlucHV0VmFsPy5sZW5ndGggJiYgKCEhcGFyYW1zPy5wbGFjZWhvbGRlciB8fCAhIXByb3BzPy5wbGFjZWhvbGRlcikpKSAmJiBwcm9wcz8uWydzaG93VGFnJ11cbiAgICAgICAgIT09IGZhbHNlKXtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYS1pbnB1dC10YWdcIj57e3BhcmFtcz8ucGxhY2Vob2xkZXIgfHwgcHJvcHM/LnBsYWNlaG9sZGVyfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWZpZWxkXCIgW25nQ2xhc3NdPVwiZm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkID8gJ2ludmFsaWQnIDogJ2lkbGUnIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbnB1dEZpZWxkQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgQGlmKHByZXRleHQpe1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LXByZXRleHRcIj5cbiAgICAgICAgICAgICAgICB7e3ByZXRleHR9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gTXVsdGktdmFsdWUgY2hpcCBkaXNwbGF5IC0tPlxuICAgICAgICAgICAgQGlmKGlzTXVsdGlWYWx1ZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2EtY2hpcCBcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlwIG9mIChjaGlwVmFsdWVzIHx8IFtdKT8uc2xpY2Uoc3RhcnRJbmQsc3RhcnRJbmQrbGFiZWxMaW1pdCkgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjaGlwPy52YWx1ZSB8fCBjaGlwPy5sYWJlbCB8fCBjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidyZWd1bGFyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxsaW5nXT1cIidmaWxsZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvblBhdGhdPVwiJy4uL2Fzc2V0cy9jbG9zZUJsdWVPdXRsaW5lZC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrRXZlbnQpPVwicmVtb3ZlQ2hpcChpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3NhLWNoaXA+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzaGlmdExhYmVsKCdjbGlja2VkJylcIiBjbGFzcz1cIm5nLXZhbHVlIG92ZXJmbG93LWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGNoaXBWYWx1ZXMgfHwgW10pLmxlbmd0aCA+IChzdGFydEluZCArIGxhYmVsTGltaXQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2EtY2hpcCBbdGV4dF09XCInKycgKyAoKGNoaXBWYWx1ZXMgfHwgW10pLmxlbmd0aCAtIChzdGFydEluZCArIGxhYmVsTGltaXQpKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmVndWxhclwiICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9XCJwcmltYXJ5XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxpbmc9XCJmaWxsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2EtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCInY2hpcC1pbnB1dCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgW3R5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNoaXBWYWx1ZXMubGVuZ3RoID09PSAwID8gKHByb3BzPy5wbGFjZWhvbGRlciB8fCBwYXJhbXM/LnBsYWNlaG9sZGVyIHx8ICcnKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25DaGlwQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoaXBJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ2hpcEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRJbnB1dFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNmb3JtSW5wdXQgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDwhLS0gU3RhbmRhcmQgc2luZ2xlLXZhbHVlIGlucHV0IChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSAtLT5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKCEhaW5wdXRWYWwgJiYgKHBhcmFtcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJyB8fCBwcm9wcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJykgJiYgaWNvbi5uYW1lICE9PSAnZXllT2ZmJykgPyAnbWFza2VkJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgW3R5cGVdPVwicHJvcHM/LnR5cGUgfHwgdHlwZVwiIHZhbHVlPVwiXCIgW3BhdHRlcm5dPVwidHlwZT09PSd0ZWwnID8gJ1swLTldJyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIhcHJldGV4dCAmJiBwcm9wcz8ucGxhY2Vob2xkZXIgfHwgcGFyYW1zPy5wbGFjZWhvbGRlciB8fCAnJ1wiIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIiBbKG5nTW9kZWwpXT1cImlucHV0VmFsXCIgI2Zvcm1JbnB1dCAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYocGFyYW1zPy50eXBlID09PSAncGFzc3dvcmQnKXtcbiAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIGljb249XCJleWVPdXRsaW5lZFwiIFtzaXplXT1cImljb24uc2l6ZSB8fCAnMjQnXCIgKGNsaWNrKT1cImlucHV0SWNvbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFpY29uLm5hbWUgfHwgaWNvbi5uYW1lID09PSAnZXllT3V0bGluZWQnID8gJycgOiAnaGlkZSdcIj48L3NhLWljb24+XG4gICAgICAgICAgICA8c2EtaWNvbiBjbGFzcz1cImZsZXhcIiBpY29uPVwiZXllT2ZmXCIgW3NpemVdPVwiaWNvbi5zaXplIHx8ICcyNCdcIiAoY2xpY2spPVwiaW5wdXRJY29uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbi5uYW1lID09PSAnZXllT2ZmJyA/ICcnIDogJ2hpZGUnXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgfUBlbHNlIGlmKHBhcmFtcz8udHlwZSA9PT0gJ2VtYWlsJyAmJiBpY29uLnNob3cpe1xuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiaWNvbi5uYW1lIHx8ICdjaGVja0NpcmNsZU91dGxpbmVkJ1wiIFtzaXplXT1cImljb24uc2l6ZSB8fCAnMjQnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5wdXRJY29uQ2xpY2soKVwiIFtuZ0NsYXNzXT1cInNob3dFbWFpbEljb24gPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBlbHNlIGlmKGljb24/Lm5hbWUpe1xuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiaWNvbi5uYW1lXCIgW3NpemVdPVwiaWNvbj8uc2l6ZSB8fCAnMjQnXCIgW2NvbG9yXT1cImljb24/LmNvbG9yIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uPy5zaG93ID8gJycgOiAnaGlkZSdcIj48L3NhLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYoKCFmb3JtQ29udHJvbC52YWxpZCkgfHwgKHBhcmFtcz8uc3VwcG9ydFRleHQpKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXBwb3J0LWxhYmVsIHt7Zm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkID8gcGFyYW1zPy5jbGFzc05hbWUgOiAnJ319XCIgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZCA/ICdpbnZhbGlkJyA6ICdpZGxlJ1xuICAgICAgICAgICAgICBdXCI+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyFmb3JtQ29udHJvbC52YWxpZCA/IGlucHV0RXJyb3JUZXh0IDogcGFyYW1zLnN1cHBvcnRUZXh0fX0gLS0+XG4gICAgICAgICAgICAgICAge3tnZXRGb3JtU3VwcG9ydFRleHQoKX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==