@pega/angular-sdk-components 24.1.10 → 24.2.10
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/esm2022/lib/_bridge/angular-pconnect.mjs +3 -3
- package/esm2022/lib/_bridge/component-mapper/component-mapper.component.mjs +6 -13
- package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/alert-banner/alert-banner.component.mjs +4 -4
- package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.mjs +4 -4
- package/esm2022/lib/_components/designSystemExtension/field-group/field-group.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +5 -5
- package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +9 -6
- package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +4 -4
- package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +4 -4
- package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +9 -9
- package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +3 -3
- package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +3 -3
- package/esm2022/lib/_components/field/auto-complete/auto-complete.component.mjs +12 -10
- package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +3 -3
- package/esm2022/lib/_components/field/check-box/check-box.component.mjs +11 -9
- package/esm2022/lib/_components/field/currency/currency.component.mjs +30 -17
- package/esm2022/lib/_components/field/date/date.component.mjs +19 -39
- package/esm2022/lib/_components/field/date-time/date-time.component.mjs +16 -14
- package/esm2022/lib/_components/field/decimal/decimal.component.mjs +22 -20
- package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +124 -24
- package/esm2022/lib/_components/field/email/email.component.mjs +14 -7
- package/esm2022/lib/_components/field/group/group.component.mjs +6 -6
- package/esm2022/lib/_components/field/integer/integer.component.mjs +14 -9
- package/esm2022/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.mjs +3 -3
- package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +13 -6
- package/esm2022/lib/_components/field/percentage/percentage.component.mjs +31 -23
- package/esm2022/lib/_components/field/phone/phone.component.mjs +11 -18
- package/esm2022/lib/_components/field/radio-buttons/radio-buttons.component.mjs +9 -11
- package/esm2022/lib/_components/field/rich-text/rich-text.component.mjs +8 -9
- package/esm2022/lib/_components/field/scalar-list/scalar-list.component.mjs +7 -8
- package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +3 -3
- package/esm2022/lib/_components/field/text/text.component.mjs +6 -4
- package/esm2022/lib/_components/field/text-area/text-area.component.mjs +14 -10
- package/esm2022/lib/_components/field/text-content/text-content.component.mjs +3 -3
- package/esm2022/lib/_components/field/text-input/text-input.component.mjs +14 -9
- package/esm2022/lib/_components/field/time/time.component.mjs +20 -11
- package/esm2022/lib/_components/field/url/url.component.mjs +14 -9
- package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +37 -17
- package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +10 -7
- package/esm2022/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.mjs +3 -3
- package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +4 -4
- package/esm2022/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.mjs +4 -4
- package/esm2022/lib/_components/infra/Containers/view-container/helper.mjs +22 -0
- package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +9 -16
- package/esm2022/lib/_components/infra/action-buttons/action-buttons.component.mjs +3 -3
- package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +4 -5
- package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +3 -3
- package/esm2022/lib/_components/infra/dashboard-filter/dashboard-filter.component.mjs +3 -3
- package/esm2022/lib/_components/infra/defer-load/defer-load.component.mjs +7 -7
- package/esm2022/lib/_components/infra/error-boundary/error-boundary.component.mjs +3 -3
- package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +3 -3
- package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +5 -5
- package/esm2022/lib/_components/infra/reference/reference.component.mjs +3 -3
- package/esm2022/lib/_components/infra/region/region.component.mjs +3 -3
- package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +4 -4
- package/esm2022/lib/_components/infra/stages/stages.component.mjs +5 -5
- package/esm2022/lib/_components/infra/view/view.component.mjs +22 -7
- package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +20 -4
- package/esm2022/lib/_components/template/banner-page/banner-page.component.mjs +3 -3
- package/esm2022/lib/_components/template/base/details-template-base.mjs +56 -0
- package/esm2022/lib/_components/template/base/form-template-base.mjs +13 -0
- package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +4 -4
- package/esm2022/lib/_components/template/case-view/case-view.component.mjs +11 -16
- package/esm2022/lib/_components/template/confirmation/confirmation.component.mjs +5 -5
- package/esm2022/lib/_components/template/data-reference/data-reference.component.mjs +13 -8
- package/esm2022/lib/_components/template/default-form/default-form.component.mjs +8 -20
- package/esm2022/lib/_components/template/details/details.component.mjs +12 -39
- package/esm2022/lib/_components/template/details-narrow-wide/details-narrow-wide.component.mjs +11 -38
- package/esm2022/lib/_components/template/details-one-column/details-one-column.component.mjs +12 -41
- package/esm2022/lib/_components/template/details-sub-tabs/details-sub-tabs.component.mjs +13 -40
- package/esm2022/lib/_components/template/details-three-column/details-three-column.component.mjs +12 -41
- package/esm2022/lib/_components/template/details-two-column/details-two-column.component.mjs +13 -42
- package/esm2022/lib/_components/template/details-wide-narrow/details-wide-narrow.component.mjs +12 -41
- package/esm2022/lib/_components/template/dynamic-tabs/dynamic-tabs.component.mjs +8 -7
- package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +3 -3
- package/esm2022/lib/_components/template/field-group-template/field-group-template.component.mjs +6 -8
- package/esm2022/lib/_components/template/field-value-list/field-value-list.component.mjs +5 -5
- package/esm2022/lib/_components/template/inline-dashboard/inline-dashboard.component.mjs +3 -3
- package/esm2022/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.mjs +5 -5
- package/esm2022/lib/_components/template/list-page/list-page.component.mjs +3 -3
- package/esm2022/lib/_components/template/list-view/list-view.component.mjs +24 -9
- package/esm2022/lib/_components/template/list-view/listViewHelpers.mjs +2 -2
- package/esm2022/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.mjs +3 -3
- package/esm2022/lib/_components/template/narrow-wide-form/narrow-wide-form.component.mjs +4 -4
- package/esm2022/lib/_components/template/one-column/one-column.component.mjs +6 -5
- package/esm2022/lib/_components/template/one-column-page/one-column-page.component.mjs +3 -3
- package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +4 -4
- package/esm2022/lib/_components/template/page/page.component.mjs +4 -4
- package/esm2022/lib/_components/template/promoted-filters/promoted-filters.component.mjs +4 -4
- package/esm2022/lib/_components/template/repeating-structures/repeating-structures.component.mjs +4 -4
- package/esm2022/lib/_components/template/simple-table/simple-table.component.mjs +3 -3
- package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +2 -2
- package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +9 -11
- package/esm2022/lib/_components/template/simple-table-select/simple-table-select.component.mjs +5 -5
- package/esm2022/lib/_components/template/single-reference-readonly/single-reference-readonly.component.mjs +3 -3
- package/esm2022/lib/_components/template/sub-tabs/sub-tabs.component.mjs +4 -4
- package/esm2022/lib/_components/template/three-column/three-column.component.mjs +6 -5
- package/esm2022/lib/_components/template/three-column-page/three-column-page.component.mjs +3 -3
- package/esm2022/lib/_components/template/two-column/two-column.component.mjs +6 -5
- package/esm2022/lib/_components/template/two-column-page/two-column-page.component.mjs +3 -3
- package/esm2022/lib/_components/template/two-column-tab/two-column-tab.component.mjs +4 -4
- package/esm2022/lib/_components/template/wide-narrow-form/wide-narrow-form.component.mjs +6 -5
- package/esm2022/lib/_components/template/wide-narrow-page/wide-narrow-page.component.mjs +4 -4
- package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +5 -5
- package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +3 -3
- package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +6 -8
- package/esm2022/lib/_components/widget/case-history/case-history.component.mjs +3 -3
- package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +5 -5
- package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +4 -4
- package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +3 -3
- package/esm2022/lib/_components/widget/quick-create/quick-create.component.mjs +3 -3
- package/esm2022/lib/_components/widget/todo/todo.component.mjs +77 -63
- package/esm2022/lib/_components/widget/utility/utility.component.mjs +3 -3
- package/esm2022/lib/_directives/thousand-seperator.directive.mjs +4 -4
- package/esm2022/lib/_helpers/createstage-utils.mjs +15 -0
- package/esm2022/lib/_helpers/field-group-utils.mjs +3 -3
- package/esm2022/lib/_helpers/filter-utils.mjs +1 -2
- package/esm2022/lib/_helpers/formatters/common.mjs +3 -5
- package/esm2022/lib/_helpers/formatters/date.mjs +4 -4
- package/esm2022/lib/_helpers/formatters/index.mjs +17 -3
- package/esm2022/lib/_helpers/template-utils.mjs +3 -3
- package/esm2022/lib/_helpers/utils.mjs +3 -3
- package/esm2022/lib/_messages/error-messages.service.mjs +4 -4
- package/esm2022/lib/_messages/progress-spinner.service.mjs +3 -3
- package/esm2022/lib/_messages/update-worklist.service.mjs +3 -3
- package/esm2022/lib/_services/case.service.mjs +3 -3
- package/esm2022/lib/_services/datapage.service.mjs +3 -3
- package/esm2022/lib/_services/endpoints.mjs +1 -2
- package/esm2022/lib/_services/server-config.service.mjs +3 -3
- package/esm2022/public-api.mjs +4 -4
- package/fesm2022/pega-angular-sdk-components.mjs +1286 -1274
- package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
- package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +1 -1
- package/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.d.ts +1 -1
- package/lib/_components/designSystemExtension/pulse/pulse.component.d.ts +2 -2
- package/lib/_components/field/auto-complete/auto-complete.component.d.ts +3 -2
- package/lib/_components/field/check-box/check-box.component.d.ts +2 -2
- package/lib/_components/field/currency/currency.component.d.ts +6 -3
- package/lib/_components/field/date/date.component.d.ts +17 -6
- package/lib/_components/field/date-time/date-time.component.d.ts +9 -2
- package/lib/_components/field/decimal/decimal.component.d.ts +3 -3
- package/lib/_components/field/dropdown/dropdown.component.d.ts +13 -2
- package/lib/_components/field/email/email.component.d.ts +2 -0
- package/lib/_components/field/integer/integer.component.d.ts +3 -1
- package/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.d.ts +1 -1
- package/lib/_components/field/multiselect/multiselect.component.d.ts +3 -2
- package/lib/_components/field/percentage/percentage.component.d.ts +7 -3
- package/lib/_components/field/phone/phone.component.d.ts +3 -1
- package/lib/_components/field/radio-buttons/radio-buttons.component.d.ts +2 -1
- package/lib/_components/field/rich-text/rich-text.component.d.ts +2 -0
- package/lib/_components/field/text/text.component.d.ts +3 -1
- package/lib/_components/field/text-area/text-area.component.d.ts +3 -1
- package/lib/_components/field/text-input/text-input.component.d.ts +3 -1
- package/lib/_components/field/time/time.component.d.ts +4 -1
- package/lib/_components/field/url/url.component.d.ts +3 -1
- package/lib/_components/field/user-reference/user-reference.component.d.ts +7 -0
- package/lib/_components/infra/Containers/view-container/helper.d.ts +2 -0
- package/lib/_components/infra/action-buttons/action-buttons.component.d.ts +1 -1
- package/lib/_components/infra/defer-load/defer-load.component.d.ts +2 -2
- package/lib/_components/infra/error-boundary/error-boundary.component.d.ts +1 -1
- package/lib/_components/infra/navbar/navbar.component.d.ts +2 -2
- package/lib/_components/infra/view/view.component.d.ts +1 -0
- package/lib/_components/template/base/details-template-base.d.ts +22 -0
- package/lib/_components/template/base/form-template-base.d.ts +8 -0
- package/lib/_components/template/case-view/case-view.component.d.ts +1 -2
- package/lib/_components/template/default-form/default-form.component.d.ts +2 -5
- package/lib/_components/template/details/details.component.d.ts +3 -11
- package/lib/_components/template/details-narrow-wide/details-narrow-wide.component.d.ts +3 -11
- package/lib/_components/template/details-one-column/details-one-column.component.d.ts +3 -13
- package/lib/_components/template/details-sub-tabs/details-sub-tabs.component.d.ts +3 -13
- package/lib/_components/template/details-three-column/details-three-column.component.d.ts +3 -13
- package/lib/_components/template/details-two-column/details-two-column.component.d.ts +3 -13
- package/lib/_components/template/details-wide-narrow/details-wide-narrow.component.d.ts +3 -13
- package/lib/_components/template/dynamic-tabs/dynamic-tabs.component.d.ts +1 -0
- package/lib/_components/template/list-view/list-view.component.d.ts +6 -1
- package/lib/_components/template/list-view/listViewHelpers.d.ts +1 -1
- package/lib/_components/template/one-column/one-column.component.d.ts +2 -1
- package/lib/_components/template/simple-table-manual/helpers.d.ts +1 -1
- package/lib/_components/template/simple-table-manual/simple-table-manual.component.d.ts +2 -0
- package/lib/_components/template/three-column/three-column.component.d.ts +2 -1
- package/lib/_components/template/two-column/two-column.component.d.ts +2 -1
- package/lib/_components/template/wide-narrow-form/wide-narrow-form.component.d.ts +2 -1
- package/lib/_components/template/wide-narrow-page/wide-narrow-page.component.d.ts +1 -1
- package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +3 -3
- package/lib/_components/widget/attachment/attachment.component.d.ts +3 -3
- package/lib/_components/widget/feed-container/feed-container.component.d.ts +2 -2
- package/lib/_components/widget/file-utility/file-utility.component.d.ts +1 -1
- package/lib/_components/widget/todo/todo.component.d.ts +9 -12
- package/lib/_helpers/common.d.ts +1 -1
- package/lib/_helpers/createstage-utils.d.ts +1 -0
- package/lib/_helpers/formatters/common.d.ts +2 -2
- package/lib/_messages/error-messages.service.d.ts +1 -1
- package/lib/_services/endpoints.d.ts +0 -1
- package/lib/doc/KeyReleaseUpdates.md +23 -6
- package/package.json +3 -3
- package/public-api.d.ts +3 -3
- package/esm2022/lib/_messages/get-login-status.service.mjs +0 -26
- package/esm2022/lib/_messages/oauth-response.service.mjs +0 -30
- package/esm2022/lib/_messages/reset-pconnect.service.mjs +0 -31
- package/lib/_messages/get-login-status.service.d.ts +0 -10
- package/lib/_messages/oauth-response.service.d.ts +0 -14
- package/lib/_messages/reset-pconnect.service.d.ts +0 -15
|
@@ -29,7 +29,7 @@ export class FeedContainerComponent {
|
|
|
29
29
|
ngOnInit() {
|
|
30
30
|
this.userName$ = PCore.getEnvironmentInfo().getOperatorName();
|
|
31
31
|
this.imageKey$ = PCore.getEnvironmentInfo().getOperatorImageInsKey();
|
|
32
|
-
this.updateCurrentUserName(this.userName$);
|
|
32
|
+
this.updateCurrentUserName(this.userName$ ?? '');
|
|
33
33
|
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
34
34
|
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
35
35
|
// Then, continue on with other initialization
|
|
@@ -509,13 +509,13 @@ export class FeedContainerComponent {
|
|
|
509
509
|
newCommentChange(event, messageID) {
|
|
510
510
|
this.pulseComment[messageID] = event.target.value;
|
|
511
511
|
}
|
|
512
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
513
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FeedContainerComponent, isStandalone: true, selector: "app-feed-container", inputs: { pConn$: "pConn$" }, providers: [Utils], ngImport: i0, template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
|
|
512
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FeedContainerComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
513
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: FeedContainerComponent, isStandalone: true, selector: "app-feed-container", inputs: { pConn$: "pConn$" }, providers: [Utils], ngImport: i0, template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
|
|
514
514
|
}
|
|
515
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
515
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FeedContainerComponent, decorators: [{
|
|
516
516
|
type: Component,
|
|
517
517
|
args: [{ selector: 'app-feed-container', providers: [Utils], standalone: true, imports: [CommonModule, MatFormFieldModule, MatInputModule, MatGridListModule, MatButtonModule], template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"] }]
|
|
518
518
|
}], ctorParameters: () => [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.Utils }], propDecorators: { pConn$: [{
|
|
519
519
|
type: Input
|
|
520
520
|
}] } });
|
|
521
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3dpZGdldC9mZWVkLWNvbnRhaW5lci9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L2ZlZWQtY29udGFpbmVyL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDakMsWUFDVSxlQUF1QyxFQUN2QyxLQUF3QixFQUN4QixLQUFZO1FBRlosb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFyQ3RCLDRCQUE0QjtRQUM1Qix3QkFBbUIsR0FBd0IsRUFB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SFksWUFBWSwrUEFBRSxrQkFBa0IseU9BQUUsY0FBYywwV0FBRSxpQkFBaUIsaVRBQUUsZUFBZTs7NEZBRW5GLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkIsQ0FBQyxLQUFLLENBQUMsY0FDTixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQzsrSUFHdEYsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0R3JpZExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBBbmd1bGFyUENvbm5lY3REYXRhLCBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9hbmd1bGFyLXBjb25uZWN0JztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZmVlZC1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVlZC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEdyaWRMaXN0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEZlZWRDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBDb25uJDogdHlwZW9mIFBDb25uZWN0O1xuXG4gIC8vIFVzZWQgd2l0aCBBbmd1bGFyUENvbm5lY3RcbiAgYW5ndWxhclBDb25uZWN0RGF0YTogQW5ndWxhclBDb25uZWN0RGF0YSA9IHt9O1xuXG4gIHVzZXJOYW1lJDogc3RyaW5nO1xuICBpbWFnZUtleSQ6IHN0cmluZztcblxuICBjdXJyZW50VXNlckluaXRpYWxzJDogc3RyaW5nO1xuICBjdXJyZW50VXNlck5hbWUkOiBzdHJpbmc7XG5cbiAgcHVsc2VNZXNzYWdlcyQ6IGFueVtdO1xuICBzaG93UmVwbHlDb21tZW50JDogT2JqZWN0ID0ge307XG5cbiAgc3ZnQ29tbWVudCQ6IHN0cmluZztcbiAgc3ZnTGlrZSQ6IHN0cmluZztcbiAgc3ZnTGlrZWRCeU1lJDogc3RyaW5nO1xuICBzdmdTZW5kJDogc3RyaW5nO1xuXG4gIHB1bHNlQ29udmVyc2F0aW9uOiBzdHJpbmc7XG4gIHVzZXJEYXRhOiBNYXA8YW55LCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gIHB1bHNlQ29tbWVudDogT2JqZWN0ID0ge307XG5cbiAgLy8gZnVuY3Rpb25zXG4gIGFjdGlvbnNBUEk6IGFueTtcbiAgLy8gdW50aWwgRmVlZEFQSSBtb3ZlZCBiYWNrIHRvIFBDb3JlLCB3ZSBhY2Nlc3MgdGhlIG1ldGhvZHMgZGlyZWN0bHkgKHNlZSBuZ0luaXQpXG4gIGZlZWRBUEk6IGFueTtcblxuICBwdWxzZURhdGE6IGFueTtcblxuICAvLyBUZW1wb3Jhcnkgd2F5IHRvIHVzZSBGZWVkQXBpLi4uXG4gIGZldGNoTWVzc2FnZXM6IGFueTtcbiAgbGlrZU1lc3NhZ2U6IGFueTtcbiAgcG9zdE1lc3NhZ2U6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFuZ3VsYXJQQ29ubmVjdDogQW5ndWxhclBDb25uZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1xuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyTmFtZSQgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICB0aGlzLmltYWdlS2V5JCA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySW1hZ2VJbnNLZXkoKTtcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRVc2VyTmFtZSh0aGlzLnVzZXJOYW1lJCk7XG5cbiAgICAvLyBGaXJzdCB0aGluZyBpbiBpbml0aWFsaXphdGlvbiBpcyByZWdpc3RlcmluZyBhbmQgc3Vic2NyaWJpbmcgdG8gdGhlIEFuZ3VsYXJQQ29ubmVjdCBzZXJ2aWNlXG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhID0gdGhpcy5hbmd1bGFyUENvbm5lY3QucmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQodGhpcywgdGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgIC8vIFRoZW4sIGNvbnRpbnVlIG9uIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBkZWJ1Z2dlcjtcblxuICAgIC8vIGNvbnN0IHtcbiAgICAvLyAgIGZldGNoTWVzc2FnZXMsXG4gICAgLy8gICBsaWtlTWVzc2FnZSxcbiAgICAvLyAgIHBvc3RNZXNzYWdlXG4gICAgLy8gfSA9IEZlZWRBcGkodGhpcy5wQ29ubiQpO1xuICAgIC8vIHRoaXMuZmV0Y2hNZXNzYWdlcyA9IGZldGNoTWVzc2FnZXM7XG4gICAgLy8gdGhpcy5saWtlTWVzc2FnZSA9IGxpa2VNZXNzYWdlO1xuICAgIC8vIHRoaXMucG9zdE1lc3NhZ2UgPSBwb3N0TWVzc2FnZTtcblxuICAgIC8vIC8vIHRoaXMudXNlck5hbWUkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJweFJlcXVlc3Rvci5weFVzZXJOYW1lXCIpO1xuICAgIC8vIC8vIHRoaXMuaW1hZ2VLZXkkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJPcGVyYXRvcklELnB5SW1hZ2VJbnNLZXlcIik7XG5cbiAgICAvLyAvL3RoaXMudXNlck5hbWUkID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpW1wiRF9weEVudmlyb25tZW50SW5mb1wiXS5weE9wZXJhdG9yLnB5VXNlck5hbWU7XG4gICAgLy8gLy90aGlzLmltYWdlS2V5JCA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKVtcIkRfcHhFbnZpcm9ubWVudEluZm9cIl0ucHhPcGVyYXRvci5weUltYWdlSW5zS2V5O1xuICAgIC8vIHRoaXMudXNlck5hbWUkID0gdGhpcy5wQ29ubiQuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JOYW1lKCk7XG4gICAgLy8gdGhpcy5pbWFnZUtleSQgPSB0aGlzLnBDb25uJC5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvckltYWdlSW5zS2V5KCk7XG5cbiAgICAvLyB0aGlzLmFjdGlvbnNBUEkgPSB0aGlzLnBDb25uJC5nZXRBY3Rpb25zQXBpKCk7XG5cbiAgICAvLyBsZXQgb3duZXIgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpLnZhbHVlO1xuXG4gICAgLy8gLy8gd2l0aCBuZXcgRmVlZEFQSTogb3duZXIgaXMgdGhlIHByb3BlciB2YWx1ZSB0byBwYXNzIGluXG4gICAgLy8gLy8gIGFuZCBubyBsb25nZXIgdGFrZXMgMm5kIGFyZ3VtZW50XG4gICAgLy8gdGhpcy4vKmZlZWRBUEkuKi9mZXRjaE1lc3NhZ2VzKG93bmVyIC8qLCB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpKi8pO1xuXG4gICAgLy8gY29uc3QgY29uZmlnUHJvcHM6IGFueSA9IHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCk7XG5cbiAgICAvLyBjb25zdCB7IG1lc3NhZ2VJRHMgfSA9IGNvbmZpZ1Byb3BzO1xuXG4gICAgLy8gY29uc3QgeyBmZXRjaE1lc3NhZ2VzLCBwb3N0TWVzc2FnZSwgZ2V0TWVudGlvblN1Z2dlc3Rpb25zLCBnZXRUYWdTdWdnZXN0aW9ucyB9ID0gRmVlZEFwaSh0aGlzLnBDb25uJCk7XG5cbiAgICBjb25zdCBhcHBOYW1lID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0QXBwbGljYXRpb25OYW1lKCk7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgbGV0IGZlZWRJRCA9ICcnO1xuICAgIGxldCBmZWVkQ2xhc3MgPSAnJztcblxuICAgIGlmICh0aGlzLnBDb25uJC5nZXRDYXNlU3VtbWFyeSgpLklEKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucENvbm4kLmdldENhc2VTdW1tYXJ5KCkuSUQ7XG4gICAgICBmZWVkSUQgPSAncHlDYXNlRmVlZCc7XG4gICAgICBmZWVkQ2xhc3MgPSB0aGlzLnBDb25uJC5nZXRDYXNlU3VtbWFyeSgpLmNvbnRlbnQuY2xhc3NJRDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBgREFUQS1QT1JUQUwgJCR7YXBwTmFtZX1gO1xuICAgICAgZmVlZElEID0gJ3B5RGFzaGJvYXJkRmVlZCc7XG4gICAgICBmZWVkQ2xhc3MgPSAnQGJhc2VjbGFzcyc7XG4gICAgfVxuXG4gICAgY29uc3Qgb25VcGxvYWRQcm9ncmVzcyA9ICgpID0+IHt9O1xuICAgIGNvbnN0IGVycm9ySGFuZGxlciA9ICgpID0+IHt9O1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gKCkgPT4ge307XG5cbiAgICBjb25zdCBwb3N0Q29tbWVudCA9ICh7IHZhbHVlOiBtZXNzYWdlLCBjbGVhciB9KSA9PiB7XG4gICAgICBjb25zdCBhdHRhY2htZW50SURzID0gW107XG4gICAgICBjb25zdCBhdHRhY2htZW50VXRpbHMgPSBQQ29yZS5nZXRBdHRhY2htZW50VXRpbHMoKTtcbiAgICAgIGlmIChhdHRhY2htZW50cyAmJiAhIWF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvKiBhdHRhY2htZW50cztcbiAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiAhZmlsZS5lcnJvcilcbiAgICAgICAgICAubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudFV0aWxzXG4gICAgICAgICAgICAgIC51cGxvYWRBdHRhY2htZW50KGZpbGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIGVycm9ySGFuZGxlcilcbiAgICAgICAgICAgICAgLnRoZW4oKGZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBJRDogZmlsZVJlc3BvbnNlLmRhdGEuSURcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHMucHVzaChmaWxlQ29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID09PSBhdHRhY2htZW50SURzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXJrZG93blRvTXNnKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SURzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgIH0pOyAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcG9zdE1lc3NhZ2UodmFsdWUsIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSkpO1xuICAgICAgICBjbGVhcigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKlxuXG4gICAgY29uc3QgeyBnZXRQQ29ubmVjdCwgbWVzc2FnZUlEcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW21lbnRpb25SZXN1bHRzLCBzZXRNZW50aW9uUmVzdWx0c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3RhZ1Jlc3VsdHMsIHNldFRhZ1Jlc3VsdHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdHRhY2htZW50cywgc2V0QXR0YWNobWVudHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtmZWVkRmlsdGVycywgc2V0RmVlZEZpbHRlcnNdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCB7XG4gICAgICBmZXRjaE1lc3NhZ2VzLFxuICAgICAgcG9zdE1lc3NhZ2UsXG4gICAgICBnZXRNZW50aW9uU3VnZ2VzdGlvbnMsXG4gICAgICBnZXRUYWdTdWdnZXN0aW9uc1xuICAgIH0gPSBGZWVkQXBpKGdldFBDb25uZWN0KCkpO1xuICAgIGNvbnN0IGFwcE5hbWUgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRBcHBsaWNhdGlvbk5hbWUoKTtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGxldCBmZWVkSUQgPSBcIlwiO1xuICAgIGxldCBmZWVkQ2xhc3MgPSBcIlwiO1xuICAgIGlmIChnZXRQQ29ubmVjdCgpLmdldENhc2VTdW1tYXJ5KCkuSUQpIHtcbiAgICAgIHZhbHVlID0gZ2V0UENvbm5lY3QoKS5nZXRDYXNlU3VtbWFyeSgpLklEO1xuICAgICAgZmVlZElEID0gXCJweUNhc2VGZWVkXCI7XG4gICAgICBmZWVkQ2xhc3MgPSBnZXRQQ29ubmVjdCgpLmdldENhc2VTdW1tYXJ5KCkuY29udGVudC5jbGFzc0lEO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGBEQVRBLVBPUlRBTCAkJHthcHBOYW1lfWA7XG4gICAgICBmZWVkSUQgPSBcInB5RGFzaGJvYXJkRmVlZFwiO1xuICAgICAgZmVlZENsYXNzID0gXCJAYmFzZWNsYXNzXCI7XG4gICAgfVxuICAgIC8vIEZvciBjYW5jZWxsaW5nIGZldGNocmVxdWVzdCBmb3IgZmlsZXRyc1xuICAgIGNvbnN0IGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZSA9IHVzZVJlZihbXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgZmV0Y2hNZXNzYWdlcyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGZlZWRJRCxcbiAgICAgICAgZmVlZENsYXNzLFxuICAgICAgICBudWxsLFxuICAgICAgICBmZXRjaE1lc3NhZ2VzQ2FuY2VsVG9rZW5Tb3VyY2UuY3VycmVudFxuICAgICAgKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgc2V0RmVlZEZpbHRlcnMocmVzKTtcbiAgICAgIH0pO1xuICAgICAgUENvcmUuZ2V0QXNzZXRMb2FkZXIoKS5nZXRMb2FkZXIoXCJjb21wb25lbnQtbG9hZGVyXCIpKFtcIkFjdGl2aXR5XCJdKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gdXNlQ2FsbGJhY2soKGZpbGUpID0+IHtcbiAgICAgIHJldHVybiAoeyBsb2FkZWQsIHRvdGFsIH0pID0+IHtcbiAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGguZmxvb3IoKGxvYWRlZCAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHNldEF0dGFjaG1lbnRzKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQubWFwKChjdXJyRmlsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJGaWxlLm5hbWUgPT09IGZpbGUubmFtZSA/IGZpbGUgOiBjdXJyRmlsZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IHVzZUNhbGxiYWNrKChpc0ZldGNoQ2FuY2VsZWQsIGZpbGUpID0+IHtcbiAgICAgIHJldHVybiAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKCFpc0ZldGNoQ2FuY2VsZWQoZXJyb3IpKSB7XG4gICAgICAgICAgbGV0IGxvY2FsaXplZFZhbHVlID0gXCJVcGxvYWQgZmFpbGVkXCI7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UgJiZcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEgJiZcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JEZXRhaWxzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsb2NhbGl6ZWRWYWx1ZSA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JEZXRhaWxzWzBdLmxvY2FsaXplZFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgZmlsZS5wcm9ncmVzcztcbiAgICAgICAgICBzZXRBdHRhY2htZW50cygoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQubWFwKChjdXJyRmlsZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY3VyckZpbGUubmFtZSA9PT0gZmlsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY3VyckZpbGUubWV0YSA9IGxvY2FsaXplZFZhbHVlO1xuICAgICAgICAgICAgICAgIGN1cnJGaWxlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY3VyckZpbGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlcnJvci5pc0hhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBwb3N0Q29tbWVudCA9ICh7IHZhbHVlOiBtZXNzYWdlLCBjbGVhciB9KSA9PiB7XG4gICAgICBjb25zdCBhdHRhY2htZW50SURzID0gW107XG4gICAgICBjb25zdCBhdHRhY2htZW50VXRpbHMgPSBQQ29yZS5nZXRBdHRhY2htZW50VXRpbHMoKTtcbiAgICAgIGlmIChhdHRhY2htZW50cyAmJiAhIWF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgICBhdHRhY2htZW50c1xuICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+ICFmaWxlLmVycm9yKVxuICAgICAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50VXRpbHNcbiAgICAgICAgICAgICAgLnVwbG9hZEF0dGFjaG1lbnQoZmlsZSwgb25VcGxvYWRQcm9ncmVzcywgZXJyb3JIYW5kbGVyKVxuICAgICAgICAgICAgICAudGhlbigoZmlsZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIElEOiBmaWxlUmVzcG9uc2UuZGF0YS5JRFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudElEcy5wdXNoKGZpbGVDb25maWcpO1xuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPT09IGF0dGFjaG1lbnRJRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjbGVhcigpO1xuICAgICAgICAgICAgICAgICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3N0TWVzc2FnZSh2YWx1ZSwgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSk7XG4gICAgICAgIGNsZWFyKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgICovXG5cbiAgICAvKiBPbiBzZWFyY2ggaXMgY2FsbGVkIHdoZW4gQCBjaGFyYWN0ZXIgaXMgZW50ZXJlZCBhbmQgd2lsbCBkaXNwbGF5IHRoZSBtZW50aW9uICovXG5cbiAgICAvKlxuICAgIGNvbnN0IG9uU2VhcmNoID0gZGVib3VuY2UoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtZW50aW9uXCIpIHtcbiAgICAgICAgZ2V0TWVudGlvblN1Z2dlc3Rpb25zKHtcbiAgICAgICAgICBwdWxzZUNvbnRleHQ6IHZhbHVlLFxuICAgICAgICAgIHNlYXJjaEZvcjogZXZlbnQuc2VhcmNoXG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIHNldE1lbnRpb25SZXN1bHRzKHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0VGFnU3VnZ2VzdGlvbnMoe1xuICAgICAgICAgIHNlYXJjaEZvcjogZXZlbnQuc2VhcmNoXG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIHNldFRhZ1Jlc3VsdHMocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgMTUwKTtcblxuICAgIGNvbnN0IHVzZXJOYW1lID0gZ2V0UENvbm5lY3QoKS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICBjb25zdCBpbWFnZUtleSA9IGdldFBDb25uZWN0KCkuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJbWFnZUluc0tleSgpO1xuXG4gICAgY29uc3Qgb25GaWxlc0FkZGVkID0gdXNlQ2FsbGJhY2soKG5ld2x5QWRkZWRGaWxlcykgPT4ge1xuICAgICAgc2V0QXR0YWNobWVudHMoKGN1cnJlbnQpID0+IFtcbiAgICAgICAgLi4ubmV3bHlBZGRlZEZpbGVzLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVNYXhTaXplKGZpbGUsIDUpKSB7XG4gICAgICAgICAgICBmaWxlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpbGUubWV0YSA9IFwiRmlsZSBpcyB0b28gYmlnLiBNYXggYWxsb3dlZCBzaXplIGlzIDVNQi5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsZS5pY29uID0gZ2V0SWNvbkZyb21GaWxlVHlwZShmaWxlLnR5cGUpO1xuICAgICAgICAgIGZpbGUub25EZWxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBzZXRBdHRhY2htZW50cygoYykgPT4gYy5maWx0ZXIoKGYpID0+IGYubmFtZSAhPT0gZmlsZS5uYW1lKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmN1cnJlbnRcbiAgICAgIF0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG9uRmlsdGVyQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZmlsdGVySUQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSBbLi4uZmVlZEZpbHRlcnNdO1xuICAgICAgICBjb25zdCBmaWx0ZXJUb1VwZGF0ZSA9IHVwZGF0ZWRGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5pZCA9PT0gZmlsdGVySURcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyVG9VcGRhdGUub24gPSAhZmlsdGVyVG9VcGRhdGUub247XG4gICAgICAgIGlmIChmaWx0ZXJJRCA9PT0gXCJBbGxcIilcbiAgICAgICAgICB1cGRhdGVkRmlsdGVycy5mb3JFYWNoKChmZWVkRmlsdGVyKSA9PiB7XG4gICAgICAgICAgICBmZWVkRmlsdGVyLm9uID0gZmlsdGVyVG9VcGRhdGUub247XG4gICAgICAgICAgfSk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLm9uID09PSBmYWxzZSAmJiBmZWVkSXRlbS5pZCAhPT0gXCJBbGxcIlxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZpbmQoKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5pZCA9PT0gXCJBbGxcIikub24gPSBmYWxzZTtcbiAgICAgICAgZWxzZSB1cGRhdGVkRmlsdGVycy5maW5kKChmZWVkSXRlbSkgPT4gZmVlZEl0ZW0uaWQgPT09IFwiQWxsXCIpLm9uID0gdHJ1ZTtcbiAgICAgICAgc2V0RmVlZEZpbHRlcnModXBkYXRlZEZpbHRlcnMpO1xuICAgICAgICBmZXRjaE1lc3NhZ2VzKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGZlZWRJRCxcbiAgICAgICAgICBmZWVkQ2xhc3MsXG4gICAgICAgICAgZmVlZEZpbHRlcnMsXG4gICAgICAgICAgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlLmN1cnJlbnRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBmZWVkSUQsXG4gICAgICAgIGZlZWRDbGFzcyxcbiAgICAgICAgZmVlZEZpbHRlcnMsXG4gICAgICAgIGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZSxcbiAgICAgICAgZmV0Y2hNZXNzYWdlc1xuICAgICAgXVxuICAgICk7XG5cbiAgICAqL1xuXG4gICAgLy8gc2V0IHVwIHN2ZyBpbWFnZXNcbiAgICB0aGlzLnN2Z0NvbW1lbnQkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnY2hhdCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgICB0aGlzLnN2Z0xpa2UkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygndGh1bWJzLXVwJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgIHRoaXMuc3ZnTGlrZWRCeU1lJCA9IHRoaXMudXRpbHMuZ2V0SW1hZ2VTcmMoJ3RodW1icy11cC1zb2xpZCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgICB0aGlzLnN2Z1NlbmQkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnc2VuZCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbikge1xuICAgICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxsYmFjayBwYXNzZWQgd2hlbiBzdWJzY3JpYmluZyB0byBzdG9yZSBjaGFuZ2VcbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICBjb25zdCBiTG9nZ2luZyA9IGZhbHNlO1xuICAgIGlmIChiTG9nZ2luZykge1xuICAgICAgLy8gY29uc29sZS5sb2coIGBpbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gb25TdGF0ZUNoYW5nZWAgKTtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgIH1cbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICBjb25zdCBiVXBkYXRlU2VsZiA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSh0aGlzKTtcbiAgICAvLyBjb25zb2xlLmxvZyggYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBzaG91bGRDb21wb25lbnRVcGRhdGU6ICR7YlVwZGF0ZVNlbGZ9YCk7XG5cbiAgICAvLyBPTkxZIGNhbGwgdXBkYXRlU2VsZiB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZVxuICAgIC8vICAgIEFORCByZW1vdmluZyB0aGUgXCJnYXRlXCIgdGhhdCB3YXMgcHV0IHRoZXJlIHNpbmNlIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICAgIC8vICAgICAgc2hvdWxkIGJlIHRoZSByZWFsIFwiZ2F0ZVwiXG4gICAgaWYgKGJVcGRhdGVTZWxmKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3UHVsc2VEYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpLnB1bHNlO1xuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3UHVsc2VEYXRhLCB0aGlzLnB1bHNlRGF0YSkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wdWxzZURhdGEgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KCkucHVsc2U7XG4gIH1cblxuICB1cGRhdGVTZWxmKCkge1xuICAgIHRoaXMuZ2V0TWVzc2FnZURhdGEoKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VEYXRhKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VJRHMgPSAodGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSBhcyBhbnkpLm1lc3NhZ2VJRHM7XG4gICAgY29uc3QgdXNlck5hbWUgPSAodGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSBhcyBhbnkpLmN1cnJlbnRVc2VyO1xuICAgIGNvbnN0IGltYWdlS2V5ID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoJ09wZXJhdG9ySUQucHlJbWFnZUluc0tleScpO1xuXG4gICAgY29uc3Qgb0RhdGE6IGFueSA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKTtcblxuICAgIGlmIChtZXNzYWdlSURzICYmIG1lc3NhZ2VJRHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wdWxzZU1lc3NhZ2VzJCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0RhdGEucHVsc2UubWVzc2FnZXMpKTtcblxuICAgICAgLy8gY29udmVydCB0byBqdXN0IGFuIGFycmF5IG9mIG9iamVjdHNcbiAgICAgIHRoaXMucHVsc2VNZXNzYWdlcyQgPSB0aGlzLmNvbnZlcnRUb0FycmF5KHRoaXMucHVsc2VNZXNzYWdlcyQpO1xuXG4gICAgICAvLyBjcmVhdGUgYSBjb3B5LCBzbyB3ZSBjYW4gbW9kaWZ5XG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gdGhpcy5hcHBlbmRQdWxzZU1lc3NhZ2UodGhpcy5wdWxzZU1lc3NhZ2VzJCk7XG5cbiAgICAgIC8vIG1vc3QgcmVjZW50IG9uIHRvcFxuICAgICAgdGhpcy5wdWxzZU1lc3NhZ2VzJCA9IHRoaXMucHVsc2VNZXNzYWdlcyQuc29ydCgoYSwgYikgPT4gKGEudXBkYXRlVGltZVVUQyA8IGIudXBkYXRlVGltZVVUQyA/IDEgOiAtMSkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRUb0FycmF5KG1lc3NhZ2VzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBhck1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJNZXNzYWdlcy5wdXNoKG1lc3NhZ2VzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJNZXNzYWdlcztcbiAgfVxuXG4gIGFwcGVuZFB1bHNlTWVzc2FnZShtZXNzYWdlczogYW55W10pOiBhbnlbXSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuICAgICAgY29uc3QgcG9zdGVkVGltZSA9IG1lc3NhZ2UucG9zdGVkVGltZTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUaW1lID0gbWVzc2FnZS51cGRhdGVkVGltZTtcblxuICAgICAgdGhpcy5zaG93UmVwbHlDb21tZW50JFttZXNzYWdlLklEXSA9IGZhbHNlO1xuXG4gICAgICBtZXNzYWdlLmRpc3BsYXlQb3N0ZWRUaW1lID0gdGhpcy51dGlscy5nZW5lcmF0ZURhdGVUaW1lKHBvc3RlZFRpbWUsICdEYXRlVGltZS1TaW5jZScpO1xuXG4gICAgICAvLyBmb3Igc29ydGluZyBsYXN0ZWQgdXBkYXRlXG4gICAgICBpZiAodXBkYXRlZFRpbWUgIT0gbnVsbCkge1xuICAgICAgICBtZXNzYWdlLnVwZGF0ZVRpbWVVVEMgPSBuZXcgRGF0ZSh1cGRhdGVkVGltZSkuZ2V0VGltZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZS51cGRhdGVUaW1lVVRDID0gbmV3IERhdGUocG9zdGVkVGltZSkuZ2V0VGltZSgpO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeSA9IG1lc3NhZ2UucG9zdGVkQnlVc2VyLm5hbWU7XG4gICAgICBtZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzID0gdGhpcy51dGlscy5nZXRJbml0aWFscyhtZXNzYWdlLnBvc3RlZEJ5VXNlci5uYW1lKTtcblxuICAgICAgLy8gaWYgZGlkbid0IGJyZWFrLCB0aGVuIGxvb2sgYXQgdGhlIHJlcGxpZXNcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWVzc2FnZS5yZXBsaWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHJlcGx5ID0gbWVzc2FnZS5yZXBsaWVzW2pdO1xuXG4gICAgICAgIGNvbnN0IHJlcGx5UG9zdGVkVGltZSA9IHJlcGx5LnBvc3RlZFRpbWU7XG4gICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRUaW1lID0gdGhpcy51dGlscy5nZW5lcmF0ZURhdGVUaW1lKHJlcGx5UG9zdGVkVGltZSwgJ0RhdGVUaW1lLVNpbmNlJyk7XG5cbiAgICAgICAgLy8gbGV0IG9SZXBseVVzZXIgPSB0aGlzLnVzZXJEYXRhLmdldChyZXBseS5wb3N0ZWRCeVVzZXIpO1xuICAgICAgICBjb25zdCBvUmVwbHlVc2VyID0gcmVwbHkucG9zdGVkQnlVc2VyO1xuXG4gICAgICAgIGlmIChvUmVwbHlVc2VyKSB7XG4gICAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZEJ5ID0gb1JlcGx5VXNlci5uYW1lO1xuICAgICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzID0gdGhpcy51dGlscy5nZXRJbml0aWFscyhvUmVwbHlVc2VyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBmb3JcblxuICAgIHJldHVybiBtZXNzYWdlcztcbiAgfVxuXG4gIHVwZGF0ZU1lc3NhZ2VzV2l0aE9wZXJhdG9ycygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHVsc2VNZXNzYWdlcyQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnB1bHNlTWVzc2FnZXMkW2ldO1xuXG4gICAgICBjb25zdCBwb3N0ZWRUaW1lID0gbWVzc2FnZS5wb3N0ZWRUaW1lO1xuXG4gICAgICB0aGlzLnNob3dSZXBseUNvbW1lbnQkW21lc3NhZ2UuSURdID0gZmFsc2U7XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocG9zdGVkVGltZSwgJ0RhdGVUaW1lLVNpbmNlJyk7XG5cbiAgICAgIGNvbnN0IG9Vc2VyID0gdGhpcy51c2VyRGF0YS5nZXQobWVzc2FnZS5wb3N0ZWRCeSk7XG5cbiAgICAgIGlmIChvVXNlcikge1xuICAgICAgICBtZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeSA9IG9Vc2VyLnB5VXNlck5hbWU7XG4gICAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG9Vc2VyLnB5VXNlck5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb1VzZXJQYXJhbXMgPSB7XG4gICAgICAgICAgT3BlcmF0b3JJZDogbWVzc2FnZS5wb3N0ZWRCeVxuICAgICAgICB9O1xuICAgICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCBvVXNlclBhcmFtc1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBkaWRuJ3QgYnJlYWssIHRoZW4gbG9vayBhdCB0aGUgcmVwbGllc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtZXNzYWdlLnJlcGxpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgcmVwbHkgPSBtZXNzYWdlLnJlcGxpZXNbal07XG5cbiAgICAgICAgY29uc3QgcmVwbHlQb3N0ZWRUaW1lID0gcmVwbHkucG9zdGVkVGltZTtcbiAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocmVwbHlQb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgICAvLyBsZXQgb1JlcGx5VXNlciA9IHRoaXMudXNlckRhdGEuZ2V0KHJlcGx5LnBvc3RlZEJ5VXNlcik7XG4gICAgICAgIGNvbnN0IG9SZXBseVVzZXIgPSByZXBseS5wb3N0ZWRCeVVzZXI7XG5cbiAgICAgICAgaWYgKG9SZXBseVVzZXIpIHtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnkgPSBvUmVwbHlVc2VyLm5hbWU7XG4gICAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG9SZXBseVVzZXIubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGZvclxuICB9XG5cbiAgdXBkYXRlQ3VycmVudFVzZXJOYW1lKHNVc2VyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkID0gdGhpcy51dGlscy5nZXRJbml0aWFscyhzVXNlcik7XG4gICAgdGhpcy5jdXJyZW50VXNlck5hbWUkID0gc1VzZXI7XG4gIH1cblxuICBwb3N0Q2xpY2soKSB7XG4gICAgLy8gZG9uJ3Qgc2VuZCBhIGJsYW5rIG1lc3NhZ2VcbiAgICBpZiAodGhpcy5wdWxzZUNvbnZlcnNhdGlvbiAmJiB0aGlzLnB1bHNlQ29udmVyc2F0aW9uICE9ICcnKSB7XG4gICAgICAvLyBsZXQgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgLy8gICBjb250ZXh0TmFtZSA6IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCksXG4gICAgICAvLyAgIG1lc3NhZ2U6IHRoaXMucHVsc2VDb252ZXJzYXRpb24sXG4gICAgICAvLyAgIHB1bHNlQ29udGV4dDogdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCIucHpJbnNLZXlcIilcbiAgICAgIC8vIH07XG5cbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgLy8gdXNlZCB0byBiZTogdGhpcy4vKmZlZWRBUEkuKi9wb3N0TWVzc2FnZShwdWxzZU1lc3NhZ2UpO1xuICAgICAgLy8gV2l0aCBsYXRlc3QgRmVlZEFQSSwgdGhlIDFzdCBhcmcgc2hvdWxkIGJlIGdldENvbmZpZ1Byb3BzKCkudmFsdWVcblxuICAgICAgLy8gSWYgZmVlZEFQSSBpcyBkZWZpbmVkIHRoZW4gb25seSBwb3N0IG1lc3NhZ2VcbiAgICAgIGlmICh0aGlzLmZlZWRBUEkpIHtcbiAgICAgICAgdGhpcy4vKiBmZWVkQVBJLiAqLyBwb3N0TWVzc2FnZSgodGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSBhcyBhbnkpLnZhbHVlLCB0aGlzLnB1bHNlQ29udmVyc2F0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiV2UgZG9uJ3Qgc3VwcG9ydCBQdWxzZSB5ZXRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2xlYXIgb3V0IGxvY2FsIGNvcHlcbiAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1bHNlTWVzc2FnZScpIGFzIEhUTUxFbGVtZW50IHwgYW55KS52YWx1ZSA9ICcnO1xuICAgIHRoaXMucHVsc2VDb252ZXJzYXRpb24gPSAnJztcbiAgfVxuXG4gIG1lc3NhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucHVsc2VDb252ZXJzYXRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cblxuICBsaWtlQ2xpY2sobWVzc2FnZUlEOiBzdHJpbmcsIHJNZXNzYWdlSUQ6IHN0cmluZywgYkxpa2VkQnlNZTogYm9vbGVhbiwgbGV2ZWw6IHN0cmluZykge1xuICAgIGxldCBwdWxzZU1lc3NhZ2UgPSB7fTtcblxuICAgIGlmIChsZXZlbCA9PT0gJ3RvcCcpIHtcbiAgICAgIHB1bHNlTWVzc2FnZSA9IHtcbiAgICAgICAgcHVsc2VDb250ZXh0OiByTWVzc2FnZUlELFxuICAgICAgICBpc1JlcGx5OiBudWxsLFxuICAgICAgICBjb250ZXh0TmFtZTogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgICAgbGlrZWRCeTogYkxpa2VkQnlNZSxcbiAgICAgICAgbWVzc2FnZUlEXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwdWxzZU1lc3NhZ2UgPSB7XG4gICAgICAgIHB1bHNlQ29udGV4dDogck1lc3NhZ2VJRCxcbiAgICAgICAgaXNSZXBseTogdHJ1ZSxcbiAgICAgICAgY29udGV4dE5hbWU6IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCksXG4gICAgICAgIGxpa2VkQnk6IGJMaWtlZEJ5TWUsXG4gICAgICAgIG1lc3NhZ2VJRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLi8qIGZlZWRBUEkuICovIGxpa2VNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gIH1cblxuICBjb21tZW50Q2xpY2sobWVzc2FnZUlEKSB7XG4gICAgLy8gaXRlcmF0b3IgdGhyb3VnaCBtZXNzYWdlcywgZmluZCBtYXRjaCwgdHVybiBvbiBjb21tZW50IGVudHJ5XG4gICAgY29uc3QgZm91bmRNZXNzYWdlID0gdGhpcy5wdWxzZU1lc3NhZ2VzJC5maW5kKG1lc3NhZ2UgPT4gbWVzc2FnZS5JRCA9PT0gbWVzc2FnZUlEKTtcblxuICAgIGlmIChmb3VuZE1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc2hvd1JlcGx5Q29tbWVudCRbZm91bmRNZXNzYWdlLklEXSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwb3N0Q29tbWVudENsaWNrKG1lc3NhZ2VJRCkge1xuICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgaWYgKHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0gJiYgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSAhPSAnJykge1xuICAgICAgLy8gbGV0IHB1bHNlTWVzc2FnZSA9IHtcbiAgICAgIC8vICAgY29udGV4dE5hbWUgOiB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgLy8gICBtZXNzYWdlOiB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdLFxuICAgICAgLy8gICBwdWxzZUNvbnRleHQ6IG1lc3NhZ2VJRCxcbiAgICAgIC8vICAgcmVwbHk6IHRydWVcbiAgICAgIC8vIH07XG5cbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgLy8gVXNlZCB0byBiZTogdGhpcy4vKmZlZWRBUEkuKi9wb3N0TWVzc2FnZShwdWxzZU1lc3NhZ2UpO1xuICAgICAgLy8gIExhdGVzdCB1cGRhdGUgdG8gQVBJIGhhcyBjaGFuZ2VkIGFuZCB0aGUgcG9zdE1lc3NhZ2UgYWN0dWFsbHkgZ2V0c1xuICAgICAgLy8gIHRoZSBwdWxzZSBjb250ZXh0Li4uXG4gICAgICAvLyB1c2VkIHRvIHVzZTogY29udGV4dE5hbWVcbiAgICAgIC8vIG5ldyBGZWVkQVBJIHdhbnRzIGFyZ3MgdG8gYmUgbWVzc2FnZUlELCB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdLCB0cnVlIChzaW5jZSB0aGlzIGlzIGEgcmVwbHkpXG4gICAgICB0aGlzLi8qIGZlZWRBUEkuICovIHBvc3RNZXNzYWdlKG1lc3NhZ2VJRCwgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSwgdHJ1ZSk7XG5cbiAgICAgIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0gPSAnJztcbiAgICB9XG4gIH1cblxuICBuZXdDb21tZW50Q2hhbmdlKGV2ZW50LCBtZXNzYWdlSUQpIHtcbiAgICB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiPlxuICAgIDxoMz5QdWxzZTwvaDM+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICA8YnIgLz5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstYXZhdGFyLWJpZ1wiPnt7IHRoaXMuY3VycmVudFVzZXJJbml0aWFscyQgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInBzZGstZnVsbC13aWR0aFwiPlxuICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgcm93cz1cIjVcIiBpZD1cInB1bHNlTWVzc2FnZVwiIHBsYWNlaG9sZGVyPVwiU3RhcnQgYSBjb252ZXJzYXRpb25cIiB0eXBlPVwidGV4dFwiIChjaGFuZ2UpPVwibWVzc2FnZUNoYW5nZSgkZXZlbnQpXCI+PC90ZXh0YXJlYT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxtYXQtZ3JpZC1saXN0IGNvbHM9XCIyXCIgcm93SGVpZ2h0PVwiNi4yNXJlbVwiPlxuICA8bWF0LWdyaWQtdGlsZT4gPC9tYXQtZ3JpZC10aWxlPlxuICA8bWF0LWdyaWQtdGlsZT5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJwb3N0Q2xpY2soKVwiPlBvc3Q8L2J1dHRvbj5cbiAgPC9tYXQtZ3JpZC10aWxlPlxuPC9tYXQtZ3JpZC1saXN0PlxuXG48ZGl2ICpuZ0Zvcj1cImxldCBwdWxzZU1lc3NhZ2Ugb2YgcHVsc2VNZXNzYWdlcyQ7IGxldCBvZGQgPSBvZGRcIiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnRcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJvZGQgPyAnd2hpdGUnIDogJyNlZWVlZWUnXCI+XG4gIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgPGJyIC8+XG4gIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstYXZhdGFyLWJpZ1wiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyB9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtYnlcIj57eyBwdWxzZU1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5IH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLXRpbWVcIj57eyBwdWxzZU1lc3NhZ2UuZGlzcGxheVBvc3RlZFRpbWUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtdGV4dFwiPnt7IHB1bHNlTWVzc2FnZS5tZXNzYWdlIH19PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtYWN0aW9uc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtYWN0aW9uLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImNvbW1lbnRDbGljayhwdWxzZU1lc3NhZ2UuSUQpXCI+XG4gICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWNvbW1lbnQtc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdDb21tZW50JCB9fVwiIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1saWtlLWxhYmVsXCJcbiAgICAgICAgICA+Q29tbWVudCA8c3BhbiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ucmVwbGllcy5sZW5ndGggPiAwXCI+IHwge3sgcHVsc2VNZXNzYWdlLnJlcGxpZXMubGVuZ3RoIH19PC9zcGFuPjwvbGFiZWxcbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb24tbGlrZVwiPlxuICAgICAgPGRpdiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ubGlrZUNvdW50OyBlbHNlIG5vdExpa2VkXCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWxzZU1lc3NhZ2U/Lmxpa2VkQnlNZSA9PSAndHJ1ZSdcIiBtYXQtYnV0dG9uIChjbGljayk9XCJsaWtlQ2xpY2socHVsc2VNZXNzYWdlLklELCBwdWxzZU1lc3NhZ2UuSUQsIHRydWUsICd0b3AnKVwiPlxuICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicHNkay1pY29uLWxpa2VkLWJ5LW1lXCIgc3ZnSWNvbj1cInRodW1iLXVwXCIgbWFzdExpc3RJY29uID48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlZC1ieS1tZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2VkQnlNZSQgfX1cIiAvPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1saWtlLWxhYmVsXCI+TGlrZSB8IHt7IHB1bHNlTWVzc2FnZS5saWtlQ291bnQgfX08L2xhYmVsPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ubGlrZWRCeU1lICE9ICd0cnVlJ1wiIG1hdC1idXR0b24gKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHB1bHNlTWVzc2FnZS5JRCwgZmFsc2UsICd0b3AnKVwiPlxuICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicHNkay1pY29uXCIgc3ZnSWNvbj1cInRodW1iLXVwLW91dGxpbmVcIiBtYXN0TGlzdEljb24gPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2Utc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlJCB9fVwiIC8+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIj5MaWtlIHwge3sgcHVsc2VNZXNzYWdlLmxpa2VDb3VudCB9fTwvbGFiZWw+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI25vdExpa2VkPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHB1bHNlTWVzc2FnZS5JRCwgZmFsc2UsICd0b3AnKVwiPlxuICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicHNkay1pY29uXCIgc3ZnSWNvbj1cInRodW1iLXVwLW91dGxpbmVcIiBtYXN0TGlzdEljb24gPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2Utc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlJCB9fVwiIC8+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIj5MaWtlPC9sYWJlbD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5yZXBsaWVzXCIgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5XCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcmVwbHlNZXNzYWdlIG9mIHB1bHNlTWVzc2FnZS5yZXBsaWVzXCIgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWFsaWduXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICA8YnIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLWF2YXRhclwiPnt7IHJlcGx5TWVzc2FnZS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1ieVwiPnt7IHJlcGx5TWVzc2FnZS5kaXNwbGF5UG9zdGVkQnkgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbWVzc2FnZVwiPnt7IHJlcGx5TWVzc2FnZS5tZXNzYWdlIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjb21tZW50Q2xpY2socHVsc2VNZXNzYWdlLklEKVwiIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1jb21tZW50XCI+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstY29tbWVudC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0NvbW1lbnQkIH19XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyZXBseU1lc3NhZ2U/Lmxpa2VDb3VudDsgZWxzZSByZXBseU5vdExpa2VkXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJyZXBseU1lc3NhZ2U/Lmxpa2VkQnlNZSA9PT0gJ3RydWUnXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJsaWtlQ2xpY2socHVsc2VNZXNzYWdlLklELCByZXBseU1lc3NhZ2UuSUQsIHRydWUsICdyZXBseScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1saWtlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlZC1ieS1tZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2VkQnlNZSQgfX1cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwicmVwbHlNZXNzYWdlPy5saWtlZEJ5TWUgIT0gJ3RydWUnXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJsaWtlQ2xpY2socHVsc2VNZXNzYWdlLklELCByZXBseU1lc3NhZ2UuSUQsIGZhbHNlLCAncmVwbHknKVwiXG4gICAgICAgICAgICBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbGlrZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2UtbGFiZWxcIj5MaWtlIHwge3sgcmVwbHlNZXNzYWdlLmxpa2VDb3VudCB9fTwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlcGx5Tm90TGlrZWQ+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJyZXBseU1lc3NhZ2U/Lmxpa2VkQnlNZSAhPSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgZmFsc2UsICdyZXBseScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1saWtlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZSQgfX1cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LXRpbWVcIj57eyByZXBseU1lc3NhZ2UuZGlzcGxheVBvc3RlZFRpbWUgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJyIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1JlcGx5Q29tbWVudCRbcHVsc2VNZXNzYWdlLklEXSA9PSB0cnVlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICA8YnIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWNvbW1lbnQtZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstYXZhdGFyXCI+e3sgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCB9fTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJwc2RrLWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICByb3dzPVwiNVwiXG4gICAgICAgICAgICBpZD1cInB1bHNlTWVzc2FnZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBhIGNvbW1lbnRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJuZXdDb21tZW50Q2hhbmdlKCRldmVudCwgcHVsc2VNZXNzYWdlLklEKVwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwicG9zdENvbW1lbnRDbGljayhwdWxzZU1lc3NhZ2UuSUQpXCIgY2xhc3M9XCJwc2RrLXB1bHNlLWNvbW1lbnQtcG9zdFwiPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLXNlbmQtc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdTZW5kJCB9fVwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8YnIgLz5cbjwvZGl2PlxuIl19
|
|
521
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3dpZGdldC9mZWVkLWNvbnRhaW5lci9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L2ZlZWQtY29udGFpbmVyL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDakMsWUFDVSxlQUF1QyxFQUN2QyxLQUF3QixFQUN4QixLQUFZO1FBRlosb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFyQ3RCLDRCQUE0QjtRQUM1Qix3QkFBbUIsR0FBd0IsRUFB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QXlJQSx5aEZEdEhZLFlBQVksK1BBQUUsa0JBQWtCLHlPQUFFLGNBQWMsMFdBQUUsaUJBQWlCLGlUQUFFLGVBQWU7OzRGQUVuRixzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsS0FBSyxDQUFDLGNBQ04sSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUM7K0lBR3RGLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEdyaWRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHsgQW5ndWxhclBDb25uZWN0RGF0YSwgQW5ndWxhclBDb25uZWN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19icmlkZ2UvYW5ndWxhci1wY29ubmVjdCc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uL19oZWxwZXJzL3V0aWxzJztcblxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IGFueTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZlZWQtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmVlZC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbVXRpbHNdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRHcmlkTGlzdE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBGZWVkQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICAvLyBVc2VkIHdpdGggQW5ndWxhclBDb25uZWN0XG4gIGFuZ3VsYXJQQ29ubmVjdERhdGE6IEFuZ3VsYXJQQ29ubmVjdERhdGEgPSB7fTtcblxuICB1c2VyTmFtZSQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaW1hZ2VLZXkkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY3VycmVudFVzZXJJbml0aWFscyQ6IHN0cmluZztcbiAgY3VycmVudFVzZXJOYW1lJDogc3RyaW5nO1xuXG4gIHB1bHNlTWVzc2FnZXMkOiBhbnlbXTtcbiAgc2hvd1JlcGx5Q29tbWVudCQ6IE9iamVjdCA9IHt9O1xuXG4gIHN2Z0NvbW1lbnQkOiBzdHJpbmc7XG4gIHN2Z0xpa2UkOiBzdHJpbmc7XG4gIHN2Z0xpa2VkQnlNZSQ6IHN0cmluZztcbiAgc3ZnU2VuZCQ6IHN0cmluZztcblxuICBwdWxzZUNvbnZlcnNhdGlvbjogc3RyaW5nO1xuICB1c2VyRGF0YTogTWFwPGFueSwgYW55PiA9IG5ldyBNYXAoKTtcblxuICBwdWxzZUNvbW1lbnQ6IE9iamVjdCA9IHt9O1xuXG4gIC8vIGZ1bmN0aW9uc1xuICBhY3Rpb25zQVBJOiBhbnk7XG4gIC8vIHVudGlsIEZlZWRBUEkgbW92ZWQgYmFjayB0byBQQ29yZSwgd2UgYWNjZXNzIHRoZSBtZXRob2RzIGRpcmVjdGx5IChzZWUgbmdJbml0KVxuICBmZWVkQVBJOiBhbnk7XG5cbiAgcHVsc2VEYXRhOiBhbnk7XG5cbiAgLy8gVGVtcG9yYXJ5IHdheSB0byB1c2UgRmVlZEFwaS4uLlxuICBmZXRjaE1lc3NhZ2VzOiBhbnk7XG4gIGxpa2VNZXNzYWdlOiBhbnk7XG4gIHBvc3RNZXNzYWdlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbmd1bGFyUENvbm5lY3Q6IEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHNcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXNlck5hbWUkID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JOYW1lKCk7XG4gICAgdGhpcy5pbWFnZUtleSQgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvckltYWdlSW5zS2V5KCk7XG4gICAgdGhpcy51cGRhdGVDdXJyZW50VXNlck5hbWUodGhpcy51c2VyTmFtZSQgPz8gJycpO1xuXG4gICAgLy8gRmlyc3QgdGhpbmcgaW4gaW5pdGlhbGl6YXRpb24gaXMgcmVnaXN0ZXJpbmcgYW5kIHN1YnNjcmliaW5nIHRvIHRoZSBBbmd1bGFyUENvbm5lY3Qgc2VydmljZVxuICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YSA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KHRoaXMsIHRoaXMub25TdGF0ZUNoYW5nZSk7XG5cbiAgICAvLyBUaGVuLCBjb250aW51ZSBvbiB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uXG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICAvLyBjb25zdCB7XG4gICAgLy8gICBmZXRjaE1lc3NhZ2VzLFxuICAgIC8vICAgbGlrZU1lc3NhZ2UsXG4gICAgLy8gICBwb3N0TWVzc2FnZVxuICAgIC8vIH0gPSBGZWVkQXBpKHRoaXMucENvbm4kKTtcbiAgICAvLyB0aGlzLmZldGNoTWVzc2FnZXMgPSBmZXRjaE1lc3NhZ2VzO1xuICAgIC8vIHRoaXMubGlrZU1lc3NhZ2UgPSBsaWtlTWVzc2FnZTtcbiAgICAvLyB0aGlzLnBvc3RNZXNzYWdlID0gcG9zdE1lc3NhZ2U7XG5cbiAgICAvLyAvLyB0aGlzLnVzZXJOYW1lJCA9IHRoaXMucENvbm4kLmdldFZhbHVlKFwicHhSZXF1ZXN0b3IucHhVc2VyTmFtZVwiKTtcbiAgICAvLyAvLyB0aGlzLmltYWdlS2V5JCA9IHRoaXMucENvbm4kLmdldFZhbHVlKFwiT3BlcmF0b3JJRC5weUltYWdlSW5zS2V5XCIpO1xuXG4gICAgLy8gLy90aGlzLnVzZXJOYW1lJCA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKVtcIkRfcHhFbnZpcm9ubWVudEluZm9cIl0ucHhPcGVyYXRvci5weVVzZXJOYW1lO1xuICAgIC8vIC8vdGhpcy5pbWFnZUtleSQgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KClbXCJEX3B4RW52aXJvbm1lbnRJbmZvXCJdLnB4T3BlcmF0b3IucHlJbWFnZUluc0tleTtcbiAgICAvLyB0aGlzLnVzZXJOYW1lJCA9IHRoaXMucENvbm4kLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9yTmFtZSgpO1xuICAgIC8vIHRoaXMuaW1hZ2VLZXkkID0gdGhpcy5wQ29ubiQuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJbWFnZUluc0tleSgpO1xuXG4gICAgLy8gdGhpcy5hY3Rpb25zQVBJID0gdGhpcy5wQ29ubiQuZ2V0QWN0aW9uc0FwaSgpO1xuXG4gICAgLy8gbGV0IG93bmVyID0gdGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKS52YWx1ZTtcblxuICAgIC8vIC8vIHdpdGggbmV3IEZlZWRBUEk6IG93bmVyIGlzIHRoZSBwcm9wZXIgdmFsdWUgdG8gcGFzcyBpblxuICAgIC8vIC8vICBhbmQgbm8gbG9uZ2VyIHRha2VzIDJuZCBhcmd1bWVudFxuICAgIC8vIHRoaXMuLypmZWVkQVBJLiovZmV0Y2hNZXNzYWdlcyhvd25lciAvKiwgdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSovKTtcblxuICAgIC8vIGNvbnN0IGNvbmZpZ1Byb3BzOiBhbnkgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpO1xuXG4gICAgLy8gY29uc3QgeyBtZXNzYWdlSURzIH0gPSBjb25maWdQcm9wcztcblxuICAgIC8vIGNvbnN0IHsgZmV0Y2hNZXNzYWdlcywgcG9zdE1lc3NhZ2UsIGdldE1lbnRpb25TdWdnZXN0aW9ucywgZ2V0VGFnU3VnZ2VzdGlvbnMgfSA9IEZlZWRBcGkodGhpcy5wQ29ubiQpO1xuXG4gICAgY29uc3QgYXBwTmFtZSA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldEFwcGxpY2F0aW9uTmFtZSgpO1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGxldCBmZWVkSUQgPSAnJztcbiAgICBsZXQgZmVlZENsYXNzID0gJyc7XG5cbiAgICBpZiAodGhpcy5wQ29ubiQuZ2V0Q2FzZVN1bW1hcnkoKS5JRCkge1xuICAgICAgdmFsdWUgPSB0aGlzLnBDb25uJC5nZXRDYXNlU3VtbWFyeSgpLklEO1xuICAgICAgZmVlZElEID0gJ3B5Q2FzZUZlZWQnO1xuICAgICAgZmVlZENsYXNzID0gdGhpcy5wQ29ubiQuZ2V0Q2FzZVN1bW1hcnkoKS5jb250ZW50LmNsYXNzSUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYERBVEEtUE9SVEFMICQke2FwcE5hbWV9YDtcbiAgICAgIGZlZWRJRCA9ICdweURhc2hib2FyZEZlZWQnO1xuICAgICAgZmVlZENsYXNzID0gJ0BiYXNlY2xhc3MnO1xuICAgIH1cblxuICAgIGNvbnN0IG9uVXBsb2FkUHJvZ3Jlc3MgPSAoKSA9PiB7fTtcbiAgICBjb25zdCBlcnJvckhhbmRsZXIgPSAoKSA9PiB7fTtcbiAgICBjb25zdCBhdHRhY2htZW50cyA9ICgpID0+IHt9O1xuXG4gICAgY29uc3QgcG9zdENvbW1lbnQgPSAoeyB2YWx1ZTogbWVzc2FnZSwgY2xlYXIgfSkgPT4ge1xuICAgICAgY29uc3QgYXR0YWNobWVudElEcyA9IFtdO1xuICAgICAgY29uc3QgYXR0YWNobWVudFV0aWxzID0gUENvcmUuZ2V0QXR0YWNobWVudFV0aWxzKCk7XG4gICAgICBpZiAoYXR0YWNobWVudHMgJiYgISFhdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLyogYXR0YWNobWVudHM7XG4gICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gIWZpbGUuZXJyb3IpXG4gICAgICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnRVdGlsc1xuICAgICAgICAgICAgICAudXBsb2FkQXR0YWNobWVudChmaWxlLCBvblVwbG9hZFByb2dyZXNzLCBlcnJvckhhbmRsZXIpXG4gICAgICAgICAgICAgIC50aGVuKChmaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgSUQ6IGZpbGVSZXNwb25zZS5kYXRhLklEXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50SURzLnB1c2goZmlsZUNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gYXR0YWNobWVudElEcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudElEc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgICB9KTsgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc3RNZXNzYWdlKHZhbHVlLCB0cmFuc2Zvcm1NYXJrZG93blRvTXNnKG1lc3NhZ2UpKTtcbiAgICAgICAgY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLypcblxuICAgIGNvbnN0IHsgZ2V0UENvbm5lY3QsIG1lc3NhZ2VJRHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IFttZW50aW9uUmVzdWx0cywgc2V0TWVudGlvblJlc3VsdHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFt0YWdSZXN1bHRzLCBzZXRUYWdSZXN1bHRzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZmVlZEZpbHRlcnMsIHNldEZlZWRGaWx0ZXJzXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3Qge1xuICAgICAgZmV0Y2hNZXNzYWdlcyxcbiAgICAgIHBvc3RNZXNzYWdlLFxuICAgICAgZ2V0TWVudGlvblN1Z2dlc3Rpb25zLFxuICAgICAgZ2V0VGFnU3VnZ2VzdGlvbnNcbiAgICB9ID0gRmVlZEFwaShnZXRQQ29ubmVjdCgpKTtcbiAgICBjb25zdCBhcHBOYW1lID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0QXBwbGljYXRpb25OYW1lKCk7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBsZXQgZmVlZElEID0gXCJcIjtcbiAgICBsZXQgZmVlZENsYXNzID0gXCJcIjtcbiAgICBpZiAoZ2V0UENvbm5lY3QoKS5nZXRDYXNlU3VtbWFyeSgpLklEKSB7XG4gICAgICB2YWx1ZSA9IGdldFBDb25uZWN0KCkuZ2V0Q2FzZVN1bW1hcnkoKS5JRDtcbiAgICAgIGZlZWRJRCA9IFwicHlDYXNlRmVlZFwiO1xuICAgICAgZmVlZENsYXNzID0gZ2V0UENvbm5lY3QoKS5nZXRDYXNlU3VtbWFyeSgpLmNvbnRlbnQuY2xhc3NJRDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBgREFUQS1QT1JUQUwgJCR7YXBwTmFtZX1gO1xuICAgICAgZmVlZElEID0gXCJweURhc2hib2FyZEZlZWRcIjtcbiAgICAgIGZlZWRDbGFzcyA9IFwiQGJhc2VjbGFzc1wiO1xuICAgIH1cbiAgICAvLyBGb3IgY2FuY2VsbGluZyBmZXRjaHJlcXVlc3QgZm9yIGZpbGV0cnNcbiAgICBjb25zdCBmZXRjaE1lc3NhZ2VzQ2FuY2VsVG9rZW5Tb3VyY2UgPSB1c2VSZWYoW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGZldGNoTWVzc2FnZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBmZWVkSUQsXG4gICAgICAgIGZlZWRDbGFzcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlLmN1cnJlbnRcbiAgICAgICkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHNldEZlZWRGaWx0ZXJzKHJlcyk7XG4gICAgICB9KTtcbiAgICAgIFBDb3JlLmdldEFzc2V0TG9hZGVyKCkuZ2V0TG9hZGVyKFwiY29tcG9uZW50LWxvYWRlclwiKShbXCJBY3Rpdml0eVwiXSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgb25VcGxvYWRQcm9ncmVzcyA9IHVzZUNhbGxiYWNrKChmaWxlKSA9PiB7XG4gICAgICByZXR1cm4gKHsgbG9hZGVkLCB0b3RhbCB9KSA9PiB7XG4gICAgICAgIGZpbGUucHJvZ3Jlc3MgPSBNYXRoLmZsb29yKChsb2FkZWQgLyB0b3RhbCkgKiAxMDApO1xuICAgICAgICBzZXRBdHRhY2htZW50cygoY3VycmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50Lm1hcCgoY3VyckZpbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyRmlsZS5uYW1lID09PSBmaWxlLm5hbWUgPyBmaWxlIDogY3VyckZpbGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBlcnJvckhhbmRsZXIgPSB1c2VDYWxsYmFjaygoaXNGZXRjaENhbmNlbGVkLCBmaWxlKSA9PiB7XG4gICAgICByZXR1cm4gKGVycm9yKSA9PiB7XG4gICAgICAgIGlmICghaXNGZXRjaENhbmNlbGVkKGVycm9yKSkge1xuICAgICAgICAgIGxldCBsb2NhbGl6ZWRWYWx1ZSA9IFwiVXBsb2FkIGZhaWxlZFwiO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlICYmXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yRGV0YWlsc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgbG9jYWxpemVkVmFsdWUgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yRGV0YWlsc1swXS5sb2NhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIGZpbGUucHJvZ3Jlc3M7XG4gICAgICAgICAgc2V0QXR0YWNobWVudHMoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50Lm1hcCgoY3VyckZpbGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJGaWxlLm5hbWUgPT09IGZpbGUubmFtZSkge1xuICAgICAgICAgICAgICAgIGN1cnJGaWxlLm1ldGEgPSBsb2NhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICBjdXJyRmlsZS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJGaWxlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXJyb3IuaXNIYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgcG9zdENvbW1lbnQgPSAoeyB2YWx1ZTogbWVzc2FnZSwgY2xlYXIgfSkgPT4ge1xuICAgICAgY29uc3QgYXR0YWNobWVudElEcyA9IFtdO1xuICAgICAgY29uc3QgYXR0YWNobWVudFV0aWxzID0gUENvcmUuZ2V0QXR0YWNobWVudFV0aWxzKCk7XG4gICAgICBpZiAoYXR0YWNobWVudHMgJiYgISFhdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICAgICAgYXR0YWNobWVudHNcbiAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiAhZmlsZS5lcnJvcilcbiAgICAgICAgICAubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudFV0aWxzXG4gICAgICAgICAgICAgIC51cGxvYWRBdHRhY2htZW50KGZpbGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIGVycm9ySGFuZGxlcilcbiAgICAgICAgICAgICAgLnRoZW4oKGZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBJRDogZmlsZVJlc3BvbnNlLmRhdGEuSURcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHMucHVzaChmaWxlQ29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID09PSBhdHRhY2htZW50SURzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXJrZG93blRvTXNnKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SURzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zdE1lc3NhZ2UodmFsdWUsIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSkpO1xuICAgICAgICBjbGVhcigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAqL1xuXG4gICAgLyogT24gc2VhcmNoIGlzIGNhbGxlZCB3aGVuIEAgY2hhcmFjdGVyIGlzIGVudGVyZWQgYW5kIHdpbGwgZGlzcGxheSB0aGUgbWVudGlvbiAqL1xuXG4gICAgLypcbiAgICBjb25zdCBvblNlYXJjaCA9IGRlYm91bmNlKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibWVudGlvblwiKSB7XG4gICAgICAgIGdldE1lbnRpb25TdWdnZXN0aW9ucyh7XG4gICAgICAgICAgcHVsc2VDb250ZXh0OiB2YWx1ZSxcbiAgICAgICAgICBzZWFyY2hGb3I6IGV2ZW50LnNlYXJjaFxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBzZXRNZW50aW9uUmVzdWx0cyhyZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldFRhZ1N1Z2dlc3Rpb25zKHtcbiAgICAgICAgICBzZWFyY2hGb3I6IGV2ZW50LnNlYXJjaFxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBzZXRUYWdSZXN1bHRzKHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIDE1MCk7XG5cbiAgICBjb25zdCB1c2VyTmFtZSA9IGdldFBDb25uZWN0KCkuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JOYW1lKCk7XG4gICAgY29uc3QgaW1hZ2VLZXkgPSBnZXRQQ29ubmVjdCgpLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySW1hZ2VJbnNLZXkoKTtcblxuICAgIGNvbnN0IG9uRmlsZXNBZGRlZCA9IHVzZUNhbGxiYWNrKChuZXdseUFkZGVkRmlsZXMpID0+IHtcbiAgICAgIHNldEF0dGFjaG1lbnRzKChjdXJyZW50KSA9PiBbXG4gICAgICAgIC4uLm5ld2x5QWRkZWRGaWxlcy5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlTWF4U2l6ZShmaWxlLCA1KSkge1xuICAgICAgICAgICAgZmlsZS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICBmaWxlLm1ldGEgPSBcIkZpbGUgaXMgdG9vIGJpZy4gTWF4IGFsbG93ZWQgc2l6ZSBpcyA1TUIuXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbGUuaWNvbiA9IGdldEljb25Gcm9tRmlsZVR5cGUoZmlsZS50eXBlKTtcbiAgICAgICAgICBmaWxlLm9uRGVsZXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgc2V0QXR0YWNobWVudHMoKGMpID0+IGMuZmlsdGVyKChmKSA9PiBmLm5hbWUgIT09IGZpbGUubmFtZSkpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pLFxuICAgICAgICAuLi5jdXJyZW50XG4gICAgICBdKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBvbkZpbHRlckNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGZpbHRlcklEKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gWy4uLmZlZWRGaWx0ZXJzXTtcbiAgICAgICAgY29uc3QgZmlsdGVyVG9VcGRhdGUgPSB1cGRhdGVkRmlsdGVycy5maW5kKFxuICAgICAgICAgIChmZWVkSXRlbSkgPT4gZmVlZEl0ZW0uaWQgPT09IGZpbHRlcklEXG4gICAgICAgICk7XG4gICAgICAgIGZpbHRlclRvVXBkYXRlLm9uID0gIWZpbHRlclRvVXBkYXRlLm9uO1xuICAgICAgICBpZiAoZmlsdGVySUQgPT09IFwiQWxsXCIpXG4gICAgICAgICAgdXBkYXRlZEZpbHRlcnMuZm9yRWFjaCgoZmVlZEZpbHRlcikgPT4ge1xuICAgICAgICAgICAgZmVlZEZpbHRlci5vbiA9IGZpbHRlclRvVXBkYXRlLm9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICB1cGRhdGVkRmlsdGVycy5maW5kKFxuICAgICAgICAgICAgKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5vbiA9PT0gZmFsc2UgJiYgZmVlZEl0ZW0uaWQgIT09IFwiQWxsXCJcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICB1cGRhdGVkRmlsdGVycy5maW5kKChmZWVkSXRlbSkgPT4gZmVlZEl0ZW0uaWQgPT09IFwiQWxsXCIpLm9uID0gZmFsc2U7XG4gICAgICAgIGVsc2UgdXBkYXRlZEZpbHRlcnMuZmluZCgoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLmlkID09PSBcIkFsbFwiKS5vbiA9IHRydWU7XG4gICAgICAgIHNldEZlZWRGaWx0ZXJzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgICAgICAgZmV0Y2hNZXNzYWdlcyhcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBmZWVkSUQsXG4gICAgICAgICAgZmVlZENsYXNzLFxuICAgICAgICAgIGZlZWRGaWx0ZXJzLFxuICAgICAgICAgIGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZS5jdXJyZW50XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZmVlZElELFxuICAgICAgICBmZWVkQ2xhc3MsXG4gICAgICAgIGZlZWRGaWx0ZXJzLFxuICAgICAgICBmZXRjaE1lc3NhZ2VzQ2FuY2VsVG9rZW5Tb3VyY2UsXG4gICAgICAgIGZldGNoTWVzc2FnZXNcbiAgICAgIF1cbiAgICApO1xuXG4gICAgKi9cblxuICAgIC8vIHNldCB1cCBzdmcgaW1hZ2VzXG4gICAgdGhpcy5zdmdDb21tZW50JCA9IHRoaXMudXRpbHMuZ2V0SW1hZ2VTcmMoJ2NoYXQnLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgdGhpcy5zdmdMaWtlJCA9IHRoaXMudXRpbHMuZ2V0SW1hZ2VTcmMoJ3RodW1icy11cCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgICB0aGlzLnN2Z0xpa2VkQnlNZSQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCd0aHVtYnMtdXAtc29saWQnLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgdGhpcy5zdmdTZW5kJCA9IHRoaXMudXRpbHMuZ2V0SW1hZ2VTcmMoJ3NlbmQnLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4pIHtcbiAgICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsbGJhY2sgcGFzc2VkIHdoZW4gc3Vic2NyaWJpbmcgdG8gc3RvcmUgY2hhbmdlXG4gIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgY29uc3QgYkxvZ2dpbmcgPSBmYWxzZTtcbiAgICBpZiAoYkxvZ2dpbmcpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCBgaW4gJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IG9uU3RhdGVDaGFuZ2VgICk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICB9XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgYnJpZGdlIHRvIHNlZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gICAgY29uc3QgYlVwZGF0ZVNlbGYgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5zaG91bGRDb21wb25lbnRVcGRhdGUodGhpcyk7XG4gICAgLy8gY29uc29sZS5sb2coIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gc2hvdWxkQ29tcG9uZW50VXBkYXRlOiAke2JVcGRhdGVTZWxmfWApO1xuXG4gICAgLy8gT05MWSBjYWxsIHVwZGF0ZVNlbGYgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGVcbiAgICAvLyAgICBBTkQgcmVtb3ZpbmcgdGhlIFwiZ2F0ZVwiIHRoYXQgd2FzIHB1dCB0aGVyZSBzaW5jZSBzaG91bGRDb21wb25lbnRVcGRhdGVcbiAgICAvLyAgICAgIHNob3VsZCBiZSB0aGUgcmVhbCBcImdhdGVcIlxuICAgIGlmIChiVXBkYXRlU2VsZikge1xuICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1B1bHNlRGF0YSA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKS5wdWxzZTtcblxuICAgICAgaWYgKCFpc0VxdWFsKG5ld1B1bHNlRGF0YSwgdGhpcy5wdWxzZURhdGEpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHVsc2VEYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpLnB1bHNlO1xuICB9XG5cbiAgdXBkYXRlU2VsZigpIHtcbiAgICB0aGlzLmdldE1lc3NhZ2VEYXRhKCk7XG4gIH1cblxuICBnZXRNZXNzYWdlRGF0YSgpIHtcbiAgICBjb25zdCBtZXNzYWdlSURzID0gdGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKS5tZXNzYWdlSURzO1xuICAgIGNvbnN0IHVzZXJOYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKS5jdXJyZW50VXNlcjtcbiAgICBjb25zdCBpbWFnZUtleSA9IHRoaXMucENvbm4kLmdldFZhbHVlKCdPcGVyYXRvcklELnB5SW1hZ2VJbnNLZXknKTtcblxuICAgIGNvbnN0IG9EYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgaWYgKG1lc3NhZ2VJRHMgJiYgbWVzc2FnZUlEcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvRGF0YS5wdWxzZS5tZXNzYWdlcykpO1xuXG4gICAgICAvLyBjb252ZXJ0IHRvIGp1c3QgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgdGhpcy5wdWxzZU1lc3NhZ2VzJCA9IHRoaXMuY29udmVydFRvQXJyYXkodGhpcy5wdWxzZU1lc3NhZ2VzJCk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIGNvcHksIHNvIHdlIGNhbiBtb2RpZnlcbiAgICAgIHRoaXMucHVsc2VNZXNzYWdlcyQgPSB0aGlzLmFwcGVuZFB1bHNlTWVzc2FnZSh0aGlzLnB1bHNlTWVzc2FnZXMkKTtcblxuICAgICAgLy8gbW9zdCByZWNlbnQgb24gdG9wXG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gdGhpcy5wdWxzZU1lc3NhZ2VzJC5zb3J0KChhLCBiKSA9PiAoYS51cGRhdGVUaW1lVVRDIDwgYi51cGRhdGVUaW1lVVRDID8gMSA6IC0xKSk7XG4gICAgfVxuICB9XG5cbiAgY29udmVydFRvQXJyYXkobWVzc2FnZXM6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGFyTWVzc2FnZXM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhck1lc3NhZ2VzLnB1c2gobWVzc2FnZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBhck1lc3NhZ2VzO1xuICB9XG5cbiAgYXBwZW5kUHVsc2VNZXNzYWdlKG1lc3NhZ2VzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV07XG4gICAgICBjb25zdCBwb3N0ZWRUaW1lID0gbWVzc2FnZS5wb3N0ZWRUaW1lO1xuICAgICAgY29uc3QgdXBkYXRlZFRpbWUgPSBtZXNzYWdlLnVwZGF0ZWRUaW1lO1xuXG4gICAgICB0aGlzLnNob3dSZXBseUNvbW1lbnQkW21lc3NhZ2UuSURdID0gZmFsc2U7XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocG9zdGVkVGltZSwgJ0RhdGVUaW1lLVNpbmNlJyk7XG5cbiAgICAgIC8vIGZvciBzb3J0aW5nIGxhc3RlZCB1cGRhdGVcbiAgICAgIGlmICh1cGRhdGVkVGltZSAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2UudXBkYXRlVGltZVVUQyA9IG5ldyBEYXRlKHVwZGF0ZWRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlLnVwZGF0ZVRpbWVVVEMgPSBuZXcgRGF0ZShwb3N0ZWRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5ID0gbWVzc2FnZS5wb3N0ZWRCeVVzZXIubmFtZTtcbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG1lc3NhZ2UucG9zdGVkQnlVc2VyLm5hbWUpO1xuXG4gICAgICAvLyBpZiBkaWRuJ3QgYnJlYWssIHRoZW4gbG9vayBhdCB0aGUgcmVwbGllc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtZXNzYWdlLnJlcGxpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgcmVwbHkgPSBtZXNzYWdlLnJlcGxpZXNbal07XG5cbiAgICAgICAgY29uc3QgcmVwbHlQb3N0ZWRUaW1lID0gcmVwbHkucG9zdGVkVGltZTtcbiAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocmVwbHlQb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgICAvLyBsZXQgb1JlcGx5VXNlciA9IHRoaXMudXNlckRhdGEuZ2V0KHJlcGx5LnBvc3RlZEJ5VXNlcik7XG4gICAgICAgIGNvbnN0IG9SZXBseVVzZXIgPSByZXBseS5wb3N0ZWRCeVVzZXI7XG5cbiAgICAgICAgaWYgKG9SZXBseVVzZXIpIHtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnkgPSBvUmVwbHlVc2VyLm5hbWU7XG4gICAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG9SZXBseVVzZXIubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGZvclxuXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xuICB9XG5cbiAgdXBkYXRlTWVzc2FnZXNXaXRoT3BlcmF0b3JzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wdWxzZU1lc3NhZ2VzJC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHVsc2VNZXNzYWdlcyRbaV07XG5cbiAgICAgIGNvbnN0IHBvc3RlZFRpbWUgPSBtZXNzYWdlLnBvc3RlZFRpbWU7XG5cbiAgICAgIHRoaXMuc2hvd1JlcGx5Q29tbWVudCRbbWVzc2FnZS5JRF0gPSBmYWxzZTtcblxuICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShwb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgY29uc3Qgb1VzZXIgPSB0aGlzLnVzZXJEYXRhLmdldChtZXNzYWdlLnBvc3RlZEJ5KTtcblxuICAgICAgaWYgKG9Vc2VyKSB7XG4gICAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5ID0gb1VzZXIucHlVc2VyTmFtZTtcbiAgICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1VzZXIucHlVc2VyTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvVXNlclBhcmFtcyA9IHtcbiAgICAgICAgICBPcGVyYXRvcklkOiBtZXNzYWdlLnBvc3RlZEJ5XG4gICAgICAgIH07XG4gICAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIG9Vc2VyUGFyYW1zXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGRpZG4ndCBicmVhaywgdGhlbiBsb29rIGF0IHRoZSByZXBsaWVzXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lc3NhZ2UucmVwbGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCByZXBseSA9IG1lc3NhZ2UucmVwbGllc1tqXTtcblxuICAgICAgICBjb25zdCByZXBseVBvc3RlZFRpbWUgPSByZXBseS5wb3N0ZWRUaW1lO1xuICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShyZXBseVBvc3RlZFRpbWUsICdEYXRlVGltZS1TaW5jZScpO1xuXG4gICAgICAgIC8vIGxldCBvUmVwbHlVc2VyID0gdGhpcy51c2VyRGF0YS5nZXQocmVwbHkucG9zdGVkQnlVc2VyKTtcbiAgICAgICAgY29uc3Qgb1JlcGx5VXNlciA9IHJlcGx5LnBvc3RlZEJ5VXNlcjtcblxuICAgICAgICBpZiAob1JlcGx5VXNlcikge1xuICAgICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRCeSA9IG9SZXBseVVzZXIubmFtZTtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1JlcGx5VXNlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gZm9yXG4gIH1cblxuICB1cGRhdGVDdXJyZW50VXNlck5hbWUoc1VzZXI6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFVzZXJJbml0aWFscyQgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKHNVc2VyKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyTmFtZSQgPSBzVXNlcjtcbiAgfVxuXG4gIHBvc3RDbGljaygpIHtcbiAgICAvLyBkb24ndCBzZW5kIGEgYmxhbmsgbWVzc2FnZVxuICAgIGlmICh0aGlzLnB1bHNlQ29udmVyc2F0aW9uICYmIHRoaXMucHVsc2VDb252ZXJzYXRpb24gIT0gJycpIHtcbiAgICAgIC8vIGxldCBwdWxzZU1lc3NhZ2UgPSB7XG4gICAgICAvLyAgIGNvbnRleHROYW1lIDogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgIC8vICAgbWVzc2FnZTogdGhpcy5wdWxzZUNvbnZlcnNhdGlvbixcbiAgICAgIC8vICAgcHVsc2VDb250ZXh0OiB0aGlzLnBDb25uJC5nZXRWYWx1ZShcIi5wekluc0tleVwiKVxuICAgICAgLy8gfTtcblxuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyB1c2VkIHRvIGJlOiB0aGlzLi8qZmVlZEFQSS4qL3Bvc3RNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gICAgICAvLyBXaXRoIGxhdGVzdCBGZWVkQVBJLCB0aGUgMXN0IGFyZyBzaG91bGQgYmUgZ2V0Q29uZmlnUHJvcHMoKS52YWx1ZVxuXG4gICAgICAvLyBJZiBmZWVkQVBJIGlzIGRlZmluZWQgdGhlbiBvbmx5IHBvc3QgbWVzc2FnZVxuICAgICAgaWYgKHRoaXMuZmVlZEFQSSkge1xuICAgICAgICB0aGlzLi8qIGZlZWRBUEkuICovIHBvc3RNZXNzYWdlKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkudmFsdWUsIHRoaXMucHVsc2VDb252ZXJzYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJXZSBkb24ndCBzdXBwb3J0IFB1bHNlIHlldFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhciBvdXQgbG9jYWwgY29weVxuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVsc2VNZXNzYWdlJykgYXMgSFRNTEVsZW1lbnQgfCBhbnkpLnZhbHVlID0gJyc7XG4gICAgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiA9ICcnO1xuICB9XG5cbiAgbWVzc2FnZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuXG4gIGxpa2VDbGljayhtZXNzYWdlSUQ6IHN0cmluZywgck1lc3NhZ2VJRDogc3RyaW5nLCBiTGlrZWRCeU1lOiBib29sZWFuLCBsZXZlbDogc3RyaW5nKSB7XG4gICAgbGV0IHB1bHNlTWVzc2FnZSA9IHt9O1xuXG4gICAgaWYgKGxldmVsID09PSAndG9wJykge1xuICAgICAgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgICBwdWxzZUNvbnRleHQ6IHJNZXNzYWdlSUQsXG4gICAgICAgIGlzUmVwbHk6IG51bGwsXG4gICAgICAgIGNvbnRleHROYW1lOiB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgICBsaWtlZEJ5OiBiTGlrZWRCeU1lLFxuICAgICAgICBtZXNzYWdlSURcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1bHNlTWVzc2FnZSA9IHtcbiAgICAgICAgcHVsc2VDb250ZXh0OiByTWVzc2FnZUlELFxuICAgICAgICBpc1JlcGx5OiB0cnVlLFxuICAgICAgICBjb250ZXh0TmFtZTogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgICAgbGlrZWRCeTogYkxpa2VkQnlNZSxcbiAgICAgICAgbWVzc2FnZUlEXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gbGlrZU1lc3NhZ2UocHVsc2VNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbW1lbnRDbGljayhtZXNzYWdlSUQpIHtcbiAgICAvLyBpdGVyYXRvciB0aHJvdWdoIG1lc3NhZ2VzLCBmaW5kIG1hdGNoLCB0dXJuIG9uIGNvbW1lbnQgZW50cnlcbiAgICBjb25zdCBmb3VuZE1lc3NhZ2UgPSB0aGlzLnB1bHNlTWVzc2FnZXMkLmZpbmQobWVzc2FnZSA9PiBtZXNzYWdlLklEID09PSBtZXNzYWdlSUQpO1xuXG4gICAgaWYgKGZvdW5kTWVzc2FnZSkge1xuICAgICAgdGhpcy5zaG93UmVwbHlDb21tZW50JFtmb3VuZE1lc3NhZ2UuSURdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHBvc3RDb21tZW50Q2xpY2sobWVzc2FnZUlEKSB7XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICBpZiAodGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSAmJiB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdICE9ICcnKSB7XG4gICAgICAvLyBsZXQgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgLy8gICBjb250ZXh0TmFtZSA6IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCksXG4gICAgICAvLyAgIG1lc3NhZ2U6IHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sXG4gICAgICAvLyAgIHB1bHNlQ29udGV4dDogbWVzc2FnZUlELFxuICAgICAgLy8gICByZXBseTogdHJ1ZVxuICAgICAgLy8gfTtcblxuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyBVc2VkIHRvIGJlOiB0aGlzLi8qZmVlZEFQSS4qL3Bvc3RNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gICAgICAvLyAgTGF0ZXN0IHVwZGF0ZSB0byBBUEkgaGFzIGNoYW5nZWQgYW5kIHRoZSBwb3N0TWVzc2FnZSBhY3R1YWxseSBnZXRzXG4gICAgICAvLyAgdGhlIHB1bHNlIGNvbnRleHQuLi5cbiAgICAgIC8vIHVzZWQgdG8gdXNlOiBjb250ZXh0TmFtZVxuICAgICAgLy8gbmV3IEZlZWRBUEkgd2FudHMgYXJncyB0byBiZSBtZXNzYWdlSUQsIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sIHRydWUgKHNpbmNlIHRoaXMgaXMgYSByZXBseSlcbiAgICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gcG9zdE1lc3NhZ2UobWVzc2FnZUlELCB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdLCB0cnVlKTtcblxuICAgICAgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIG5ld0NvbW1lbnRDaGFuZ2UoZXZlbnQsIG1lc3NhZ2VJRCkge1xuICAgIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XG4gICAgPGgzPlB1bHNlPC9oMz5cblxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgIDxiciAvPlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXItYmlnXCI+e3sgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicHNkay1mdWxsLXdpZHRoXCI+XG4gICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCByb3dzPVwiNVwiIGlkPVwicHVsc2VNZXNzYWdlXCIgcGxhY2Vob2xkZXI9XCJTdGFydCBhIGNvbnZlcnNhdGlvblwiIHR5cGU9XCJ0ZXh0XCIgKGNoYW5nZSk9XCJtZXNzYWdlQ2hhbmdlKCRldmVudClcIj48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1ncmlkLWxpc3QgY29scz1cIjJcIiByb3dIZWlnaHQ9XCI2LjI1cmVtXCI+XG4gIDxtYXQtZ3JpZC10aWxlPiA8L21hdC1ncmlkLXRpbGU+XG4gIDxtYXQtZ3JpZC10aWxlPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInBvc3RDbGljaygpXCI+UG9zdDwvYnV0dG9uPlxuICA8L21hdC1ncmlkLXRpbGU+XG48L21hdC1ncmlkLWxpc3Q+XG5cbjxkaXYgKm5nRm9yPVwibGV0IHB1bHNlTWVzc2FnZSBvZiBwdWxzZU1lc3NhZ2VzJDsgbGV0IG9kZCA9IG9kZFwiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIm9kZCA/ICd3aGl0ZScgOiAnI2VlZWVlZSdcIj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtZGl2aWRlclwiPjwvZGl2PlxuICA8YnIgLz5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXItYmlnXCI+e3sgcHVsc2VNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzIH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1ieVwiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkQnkgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtdGltZVwiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS10ZXh0XCI+e3sgcHVsc2VNZXNzYWdlLm1lc3NhZ2UgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb24tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIj5cbiAgICAgICAgPGltZyBjbGFzcz1cInBzZGstY29tbWVudC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0NvbW1lbnQkIH19XCIgLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIlxuICAgICAgICAgID5Db21tZW50IDxzcGFuICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5yZXBsaWVzLmxlbmd0aCA+IDBcIj4gfCB7eyBwdWxzZU1lc3NhZ2UucmVwbGllcy5sZW5ndGggfX08L3NwYW4+PC9sYWJlbFxuICAgICAgICA+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWFjdGlvbi1saWtlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlQ291bnQ7IGVsc2Ugbm90TGlrZWRcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ubGlrZWRCeU1lID09ICd0cnVlJ1wiIG1hdC1idXR0b24gKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHB1bHNlTWVzc2FnZS5JRCwgdHJ1ZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb24tbGlrZWQtYnktbWVcIiBzdmdJY29uPVwidGh1bWItdXBcIiBtYXN0TGlzdEljb24gPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2VkLWJ5LW1lLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZWRCeU1lJCB9fVwiIC8+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIj5MaWtlIHwge3sgcHVsc2VNZXNzYWdlLmxpa2VDb3VudCB9fTwvbGFiZWw+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlZEJ5TWUgIT0gJ3RydWUnXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCBmYWxzZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb25cIiBzdmdJY29uPVwidGh1bWItdXAtb3V0bGluZVwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyBwdWxzZU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TGlrZWQ+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCBmYWxzZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb25cIiBzdmdJY29uPVwidGh1bWItdXAtb3V0bGluZVwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2U8L2xhYmVsPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJwdWxzZU1lc3NhZ2U/LnJlcGxpZXNcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHlcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCByZXBseU1lc3NhZ2Ugb2YgcHVsc2VNZXNzYWdlLnJlcGxpZXNcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYWxpZ25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstYXZhdGFyXCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWJ5XCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1tZXNzYWdlXCI+e3sgcmVwbHlNZXNzYWdlLm1lc3NhZ2UgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImNvbW1lbnRDbGljayhwdWxzZU1lc3NhZ2UuSUQpXCIgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWNvbW1lbnRcIj5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1jb21tZW50LXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnQ29tbWVudCQgfX1cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZUNvdW50OyBlbHNlIHJlcGx5Tm90TGlrZWRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lID09PSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgdHJ1ZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2VkLWJ5LW1lLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZWRCeU1lJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJyZXBseU1lc3NhZ2U/Lmxpa2VkQnlNZSAhPSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgZmFsc2UsICdyZXBseScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1saWtlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZSQgfX1cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyByZXBseU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwbHlOb3RMaWtlZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lICE9ICd0cnVlJ1wiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcmVwbHlNZXNzYWdlLklELCBmYWxzZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2Utc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktdGltZVwiPnt7IHJlcGx5TWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YnIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93UmVwbHlDb21tZW50JFtwdWxzZU1lc3NhZ2UuSURdID09IHRydWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtY29tbWVudC1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXJcIj57eyB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkIH19PC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInBzZGstZnVsbC13aWR0aFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHJvd3M9XCI1XCJcbiAgICAgICAgICAgIGlkPVwicHVsc2VNZXNzYWdlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIGEgY29tbWVudFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm5ld0NvbW1lbnRDaGFuZ2UoJGV2ZW50LCBwdWxzZU1lc3NhZ2UuSUQpXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJwb3N0Q29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIiBjbGFzcz1cInBzZGstcHVsc2UtY29tbWVudC1wb3N0XCI+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstc2VuZC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z1NlbmQkIH19XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxiciAvPlxuPC9kaXY+XG4iXX0=
|