@openexo/design-system
Version:
OpenExO design system
310 lines • 35.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/avatar/avatar.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
/** @enum {string} */
var SizeAvatarEnum = {
xs: "xs",
sm: "sm",
lg: "lg",
xl: "xl",
};
/** @enum {string} */
var ShapeEnum = {
circle: "circle",
rect: "rect",
};
/**
* @record
*/
function Certificate() { }
if (false) {
/** @type {?} */
Certificate.prototype.code;
/** @type {?} */
Certificate.prototype.name;
/** @type {?|undefined} */
Certificate.prototype.humanizedCode;
}
/** @enum {string} */
var CertificateEnum = {
FOUNDATION: "CFO",
CONSULTANT: "CCO",
SPRINT_COACH: "CSC",
AMBASSADOR: "CEA",
TRAINER: "CTR",
BOARD_ADVISOR: "CBA",
};
var ExOAvatarComponent = /** @class */ (function () {
function ExOAvatarComponent() {
/**
* By default will use SizeAvatarEnum.sm
* (xs (24px), sm(48px), lg(96px), xl(144px))
*/
this.size = SizeAvatarEnum.sm;
/**
* Shape of the avatar. By default will be circle.
*/
this.shape = ShapeEnum.circle;
/**
* Position where the tooltip will show. By default is below.
*/
this.tooltipPosition = 'below';
/**
* In other case, will emit an event and the parent will take the control (For example, to show a menu when click)
*/
this.onClick = new EventEmitter();
this.sizeAvatar = SizeAvatarEnum;
// If we increase a new certificate, we need add the new size of stroke.
this.valuesCertification = [
100, 47, 30, 22, 18, 15,
];
}
/**
* Sizes defined in the profile_picture array.
* @param size Must be xs, sm, lg, xl. If you need other, talk with design.
*/
/**
* Sizes defined in the profile_picture array.
* @param {?} size Must be xs, sm, lg, xl. If you need other, talk with design.
* @return {?}
*/
ExOAvatarComponent.parseSizeToNumber = /**
* Sizes defined in the profile_picture array.
* @param {?} size Must be xs, sm, lg, xl. If you need other, talk with design.
* @return {?}
*/
function (size) {
switch (size) {
case SizeAvatarEnum.xs:
return 24;
case SizeAvatarEnum.sm:
return 48;
case SizeAvatarEnum.lg:
return 96;
case SizeAvatarEnum.xl:
return 144;
}
};
Object.defineProperty(ExOAvatarComponent.prototype, "imageUrl", {
get: /**
* @return {?}
*/
function () {
if (this.src) {
return this.src;
}
if (this.item && this.item.profilePictures) {
return this.buildPicture(this.item.profilePictures);
}
return undefined;
},
enumerable: true,
configurable: true
});
/**
* @param {?} profilePictures
* @return {?}
*/
ExOAvatarComponent.prototype.buildPicture = /**
* @param {?} profilePictures
* @return {?}
*/
function (profilePictures) {
var _this = this;
/** @type {?} */
var picture = profilePictures.find((/**
* @param {?} pic
* @return {?}
*/
function (pic) { return pic.width === ExOAvatarComponent.parseSizeToNumber(_this.size); }));
return picture ? picture.url : undefined;
};
Object.defineProperty(ExOAvatarComponent.prototype, "imageAlt", {
get: /**
* @return {?}
*/
function () {
if (this.alt) {
return this.alt;
}
if (this.item) {
this.buildNameItem(this.item);
}
return 'Avatar';
},
enumerable: true,
configurable: true
});
/**
* Return name, fullName or shortName(in that order) from items to use in the Alt attr from image and the tooltips.
*/
/**
* Return name, fullName or shortName(in that order) from items to use in the Alt attr from image and the tooltips.
* @param {?} item
* @return {?}
*/
ExOAvatarComponent.prototype.buildNameItem = /**
* Return name, fullName or shortName(in that order) from items to use in the Alt attr from image and the tooltips.
* @param {?} item
* @return {?}
*/
function (item) {
if (item.name) {
return this.item.name;
}
if (item.fullName) {
return this.item.fullName;
}
if (item.shortName) {
return this.item.shortName;
}
};
Object.defineProperty(ExOAvatarComponent.prototype, "imageTooltip", {
get: /**
* @return {?}
*/
function () {
if (this.tooltip) {
return this.tooltip;
}
if (this.item) {
this.buildNameItem(this.item);
}
return undefined;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ExOAvatarComponent.prototype, "certificateTooltip", {
get: /**
* @return {?}
*/
function () {
if (this.certificates && this.certificates.length > 0) {
return this.certificates.map((/**
* @param {?} certificate
* @return {?}
*/
function (certificate) {
if (certificate.name) {
return "" + certificate.name;
}
if (certificate.humanizedCode) {
return "" + certificate.humanizedCode;
}
})).join('\n');
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
ExOAvatarComponent.prototype.click = /**
* @return {?}
*/
function () {
this.onClick.emit(true);
};
ExOAvatarComponent.decorators = [
{ type: Component, args: [{
selector: 'exo-avatar',
template: "<div *ngIf=\"!imageSet\">\n <figure *ngIf=\"imageUrl; else icon\"\n (click)=\"click()\"\n class=\"avatar__figure\"\n [ngClass]=\"['exo-image-' + size]\"\n >\n <img [src]=\"imageUrl\"\n [matTooltip]=\"imageTooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngStyle]=\"{width: customizedSize?.width, height: customizedSize?.height}\"\n [ngClass]=\"['exo-image', 'exo-image-' + size, 'exo-image-shape-' + shape]\"\n [alt]=\"imageAlt\"\n >\n </figure>\n</div>\n<ng-template #icon>\n <div>\n <mat-icon [ngClass]=\"['icon', 'icon-size-' + size]\"\n (click)=\"click()\"\n [matTooltip]=\"imageTooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n >account_circle</mat-icon>\n </div>\n</ng-template>\n\n<div class=\"certificates\" *ngIf=\"certificates\">\n <ng-container [ngSwitch]=\"size\">\n <div *ngSwitchCase=\"sizeAvatar.sm\">\n <ng-container [ngTemplateOutlet]=\"certificateTpl\" [ngTemplateOutletContext]=\"{class: 'medium-avatar', diameter: 56, stroke: 2}\"></ng-container>\n </div>\n <div *ngSwitchCase=\"sizeAvatar.lg\">\n <ng-container [ngTemplateOutlet]=\"certificateTpl\" [ngTemplateOutletContext]=\"{class: 'big-avatar', diameter: 108, stroke: 3}\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #certificateTpl let-class=\"class\" let-diameter=\"diameter\" let-stroke=\"stroke\">\n <div [ngClass]=\"class\" [matTooltip]=\"certificateTooltip\" matTooltipClass=\"line-breaker\">\n <mat-progress-spinner\n *ngFor=\"let certificate of certificates; let i=index;\"\n [diameter]=\"diameter\"\n [strokeWidth]=\"stroke\"\n [value]=\"valuesCertification[certificates.length - 1]\"\n [ngClass]=\"['certificate-' + i, certificate.code, 'number-certificates-' + certificates.length]\"\n ></mat-progress-spinner>\n </div>\n</ng-template>\n\n<div *ngIf=\"imageSet\" class=\"images-set\">\n <div class=\"avatars\">\n <span *ngIf=\"maxSetShowed < imageSet.length\" class=\"avatar remain\">\n <span class=\"number\">\n {{imageSet.length - maxSetShowed}}+\n </span>\n </span>\n <ng-container *ngFor=\"let item of imageSet; let i = index\">\n <span class=\"avatar\" *ngIf=\"i < maxSetShowed\">\n <figure *ngIf=\"item.src; else icon\" class=\"avatar__figure\">\n <img [src]=\"item.src\"\n [matTooltip]=\"item.tooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngStyle]=\"{width: customizedSize?.width, height: customizedSize?.height}\"\n [ngClass]=\"['exo-image', 'exo-image-' + size, 'exo-image-shape-' + shape]\"\n >\n </figure>\n </span>\n </ng-container>\n </div>\n</div>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".certificates .medium-avatar{margin-top:-52px;margin-left:-4px;width:56px;height:56px}.certificates .medium-avatar ::ng-deep circle{stroke-linecap:round}.certificates .medium-avatar ::ng-deep .CCO circle{stroke:#6ae5d5}.certificates .medium-avatar ::ng-deep .CEA circle{stroke:#ffb05c}.certificates .medium-avatar ::ng-deep .CSC circle{stroke:#0094d4}.certificates .medium-avatar ::ng-deep .CFO circle{stroke:#46464b}.certificates .medium-avatar ::ng-deep .CTR circle{stroke:#002e58}.certificates .medium-avatar ::ng-deep .CBA circle{stroke:#6f23ff}.certificates .medium-avatar ::ng-deep.number-certificates-0.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-1.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-1.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-1.certificate-1 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-1 circle{transform:rotate(186deg)}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-2 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-1 circle{transform:rotate(126deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-2 circle{transform:rotate(246deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-3 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-1 circle{transform:rotate(96deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-2 circle{transform:rotate(186deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-3 circle{transform:rotate(276deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-4 svg{margin-top:-224px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-4 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-1 circle{transform:rotate(78deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-2 circle{transform:rotate(150deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-3 circle{transform:rotate(222deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-4 svg{margin-top:-224px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-4 circle{transform:rotate(294deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-5 svg{margin-top:-280px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-5 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-1 circle{transform:rotate(66deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-2 circle{transform:rotate(126deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-3 circle{transform:rotate(186deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-4 svg{margin-top:-224px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-4 circle{transform:rotate(246deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-5 svg{margin-top:-280px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-5 circle{transform:rotate(306deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-6 svg{margin-top:-336px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-6 circle{transform:rotate(366deg)}.certificates .big-avatar{margin-top:-102px;margin-left:-6px;width:108px;height:108px}.certificates .big-avatar ::ng-deep circle{stroke-linecap:round}.certificates .big-avatar ::ng-deep .CCO circle{stroke:#6ae5d5}.certificates .big-avatar ::ng-deep .CEA circle{stroke:#ffb05c}.certificates .big-avatar ::ng-deep .CSC circle{stroke:#0094d4}.certificates .big-avatar ::ng-deep .CFO circle{stroke:#46464b}.certificates .big-avatar ::ng-deep .CTR circle{stroke:#002e58}.certificates .big-avatar ::ng-deep .CBA circle{stroke:#6f23ff}.certificates .big-avatar ::ng-deep.number-certificates-0.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-1.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-1.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-1.certificate-1 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-1 circle{transform:rotate(186deg)}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-2 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-1 circle{transform:rotate(126deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-2 circle{transform:rotate(246deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-3 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-1 circle{transform:rotate(96deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-2 circle{transform:rotate(186deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-3 circle{transform:rotate(276deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-4 svg{margin-top:-432px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-4 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-1 circle{transform:rotate(78deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-2 circle{transform:rotate(150deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-3 circle{transform:rotate(222deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-4 svg{margin-top:-432px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-4 circle{transform:rotate(294deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-5 svg{margin-top:-540px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-5 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-1 circle{transform:rotate(66deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-2 circle{transform:rotate(126deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-3 circle{transform:rotate(186deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-4 svg{margin-top:-432px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-4 circle{transform:rotate(246deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-5 svg{margin-top:-540px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-5 circle{transform:rotate(306deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-6 svg{margin-top:-648px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-6 circle{transform:rotate(366deg)}.images-set .avatars{display:inline-flex;flex-direction:row-reverse;margin:0 0 16px 16px}.images-set .avatars .avatar{margin-left:-16px;position:relative;border:1px solid #fff;border-radius:50%;overflow:hidden;width:48px;height:48px}.images-set .avatars .avatar.remain{background-color:#3a1090;color:#fff}.images-set .avatars .avatar.remain .number{flex-direction:column;display:flex;place-content:center;align-items:center;height:100%}"]
}] }
];
ExOAvatarComponent.propDecorators = {
maxSetShowed: [{ type: Input }],
imageSet: [{ type: Input }],
src: [{ type: Input }],
alt: [{ type: Input }],
customizedSize: [{ type: Input }],
size: [{ type: Input }],
shape: [{ type: Input }],
item: [{ type: Input }],
tooltip: [{ type: Input }],
tooltipPosition: [{ type: Input }],
certificates: [{ type: Input }],
onClick: [{ type: Output }]
};
return ExOAvatarComponent;
}());
export { ExOAvatarComponent };
if (false) {
/**
* Number that set the maximum of shown avatars
* @type {?}
*/
ExOAvatarComponent.prototype.maxSetShowed;
/**
* Custom array to load.
* You need to pass a tuple [{src, tooltip}] in array
* @type {?}
*/
ExOAvatarComponent.prototype.imageSet;
/**
* Custom src to load.
* If you send the user, will take from the user.profilePictures array with
* the size defined on the input size.
* @type {?}
*/
ExOAvatarComponent.prototype.src;
/**
* If you want add a custom alt to image. If you send the user, will take user.fullName by default.
* @type {?}
*/
ExOAvatarComponent.prototype.alt;
/**
* The component has defined 4 sizes by default (xs (24px), sm(48px), lg(96px), xl(144px)), but if you need
* other sizes you can send as { width: '40px', height: '40px'} and will overwrite the default sizes.
* @type {?}
*/
ExOAvatarComponent.prototype.customizedSize;
/**
* By default will use SizeAvatarEnum.sm
* (xs (24px), sm(48px), lg(96px), xl(144px))
* @type {?}
*/
ExOAvatarComponent.prototype.size;
/**
* Shape of the avatar. By default will be circle.
* @type {?}
*/
ExOAvatarComponent.prototype.shape;
/**
* Item can be a user or group, etc... If you send a item, you will get the info from alt, src, etc from the item.
* @type {?}
*/
ExOAvatarComponent.prototype.item;
/**
* Show tooltip in the image, if you send user will take the user.fullName by default.
* @type {?}
*/
ExOAvatarComponent.prototype.tooltip;
/**
* Position where the tooltip will show. By default is below.
* @type {?}
*/
ExOAvatarComponent.prototype.tooltipPosition;
/**
* Certificates only will work with the standards sizes, so this input can't combine with customizedSize.
* In the same way, only will work with the default shape (circle).
* @type {?}
*/
ExOAvatarComponent.prototype.certificates;
/**
* In other case, will emit an event and the parent will take the control (For example, to show a menu when click)
* @type {?}
*/
ExOAvatarComponent.prototype.onClick;
/** @type {?} */
ExOAvatarComponent.prototype.sizeAvatar;
/** @type {?} */
ExOAvatarComponent.prototype.valuesCertification;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BvcGVuZXhvL2Rlc2lnbi1zeXN0ZW0vIiwic291cmNlcyI6WyJsaWIvYXZhdGFyL2F2YXRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1oRyxJQUFLLGNBQWM7SUFDakIsRUFBRSxNQUFPO0lBQ1QsRUFBRSxNQUFPO0lBQ1QsRUFBRSxNQUFPO0lBQ1QsRUFBRSxNQUFPO0VBQ1Y7O0FBRUQsSUFBSyxTQUFTO0lBQ1osTUFBTSxVQUFXO0lBQ2pCLElBQUksUUFBUztFQUNkOzs7O0FBRUQsMEJBSUM7OztJQUhDLDJCQUFzQjs7SUFDdEIsMkJBQWE7O0lBQ2Isb0NBQXVCOzs7QUFHekIsSUFBSyxlQUFlO0lBQ2xCLFVBQVUsT0FBUTtJQUNsQixVQUFVLE9BQVE7SUFDbEIsWUFBWSxPQUFRO0lBQ3BCLFVBQVUsT0FBUTtJQUNsQixPQUFPLE9BQVE7SUFDZixhQUFhLE9BQVE7RUFDdEI7QUFFRDtJQUFBOzs7OztRQStDRSxTQUFJLEdBQWUsY0FBYyxDQUFDLEVBQUUsQ0FBQzs7OztRQU1yQyxVQUFLLEdBQWMsU0FBUyxDQUFDLE1BQU0sQ0FBQzs7OztRQWtCcEMsb0JBQWUsR0FBb0IsT0FBTyxDQUFDOzs7O1FBYTNDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXRDLGVBQVUsR0FBRyxjQUFjLENBQUM7O1FBRTVCLHdCQUFtQixHQUFHO1lBQ3BCLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtTQUN4QixDQUFDO0lBaUdKLENBQUM7SUEvRkM7OztPQUdHOzs7Ozs7SUFDSSxvQ0FBaUI7Ozs7O0lBQXhCLFVBQXlCLElBQWdCO1FBQ3ZDLFFBQVEs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QUMsSUFBSSxDQUFDLENBQUM7YUFDZjtRQUNILENBQUM7OztPQUFBOzs7O0lBRUQsa0NBQUs7OztJQUFMO1FBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7Z0JBekxGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsMnhGQUFzQztvQkFFdEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2lCQUNoRDs7OytCQU1FLEtBQUs7MkJBT0wsS0FBSztzQkFRTCxLQUFLO3NCQU1MLEtBQUs7aUNBT0wsS0FBSzt1QkFPTCxLQUFLO3dCQU1MLEtBQUs7dUJBTUwsS0FBSzswQkFNTCxLQUFLO2tDQU1MLEtBQUs7K0JBT0wsS0FBSzswQkFNTCxNQUFNOztJQXdHVCx5QkFBQztDQUFBLEFBM0xELElBMkxDO1NBckxZLGtCQUFrQjs7Ozs7O0lBSzdCLDBDQUNxQjs7Ozs7O0lBTXJCLHNDQUMyQzs7Ozs7OztJQU8zQyxpQ0FDWTs7Ozs7SUFLWixpQ0FDWTs7Ozs7O0lBTVosNENBQ2tEOzs7Ozs7SUFNbEQsa0NBQ3FDOzs7OztJQUtyQyxtQ0FDb0M7Ozs7O0lBS3BDLGtDQUNVOzs7OztJQUtWLHFDQUNnQjs7Ozs7SUFLaEIsNkNBQzJDOzs7Ozs7SUFNM0MsMENBQzRCOzs7OztJQUs1QixxQ0FDc0M7O0lBRXRDLHdDQUE0Qjs7SUFFNUIsaURBRUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBTaXplQXZhdGFyID0gJ3hzJyB8ICAnc20nIHwgJ2xnJyB8ICd4bCc7XG50eXBlIFNoYXBlVHlwZSA9ICdjaXJjbGUnIHwgJ3JlY3QnO1xudHlwZSBUb29sdGlwUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2Fib3ZlJyB8ICdiZWxvdycgfCAnYmVmb3JlJyB8ICdhZnRlcic7XG5cbmVudW0gU2l6ZUF2YXRhckVudW0ge1xuICB4cyA9ICd4cycsXG4gIHNtID0gJ3NtJyxcbiAgbGcgPSAnbGcnLFxuICB4bCA9ICd4bCcsXG59XG5cbmVudW0gU2hhcGVFbnVtIHtcbiAgY2lyY2xlID0gJ2NpcmNsZScsXG4gIHJlY3QgPSAncmVjdCcsXG59XG5cbmludGVyZmFjZSBDZXJ0aWZpY2F0ZSB7XG4gIGNvZGU6IENlcnRpZmljYXRlRW51bTtcbiAgbmFtZTogc3RyaW5nO1xuICBodW1hbml6ZWRDb2RlPzogc3RyaW5nOyAvLyBSZXZpZXcgd2l0aCBBbmEgZGlmZmVyZW5jZSB3aXRoIG5hbWVcbn1cblxuZW51bSBDZXJ0aWZpY2F0ZUVudW0ge1xuICBGT1VOREFUSU9OID0gJ0NGTycsXG4gIENPTlNVTFRBTlQgPSAnQ0NPJyxcbiAgU1BSSU5UX0NPQUNIID0gJ0NTQycsXG4gIEFNQkFTU0FET1IgPSAnQ0VBJyxcbiAgVFJBSU5FUiA9ICdDVFInLFxuICBCT0FSRF9BRFZJU09SID0gJ0NCQScsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V4by1hdmF0YXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXZhdGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhdGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFeE9BdmF0YXJDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgdGhhdCBzZXQgdGhlIG1heGltdW0gb2Ygc2hvd24gYXZhdGFyc1xuICAgKi9cbiAgQElucHV0KClcbiAgbWF4U2V0U2hvd2VkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBhcnJheSB0byBsb2FkLlxuICAgKiBZb3UgbmVlZCB0byBwYXNzIGEgdHVwbGUgW3tzcmMsIHRvb2x0aXB9XSBpbiBhcnJheVxuICAgKi9cbiAgQElucHV0KClcbiAgaW1hZ2VTZXQ6IHtzcmM6IHN0cmluZywgdG9vbHRpcDogc3RyaW5nfVtdO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gc3JjIHRvIGxvYWQuXG4gICAqIElmIHlvdSBzZW5kIHRoZSB1c2VyLCB3aWxsIHRha2UgZnJvbSB0aGUgdXNlci5wcm9maWxlUGljdHVyZXMgYXJyYXkgd2l0aFxuICAgKiB0aGUgc2l6ZSBkZWZpbmVkIG9uIHRoZSBpbnB1dCBzaXplLlxuICAgKi9cbiAgQElucHV0KClcbiAgc3JjOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHlvdSB3YW50IGFkZCBhIGN1c3RvbSBhbHQgdG8gaW1hZ2UuIElmIHlvdSBzZW5kIHRoZSB1c2VyLCB3aWxsIHRha2UgdXNlci5mdWxsTmFtZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KClcbiAgYWx0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgaGFzIGRlZmluZWQgNCBzaXplcyBieSBkZWZhdWx0ICh4cyAoMjRweCksIHNtKDQ4cHgpLCBsZyg5NnB4KSwgeGwoMTQ0cHgpKSwgYnV0IGlmIHlvdSBuZWVkXG4gICAqIG90aGVyIHNpemVzIHlvdSBjYW4gc2VuZCBhcyB7IHdpZHRoOiAnNDBweCcsIGhlaWdodDogJzQwcHgnfSBhbmQgd2lsbCBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBjdXN0b21pemVkU2l6ZTogeyB3aWR0aDogc3RyaW5nOyBoZWlnaHQ6IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHdpbGwgdXNlIFNpemVBdmF0YXJFbnVtLnNtXG4gICAqICh4cyAoMjRweCksIHNtKDQ4cHgpLCBsZyg5NnB4KSwgeGwoMTQ0cHgpKVxuICAgKi9cbiAgQElucHV0KClcbiAgc2l6ZTogU2l6ZUF2YXRhciA9IFNpemVBdmF0YXJFbnVtLnNtO1xuXG4gIC8qKlxuICAgKiBTaGFwZSBvZiB0aGUgYXZhdGFyLiBCeSBkZWZhdWx0IHdpbGwgYmUgY2lyY2xlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2hhcGU6IFNoYXBlVHlwZSA9IFNoYXBlRW51bS5jaXJjbGU7XG5cbiAgLyoqXG4gICAqIEl0ZW0gY2FuIGJlIGEgdXNlciBvciBncm91cCwgZXRjLi4uIElmIHlvdSBzZW5kIGEgaXRlbSwgeW91IHdpbGwgZ2V0IHRoZSBpbmZvIGZyb20gYWx0LCBzcmMsIGV0YyBmcm9tIHRoZSBpdGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgaXRlbTogYW55O1xuXG4gIC8qKlxuICAgKiBTaG93IHRvb2x0aXAgaW4gdGhlIGltYWdlLCBpZiB5b3Ugc2VuZCB1c2VyIHdpbGwgdGFrZSB0aGUgdXNlci5mdWxsTmFtZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KClcbiAgdG9vbHRpcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3NpdGlvbiB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIHNob3cuIEJ5IGRlZmF1bHQgaXMgYmVsb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9ICdiZWxvdyc7XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlcyBvbmx5IHdpbGwgd29yayB3aXRoIHRoZSBzdGFuZGFyZHMgc2l6ZXMsIHNvIHRoaXMgaW5wdXQgY2FuJ3QgY29tYmluZSB3aXRoIGN1c3RvbWl6ZWRTaXplLlxuICAgKiBJbiB0aGUgc2FtZSB3YXksIG9ubHkgd2lsbCB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2hhcGUgKGNpcmNsZSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBjZXJ0aWZpY2F0ZXM6IENlcnRpZmljYXRlW107XG5cbiAgLyoqXG4gICAqIEluIG90aGVyIGNhc2UsIHdpbGwgZW1pdCBhbiBldmVudCBhbmQgdGhlIHBhcmVudCB3aWxsIHRha2UgdGhlIGNvbnRyb2wgKEZvciBleGFtcGxlLCB0byBzaG93IGEgbWVudSB3aGVuIGNsaWNrKVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgc2l6ZUF2YXRhciA9IFNpemVBdmF0YXJFbnVtO1xuICAvLyBJZiB3ZSBpbmNyZWFzZSBhIG5ldyBjZXJ0aWZpY2F0ZSwgd2UgbmVlZCBhZGQgdGhlIG5ldyBzaXplIG9mIHN0cm9rZS5cbiAgdmFsdWVzQ2VydGlmaWNhdGlvbiA9IFtcbiAgICAxMDAsIDQ3LCAzMCwgMjIsIDE4LCAxNSxcbiAgXTtcblxuICAvKipcbiAgICogU2l6ZXMgZGVmaW5lZCBpbiB0aGUgcHJvZmlsZV9waWN0dXJlIGFycmF5LlxuICAgKiBAcGFyYW0gc2l6ZSBNdXN0IGJlIHhzLCBzbSwgbGcsIHhsLiBJZiB5b3UgbmVlZCBvdGhlciwgdGFsayB3aXRoIGRlc2lnbi5cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNpemVUb051bWJlcihzaXplOiBTaXplQXZhdGFyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0ueHM6XG4gICAgICAgIHJldHVybiAyNDtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0uc206XG4gICAgICAgIHJldHVybiA0ODtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0ubGc6XG4gICAgICAgIHJldHVybiA5NjtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0ueGw6XG4gICAgICAgIHJldHVybiAxNDQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGltYWdlVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc3JjKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0ucHJvZmlsZVBpY3R1cmVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFBpY3R1cmUodGhpcy5pdGVtLnByb2ZpbGVQaWN0dXJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGJ1aWxkUGljdHVyZShwcm9maWxlUGljdHVyZXMpIHtcbiAgICBjb25zdCBwaWN0dXJlID0gcHJvZmlsZVBpY3R1cmVzLmZpbmQoXG4gICAgICBwaWMgPT4gcGljLndpZHRoID09PSBFeE9BdmF0YXJDb21wb25lbnQucGFyc2VTaXplVG9OdW1iZXIodGhpcy5zaXplKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHBpY3R1cmUgPyBwaWN0dXJlLnVybCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpbWFnZUFsdCgpIHtcbiAgICBpZiAodGhpcy5hbHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFsdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pdGVtKSB7XG4gICAgICB0aGlzLmJ1aWxkTmFtZUl0ZW0odGhpcy5pdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ0F2YXRhcic7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG5hbWUsIGZ1bGxOYW1lIG9yIHNob3J0TmFtZShpbiB0aGF0IG9yZGVyKSBmcm9tIGl0ZW1zIHRvIHVzZSBpbiB0aGUgQWx0IGF0dHIgZnJvbSBpbWFnZSBhbmQgdGhlIHRvb2x0aXBzLlxuICAgKi9cbiAgYnVpbGROYW1lSXRlbShpdGVtKSB7XG4gICAgaWYgKGl0ZW0ubmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbS5uYW1lO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmZ1bGxOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtLmZ1bGxOYW1lO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnNob3J0TmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbS5zaG9ydE5hbWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGltYWdlVG9vbHRpcCgpIHtcbiAgICBpZiAodGhpcy50b29sdGlwKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sdGlwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLml0ZW0pIHtcbiAgICAgIHRoaXMuYnVpbGROYW1lSXRlbSh0aGlzLml0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgY2VydGlmaWNhdGVUb29sdGlwKCkge1xuICAgIGlmICh0aGlzLmNlcnRpZmljYXRlcyAmJiB0aGlzLmNlcnRpZmljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZXMubWFwKChjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUpID0+IHtcbiAgICAgICAgaWYgKGNlcnRpZmljYXRlLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gYCR7Y2VydGlmaWNhdGUubmFtZX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0aWZpY2F0ZS5odW1hbml6ZWRDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2NlcnRpZmljYXRlLmh1bWFuaXplZENvZGV9YDtcbiAgICAgICAgfVxuICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgfVxuICB9XG5cbiAgY2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQodHJ1ZSk7XG4gIH1cblxufVxuIl19