@hmcts/ccpay-web-component 6.5.15-beta1 → 6.5.15-beta13
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/fesm2022/hmcts-ccpay-web-component.mjs +272 -193
- package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
- package/index.d.ts +2348 -5
- package/package.json +8 -7
- package/esm2022/hmcts-ccpay-web-component.mjs +0 -5
- package/esm2022/lib/components/add-remission/add-remission.component.mjs +0 -1276
- package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +0 -423
- package/esm2022/lib/components/card-details/card-details.component.mjs +0 -32
- package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +0 -885
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +0 -338
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +0 -18
- package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +0 -280
- package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +0 -195
- package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +0 -275
- package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +0 -79
- package/esm2022/lib/components/page-not-found.component.mjs +0 -17
- package/esm2022/lib/components/payment-list/payment-list.component.mjs +0 -36
- package/esm2022/lib/components/payment-view/payment-view.component.mjs +0 -467
- package/esm2022/lib/components/pba-details/pba-details.component.mjs +0 -18
- package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +0 -163
- package/esm2022/lib/components/process-refund/process-refund.component.mjs +0 -417
- package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +0 -37
- package/esm2022/lib/components/refund-list/refund-list.component.mjs +0 -73
- package/esm2022/lib/components/refund-status/refund-status.component.mjs +0 -481
- package/esm2022/lib/components/reports/reports.component.mjs +0 -337
- package/esm2022/lib/components/service-request/service-request.component.mjs +0 -516
- package/esm2022/lib/components/status-history/status-history.component.mjs +0 -33
- package/esm2022/lib/components/table/table.component.mjs +0 -127
- package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +0 -236
- package/esm2022/lib/interfaces/AddRemissionRequest.mjs +0 -17
- package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +0 -9
- package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +0 -41
- package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +0 -20
- package/esm2022/lib/interfaces/IBSPayments.mjs +0 -2
- package/esm2022/lib/interfaces/ICardDetails.mjs +0 -2
- package/esm2022/lib/interfaces/IFee.mjs +0 -2
- package/esm2022/lib/interfaces/INotificationPreview.mjs +0 -2
- package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +0 -2
- package/esm2022/lib/interfaces/IPatchRefundAction.mjs +0 -2
- package/esm2022/lib/interfaces/IPayment.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentFailure.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentGroup.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentStatus.mjs +0 -12
- package/esm2022/lib/interfaces/IPaymentView.mjs +0 -2
- package/esm2022/lib/interfaces/IPayments.mjs +0 -2
- package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +0 -13
- package/esm2022/lib/interfaces/IRefundAction.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundContactDetails.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundFee.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundList.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundReasons.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundRejectReason.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundStatus.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundsNotifications.mjs +0 -2
- package/esm2022/lib/interfaces/IRemission.mjs +0 -2
- package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +0 -13
- package/esm2022/lib/interfaces/IStatusHistories.mjs +0 -2
- package/esm2022/lib/interfaces/IStatusHistory.mjs +0 -2
- package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +0 -11
- package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +0 -15
- package/esm2022/lib/interfaces/IssueRefundRequest.mjs +0 -11
- package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +0 -46
- package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +0 -14
- package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +0 -17
- package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +0 -9
- package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +0 -18
- package/esm2022/lib/interfaces/RefundsRequest.mjs +0 -9
- package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +0 -16
- package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +0 -22
- package/esm2022/lib/payment-lib.component.mjs +0 -430
- package/esm2022/lib/payment-lib.module.mjs +0 -181
- package/esm2022/lib/payment-lib.service.mjs +0 -49
- package/esm2022/lib/pipes/capitalize.pipe.mjs +0 -18
- package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +0 -22
- package/esm2022/lib/pipes/key-value.pipe.mjs +0 -23
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +0 -20
- package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +0 -87
- package/esm2022/lib/services/card-details/card-details.service.mjs +0 -39
- package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +0 -39
- package/esm2022/lib/services/notification/notification.service.mjs +0 -70
- package/esm2022/lib/services/orderslist.service.mjs +0 -154
- package/esm2022/lib/services/payment-list/payment-list.service.mjs +0 -40
- package/esm2022/lib/services/payment-view/payment-view.service.mjs +0 -156
- package/esm2022/lib/services/refunds/refunds.service.mjs +0 -120
- package/esm2022/lib/services/shared/error-handler.service.mjs +0 -76
- package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +0 -64
- package/esm2022/lib/services/shared/logger/console-logger.service.mjs +0 -43
- package/esm2022/lib/services/shared/logger/logger.service.mjs +0 -23
- package/esm2022/lib/services/status-history/status-history.service.mjs +0 -41
- package/esm2022/lib/services/xl-file/xl-file.service.mjs +0 -197
- package/esm2022/public_api.mjs +0 -7
- package/lib/components/add-remission/add-remission.component.d.ts +0 -208
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +0 -115
- package/lib/components/card-details/card-details.component.d.ts +0 -18
- package/lib/components/case-transactions/case-transactions.component.d.ts +0 -143
- package/lib/components/contact-details/contact-details.component.d.ts +0 -54
- package/lib/components/error-banner/error-banner.component.d.ts +0 -9
- package/lib/components/fee-summary/fee-summary.component.d.ts +0 -72
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +0 -52
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +0 -63
- package/lib/components/notification-preview/notification-preview.component.d.ts +0 -30
- package/lib/components/page-not-found.component.d.ts +0 -5
- package/lib/components/payment-list/payment-list.component.d.ts +0 -19
- package/lib/components/payment-view/payment-view.component.d.ts +0 -110
- package/lib/components/pba-details/pba-details.component.d.ts +0 -10
- package/lib/components/pba-payment/pba-payment.component.d.ts +0 -41
- package/lib/components/process-refund/process-refund.component.d.ts +0 -82
- package/lib/components/processed-payments/processed-payments.component.d.ts +0 -17
- package/lib/components/refund-list/refund-list.component.d.ts +0 -26
- package/lib/components/refund-status/refund-status.component.d.ts +0 -119
- package/lib/components/reports/reports.component.d.ts +0 -49
- package/lib/components/service-request/service-request.component.d.ts +0 -141
- package/lib/components/status-history/status-history.component.d.ts +0 -19
- package/lib/components/table/table.component.d.ts +0 -45
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +0 -61
- package/lib/interfaces/AddRemissionRequest.d.ts +0 -11
- package/lib/interfaces/AddRetroRemissionRequest.d.ts +0 -5
- package/lib/interfaces/AllocatePaymentRequest.d.ts +0 -31
- package/lib/interfaces/IAllocationPaymentsRequest.d.ts +0 -9
- package/lib/interfaces/IBSPayments.d.ts +0 -19
- package/lib/interfaces/ICardDetails.d.ts +0 -7
- package/lib/interfaces/IFee.d.ts +0 -29
- package/lib/interfaces/INotificationPreview.d.ts +0 -27
- package/lib/interfaces/IOrderReferenceFee.d.ts +0 -9
- package/lib/interfaces/IPatchRefundAction.d.ts +0 -4
- package/lib/interfaces/IPayment.d.ts +0 -35
- package/lib/interfaces/IPaymentFailure.d.ts +0 -13
- package/lib/interfaces/IPaymentGroup.d.ts +0 -11
- package/lib/interfaces/IPaymentStatus.d.ts +0 -11
- package/lib/interfaces/IPaymentView.d.ts +0 -5
- package/lib/interfaces/IPayments.d.ts +0 -4
- package/lib/interfaces/IPutNotificationRequest.d.ts +0 -6
- package/lib/interfaces/IRefundAction.d.ts +0 -4
- package/lib/interfaces/IRefundContactDetails.d.ts +0 -9
- package/lib/interfaces/IRefundFee.d.ts +0 -7
- package/lib/interfaces/IRefundList.d.ts +0 -20
- package/lib/interfaces/IRefundReasons.d.ts +0 -6
- package/lib/interfaces/IRefundRejectReason.d.ts +0 -4
- package/lib/interfaces/IRefundStatus.d.ts +0 -8
- package/lib/interfaces/IRefundStatusHistory.d.ts +0 -5
- package/lib/interfaces/IRefundsNotifications.d.ts +0 -16
- package/lib/interfaces/IRemission.d.ts +0 -14
- package/lib/interfaces/IResubmitRefundRequest.d.ts +0 -9
- package/lib/interfaces/IStatusHistories.d.ts +0 -7
- package/lib/interfaces/IStatusHistory.d.ts +0 -7
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +0 -6
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +0 -8
- package/lib/interfaces/IssueRefundRequest.d.ts +0 -6
- package/lib/interfaces/NotificationPreviewRequest.d.ts +0 -25
- package/lib/interfaces/PayhubAntennaRequest.d.ts +0 -8
- package/lib/interfaces/PaymentToPayhubRequest.d.ts +0 -11
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +0 -6
- package/lib/interfaces/PostRefundRetroRemission.d.ts +0 -11
- package/lib/interfaces/RefundsRequest.d.ts +0 -5
- package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +0 -7
- package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +0 -10
- package/lib/payment-lib.component.d.ts +0 -156
- package/lib/payment-lib.module.d.ts +0 -42
- package/lib/payment-lib.service.d.ts +0 -21
- package/lib/pipes/capitalize.pipe.d.ts +0 -8
- package/lib/pipes/ccd-hyphens.pipe.d.ts +0 -8
- package/lib/pipes/key-value.pipe.d.ts +0 -8
- package/lib/pipes/sanitize-html.pipe.d.ts +0 -10
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +0 -27
- package/lib/services/card-details/card-details.service.d.ts +0 -17
- package/lib/services/case-transactions/case-transactions.service.d.ts +0 -17
- package/lib/services/notification/notification.service.d.ts +0 -21
- package/lib/services/orderslist.service.d.ts +0 -77
- package/lib/services/payment-list/payment-list.service.d.ts +0 -18
- package/lib/services/payment-view/payment-view.service.d.ts +0 -61
- package/lib/services/refunds/refunds.service.d.ts +0 -36
- package/lib/services/shared/error-handler.service.d.ts +0 -14
- package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +0 -17
- package/lib/services/shared/logger/console-logger.service.d.ts +0 -11
- package/lib/services/shared/logger/logger.service.d.ts +0 -14
- package/lib/services/status-history/status-history.service.d.ts +0 -17
- package/lib/services/xl-file/xl-file.service.d.ts +0 -16
- package/public_api.d.ts +0 -3
|
@@ -1,417 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Inject } from '@angular/core';
|
|
2
|
-
import { FormBuilder, Validators, FormControl } from '@angular/forms';
|
|
3
|
-
import { RefundsService } from '../../services/refunds/refunds.service';
|
|
4
|
-
import { OrderslistService } from '../../services/orderslist.service';
|
|
5
|
-
import { NotificationService } from '../../services/notification/notification.service';
|
|
6
|
-
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
7
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "../../services/refunds/refunds.service";
|
|
10
|
-
import * as i2 from "../../services/payment-view/payment-view.service";
|
|
11
|
-
import * as i3 from "@angular/forms";
|
|
12
|
-
import * as i4 from "../../services/orderslist.service";
|
|
13
|
-
import * as i5 from "../../services/notification/notification.service";
|
|
14
|
-
import * as i6 from "@angular/router";
|
|
15
|
-
import * as i7 from "@angular/common";
|
|
16
|
-
import * as i8 from "../notification-preview/notification-preview.component";
|
|
17
|
-
export class ProcessRefundComponent {
|
|
18
|
-
RefundsService;
|
|
19
|
-
paymentViewService;
|
|
20
|
-
formBuilder;
|
|
21
|
-
OrderslistService;
|
|
22
|
-
notificationService;
|
|
23
|
-
paymentLibComponent;
|
|
24
|
-
router;
|
|
25
|
-
activeRoute;
|
|
26
|
-
refundReference;
|
|
27
|
-
refundlistsource;
|
|
28
|
-
processRefundForm;
|
|
29
|
-
errorMessage = this.getErrorMessage(false, '', '', '');
|
|
30
|
-
sendmeback = null;
|
|
31
|
-
viewStatus;
|
|
32
|
-
refundActionList = [];
|
|
33
|
-
refundRejectReasonList = [];
|
|
34
|
-
isSendMeBackClicked = false;
|
|
35
|
-
isRejectClicked = false;
|
|
36
|
-
isOtherClicked = false;
|
|
37
|
-
isSuccesspageEnable = false;
|
|
38
|
-
refundActionsHasError = false;
|
|
39
|
-
refundRejectReasonHasError = false;
|
|
40
|
-
isReasonFieldEmpty = false;
|
|
41
|
-
isReasonFieldInvalid = false;
|
|
42
|
-
reasonFieldMinHasError = false;
|
|
43
|
-
reasonFieldMaxHasError = false;
|
|
44
|
-
isReasonEmpty = false;
|
|
45
|
-
isReasonInvalid = false;
|
|
46
|
-
successMsg = null;
|
|
47
|
-
navigationpage;
|
|
48
|
-
ccdCaseNumber;
|
|
49
|
-
isFromRefundListPage;
|
|
50
|
-
cpoDetails = [];
|
|
51
|
-
isCPODown;
|
|
52
|
-
isConfirmButtondisabled = true;
|
|
53
|
-
paymentObj;
|
|
54
|
-
templateInstructionType;
|
|
55
|
-
notificationPreview = false;
|
|
56
|
-
notificationPreviewObj;
|
|
57
|
-
constructor(RefundsService, paymentViewService, formBuilder, OrderslistService, notificationService, paymentLibComponent, router, activeRoute) {
|
|
58
|
-
this.RefundsService = RefundsService;
|
|
59
|
-
this.paymentViewService = paymentViewService;
|
|
60
|
-
this.formBuilder = formBuilder;
|
|
61
|
-
this.OrderslistService = OrderslistService;
|
|
62
|
-
this.notificationService = notificationService;
|
|
63
|
-
this.paymentLibComponent = paymentLibComponent;
|
|
64
|
-
this.router = router;
|
|
65
|
-
this.activeRoute = activeRoute;
|
|
66
|
-
}
|
|
67
|
-
ngOnInit() {
|
|
68
|
-
this.viewStatus = 'RefundProcess';
|
|
69
|
-
this.RefundsService.getRefundActions(this.refundReference).subscribe(refundActionList => {
|
|
70
|
-
this.refundActionList = refundActionList;
|
|
71
|
-
}, err => {
|
|
72
|
-
this.errorMessage = this.getErrorMessage(true, err.statusCode, err.err, err);
|
|
73
|
-
});
|
|
74
|
-
this.processRefundForm = this.formBuilder.group({
|
|
75
|
-
refundActionField: new FormControl('', Validators.compose([
|
|
76
|
-
Validators.required
|
|
77
|
-
])),
|
|
78
|
-
refundRejectReasonField: new FormControl('', Validators.compose([
|
|
79
|
-
Validators.required
|
|
80
|
-
])),
|
|
81
|
-
sendMeBackField: new FormControl('', Validators.compose([
|
|
82
|
-
Validators.required,
|
|
83
|
-
Validators.minLength(3),
|
|
84
|
-
Validators.maxLength(255),
|
|
85
|
-
Validators.pattern('^([a-zA-Z0-9\\s,\\.]*)$'),
|
|
86
|
-
])),
|
|
87
|
-
enterReasonField: new FormControl('', Validators.compose([
|
|
88
|
-
Validators.required,
|
|
89
|
-
Validators.maxLength(30),
|
|
90
|
-
Validators.pattern('^([a-zA-Z0-9.\\s]*)$'),
|
|
91
|
-
])),
|
|
92
|
-
});
|
|
93
|
-
this.ccdCaseNumber = this.refundlistsource.ccd_case_number;
|
|
94
|
-
if ((typeof this.paymentLibComponent.TAKEPAYMENT === 'string' && this.paymentLibComponent.TAKEPAYMENT === 'false') || (typeof this.paymentLibComponent.TAKEPAYMENT === 'boolean' && !this.paymentLibComponent.TAKEPAYMENT)) {
|
|
95
|
-
this.isFromRefundListPage = true;
|
|
96
|
-
}
|
|
97
|
-
this.paymentViewService.getPartyDetails(this.ccdCaseNumber).subscribe(response => {
|
|
98
|
-
this.cpoDetails = JSON.parse(response).content[0];
|
|
99
|
-
}, (error) => {
|
|
100
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
101
|
-
this.isCPODown = true;
|
|
102
|
-
});
|
|
103
|
-
this.getTemplateInstructionType(this.paymentObj, this.refundlistsource.payment_reference);
|
|
104
|
-
}
|
|
105
|
-
checkRefundActions(code) {
|
|
106
|
-
this.refundActionsHasError = false;
|
|
107
|
-
this.isReasonFieldEmpty = false;
|
|
108
|
-
this.isReasonEmpty = false;
|
|
109
|
-
this.isReasonInvalid = false;
|
|
110
|
-
this.refundRejectReasonHasError = false;
|
|
111
|
-
if (code === 'Return to caseworker') {
|
|
112
|
-
this.isConfirmButtondisabled = true;
|
|
113
|
-
this.isSendMeBackClicked = true;
|
|
114
|
-
this.isRejectClicked = false;
|
|
115
|
-
this.isOtherClicked = false;
|
|
116
|
-
}
|
|
117
|
-
else if (code === 'Approve') {
|
|
118
|
-
this.isSendMeBackClicked = false;
|
|
119
|
-
this.isConfirmButtondisabled = false;
|
|
120
|
-
this.isRejectClicked = false;
|
|
121
|
-
this.isOtherClicked = false;
|
|
122
|
-
}
|
|
123
|
-
else if (code === 'Reject') {
|
|
124
|
-
this.isRejectClicked = true;
|
|
125
|
-
this.isSendMeBackClicked = false;
|
|
126
|
-
this.isOtherClicked = false;
|
|
127
|
-
this.RefundsService.getRefundRejectReasons().subscribe(refundRejectReasonList => {
|
|
128
|
-
this.refundRejectReasonList = refundRejectReasonList;
|
|
129
|
-
}, err => {
|
|
130
|
-
this.errorMessage = this.getErrorMessage(true, err.statusCode, err.err, err);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
else if (code === 'RE005') {
|
|
134
|
-
this.isOtherClicked = true;
|
|
135
|
-
}
|
|
136
|
-
else if (code !== 'RE005') {
|
|
137
|
-
this.isOtherClicked = false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
getNotificationPreviewObj(notificationPreviewObj) {
|
|
141
|
-
this.notificationPreviewObj = notificationPreviewObj;
|
|
142
|
-
}
|
|
143
|
-
processRefundSubmit() {
|
|
144
|
-
let processRefundRequest;
|
|
145
|
-
let status;
|
|
146
|
-
this.resetForm([false, false, false, false, false, false, false, false], 'all');
|
|
147
|
-
const controls = this.processRefundForm.controls;
|
|
148
|
-
const processFormError = controls.sendMeBackField.errors;
|
|
149
|
-
if (this.processRefundForm.dirty && controls.refundActionField.valid
|
|
150
|
-
&& (controls.refundActionField.value == 'Approve'
|
|
151
|
-
|| (controls.refundActionField.value == 'Reject' && controls.refundRejectReasonField.valid && controls.refundRejectReasonField.value != 'RE005')
|
|
152
|
-
|| (controls.refundActionField.value == 'Reject' && controls.refundRejectReasonField.value == 'RE005' && controls.enterReasonField.valid)
|
|
153
|
-
|| (controls.refundActionField.value == 'Return to caseworker' && controls.sendMeBackField.valid))) {
|
|
154
|
-
if (controls.refundActionField.value === 'Approve') {
|
|
155
|
-
status = 'APPROVE';
|
|
156
|
-
if (this.notificationPreviewObj) {
|
|
157
|
-
processRefundRequest = {
|
|
158
|
-
code: '',
|
|
159
|
-
reason: '',
|
|
160
|
-
template_preview: {
|
|
161
|
-
body: this.notificationPreviewObj.body,
|
|
162
|
-
from: {
|
|
163
|
-
from_email_address: this.notificationPreviewObj.from.from_email_address,
|
|
164
|
-
from_mail_address: {
|
|
165
|
-
address_line: this.notificationPreviewObj.from.from_mail_address.address_line,
|
|
166
|
-
city: this.notificationPreviewObj.from.from_mail_address.city,
|
|
167
|
-
country: this.notificationPreviewObj.from.from_mail_address.country,
|
|
168
|
-
county: this.notificationPreviewObj.from.from_mail_address.county,
|
|
169
|
-
postal_code: this.notificationPreviewObj.from.from_mail_address.postal_code
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
html: this.notificationPreviewObj.html,
|
|
173
|
-
id: this.notificationPreviewObj.template_id,
|
|
174
|
-
subject: this.notificationPreviewObj.subject,
|
|
175
|
-
template_type: this.notificationPreviewObj.template_type,
|
|
176
|
-
version: 0
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
processRefundRequest = {
|
|
182
|
-
code: '',
|
|
183
|
-
reason: ''
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
else if (controls.refundActionField.value === 'Reject') {
|
|
188
|
-
status = 'REJECT';
|
|
189
|
-
if (this.notificationPreviewObj) {
|
|
190
|
-
processRefundRequest = {
|
|
191
|
-
code: controls.refundRejectReasonField.value ? controls.refundRejectReasonField.value : '',
|
|
192
|
-
reason: controls.refundRejectReasonField.value == 'RE005' ? controls.enterReasonField.value : '',
|
|
193
|
-
template_preview: {
|
|
194
|
-
body: this.notificationPreviewObj.body,
|
|
195
|
-
from: {
|
|
196
|
-
from_email_address: this.notificationPreviewObj.from.from_email_address,
|
|
197
|
-
from_mail_address: {
|
|
198
|
-
address_line: this.notificationPreviewObj.from.from_mail_address.address_line,
|
|
199
|
-
city: this.notificationPreviewObj.from.from_mail_address.city,
|
|
200
|
-
country: this.notificationPreviewObj.from.from_mail_address.country,
|
|
201
|
-
county: this.notificationPreviewObj.from.from_mail_address.county,
|
|
202
|
-
postal_code: this.notificationPreviewObj.from.from_mail_address.postal_code
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
html: this.notificationPreviewObj.html,
|
|
206
|
-
id: this.notificationPreviewObj.template_id,
|
|
207
|
-
subject: this.notificationPreviewObj.subject,
|
|
208
|
-
template_type: this.notificationPreviewObj.template_type,
|
|
209
|
-
version: 0
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
processRefundRequest = {
|
|
215
|
-
code: controls.refundRejectReasonField.value ? controls.refundRejectReasonField.value : '',
|
|
216
|
-
reason: controls.refundRejectReasonField.value == 'RE005' ? controls.enterReasonField.value : ''
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else if (controls.refundActionField.value === 'Return to caseworker') {
|
|
221
|
-
status = 'SENDBACK';
|
|
222
|
-
if (this.notificationPreviewObj) {
|
|
223
|
-
processRefundRequest = {
|
|
224
|
-
code: '',
|
|
225
|
-
reason: controls.sendMeBackField.value,
|
|
226
|
-
template_preview: {
|
|
227
|
-
body: this.notificationPreviewObj.body,
|
|
228
|
-
from: {
|
|
229
|
-
from_email_address: this.notificationPreviewObj.from.from_email_address,
|
|
230
|
-
from_mail_address: {
|
|
231
|
-
address_line: this.notificationPreviewObj.from.from_mail_address.address_line,
|
|
232
|
-
city: this.notificationPreviewObj.from.from_mail_address.city,
|
|
233
|
-
country: this.notificationPreviewObj.from.from_mail_address.country,
|
|
234
|
-
county: this.notificationPreviewObj.from.from_mail_address.county,
|
|
235
|
-
postal_code: this.notificationPreviewObj.from.from_mail_address.postal_code
|
|
236
|
-
}
|
|
237
|
-
},
|
|
238
|
-
html: this.notificationPreviewObj.html,
|
|
239
|
-
id: this.notificationPreviewObj.template_id,
|
|
240
|
-
subject: this.notificationPreviewObj.subject,
|
|
241
|
-
template_type: this.notificationPreviewObj.template_type,
|
|
242
|
-
version: 0
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
processRefundRequest = {
|
|
248
|
-
code: '',
|
|
249
|
-
reason: controls.sendMeBackField.value
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
this.RefundsService.patchRefundActions(processRefundRequest, this.refundReference, status).subscribe(response => {
|
|
254
|
-
this.isSuccesspageEnable = true;
|
|
255
|
-
// this.successMsg = JSON.parse(response)['data'];
|
|
256
|
-
this.successMsg = response.replace(/['"]+/g, '');
|
|
257
|
-
}, err => {
|
|
258
|
-
this.errorMessage = this.getErrorMessage(true, err.statusCode, err.err, err);
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
if (controls.refundActionField.value == "") {
|
|
263
|
-
this.resetForm([true, false, false, false, false, false, false, false], 'action');
|
|
264
|
-
}
|
|
265
|
-
if (controls.refundActionField.value == 'Reject' && controls.refundRejectReasonField.value == "") {
|
|
266
|
-
this.resetForm([false, true, false, false, false, false, false, false], 'rejectReason');
|
|
267
|
-
}
|
|
268
|
-
if (controls.refundActionField.value == 'Return to caseworker') {
|
|
269
|
-
if (controls.sendMeBackField.value == '') {
|
|
270
|
-
this.resetForm([false, false, true, false, false, false, false, false], 'addAreason');
|
|
271
|
-
}
|
|
272
|
-
if (controls.sendMeBackField.value != '' && controls.sendMeBackField.invalid) {
|
|
273
|
-
this.resetForm([false, false, false, true, false, false, false, false], 'addAreason');
|
|
274
|
-
}
|
|
275
|
-
if (processFormError && processFormError.minlength && processFormError.minlength.actualLength < 3) {
|
|
276
|
-
this.resetForm([false, false, false, false, true, false, false, false], 'addAreason');
|
|
277
|
-
}
|
|
278
|
-
if (processFormError && processFormError.maxlength && processFormError.maxlength.actualLength > 255) {
|
|
279
|
-
this.resetForm([false, false, false, false, false, true, false, false], 'addAreason');
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
if (controls.refundActionField.value == 'Reject' && controls.refundRejectReasonField.value == 'RE005') {
|
|
283
|
-
if (controls.enterReasonField.value === "") {
|
|
284
|
-
this.resetForm([false, false, false, false, false, false, true, false], 'enterReason');
|
|
285
|
-
}
|
|
286
|
-
if (controls.enterReasonField.value !== "" && controls.enterReasonField.invalid) {
|
|
287
|
-
this.resetForm([false, false, false, false, false, false, false, true], 'enterReason');
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
getErrorMessage(isErrorExist, status, errorMsg, err) {
|
|
293
|
-
let bodyTxt = 'Please try again later';
|
|
294
|
-
if (status !== 500) {
|
|
295
|
-
if (errorMsg !== undefined) {
|
|
296
|
-
bodyTxt = errorMsg;
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
bodyTxt = err;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
return {
|
|
303
|
-
title: 'Something went wrong',
|
|
304
|
-
body: bodyTxt,
|
|
305
|
-
showError: isErrorExist
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
loadRefundListPage() {
|
|
309
|
-
this.OrderslistService.getnavigationPageValue().subscribe((data) => this.navigationpage = data);
|
|
310
|
-
if (this.navigationpage === 'casetransactions') {
|
|
311
|
-
// window.location.href='/refund-list?takePayment=false&refundlist=true';
|
|
312
|
-
// // this.OrderslistService.setnavigationPage('casetransactions');
|
|
313
|
-
// // this.OrderslistService.setisFromServiceRequestPage(false);
|
|
314
|
-
// // this.paymentLibComponent.VIEW ='case-transactions';
|
|
315
|
-
// // this.paymentLibComponent.viewName = 'case-transactions';
|
|
316
|
-
// // this.paymentLibComponent.ISBSENABLE = true;
|
|
317
|
-
// // this.paymentLibComponent.isRefundStatusView = false;
|
|
318
|
-
this.paymentLibComponent.viewName = 'refundstatuslist';
|
|
319
|
-
this.paymentLibComponent.isRefundStatusView = true;
|
|
320
|
-
}
|
|
321
|
-
else {
|
|
322
|
-
this.paymentLibComponent.viewName = 'refundstatuslist';
|
|
323
|
-
this.paymentLibComponent.isRefundStatusView = true;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
loadRefundsHomePage() {
|
|
327
|
-
if (typeof this.paymentLibComponent.TAKEPAYMENT === 'string' && this.paymentLibComponent.TAKEPAYMENT === 'false') {
|
|
328
|
-
//window.location.href='/refund-list?takePayment=false&refundlist=true';
|
|
329
|
-
this.paymentLibComponent.viewName = 'refund-list';
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
this.OrderslistService.setnavigationPage('casetransactions');
|
|
333
|
-
this.OrderslistService.setisFromServiceRequestPage(false);
|
|
334
|
-
this.paymentLibComponent.VIEW = 'case-transactions';
|
|
335
|
-
this.paymentLibComponent.viewName = 'case-transactions';
|
|
336
|
-
this.paymentLibComponent.ISBSENABLE = true;
|
|
337
|
-
this.paymentLibComponent.isRefundStatusView = false;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
redirecttoRefundListPage() {
|
|
341
|
-
if ((typeof this.paymentLibComponent.TAKEPAYMENT === 'string' && this.paymentLibComponent.TAKEPAYMENT === 'false') || (typeof this.paymentLibComponent.TAKEPAYMENT === 'boolean' && !this.paymentLibComponent.TAKEPAYMENT)) {
|
|
342
|
-
// window.location.href='/refund-list?takePayment=false&refundlist=true';
|
|
343
|
-
this.paymentLibComponent.viewName = 'refund-list';
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
this.loadRefundListPage();
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
loadCaseTransactionPage() {
|
|
350
|
-
this.OrderslistService.setnavigationPage('casetransactions');
|
|
351
|
-
this.OrderslistService.setisFromServiceRequestPage(false);
|
|
352
|
-
this.paymentLibComponent.viewName = 'case-transactions';
|
|
353
|
-
this.paymentLibComponent.ISBSENABLE = true;
|
|
354
|
-
this.paymentLibComponent.isRefundStatusView = false;
|
|
355
|
-
}
|
|
356
|
-
resetForm(vals, field) {
|
|
357
|
-
if (field === 'action' || field === 'all') {
|
|
358
|
-
this.refundActionsHasError = vals[0];
|
|
359
|
-
}
|
|
360
|
-
if (field === 'rejectReason' || field === 'all') {
|
|
361
|
-
this.refundRejectReasonHasError = vals[1];
|
|
362
|
-
}
|
|
363
|
-
if (field === 'addAreason' || field === 'all') {
|
|
364
|
-
this.isReasonFieldEmpty = vals[2];
|
|
365
|
-
this.isReasonFieldInvalid = vals[3];
|
|
366
|
-
this.reasonFieldMinHasError = vals[4];
|
|
367
|
-
this.reasonFieldMaxHasError = vals[5];
|
|
368
|
-
}
|
|
369
|
-
if (field === 'enterReason' || field === 'all') {
|
|
370
|
-
this.isReasonEmpty = vals[6];
|
|
371
|
-
this.isReasonInvalid = vals[7];
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
goToCaseReview() {
|
|
375
|
-
const isPayBubble = this.paymentLibComponent.isFromPayBubble;
|
|
376
|
-
if (isPayBubble) {
|
|
377
|
-
this.loadCaseTransactionPage();
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
this.router.navigate([`/cases/case-details/${this.ccdCaseNumber}`], { relativeTo: this.activeRoute });
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
getTemplateInstructionType(payment, paymentReference) {
|
|
384
|
-
if (payment == undefined || payment == null || payment.reference != paymentReference) {
|
|
385
|
-
this.paymentViewService.getPaymentDetails(paymentReference).subscribe(payment => {
|
|
386
|
-
this.paymentObj = payment;
|
|
387
|
-
this.paymentObj.reference = paymentReference;
|
|
388
|
-
this.templateInstructionType = this.notificationService.getNotificationInstructionType(this.paymentObj.channel, this.paymentObj.method);
|
|
389
|
-
}, (error) => {
|
|
390
|
-
this.templateInstructionType = 'Template';
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
this.templateInstructionType = this.notificationService.getNotificationInstructionType(payment.channel, payment.method);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
showNotificationPreview() {
|
|
398
|
-
this.notificationPreview = true;
|
|
399
|
-
}
|
|
400
|
-
hideNotificationPreview() {
|
|
401
|
-
this.notificationPreview = false;
|
|
402
|
-
}
|
|
403
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessRefundComponent, deps: [{ token: i1.RefundsService }, { token: i2.PaymentViewService }, { token: i3.FormBuilder }, { token: i4.OrderslistService }, { token: i5.NotificationService }, { token: 'PAYMENT_LIB' }, { token: i6.Router }, { token: i6.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
404
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProcessRefundComponent, selector: "ccpay-process-refund", inputs: { refundReference: "refundReference", refundlistsource: "refundlistsource" }, ngImport: i0, template: "<ng-container *ngIf=\"viewStatus === 'RefundProcess'\">\n<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" [ngClass]=\"{'govuk-radios__conditional--hidden': isSuccesspageEnable}\" id=\"main-content\" role=\"main\">\n <div *ngIf=\"errorMessage.showError\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n {{errorMessage.title}}\n </h2>\n <div class=\"govuk-error-summary__body process-refund-font\">\n {{errorMessage.body}}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Review refund details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td colspan=\"2\">{{refundlistsource?.refund_reference}} ({{refundlistsource.amount | currency :'GBP':'symbol':'1.2-2' }})</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td colspan=\"2\">{{refundlistsource?.reason?.trim()}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount to be refunded</td>\n <td colspan=\"2\">{{refundlistsource?.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Sent to</td>\n <td colspan=\"2\">{{cpoDetails?.responsibleParty}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Sent via</td>\n <td colspan=\"2\">\n <div *ngIf=\"refundlistsource?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlistsource?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"refundlistsource?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlistsource?.contact_details?.address_line?.trim()}} {{refundlistsource?.contact_details?.city?.trim()}} {{refundlistsource?.contact_details?.county?.trim()}} {{refundlistsource?.contact_details?.country?.trim()}} {{refundlistsource?.contact_details?.postal_code?.trim()}}\n </div> \n </td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Submitted by</td>\n <td colspan=\"2\">{{refundlistsource?.user_full_name}}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date submitted</td>\n <td colspan=\"2\">{{refundlistsource?.date_created | date:'d MMMM yyyy' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Notification</td>\n <td>{{templateInstructionType}}</td>\n <td>\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link pointer right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link pointer right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n\n </tr>\n\n </tbody>\n </table>\n\n <app-notification-preview *ngIf=\"notificationPreview\" [paymentReference]=\"refundlistsource?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"refundlistsource?.contact_details\"\n [refundReason]=\"refundlistsource?.reason_code\" [refundAmount]=\"refundlistsource?.amount\"\n [refundReference]=\"refundlistsource?.refund_reference\"\n (notificationPreviewEvent) = \"getNotificationPreviewObj($event)\">\n </app-notification-preview>\n\n <div>\n </div>\n </div>\n <div class=\"process-refund__panel\">\n <form [formGroup]=\"processRefundForm\" novalidate>\n <div class=\"\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"sign-in-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-large\">\n What do you want to do with this refund?\n </h1>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundActionsHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundActionsHasError\">\n <span *ngIf=\"refundActionsHasError\">Please select an action</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundAction of refundActionList; let i = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundAction-{{i}}\" \n name=\"refundActionField\"\n type=\"radio\"\n formControlName=\"refundActionField\"\n (click)=\"checkRefundActions(refundAction.code)\"\n value=\"{{refundAction.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundAction-{{i}}\">\n {{refundAction.code}}\n </label>\n <div id=\"sign-in-item-hint\" class=\"govuk-hint govuk-radios__hint process-refund-font\">\n {{refundAction.label}}\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSendMeBackClicked}\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font\" for=\"contact-by-text\">\n Add a reason\n </label>\n <p class=\"inline-error-message\"\n *ngIf=\"isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError\">\n <span *ngIf=\"isReasonFieldEmpty\">Add a reason</span>\n <span *ngIf=\"isReasonFieldInvalid\">Add a valid reason</span>\n <span *ngIf=\"reasonFieldMinHasError\">Reason should be at least 3 characters.</span>\n <span *ngIf=\"reasonFieldMaxHasError\">Reason should be 255 characters or under.</span>\n </p>\n <textarea class=\"govuk-textarea govuk-!-width-one-third reason-font\"\n [ngClass]=\"{'inline-error-class': isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError}\"\n id=\"sendmeback\"\n name=\"sendMeBackField\" \n formControlName=\"sendMeBackField\"\n rows=\"5\"></textarea>\n \n </div>\n\n </div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div [ngClass]=\"{'govuk-radios__conditional--hidden': !isRejectClicked}\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h2 class=\"heading-medium\">\n Why are you rejecting this refund?\n </h2>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundRejectReasonHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundRejectReasonHasError\">\n <span *ngIf=\"refundRejectReasonHasError\">Please select a reject reason</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundRejectReason of refundRejectReasonList; let j = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundRejectReason-{{j}}\"\n formControlName=\"refundRejectReasonField\"\n name=\"refundRejectReasonField\"\n (click)=\"checkRefundActions(refundRejectReason.code)\"\n type=\"radio\" value=\"{{refundRejectReason.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundRejectReason-{{j}}\">\n {{refundRejectReason.name}}\n </label>\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isOtherClicked}\" id=\"conditional-contact-3\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font \" for=\"contact-by-text\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty || isReasonInvalid\">\n <span *ngIf=\"isReasonEmpty\">Enter reason.</span>\n <span *ngIf=\"isReasonInvalid\">Enter a valid reason</span>\n </p>\n <input class=\"govuk-input govuk-!-width-one-third reason-font\" id=\"otherReason\" \n [ngClass]=\"{'inline-error-class': isReasonEmpty || isReasonInvalid}\"\n formControlName=\"enterReasonField\" name=\"enterReasonField\" type=\"text\"></div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"redirecttoRefundListPage()\" class=\"govuk-button govuk-button--secondary marginright\"> Previous</button>\n <button (click)=\"processRefundSubmit()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit \n </button>\n <br/><br/>\n </div>\n \n <div *ngIf=\"!isFromRefundListPage\" class=\"govuk-button-group margin\">\n\n <p><a (click)=\"loadRefundsHomePage()\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n</div>\n</form>\n </div>\n \n\n </main>\n \n <main class=\"govuk-main-wrapper govuk-main-wrapper--l success-page-padding--top25\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSuccesspageEnable}\" id=\"main-content\" role=\"main\" >\n <div class=\"govuk-grid-row pagesize\">\n <div class=\"govuk-panel govuk-panel-refund--confirmation\">\n <h1 class=\"heading-refunds-xlarge\">\n {{successMsg}}\n </h1>\n </div>\n <p class=\"govuk-body process-refund-font\">\n <a href=\"Javascript:void(0)\" (click)=\"goToCaseReview()\" class=\"govuk-link pointer\">Return to case</a>\n </p>\n </div>\n </main>\n</div>\n</ng-container>\n\n", styles: [".tb-col-w{width:330px}.tr-border{border-bottom:2px solid}.payment-view-alignment{margin-left:30px}.govuk-button{float:left!important;font-size:19px;margin-top:2em!important}.remission{margin-bottom:7em}.process-refund-font{font-size:19px!important}.govuk-radios__conditional--hidden{display:none}.inline-error-message{color:#c11717;font-weight:700;margin-top:10px;border-color:#c11717}.inline-error-class{outline:3px solid #c11717;outline-offset:0;border-color:#c11717}.form-group-error{border-left:5px solid #c11717;padding-left:15px}.govuk-panel-refund--confirmation{color:#fff;background:#00703c}.process-refund__panel{margin-left:25px;margin-top:30px}.button-margin--left25{margin-left:25px}.success-page-padding--top25{padding-top:25px}.margin{margin-top:5em}.marginright{margin-right:1.5em}.govuk-textarea{line-height:2.25}.reason-font{font-size:19px!important}.pointer{cursor:pointer}.right{float:right}.pagesize{margin:2em;width:97%}.heading-refunds-xlarge{color:#fff;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:32px;line-height:1.09375;margin-top:.46875em;margin-bottom:.9375em}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.NotificationPreviewComponent, selector: "app-notification-preview", inputs: ["payment", "contactDetails", "refundReason", "refundAmount", "paymentReference", "refundReference", "previewJourney", "notificationSent"], outputs: ["notificationPreviewEvent"] }, { kind: "pipe", type: i7.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
405
|
-
}
|
|
406
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessRefundComponent, decorators: [{
|
|
407
|
-
type: Component,
|
|
408
|
-
args: [{ selector: 'ccpay-process-refund', template: "<ng-container *ngIf=\"viewStatus === 'RefundProcess'\">\n<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" [ngClass]=\"{'govuk-radios__conditional--hidden': isSuccesspageEnable}\" id=\"main-content\" role=\"main\">\n <div *ngIf=\"errorMessage.showError\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n {{errorMessage.title}}\n </h2>\n <div class=\"govuk-error-summary__body process-refund-font\">\n {{errorMessage.body}}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Review refund details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td colspan=\"2\">{{refundlistsource?.refund_reference}} ({{refundlistsource.amount | currency :'GBP':'symbol':'1.2-2' }})</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td colspan=\"2\">{{refundlistsource?.reason?.trim()}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount to be refunded</td>\n <td colspan=\"2\">{{refundlistsource?.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Sent to</td>\n <td colspan=\"2\">{{cpoDetails?.responsibleParty}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Sent via</td>\n <td colspan=\"2\">\n <div *ngIf=\"refundlistsource?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlistsource?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"refundlistsource?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlistsource?.contact_details?.address_line?.trim()}} {{refundlistsource?.contact_details?.city?.trim()}} {{refundlistsource?.contact_details?.county?.trim()}} {{refundlistsource?.contact_details?.country?.trim()}} {{refundlistsource?.contact_details?.postal_code?.trim()}}\n </div> \n </td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Submitted by</td>\n <td colspan=\"2\">{{refundlistsource?.user_full_name}}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date submitted</td>\n <td colspan=\"2\">{{refundlistsource?.date_created | date:'d MMMM yyyy' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Notification</td>\n <td>{{templateInstructionType}}</td>\n <td>\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link pointer right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link pointer right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n\n </tr>\n\n </tbody>\n </table>\n\n <app-notification-preview *ngIf=\"notificationPreview\" [paymentReference]=\"refundlistsource?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"refundlistsource?.contact_details\"\n [refundReason]=\"refundlistsource?.reason_code\" [refundAmount]=\"refundlistsource?.amount\"\n [refundReference]=\"refundlistsource?.refund_reference\"\n (notificationPreviewEvent) = \"getNotificationPreviewObj($event)\">\n </app-notification-preview>\n\n <div>\n </div>\n </div>\n <div class=\"process-refund__panel\">\n <form [formGroup]=\"processRefundForm\" novalidate>\n <div class=\"\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"sign-in-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-large\">\n What do you want to do with this refund?\n </h1>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundActionsHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundActionsHasError\">\n <span *ngIf=\"refundActionsHasError\">Please select an action</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundAction of refundActionList; let i = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundAction-{{i}}\" \n name=\"refundActionField\"\n type=\"radio\"\n formControlName=\"refundActionField\"\n (click)=\"checkRefundActions(refundAction.code)\"\n value=\"{{refundAction.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundAction-{{i}}\">\n {{refundAction.code}}\n </label>\n <div id=\"sign-in-item-hint\" class=\"govuk-hint govuk-radios__hint process-refund-font\">\n {{refundAction.label}}\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSendMeBackClicked}\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font\" for=\"contact-by-text\">\n Add a reason\n </label>\n <p class=\"inline-error-message\"\n *ngIf=\"isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError\">\n <span *ngIf=\"isReasonFieldEmpty\">Add a reason</span>\n <span *ngIf=\"isReasonFieldInvalid\">Add a valid reason</span>\n <span *ngIf=\"reasonFieldMinHasError\">Reason should be at least 3 characters.</span>\n <span *ngIf=\"reasonFieldMaxHasError\">Reason should be 255 characters or under.</span>\n </p>\n <textarea class=\"govuk-textarea govuk-!-width-one-third reason-font\"\n [ngClass]=\"{'inline-error-class': isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError}\"\n id=\"sendmeback\"\n name=\"sendMeBackField\" \n formControlName=\"sendMeBackField\"\n rows=\"5\"></textarea>\n \n </div>\n\n </div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div [ngClass]=\"{'govuk-radios__conditional--hidden': !isRejectClicked}\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h2 class=\"heading-medium\">\n Why are you rejecting this refund?\n </h2>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundRejectReasonHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundRejectReasonHasError\">\n <span *ngIf=\"refundRejectReasonHasError\">Please select a reject reason</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundRejectReason of refundRejectReasonList; let j = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundRejectReason-{{j}}\"\n formControlName=\"refundRejectReasonField\"\n name=\"refundRejectReasonField\"\n (click)=\"checkRefundActions(refundRejectReason.code)\"\n type=\"radio\" value=\"{{refundRejectReason.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundRejectReason-{{j}}\">\n {{refundRejectReason.name}}\n </label>\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isOtherClicked}\" id=\"conditional-contact-3\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font \" for=\"contact-by-text\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty || isReasonInvalid\">\n <span *ngIf=\"isReasonEmpty\">Enter reason.</span>\n <span *ngIf=\"isReasonInvalid\">Enter a valid reason</span>\n </p>\n <input class=\"govuk-input govuk-!-width-one-third reason-font\" id=\"otherReason\" \n [ngClass]=\"{'inline-error-class': isReasonEmpty || isReasonInvalid}\"\n formControlName=\"enterReasonField\" name=\"enterReasonField\" type=\"text\"></div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"redirecttoRefundListPage()\" class=\"govuk-button govuk-button--secondary marginright\"> Previous</button>\n <button (click)=\"processRefundSubmit()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit \n </button>\n <br/><br/>\n </div>\n \n <div *ngIf=\"!isFromRefundListPage\" class=\"govuk-button-group margin\">\n\n <p><a (click)=\"loadRefundsHomePage()\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n</div>\n</form>\n </div>\n \n\n </main>\n \n <main class=\"govuk-main-wrapper govuk-main-wrapper--l success-page-padding--top25\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSuccesspageEnable}\" id=\"main-content\" role=\"main\" >\n <div class=\"govuk-grid-row pagesize\">\n <div class=\"govuk-panel govuk-panel-refund--confirmation\">\n <h1 class=\"heading-refunds-xlarge\">\n {{successMsg}}\n </h1>\n </div>\n <p class=\"govuk-body process-refund-font\">\n <a href=\"Javascript:void(0)\" (click)=\"goToCaseReview()\" class=\"govuk-link pointer\">Return to case</a>\n </p>\n </div>\n </main>\n</div>\n</ng-container>\n\n", styles: [".tb-col-w{width:330px}.tr-border{border-bottom:2px solid}.payment-view-alignment{margin-left:30px}.govuk-button{float:left!important;font-size:19px;margin-top:2em!important}.remission{margin-bottom:7em}.process-refund-font{font-size:19px!important}.govuk-radios__conditional--hidden{display:none}.inline-error-message{color:#c11717;font-weight:700;margin-top:10px;border-color:#c11717}.inline-error-class{outline:3px solid #c11717;outline-offset:0;border-color:#c11717}.form-group-error{border-left:5px solid #c11717;padding-left:15px}.govuk-panel-refund--confirmation{color:#fff;background:#00703c}.process-refund__panel{margin-left:25px;margin-top:30px}.button-margin--left25{margin-left:25px}.success-page-padding--top25{padding-top:25px}.margin{margin-top:5em}.marginright{margin-right:1.5em}.govuk-textarea{line-height:2.25}.reason-font{font-size:19px!important}.pointer{cursor:pointer}.right{float:right}.pagesize{margin:2em;width:97%}.heading-refunds-xlarge{color:#fff;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:32px;line-height:1.09375;margin-top:.46875em;margin-bottom:.9375em}\n"] }]
|
|
409
|
-
}], ctorParameters: () => [{ type: i1.RefundsService }, { type: i2.PaymentViewService }, { type: i3.FormBuilder }, { type: i4.OrderslistService }, { type: i5.NotificationService }, { type: undefined, decorators: [{
|
|
410
|
-
type: Inject,
|
|
411
|
-
args: ['PAYMENT_LIB']
|
|
412
|
-
}] }, { type: i6.Router }, { type: i6.ActivatedRoute }], propDecorators: { refundReference: [{
|
|
413
|
-
type: Input
|
|
414
|
-
}], refundlistsource: [{
|
|
415
|
-
type: Input
|
|
416
|
-
}] } });
|
|
417
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1yZWZ1bmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF5bWVudC1saWIvc3JjL2xpYi9jb21wb25lbnRzL3Byb2Nlc3MtcmVmdW5kL3Byb2Nlc3MtcmVmdW5kLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9wcm9jZXNzLXJlZnVuZC9wcm9jZXNzLXJlZnVuZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBS3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRXRGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFTekQsTUFBTSxPQUFPLHNCQUFzQjtJQW1DYjtJQUNWO0lBQ0E7SUFDQTtJQUNBO0lBQ3VCO0lBQ3ZCO0lBQ0E7SUF6Q0QsZUFBZSxDQUFTO0lBQ3hCLGdCQUFnQixDQUFjO0lBRXZDLGlCQUFpQixDQUFZO0lBRTdCLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsR0FBVyxJQUFJLENBQUM7SUFD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S0FBSyxDQUFDO0lBQ25DLENBQUM7d0dBdFpVLHNCQUFzQixpTEF3Q3ZCLGFBQWE7NEZBeENaLHNCQUFzQixrSkNwQm5DLGkvVUFrT0E7OzRGRDlNYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usc0JBQXNCOzswQkE0QzdCLE1BQU07MkJBQUMsYUFBYTsyRkF2Q2QsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZWZ1bmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlZnVuZHMvcmVmdW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IElSZWZ1bmRBY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRBY3Rpb24nO1xuaW1wb3J0IHsgSVJlZnVuZExpc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRMaXN0JztcbmltcG9ydCB7IElQYXltZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQgeyBJUmVmdW5kUmVqZWN0UmVhc29uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kUmVqZWN0UmVhc29uJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElOb3RpZmljYXRpb25QcmV2aWV3IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JTm90aWZpY2F0aW9uUHJldmlldyc7XG50eXBlIFBheW1lbnRMaWJBbGlhcyA9IFBheW1lbnRMaWJDb21wb25lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXByb2Nlc3MtcmVmdW5kJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2Nlc3MtcmVmdW5kLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvY2Vzcy1yZWZ1bmQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NSZWZ1bmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgQElucHV0KCkgcmVmdW5kbGlzdHNvdXJjZTogSVJlZnVuZExpc3Q7XG5cbiAgcHJvY2Vzc1JlZnVuZEZvcm06IEZvcm1Hcm91cDtcblxuICBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShmYWxzZSwgJycsICcnLCAnJyk7XG4gIHNlbmRtZWJhY2s6IHN0cmluZyA9IG51bGw7XG4gIHZpZXdTdGF0dXM6IHN0cmluZztcbiAgcmVmdW5kQWN0aW9uTGlzdDogSVJlZnVuZEFjdGlvbltdID0gW107XG4gIHJlZnVuZFJlamVjdFJlYXNvbkxpc3Q6IElSZWZ1bmRSZWplY3RSZWFzb25bXSA9IFtdO1xuICBpc1NlbmRNZUJhY2tDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVqZWN0Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc090aGVyQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1N1Y2Nlc3NwYWdlRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVmdW5kQWN0aW9uc0hhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRmllbGRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkZpZWxkSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZWFzb25GaWVsZE1pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlYXNvbkZpZWxkTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3VjY2Vzc01zZzogc3RyaW5nID0gbnVsbDtcbiAgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBpc0Zyb21SZWZ1bmRMaXN0UGFnZTogYm9vbGVhbjtcbiAgY3BvRGV0YWlsczphbnkgPSBbXTtcbiAgaXNDUE9Eb3duOiBib29sZWFuO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIHBheW1lbnRPYmo6IElQYXltZW50O1xuICB0ZW1wbGF0ZUluc3RydWN0aW9uVHlwZTogc3RyaW5nO1xuICBub3RpZmljYXRpb25QcmV2aWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG5vdGlmaWNhdGlvblByZXZpZXdPYmo6IElOb3RpZmljYXRpb25QcmV2aWV3O1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIFJlZnVuZHNTZXJ2aWNlOiBSZWZ1bmRzU2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBASW5qZWN0KCdQQVlNRU5UX0xJQicpIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkFsaWFzLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdSZWZ1bmRQcm9jZXNzJztcbiAgICB0aGlzLlJlZnVuZHNTZXJ2aWNlLmdldFJlZnVuZEFjdGlvbnModGhpcy5yZWZ1bmRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHJlZnVuZEFjdGlvbkxpc3QgPT4ge1xuICAgICAgICB0aGlzLnJlZnVuZEFjdGlvbkxpc3QgPSA8YW55PnJlZnVuZEFjdGlvbkxpc3Q7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlLCBlcnIuc3RhdHVzQ29kZSwgZXJyLmVyciwgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucHJvY2Vzc1JlZnVuZEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHJlZnVuZEFjdGlvbkZpZWxkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0pKSxcbiAgICAgIHJlZnVuZFJlamVjdFJlYXNvbkZpZWxkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0pKSxcbiAgICAgIHNlbmRNZUJhY2tGaWVsZDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxccyxcXFxcLl0qKSQnKSxcblxuICAgICAgXSkpLFxuICAgICAgZW50ZXJSZWFzb25GaWVsZDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMCksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05LlxcXFxzXSopJCcpLFxuICAgICAgXSkpLFxuICAgIH0pO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucmVmdW5kbGlzdHNvdXJjZS5jY2RfY2FzZV9udW1iZXI7XG5cbiAgICBpZigodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ3N0cmluZycgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSAnZmFsc2UnKSB8fCAodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2Jvb2xlYW4nICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQpICkge1xuICAgICAgdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBhcnR5RGV0YWlscyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5jcG9EZXRhaWxzID0gSlNPTi5wYXJzZShyZXNwb25zZSkuY29udGVudFswXTtcblxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgICAgdGhpcy5pc0NQT0Rvd24gPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdHNvdXJjZS5wYXltZW50X3JlZmVyZW5jZSk7XG4gIH1cblxuICBjaGVja1JlZnVuZEFjdGlvbnMoY29kZTogc3RyaW5nKSB7XG4gICAgdGhpcy5yZWZ1bmRBY3Rpb25zSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRmllbGRFbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25JbnZhbGlkID0gZmFsc2U7XG4gICAgdGhpcy5yZWZ1bmRSZWplY3RSZWFzb25IYXNFcnJvciA9IGZhbHNlO1xuICAgIGlmIChjb2RlID09PSAnUmV0dXJuIHRvIGNhc2V3b3JrZXInKSB7XG4gICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNTZW5kTWVCYWNrQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzUmVqZWN0Q2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc090aGVyQ2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgfSBlbHNlIGlmIChjb2RlID09PSAnQXBwcm92ZScpIHtcbiAgICAgIHRoaXMuaXNTZW5kTWVCYWNrQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc1JlamVjdENsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNPdGhlckNsaWNrZWQgPSBmYWxzZTtcblxuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gJ1JlamVjdCcpIHtcbiAgICAgIHRoaXMuaXNSZWplY3RDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNTZW5kTWVCYWNrQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc090aGVyQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5SZWZ1bmRzU2VydmljZS5nZXRSZWZ1bmRSZWplY3RSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRSZWplY3RSZWFzb25MaXN0ID0+IHtcbiAgICAgICAgICB0aGlzLnJlZnVuZFJlamVjdFJlYXNvbkxpc3QgPSA8YW55PnJlZnVuZFJlamVjdFJlYXNvbkxpc3Q7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlLCBlcnIuc3RhdHVzQ29kZSwgZXJyLmVyciwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09ICdSRTAwNScpIHtcbiAgICAgIHRoaXMuaXNPdGhlckNsaWNrZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY29kZSAhPT0gJ1JFMDA1Jykge1xuICAgICAgdGhpcy5pc090aGVyQ2xpY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldE5vdGlmaWNhdGlvblByZXZpZXdPYmoobm90aWZpY2F0aW9uUHJldmlld09iajogSU5vdGlmaWNhdGlvblByZXZpZXcpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmogPSBub3RpZmljYXRpb25QcmV2aWV3T2JqO1xuICB9XG5cbiAgcHJvY2Vzc1JlZnVuZFN1Ym1pdCgpIHtcbiAgICBsZXQgcHJvY2Vzc1JlZnVuZFJlcXVlc3Q7XG4gICAgbGV0IHN0YXR1cztcbiAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FsbCcpO1xuICAgIGNvbnN0IGNvbnRyb2xzID0gdGhpcy5wcm9jZXNzUmVmdW5kRm9ybS5jb250cm9scztcbiAgICBjb25zdCBwcm9jZXNzRm9ybUVycm9yID0gY29udHJvbHMuc2VuZE1lQmFja0ZpZWxkLmVycm9ycztcblxuICAgIGlmICh0aGlzLnByb2Nlc3NSZWZ1bmRGb3JtLmRpcnR5ICYmIGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbGlkXG4gICAgICAmJiAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT0gJ0FwcHJvdmUnXG4gICAgICAgIHx8IChjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSAnUmVqZWN0JyAmJiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWxpZCAmJiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWx1ZSAhPSAnUkUwMDUnKVxuICAgICAgICB8fCAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT0gJ1JlamVjdCcgJiYgY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgPT0gJ1JFMDA1JyAmJiBjb250cm9scy5lbnRlclJlYXNvbkZpZWxkLnZhbGlkKVxuICAgICAgICB8fCAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT0gJ1JldHVybiB0byBjYXNld29ya2VyJyAmJiBjb250cm9scy5zZW5kTWVCYWNrRmllbGQudmFsaWQpKSkge1xuICAgICAgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09PSAnQXBwcm92ZScpIHtcbiAgICAgICAgc3RhdHVzID0gJ0FQUFJPVkUnO1xuICAgICAgICBpZiAodGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqKSB7XG4gICAgICAgICAgcHJvY2Vzc1JlZnVuZFJlcXVlc3QgPSB7XG4gICAgICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgICAgIHJlYXNvbjogJycsXG4gICAgICAgICAgICB0ZW1wbGF0ZV9wcmV2aWV3OiB7XG4gICAgICAgICAgICAgIGJvZHk6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5ib2R5LFxuICAgICAgICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgICAgICAgZnJvbV9lbWFpbF9hZGRyZXNzOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouZnJvbS5mcm9tX2VtYWlsX2FkZHJlc3MsXG4gICAgICAgICAgICAgICAgZnJvbV9tYWlsX2FkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3NfbGluZTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmZyb20uZnJvbV9tYWlsX2FkZHJlc3MuYWRkcmVzc19saW5lLFxuICAgICAgICAgICAgICAgICAgY2l0eTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmZyb20uZnJvbV9tYWlsX2FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5mcm9tLmZyb21fbWFpbF9hZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICAgICAgICBjb3VudHk6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5mcm9tLmZyb21fbWFpbF9hZGRyZXNzLmNvdW50eSxcbiAgICAgICAgICAgICAgICAgIHBvc3RhbF9jb2RlOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouZnJvbS5mcm9tX21haWxfYWRkcmVzcy5wb3N0YWxfY29kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbDogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmh0bWwsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmoudGVtcGxhdGVfaWQsXG4gICAgICAgICAgICAgIHN1YmplY3Q6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5zdWJqZWN0LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmoudGVtcGxhdGVfdHlwZSxcbiAgICAgICAgICAgICAgdmVyc2lvbjogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGNvZGU6ICcnLFxuICAgICAgICAgICAgcmVhc29uOiAnJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT09ICdSZWplY3QnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdSRUpFQ1QnO1xuXG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmopIHtcbiAgICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGNvZGU6IGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID8gY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgOiAnJyxcbiAgICAgICAgICAgIHJlYXNvbjogY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgPT0gJ1JFMDA1JyA/IGNvbnRyb2xzLmVudGVyUmVhc29uRmllbGQudmFsdWUgOiAnJyxcbiAgICAgICAgICAgIHRlbXBsYXRlX3ByZXZpZXc6IHtcbiAgICAgICAgICAgICAgYm9keTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmJvZHksXG4gICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICBmcm9tX2VtYWlsX2FkZHJlc3M6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5mcm9tLmZyb21fZW1haWxfYWRkcmVzcyxcbiAgICAgICAgICAgICAgICBmcm9tX21haWxfYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzc19saW5lOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouZnJvbS5mcm9tX21haWxfYWRkcmVzcy5hZGRyZXNzX2xpbmUsXG4gICAgICAgICAgICAgICAgICBjaXR5OiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouZnJvbS5mcm9tX21haWxfYWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgICAgICAgY291bnRyeTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmZyb20uZnJvbV9tYWlsX2FkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgICAgIGNvdW50eTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmZyb20uZnJvbV9tYWlsX2FkZHJlc3MuY291bnR5LFxuICAgICAgICAgICAgICAgICAgcG9zdGFsX2NvZGU6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5mcm9tLmZyb21fbWFpbF9hZGRyZXNzLnBvc3RhbF9jb2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBodG1sOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouaHRtbCxcbiAgICAgICAgICAgICAgaWQ6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai50ZW1wbGF0ZV9pZCxcbiAgICAgICAgICAgICAgc3ViamVjdDogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLnN1YmplY3QsXG4gICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGU6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai50ZW1wbGF0ZV90eXBlLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGNvZGU6IGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID8gY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgOiAnJyxcbiAgICAgICAgICAgIHJlYXNvbjogY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgPT0gJ1JFMDA1JyA/IGNvbnRyb2xzLmVudGVyUmVhc29uRmllbGQudmFsdWUgOiAnJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09PSAnUmV0dXJuIHRvIGNhc2V3b3JrZXInKSB7XG4gICAgICAgIHN0YXR1cyA9ICdTRU5EQkFDSyc7XG5cbiAgICAgICAgaWYgKHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iaikge1xuICAgICAgICAgIHByb2Nlc3NSZWZ1bmRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgY29kZTogJycsXG4gICAgICAgICAgICByZWFzb246IGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWx1ZSxcbiAgICAgICAgICAgIHRlbXBsYXRlX3ByZXZpZXc6IHtcbiAgICAgICAgICAgICAgYm9keTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmJvZHksXG4gICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICBmcm9tX2VtYWlsX2FkZHJlc3M6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5mcm9tLmZyb21fZW1haWxfYWRkcmVzcyxcbiAgICAgICAgICAgICAgICBmcm9tX21haWxfYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzc19saW5lOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouZnJvbS5mcm9tX21haWxfYWRkcmVzcy5hZGRyZXNzX2xpbmUsXG4gICAgICAgICAgICAgICAgICBjaXR5OiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouZnJvbS5mcm9tX21haWxfYWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgICAgICAgY291bnRyeTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmZyb20uZnJvbV9tYWlsX2FkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgICAgIGNvdW50eTogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLmZyb20uZnJvbV9tYWlsX2FkZHJlc3MuY291bnR5LFxuICAgICAgICAgICAgICAgICAgcG9zdGFsX2NvZGU6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai5mcm9tLmZyb21fbWFpbF9hZGRyZXNzLnBvc3RhbF9jb2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBodG1sOiB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXdPYmouaHRtbCxcbiAgICAgICAgICAgICAgaWQ6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai50ZW1wbGF0ZV9pZCxcbiAgICAgICAgICAgICAgc3ViamVjdDogdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3T2JqLnN1YmplY3QsXG4gICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGU6IHRoaXMubm90aWZpY2F0aW9uUHJldmlld09iai50ZW1wbGF0ZV90eXBlLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGNvZGU6ICcnLFxuICAgICAgICAgICAgcmVhc29uOiBjb250cm9scy5zZW5kTWVCYWNrRmllbGQudmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH1cblxuXG4gICAgICB9XG4gICAgICB0aGlzLlJlZnVuZHNTZXJ2aWNlLnBhdGNoUmVmdW5kQWN0aW9ucyhwcm9jZXNzUmVmdW5kUmVxdWVzdCwgdGhpcy5yZWZ1bmRSZWZlcmVuY2UsIHN0YXR1cykuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Y2Nlc3NwYWdlRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgICAvLyB0aGlzLnN1Y2Nlc3NNc2cgPSBKU09OLnBhcnNlKHJlc3BvbnNlKVsnZGF0YSddO1xuICAgICAgICAgIHRoaXMuc3VjY2Vzc01zZyA9IHJlc3BvbnNlLnJlcGxhY2UoL1snXCJdKy9nLCAnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlLCBlcnIuc3RhdHVzQ29kZSwgZXJyLmVyciwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZWplY3QnICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlamVjdFJlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZXR1cm4gdG8gY2FzZXdvcmtlcicpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWx1ZSA9PSAnJykge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhZGRBcmVhc29uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWx1ZSAhPSAnJyAmJiBjb250cm9scy5zZW5kTWVCYWNrRmllbGQuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhZGRBcmVhc29uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3NGb3JtRXJyb3IgJiYgcHJvY2Vzc0Zvcm1FcnJvci5taW5sZW5ndGggJiYgcHJvY2Vzc0Zvcm1FcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMykge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhZGRBcmVhc29uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3NGb3JtRXJyb3IgJiYgcHJvY2Vzc0Zvcm1FcnJvci5tYXhsZW5ndGggJiYgcHJvY2Vzc0Zvcm1FcnJvci5tYXhsZW5ndGguYWN0dWFsTGVuZ3RoID4gMjU1KSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2FkZEFyZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZWplY3QnICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID09ICdSRTAwNScpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xzLmVudGVyUmVhc29uRmllbGQudmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnZW50ZXJSZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbHMuZW50ZXJSZWFzb25GaWVsZC52YWx1ZSAhPT0gXCJcIiAmJiBjb250cm9scy5lbnRlclJlYXNvbkZpZWxkLmludmFsaWQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAnZW50ZXJSZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG4gIGdldEVycm9yTWVzc2FnZShpc0Vycm9yRXhpc3QsIHN0YXR1cywgZXJyb3JNc2csIGVycikge1xuICAgIGxldCBib2R5VHh0ID0gJ1BsZWFzZSB0cnkgYWdhaW4gbGF0ZXInO1xuICAgIGlmIChzdGF0dXMgIT09IDUwMCkge1xuICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYm9keVR4dCA9IGVycm9yTXNnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm9keVR4dCA9IGVycjtcbiAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6ICdTb21ldGhpbmcgd2VudCB3cm9uZycsXG4gICAgICBib2R5OiBib2R5VHh0LFxuICAgICAgc2hvd0Vycm9yOiBpc0Vycm9yRXhpc3RcbiAgICB9O1xuICB9XG4gIGxvYWRSZWZ1bmRMaXN0UGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG5hdmlnYXRpb25QYWdlVmFsdWUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMubmF2aWdhdGlvbnBhZ2UgPSBkYXRhKTtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9ucGFnZSA9PT0gJ2Nhc2V0cmFuc2FjdGlvbnMnKSB7XG4gICAgICAvLyB3aW5kb3cubG9jYXRpb24uaHJlZj0nL3JlZnVuZC1saXN0P3Rha2VQYXltZW50PWZhbHNlJnJlZnVuZGxpc3Q9dHJ1ZSc7XG4gICAgICAvLyAvLyB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICAvLyAvLyB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIC8vIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgfVxuICB9XG4gIGxvYWRSZWZ1bmRzSG9tZVBhZ2UoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdzdHJpbmcnICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy93aW5kb3cubG9jYXRpb24uaHJlZj0nL3JlZnVuZC1saXN0P3Rha2VQYXltZW50PWZhbHNlJnJlZnVuZGxpc3Q9dHJ1ZSc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kLWxpc3QnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKGZhbHNlKTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5WSUVXID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJlZGlyZWN0dG9SZWZ1bmRMaXN0UGFnZSgpIHtcbiAgICBpZiAoKHR5cGVvZiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdzdHJpbmcnICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2ZhbHNlJykgfHwgKHR5cGVvZiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdib29sZWFuJyAmJiAhdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UKSkge1xuICAgICAgLy8gd2luZG93LmxvY2F0aW9uLmhyZWY9Jy9yZWZ1bmQtbGlzdD90YWtlUGF5bWVudD1mYWxzZSZyZWZ1bmRsaXN0PXRydWUnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZC1saXN0JztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmxvYWRSZWZ1bmRMaXN0UGFnZSgpO1xuICAgIH1cbiAgfVxuICBsb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcgPSBmYWxzZTtcbiAgfVxuXG4gIHJlc2V0Rm9ybSh2YWxzLCBmaWVsZCkge1xuICAgIGlmIChmaWVsZCA9PT0gJ2FjdGlvbicgfHwgZmllbGQgPT09ICdhbGwnKSB7XG4gICAgICB0aGlzLnJlZnVuZEFjdGlvbnNIYXNFcnJvciA9IHZhbHNbMF07XG4gICAgfVxuICAgIGlmIChmaWVsZCA9PT0gJ3JlamVjdFJlYXNvbicgfHwgZmllbGQgPT09ICdhbGwnKSB7XG4gICAgICB0aGlzLnJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yID0gdmFsc1sxXTtcbiAgICB9XG4gICAgaWYgKGZpZWxkID09PSAnYWRkQXJlYXNvbicgfHwgZmllbGQgPT09ICdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRmllbGRFbXB0eSA9IHZhbHNbMl07XG4gICAgICB0aGlzLmlzUmVhc29uRmllbGRJbnZhbGlkID0gdmFsc1szXTtcbiAgICAgIHRoaXMucmVhc29uRmllbGRNaW5IYXNFcnJvciA9IHZhbHNbNF07XG4gICAgICB0aGlzLnJlYXNvbkZpZWxkTWF4SGFzRXJyb3IgPSB2YWxzWzVdO1xuICAgIH1cbiAgICBpZiAoZmllbGQgPT09ICdlbnRlclJlYXNvbicgfHwgZmllbGQgPT09ICdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxzWzZdO1xuICAgICAgdGhpcy5pc1JlYXNvbkludmFsaWQgPSB2YWxzWzddO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9DYXNlUmV2aWV3KCkge1xuICAgIGNvbnN0IGlzUGF5QnViYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheUJ1YmJsZTtcbiAgICBpZiAoaXNQYXlCdWJibGUpIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7dGhpcy5jY2RDYXNlTnVtYmVyfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUocGF5bWVudDogSVBheW1lbnQsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgaWYgKHBheW1lbnQgPT0gdW5kZWZpbmVkIHx8IHBheW1lbnQgPT0gbnVsbCB8fCBwYXltZW50LnJlZmVyZW5jZSAhPSBwYXltZW50UmVmZXJlbmNlKSB7XG5cbiAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnREZXRhaWxzKHBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50T2JqID0gcGF5bWVudDtcbiAgICAgICAgICB0aGlzLnBheW1lbnRPYmoucmVmZXJlbmNlID0gcGF5bWVudFJlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldE5vdGlmaWNhdGlvbkluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmouY2hhbm5lbCwgdGhpcy5wYXltZW50T2JqLm1ldGhvZCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZUluc3RydWN0aW9uVHlwZSA9ICdUZW1wbGF0ZSc7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbnN0cnVjdGlvblR5cGUgPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uSW5zdHJ1Y3Rpb25UeXBlKHBheW1lbnQuY2hhbm5lbCwgcGF5bWVudC5tZXRob2QpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25QcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXcgPSBmYWxzZTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdSZWZ1bmRQcm9jZXNzJ1wiPlxuPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuXG4gIDxtYWluIGNsYXNzPVwiZ292dWstbWFpbi13cmFwcGVyIGdvdnVrLSEtcGFkZGluZy10b3AtMFwiIFtuZ0NsYXNzXT1cInsnZ292dWstcmFkaW9zX19jb25kaXRpb25hbC0taGlkZGVuJzogaXNTdWNjZXNzcGFnZUVuYWJsZX1cIiBpZD1cIm1haW4tY29udGVudFwiIHJvbGU9XCJtYWluXCI+XG4gICAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZS5zaG93RXJyb3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICB7e2Vycm9yTWVzc2FnZS50aXRsZX19XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5IHByb2Nlc3MtcmVmdW5kLWZvbnRcIj5cbiAgICAgICAgICB7e2Vycm9yTWVzc2FnZS5ib2R5fX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LXZpZXctYWxpZ25tZW50XCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZSBnb3Z1ay0hLW1hcmdpbi10b3AtMFwiPlJldmlldyByZWZ1bmQgZGV0YWlsczwvaDE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0Ym9keT5cblxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgdG8gYmUgcmVmdW5kZWQ8L3RkPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPnt7cmVmdW5kbGlzdHNvdXJjZT8ucmVmdW5kX3JlZmVyZW5jZX19ICh7e3JlZnVuZGxpc3Rzb3VyY2UuYW1vdW50ICB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInICB9fSk8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlJlYXNvbiBmb3IgcmVmdW5kPC90ZD5cbiAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIj57e3JlZnVuZGxpc3Rzb3VyY2U/LnJlYXNvbj8udHJpbSgpfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+QW1vdW50IHRvIGJlIHJlZnVuZGVkPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPnt7cmVmdW5kbGlzdHNvdXJjZT8uYW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMicgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlNlbnQgdG88L3RkPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPnt7Y3BvRGV0YWlscz8ucmVzcG9uc2libGVQYXJ0eX19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5TZW50IHZpYTwvdGQ+XG4gICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInJlZnVuZGxpc3Rzb3VyY2U/LmNvbnRhY3RfZGV0YWlscz8ubm90aWZpY2F0aW9uX3R5cGUgPT09ICdFTUFJTCdcIiBjbGFzcz1cImNvbnRhY3REZXRhaWxzLXdpZHRoIGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICAgICAgICA8c3Ryb25nPkVtYWlsPC9zdHJvbmc+XG4gICAgICAgICAgICA8YnIvPlxuICAgICAgICAgICAge3tyZWZ1bmRsaXN0c291cmNlPy5jb250YWN0X2RldGFpbHM/LmVtYWlsPy50cmltKCl9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZWZ1bmRsaXN0c291cmNlPy5jb250YWN0X2RldGFpbHM/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnTEVUVEVSJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+UG9zdDwvc3Ryb25nPlxuICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgIHt7cmVmdW5kbGlzdHNvdXJjZT8uY29udGFjdF9kZXRhaWxzPy5hZGRyZXNzX2xpbmU/LnRyaW0oKX19IHt7cmVmdW5kbGlzdHNvdXJjZT8uY29udGFjdF9kZXRhaWxzPy5jaXR5Py50cmltKCl9fSB7e3JlZnVuZGxpc3Rzb3VyY2U/LmNvbnRhY3RfZGV0YWlscz8uY291bnR5Py50cmltKCl9fSB7e3JlZnVuZGxpc3Rzb3VyY2U/LmNvbnRhY3RfZGV0YWlscz8uY291bnRyeT8udHJpbSgpfX0ge3tyZWZ1bmRsaXN0c291cmNlPy5jb250YWN0X2RldGFpbHM/LnBvc3RhbF9jb2RlPy50cmltKCl9fVxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+U3VibWl0dGVkIGJ5PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPnt7cmVmdW5kbGlzdHNvdXJjZT8udXNlcl9mdWxsX25hbWV9fTwvdGQ+XG5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPkRhdGUgc3VibWl0dGVkPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPnt7cmVmdW5kbGlzdHNvdXJjZT8uZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZCBNTU1NIHl5eXknIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5Ob3RpZmljYXRpb248L3RkPlxuICAgICAgICAgIDx0ZD57e3RlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlfX08L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxhICpuZ0lmPVwiIW5vdGlmaWNhdGlvblByZXZpZXdcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHBvaW50ZXIgcmlnaHRcIiAoY2xpY2spPVwic2hvd05vdGlmaWNhdGlvblByZXZpZXcoKVwiPlxuICAgICAgICAgICAgICBQcmV2aWV3XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YSAqbmdJZj1cIm5vdGlmaWNhdGlvblByZXZpZXdcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHBvaW50ZXIgcmlnaHRcIiAoY2xpY2spPVwiaGlkZU5vdGlmaWNhdGlvblByZXZpZXcoKVwiPlxuICAgICAgICAgICAgICBIaWRlIFByZXZpZXdcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC90ZD5cblxuICAgICAgPC90cj5cblxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPGFwcC1ub3RpZmljYXRpb24tcHJldmlldyAqbmdJZj1cIm5vdGlmaWNhdGlvblByZXZpZXdcIiBbcGF5bWVudFJlZmVyZW5jZV09XCJyZWZ1bmRsaXN0c291cmNlPy5wYXltZW50X3JlZmVyZW5jZVwiXG4gICAgICAgIFtwYXltZW50XT1cInBheW1lbnRPYmpcIlxuICAgICAgICBbY29udGFjdERldGFpbHNdPVwicmVmdW5kbGlzdHNvdXJjZT8uY29udGFjdF9kZXRhaWxzXCJcbiAgICAgICAgW3JlZnVuZFJlYXNvbl09XCJyZWZ1bmRsaXN0c291cmNlPy5yZWFzb25fY29kZVwiIFtyZWZ1bmRBbW91bnRdPVwicmVmdW5kbGlzdHNvdXJjZT8uYW1vdW50XCJcbiAgICAgICAgW3JlZnVuZFJlZmVyZW5jZV09XCJyZWZ1bmRsaXN0c291cmNlPy5yZWZ1bmRfcmVmZXJlbmNlXCJcbiAgICAgICAgKG5vdGlmaWNhdGlvblByZXZpZXdFdmVudCkgPSBcImdldE5vdGlmaWNhdGlvblByZXZpZXdPYmooJGV2ZW50KVwiPlxuICAgICAgPC9hcHAtbm90aWZpY2F0aW9uLXByZXZpZXc+XG5cbiAgICAgIDxkaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHJvY2Vzcy1yZWZ1bmRfX3BhbmVsXCI+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInByb2Nlc3NSZWZ1bmRGb3JtXCIgbm92YWxpZGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzaWduLWluLWhpbnRcIj5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1sXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+XG4gICAgICAgICAgICAgIFdoYXQgZG8geW91IHdhbnQgdG8gZG8gd2l0aCB0aGlzIHJlZnVuZD9cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc1wiICBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiByZWZ1bmRBY3Rpb25zSGFzRXJyb3J9XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICpuZ0lmPVwicmVmdW5kQWN0aW9uc0hhc0Vycm9yXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlZnVuZEFjdGlvbnNIYXNFcnJvclwiPlBsZWFzZSBzZWxlY3QgYW4gYWN0aW9uPC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgcmVmdW5kQWN0aW9uIG9mIHJlZnVuZEFjdGlvbkxpc3Q7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBcbiAgICAgICAgICAgICAgaWQ9XCJyZWZ1bmRBY3Rpb24te3tpfX1cIiBcbiAgICAgICAgICAgICAgbmFtZT1cInJlZnVuZEFjdGlvbkZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVmdW5kQWN0aW9uRmllbGRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2hlY2tSZWZ1bmRBY3Rpb25zKHJlZnVuZEFjdGlvbi5jb2RlKVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7e3JlZnVuZEFjdGlvbi5jb2RlfX1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbCBwcm9jZXNzLXJlZnVuZC1mb250XCIgZm9yPVwicmVmdW5kQWN0aW9uLXt7aX19XCI+XG4gICAgICAgICAgICAgICAge3tyZWZ1bmRBY3Rpb24uY29kZX19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJzaWduLWluLWl0ZW0taGludFwiIGNsYXNzPVwiZ292dWstaGludCBnb3Z1ay1yYWRpb3NfX2hpbnQgcHJvY2Vzcy1yZWZ1bmQtZm9udFwiPlxuICAgICAgICAgICAgICAgIHt7cmVmdW5kQWN0aW9uLmxhYmVsfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsXCIgW25nQ2xhc3NdPVwieydnb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsLS1oaWRkZW4nOiAhaXNTZW5kTWVCYWNrQ2xpY2tlZH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBwcm9jZXNzLXJlZnVuZC1mb250XCIgZm9yPVwiY29udGFjdC1ieS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICBBZGQgYSByZWFzb25cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNSZWFzb25GaWVsZEVtcHR5IHx8IGlzUmVhc29uRmllbGRJbnZhbGlkIHx8IHJlYXNvbkZpZWxkTWluSGFzRXJyb3IgfHwgcmVhc29uRmllbGRNYXhIYXNFcnJvclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZWFzb25GaWVsZEVtcHR5XCI+QWRkIGEgcmVhc29uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZWFzb25GaWVsZEludmFsaWRcIj5BZGQgYSB2YWxpZCByZWFzb248L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZWFzb25GaWVsZE1pbkhhc0Vycm9yXCI+UmVhc29uIHNob3VsZCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVhc29uRmllbGRNYXhIYXNFcnJvclwiPlJlYXNvbiBzaG91bGQgYmUgMjU1IGNoYXJhY3RlcnMgb3IgdW5kZXIuPC9zcGFuPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZ292dWstdGV4dGFyZWEgZ292dWstIS13aWR0aC1vbmUtdGhpcmQgcmVhc29uLWZvbnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNSZWFzb25GaWVsZEVtcHR5IHx8IGlzUmVhc29uRmllbGRJbnZhbGlkIHx8IHJlYXNvbkZpZWxkTWluSGFzRXJyb3IgfHwgcmVhc29uRmllbGRNYXhIYXNFcnJvcn1cIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJzZW5kbWViYWNrXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZW5kTWVCYWNrRmllbGRcIiBcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbmRNZUJhY2tGaWVsZFwiXG4gICAgICAgICAgICAgICAgcm93cz1cIjVcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydnb3Z1ay1yYWRpb3NfX2NvbmRpdGlvbmFsLS1oaWRkZW4nOiAhaXNSZWplY3RDbGlja2VkfVwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiPlxuICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9fbGVnZW5kIGdvdnVrLWZpZWxkc2V0X19sZWdlbmQtLWxcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+XG4gICAgICAgICAgICAgIFdoeSBhcmUgeW91IHJlamVjdGluZyB0aGlzIHJlZnVuZD9cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc1wiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6IHJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yfVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAqbmdJZj1cInJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yXCI+UGxlYXNlIHNlbGVjdCBhIHJlamVjdCByZWFzb248L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiICpuZ0Zvcj1cImxldCByZWZ1bmRSZWplY3RSZWFzb24gb2YgcmVmdW5kUmVqZWN0UmVhc29uTGlzdDsgbGV0IGogPSBpbmRleDtcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIFxuICAgICAgICAgICAgICBpZD1cInJlZnVuZFJlamVjdFJlYXNvbi17e2p9fVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlZnVuZFJlamVjdFJlYXNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInJlZnVuZFJlamVjdFJlYXNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNoZWNrUmVmdW5kQWN0aW9ucyhyZWZ1bmRSZWplY3RSZWFzb24uY29kZSlcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cInt7cmVmdW5kUmVqZWN0UmVhc29uLmNvZGV9fVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsIHByb2Nlc3MtcmVmdW5kLWZvbnRcIiBmb3I9XCJyZWZ1bmRSZWplY3RSZWFzb24te3tqfX1cIj5cbiAgICAgICAgICAgICAgICB7e3JlZnVuZFJlamVjdFJlYXNvbi5uYW1lfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19jb25kaXRpb25hbFwiIFtuZ0NsYXNzXT1cInsnZ292dWstcmFkaW9zX19jb25kaXRpb25hbC0taGlkZGVuJzogIWlzT3RoZXJDbGlja2VkfVwiIGlkPVwiY29uZGl0aW9uYWwtY29udGFjdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgcHJvY2Vzcy1yZWZ1bmQtZm9udCBcIiBmb3I9XCJjb250YWN0LWJ5LXRleHRcIj5cbiAgICAgICAgICAgIEVudGVyIHJlYXNvblxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHAgY2xhc3M9XCJpbmxpbmUtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNSZWFzb25FbXB0eSB8fCBpc1JlYXNvbkludmFsaWRcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZWFzb25FbXB0eVwiPkVudGVyIHJlYXNvbi48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVhc29uSW52YWxpZFwiPkVudGVyIGEgdmFsaWQgcmVhc29uPC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay0hLXdpZHRoLW9uZS10aGlyZCByZWFzb24tZm9udFwiIGlkPVwib3RoZXJSZWFzb25cIiBcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lubGluZS1lcnJvci1jbGFzcyc6IGlzUmVhc29uRW1wdHkgfHwgaXNSZWFzb25JbnZhbGlkfVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW50ZXJSZWFzb25GaWVsZFwiIG5hbWU9XCJlbnRlclJlYXNvbkZpZWxkXCIgdHlwZT1cInRleHRcIj48L2Rpdj5cbiAgICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVkaXJlY3R0b1JlZnVuZExpc3RQYWdlKClcIiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBtYXJnaW5yaWdodFwiPiBQcmV2aW91czwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwcm9jZXNzUmVmdW5kU3VibWl0KClcIiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBidXR0b25cIlxuICAgICAgICAgIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgU3VibWl0IFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDxici8+PGJyLz5cbiAgICA8L2Rpdj5cbiAgIFxuICA8ZGl2ICpuZ0lmPVwiIWlzRnJvbVJlZnVuZExpc3RQYWdlXCIgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXAgbWFyZ2luXCI+XG5cbiAgPHA+PGEgKGNsaWNrKT1cImxvYWRSZWZ1bmRzSG9tZVBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGluayBwb2ludGVyXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIj5DYW5jZWw8L2E+PC9wPlxuPC9kaXY+XG48L2Zvcm0+XG4gIDwvZGl2PlxuIFxuXG4gIDwvbWFpbj5cbiBcbiAgPG1haW4gY2xhc3M9XCJnb3Z1ay1tYWluLXdyYXBwZXIgZ292dWstbWFpbi13cmFwcGVyLS1sIHN1Y2Nlc3MtcGFnZS1wYWRkaW5nLS10b3AyNVwiIFtuZ0NsYXNzXT1cInsnZ292dWstcmFkaW9zX19jb25kaXRpb25hbC0taGlkZGVuJzogIWlzU3VjY2Vzc3BhZ2VFbmFibGV9XCIgaWQ9XCJtYWluLWNvbnRlbnRcIiByb2xlPVwibWFpblwiID5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3cgcGFnZXNpemVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXBhbmVsIGdvdnVrLXBhbmVsLXJlZnVuZC0tY29uZmlybWF0aW9uXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1yZWZ1bmRzLXhsYXJnZVwiPlxuICAgICAgICAgICAge3tzdWNjZXNzTXNnfX1cbiAgICAgICAgICA8L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJnb3Z1ay1ib2R5IHByb2Nlc3MtcmVmdW5kLWZvbnRcIj5cbiAgICAgICAgPGEgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvQ2FzZVJldmlldygpXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHBvaW50ZXJcIj5SZXR1cm4gdG8gY2FzZTwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gIDwvbWFpbj5cbjwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbiJdfQ==
|