myrtex-mf-competition 1.1.3 → 1.1.4
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.
- package/esm2020/lib/modules/competition-header/components/competition-header.component.mjs +50 -6
- package/esm2020/lib/modules/competition-header/constants/competition-permission.constants.mjs +2 -1
- package/fesm2015/myrtex-mf-competition.mjs +53 -7
- package/fesm2015/myrtex-mf-competition.mjs.map +1 -1
- package/fesm2020/myrtex-mf-competition.mjs +50 -5
- package/fesm2020/myrtex-mf-competition.mjs.map +1 -1
- package/lib/modules/competition-header/components/competition-header.component.d.ts +4 -0
- package/lib/modules/competition-header/constants/competition-permission.constants.d.ts +1 -0
- package/package.json +3 -2
|
@@ -4,7 +4,7 @@ import { CompetitionModeEnum, CompetitionStatusEnum, CompetitionStatusEnumLabel,
|
|
|
4
4
|
import { activateCompetition, cancelCompetition, cancelCompetitionWithValidation, competitionVersionChangeStatus, completeCompetition, createCompetitionVersion, deleteCompetitionVersion, loadCompetitionHeader, pauseCompetition, selectCompetitionVersion } from '../store/competition-header.actions';
|
|
5
5
|
import { selectActivityId, selectCompetitionSelectedVersionId, selectCompetitionStatus, selectCompetitionType, selectCompetitionVersions, selectManualVersionStatusChanged } from '../store/competition-header.selector';
|
|
6
6
|
import { CompetitionHeaderCustomButtonsDirective } from '../directives/competition-header-custom-buttons.directive';
|
|
7
|
-
import { CAN_AGREEMENT_COMPETITION, CAN_CANCEL_COMPETITION, CAN_COMPLETE_COMPETITION, CAN_CREATE_COMPETITION_VERSION, CAN_EDIT_COMPETITION, CAN_PUBLIC_COMPETITION, COMPETITION_ENTITY_NAME } from '../constants/competition-permission.constants';
|
|
7
|
+
import { CAN_AGREEMENT_COMPETITION, CAN_CANCEL_COMPETITION, CAN_COMPLETE_COMPETITION, CAN_CREATE_COMPETITION_VERSION, CAN_EDIT_COMPETITION, CAN_PUBLIC_COMPETITION, COMPETITION_ENTITY_NAME, CAN_APPROVE_MANUAL_COMPETITION } from '../constants/competition-permission.constants';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "myrtex-mf-signer";
|
|
10
10
|
import * as i2 from "@ngrx/store";
|
|
@@ -47,6 +47,7 @@ export class LibCompetitionHeaderComponent extends UnSubscriber {
|
|
|
47
47
|
this._canCompleteEntityAccess = false;
|
|
48
48
|
this._canCancelEntityAccess = false;
|
|
49
49
|
this._canEditEntityAccess = false;
|
|
50
|
+
this._canManualChangeStatusAccess = false;
|
|
50
51
|
}
|
|
51
52
|
get showLoader() {
|
|
52
53
|
return this.validationInProgress;
|
|
@@ -94,8 +95,7 @@ export class LibCompetitionHeaderComponent extends UnSubscriber {
|
|
|
94
95
|
&& this._canPublicVersionAccess
|
|
95
96
|
&& ((this.selected?.status === CompetitionVersionStatusEnum.Draft
|
|
96
97
|
&& this.competition?.mode !== CompetitionModeEnum.VersionedExtended)
|
|
97
|
-
|| (
|
|
98
|
-
|| this.selected?.status === CompetitionVersionStatusEnum.Validation)
|
|
98
|
+
|| (this.selected?.status === CompetitionVersionStatusEnum.Confirmed
|
|
99
99
|
&& this.competition?.mode === CompetitionModeEnum.VersionedExtended));
|
|
100
100
|
}
|
|
101
101
|
get activateVersionDisabled() {
|
|
@@ -140,6 +140,10 @@ export class LibCompetitionHeaderComponent extends UnSubscriber {
|
|
|
140
140
|
'color-green': this.selected?.status === CompetitionVersionStatusEnum.Active
|
|
141
141
|
};
|
|
142
142
|
}
|
|
143
|
+
get canConfirmedVersion() {
|
|
144
|
+
return this.selected?.status === CompetitionVersionStatusEnum.Validation
|
|
145
|
+
&& this._canManualChangeStatusAccess;
|
|
146
|
+
}
|
|
143
147
|
/** Контекст для кастомных кнопок, может расширяться */
|
|
144
148
|
get customButtonsTemplateContext() {
|
|
145
149
|
return {
|
|
@@ -200,6 +204,8 @@ export class LibCompetitionHeaderComponent extends UnSubscriber {
|
|
|
200
204
|
.subscribe(result => this._canCancelEntityAccess = result);
|
|
201
205
|
this._accessService.checkPermission(this.getAccessControl(CAN_EDIT_COMPETITION))
|
|
202
206
|
.subscribe(result => this._canEditEntityAccess = result);
|
|
207
|
+
this._accessService.checkPermission(this.getAccessControl(CAN_APPROVE_MANUAL_COMPETITION))
|
|
208
|
+
.subscribe(result => this._canManualChangeStatusAccess = result);
|
|
203
209
|
}
|
|
204
210
|
}));
|
|
205
211
|
this.appendSubscription(this.store.pipe(select(selectCompetitionType)).subscribe(result => {
|
|
@@ -319,6 +325,44 @@ export class LibCompetitionHeaderComponent extends UnSubscriber {
|
|
|
319
325
|
}
|
|
320
326
|
}
|
|
321
327
|
}
|
|
328
|
+
confirmedVersion() {
|
|
329
|
+
if (this.selected) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
this.alertService.showDialog({
|
|
333
|
+
title: `Утверждение отбора`,
|
|
334
|
+
message: `<p>Вы действительно хотите утвердить отбор?</p>`,
|
|
335
|
+
color: DialogColor.yellow,
|
|
336
|
+
type: DialogType.confirm,
|
|
337
|
+
okLabel: 'Подтвердить',
|
|
338
|
+
cancelLabel: 'Отменить',
|
|
339
|
+
okCallback: () => {
|
|
340
|
+
this.store.dispatch(competitionVersionChangeStatus({
|
|
341
|
+
versionId: this.selected.id,
|
|
342
|
+
status: CompetitionVersionStatusEnum.Confirmed
|
|
343
|
+
}));
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
rejectedVersion() {
|
|
348
|
+
if (this.selected) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
this.alertService.showDialog({
|
|
352
|
+
title: `Отклонение отбора`,
|
|
353
|
+
message: `<p>Вы действительно хотите отклонить отбор?</p>`,
|
|
354
|
+
color: DialogColor.yellow,
|
|
355
|
+
type: DialogType.confirm,
|
|
356
|
+
okLabel: 'Подтвердить',
|
|
357
|
+
cancelLabel: 'Отменить',
|
|
358
|
+
okCallback: () => {
|
|
359
|
+
this.store.dispatch(competitionVersionChangeStatus({
|
|
360
|
+
versionId: this.selected.id,
|
|
361
|
+
status: CompetitionVersionStatusEnum.Rejected
|
|
362
|
+
}));
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
322
366
|
removeVersion() {
|
|
323
367
|
if (this.selected) {
|
|
324
368
|
const selectedItem = this.selected;
|
|
@@ -450,10 +494,10 @@ export class LibCompetitionHeaderComponent extends UnSubscriber {
|
|
|
450
494
|
}
|
|
451
495
|
}
|
|
452
496
|
LibCompetitionHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: LibCompetitionHeaderComponent, deps: [{ token: i1.SignService }, { token: i2.Store }, { token: i3.AlertService }, { token: i4.SettingsService }, { token: i5.AccessService }], target: i0.ɵɵFactoryTarget.Component });
|
|
453
|
-
LibCompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: LibCompetitionHeaderComponent, selector: "lib-competition-header", inputs: { validateVersionAction: "validateVersionAction", canCreateVersionOnActivityPeriod: "canCreateVersionOnActivityPeriod", canValidateVersionOnActivityPeriod: "canValidateVersionOnActivityPeriod", canActivateVersionOnActivityPeriod: "canActivateVersionOnActivityPeriod", isDirty: "isDirty", validationInProgress: "validationInProgress" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo", setValidationInProgress: "setValidationInProgress" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" [mrxCdkTooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{ getCompetitionVersionStatusGrouppingLabel(item.status) }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n [mrxCdkTooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\"\r\n stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path\r\n d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\"\r\n stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\"\r\n stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"complete()\"\r\n *ngIf=\"canCompleteCompetition\">\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <!--\u0412\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u0441\u043A\u0440\u044B\u0442\u043E \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 MINFIN-11223-->\r\n <!--<button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>-->\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{ restoreButtonName }}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCancelCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{ cancelCompetitionButtonLabel }}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"info-banner-loader\" [class.active]=\"showLoader\">\r\n <mrx-loader *ngIf=\"showLoader\"\r\n [size]=\"'large'\">\r\n </mrx-loader>\r\n</div>\r\n", components: [{ type: i6.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i7.DropdownComponent, selector: "mrx-dropdown", inputs: ["mainPlacement", "fallbackPlacements", "closeOnClick", "customClasses"] }, { type: i7.LoaderComponent, selector: "mrx-loader", inputs: ["size", "color", "customClasses"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i7.CdkTooltipDirective, selector: "[mrxCdkTooltip]", inputs: ["mrxCdkTooltip", "tooltipActive", "autoCloseByScroll", "tooltipPosition", "tooltipMaxWidth"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i6.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i6.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.HideAfterClickDirective, selector: "[mrxHideAfterClick]" }], pipes: { "dateTimeFormat": i7.DateTimeFormatPipe } });
|
|
497
|
+
LibCompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: LibCompetitionHeaderComponent, selector: "lib-competition-header", inputs: { validateVersionAction: "validateVersionAction", canCreateVersionOnActivityPeriod: "canCreateVersionOnActivityPeriod", canValidateVersionOnActivityPeriod: "canValidateVersionOnActivityPeriod", canActivateVersionOnActivityPeriod: "canActivateVersionOnActivityPeriod", isDirty: "isDirty", validationInProgress: "validationInProgress" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo", setValidationInProgress: "setValidationInProgress" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" [mrxCdkTooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{ getCompetitionVersionStatusGrouppingLabel(item.status) }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n [mrxCdkTooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\"\r\n stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path\r\n d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\"\r\n stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\"\r\n stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md\"\r\n (click)=\"confirmedVersion()\"\r\n *ngIf=\"canConfirmedVersion\">\r\n \u0423\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"rejectedVersion()\"\r\n *ngIf=\"canConfirmedVersion\">\r\n \u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"complete()\"\r\n *ngIf=\"canCompleteCompetition\">\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <!--\u0412\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u0441\u043A\u0440\u044B\u0442\u043E \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 MINFIN-11223-->\r\n <!--<button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>-->\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{ restoreButtonName }}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCancelCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{ cancelCompetitionButtonLabel }}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"info-banner-loader\" [class.active]=\"showLoader\">\r\n <mrx-loader *ngIf=\"showLoader\"\r\n [size]=\"'large'\">\r\n </mrx-loader>\r\n</div>\r\n", components: [{ type: i6.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i7.DropdownComponent, selector: "mrx-dropdown", inputs: ["mainPlacement", "fallbackPlacements", "closeOnClick", "customClasses"] }, { type: i7.LoaderComponent, selector: "mrx-loader", inputs: ["size", "color", "customClasses"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i7.CdkTooltipDirective, selector: "[mrxCdkTooltip]", inputs: ["mrxCdkTooltip", "tooltipActive", "autoCloseByScroll", "tooltipPosition", "tooltipMaxWidth"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i6.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i6.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.HideAfterClickDirective, selector: "[mrxHideAfterClick]" }], pipes: { "dateTimeFormat": i7.DateTimeFormatPipe } });
|
|
454
498
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: LibCompetitionHeaderComponent, decorators: [{
|
|
455
499
|
type: Component,
|
|
456
|
-
args: [{ selector: 'lib-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" [mrxCdkTooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{ getCompetitionVersionStatusGrouppingLabel(item.status) }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n [mrxCdkTooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\"\r\n stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path\r\n d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\"\r\n stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\"\r\n stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"complete()\"\r\n *ngIf=\"canCompleteCompetition\">\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <!--\u0412\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u0441\u043A\u0440\u044B\u0442\u043E \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 MINFIN-11223-->\r\n <!--<button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>-->\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{ restoreButtonName }}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCancelCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{ cancelCompetitionButtonLabel }}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"info-banner-loader\" [class.active]=\"showLoader\">\r\n <mrx-loader *ngIf=\"showLoader\"\r\n [size]=\"'large'\">\r\n </mrx-loader>\r\n</div>\r\n" }]
|
|
500
|
+
args: [{ selector: 'lib-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" [mrxCdkTooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{ getCompetitionVersionStatusGrouppingLabel(item.status) }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate | dateTimeFormat: 'mos' }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n [mrxCdkTooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\"\r\n stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path\r\n d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\"\r\n stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\"\r\n stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md\"\r\n (click)=\"confirmedVersion()\"\r\n *ngIf=\"canConfirmedVersion\">\r\n \u0423\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"rejectedVersion()\"\r\n *ngIf=\"canConfirmedVersion\">\r\n \u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"complete()\"\r\n *ngIf=\"canCompleteCompetition\">\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <!--\u0412\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u0441\u043A\u0440\u044B\u0442\u043E \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 MINFIN-11223-->\r\n <!--<button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>-->\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{ restoreButtonName }}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCancelCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{ cancelCompetitionButtonLabel }}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"info-banner-loader\" [class.active]=\"showLoader\">\r\n <mrx-loader *ngIf=\"showLoader\"\r\n [size]=\"'large'\">\r\n </mrx-loader>\r\n</div>\r\n" }]
|
|
457
501
|
}], ctorParameters: function () { return [{ type: i1.SignService }, { type: i2.Store }, { type: i3.AlertService }, { type: i4.SettingsService }, { type: i5.AccessService }]; }, propDecorators: { customButtonsTemplate: [{
|
|
458
502
|
type: ContentChild,
|
|
459
503
|
args: [CompetitionHeaderCustomButtonsDirective]
|
|
@@ -474,4 +518,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
474
518
|
}], setValidationInProgress: [{
|
|
475
519
|
type: Output
|
|
476
520
|
}] } });
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gsVUFBVSxFQUVWLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN0QyxtQkFBbUIsRUFDbkIsZUFBZSxFQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtDQUFrQyxFQUNs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RSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLGFBQWlDLFNBQVM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQztTQUMxRDtRQUNELE9BQU87Ozs7Ozs7a0JBT08sVUFBVTs7bUJBRVQsQ0FBQztJQUNsQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBa0I7UUFDekMsT0FBTztZQUNMLFVBQVU7WUFDVixVQUFVLEVBQUUsdUJBQXVCO1lBQ25DLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7U0FDL0IsQ0FBQztJQUNKLENBQUM7OzJIQTVmVSw2QkFBNkI7K0dBQTdCLDZCQUE2Qiw0a0JBRTFCLHVDQUF1Qyx1RUN4RXZELG13YUE4S0E7NEZEeEdhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDRSx3QkFBd0I7Mk1BTTNCLHFCQUFxQjtzQkFEM0IsWUFBWTt1QkFBQyx1Q0FBdUM7Z0JBSTlDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFJQyxnQ0FBZ0M7c0JBRHRDLEtBQUs7Z0JBSUMsa0NBQWtDO3NCQUR4QyxLQUFLO2dCQUlDLGtDQUFrQztzQkFEeEMsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsb0JBQW9CO3NCQUQxQixLQUFLO2dCQUlDLDhCQUE4QjtzQkFEcEMsTUFBTTtnQkFJQSx1QkFBdUI7c0JBRDdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25WZXJzaW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29tcGV0aXRpb24tdmVyc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcGV0aXRpb25Nb2RlRW51bSxcclxuICBDb21wZXRpdGlvblN0YXR1c0VudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtTGFiZWwsXHJcbiAgRGlhbG9nQ29sb3IsXHJcbiAgRGlhbG9nVHlwZSxcclxuICBBbGVydFNlcnZpY2UsXHJcbiAgVW5TdWJzY3JpYmVyLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uQ29uZmlnLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25Db25maWdNb2RlbCxcclxuICBDYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtLFxyXG4gIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0sXHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsLFxyXG4gIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsLFxyXG4gIENvbXBldGl0aW9uVHlwZUVudW0sXHJcbiAgTWVzc2FnZVNldmVyaXR5LCBzZWxlY3RVc2VySW5mb1xyXG59IGZyb20gJ215cnRleC1tZi11aS1jb21wb3NpdGUnO1xyXG5pbXBvcnQge1xyXG4gIGFjdGl2YXRlQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbixcclxuICBjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMsXHJcbiAgY29tcGxldGVDb21wZXRpdGlvbixcclxuICBjcmVhdGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uLFxyXG4gIGxvYWRDb21wZXRpdGlvbkhlYWRlcixcclxuICBwYXVzZUNvbXBldGl0aW9uLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVmVyc2lvblxyXG59IGZyb20gJy4uL3N0b3JlL2NvbXBldGl0aW9uLWhlYWRlci5hY3Rpb25zJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25TdGF0dXNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jb21wZXRpdGlvbi1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIHNlbGVjdEFjdGl2aXR5SWQsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblN0YXR1cyxcclxuICBzZWxlY3RDb21wZXRpdGlvblR5cGUsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9ucyxcclxuICBzZWxlY3RNYW51YWxWZXJzaW9uU3RhdHVzQ2hhbmdlZFxyXG59IGZyb20gJy4uL3N0b3JlL2NvbXBldGl0aW9uLWhlYWRlci5zZWxlY3Rvcic7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29tcGV0aXRpb24taGVhZGVyLWN1c3RvbS1idXR0b25zLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uUmVqZWN0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTaWduU2VydmljZSB9IGZyb20gJ215cnRleC1tZi1zaWduZXInO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRUJMaW5rc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2ViLWxpbmtzLm1vZGVsJztcclxuaW1wb3J0IHtBY2Nlc3NTZXJ2aWNlLCBDaGVja1Blcm1pc3Npb25Nb2RlbH0gZnJvbSAnbXlydGV4LW1mLWF1dGgnO1xyXG5pbXBvcnQge1xyXG4gIENBTl9BR1JFRU1FTlRfQ09NUEVUSVRJT04sXHJcbiAgQ0FOX0NBTkNFTF9DT01QRVRJVElPTixcclxuICBDQU5fQ09NUExFVEVfQ09NUEVUSVRJT04sXHJcbiAgQ0FOX0NSRUFURV9DT01QRVRJVElPTl9WRVJTSU9OLFxyXG4gIENBTl9FRElUX0NPTVBFVElUSU9OLFxyXG4gIENBTl9QVUJMSUNfQ09NUEVUSVRJT04sXHJcbiAgQ09NUEVUSVRJT05fRU5USVRZX05BTUVcclxufSBmcm9tICcuLi9jb25zdGFudHMvY29tcGV0aXRpb24tcGVybWlzc2lvbi5jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSB2YWxpZGF0ZVZlcnNpb25GbiA9ICgocGFyYW06IHN0cmluZywgb25WYWxpZGF0ZWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgQ3J5cHRvSW50ZXJjZXB0b3I6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNvbXBldGl0aW9uLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBldGl0aW9uLWhlYWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExpYkNvbXBldGl0aW9uSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgVW5TdWJzY3JpYmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBAQ29udGVudENoaWxkKENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSlcclxuICBwdWJsaWMgY3VzdG9tQnV0dG9uc1RlbXBsYXRlITogQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb25BY3Rpb246IHVuZGVmaW5lZCB8IHZhbGlkYXRlVmVyc2lvbkZuID0gdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2QgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZVZlcnNpb25PbkFjdGl2aXR5UGVyaW9kID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNEaXJ0eSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wZXRpdGlvblZlcnNpb25Nb2RlbD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNldFZhbGlkYXRpb25JblByb2dyZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwdWJsaWMgY29tcGV0aXRpb246IENvbXBldGl0aW9uU3RhdHVzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHZlcnNpb25zOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbFtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2VsZWN0ZWRWZXJzaW9uID0gJyc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uU3RhdHVzRW51bSA9IENvbXBldGl0aW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSA9IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW07XHJcbiAgcHVibGljIGNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkxhYmVsID0gJyc7XHJcbiAgcHVibGljIHNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gJ9Ce0YLQvNC10L3QuNGC0Ywg0L7RgtCx0L7RgCc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uQ29uZmlnOiBDb21wZXRpdGlvbkNvbmZpZ01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXN0b3JlQnV0dG9uTmFtZSA9ICfQktC+0LfQvtCx0L3QvtCy0LjRgtGMJztcclxuICBwcml2YXRlIF9hY3Rpdml0eUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWJMaW5rc01vZGVsOiBFQkxpbmtzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfY29tcGV0aXRpb25UeXBlOiBDb21wZXRpdGlvblR5cGVFbnVtIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9jYW5BZ3JlZW1lbnRWZXJzaW9uQWNjZXNzID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2FuQ3JlYXRlVmVyc2lvbkFjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhblB1YmxpY1ZlcnNpb25BY2Nlc3MgPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYW5Db21wbGV0ZUVudGl0eUFjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbkNhbmNlbEVudGl0eUFjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbkVkaXRFbnRpdHlBY2Nlc3MgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzaWduU2VydmljZTogU2lnblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYWNjZXNzU2VydmljZTogQWNjZXNzU2VydmljZSwpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dMb2FkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uSW5Qcm9ncmVzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNFbnVtTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA9PSAxICYmIHRoaXMuc2VsZWN0ZWRcclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZC5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdGhpcy5zZWxlY3RlZC5zdGF0dXNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gPyBDb21wZXRpdGlvblN0YXR1c0VudW1MYWJlbFt0aGlzLmNvbXBldGl0aW9uLnN0YXR1c10gOiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNDc3NDbGFzcygpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPT0gMSAmJiB0aGlzLnNlbGVjdGVkXHJcbiAgICAgICYmICh0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgfHwgQ29tcGV0aXRpb25TdGF0dXNFbnVtLk5ldykgPD0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgICcnOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICcnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5OZXdcclxuICAgICAgICB8fCB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5Db21wbGV0ZWQsXHJcbiAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLW9yYW5nZSc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcsXHJcbiAgICAgICdjb2xvci1yZWQnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5DcmVhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkNyZWF0ZVZlcnNpb25BY2Nlc3NcclxuICAgICAgJiYgdGhpcy5jYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZFxyXG4gICAgICAmJiB0aGlzLmlzTGFzdFZlcnNpb25cclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgICAmJiB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICYmICgodGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgJiYgIXRoaXMuY29tcGV0aXRpb24uaXNSZXN1bHRQcm90b2NvbEFwcHJvdmVkKVxyXG4gICAgICAgIHx8IHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkRlbGV0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuQ3JlYXRlVmVyc2lvbkFjY2Vzc1xyXG4gICAgICAmJiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAmJiB0aGlzLnZlcnNpb25zXHJcbiAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQWN0aXZhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZFxyXG4gICAgJiYgdGhpcy5fY2FuUHVibGljVmVyc2lvbkFjY2Vzc1xyXG4gICAgJiYgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpXHJcbiAgICAgICAgfHwgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkXHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uKVxyXG4gICAgICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmlzRGlydHlcclxuICAgICAgfHwgIXRoaXMuX2NhblB1YmxpY1ZlcnNpb25BY2Nlc3NcclxuICAgICAgfHwgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpXHJcbiAgICAgICAgfHwgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGVWZXJzaW9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RpcnR5IHx8ICF0aGlzLl9jYW5BZ3JlZW1lbnRWZXJzaW9uQWNjZXNzIHx8IHRoaXMudmFsaWRhdGlvbkluUHJvZ3Jlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyZWF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzRGlydHkgfHwgIXRoaXMuX2NhbkNyZWF0ZVZlcnNpb25BY2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGJhY2tUb0VkaXREaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzRGlydHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhblZhbGlkYXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2RcclxuICAgICAgJiYgdGhpcy5fY2FuQWdyZWVtZW50VmVyc2lvbkFjY2Vzc1xyXG4gICAgICAmJiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZFxyXG4gICAgICAmJiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNMYXN0VmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG0gPSBNYXRoLm1heCguLi50aGlzLnZlcnNpb25zLm1hcCh4ID0+IHgubnVtKSk7XHJcbiAgICAgIHJldHVybiBtID09PSB0aGlzLnNlbGVjdGVkPy5udW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dSZWplY3Rpb25SZWFzb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkPy5yZWplY3Rpb25SZWFzb24gJiZcclxuICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgIHx8IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvblN0YXR1c0NsYXNzKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqINCa0L7QvdGC0LXQutGB0YIg0LTQu9GPINC60LDRgdGC0L7QvNC90YvRhSDQutC90L7Qv9C+0LosINC80L7QttC10YIg0YDQsNGB0YjQuNGA0Y/RgtGM0YHRjyAqL1xyXG4gIHB1YmxpYyBnZXQgY3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWN0aXZpdHlJZDogdGhpcy5fYWN0aXZpdHlJZCxcclxuICAgICAgY29tcGV0aXRpb25JZDogdGhpcy5jb21wZXRpdGlvbj8uaWQsXHJcbiAgICAgIGNvbXBldGl0aW9uVmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkPy5pZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuUmV0dXJuVG9FZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkVkaXRFbnRpdHlBY2Nlc3NcclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlJlamVjdGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93RWJMaW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLnZlcnNpb25zLnNvbWUoeCA9PiB4LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkNvbXBsZXRlQ29tcGV0aXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuQ29tcGxldGVFbnRpdHlBY2Nlc3NcclxuICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmVcclxuICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbi5pc1Jlc3VsdFByb3RvY29sQXBwcm92ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkNhbmNlbENvbXBldGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkNhbmNlbEVudGl0eUFjY2Vzc1xyXG4gICAgICAmJiB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWRcclxuICAgICAgJiYgKHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgfHwgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nXHJcbiAgICAgICAgfHwgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZClcclxuICAgICAgJiYgdGhpcy5zaG93Q2FuY2VsQ29tcGV0aXRpb25CdXR0b247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGxvYWRDb21wZXRpdGlvbkhlYWRlcigpKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9ucykpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy52ZXJzaW9ucyA9IHJlc3VsdDtcclxuICAgICAgICB0aGlzLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uU2VsZWN0ZWRWZXJzaW9uSWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TdGF0dXMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzU2VydmljZS5jaGVja1Blcm1pc3Npb24odGhpcy5nZXRBY2Nlc3NDb250cm9sKENBTl9BR1JFRU1FTlRfQ09NUEVUSVRJT04pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5fY2FuQWdyZWVtZW50VmVyc2lvbkFjY2VzcyA9IHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzU2VydmljZS5jaGVja1Blcm1pc3Npb24odGhpcy5nZXRBY2Nlc3NDb250cm9sKENBTl9DUkVBVEVfQ09NUEVUSVRJT05fVkVSU0lPTikpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB0aGlzLl9jYW5DcmVhdGVWZXJzaW9uQWNjZXNzID0gcmVzdWx0KTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNoZWNrUGVybWlzc2lvbih0aGlzLmdldEFjY2Vzc0NvbnRyb2woQ0FOX1BVQkxJQ19DT01QRVRJVElPTikpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB0aGlzLl9jYW5QdWJsaWNWZXJzaW9uQWNjZXNzID0gcmVzdWx0KTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNoZWNrUGVybWlzc2lvbih0aGlzLmdldEFjY2Vzc0NvbnRyb2woQ0FOX0NPTVBMRVRFX0NPTVBFVElUSU9OKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHRoaXMuX2NhbkNvbXBsZXRlRW50aXR5QWNjZXNzID0gcmVzdWx0KTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNoZWNrUGVybWlzc2lvbih0aGlzLmdldEFjY2Vzc0NvbnRyb2woQ0FOX0NBTkNFTF9DT01QRVRJVElPTikpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB0aGlzLl9jYW5DYW5jZWxFbnRpdHlBY2Nlc3MgPSByZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1NlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHRoaXMuZ2V0QWNjZXNzQ29udHJvbChDQU5fRURJVF9DT01QRVRJVElPTikpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB0aGlzLl9jYW5FZGl0RW50aXR5QWNjZXNzID0gcmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblR5cGUpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9IHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkxhYmVsKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb25MYWJlbCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0QWN0aXZpdHlJZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9hY3Rpdml0eUlkID0gcmVzdWx0O1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkNvbmZpZykpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbkNvbmZpZyA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25MYWJlbCkge1xyXG4gICAgICAgICAgdGhpcy5jYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvbkxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGVcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25UeXBlID4gdGhpcy5jYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtLkRpc2FibGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b24gPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnNob3dDb21wbGV0ZUNvbXBldGl0aW9uQnV0dG9uO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnJlc3RvcmVCdXR0b25OYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3RvcmVCdXR0b25OYW1lID0gdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5yZXN0b3JlQnV0dG9uTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0TWFudWFsVmVyc2lvblN0YXR1c0NoYW5nZWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8g0L/RgNC+0LjQt9C+0YjQu9C+INGA0YPRh9C90L7QtSDQuNC30LzQtdC90LXQvdC40LUg0YHRgtCw0YLRg9GB0LAsINGC0L7Qu9C60LDQtdC8INC00LDQu9GM0YjQtSDQv9C+INGC0LDQudC80LDRg9GC0YNcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2VsZWxlY3Rpb25FZGl0RWJMaW5rcygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLl9lYkxpbmtzTW9kZWwgPSByZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsW3ZhbHVlIGFzIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5YCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgn0JLQvdC40LzQsNC90LjQtSEg0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9GA0LjQstC10LTQtdGCINC6INGB0L7Qt9C00LDQvdC40Y4g0L3QvtCy0L7QuSDQstC10YDRgdC40Lgg0L7RgtCx0L7RgNCwJyl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY3JlYXRlQ29tcGV0aXRpb25WZXJzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICB0aXRsZTogYNCf0YPQsdC70LjQutCw0YbQuNGPICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwYCxcclxuICAgICAgICBtZXNzYWdlOiBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtC/0YPQsdC70LjQutC+0LLQsNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P1xyXG4gICAgICAgICAgICA8L3A+YCxcclxuICAgICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVWZXJzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24oc2VsZWN0ZWRJdGVtLmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNpZ25TZXJ2aWNlLnNpZ24oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ9Cd0LDQv9GA0LDQstC70LXQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwINC90LAg0YHQvtCz0LvQsNGB0L7QstCw0L3QuNC1JyxcclxuICAgICAgICAgICAgb2tMYWJlbDogJ9Ce0YLQv9GA0LDQstC40YLRjCcsXHJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgICAgICAgIHBkZlVybDogYC9tLWRhdGEvbWluZmluL3BkZi1jb21wZXRpdGlvbi8ke3RoaXMuY29tcGV0aXRpb24/LmlkfT92ZXJzaW9uSWQ9JHtzZWxlY3RlZEl0ZW0uaWR9YCxcclxuICAgICAgICAgICAgeG1sVXJsOiBgL20tZGF0YS9taW5maW4veG1sLWNvbXBldGl0aW9uLyR7dGhpcy5jb21wZXRpdGlvbj8uaWR9P3ZlcnNpb25JZD0ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICBwcm92aWRlcjogJ2VtcHR5J1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSgnJywgJ9Ce0LbQuNC00LDQudGC0LUuINCS0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L7RgtC/0YDQsNCy0LrQsCDQvdCwINGB0L7Qs9C70LDRgdC+0LLQsNC90LjQtS4nLCBNZXNzYWdlU2V2ZXJpdHkud2FpdCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgICB2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZCxcclxuICAgICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uVmFsaWRhdGlvblxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCj0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjiAgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx90LA/YCxcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICA8cD5cclxuICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQstC10YDRgdC40Y4gJHt0aGlzLmNvbXBldGl0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCl90LA/XHJcbiAgICAgIDwvcD5gLFxyXG4gICAgICAgIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGRlbGV0ZUNvbXBldGl0aW9uVmVyc2lvbih7dmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWR9KSk7XHJcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBudWxsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgRGlhbG9nQ29sb3IucmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0JLQvtC30L7QsdC90L7QstC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChhY3RpdmF0ZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGF1c2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQn9GA0LjQvtGB0YLQsNC90L7QstC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChwYXVzZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcgJiYgdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGUgPT0gdGhpcy5jYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtLldpdGhWYWxpZGF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNhbmNlbENvbXBldGl0aW9uV2l0aFZhbGlkYXRpb24oe3ZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkfSkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQntGC0LzQtdC90LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY2FuY2VsQ29tcGV0aXRpb24oKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbXBsZXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyh7XHJcbiAgICAgIHRpdGxlOiBg0JfQsNCy0LXRgNGI0LXQvdC40LUg0L7RgtCx0L7RgNCwYCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHktYmFubmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWljb24gaWNvbi1hdHRlbnRpb24gaWNvbi1mb250LTE2IGljb24tY29sb3Itb3JhbmdlIG1yLTJcIj48L2Rpdj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAg0K3RgtC+INC00LXQudGB0YLQstC40LUg0L3QtdC+0LHRgNCw0YLQuNC80L4uINCf0L7RgdC70LUg0LXQs9C+INCy0YvQv9C+0LvQvdC10L3QuNGPINC+0YLQvNC10L3QuNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGCINC90LXQstC+0LfQvNC+0LbQvdC+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi0xXCI+XHJcbiAgICAgICAgICDQn9C+0LTRgtCy0LXRgNC20LTQsNGPINC00LDQvdC90L7QtSDQtNC10LnRgdGC0LLQuNC1LCDQstGLwqDQv9C+0LTRgtCy0LXRgNC20LTQsNC10YLQtSDQutC+0YDRgNC10LrRgtC90L7RgdGC0Ywg0L/RgNC+0YLQvtC60L7Qu9CwINC4wqDQvtGC0YHRg9GC0YHRgtCy0LjQtSDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQssKg0LXQs9C+wqDQutC+0YDRgNC10LrRgtC40YDQvtCy0LrQtS5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi0xXCI+XHJcbiAgICAgICAgICDQodC60L7RgNGA0LXQutGC0LjRgNC+0LLQsNGC0Ywg0LjRgtC+0LPQvtCy0YvQuSDQv9GA0L7RgtC+0LrQvtC7INCy0L7Qt9C80L7QttC90L4g0YLQvtC70YzQutC+INCywqDRgtC10YfQtdC90LjQtSAyMMKg0LrQsNC70LXQvdC00LDRgNC90YvRhSDQtNC90LXQuSDRgdC+wqDQtNC90Y/CoNGD0YLQstC10YDQttC00LXQvdC40Y8g0LXQs9C+wqDQv9C10YDQstC+0Lkg0LLQtdGA0YHQuNC4INC4wqDQtNC+wqDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjyDQtNCw0L3QvdC+0LPQviDQtNC10LnRgdGC0LLQuNGPLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTFcIj5cclxuICAgICAgICAgINCV0YHQu9C4wqDQstGLwqDQvdC1wqDRg9Cy0LXRgNC10L3RiyDQssKg0LrQvtGA0YDQtdC60YLQvdC+0YHRgtC4INC/0YDQvtGC0L7QutC+0LvQsCwg0L/RgNC4wqDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDRgdGE0L7RgNC80LjRgNGD0LnRgtC1INGD0LLQtdC00L7QvNC70LXQvdC40LUg0L7CoNC10LPQvsKg0L7RgtC60LvQvtC90LXQvdC40Lgg0LjCoNC/0L7QtNC/0LjRiNC40YLQtSDQvdC+0LLRg9GOINCy0LXRgNGB0LjRji5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAg0JfQsNCy0LXRgNGI0LjRgtGMINC+0YLQsdC+0YA/XHJcbiAgICAgICAgPC9wPmAsXHJcbiAgICAgIGNvbG9yOiBEaWFsb2dDb2xvci55ZWxsb3csXHJcbiAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgb2tMYWJlbDogJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0YwnLFxyXG4gICAgICBjYW5jZWxMYWJlbDogJ9Ce0YLQvNC10L3QuNGC0YwnLFxyXG4gICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wbGV0ZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKCfQl9Cw0LLQtdGA0YjQtdC90LjQtSDQvtGC0LHQvtGA0LAg0LzQvtC20LXRgiDQt9Cw0L3Rj9GC0Ywg0L3QtdC60L7RgtC+0YDQvtC1INCy0YDQtdC80Y8uJyxcclxuICAgICAgICAgICfQntCx0L3QvtCy0LjRgtC1INGB0YLRgNCw0L3QuNGG0YMg0LjQu9C4INCy0LXRgNC90LjRgtC10YHRjCDQv9C+0LfQttC1JywgTWVzc2FnZVNldmVyaXR5LmluZm8pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RWZXJzaW9uKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IGlkfSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJhY2tUb0VkaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INGC0LXQutGD0YnQtdC5INCy0LXRgNGB0LjQuGAsXHJcbiAgICAgIGDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YDRgdC40Y4gJHt0aGlzLmNvbXBldGl0aW9uTGFiZWwudG9Mb3dlckNhc2UoKX1hYCxcclxuICAgICAgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICAob2spID0+IHtcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogdGhpcy5zZWxlY3RlZC5pZCxcclxuICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwsICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJywgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci55ZWxsb3cpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dSZWplY3Rpb24obW9kZWw6IENvbXBldGl0aW9uUmVqZWN0aW9uTW9kZWwpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCf0YDQuNGH0LjQvdCwINC+0YLQutC70L7QvdC10L3QuNGPYCxcclxuICAgICAgYCA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keV9fYXV0aG9yXCI+XHJcbiAgICAgICAgICA8c3Bhbj4ke21vZGVsLmF1dGhvcn08L3NwYW4+XHJcbiAgICAgICAgICA8c3Bhbj4ke21vZGVsLmNyZWF0ZWREYXRlfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBjbGFzcz1cIm1vZGFsLWJvZHlfX3RleHRcIj4ke21vZGVsLnJlYXNvbn08L3A+XHJcbiAgICAgIGAsIERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgJycsIERpYWxvZ0NvbG9yLnllbGxvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3RUb0ViKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmIHRoaXMuX2NvbXBldGl0aW9uVHlwZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5fZWJMaW5rc01vZGVsICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbGluayA9ICcnO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9PSBDb21wZXRpdGlvblR5cGVFbnVtLlNvY2lhbE9yZGVyKSB7XHJcbiAgICAgICAgbGluayA9IGAke3RoaXMuX2ViTGlua3NNb2RlbC5zb2NpYWxPcmRlcn0vI1NvY2lhbE9yZGVyQWdyZWVtZW50YDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9jb21wZXRpdGlvblR5cGUgPT0gQ29tcGV0aXRpb25UeXBlRW51bS5SZWdpb24pIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnN1YnNpZHl9LyNBZ3JlZW1lbnRTdWJzaWR5Tm9uRmVkZXJhbGA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGluayA9IGAke3RoaXMuX2ViTGlua3NNb2RlbC5zdWJzaWR5fS8jQWdyZWVtZW50U3Vic2lkeVJlZ2lzdHJ5YDtcclxuICAgICAgfVxyXG5cclxuICAgICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnNlbGVjdGVkVmVyc2lvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy52ZXJzaW9ucy5maW5kKHMgPT4gcy5pZCA9PT0gdGhpcy5zZWxlY3RlZFZlcnNpb24pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29tcGV0aXRpb25WZXJzaW9uSW5mby5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYXJuaW5nTWVzc2FnZUh0bWwoY3VzdG9tVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghY3VzdG9tVGV4dCkge1xyXG4gICAgICBjdXN0b21UZXh0ID0gJ9CS0L3QuNC80LDQvdC40LUhINCU0LDQvdC90L7QtSDQtNC10LnRgdGC0LLQuNC1INC90LXQu9GM0LfRjyDQvtGC0LzQtdC90LjRgtGMJztcclxuICAgIH1cclxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImJnLW5ld3MgcHgtMyByYWRpdXMtNCBtYi0zIGQtZmxleFwiIHN0eWxlPVwicGFkZGluZy10b3A6IHZhcigtLXNwYWNpbmctMyk7IHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjaW5nLTMpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNi41NjU3IDIuNDE2NjdDNy4yNzEzNSAxLjE5NDQ0IDkuMDM1NDggMS4xOTQ0NCA5Ljc0MTEzIDIuNDE2NjdMMTUuMjI2IDExLjkxNjdDMTUuOTMxNiAxMy4xMzg5IDE1LjA0OTUgMTQuNjY2NyAxMy42MzgyIDE0LjY2NjdIMi42Njg1OUMxLjI1NzI5IDE0LjY2NjcgMC4zNzUyMjUgMTMuMTM4OSAxLjA4MDg3IDExLjkxNjdMNi41NjU3IDIuNDE2NjdaTTguODc1MSAyLjkxNjY3QzguNTU0MzUgMi4zNjExMSA3Ljc1MjQ4IDIuMzYxMTEgNy40MzE3MyAyLjkxNjY3TDEuOTQ2OSAxMi40MTY3QzEuNjI2MTUgMTIuOTcyMiAyLjAyNzA5IDEzLjY2NjcgMi42Njg1OSAxMy42NjY3SDEzLjYzODJDMTQuMjc5NyAxMy42NjY3IDE0LjY4MDcgMTIuOTcyMiAxNC4zNTk5IDEyLjQxNjdMOC44NzUxIDIuOTE2NjdaTTguMTUzNDIgNi4xNjY2N0M4LjQyOTU2IDYuMTY2NjcgOC42NTM0MiA2LjM5MDUyIDguNjUzNDIgNi42NjY2N1Y5LjMzMzMzQzguNjUzNDIgOS42MDk0OCA4LjQyOTU2IDkuODMzMzMgOC4xNTM0MiA5LjgzMzMzQzcuODc3MjcgOS44MzMzMyA3LjY1MzQyIDkuNjA5NDggNy42NTM0MiA5LjMzMzMzVjYuNjY2NjdDNy42NTM0MiA2LjM5MDUyIDcuODc3MjcgNi4xNjY2NyA4LjE1MzQyIDYuMTY2NjdaTTguMTUzNDIgMTAuODMzM0M4LjQyOTU2IDEwLjgzMzMgOC42NTM0MiAxMS4wNTcyIDguNjUzNDIgMTEuMzMzM1YxMkM4LjY1MzQyIDEyLjI3NjEgOC40Mjk1NiAxMi41IDguMTUzNDIgMTIuNUM3Ljg3NzI3IDEyLjUgNy42NTM0MiAxMi4yNzYxIDcuNjUzNDIgMTJWMTEuMzMzM0M3LjY1MzQyIDExLjA1NzIgNy44NzcyNyAxMC44MzMzIDguMTUzNDIgMTAuODMzM1pcIiBmaWxsPVwiI0Q5NzUwOFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTAgdGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAke2N1c3RvbVRleHR9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFjY2Vzc0NvbnRyb2wocGVybWlzc2lvbjogc3RyaW5nKTogQ2hlY2tQZXJtaXNzaW9uTW9kZWwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGVybWlzc2lvbixcclxuICAgICAgb2JqZWN0VHlwZTogQ09NUEVUSVRJT05fRU5USVRZX05BTUUsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmNvbXBldGl0aW9uPy5pZFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImluZm8tYmFubmVyXCIgKm5nSWY9XCJzZWxlY3RlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItYmxvY2tcIj5cclxuICAgICAgPCEtLSDQndCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTYwIG1yLTNcIj5cclxuICAgICAgICA8IS0tINCy0YHRgtCw0LLQuNGC0Ywg0L3QsNC30LLQsNC90LjQtSDRgdGD0YnQvdC+0YHRgtC4LCDQu9C40LHQviBcItCh0YPQsdGB0LjQtNC40Y9cIiDQu9C40LHQviBcItCe0YLQsdC+0YBcIiAtLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCIgbXlDb21wZXRpdGlvbkxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tINC90LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgPCEtLSDQvtCz0YDQsNC90LjRh9C40YLRjCDQtNC70LjQvdGDINC90LDQt9Cy0LDQvdC40Y8g0LIgNDQg0YHQuNC80LLQvtC70L7QsiAtLT5cclxuICAgICAgICA8IS0tINCy0YHRgtCw0LLQuNGC0Ywg0LIg0YLRg9C70YLQuNC/INC/0L7Qu9C90L7QtSDQvdCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dCB0ZXh0LW5vcm1hbFwiIFttcnhDZGtUb29sdGlwXT1cInNlbGVjdGVkLm5hbWVcIiBbdG9vbHRpcE1heFdpZHRoXT1cIjMyMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLnNob3J0TmFtZSA/IHNlbGVjdGVkLnNob3J0TmFtZSA6ICfQndC1INGD0LrQsNC30LDQvScgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg0KHRgtCw0YLRg9GBXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgPCEtLSDQtNC70Y8g0LfQsNC00LDQvdC40Y8g0YbQstC10YLQsCDQtNC+0LHQsNCy0LvRj9GC0Ywg0LrQu9Cw0YHRgdGLOiDQvtGA0LDQvdC20LXQstGL0LkgLSBcImNvbG9yLW9yYW5nZVwiLCDQt9C10LvQtdC90YvQuSAtIFwiY29sb3ItZ3JlZW5cIiAtLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHRcIiBbbmdDbGFzc109XCJjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0Nzc0NsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNFbnVtTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0g0YHQtdC70LXQutGCINGBINCy0YvQsdC+0YDQvtC8INCy0LXRgNGB0LjQuCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIGluZm8tYmFubmVyLWl0ZW1faW5wdXQgd3B4LTI2MCBtci0zXCIgKm5nSWY9XCJ2ZXJzaW9ucyAmJiB2ZXJzaW9ucy5sZW5ndGggPiAxXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dGJveCBpbnB1dGJveC1tZCBtYi0wXCI+XHJcbiAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwidmVyc2lvbnNcIiBbbmdNb2RlbF09XCJzZWxlY3RlZC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RWZXJzaW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgIGdyb3VwQnk9XCJzdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgbm90Rm91bmRUZXh0PVwi0J3QtSDQvdCw0LnQtNC10L3QvlwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGdyb3VwLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICB7eyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbChpdGVtLnN0YXR1cykgfX1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7eyBpdGVtLm51bSB9fSDQvtGCIHt7IGl0ZW0uY3JlYXRlZERhdGUgfCBkYXRlVGltZUZvcm1hdDogJ21vcycgfX1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICDQktC10YDRgdC40Y8ge3sgaXRlbS5udW0gfX0g0L7RgiB7eyBpdGVtLmNyZWF0ZWREYXRlIHwgZGF0ZVRpbWVGb3JtYXQ6ICdtb3MnICB9fVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0g0YHRgtCw0YLQsNGD0YEg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCDQtdGB0LvQuCDQvdC10YIg0LLQtdGA0YHQuNC5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gd3B4LTExMFwiICpuZ0lmPVwidmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YEg0LLQtdGA0YHQuNC4XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICA8IS0tINC00LvRjyDQt9Cw0LTQsNC90LjRjyDRhtCy0LXRgtCwINC00L7QsdCw0LLQu9GP0YLRjCDQutC70LDRgdGB0Ys6INC+0YDQsNC90LbQtdCy0YvQuSAtIFwiY29sb3Itb3JhbmdlXCIsINC30LXQu9C10L3Ri9C5IC0gXCJjb2xvci1ncmVlblwiIC0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHRcIiAqbmdJZj1cInNlbGVjdGVkXCIgW25nQ2xhc3NdPVwidmVyc2lvblN0YXR1c0NsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwoc2VsZWN0ZWQuc3RhdHVzKSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0g0YPQtNCw0LvQtdC90LjQtSwg0LLRi9C30L7QsiDQvNC+0LTQsNC70LrQuCwg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQvtCxINCy0L3QtdGB0LXQvdC40Lgg0LjQt9C80LXQvdC10L3QuNC5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1cIj5cclxuICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgPCEtLSBcItC60L7QvdCy0LXRgNGCXCIgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgKm5nSWY9XCJzaG93UmVqZWN0aW9uUmVhc29uXCJcclxuICAgICAgICAgICBbbXJ4Q2RrVG9vbHRpcF09XCIn0J/QvtGB0LzQvtGC0YDQtdGC0Ywg0L/RgNC40YfQuNC90YMg0L7RgtC60LvQvtC90LXQvdC40Y8nXCJcclxuICAgICAgICAgICAoY2xpY2spPVwic2hvd1JlamVjdGlvbihzZWxlY3RlZC5yZWplY3Rpb25SZWFzb24pXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCI2XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjEyXCIgcng9XCIxXCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMyA2LjI1TDExLjMzNTYgMTMuNjU5NUMxMS43MTQ1IDEzLjk5NjIgMTIuMjg1NSAxMy45OTYyIDEyLjY2NDQgMTMuNjU5NUwyMSA2LjI1XCIgc3Ryb2tlPVwiIzI4MjgyOFwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTMgMThMNy41IDE0TDkuNzUgMTJNMjEgMThMMTYuNSAxNEwxNC4yNSAxMlwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tINGD0LTQsNC70LXQvdC40LUg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuRGVsZXRlVmVyc2lvblwiIChjbGljayk9XCJyZW1vdmVWZXJzaW9uKClcIiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiBbbXJ4Q2RrVG9vbHRpcF09XCIn0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOJ1wiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0zIDZINUgyMVwiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTggNlY0QzggMy40Njk1NyA4LjIxMDcxIDIuOTYwODYgOC41ODU3OSAyLjU4NTc5QzguOTYwODYgMi4yMTA3MSA5LjQ2OTU3IDIgMTAgMkgxNEMxNC41MzA0IDIgMTUuMDM5MSAyLjIxMDcxIDE1LjQxNDIgMi41ODU3OUMxNS43ODkzIDIuOTYwODYgMTYgMy40Njk1NyAxNiA0VjZNMTkgNlYyMEMxOSAyMC41MzA0IDE4Ljc4OTMgMjEuMDM5MSAxOC40MTQyIDIxLjQxNDJDMTguMDM5MSAyMS43ODkzIDE3LjUzMDQgMjIgMTcgMjJIN0M2LjQ2OTU3IDIyIDUuOTYwODYgMjEuNzg5MyA1LjU4NTc5IDIxLjQxNDJDNS4yMTA3MSAyMS4wMzkxIDUgMjAuNTMwNCA1IDIwVjZIMTlaXCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgMTFWMTdcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xNCAxMVYxN1wiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tINCy0L7RgdC60LvQuNGG0LDRgtC10LvRjNC90YvQuSDQt9C90LDQuiAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0xhc3RWZXJzaW9uXCIgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgW21yeENka1Rvb2x0aXBdPVwiJ9CS0L3QtdGB0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC00L7RgdGC0YPQv9C90L4g0L3QsCDQv9C+0YHQu9C10LTQvdC10Lkg0LLQtdGA0YHQuNC4J1wiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xMi4yMzAyIDE4VjE3TTEyLjIzMDIgMTRWMTBNNC4wMDI5OCAyMS4yNUgyMC40NTc1QzIxLjk5NzEgMjEuMjUgMjIuOTU5MyAxOS41ODMzIDIyLjE4OTUgMTguMjVMMTMuOTYyMyA0QzEzLjE5MjUgMi42NjY2NyAxMS4yNjggMi42NjY2NyAxMC40OTgyIDRMMi4yNzA5MyAxOC4yNUMxLjUwMTEzIDE5LjU4MzMgMi40NjMzOCAyMS4yNSA0LjAwMjk4IDIxLjI1WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNENTdCMUNcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiISFjdXN0b21CdXR0b25zVGVtcGxhdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUJ1dHRvbnNUZW1wbGF0ZS50ZW1wbGF0ZVJlZjtjb250ZXh0OmN1c3RvbUJ1dHRvbnNUZW1wbGF0ZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGdyZWVuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkNyZWF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjcmVhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICDQodGE0L7RgNC80LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBncmVlblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkFjdGl2YXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2YXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAg0J7Qv9GD0LHQu9C40LrQvtCy0LDRgtGMXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNhblZhbGlkYXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZhbGlkYXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAg0KHQvtCz0LvQsNGB0L7QstCw0L3QuNC1XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlKClcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ29tcGxldGVDb21wZXRpdGlvblwiPlxyXG4gICAgICAgINCX0LDQstC10YDRiNC40YLRjFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblJldHVyblRvRWRpdFwiIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2tUb0VkaXQoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJhY2tUb0VkaXREaXNhYmxlZFwiPlxyXG4gICAgICAgINCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8IS0tINGD0L/RgNCw0LLQu9C10L3QuNC1INGB0YLQsNGC0YPRgdC+0Lwv0L7RgtCx0L7RgNC+0LwgLS0+XHJcbiAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2FjdGlvblwiXHJcbiAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbiAmJiBzaG93RWJMaW5rXCI+XHJcbiAgICAgICAgPG1yeC1kcm9wZG93biBbbWFpblBsYWNlbWVudF09XCInYm90dG9tLWVuZCdcIiBbZmFsbGJhY2tQbGFjZW1lbnRzXT1cIlsndG9wLWVuZCddXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tbW9yZS12ZXJ0aWNhbCBpY29uLWZvbnQtMjRcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bk1lbnU+XHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInJlZGlyZWN0VG9FYigpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWxpbmsgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+0J/QtdGA0LXQudGC0Lgg0LIg0L/QvtC00YHQuNGB0YLQtdC80YMg0LHRjtC00LbQtdGC0L3QvtCz0L4g0L/Qu9Cw0L3QuNGA0L7QstCw0L3QuNGPINCT0JjQmNChIMKr0K3QkcK7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS3QktGA0LXQvNC10L3QvdC+INGB0LrRgNGL0YLQviDQsiDRgNCw0LzQutCw0YUgTUlORklOLTExMjIzLS0+XHJcbiAgICAgICAgICAgIDwhLS08YnV0dG9uIG1yeEhpZGVBZnRlckNsaWNrIChjbGljayk9XCJwYXVzZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlICYmIGNhbk1hbmFnZUNvbXBldGl0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLXBhdXNlLWZpbGxlZCBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj7Qn9GA0LjQvtGB0YLQsNC90L7QstC40YLRjDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+LS0+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIG1yeEhpZGVBZnRlckNsaWNrIChjbGljayk9XCJyZXN0b3JlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLXBsYXktZmlsbGVkIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHJlc3RvcmVCdXR0b25OYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkNhbmNlbENvbXBldGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2xvc2UgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgY2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbXJ4LWRyb3Bkb3duPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1sb2FkZXJcIiBbY2xhc3MuYWN0aXZlXT1cInNob3dMb2FkZXJcIj5cclxuICA8bXJ4LWxvYWRlciAqbmdJZj1cInNob3dMb2FkZXJcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cIidsYXJnZSdcIj5cclxuICA8L21yeC1sb2FkZXI+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
521
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gsVUFBVSxFQUVWLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN0QyxtQkFBbUIsRUFDbkIsZUFBZSxFQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtDQUFrQyxFQUNs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QkFJQyxvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBSUMsOEJBQThCO3NCQURwQyxNQUFNO2dCQUlBLHVCQUF1QjtzQkFEN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21wZXRpdGlvblZlcnNpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9jb21wZXRpdGlvbi12ZXJzaW9uLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBDb21wZXRpdGlvbk1vZGVFbnVtLFxyXG4gIENvbXBldGl0aW9uU3RhdHVzRW51bSxcclxuICBDb21wZXRpdGlvblN0YXR1c0VudW1MYWJlbCxcclxuICBEaWFsb2dDb2xvcixcclxuICBEaWFsb2dUeXBlLFxyXG4gIEFsZXJ0U2VydmljZSxcclxuICBVblN1YnNjcmliZXIsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25Db25maWcsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25MYWJlbCxcclxuICBDb21wZXRpdGlvbkNvbmZpZ01vZGVsLFxyXG4gIENhbmNlbENvbXBldGl0aW9uVHlwZUVudW0sXHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25UeXBlRW51bSxcclxuICBNZXNzYWdlU2V2ZXJpdHksIHNlbGVjdFVzZXJJbmZvXHJcbn0gZnJvbSAnbXlydGV4LW1mLXVpLWNvbXBvc2l0ZSc7XHJcbmltcG9ydCB7XHJcbiAgYWN0aXZhdGVDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbldpdGhWYWxpZGF0aW9uLFxyXG4gIGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyxcclxuICBjb21wbGV0ZUNvbXBldGl0aW9uLFxyXG4gIGNyZWF0ZUNvbXBldGl0aW9uVmVyc2lvbixcclxuICBkZWxldGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgbG9hZENvbXBldGl0aW9uSGVhZGVyLFxyXG4gIHBhdXNlQ29tcGV0aXRpb24sXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLmFjdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wZXRpdGlvblN0YXR1c01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgc2VsZWN0QWN0aXZpdHlJZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblNlbGVjdGVkVmVyc2lvbklkLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uU3RhdHVzLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVHlwZSxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFNpZ25TZXJ2aWNlIH0gZnJvbSAnbXlydGV4LW1mLXNpZ25lcic7XHJcbmltcG9ydCB7IFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFQkxpbmtzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWItbGlua3MubW9kZWwnO1xyXG5pbXBvcnQge0FjY2Vzc1NlcnZpY2UsIENoZWNrUGVybWlzc2lvbk1vZGVsfSBmcm9tICdteXJ0ZXgtbWYtYXV0aCc7XHJcbmltcG9ydCB7XHJcbiAgQ0FOX0FHUkVFTUVOVF9DT01QRVRJVElPTixcclxuICBDQU5fQ0FOQ0VMX0NPTVBFVElUSU9OLFxyXG4gIENBTl9DT01QTEVURV9DT01QRVRJVElPTixcclxuICBDQU5fQ1JFQVRFX0NPTVBFVElUSU9OX1ZFUlNJT04sXHJcbiAgQ0FOX0VESVRfQ09NUEVUSVRJT04sXHJcbiAgQ0FOX1BVQkxJQ19DT01QRVRJVElPTixcclxuICBDT01QRVRJVElPTl9FTlRJVFlfTkFNRSxcclxuICBDQU5fQVBQUk9WRV9NQU5VQUxfQ09NUEVUSVRJT05cclxufSBmcm9tICcuLi9jb25zdGFudHMvY29tcGV0aXRpb24tcGVybWlzc2lvbi5jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSB2YWxpZGF0ZVZlcnNpb25GbiA9ICgocGFyYW06IHN0cmluZywgb25WYWxpZGF0ZWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgQ3J5cHRvSW50ZXJjZXB0b3I6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNvbXBldGl0aW9uLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBldGl0aW9uLWhlYWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExpYkNvbXBldGl0aW9uSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgVW5TdWJzY3JpYmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBAQ29udGVudENoaWxkKENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSlcclxuICBwdWJsaWMgY3VzdG9tQnV0dG9uc1RlbXBsYXRlITogQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb25BY3Rpb246IHVuZGVmaW5lZCB8IHZhbGlkYXRlVmVyc2lvbkZuID0gdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2QgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZVZlcnNpb25PbkFjdGl2aXR5UGVyaW9kID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNEaXJ0eSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWxpZGF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wZXRpdGlvblZlcnNpb25Nb2RlbD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNldFZhbGlkYXRpb25JblByb2dyZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwdWJsaWMgY29tcGV0aXRpb246IENvbXBldGl0aW9uU3RhdHVzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHZlcnNpb25zOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbFtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2VsZWN0ZWRWZXJzaW9uID0gJyc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uU3RhdHVzRW51bSA9IENvbXBldGl0aW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSA9IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW07XHJcbiAgcHVibGljIGNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkxhYmVsID0gJyc7XHJcbiAgcHVibGljIHNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gJ9Ce0YLQvNC10L3QuNGC0Ywg0L7RgtCx0L7RgCc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uQ29uZmlnOiBDb21wZXRpdGlvbkNvbmZpZ01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXN0b3JlQnV0dG9uTmFtZSA9ICfQktC+0LfQvtCx0L3QvtCy0LjRgtGMJztcclxuICBwcml2YXRlIF9hY3Rpdml0eUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWJMaW5rc01vZGVsOiBFQkxpbmtzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfY29tcGV0aXRpb25UeXBlOiBDb21wZXRpdGlvblR5cGVFbnVtIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9jYW5BZ3JlZW1lbnRWZXJzaW9uQWNjZXNzID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2FuQ3JlYXRlVmVyc2lvbkFjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhblB1YmxpY1ZlcnNpb25BY2Nlc3MgPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYW5Db21wbGV0ZUVudGl0eUFjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbkNhbmNlbEVudGl0eUFjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbkVkaXRFbnRpdHlBY2Nlc3MgPSBmYWxzZTtcclxuICBwcml2YXRlIF9jYW5NYW51YWxDaGFuZ2VTdGF0dXNBY2Nlc3MgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzaWduU2VydmljZTogU2lnblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYWNjZXNzU2VydmljZTogQWNjZXNzU2VydmljZSwpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dMb2FkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uSW5Qcm9ncmVzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNFbnVtTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA9PSAxICYmIHRoaXMuc2VsZWN0ZWRcclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZC5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdGhpcy5zZWxlY3RlZC5zdGF0dXNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gPyBDb21wZXRpdGlvblN0YXR1c0VudW1MYWJlbFt0aGlzLmNvbXBldGl0aW9uLnN0YXR1c10gOiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNDc3NDbGFzcygpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPT0gMSAmJiB0aGlzLnNlbGVjdGVkXHJcbiAgICAgICYmICh0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgfHwgQ29tcGV0aXRpb25TdGF0dXNFbnVtLk5ldykgPD0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgICcnOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICcnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5OZXdcclxuICAgICAgICB8fCB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5Db21wbGV0ZWQsXHJcbiAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLW9yYW5nZSc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcsXHJcbiAgICAgICdjb2xvci1yZWQnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5DcmVhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkNyZWF0ZVZlcnNpb25BY2Nlc3NcclxuICAgICAgJiYgdGhpcy5jYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZFxyXG4gICAgICAmJiB0aGlzLmlzTGFzdFZlcnNpb25cclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgICAmJiB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICYmICgodGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgJiYgIXRoaXMuY29tcGV0aXRpb24uaXNSZXN1bHRQcm90b2NvbEFwcHJvdmVkKVxyXG4gICAgICAgIHx8IHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkRlbGV0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuQ3JlYXRlVmVyc2lvbkFjY2Vzc1xyXG4gICAgICAmJiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAmJiB0aGlzLnZlcnNpb25zXHJcbiAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQWN0aXZhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZFxyXG4gICAgJiYgdGhpcy5fY2FuUHVibGljVmVyc2lvbkFjY2Vzc1xyXG4gICAgJiYgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpXHJcbiAgICAgICAgfHwgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWN0aXZhdGVWZXJzaW9uRGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RpcnR5XHJcbiAgICAgIHx8ICF0aGlzLl9jYW5QdWJsaWNWZXJzaW9uQWNjZXNzXHJcbiAgICAgIHx8ICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgICAmJiB0aGlzLmNvbXBldGl0aW9uPy5tb2RlICE9PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKVxyXG4gICAgICAgIHx8ICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkXHJcbiAgICAgICAgICAmJiB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEaXJ0eSB8fCAhdGhpcy5fY2FuQWdyZWVtZW50VmVyc2lvbkFjY2VzcyB8fCB0aGlzLnZhbGlkYXRpb25JblByb2dyZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjcmVhdGVWZXJzaW9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RpcnR5IHx8ICF0aGlzLl9jYW5DcmVhdGVWZXJzaW9uQWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYWNrVG9FZGl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5WYWxpZGF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jYW5WYWxpZGF0ZVZlcnNpb25PbkFjdGl2aXR5UGVyaW9kXHJcbiAgICAgICYmIHRoaXMuX2NhbkFncmVlbWVudFZlcnNpb25BY2Nlc3NcclxuICAgICAgJiYgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICYmIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWRcclxuICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzTGFzdFZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtID0gTWF0aC5tYXgoLi4udGhpcy52ZXJzaW9ucy5tYXAoeCA9PiB4Lm51bSkpO1xyXG4gICAgICByZXR1cm4gbSA9PT0gdGhpcy5zZWxlY3RlZD8ubnVtO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93UmVqZWN0aW9uUmVhc29uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZD8ucmVqZWN0aW9uUmVhc29uICYmXHJcbiAgICAgICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICB8fCB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZlcnNpb25TdGF0dXNDbGFzcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJyc6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICdjb2xvci1ncmVlbic6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjYW5Db25maXJtZWRWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uXHJcbiAgICAgICYmIHRoaXMuX2Nhbk1hbnVhbENoYW5nZVN0YXR1c0FjY2VzcztcclxuICB9XHJcblxyXG4gIC8qKiDQmtC+0L3RgtC10LrRgdGCINC00LvRjyDQutCw0YHRgtC+0LzQvdGL0YUg0LrQvdC+0L/QvtC6LCDQvNC+0LbQtdGCINGA0LDRgdGI0LjRgNGP0YLRjNGB0Y8gKi9cclxuICBwdWJsaWMgZ2V0IGN1c3RvbUJ1dHRvbnNUZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFjdGl2aXR5SWQ6IHRoaXMuX2FjdGl2aXR5SWQsXHJcbiAgICAgIGNvbXBldGl0aW9uSWQ6IHRoaXMuY29tcGV0aXRpb24/LmlkLFxyXG4gICAgICBjb21wZXRpdGlvblZlcnNpb25JZDogdGhpcy5zZWxlY3RlZD8uaWRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhblJldHVyblRvRWRpdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jYW5FZGl0RW50aXR5QWNjZXNzXHJcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2hvd0ViTGluaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy52ZXJzaW9ucy5zb21lKHggPT4geC5zdGF0dXMgIT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5Db21wbGV0ZUNvbXBldGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkNvbXBsZXRlRW50aXR5QWNjZXNzXHJcbiAgICAgICYmIHRoaXMuY29tcGV0aXRpb24gIT09IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgICAmJiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICYmIHRoaXMuY29tcGV0aXRpb24uaXNSZXN1bHRQcm90b2NvbEFwcHJvdmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5DYW5jZWxDb21wZXRpdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jYW5DYW5jZWxFbnRpdHlBY2Nlc3NcclxuICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICYmICh0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgICAgIHx8IHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZ1xyXG4gICAgICAgIHx8IHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQpXHJcbiAgICAgICYmIHRoaXMuc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChsb2FkQ29tcGV0aXRpb25IZWFkZXIoKSk7XHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uVmVyc2lvbnMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMudmVyc2lvbnMgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblNlbGVjdGVkVmVyc2lvbklkKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbiA9IHJlc3VsdDtcclxuICAgICAgICB0aGlzLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uU3RhdHVzKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1NlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHRoaXMuZ2V0QWNjZXNzQ29udHJvbChDQU5fQUdSRUVNRU5UX0NPTVBFVElUSU9OKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHRoaXMuX2NhbkFncmVlbWVudFZlcnNpb25BY2Nlc3MgPSByZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1NlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHRoaXMuZ2V0QWNjZXNzQ29udHJvbChDQU5fQ1JFQVRFX0NPTVBFVElUSU9OX1ZFUlNJT04pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5fY2FuQ3JlYXRlVmVyc2lvbkFjY2VzcyA9IHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzU2VydmljZS5jaGVja1Blcm1pc3Npb24odGhpcy5nZXRBY2Nlc3NDb250cm9sKENBTl9QVUJMSUNfQ09NUEVUSVRJT04pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5fY2FuUHVibGljVmVyc2lvbkFjY2VzcyA9IHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzU2VydmljZS5jaGVja1Blcm1pc3Npb24odGhpcy5nZXRBY2Nlc3NDb250cm9sKENBTl9DT01QTEVURV9DT01QRVRJVElPTikpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB0aGlzLl9jYW5Db21wbGV0ZUVudGl0eUFjY2VzcyA9IHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzU2VydmljZS5jaGVja1Blcm1pc3Npb24odGhpcy5nZXRBY2Nlc3NDb250cm9sKENBTl9DQU5DRUxfQ09NUEVUSVRJT04pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5fY2FuQ2FuY2VsRW50aXR5QWNjZXNzID0gcmVzdWx0KTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNoZWNrUGVybWlzc2lvbih0aGlzLmdldEFjY2Vzc0NvbnRyb2woQ0FOX0VESVRfQ09NUEVUSVRJT04pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5fY2FuRWRpdEVudGl0eUFjY2VzcyA9IHJlc3VsdCk7ICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1NlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHRoaXMuZ2V0QWNjZXNzQ29udHJvbChDQU5fQVBQUk9WRV9NQU5VQUxfQ09NUEVUSVRJT04pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5fY2FuTWFudWFsQ2hhbmdlU3RhdHVzQWNjZXNzID0gcmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblR5cGUpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9IHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkxhYmVsKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb25MYWJlbCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0QWN0aXZpdHlJZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9hY3Rpdml0eUlkID0gcmVzdWx0O1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkNvbmZpZykpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbkNvbmZpZyA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25MYWJlbCkge1xyXG4gICAgICAgICAgdGhpcy5jYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvbkxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGVcclxuICAgICAgICAgICYmIHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25UeXBlID4gdGhpcy5jYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtLkRpc2FibGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b24gPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnNob3dDb21wbGV0ZUNvbXBldGl0aW9uQnV0dG9uO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnJlc3RvcmVCdXR0b25OYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3RvcmVCdXR0b25OYW1lID0gdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5yZXN0b3JlQnV0dG9uTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0TWFudWFsVmVyc2lvblN0YXR1c0NoYW5nZWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8g0L/RgNC+0LjQt9C+0YjQu9C+INGA0YPRh9C90L7QtSDQuNC30LzQtdC90LXQvdC40LUg0YHRgtCw0YLRg9GB0LAsINGC0L7Qu9C60LDQtdC8INC00LDQu9GM0YjQtSDQv9C+INGC0LDQudC80LDRg9GC0YNcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2VsZWxlY3Rpb25FZGl0RWJMaW5rcygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLl9lYkxpbmtzTW9kZWwgPSByZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsW3ZhbHVlIGFzIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5YCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgn0JLQvdC40LzQsNC90LjQtSEg0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9GA0LjQstC10LTQtdGCINC6INGB0L7Qt9C00LDQvdC40Y4g0L3QvtCy0L7QuSDQstC10YDRgdC40Lgg0L7RgtCx0L7RgNCwJyl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY3JlYXRlQ29tcGV0aXRpb25WZXJzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICB0aXRsZTogYNCf0YPQsdC70LjQutCw0YbQuNGPICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwYCxcclxuICAgICAgICBtZXNzYWdlOiBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtC/0YPQsdC70LjQutC+0LLQsNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P1xyXG4gICAgICAgICAgICA8L3A+YCxcclxuICAgICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVWZXJzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24oc2VsZWN0ZWRJdGVtLmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNpZ25TZXJ2aWNlLnNpZ24oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ9Cd0LDQv9GA0LDQstC70LXQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwINC90LAg0YHQvtCz0LvQsNGB0L7QstCw0L3QuNC1JyxcclxuICAgICAgICAgICAgb2tMYWJlbDogJ9Ce0YLQv9GA0LDQstC40YLRjCcsXHJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgICAgICAgIHBkZlVybDogYC9tLWRhdGEvbWluZmluL3BkZi1jb21wZXRpdGlvbi8ke3RoaXMuY29tcGV0aXRpb24/LmlkfT92ZXJzaW9uSWQ9JHtzZWxlY3RlZEl0ZW0uaWR9YCxcclxuICAgICAgICAgICAgeG1sVXJsOiBgL20tZGF0YS9taW5maW4veG1sLWNvbXBldGl0aW9uLyR7dGhpcy5jb21wZXRpdGlvbj8uaWR9P3ZlcnNpb25JZD0ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICBwcm92aWRlcjogJ2VtcHR5J1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSgnJywgJ9Ce0LbQuNC00LDQudGC0LUuINCS0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L7RgtC/0YDQsNCy0LrQsCDQvdCwINGB0L7Qs9C70LDRgdC+0LLQsNC90LjQtS4nLCBNZXNzYWdlU2V2ZXJpdHkud2FpdCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgICB2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZCxcclxuICAgICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uVmFsaWRhdGlvblxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHB1YmxpYyBjb25maXJtZWRWZXJzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICB0aXRsZTogYNCj0YLQstC10YDQttC00LXQvdC40LUg0L7RgtCx0L7RgNCwYCxcclxuICAgICAgbWVzc2FnZTogYDxwPtCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGD0YLQstC10YDQtNC40YLRjCDQvtGC0LHQvtGAPzwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgIHZlcnNpb25JZDogdGhpcy5zZWxlY3RlZCEuaWQsXHJcbiAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWplY3RlZFZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICB0aXRsZTogYNCe0YLQutC70L7QvdC10L3QuNC1INC+0YLQsdC+0YDQsGAsXHJcbiAgICAgIG1lc3NhZ2U6IGA8cD7QktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtGC0LrQu9C+0L3QuNGC0Ywg0L7RgtCx0L7RgD88L3A+YCxcclxuICAgICAgY29sb3I6IERpYWxvZ0NvbG9yLnllbGxvdyxcclxuICAgICAgdHlwZTogRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgIG9rQ2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICB2ZXJzaW9uSWQ6IHRoaXMuc2VsZWN0ZWQhLmlkLFxyXG4gICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlJlamVjdGVkXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVWZXJzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICAke3RoaXMuY29tcGV0aXRpb25MYWJlbH3QsD9gLFxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgIDxwPlxyXG4gICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbD8udG9Mb3dlckNhc2UoKX3QsD9cclxuICAgICAgPC9wPmAsXHJcbiAgICAgICAgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgICB9LCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci5yZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQktC+0LfQvtCx0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGl2YXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHBhdXNlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZyAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA9PSB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uV2l0aFZhbGlkYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbih7dmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWR9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCe0YLQvNC10L3QuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbigpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQl9Cw0LLQtdGA0YjQtdC90LjQtSDQvtGC0LHQvtGA0LBgLFxyXG4gICAgICBtZXNzYWdlOlxyXG4gICAgICAgIGA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keS1iYW5uZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcngtaWNvbiBpY29uLWF0dGVudGlvbiBpY29uLWZvbnQtMTYgaWNvbi1jb2xvci1vcmFuZ2UgbXItMlwiPjwvZGl2PlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICDQrdGC0L4g0LTQtdC50YHRgtCy0LjQtSDQvdC10L7QsdGA0LDRgtC40LzQvi4g0J/QvtGB0LvQtSDQtdCz0L4g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0L7RgtC80LXQvdC40YLRjCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtdCy0L7Qt9C80L7QttC90L5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTFcIj5cclxuICAgICAgICAgINCf0L7QtNGC0LLQtdGA0LbQtNCw0Y8g0LTQsNC90L3QvtC1INC00LXQudGB0YLQstC40LUsINCy0YvCoNC/0L7QtNGC0LLQtdGA0LbQtNCw0LXRgtC1INC60L7RgNGA0LXQutGC0L3QvtGB0YLRjCDQv9GA0L7RgtC+0LrQvtC70LAg0LjCoNC+0YLRgdGD0YLRgdGC0LLQuNC1INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INCywqDQtdCz0L7CoNC60L7RgNGA0LXQutGC0LjRgNC+0LLQutC1LlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTFcIj5cclxuICAgICAgICAgINCh0LrQvtGA0YDQtdC60YLQuNGA0L7QstCw0YLRjCDQuNGC0L7Qs9C+0LLRi9C5INC/0YDQvtGC0L7QutC+0Lsg0LLQvtC30LzQvtC20L3QviDRgtC+0LvRjNC60L4g0LLCoNGC0LXRh9C10L3QuNC1IDIwwqDQutCw0LvQtdC90LTQsNGA0L3Ri9GFINC00L3QtdC5INGB0L7CoNC00L3Rj8Kg0YPRgtCy0LXRgNC20LTQtdC90LjRjyDQtdCz0L7CoNC/0LXRgNCy0L7QuSDQstC10YDRgdC40Lgg0LjCoNC00L7CoNC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPINC00LDQvdC90L7Qs9C+INC00LXQudGB0YLQstC40Y8uXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbWItMVwiPlxyXG4gICAgICAgICAg0JXRgdC70LjCoNCy0YvCoNC90LXCoNGD0LLQtdGA0LXQvdGLINCywqDQutC+0YDRgNC10LrRgtC90L7RgdGC0Lgg0L/RgNC+0YLQvtC60L7Qu9CwLCDQv9GA0LjCoNC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INGB0YTQvtGA0LzQuNGA0YPQudGC0LUg0YPQstC10LTQvtC80LvQtdC90LjQtSDQvsKg0LXQs9C+wqDQvtGC0LrQu9C+0L3QtdC90LjQuCDQuMKg0L/QvtC00L/QuNGI0LjRgtC1INC90L7QstGD0Y4g0LLQtdGA0YHQuNGOLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICDQl9Cw0LLQtdGA0YjQuNGC0Ywg0L7RgtCx0L7RgD9cclxuICAgICAgICA8L3A+YCxcclxuICAgICAgY29sb3I6IERpYWxvZ0NvbG9yLnllbGxvdyxcclxuICAgICAgdHlwZTogRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgIG9rQ2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBsZXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2UoJ9CX0LDQstC10YDRiNC10L3QuNC1INC+0YLQsdC+0YDQsCDQvNC+0LbQtdGCINC30LDQvdGP0YLRjCDQvdC10LrQvtGC0L7RgNC+0LUg0LLRgNC10LzRjy4nLFxyXG4gICAgICAgICAgJ9Ce0LHQvdC+0LLQuNGC0LUg0YHRgtGA0LDQvdC40YbRgyDQuNC70Lgg0LLQtdGA0L3QuNGC0LXRgdGMINC/0L7Qt9C20LUnLCBNZXNzYWdlU2V2ZXJpdHkuaW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFZlcnNpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZWxlY3RDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogaWR9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmFja1RvRWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0YLQtdC60YPRidC10Lkg0LLQtdGA0YHQuNC4YCxcclxuICAgICAgYNCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbC50b0xvd2VyQ2FzZSgpfWFgLFxyXG4gICAgICBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIChvaykgPT4ge1xyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgdmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCwgJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0YwnLCB1bmRlZmluZWQsIERpYWxvZ0NvbG9yLnllbGxvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1JlamVjdGlvbihtb2RlbDogQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40YfQuNC90LAg0L7RgtC60LvQvtC90LXQvdC40Y9gLFxyXG4gICAgICBgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5X19hdXRob3JcIj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuYXV0aG9yfTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuY3JlYXRlZERhdGV9PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibW9kYWwtYm9keV9fdGV4dFwiPiR7bW9kZWwucmVhc29ufTwvcD5cclxuICAgICAgYCwgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCAnJywgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWRpcmVjdFRvRWIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbiAhPSB1bmRlZmluZWQgJiYgdGhpcy5fY29tcGV0aXRpb25UeXBlICE9IHVuZGVmaW5lZCAmJiB0aGlzLl9lYkxpbmtzTW9kZWwgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBsaW5rID0gJyc7XHJcblxyXG4gICAgICBpZiAodGhpcy5fY29tcGV0aXRpb25UeXBlID09IENvbXBldGl0aW9uVHlwZUVudW0uU29jaWFsT3JkZXIpIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnNvY2lhbE9yZGVyfS8jU29jaWFsT3JkZXJBZ3JlZW1lbnRgO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9PSBDb21wZXRpdGlvblR5cGVFbnVtLlJlZ2lvbikge1xyXG4gICAgICAgIGxpbmsgPSBgJHt0aGlzLl9lYkxpbmtzTW9kZWwuc3Vic2lkeX0vI0FncmVlbWVudFN1YnNpZHlOb25GZWRlcmFsYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnN1YnNpZHl9LyNBZ3JlZW1lbnRTdWJzaWR5UmVnaXN0cnlgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3aW5kb3cub3BlbihsaW5rLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMuc2VsZWN0ZWRWZXJzaW9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnZlcnNpb25zLmZpbmQocyA9PiBzLmlkID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvLmVtaXQodGhpcy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhcm5pbmdNZXNzYWdlSHRtbChjdXN0b21UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFjdXN0b21UZXh0KSB7XHJcbiAgICAgIGN1c3RvbVRleHQgPSAn0JLQvdC40LzQsNC90LjQtSEg0JTQsNC90L3QvtC1INC00LXQudGB0YLQstC40LUg0L3QtdC70YzQt9GPINC+0YLQvNC10L3QuNGC0YwnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYmctbmV3cyBweC0zIHJhZGl1cy00IG1iLTMgZC1mbGV4XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy0zKTsgcGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNpbmctMylcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItMlwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk02LjU2NTcgMi40MTY2N0M3LjI3MTM1IDEuMTk0NDQgOS4wMzU0OCAxLjE5NDQ0IDkuNzQxMTMgMi40MTY2N0wxNS4yMjYgMTEuOTE2N0MxNS45MzE2IDEzLjEzODkgMTUuMDQ5NSAxNC42NjY3IDEzLjYzODIgMTQuNjY2N0gyLjY2ODU5QzEuMjU3MjkgMTQuNjY2NyAwLjM3NTIyNSAxMy4xMzg5IDEuMDgwODcgMTEuOTE2N0w2LjU2NTcgMi40MTY2N1pNOC44NzUxIDIuOTE2NjdDOC41NTQzNSAyLjM2MTExIDcuNzUyNDggMi4zNjExMSA3LjQzMTczIDIuOTE2NjdMMS45NDY5IDEyLjQxNjdDMS42MjYxNSAxMi45NzIyIDIuMDI3MDkgMTMuNjY2NyAyLjY2ODU5IDEzLjY2NjdIMTMuNjM4MkMxNC4yNzk3IDEzLjY2NjcgMTQuNjgwNyAxMi45NzIyIDE0LjM1OTkgMTIuNDE2N0w4Ljg3NTEgMi45MTY2N1pNOC4xNTM0MiA2LjE2NjY3QzguNDI5NTYgNi4xNjY2NyA4LjY1MzQyIDYuMzkwNTIgOC42NTM0MiA2LjY2NjY3VjkuMzMzMzNDOC42NTM0MiA5LjYwOTQ4IDguNDI5NTYgOS44MzMzMyA4LjE1MzQyIDkuODMzMzNDNy44NzcyNyA5LjgzMzMzIDcuNjUzNDIgOS42MDk0OCA3LjY1MzQyIDkuMzMzMzNWNi42NjY2N0M3LjY1MzQyIDYuMzkwNTIgNy44NzcyNyA2LjE2NjY3IDguMTUzNDIgNi4xNjY2N1pNOC4xNTM0MiAxMC44MzMzQzguNDI5NTYgMTAuODMzMyA4LjY1MzQyIDExLjA1NzIgOC42NTM0MiAxMS4zMzMzVjEyQzguNjUzNDIgMTIuMjc2MSA4LjQyOTU2IDEyLjUgOC4xNTM0MiAxMi41QzcuODc3MjcgMTIuNSA3LjY1MzQyIDEyLjI3NjEgNy42NTM0MiAxMlYxMS4zMzMzQzcuNjUzNDIgMTEuMDU3MiA3Ljg3NzI3IDEwLjgzMzMgOC4xNTM0MiAxMC44MzMzWlwiIGZpbGw9XCIjRDk3NTA4XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMCB0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICR7Y3VzdG9tVGV4dH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWNjZXNzQ29udHJvbChwZXJtaXNzaW9uOiBzdHJpbmcpOiBDaGVja1Blcm1pc3Npb25Nb2RlbCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwZXJtaXNzaW9uLFxyXG4gICAgICBvYmplY3RUeXBlOiBDT01QRVRJVElPTl9FTlRJVFlfTkFNRSxcclxuICAgICAgb2JqZWN0SWQ6IHRoaXMuY29tcGV0aXRpb24/LmlkXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXJcIiAqbmdJZj1cInNlbGVjdGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ibG9ja1wiPlxyXG4gICAgICA8IS0tINCd0LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xNjAgbXItM1wiPlxyXG4gICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQvdCw0LfQstCw0L3QuNC1INGB0YPRidC90L7RgdGC0LgsINC70LjQsdC+IFwi0KHRg9Cx0YHQuNC00LjRj1wiINC70LjQsdC+IFwi0J7RgtCx0L7RgFwiIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIiBteUNvbXBldGl0aW9uTGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwhLS0g0L3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICA8IS0tINC+0LPRgNCw0L3QuNGH0LjRgtGMINC00LvQuNC90YMg0L3QsNC30LLQsNC90LjRjyDQsiA0NCDRgdC40LzQstC+0LvQvtCyIC0tPlxyXG4gICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQsiDRgtGD0LvRgtC40L8g0L/QvtC70L3QvtC1INC90LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0IHRleHQtbm9ybWFsXCIgW21yeENka1Rvb2x0aXBdPVwic2VsZWN0ZWQubmFtZVwiIFt0b29sdGlwTWF4V2lkdGhdPVwiMzIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQuc2hvcnROYW1lID8gc2VsZWN0ZWQuc2hvcnROYW1lIDogJ9Cd0LUg0YPQutCw0LfQsNC9JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YFcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tINGB0YLQsNGC0YPRgSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICA8IS0tINC00LvRjyDQt9Cw0LTQsNC90LjRjyDRhtCy0LXRgtCwINC00L7QsdCw0LLQu9GP0YLRjCDQutC70LDRgdGB0Ys6INC+0YDQsNC90LbQtdCy0YvQuSAtIFwiY29sb3Itb3JhbmdlXCIsINC30LXQu9C10L3Ri9C5IC0gXCJjb2xvci1ncmVlblwiIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dFwiIFtuZ0NsYXNzXT1cImNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0VudW1MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSDRgdC10LvQtdC60YIg0YEg0LLRi9Cx0L7RgNC+0Lwg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gaW5mby1iYW5uZXItaXRlbV9pbnB1dCB3cHgtMjYwIG1yLTNcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0Ym94IGlucHV0Ym94LW1kIG1iLTBcIj5cclxuICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ2ZXJzaW9uc1wiIFtuZ01vZGVsXT1cInNlbGVjdGVkLmlkXCJcclxuICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdFZlcnNpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgZ3JvdXBCeT1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICBub3RGb3VuZFRleHQ9XCLQndC1INC90LDQudC00LXQvdC+XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0Z3JvdXAtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIHt7IGdldENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsKGl0ZW0uc3RhdHVzKSB9fVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAg0JLQtdGA0YHQuNGPIHt7IGl0ZW0ubnVtIH19INC+0YIge3sgaXRlbS5jcmVhdGVkRGF0ZSB8IGRhdGVUaW1lRm9ybWF0OiAnbW9zJyB9fVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7eyBpdGVtLm51bSB9fSDQvtGCIHt7IGl0ZW0uY3JlYXRlZERhdGUgfCBkYXRlVGltZUZvcm1hdDogJ21vcycgIH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSDRgdGC0LDRgtCw0YPRgSDQstC10YDRgdC40LggLS0+XHJcbiAgICA8IS0tINC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsINC10YHQu9C4INC90LXRgiDQstC10YDRgdC40LkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTEwXCIgKm5nSWY9XCJ2ZXJzaW9ucyAmJiB2ZXJzaW9ucy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgINCh0YLQsNGC0YPRgSDQstC10YDRgdC40LhcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tINGB0YLQsNGC0YPRgSDQstC10YDRgdC40LggLS0+XHJcbiAgICAgIDwhLS0g0LTQu9GPINC30LDQtNCw0L3QuNGPINGG0LLQtdGC0LAg0LTQvtCx0LDQstC70Y/RgtGMINC60LvQsNGB0YHRizog0L7RgNCw0L3QttC10LLRi9C5IC0gXCJjb2xvci1vcmFuZ2VcIiwg0LfQtdC70LXQvdGL0LkgLSBcImNvbG9yLWdyZWVuXCIgLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dFwiICpuZ0lmPVwic2VsZWN0ZWRcIiBbbmdDbGFzc109XCJ2ZXJzaW9uU3RhdHVzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIHt7IGdldENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbChzZWxlY3RlZC5zdGF0dXMpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSDRg9C00LDQu9C10L3QuNC1LCDQstGL0LfQvtCyINC80L7QtNCw0LvQutC4LCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1INC+0LEg0LLQvdC10YHQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbVwiPlxyXG4gICAgICA8IS0tINC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsINC10YHQu9C4INC90LUg0YLRgNC10LHRg9C10YLRgdGPIC0tPlxyXG4gICAgICA8IS0tIFwi0LrQvtC90LLQtdGA0YJcIiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiAqbmdJZj1cInNob3dSZWplY3Rpb25SZWFzb25cIlxyXG4gICAgICAgICAgIFttcnhDZGtUb29sdGlwXT1cIifQn9C+0YHQvNC+0YLRgNC10YLRjCDQv9GA0LjRh9C40L3RgyDQvtGC0LrQu9C+0L3QtdC90LjRjydcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJzaG93UmVqZWN0aW9uKHNlbGVjdGVkLnJlamVjdGlvblJlYXNvbilcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjZcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMTJcIiByeD1cIjFcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0zIDYuMjVMMTEuMzM1NiAxMy42NTk1QzExLjcxNDUgMTMuOTk2MiAxMi4yODU1IDEzLjk5NjIgMTIuNjY0NCAxMy42NTk1TDIxIDYuMjVcIiBzdHJva2U9XCIjMjgyODI4XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOEw3LjUgMTRMOS43NSAxMk0yMSAxOEwxNi41IDE0TDE0LjI1IDEyXCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0g0YPQtNCw0LvQtdC90LjQtSDQstC10YDRgdC40LggLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJjYW5EZWxldGVWZXJzaW9uXCIgKGNsaWNrKT1cInJlbW92ZVZlcnNpb24oKVwiIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiIFttcnhDZGtUb29sdGlwXT1cIifQo9C00LDQu9C40YLRjCDQstC10YDRgdC40Y4nXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTMgNkg1SDIxXCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xOSA2VjIwQzE5IDIwLjUzMDQgMTguNzg5MyAyMS4wMzkxIDE4LjQxNDIgMjEuNDE0MkMxOC4wMzkxIDIxLjc4OTMgMTcuNTMwNCAyMiAxNyAyMkg3QzYuNDY5NTcgMjIgNS45NjA4NiAyMS43ODkzIDUuNTg1NzkgMjEuNDE0MkM1LjIxMDcxIDIxLjAzOTEgNSAyMC41MzA0IDUgMjBWNkgxOVpcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMCAxMVYxN1wiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTE0IDExVjE3XCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0g0LLQvtGB0LrQu9C40YbQsNGC0LXQu9GM0L3Ri9C5INC30L3QsNC6IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWlzTGFzdFZlcnNpb25cIiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiBbbXJ4Q2RrVG9vbHRpcF09XCIn0JLQvdC10YHQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0L3QviDQvdCwINC/0L7RgdC70LXQtNC90LXQuSDQstC10YDRgdC40LgnXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTEyLjIzMDIgMThWMTdNMTIuMjMwMiAxNFYxME00LjAwMjk4IDIxLjI1SDIwLjQ1NzVDMjEuOTk3MSAyMS4yNSAyMi45NTkzIDE5LjU4MzMgMjIuMTg5NSAxOC4yNUwxMy45NjIzIDRDMTMuMTkyNSAyLjY2NjY3IDExLjI2OCAyLjY2NjY3IDEwLjQ5ODIgNEwyLjI3MDkzIDE4LjI1QzEuNTAxMTMgMTkuNTgzMyAyLjQ2MzM4IDIxLjI1IDQuMDAyOTggMjEuMjVaXCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwiI0Q1N0IxQ1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhIWN1c3RvbUJ1dHRvbnNUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tQnV0dG9uc1RlbXBsYXRlLnRlbXBsYXRlUmVmO2NvbnRleHQ6Y3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtZWRWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ29uZmlybWVkVmVyc2lvblwiPlxyXG4gICAgICAgICAg0KPRgtCy0LXRgNC00LjRgtGMXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlamVjdGVkVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkNvbmZpcm1lZFZlcnNpb25cIj5cclxuICAgICAgICAgINCe0YLQutC70L7QvdC40YLRjFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgZ3JlZW5cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ3JlYXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNyZWF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgINCh0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGdyZWVuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuQWN0aXZhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aXZhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICDQntC/0YPQsdC70LjQutC+0LLQsNGC0YxcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuVmFsaWRhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmFsaWRhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICDQodC+0LPQu9Cw0YHQvtCy0LDQvdC40LVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY29tcGxldGUoKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5Db21wbGV0ZUNvbXBldGl0aW9uXCI+XHJcbiAgICAgICAg0JfQsNCy0LXRgNGI0LjRgtGMXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuUmV0dXJuVG9FZGl0XCIgY2xhc3M9XCJidG4gYnRuLW1kXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvRWRpdCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYmFja1RvRWRpdERpc2FibGVkXCI+XHJcbiAgICAgICAg0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YxcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwhLS0g0YPQv9GA0LDQstC70LXQvdC40LUg0YHRgtCw0YLRg9GB0L7QvC/QvtGC0LHQvtGA0L7QvCAtLT5cclxuICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC10YHQu9C4INC90LUg0YLRgNC10LHRg9C10YLRgdGPIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fYWN0aW9uXCJcclxuICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uICYmIHNob3dFYkxpbmtcIj5cclxuICAgICAgICA8bXJ4LWRyb3Bkb3duIFttYWluUGxhY2VtZW50XT1cIidib3R0b20tZW5kJ1wiIFtmYWxsYmFja1BsYWNlbWVudHNdPVwiWyd0b3AtZW5kJ11cIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1tb3JlLXZlcnRpY2FsIGljb24tZm9udC0yNFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duTWVudT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGljayAoY2xpY2spPVwicmVkaXJlY3RUb0ViKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tbGluayBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj7Qn9C10YDQtdC50YLQuCDQsiDQv9C+0LTRgdC40YHRgtC10LzRgyDQsdGO0LTQttC10YLQvdC+0LPQviDQv9C70LDQvdC40YDQvtCy0LDQvdC40Y8g0JPQmNCY0KEgwqvQrdCRwrs8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPCEtLdCS0YDQtdC80LXQvdC90L4g0YHQutGA0YvRgtC+INCyINGA0LDQvNC60LDRhSBNSU5GSU4tMTEyMjMtLT5cclxuICAgICAgICAgICAgPCEtLTxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInBhdXNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgJiYgY2FuTWFuYWdlQ29tcGV0aXRpb25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tcGF1c2UtZmlsbGVkIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPtCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj4tLT5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInJlc3RvcmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmdcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tcGxheS1maWxsZWQgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgcmVzdG9yZUJ1dHRvbk5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGlja1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ2FuY2VsQ29tcGV0aXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZSBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9tcngtZHJvcGRvd24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWxvYWRlclwiIFtjbGFzcy5hY3RpdmVdPVwic2hvd0xvYWRlclwiPlxyXG4gIDxtcngtbG9hZGVyICpuZ0lmPVwic2hvd0xvYWRlclwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiJ2xhcmdlJ1wiPlxyXG4gIDwvbXJ4LWxvYWRlcj5cclxuPC9kaXY+XHJcbiJdfQ==
|