ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
139 lines (138 loc) • 29.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input } from "@angular/core";
import { MediaObserver } from "@angular/flex-layout";
import { XmatBreakpointKeys } from "../../models";
import { chunk, merge, map, forEach } from "lodash";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
export class XmatSummaryComponent {
/**
* @param {?} mediaService
*/
constructor(mediaService) {
this.summary = [];
this._currentMqAlias = "lg";
this._defaults = {
data: {},
printMap: {},
labelsMap: {},
columns: {
[XmatBreakpointKeys.xl]: 1,
[XmatBreakpointKeys.lg]: 1,
[XmatBreakpointKeys.md]: 1,
[XmatBreakpointKeys.sm]: 1,
[XmatBreakpointKeys.xs]: 1,
}
};
this._subsCtrl$ = new Subject();
mediaService.asObservable()
.pipe(takeUntil(this._subsCtrl$))
.subscribe((changes) => {
/** @type {?} */
const change = changes[0];
/** @type {?} */
const previousMqAlias = this._currentMqAlias; // Clone previous state to check for columns change
if (previousMqAlias !== change.mqAlias) {
this._currentMqAlias = change.mqAlias;
!!this._config && this._needsBuild(previousMqAlias, change.mqAlias) && this._buildSummary();
}
});
}
/**
* @param {?} newValue
* @return {?}
*/
set config(newValue) {
this._config = merge({}, this._defaults, newValue);
if (!Array.isArray(this._config.props) || !this._config.props.length) {
this._config.props = Object.keys(this._config.data);
}
this._checkColumnsConfig();
this._buildSummary();
}
/**
* @return {?}
*/
get config() {
return this._config;
}
/**
* @return {?}
*/
ngOnDestroy() {
this._subsCtrl$.next();
}
/**
* @return {?}
*/
_buildSummary() {
/** @type {?} */
const chunks = Math.ceil(this._config.props.length / (this._config.columns[this._currentMqAlias] || 1));
// console.info(`XMAT-SUMMARY => ${chunks} CHUNKS FOR ${this._config.props.length} PROPS`);
this.summary = Object.keys(this._config.data).length ? chunk(this._mapData(), chunks) : void 0;
}
/**
* @return {?}
*/
_checkColumnsConfig() {
forEach(this._config.columns, (value, mqAlias) => {
if (typeof value !== typeof 0 || value < 1) {
this._config.columns[mqAlias] = 1;
}
if (value > this._config.props.length) {
this._config.columns[mqAlias] = Math.max(1, this._config.props.length);
}
});
}
/**
* @return {?}
*/
_mapData() {
return map(this._config.props, (k) => {
/** @type {?} */
const value = this._config.data[k];
return /** @type {?} */ ({
value: this._config.printMap[k] ? this._config.printMap[k](value) : value,
description: this._config.labelsMap[k] !== void 0 ? this._config.labelsMap[k] : k
});
});
}
/**
* @param {?} previousMqAlias
* @param {?} nextMqAlias
* @return {?}
*/
_needsBuild(previousMqAlias, nextMqAlias) {
return this._config.columns[previousMqAlias] !== this._config.columns[nextMqAlias];
}
}
XmatSummaryComponent.decorators = [
{ type: Component, args: [{
selector: "xmat-summary",
template: "<div class=\"xmat-summary\"\n fxLayout=\"row wrap\"\n fxLayoutGap=\"2%\">\n <div fxFlex=\"98\"\n [fxFlex.xl]=\"98 / config.columns.xl\"\n [fxFlex.lg]=\"98 / config.columns.lg\"\n [fxFlex.md]=\"98 / config.columns.md\"\n [fxFlex.sm]=\"98 / config.columns.sm\"\n [fxFlex.xs]=\"98 / config.columns.xs\"\n *ngFor=\"let column of summary\">\n <div fxLayout\n class=\"xmat-summary-row\"\n *ngFor=\"let field of column\">\n <div fxFlex=\"35\"\n [ngClass]=\"{'xmat-capitalize-first': !config.noCapitalize}\"\n class=\"xmat-text-left\">\n <strong>{{field.description}}</strong>\n </div>\n <div fxFlex=\"65\"\n class=\"xmat-text-right\">\n {{field.value}}\n </div>\n </div>\n </div>\n</div>",
styles: [".mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-badge-small .mat-badge-content{font-size:6px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button,.mat-stroked-button{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-content,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-remove.mat-icon,.mat-chip .mat-chip-trailing-icon.mat-icon{font-size:18px}.mat-table{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif}.mat-expansion-panel-header{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.34375em) scale(.75);transform:translateY(-1.34375em) scale(.75);width:133.33333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.34374em) scale(.75);transform:translateY(-1.34374em) scale(.75);width:133.33334%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28122em) scale(.75);transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28121em) scale(.75);transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.2812em) scale(.75);transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-.59375em) scale(.75);transform:translateY(-.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-.59374em) scale(.75);transform:translateY(-.59374em) scale(.75);width:133.33334%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.59375em) scale(.75);transform:translateY(-1.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.59374em) scale(.75);transform:translateY(-1.59374em) scale(.75);width:133.33334%}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0}.mat-tooltip{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-simple-snackbar{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-nested-tree-node,.mat-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;-webkit-transition:opacity,-webkit-transform cubic-bezier(0,0,.2,1);transition:opacity,transform cubic-bezier(0,0,.2,1),-webkit-transform cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}@media (-ms-high-contrast:active){.mat-ripple-element{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:-webkit-box;display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:-webkit-box;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast:active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@-webkit-keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-start{/*!*/}@-webkit-keyframes cdk-text-field-autofill-end{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{height:auto!important;overflow:hidden!important;padding:2px 0!important;box-sizing:content-box!important}.xmat-summary .xmat-summary-row{padding-top:8px;border-bottom:1px dotted rgba(0,0,0,.2);-webkit-box-align:center;align-items:center;line-height:24px;position:relative}.xmat-summary .xmat-summary-row i.fa-chevron-right{line-height:32px}.xmat-summary .xmat-summary-row i.extra-info-toggle{position:absolute;right:0}"]
}] }
];
/** @nocollapse */
XmatSummaryComponent.ctorParameters = () => [
{ type: MediaObserver }
];
XmatSummaryComponent.propDecorators = {
config: [{ type: Input }]
};
if (false) {
/** @type {?} */
XmatSummaryComponent.prototype.summary;
/** @type {?} */
XmatSummaryComponent.prototype._currentMqAlias;
/** @type {?} */
XmatSummaryComponent.prototype._config;
/** @type {?} */
XmatSummaryComponent.prototype._defaults;
/** @type {?} */
XmatSummaryComponent.prototype._subsCtrl$;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXQtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMveG1hdC1zdW1tYXJ5L3htYXQtc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBYyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQWdDLE1BQU0sY0FBYyxDQUFDO0FBRS9FLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPekMsTUFBTSxPQUFPLG9CQUFvQjs7OztJQWtDN0IsWUFBWSxZQUEyQjtRQWxCdkMsZUFBMEIsRUFBRSxDQUFDOytCQUVLLElBQUk7eUJBRUM7WUFDbkMsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUUsRUFBRTtZQUNaLFNBQVMsRUFBRSxFQUFFO1lBQ2IsT0FBTyxFQUFFO2dCQUNMLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMxQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzdCO1NBQ0o7MEJBQ21DLElBQUksT0FBTyxFQUFRO1FBR25ELFlBQVksQ0FBQyxZQUFZ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ekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMseUJBQU87Z0JBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDekUsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RSxFQUFDO1NBQ25CLENBQUMsQ0FBQztLQUNOOzs7Ozs7SUFFUyxXQUFXLENBQUMsZUFBdUIsRUFBRSxXQUFXO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDdEY7OztZQXRGSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLGs1QkFBNEM7O2FBRS9DOzs7O1lBWm9CLGFBQWE7OztxQkFlN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtNZWRpYUNoYW5nZSwgTWVkaWFPYnNlcnZlcn0gZnJvbSBcIkBhbmd1bGFyL2ZsZXgtbGF5b3V0XCI7XG4vL1xuaW1wb3J0IHtYbWF0QnJlYWtwb2ludEtleXMsIFhtYXRTZWxlY3QsIFhtYXRTdW1tYXJ5Q29uZmlnfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XG4vL1xuaW1wb3J0IHtjaHVuaywgbWVyZ2UsIG1hcCwgZm9yRWFjaH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJ4bWF0LXN1bW1hcnlcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3htYXQtc3VtbWFyeS5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi94bWF0LXN1bW1hcnkuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgWG1hdFN1bW1hcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgY29uZmlnKG5ld1ZhbHVlOiBYbWF0U3VtbWFyeUNvbmZpZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBtZXJnZSh7fSwgdGhpcy5fZGVmYXVsdHMsIG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuX2NvbmZpZy5wcm9wcykgfHwgIXRoaXMuX2NvbmZpZy5wcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5wcm9wcyA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbmZpZy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGVja0NvbHVtbnNDb25maWcoKTtcbiAgICAgICAgdGhpcy5fYnVpbGRTdW1tYXJ5KCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZygpOiBYbWF0U3VtbWFyeUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgc3VtbWFyeTogWG1hdFNlbGVjdFtdW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2N1cnJlbnRNcUFsaWFzOiBzdHJpbmcgPSBcImxnXCI7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBYbWF0U3VtbWFyeUNvbmZpZztcbiAgICBwcml2YXRlIF9kZWZhdWx0czogWG1hdFN1bW1hcnlDb25maWcgPSB7XG4gICAgICAgIGRhdGE6IHt9LFxuICAgICAgICBwcmludE1hcDoge30sXG4gICAgICAgIGxhYmVsc01hcDoge30sXG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAgIFtYbWF0QnJlYWtwb2ludEtleXMueGxdOiAxLFxuICAgICAgICAgICAgW1htYXRCcmVha3BvaW50S2V5cy5sZ106IDEsXG4gICAgICAgICAgICBbWG1hdEJyZWFrcG9pbnRLZXlzLm1kXTogMSxcbiAgICAgICAgICAgIFtYbWF0QnJlYWtwb2ludEtleXMuc21dOiAxLFxuICAgICAgICAgICAgW1htYXRCcmVha3BvaW50S2V5cy54c106IDEsXG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByaXZhdGUgX3N1YnNDdHJsJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihtZWRpYVNlcnZpY2U6IE1lZGlhT2JzZXJ2ZXIpIHtcbiAgICAgICAgbWVkaWFTZXJ2aWNlLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9zdWJzQ3RybCQpKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2VzOiBNZWRpYUNoYW5nZVtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzWzBdO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNNcUFsaWFzID0gdGhpcy5fY3VycmVudE1xQWxpYXM7IC8vIENsb25lIHByZXZpb3VzIHN0YXRlIHRvIGNoZWNrIGZvciBjb2x1bW5zIGNoYW5nZVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzTXFBbGlhcyAhPT0gY2hhbmdlLm1xQWxpYXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50TXFBbGlhcyA9IGNoYW5nZS5tcUFsaWFzO1xuICAgICAgICAgICAgICAgICEhdGhpcy5fY29uZmlnICYmIHRoaXMuX25lZWRzQnVpbGQocHJldmlvdXNNcUFsaWFzLCBjaGFuZ2UubXFBbGlhcykgJiYgdGhpcy5fYnVpbGRTdW1tYXJ5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzQ3RybCQubmV4dCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfYnVpbGRTdW1tYXJ5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjaHVua3MgPSBNYXRoLmNlaWwodGhpcy5fY29uZmlnLnByb3BzLmxlbmd0aCAvICh0aGlzLl9jb25maWcuY29sdW1uc1t0aGlzLl9jdXJyZW50TXFBbGlhc10gfHwgMSkpO1xuICAgICAgICAvLyBjb25zb2xlLmluZm8oYFhNQVQtU1VNTUFSWSA9PiAke2NodW5rc30gQ0hVTktTIEZPUiAke3RoaXMuX2NvbmZpZy5wcm9wcy5sZW5ndGh9IFBST1BTYCk7XG4gICAgICAgIHRoaXMuc3VtbWFyeSA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbmZpZy5kYXRhKS5sZW5ndGggPyBjaHVuayh0aGlzLl9tYXBEYXRhKCksIGNodW5rcykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jaGVja0NvbHVtbnNDb25maWcoKTogdm9pZCB7XG4gICAgICAgIGZvckVhY2godGhpcy5fY29uZmlnLmNvbHVtbnMsICh2YWx1ZTogbnVtYmVyLCBtcUFsaWFzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiAwIHx8IHZhbHVlIDwgMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5jb2x1bW5zW21xQWxpYXNdID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IHRoaXMuX2NvbmZpZy5wcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWcuY29sdW1uc1ttcUFsaWFzXSA9IE1hdGgubWF4KDEsIHRoaXMuX2NvbmZpZy5wcm9wcy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbWFwRGF0YSgpOiBYbWF0U2VsZWN0W10ge1xuICAgICAgICByZXR1cm4gbWFwKHRoaXMuX2NvbmZpZy5wcm9wcywgKGs6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWcuZGF0YVtrXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NvbmZpZy5wcmludE1hcFtrXSA/IHRoaXMuX2NvbmZpZy5wcmludE1hcFtrXSh2YWx1ZSkgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5fY29uZmlnLmxhYmVsc01hcFtrXSAhPT0gdm9pZCAwID8gdGhpcy5fY29uZmlnLmxhYmVsc01hcFtrXSA6IGtcbiAgICAgICAgICAgIH0gYXMgWG1hdFNlbGVjdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9uZWVkc0J1aWxkKHByZXZpb3VzTXFBbGlhczogc3RyaW5nLCBuZXh0TXFBbGlhcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmNvbHVtbnNbcHJldmlvdXNNcUFsaWFzXSAhPT0gdGhpcy5fY29uZmlnLmNvbHVtbnNbbmV4dE1xQWxpYXNdO1xuICAgIH1cblxufVxuIl19