@hmcts/ccpay-web-component 4.0.0-beta479 → 4.0.0-beta482

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.
Files changed (196) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +6620 -2963
  2. package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
  3. package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
  4. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-ccpay-web-component.js +33 -26
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +817 -142
  7. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +189 -271
  8. package/esm2015/lib/components/card-details/card-details.component.js +22 -34
  9. package/esm2015/lib/components/case-transactions/case-transactions.component.js +726 -537
  10. package/esm2015/lib/components/error-banner/error-banner.component.js +5 -17
  11. package/esm2015/lib/components/fee-summary/fee-summary.component.js +165 -280
  12. package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +86 -143
  13. package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +106 -162
  14. package/esm2015/lib/components/page-not-found.component.js +3 -4
  15. package/esm2015/lib/components/payment-list/payment-list.component.js +22 -80
  16. package/esm2015/lib/components/payment-view/payment-view.component.js +319 -137
  17. package/esm2015/lib/components/pba-details/pba-details.component.js +5 -32
  18. package/esm2015/lib/components/process-refund/process-refund.component.js +380 -0
  19. package/esm2015/lib/components/processed-payments/processed-payments.component.js +13 -41
  20. package/esm2015/lib/components/refund-list/refund-list.component.js +140 -0
  21. package/esm2015/lib/components/refund-status/refund-status.component.js +507 -0
  22. package/esm2015/lib/components/refunds/refunds.component.js +23 -0
  23. package/esm2015/lib/components/reports/reports.component.js +54 -109
  24. package/esm2015/lib/components/status-history/status-history.component.js +28 -42
  25. package/esm2015/lib/components/table/table.component.js +171 -0
  26. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +114 -112
  27. package/esm2015/lib/interfaces/AddRemissionRequest.js +2 -3
  28. package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +21 -0
  29. package/esm2015/lib/interfaces/AllocatePaymentRequest.js +2 -3
  30. package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
  31. package/esm2015/lib/interfaces/IBSPayments.js +38 -35
  32. package/esm2015/lib/interfaces/ICardDetails.js +14 -13
  33. package/esm2015/lib/interfaces/IFee.js +44 -43
  34. package/esm2015/lib/interfaces/IOrderReferenceFee.js +25 -0
  35. package/esm2015/lib/interfaces/IPatchRefundAction.js +15 -0
  36. package/esm2015/lib/interfaces/IPayment.js +56 -55
  37. package/esm2015/lib/interfaces/IPaymentGroup.js +12 -11
  38. package/esm2015/lib/interfaces/IPaymentStatus.js +2 -3
  39. package/esm2015/lib/interfaces/IPaymentView.js +17 -0
  40. package/esm2015/lib/interfaces/IPayments.js +6 -5
  41. package/esm2015/lib/interfaces/IRefundAction.js +15 -0
  42. package/esm2015/lib/interfaces/IRefundList.js +29 -0
  43. package/esm2015/lib/interfaces/IRefundReasons.js +17 -0
  44. package/esm2015/lib/interfaces/IRefundRejectReason.js +15 -0
  45. package/esm2015/lib/interfaces/IRefundStatus.js +23 -0
  46. package/esm2015/lib/interfaces/IRefundStatusHistory.js +15 -0
  47. package/esm2015/lib/interfaces/IRemission.js +18 -17
  48. package/esm2015/lib/interfaces/IResubmitRefundRequest.js +21 -0
  49. package/esm2015/lib/interfaces/IStatusHistories.js +12 -11
  50. package/esm2015/lib/interfaces/IStatusHistory.js +14 -13
  51. package/esm2015/lib/interfaces/IssueRefundRequest.js +25 -0
  52. package/esm2015/lib/interfaces/PayhubAntennaRequest.js +3 -4
  53. package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +3 -4
  54. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +17 -0
  55. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +21 -0
  56. package/esm2015/lib/interfaces/RefundsRequest.js +21 -0
  57. package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
  58. package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
  59. package/esm2015/lib/payment-lib.component.js +71 -9
  60. package/esm2015/lib/payment-lib.module.js +29 -6
  61. package/esm2015/lib/payment-lib.service.js +18 -4
  62. package/esm2015/lib/pipes/capitalize.pipe.js +24 -0
  63. package/esm2015/lib/pipes/ccd-hyphens.pipe.js +3 -4
  64. package/esm2015/lib/pipes/key-value.pipe.js +3 -4
  65. package/esm2015/lib/pipes/sanitize-html.pipe.js +7 -5
  66. package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +37 -14
  67. package/esm2015/lib/services/card-details/card-details.service.js +19 -8
  68. package/esm2015/lib/services/case-transactions/case-transactions.service.js +19 -8
  69. package/esm2015/lib/services/orderslist.service.js +211 -0
  70. package/esm2015/lib/services/payment-list/payment-list.service.js +19 -8
  71. package/esm2015/lib/services/payment-view/payment-view.service.js +81 -10
  72. package/esm2015/lib/services/refunds/refunds.service.js +196 -0
  73. package/esm2015/lib/services/shared/error-handler.service.js +6 -4
  74. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +17 -8
  75. package/esm2015/lib/services/shared/logger/console-logger.service.js +7 -5
  76. package/esm2015/lib/services/shared/logger/logger.service.js +7 -5
  77. package/esm2015/lib/services/status-history/status-history.service.js +19 -8
  78. package/esm2015/lib/services/xl-file/xl-file.service.js +56 -51
  79. package/esm2015/public_api.js +1 -2
  80. package/esm5/hmcts-ccpay-web-component.js +33 -26
  81. package/esm5/lib/components/add-remission/add-remission.component.js +885 -49
  82. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +198 -46
  83. package/esm5/lib/components/card-details/card-details.component.js +20 -7
  84. package/esm5/lib/components/case-transactions/case-transactions.component.js +797 -71
  85. package/esm5/lib/components/error-banner/error-banner.component.js +3 -4
  86. package/esm5/lib/components/fee-summary/fee-summary.component.js +168 -67
  87. package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +84 -29
  88. package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +104 -40
  89. package/esm5/lib/components/page-not-found.component.js +3 -4
  90. package/esm5/lib/components/payment-list/payment-list.component.js +21 -8
  91. package/esm5/lib/components/payment-view/payment-view.component.js +379 -21
  92. package/esm5/lib/components/pba-details/pba-details.component.js +3 -4
  93. package/esm5/lib/components/process-refund/process-refund.component.js +456 -0
  94. package/esm5/lib/components/processed-payments/processed-payments.component.js +11 -6
  95. package/esm5/lib/components/refund-list/refund-list.component.js +143 -0
  96. package/esm5/lib/components/refund-status/refund-status.component.js +566 -0
  97. package/esm5/lib/components/refunds/refunds.component.js +29 -0
  98. package/esm5/lib/components/reports/reports.component.js +52 -18
  99. package/esm5/lib/components/status-history/status-history.component.js +27 -9
  100. package/esm5/lib/components/table/table.component.js +201 -0
  101. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +125 -23
  102. package/esm5/lib/interfaces/AddRemissionRequest.js +2 -3
  103. package/esm5/lib/interfaces/AddRetroRemissionRequest.js +19 -0
  104. package/esm5/lib/interfaces/AllocatePaymentRequest.js +2 -3
  105. package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
  106. package/esm5/lib/interfaces/IBSPayments.js +38 -35
  107. package/esm5/lib/interfaces/ICardDetails.js +14 -13
  108. package/esm5/lib/interfaces/IFee.js +44 -43
  109. package/esm5/lib/interfaces/IOrderReferenceFee.js +25 -0
  110. package/esm5/lib/interfaces/IPatchRefundAction.js +15 -0
  111. package/esm5/lib/interfaces/IPayment.js +56 -55
  112. package/esm5/lib/interfaces/IPaymentGroup.js +12 -11
  113. package/esm5/lib/interfaces/IPaymentStatus.js +2 -3
  114. package/esm5/lib/interfaces/IPaymentView.js +17 -0
  115. package/esm5/lib/interfaces/IPayments.js +6 -5
  116. package/esm5/lib/interfaces/IRefundAction.js +15 -0
  117. package/esm5/lib/interfaces/IRefundList.js +29 -0
  118. package/esm5/lib/interfaces/IRefundReasons.js +17 -0
  119. package/esm5/lib/interfaces/IRefundRejectReason.js +15 -0
  120. package/esm5/lib/interfaces/IRefundStatus.js +23 -0
  121. package/esm5/lib/interfaces/IRefundStatusHistory.js +15 -0
  122. package/esm5/lib/interfaces/IRemission.js +18 -17
  123. package/esm5/lib/interfaces/IResubmitRefundRequest.js +19 -0
  124. package/esm5/lib/interfaces/IStatusHistories.js +12 -11
  125. package/esm5/lib/interfaces/IStatusHistory.js +14 -13
  126. package/esm5/lib/interfaces/IssueRefundRequest.js +22 -0
  127. package/esm5/lib/interfaces/PayhubAntennaRequest.js +3 -4
  128. package/esm5/lib/interfaces/PaymentToPayhubRequest.js +3 -4
  129. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +16 -0
  130. package/esm5/lib/interfaces/PostRefundRetroRemission.js +19 -0
  131. package/esm5/lib/interfaces/RefundsRequest.js +19 -0
  132. package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
  133. package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
  134. package/esm5/lib/payment-lib.component.js +58 -7
  135. package/esm5/lib/payment-lib.module.js +29 -6
  136. package/esm5/lib/payment-lib.service.js +25 -4
  137. package/esm5/lib/pipes/capitalize.pipe.js +32 -0
  138. package/esm5/lib/pipes/ccd-hyphens.pipe.js +3 -4
  139. package/esm5/lib/pipes/key-value.pipe.js +3 -4
  140. package/esm5/lib/pipes/sanitize-html.pipe.js +7 -5
  141. package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +37 -14
  142. package/esm5/lib/services/card-details/card-details.service.js +19 -8
  143. package/esm5/lib/services/case-transactions/case-transactions.service.js +19 -8
  144. package/esm5/lib/services/orderslist.service.js +276 -0
  145. package/esm5/lib/services/payment-list/payment-list.service.js +19 -8
  146. package/esm5/lib/services/payment-view/payment-view.service.js +112 -10
  147. package/esm5/lib/services/refunds/refunds.service.js +236 -0
  148. package/esm5/lib/services/shared/error-handler.service.js +6 -4
  149. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +17 -8
  150. package/esm5/lib/services/shared/logger/console-logger.service.js +7 -5
  151. package/esm5/lib/services/shared/logger/logger.service.js +7 -5
  152. package/esm5/lib/services/status-history/status-history.service.js +19 -8
  153. package/esm5/lib/services/xl-file/xl-file.service.js +62 -51
  154. package/esm5/public_api.js +1 -2
  155. package/fesm2015/hmcts-ccpay-web-component.js +3844 -2242
  156. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  157. package/fesm5/hmcts-ccpay-web-component.js +6684 -2842
  158. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  159. package/hmcts-ccpay-web-component.d.ts +31 -23
  160. package/hmcts-ccpay-web-component.metadata.json +1 -1
  161. package/lib/components/add-remission/add-remission.component.d.ts +71 -2
  162. package/lib/components/allocate-payments/allocate-payments.component.d.ts +16 -1
  163. package/lib/components/case-transactions/case-transactions.component.d.ts +52 -1
  164. package/lib/components/fee-summary/fee-summary.component.d.ts +3 -1
  165. package/lib/components/payment-view/payment-view.component.d.ts +37 -1
  166. package/lib/components/process-refund/process-refund.component.d.ts +53 -0
  167. package/lib/components/refund-list/refund-list.component.d.ts +23 -0
  168. package/lib/components/refund-status/refund-status.component.d.ts +68 -0
  169. package/lib/components/refunds/refunds.component.d.ts +5 -0
  170. package/lib/components/status-history/status-history.component.d.ts +1 -0
  171. package/lib/components/table/table.component.d.ts +35 -0
  172. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +15 -4
  173. package/lib/interfaces/AddRetroRemissionRequest.d.ts +5 -0
  174. package/lib/interfaces/IBSPayments.d.ts +1 -0
  175. package/lib/interfaces/IOrderReferenceFee.d.ts +9 -0
  176. package/lib/interfaces/IPatchRefundAction.d.ts +4 -0
  177. package/lib/interfaces/IPaymentView.d.ts +5 -0
  178. package/lib/interfaces/IRefundAction.d.ts +4 -0
  179. package/lib/interfaces/IRefundList.d.ts +14 -0
  180. package/lib/interfaces/IRefundReasons.d.ts +5 -0
  181. package/lib/interfaces/IRefundRejectReason.d.ts +4 -0
  182. package/lib/interfaces/IRefundStatus.d.ts +8 -0
  183. package/lib/interfaces/IRefundStatusHistory.d.ts +5 -0
  184. package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -0
  185. package/lib/interfaces/IssueRefundRequest.d.ts +6 -0
  186. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +4 -0
  187. package/lib/interfaces/PostRefundRetroRemission.d.ts +5 -0
  188. package/lib/interfaces/RefundsRequest.d.ts +5 -0
  189. package/lib/payment-lib.component.d.ts +18 -1
  190. package/lib/payment-lib.service.d.ts +3 -0
  191. package/lib/pipes/capitalize.pipe.d.ts +5 -0
  192. package/lib/services/orderslist.service.d.ts +40 -0
  193. package/lib/services/payment-view/payment-view.service.d.ts +12 -0
  194. package/lib/services/refunds/refunds.service.d.ts +30 -0
  195. package/lib/services/xl-file/xl-file.service.d.ts +6 -6
  196. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  import { Component, Input, Output, EventEmitter } from '@angular/core';
6
6
  import { FormBuilder, Validators, FormControl } from '@angular/forms';
@@ -8,36 +8,86 @@ import { Router } from '@angular/router';
8
8
  import { AddRemissionRequest } from '../../interfaces/AddRemissionRequest';
9
9
  import { PaymentViewService } from '../../services/payment-view/payment-view.service';
10
10
  import { PaymentLibComponent } from '../../payment-lib.component';
11
+ import { RefundsService } from '../../services/refunds/refunds.service';
12
+ import { AddRetroRemissionRequest } from '../../interfaces/AddRetroRemissionRequest';
13
+ import { PostRefundRetroRemission } from '../../interfaces/PostRefundRetroRemission';
14
+ import { PostIssueRefundRetroRemission } from '../../interfaces/PostIssueRefundRetroRemission';
15
+ import { ChangeDetectorRef } from '@angular/core';
16
+ import { OrderslistService } from '../../services/orderslist.service';
11
17
  /** @type {?} */
12
18
  const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
13
19
  export class AddRemissionComponent {
20
+ // refundReasons:IRefundReasons[];
14
21
  /**
15
22
  * @param {?} formBuilder
16
23
  * @param {?} router
17
24
  * @param {?} paymentViewService
18
25
  * @param {?} paymentLibComponent
26
+ * @param {?} refundService
27
+ * @param {?} cd
28
+ * @param {?} OrderslistService
19
29
  */
20
- constructor(formBuilder, router, paymentViewService, paymentLibComponent) {
30
+ constructor(formBuilder, router, paymentViewService, paymentLibComponent, refundService, cd, OrderslistService) {
21
31
  this.formBuilder = formBuilder;
22
32
  this.router = router;
23
33
  this.paymentViewService = paymentViewService;
24
34
  this.paymentLibComponent = paymentLibComponent;
35
+ this.refundService = refundService;
36
+ this.cd = cd;
37
+ this.OrderslistService = OrderslistService;
25
38
  this.cancelRemission = new EventEmitter();
39
+ //@Output() refundListReason: EventEmitter<any> = new EventEmitter({reason:string, code:string});
40
+ this.refundListReason = new EventEmitter();
41
+ this.refundListAmount = new EventEmitter();
42
+ this.refund = {
43
+ reason: {
44
+ duplicate: 'Duplicate payment',
45
+ humanerror: 'Human error',
46
+ caseWithdrawn: 'Case withdrawn',
47
+ other: 'Other'
48
+ }
49
+ };
26
50
  this.hasErrors = false;
27
51
  this.viewStatus = 'main';
28
52
  this.errorMessage = null;
29
53
  this.option = null;
30
54
  this.isConfirmationBtnDisabled = false;
55
+ this.selectedValue = 'yes';
56
+ this.retroRemission = false;
57
+ this.remissionReference = '';
58
+ this.paymentExplanationHasError = false;
31
59
  this.isRemissionCodeEmpty = false;
32
60
  this.remissionCodeHasError = false;
33
61
  this.isAmountEmpty = false;
62
+ this.isReasonEmpty = false;
34
63
  this.amountHasError = false;
35
64
  this.isRemissionLessThanFeeError = false;
65
+ this.refundHasError = false;
66
+ this.isPaymentSuccess = false;
67
+ this.isRemissionApplied = false;
68
+ this.refundReasons = [];
69
+ this.commonRefundReasons = [];
36
70
  }
37
71
  /**
38
72
  * @return {?}
39
73
  */
40
74
  ngOnInit() {
75
+ this.default = 'Select a different reason';
76
+ if (this.viewCompStatus !== '') {
77
+ this.viewStatus = '';
78
+ }
79
+ if (this.remission) {
80
+ // this.cd.detectChanges();
81
+ }
82
+ if (this.fee) {
83
+ this.amount = (this.fee.volume * this.fee.calculated_amount);
84
+ }
85
+ if (this.payment) {
86
+ this.remessionPayment = this.payment;
87
+ if (this.payment.status === 'Success') {
88
+ this.isPaymentSuccess = true;
89
+ }
90
+ }
41
91
  this.option = this.paymentLibComponent.SELECTED_OPTION;
42
92
  this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
43
93
  this.remissionForm = this.formBuilder.group({
@@ -47,48 +97,150 @@ export class AddRemissionComponent {
47
97
  ])),
48
98
  amount: new FormControl('', Validators.compose([
49
99
  Validators.required,
50
- Validators.pattern('^[0-9]+(\\.[0-9]{2})?$')
51
- ]))
100
+ Validators.pattern('^[0-9]+(\.[0-9]{1,2})?$')
101
+ ])),
102
+ refundReason: new FormControl('', Validators.compose([Validators.required])),
103
+ refundDDReason: new FormControl('', Validators.compose([Validators.required])),
104
+ reason: new FormControl()
52
105
  });
53
- this.viewStatus = 'main';
106
+ /** @type {?} */
107
+ const remissionctrls = this.remissionForm.controls;
108
+ remissionctrls['refundDDReason'].setValue('Select a different reason', { onlySelf: true });
109
+ if (this.viewCompStatus === '') {
110
+ this.viewStatus = 'main';
111
+ }
112
+ if (this.viewCompStatus === 'issuerefund') {
113
+ this.refundService.getRefundReasons().subscribe((/**
114
+ * @param {?} refundReasons
115
+ * @return {?}
116
+ */
117
+ refundReasons => {
118
+ this.refundReasons = refundReasons['data'].filter((/**
119
+ * @param {?} data
120
+ * @return {?}
121
+ */
122
+ (data) => data.recently_used === false));
123
+ this.refundReasons = this.refundReasons.filter((/**
124
+ * @param {?} data
125
+ * @return {?}
126
+ */
127
+ (data) => data.name !== 'Retrospective remission'));
128
+ this.cd.detectChanges();
129
+ this.commonRefundReasons = refundReasons['data'].filter((/**
130
+ * @param {?} data
131
+ * @return {?}
132
+ */
133
+ (data) => data.recently_used === true));
134
+ this.commonRefundReasons.sort((/**
135
+ * @param {?} a
136
+ * @param {?} b
137
+ * @return {?}
138
+ */
139
+ (a, b) => a.toString().localeCompare(b)));
140
+ this.cd.detectChanges();
141
+ }));
142
+ }
143
+ if (this.viewCompStatus === 'processretroremissonpage' && this.isFromRefundListPage) {
144
+ this.viewStatus = 'processretroremissonpage';
145
+ }
146
+ // this.refundService.getUserDetails().subscribe(
147
+ // userdetail => {
148
+ // console.log(userdetail);
149
+ // console.log(userdetail['data']);
150
+ // } );
151
+ this.paymentLibComponent.CCD_CASE_NUMBER;
54
152
  }
55
153
  /**
56
154
  * @return {?}
57
155
  */
58
156
  addRemission() {
59
- this.resetRemissionForm([false, false, false, false, false], 'All');
157
+ this.resetRemissionForm([false, false, false, false, false, false], 'All');
60
158
  /** @type {?} */
61
159
  const remissionctrls = this.remissionForm.controls;
62
160
  /** @type {?} */
63
- const isRemissionLessThanFee = this.fee.calculated_amount > remissionctrls["amount"].value;
161
+ const isRemissionLessThanFee = this.fee.calculated_amount > remissionctrls.amount.value;
162
+ this.remissionForm.controls['refundReason'].setErrors(null);
163
+ this.remissionForm.controls['refundDDReason'].setErrors(null);
164
+ this.remissionForm.controls['amount'].setErrors(null);
64
165
  if (this.remissionForm.dirty && this.remissionForm.valid && isRemissionLessThanFee) {
65
166
  this.viewStatus = 'confirmation';
66
167
  }
67
168
  else {
68
169
  if (remissionctrls['remissionCode'].value == '') {
69
- this.resetRemissionForm([true, false, false, false, false], 'remissionCode');
170
+ this.resetRemissionForm([true, false, false, false, false, false], 'remissionCode');
70
171
  }
71
172
  if (remissionctrls['remissionCode'].value != '' && remissionctrls['remissionCode'].invalid) {
72
- this.resetRemissionForm([false, true, false, false, false], 'remissionCode');
173
+ this.resetRemissionForm([false, true, false, false, false, false], 'remissionCode');
73
174
  }
74
175
  if (remissionctrls['amount'].value == '') {
75
- this.resetRemissionForm([false, false, true, false, false], 'amount');
176
+ this.resetRemissionForm([false, false, true, false, false, false], 'amount');
76
177
  }
77
178
  if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
78
- this.resetRemissionForm([false, true, false, true, false], 'amount');
179
+ this.resetRemissionForm([false, true, false, true, false, false], 'amount');
79
180
  }
80
- if (remissionctrls["amount"].valid && !isRemissionLessThanFee) {
81
- this.resetRemissionForm([false, false, false, false, true], 'amount');
181
+ if (remissionctrls.amount.valid && !isRemissionLessThanFee) {
182
+ this.resetRemissionForm([false, false, false, false, true, false], 'amount');
82
183
  }
83
184
  }
84
185
  }
186
+ /**
187
+ * @return {?}
188
+ */
189
+ confirmRemission() {
190
+ this.isConfirmationBtnDisabled = true;
191
+ /** @type {?} */
192
+ const newNetAmount = this.remissionForm.controls.amount.value;
193
+ /** @type {?} */
194
+ const remissionAmount = this.fee.net_amount - newNetAmount;
195
+ /** @type {?} */
196
+ const requestBody = new AddRemissionRequest(this.ccdCaseNumber, this.fee, remissionAmount, this.remissionForm.controls.remissionCode.value, this.caseType);
197
+ this.paymentViewService.postPaymentGroupWithRemissions(decodeURIComponent(this.paymentGroupRef).trim(), this.fee.id, requestBody).subscribe((/**
198
+ * @param {?} response
199
+ * @return {?}
200
+ */
201
+ response => {
202
+ if (JSON.parse(response).success) {
203
+ /** @type {?} */
204
+ let LDUrl = this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
205
+ LDUrl += `&caseType=${this.caseType}`;
206
+ LDUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
207
+ LDUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
208
+ if (this.paymentLibComponent.bspaymentdcn) {
209
+ this.router.routeReuseStrategy.shouldReuseRoute = (/**
210
+ * @return {?}
211
+ */
212
+ () => false);
213
+ this.router.onSameUrlNavigation = 'reload';
214
+ this.router.navigateByUrl(`/payment-history/${this.ccdCaseNumber}?view=fee-summary&selectedOption=${this.option}&paymentGroupRef=${this.paymentGroupRef}&dcn=${this.paymentLibComponent.bspaymentdcn}${LDUrl}`);
215
+ }
216
+ else {
217
+ this.gotoCasetransationPage();
218
+ }
219
+ }
220
+ }), (/**
221
+ * @param {?} error
222
+ * @return {?}
223
+ */
224
+ (error) => {
225
+ this.errorMessage = error;
226
+ this.isConfirmationBtnDisabled = false;
227
+ }));
228
+ }
85
229
  /**
86
230
  * @param {?} val
87
231
  * @param {?} field
88
232
  * @return {?}
89
233
  */
90
234
  resetRemissionForm(val, field) {
91
- if (field === 'remissionCode' || field === 'All') {
235
+ if (field === 'All') {
236
+ this.isRemissionCodeEmpty = val[0];
237
+ this.remissionCodeHasError = val[1];
238
+ this.isAmountEmpty = val[2];
239
+ this.amountHasError = val[3];
240
+ this.isRemissionLessThanFeeError = val[4];
241
+ this.isReasonEmpty = val[5];
242
+ }
243
+ else if (field === 'remissionCode' || field === 'All') {
92
244
  this.isRemissionCodeEmpty = val[0];
93
245
  this.remissionCodeHasError = val[1];
94
246
  }
@@ -97,55 +249,477 @@ export class AddRemissionComponent {
97
249
  this.amountHasError = val[3];
98
250
  this.isRemissionLessThanFeeError = val[4];
99
251
  }
252
+ else if (field === 'reason' || field === 'All') {
253
+ this.isReasonEmpty = val[5];
254
+ }
100
255
  }
256
+ // Add retro remission changes
101
257
  /**
102
258
  * @return {?}
103
259
  */
104
- confirmRemission() {
105
- this.isConfirmationBtnDisabled = true;
260
+ addRemissionCode() {
261
+ this.errorMessage = false;
262
+ this.viewStatus = '';
263
+ this.isRefundRemission = false;
264
+ this.resetRemissionForm([false, false, false, false, false, false], 'All');
106
265
  /** @type {?} */
107
- const newNetAmount = this.remissionForm.controls["amount"].value;
108
- /** @type {?} */
109
- const remissionAmount = this.fee.net_amount - newNetAmount;
266
+ const remissionctrls = this.remissionForm.controls;
110
267
  /** @type {?} */
111
- const requestBody = new AddRemissionRequest(this.ccdCaseNumber, this.fee, remissionAmount, this.remissionForm.controls["remissionCode"].value, this.caseType);
112
- this.paymentViewService.postPaymentGroupWithRemissions(decodeURIComponent(this.paymentGroupRef).trim(), this.fee.id, requestBody).subscribe(response => {
113
- if (JSON.parse(response).success) {
114
- /** @type {?} */
115
- let LDUrl = this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
116
- LDUrl += `&caseType=${this.caseType}`;
117
- LDUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
118
- LDUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
119
- if (this.paymentLibComponent.bspaymentdcn) {
120
- this.router.routeReuseStrategy.shouldReuseRoute = () => false;
121
- this.router.onSameUrlNavigation = 'reload';
122
- this.router.navigateByUrl(`/payment-history/${this.ccdCaseNumber}?view=fee-summary&selectedOption=${this.option}&paymentGroupRef=${this.paymentGroupRef}&dcn=${this.paymentLibComponent.bspaymentdcn}${LDUrl}`);
268
+ const isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
269
+ this.remissionForm.controls['refundReason'].setErrors(null);
270
+ this.remissionForm.controls['refundDDReason'].setErrors(null);
271
+ this.remissionForm.controls['amount'].setErrors(null);
272
+ if (this.remissionForm.dirty && this.remissionForm.valid && isRemissionLessThanFee) {
273
+ this.viewCompStatus = '';
274
+ this.viewStatus = "processretroremissonpage";
275
+ }
276
+ else {
277
+ if (remissionctrls['remissionCode'].value == '') {
278
+ this.resetRemissionForm([true, false, false, false, false], 'remissionCode');
279
+ }
280
+ if (remissionctrls['remissionCode'].value != '' && remissionctrls['remissionCode'].invalid) {
281
+ this.resetRemissionForm([false, true, false, false, false], 'remissionCode');
282
+ }
283
+ if (remissionctrls['amount'].value == '') {
284
+ this.resetRemissionForm([false, false, true, false, false], 'amount');
285
+ }
286
+ if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
287
+ this.resetRemissionForm([false, true, false, true, false], 'amount');
288
+ }
289
+ if (remissionctrls['reason'].value == '') {
290
+ this.resetRemissionForm([false, false, false, true, false, true], 'reason');
291
+ }
292
+ if (remissionctrls.amount.valid && !isRemissionLessThanFee) {
293
+ this.resetRemissionForm([false, false, false, false, true], 'amount');
294
+ }
295
+ }
296
+ }
297
+ /**
298
+ * @return {?}
299
+ */
300
+ gotoAddRetroRemissionCodePage() {
301
+ this.errorMessage = false;
302
+ if (this.isRefundRemission) {
303
+ this.paymentLibComponent.iscancelClicked = true;
304
+ this.refundListAmount.emit();
305
+ this.paymentLibComponent.isFromRefundStatusPage = true;
306
+ return;
307
+ }
308
+ if (this.isFromRefundListPage) {
309
+ this.paymentLibComponent.iscancelClicked = true;
310
+ this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
311
+ this.paymentLibComponent.isFromRefundStatusPage = true;
312
+ return;
313
+ }
314
+ this.viewStatus = '';
315
+ this.selectedValue = 'yes';
316
+ this.viewCompStatus = "addremission";
317
+ this.isRefundRemission = true;
318
+ this.errorMessage = '';
319
+ if (this.isFromPaymentDetailPage) {
320
+ this.paymentLibComponent.viewName = 'payment-view';
321
+ }
322
+ }
323
+ /**
324
+ * @param {?} payment
325
+ * @return {?}
326
+ */
327
+ gotoCheckRetroRemissionPage(payment) {
328
+ this.paymentLibComponent.iscancelClicked = false;
329
+ this.errorMessage = '';
330
+ this.resetRemissionForm([false, false, false, false, false], 'All');
331
+ if (!this.isRefundRemission) {
332
+ /** @type {?} */
333
+ var remissionctrls = this.remissionForm.controls;
334
+ /** @type {?} */
335
+ var isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
336
+ if (this.remissionForm.dirty) {
337
+ if (remissionctrls['amount'].value == '' || remissionctrls['amount'].value < 0) {
338
+ this.resetRemissionForm([false, false, true, false, false], 'amount');
339
+ }
340
+ else if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
341
+ this.resetRemissionForm([false, false, false, true, false], 'amount');
342
+ }
343
+ else if (remissionctrls.amount.valid && !isRemissionLessThanFee) {
344
+ this.resetRemissionForm([false, false, false, false, true], 'amount');
123
345
  }
124
346
  else {
125
- this.gotoCasetransationPage();
347
+ this.viewCompStatus = '';
348
+ this.viewStatus = "checkretroremissionpage";
349
+ }
350
+ }
351
+ }
352
+ else {
353
+ /** @type {?} */
354
+ var remissionctrls = this.remissionForm.controls;
355
+ //if (this.remissionForm.dirty ) {
356
+ if (remissionctrls['amount'].value == '' || remissionctrls['amount'].value < 0) {
357
+ this.resetRemissionForm([false, false, true, false, false], 'amount');
358
+ }
359
+ else {
360
+ this.viewCompStatus = '';
361
+ this.viewStatus = "checkretroremissionpage";
362
+ this.refundListAmount.emit(remissionctrls['amount'].value);
363
+ }
364
+ //}
365
+ }
366
+ }
367
+ /**
368
+ * @return {?}
369
+ */
370
+ gotoProcessRetroRemissionPage() {
371
+ this.viewStatus = '';
372
+ this.viewCompStatus = 'addremission';
373
+ this.isRefundRemission = true;
374
+ this.errorMessage = '';
375
+ }
376
+ /**
377
+ * @return {?}
378
+ */
379
+ confirmRetroRemission() {
380
+ if (!this.isConfirmationBtnDisabled) {
381
+ this.retroRemission = true;
382
+ this.remissionamt = this.remissionForm.controls.amount.value;
383
+ /** @type {?} */
384
+ const requestBody = new AddRetroRemissionRequest(this.remissionamt, this.remissionForm.controls.remissionCode.value);
385
+ this.paymentViewService.postPaymentGroupWithRetroRemissions(decodeURIComponent(this.paymentGroupRef).trim(), this.fee.id, requestBody).subscribe((/**
386
+ * @param {?} response
387
+ * @return {?}
388
+ */
389
+ response => {
390
+ if (JSON.parse(response)) {
391
+ this.isRemissionApplied = true;
392
+ this.viewCompStatus = '';
393
+ this.viewStatus = 'retroremissionconfirmationpage';
394
+ this.remissionReference = JSON.parse(response).remission_reference;
126
395
  }
396
+ }), (/**
397
+ * @param {?} error
398
+ * @return {?}
399
+ */
400
+ (error) => {
401
+ this.errorMessage = error;
402
+ this.isConfirmationBtnDisabled = false;
403
+ this.cd.detectChanges();
404
+ }));
405
+ }
406
+ }
407
+ /**
408
+ * @return {?}
409
+ */
410
+ processRefund() {
411
+ this.errorMessage = '';
412
+ this.isConfirmationBtnDisabled = true;
413
+ if (this.isRefundRemission) {
414
+ this.retroRemission = true;
415
+ }
416
+ if (this.remissionReference === undefined || this.remissionReference === '') {
417
+ this.remissionReference = this.remission.remission_reference;
418
+ }
419
+ /** @type {?} */
420
+ const requestBody = new PostIssueRefundRetroRemission(this.remissionReference);
421
+ this.paymentViewService.postRefundRetroRemission(requestBody).subscribe((/**
422
+ * @param {?} response
423
+ * @return {?}
424
+ */
425
+ response => {
426
+ if (JSON.parse(response)) {
427
+ this.viewCompStatus = '';
428
+ this.viewStatus = 'refundconfirmationpage';
429
+ this.refundReference = JSON.parse(response).refund_reference;
430
+ this.refundAmount = JSON.parse(response).refund_amount;
127
431
  }
128
- }, (error) => {
432
+ }), (/**
433
+ * @param {?} error
434
+ * @return {?}
435
+ */
436
+ (error) => {
129
437
  this.errorMessage = error;
130
438
  this.isConfirmationBtnDisabled = false;
131
- });
439
+ }));
440
+ }
441
+ // Issue Refund changes
442
+ /**
443
+ * @param {?} payment
444
+ * @return {?}
445
+ */
446
+ gotoIssueRefundConfirmation(payment) {
447
+ this.paymentLibComponent.iscancelClicked = false;
448
+ this.errorMessage = '';
449
+ this.refundReason = this.remissionForm.controls['refundReason'].value === null ? this.remissionForm.controls['refundDDReason'].value : this.remissionForm.controls['refundReason'].value;
450
+ if (!this.refundReason) {
451
+ this.refundHasError = true;
452
+ }
453
+ else if (this.selectedRefundReason.includes('Other') && (this.remissionForm.controls['reason'].value == '' || this.remissionForm.controls['reason'].value == null)) {
454
+ this.resetRemissionForm([false, false, false, true, false, true], 'reason');
455
+ }
456
+ else if (this.selectedRefundReason.includes('Other') && this.remissionForm.controls['reason'].value !== '') {
457
+ this.refundHasError = false;
458
+ this.refundReason += '-' + this.remissionForm.controls['reason'].value;
459
+ this.selectedRefundReason = this.remissionForm.controls['reason'].value;
460
+ if (this.isFromRefundListPage) {
461
+ this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
462
+ }
463
+ else {
464
+ this.viewCompStatus = '';
465
+ this.viewStatus = 'checkissuerefundpage';
466
+ }
467
+ }
468
+ else {
469
+ if (this.isFromRefundListPage) {
470
+ this.paymentLibComponent.isFromRefundStatusPage = true;
471
+ this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
472
+ }
473
+ else {
474
+ this.viewCompStatus = '';
475
+ this.viewStatus = 'checkissuerefundpage';
476
+ }
477
+ }
478
+ }
479
+ /**
480
+ * @return {?}
481
+ */
482
+ gotoIssueRefundPage() {
483
+ this.errorMessage = '';
484
+ this.viewCompStatus = 'issuerefund';
485
+ this.viewStatus = '';
486
+ this.isRefundRemission = true;
487
+ this.errorMessage = false;
488
+ this.refundHasError = false;
489
+ this.isReasonEmpty = false;
490
+ }
491
+ /**
492
+ * @return {?}
493
+ */
494
+ changeIssueRefundReason() {
495
+ // this.remissionForm.controls['refundReason'].setValue('Duplicate payment');
496
+ this.errorMessage = '';
497
+ this.refundHasError = false;
498
+ this.isReasonEmpty = false;
499
+ this.viewCompStatus = 'issuerefund';
500
+ this.viewStatus = '';
501
+ this.isRefundRemission = true;
502
+ }
503
+ /**
504
+ * @return {?}
505
+ */
506
+ confirmIssueRefund() {
507
+ this.isConfirmationBtnDisabled = true;
508
+ this.errorMessage = '';
509
+ if (this.isRefundRemission) {
510
+ this.retroRemission = true;
511
+ }
512
+ /** @type {?} */
513
+ const requestBody = new PostRefundRetroRemission(this.payment.reference, this.refundReason);
514
+ this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
515
+ * @param {?} response
516
+ * @return {?}
517
+ */
518
+ response => {
519
+ if (JSON.parse(response)) {
520
+ this.viewCompStatus = '';
521
+ this.viewStatus = 'refundconfirmationpage';
522
+ this.refundReference = JSON.parse(response).refund_reference;
523
+ if (JSON.parse(response).refund_amount) {
524
+ this.refundAmount = JSON.parse(response).refund_amount;
525
+ }
526
+ }
527
+ }), (/**
528
+ * @param {?} error
529
+ * @return {?}
530
+ */
531
+ (error) => {
532
+ this.errorMessage = error;
533
+ this.isConfirmationBtnDisabled = false;
534
+ this.cd.detectChanges();
535
+ }));
536
+ }
537
+ // Retro Refund
538
+ /**
539
+ * @return {?}
540
+ */
541
+ confirmRetroRefund() {
542
+ this.isConfirmationBtnDisabled = true;
543
+ this.errorMessage = '';
544
+ if (this.isRefundRemission) {
545
+ this.retroRemission = true;
546
+ }
547
+ /** @type {?} */
548
+ const requestBody = new PostRefundRetroRemission(this.payment.reference, 'RR004-Retrospective remission');
549
+ this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
550
+ * @param {?} response
551
+ * @return {?}
552
+ */
553
+ response => {
554
+ if (JSON.parse(response)) {
555
+ this.viewCompStatus = '';
556
+ this.viewStatus = 'retrorefundconfirmationpage';
557
+ this.refundReference = JSON.parse(response).refund_reference;
558
+ if (JSON.parse(response).refund_amount) {
559
+ this.refundAmount = JSON.parse(response).refund_amount;
560
+ }
561
+ }
562
+ }), (/**
563
+ * @param {?} error
564
+ * @return {?}
565
+ */
566
+ (error) => {
567
+ this.errorMessage = error;
568
+ this.isConfirmationBtnDisabled = false;
569
+ }));
570
+ }
571
+ /**
572
+ * @param {?} key
573
+ * @param {?} value
574
+ * @return {?}
575
+ */
576
+ selectRadioButton(key, value) {
577
+ localStorage.setItem("myradio", key);
578
+ /** @type {?} */
579
+ const remissionctrls = this.remissionForm.controls;
580
+ remissionctrls['refundDDReason'].setValue('Select a different reason', { onlySelf: true });
581
+ remissionctrls['reason'].reset();
582
+ this.isRefundReasonsSelected = true;
583
+ this.errorMessage = false;
584
+ this.isReasonEmpty = false;
585
+ this.showReasonText = false;
586
+ this.refundHasError = false;
587
+ this.selectedRefundReason = key;
588
+ if (this.selectedRefundReason.includes('Other')) {
589
+ this.showReasonText = true;
590
+ this.refundHasError = false;
591
+ this.refundReason = key;
592
+ }
593
+ }
594
+ /**
595
+ * @param {?} args
596
+ * @return {?}
597
+ */
598
+ selectchange(args) {
599
+ /** @type {?} */
600
+ const remissionctrls = this.remissionForm.controls;
601
+ remissionctrls['refundReason'].reset();
602
+ remissionctrls['reason'].reset();
603
+ this.isRefundReasonsSelected = false;
604
+ this.showReasonText = false;
605
+ this.refundHasError = false;
606
+ this.selectedRefundReason = args.target.options[args.target.options.selectedIndex].id;
607
+ this.reasonLength = (29 - this.selectedRefundReason.split('- ')[1].length);
608
+ if (this.selectedRefundReason.includes('Other')) {
609
+ this.showReasonText = true;
610
+ this.refundHasError = false;
611
+ this.refundReason = args.target.options[args.target.options.selectedIndex].id;
612
+ }
613
+ }
614
+ /**
615
+ * @param {?} event
616
+ * @return {?}
617
+ */
618
+ gotoServiceRequestPage(event) {
619
+ event.preventDefault();
620
+ if (this.isFromServiceRequestPage) {
621
+ this.paymentLibComponent.isFromRefundStatusPage = false;
622
+ this.viewStatus = 'main';
623
+ this.paymentLibComponent.viewName = 'case-transactions';
624
+ this.OrderslistService.setisFromServiceRequestPage(true);
625
+ this.OrderslistService.setnavigationPage('servicerequestpage');
626
+ }
627
+ if (this.isFromRefundListPage) {
628
+ this.paymentLibComponent.iscancelClicked = true;
629
+ this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
630
+ this.paymentLibComponent.isFromRefundStatusPage = true;
631
+ }
632
+ if (!this.paymentLibComponent.isFromRefundStatusPage) {
633
+ if (this.payment) {
634
+ this.OrderslistService.setpaymentPageView({ method: this.payment.method, payment_group_reference: this.paymentGroupRef, reference: this.payment.reference });
635
+ }
636
+ if (this.isFromServiceRequestPage) {
637
+ this.OrderslistService.setnavigationPage('servicerequestpage');
638
+ }
639
+ else {
640
+ this.OrderslistService.setnavigationPage('paymentdetailspage');
641
+ }
642
+ this.errorMessage = '';
643
+ this.paymentLibComponent.viewName = 'case-transactions';
644
+ // this.paymentLibComponent.TAKEPAYMENT = true;
645
+ this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
646
+ this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
647
+ this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
648
+ this.paymentLibComponent.isFromServiceRequestPage = true;
649
+ this.paymentViewService.getBSfeature().subscribe((/**
650
+ * @param {?} features
651
+ * @return {?}
652
+ */
653
+ features => {
654
+ /** @type {?} */
655
+ let result = JSON.parse(features).filter((/**
656
+ * @param {?} feature
657
+ * @return {?}
658
+ */
659
+ feature => feature.uid === BS_ENABLE_FLAG));
660
+ this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
661
+ }), (/**
662
+ * @param {?} err
663
+ * @return {?}
664
+ */
665
+ err => {
666
+ this.paymentLibComponent.ISBSENABLE = false;
667
+ }));
668
+ /** @type {?} */
669
+ let partUrl = this.bsPaymentDcnNumber ? `&dcn=${this.bsPaymentDcnNumber}` : '';
670
+ partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
671
+ partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
672
+ partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
673
+ partUrl += `&caseType=${this.caseType}`;
674
+ partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
675
+ partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
676
+ if (this.isFromPaymentDetailPage) {
677
+ partUrl += this.paymentLibComponent.isFromPaymentDetailPage;
678
+ }
679
+ /** @type {?} */
680
+ const url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=true&selectedOption=${this.option}${partUrl}`;
681
+ this.router.routeReuseStrategy.shouldReuseRoute = (/**
682
+ * @return {?}
683
+ */
684
+ () => false);
685
+ this.router.onSameUrlNavigation = 'reload';
686
+ this.router.navigateByUrl(url);
687
+ }
688
+ else {
689
+ this.paymentLibComponent.viewName === 'refundstatuslist';
690
+ this.paymentLibComponent.isFromRefundStatusPage = true;
691
+ }
132
692
  }
133
693
  /**
134
694
  * @return {?}
135
695
  */
136
696
  gotoCasetransationPage() {
697
+ this.OrderslistService.setnavigationPage('casetransactions');
698
+ this.errorMessage = '';
137
699
  this.paymentLibComponent.viewName = 'case-transactions';
138
- this.paymentLibComponent.TAKEPAYMENT = true;
139
700
  this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
140
701
  this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
141
702
  this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
142
- this.paymentViewService.getBSfeature().subscribe(features => {
703
+ this.paymentLibComponent.isFromServiceRequestPage = true;
704
+ this.paymentViewService.getBSfeature().subscribe((/**
705
+ * @param {?} features
706
+ * @return {?}
707
+ */
708
+ features => {
143
709
  /** @type {?} */
144
- let result = JSON.parse(features).filter(feature => feature.uid === BS_ENABLE_FLAG);
710
+ let result = JSON.parse(features).filter((/**
711
+ * @param {?} feature
712
+ * @return {?}
713
+ */
714
+ feature => feature.uid === BS_ENABLE_FLAG));
145
715
  this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
146
- }, err => {
716
+ }), (/**
717
+ * @param {?} err
718
+ * @return {?}
719
+ */
720
+ err => {
147
721
  this.paymentLibComponent.ISBSENABLE = false;
148
- });
722
+ }));
149
723
  /** @type {?} */
150
724
  let partUrl = this.bsPaymentDcnNumber ? `&dcn=${this.bsPaymentDcnNumber}` : '';
151
725
  partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
@@ -154,149 +728,180 @@ export class AddRemissionComponent {
154
728
  partUrl += `&caseType=${this.caseType}`;
155
729
  partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
156
730
  partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
731
+ if (this.isFromPaymentDetailPage) {
732
+ partUrl += this.paymentLibComponent.isFromPaymentDetailPage;
733
+ }
157
734
  /** @type {?} */
158
735
  const url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=true&selectedOption=${this.option}${partUrl}`;
736
+ this.router.routeReuseStrategy.shouldReuseRoute = (/**
737
+ * @return {?}
738
+ */
739
+ () => false);
740
+ this.router.onSameUrlNavigation = 'reload';
159
741
  this.router.navigateByUrl(url);
160
742
  }
743
+ /**
744
+ * @return {?}
745
+ */
746
+ gotoCasetransationPageCancelBtnClicked() {
747
+ this.OrderslistService.setisFromServiceRequestPage(false);
748
+ this.OrderslistService.setpaymentPageView({ method: '', payment_group_reference: '', reference: '' });
749
+ this.OrderslistService.setnavigationPage('casetransactions');
750
+ this.errorMessage = '';
751
+ this.paymentLibComponent.viewName = 'case-transactions';
752
+ this.paymentLibComponent.TAKEPAYMENT = true;
753
+ this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
754
+ this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
755
+ this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
756
+ this.paymentLibComponent.isFromServiceRequestPage = true;
757
+ this.paymentViewService.getBSfeature().subscribe((/**
758
+ * @param {?} features
759
+ * @return {?}
760
+ */
761
+ features => {
762
+ /** @type {?} */
763
+ let result = JSON.parse(features).filter((/**
764
+ * @param {?} feature
765
+ * @return {?}
766
+ */
767
+ feature => feature.uid === BS_ENABLE_FLAG));
768
+ this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
769
+ }), (/**
770
+ * @param {?} err
771
+ * @return {?}
772
+ */
773
+ err => {
774
+ this.paymentLibComponent.ISBSENABLE = false;
775
+ }));
776
+ /** @type {?} */
777
+ let partUrl = this.bsPaymentDcnNumber ? `&dcn=${this.bsPaymentDcnNumber}` : '';
778
+ partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
779
+ partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
780
+ partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
781
+ partUrl += `&caseType=${this.caseType}`;
782
+ partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
783
+ partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
784
+ if (this.isFromPaymentDetailPage) {
785
+ partUrl += this.paymentLibComponent.isFromPaymentDetailPage;
786
+ }
787
+ if (!this.paymentLibComponent.SERVICEREQUEST) {
788
+ /** @type {?} */
789
+ const url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=true&selectedOption=${this.option}${partUrl}`;
790
+ this.router.routeReuseStrategy.shouldReuseRoute = (/**
791
+ * @return {?}
792
+ */
793
+ () => false);
794
+ this.router.onSameUrlNavigation = 'reload';
795
+ this.router.navigateByUrl(url);
796
+ }
797
+ else {
798
+ /** @type {?} */
799
+ const url = `/payment-history/${this.ccdCaseNumber}?selectedOption=${this.option}${partUrl}`;
800
+ this.router.routeReuseStrategy.shouldReuseRoute = (/**
801
+ * @return {?}
802
+ */
803
+ () => false);
804
+ this.router.onSameUrlNavigation = 'reload';
805
+ this.router.navigateByUrl(url);
806
+ }
807
+ }
808
+ /**
809
+ * @param {?} currency
810
+ * @return {?}
811
+ */
812
+ getFormattedCurrency(currency) {
813
+ if (currency.toString().includes(".")) {
814
+ return currency;
815
+ }
816
+ return currency.toString().concat(".00");
817
+ }
161
818
  }
162
819
  AddRemissionComponent.decorators = [
163
820
  { type: Component, args: [{
164
821
  selector: 'ccpay-add-remission',
165
- template: `<div class="add-remission">
166
- <div *ngIf="errorMessage">
167
- <div class="error-summary" role="group" aria-labelledby="failure-error-summary-heading" tabindex="-1">
168
- <h2 class="heading-medium error-summary-heading" id="failure-error-summary-heading">
169
- Error in processing the request
170
- </h2>
171
- <div class="govuk-error-summary__body">
172
- {{ errorMessage }}
173
- </div>
174
- </div>
175
- </div>
176
- <ng-container *ngIf="viewStatus === 'main'">
177
- <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>
178
- <h1 class="heading-large">Add remission</h1>
179
- <form novalidate>
180
- <div class="govuk-form-group">
181
- <form [formGroup]="remissionForm" novalidate>
182
- <div class="govuk-form-group">
183
- <label class="govuk-label govuk-label--s" for="remission-code">
184
- Add remission to {{ fee.code }}:{{ fee.description }}
185
- <span class="form-hint">Enter remission for reference. For example: HWF-A1B-23C</span>
186
- </label>
187
- <input [ngClass]="{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}" class="govuk-input govuk-input--width-20 govuk-!-margin-right-1" id="remissionCode" aria-label="remissionCode" name="remissionCode" type="text" formControlName="remissionCode">
188
- <p class="inline-error-message" *ngIf="isRemissionCodeEmpty || remissionCodeHasError">
189
- <span *ngIf="isRemissionCodeEmpty">Enter a remission code</span>
190
- <span *ngIf="remissionCodeHasError">Enter a vaild remission code</span>
191
- </p>
192
- </div>
193
- <div class="govuk-form-group">
194
- <label class="govuk-label govuk-label--s" for="amount">
195
- How much does the applicant need to pay?
196
- </label>
197
-
198
- <div id="amount-currency" class="govuk-visually-hidden">in pounds</div>
199
- <div class="hmcts-currency-input">
200
- <div class="hmcts-currency-input__symbol" aria-hidden="true">£</div>
201
- <input class="govuk-input govuk-input--width-10" [ngClass]="{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}" id="amount" aria-label="amount" name="amount" type="text" aria-describedby="amount-currency" formControlName="amount">
202
- <p class="inline-error-message" *ngIf="isAmountEmpty || amountHasError || isRemissionLessThanFeeError">
203
- <span *ngIf="isAmountEmpty">Enter a amount</span>
204
- <span *ngIf="amountHasError">Enter a vaild amount</span>
205
- <span *ngIf="isRemissionLessThanFeeError">The remission amount must be less than the total fee</span>
206
- </p>
207
- </div>
208
- </div>
209
- </form>
210
- <button class="button" type="submit" (click)="addRemission()">
211
- Submit
212
- </button>
213
- </div>
214
- </form>
215
- </ng-container>
216
- <ng-container *ngIf="viewStatus === 'confirmation'">
217
- <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'>
218
- <div class="govuk-warning-text">
219
- <span class="govuk-warning-text__icon" aria-hidden="true">!</span>
220
- <strong class="govuk-warning-text__text">
221
- <span class="govuk-warning-text__assistive">Warning</span>
222
- Are you sure you want to add remission to this fee?
223
- </strong>
224
- </div>
225
- <table class="govuk-table">
226
- <tr class="govuk-table__row">
227
- <td class="govuk-table__cell govuk-!-font-weight-bold">Remission code:</td>
228
- <td class="govuk-table__cell">{{ remissionForm.controls.remissionCode.value }}</td>
229
- </tr>
230
- <tr class="govuk-table__row">
231
- <td class="govuk-table__cell govuk-!-font-weight-bold">Fee code:</td>
232
- <td class="govuk-table__cell">{{ fee.code }}</td>
233
- </tr>
234
- <tr class="govuk-table__row">
235
- <td class="govuk-table__cell govuk-!-font-weight-bold">Fee description:</td>
236
- <td class="govuk-table__cell">{{ fee.description }}</td>
237
- </tr>
238
- <tr class="govuk-table__row">
239
- <td class="govuk-table__cell govuk-!-font-weight-bold">Amount the applicant must pay:</td>
240
- <td class="govuk-table__cell">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>
241
- </tr>
242
- </table>
243
-
244
- <button type="submit" class="button govuk-button--secondary" (click)="cancelRemission.emit()">
245
- Cancel
246
- </button>
247
- <button type="submit"
248
- [disabled]="isConfirmationBtnDisabled"
249
- [ngClass]='isConfirmationBtnDisabled ? "button button--disabled govuk-!-margin-right-1" : "button govuk-!-margin-right-1"'
250
- (click)="confirmRemission()">
251
- Confirm
252
- </button>
253
-
254
- </ng-container>
255
-
256
- </div>
257
-
258
- `,
259
- styles: [`.add-remission .button{margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .govuk-label--s,.add-remission .govuk-warning-text__text,.add-remission .hmcts-currency-input__symbol{font-size:19px}.add-remission .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.add-remission .inline-error-message{color:#a71414;font-weight:700;margin-top:10px}`]
260
- },] },
822
+ template: "<div class=\"add-remission\">\n <div *ngIf=\"errorMessage\">\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 Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"viewStatus === 'main' && !isRefundRemission \">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>\n <h1 class=\"heading-large\">Add remission </h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n Add remission to {{ fee?.code }}: {{ fee?.description }}\n <span class=\"form-hint\">Enter remission for reference. For example: HWF-A1B-23C</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"amount\">\n How much does the applicant need to pay?\n </label>\n\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"text\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">The remission amount must be less than the total fee</span>\n </p>\n </div>\n </div>\n </form>\n <button class=\"button\" type=\"submit\" (click)=\"addRemission()\">\n Submit\n </button>\n </div>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'confirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to add remission to this fee?\n </strong>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission code:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.remissionCode.value }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code:</td>\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee description:</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Amount the applicant must pay:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission.emit()\">\n Cancel\n </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmRemission()\">\n Confirm\n </button>\n\n </ng-container>\n\n <!-- Add retro remission changes-->\n\n <ng-container *ngIf=\"viewCompStatus === 'addremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSADDRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <h1 class=\"heading-large\">Enter help with fees or remission reference</h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n <span class=\"form-hint\">For example: HWF-A1B-23C</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n \n </form>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"addRemissionCode()\" class=\"govuk-button\"> Continue</button>\n <p><a (click)=\"gotoCasetransationPageCancelBtnClicked()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n </div>\n </div>\n </form>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'processretroremissonpage'\" >\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\"> \n <h1 *ngIf=\"remessionPayment?.status === 'Success' || isFromRefundListPage\" class=\"heading-medium\">\n Enter the amount to be refunded\n </h1> \n <h1 *ngIf=\"remessionPayment?.status !== 'Success' && !isFromRefundListPage\" class=\"heading-medium\">\n Enter the remission amount\n </h1> \n <h1 *ngIf=\"remessionPayment?.status === 'undefined'\" class=\"heading-medium\">\n Enter the amount\n </h1> \n </legend>\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"number\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">You cannot add a remission that's more than the fee amount.</span>\n </p>\n \n </div>\n </fieldset>\n </form>\n \n <div class=\"govuk-button-group\">\n <button (click)=\"gotoAddRetroRemissionCodePage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoCheckRetroRemissionPage(payment)\" class=\"govuk-button\"> Continue</button>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </div>\n </div>\n \n </form>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkretroremissionpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n <a (click)=\"gotoProcessRetroRemissionPage()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n <a (click)=\"addRemissionCode()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"addRemissionCode()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"confirmRetroRemission()\"> Add remission </button>\n <p> <a (click)=\"gotoCasetransationPageCancelBtnClicked()\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retroremissionconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Remission added\n </h1>\n <div *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-panel__body\">\n <p class=\"govuk-body\" style=\"color: white\"><strong>The amount to be refunded should be {{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</strong></p>\n \n </div>\n </div>\n <div *ngIf=\"remessionPayment.status === 'Success'\" >\n <button type=\"submit\" [disabled]=\"!isRemissionApplied\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"processRefund()\">Submit refund </button>\n </div>\n <p class=\"govuk-body\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'refundconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body\" style=\"color: white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n \n </ng-container>\n\n <!-- Issue Refund Section -->\n\n <ng-container *ngIf=\"viewCompStatus === 'issuerefund' && isRefundRemission\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ISSUEREFUNDPAGE'> \n <h1 class=\"heading-large\">Process refund</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <h1 class=\"heading-large\">Why are you making this refund?\n </h1>\n \n\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n \n <div\n [ngClass]=\"refundHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" >\n <p class=\"inline-error-message\" *ngIf=\"refundHasError\">\n <span *ngIf=\"refundHasError\">Select a reason why you\u2019re making this refund</span>\n </p>\n\n \n\n <div class = \"container-fluid\">\n <div class=\"row\">\n <div class=\"govuk-radios__item col-md-4\" *ngFor=\"let refund of commonRefundReasons; let i = index;\">\n <!-- <div *ngIf = \"{{refund.name}} !== 'Retrospective remission'\"> -->\n <input class=\"govuk-radios__input\" id=\"{{refund.name}}\" name=\"refundReason\" type=\"radio\"\n formControlName=\"refundReason\" value={{refund.code}}\n (change)=\"selectRadioButton(refund.name, refund.name)\">\n <label class=\"govuk-label--s govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{refund.name}}\n </label>\n\n <div class=\"govuk-radios__conditional\" *ngIf=\"isRefundReasonsSelected && showReasonText && selectedRefundReason === refund.name \" >\n <label class=\"govuk-label govuk-label--m\" for=\"{{refund.name}}\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n \n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <br/>\n <div>\n <select formControlName=\"refundDDReason\" class=\"govuk-select\" id=\"sort\" (change)=\"selectchange($event)\">\n <option selected='selected' [defaultSelected]=true [value]=\"default\" >{{default}}</option> \n <!-- <option value=\"\" selected='selected'>Select a different reason</option> -->\n <option *ngFor=\"let refund of refundReasons;\" id=\"{{refund.name}}\" value=\"{{refund.code}}\">{{refund.name}}</option>\n </select>\n \n </div>\n <br/>\n <div class=\"govuk-radios__conditional\" *ngIf=\"showReasonText && !isRefundReasonsSelected\" >\n <label class=\"govuk-label govuk-label--m\" for=\"amount\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"{{reasonLength}}\" formControlName=\"reason\">\n \n </div>\n\n \n </div>\n </fieldset>\n </form>\n </div>\n </form>\n </div>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoIssueRefundConfirmation(payment)\" class=\"govuk-button\"> Continue</button>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n </div>\n \n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkissuerefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKISSUEREFUNDPAGE'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ selectedRefundReason }}\n <a (click)=\"changeIssueRefundReason()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{this.payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoIssueRefundPage()\"> Previous </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmIssueRefund()\">\n Submit refund\n </button>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <!--Retro Refund-->\n <ng-container *ngIf=\"viewCompStatus === 'addrefundforremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> Retrospective remission </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{this.remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code</td>\n <td class=\"govuk-table__cell\">{{this.remission.fee_code}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{feeamount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoServiceRequestPage($event)\">Previous</button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retrorefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body\" style=\"color: white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{ refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n </ng-container>\n\n</div>\n\n\n\n",
823
+ styles: [".add-remission .button{padding:.5em;font-size:19px;font-weight:200;margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .govuk-label--s,.add-remission .govuk-warning-text__text,.add-remission .hmcts-currency-input__symbol{font-size:19px;font-weight:400}.add-remission .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.add-remission .inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.add-remission .govuk-button,.add-remission .govuk-link{margin-right:1em;font-size:19px;font-weight:200}.add-remission .govuk-button-group{padding-top:2em}.add-remission .heading-medium{margin-top:.875em}.add-remission .heading-large{margin-top:.25em}.add-remission .govuk-panel--confirmation{color:#fff;background:#00703c}.add-remission .govuk-panel__title{font-size:5rem}.add-remission .govuk-body,.add-remission .govuk-body-m{font-size:2.1875rem}.add-remission .govuk-radios__item{clear:initial!important;display:inline-block;width:45%!important}.add-remission .govuk-radios__conditional{padding-top:12px!important}.add-remission .radio,.add-remission .right{float:right}.govuk-input{font-size:19px}.govuk-select{font-size:19px;font-weight:400}.govuk-input--width-10{max-width:36ex}.govuk-label--m{font-size:19px;font-weight:400}.govuk-error-summary__body{font-size:19px!important}.govuk-error-summary__title{font-size:24px!important}"]
824
+ }] }
261
825
  ];
262
826
  /** @nocollapse */
263
827
  AddRemissionComponent.ctorParameters = () => [
264
828
  { type: FormBuilder },
265
829
  { type: Router },
266
830
  { type: PaymentViewService },
267
- { type: PaymentLibComponent }
831
+ { type: PaymentLibComponent },
832
+ { type: RefundsService },
833
+ { type: ChangeDetectorRef },
834
+ { type: OrderslistService }
268
835
  ];
269
836
  AddRemissionComponent.propDecorators = {
270
837
  fee: [{ type: Input }],
838
+ payment: [{ type: Input }],
839
+ remission: [{ type: Input }],
271
840
  ccdCaseNumber: [{ type: Input }],
272
841
  caseType: [{ type: Input }],
842
+ viewCompStatus: [{ type: Input }],
273
843
  paymentGroupRef: [{ type: Input }],
274
844
  isTurnOff: [{ type: Input }],
845
+ isRefundRemission: [{ type: Input }],
275
846
  isOldPcipalOff: [{ type: Input }],
276
847
  isNewPcipalOff: [{ type: Input }],
277
848
  isStrategicFixEnable: [{ type: Input }],
278
- cancelRemission: [{ type: Output }]
849
+ orderStatus: [{ type: Input }],
850
+ paidAmount: [{ type: Input }],
851
+ isFromRefundListPage: [{ type: Input }],
852
+ isFromPaymentDetailPage: [{ type: Input }],
853
+ isFromServiceRequestPage: [{ type: Input }],
854
+ feeamount: [{ type: Input }],
855
+ cancelRemission: [{ type: Output }],
856
+ refundListReason: [{ type: Output }],
857
+ refundListAmount: [{ type: Output }]
279
858
  };
280
859
  if (false) {
281
860
  /** @type {?} */
282
861
  AddRemissionComponent.prototype.fee;
283
862
  /** @type {?} */
863
+ AddRemissionComponent.prototype.payment;
864
+ /** @type {?} */
865
+ AddRemissionComponent.prototype.remission;
866
+ /** @type {?} */
284
867
  AddRemissionComponent.prototype.ccdCaseNumber;
285
868
  /** @type {?} */
286
869
  AddRemissionComponent.prototype.caseType;
287
870
  /** @type {?} */
871
+ AddRemissionComponent.prototype.viewCompStatus;
872
+ /** @type {?} */
288
873
  AddRemissionComponent.prototype.paymentGroupRef;
289
874
  /** @type {?} */
290
875
  AddRemissionComponent.prototype.isTurnOff;
291
876
  /** @type {?} */
877
+ AddRemissionComponent.prototype.isRefundRemission;
878
+ /** @type {?} */
292
879
  AddRemissionComponent.prototype.isOldPcipalOff;
293
880
  /** @type {?} */
294
881
  AddRemissionComponent.prototype.isNewPcipalOff;
295
882
  /** @type {?} */
296
883
  AddRemissionComponent.prototype.isStrategicFixEnable;
297
884
  /** @type {?} */
885
+ AddRemissionComponent.prototype.orderStatus;
886
+ /** @type {?} */
887
+ AddRemissionComponent.prototype.paidAmount;
888
+ /** @type {?} */
889
+ AddRemissionComponent.prototype.isFromRefundListPage;
890
+ /** @type {?} */
891
+ AddRemissionComponent.prototype.isFromPaymentDetailPage;
892
+ /** @type {?} */
893
+ AddRemissionComponent.prototype.isFromServiceRequestPage;
894
+ /** @type {?} */
895
+ AddRemissionComponent.prototype.feeamount;
896
+ /** @type {?} */
298
897
  AddRemissionComponent.prototype.cancelRemission;
299
898
  /** @type {?} */
899
+ AddRemissionComponent.prototype.refundListReason;
900
+ /** @type {?} */
901
+ AddRemissionComponent.prototype.refundListAmount;
902
+ /** @type {?} */
903
+ AddRemissionComponent.prototype.refund;
904
+ /** @type {?} */
300
905
  AddRemissionComponent.prototype.remissionForm;
301
906
  /** @type {?} */
302
907
  AddRemissionComponent.prototype.hasErrors;
@@ -311,23 +916,93 @@ if (false) {
311
916
  /** @type {?} */
312
917
  AddRemissionComponent.prototype.bsPaymentDcnNumber;
313
918
  /** @type {?} */
919
+ AddRemissionComponent.prototype.selectedValue;
920
+ /** @type {?} */
921
+ AddRemissionComponent.prototype.amount;
922
+ /** @type {?} */
923
+ AddRemissionComponent.prototype.retroRemission;
924
+ /** @type {?} */
925
+ AddRemissionComponent.prototype.remissionReference;
926
+ /** @type {?} */
927
+ AddRemissionComponent.prototype.refundReference;
928
+ /** @type {?} */
929
+ AddRemissionComponent.prototype.refundAmount;
930
+ /** @type {?} */
931
+ AddRemissionComponent.prototype.paymentExplanationHasError;
932
+ /** @type {?} */
933
+ AddRemissionComponent.prototype.refundReason;
934
+ /** @type {?} */
935
+ AddRemissionComponent.prototype.selectedRefundReason;
936
+ /** @type {?} */
937
+ AddRemissionComponent.prototype.refundCode;
938
+ /** @type {?} */
939
+ AddRemissionComponent.prototype.remessionPayment;
940
+ /** @type {?} */
314
941
  AddRemissionComponent.prototype.isRemissionCodeEmpty;
315
942
  /** @type {?} */
316
943
  AddRemissionComponent.prototype.remissionCodeHasError;
317
944
  /** @type {?} */
318
945
  AddRemissionComponent.prototype.isAmountEmpty;
319
946
  /** @type {?} */
947
+ AddRemissionComponent.prototype.isReasonEmpty;
948
+ /** @type {?} */
320
949
  AddRemissionComponent.prototype.amountHasError;
321
950
  /** @type {?} */
322
951
  AddRemissionComponent.prototype.isRemissionLessThanFeeError;
323
952
  /** @type {?} */
324
- AddRemissionComponent.prototype.formBuilder;
953
+ AddRemissionComponent.prototype.refundHasError;
325
954
  /** @type {?} */
326
- AddRemissionComponent.prototype.router;
955
+ AddRemissionComponent.prototype.isPaymentSuccess;
327
956
  /** @type {?} */
328
- AddRemissionComponent.prototype.paymentViewService;
957
+ AddRemissionComponent.prototype.isRemissionApplied;
958
+ /** @type {?} */
959
+ AddRemissionComponent.prototype.remissionamt;
960
+ /** @type {?} */
961
+ AddRemissionComponent.prototype.refundReasons;
962
+ /** @type {?} */
963
+ AddRemissionComponent.prototype.commonRefundReasons;
964
+ /** @type {?} */
965
+ AddRemissionComponent.prototype.showReasonText;
966
+ /** @type {?} */
967
+ AddRemissionComponent.prototype.isRefundReasonsSelected;
329
968
  /** @type {?} */
969
+ AddRemissionComponent.prototype.default;
970
+ /** @type {?} */
971
+ AddRemissionComponent.prototype.reasonLength;
972
+ /**
973
+ * @type {?}
974
+ * @private
975
+ */
976
+ AddRemissionComponent.prototype.formBuilder;
977
+ /**
978
+ * @type {?}
979
+ * @private
980
+ */
981
+ AddRemissionComponent.prototype.router;
982
+ /**
983
+ * @type {?}
984
+ * @private
985
+ */
986
+ AddRemissionComponent.prototype.paymentViewService;
987
+ /**
988
+ * @type {?}
989
+ * @private
990
+ */
330
991
  AddRemissionComponent.prototype.paymentLibComponent;
992
+ /**
993
+ * @type {?}
994
+ * @private
995
+ */
996
+ AddRemissionComponent.prototype.refundService;
997
+ /**
998
+ * @type {?}
999
+ * @private
1000
+ */
1001
+ AddRemissionComponent.prototype.cd;
1002
+ /**
1003
+ * @type {?}
1004
+ * @private
1005
+ */
1006
+ AddRemissionComponent.prototype.OrderslistService;
331
1007
  }
332
-
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUVsRSxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztBQW9HL0MsTUFBTTs7Ozs7OztJQXlCSixZQUFvQixXQUF3QixFQUNsQyxRQUNBLG9CQUNBO1FBSFUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDbEMsV0FBTSxHQUFOLE1BQU07UUFDTix1QkFBa0IsR0FBbEIsa0JBQWtCO1FBQ2xCLHdCQUFtQixHQUFuQixtQkFBbUI7K0JBbkJtQixJQUFJLFlBQVksRUFBRTt5QkFHdEQsS0FBSzswQkFDSixNQUFNOzRCQUNKLElBQUk7c0JBQ0YsSUFBSTt5Q0FDZ0IsS0FBSztvQ0FHVixLQUFLO3FDQUNKLEtBQUs7NkJBQ2IsS0FBSzs4QkFDSixLQUFLOzJDQUNRLEtBQUs7S0FLVzs7OztJQUV2RCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFD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QWtCO1lBQ2xCLG1CQUFtQjs7O2tCQXVHekIsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLEtBQUs7OEJBQ0wsS0FBSzt3QkFDTCxLQUFLOzZCQUNMLEtBQUs7NkJBQ0wsS0FBSzttQ0FDTCxLQUFLOzhCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYWRkLXJlbWlzc2lvbicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImFkZC1yZW1pc3Npb25cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSBlcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiBpZD1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgICAgICAgRXJyb3IgaW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdFxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ21haW4nXCI+XG4gICAgICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0FERFJFTUlTU0lPTic+XG4gICAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCI+QWRkIHJlbWlzc2lvbjwvaDE+XG4gICAgICA8Zm9ybSBub3ZhbGlkYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwicmVtaXNzaW9uRm9ybVwiIG5vdmFsaWRhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1sYWJlbC0tc1wiIGZvcj1cInJlbWlzc2lvbi1jb2RlXCI+XG4gICAgICAgICAgICAgICAgICBBZGQgcmVtaXNzaW9uIHRvIHt7IGZlZS5jb2RlIH19Ont7IGZlZS5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCI+RW50ZXIgcmVtaXNzaW9uIGZvciByZWZlcmVuY2UuIEZvciBleGFtcGxlOiBIV0YtQTFCLTIzQzwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNSZW1pc3Npb25Db2RlRW1wdHkgfHwgcmVtaXNzaW9uQ29kZUhhc0Vycm9yfVwiIGNsYXNzPVwiZ292dWstaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTIwIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiBpZD1cInJlbWlzc2lvbkNvZGVcIiBhcmlhLWxhYmVsPVwicmVtaXNzaW9uQ29kZVwiICBuYW1lPVwicmVtaXNzaW9uQ29kZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVtaXNzaW9uQ29kZVwiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1JlbWlzc2lvbkNvZGVFbXB0eSB8fCByZW1pc3Npb25Db2RlSGFzRXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVtaXNzaW9uQ29kZUVtcHR5XCI+RW50ZXIgYSByZW1pc3Npb24gY29kZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlbWlzc2lvbkNvZGVIYXNFcnJvclwiPkVudGVyIGEgdmFpbGQgcmVtaXNzaW9uIGNvZGU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstbGFiZWwtLXNcIiBmb3I9XCJhbW91bnRcIj5cbiAgICAgICAgICAgICAgICBIb3cgbXVjaCBkb2VzIHRoZSBhcHBsaWNhbnQgbmVlZCB0byBwYXk/XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgPGRpdiBpZD1cImFtb3VudC1jdXJyZW5jeVwiIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+aW4gcG91bmRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhtY3RzLWN1cnJlbmN5LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhtY3RzLWN1cnJlbmN5LWlucHV0X19zeW1ib2xcIiBhcmlhLWhpZGRlbj1cInRydWVcIj7CozwvZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLWlucHV0IGdvdnVrLWlucHV0LS13aWR0aC0xMFwiIFtuZ0NsYXNzXT1cInsnaW5saW5lLWVycm9yLWNsYXNzJzogaXNBbW91bnRFbXB0eSB8fCBhbW91bnRIYXNFcnJvciB8fCBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3J9XCIgaWQ9XCJhbW91bnRcIiBhcmlhLWxhYmVsPVwiYW1vdW50XCIgIG5hbWU9XCJhbW91bnRcIiB0eXBlPVwidGV4dFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJhbW91bnQtY3VycmVuY3lcIiBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImlubGluZS1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc0Ftb3VudEVtcHR5IHx8IGFtb3VudEhhc0Vycm9yIHx8IGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0Ftb3VudEVtcHR5XCI+RW50ZXIgYSBhbW91bnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFtb3VudEhhc0Vycm9yXCI+RW50ZXIgYSB2YWlsZCBhbW91bnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvclwiPlRoZSByZW1pc3Npb24gYW1vdW50IG11c3QgYmUgbGVzcyB0aGFuIHRoZSB0b3RhbCBmZWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJhZGRSZW1pc3Npb24oKVwiPlxuICAgICAgICAgICAgICBTdWJtaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnY29uZmlybWF0aW9uJ1wiPlxuICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdBRERSRU1JU1NJT05DT05GSVJNQVRJT04nPiBcbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2Fzc2lzdGl2ZVwiPldhcm5pbmc8L3NwYW4+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFkZCByZW1pc3Npb24gdG8gdGhpcyBmZWU/XG4gICAgICAgIDwvc3Ryb25nPlxuICAgICAgPC9kaXY+XG4gICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5SZW1pc3Npb24gY29kZTo8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyByZW1pc3Npb25Gb3JtLmNvbnRyb2xzLnJlbWlzc2lvbkNvZGUudmFsdWUgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5GZWUgY29kZTo8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBmZWUuY29kZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPkZlZSBkZXNjcmlwdGlvbjo8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBmZWUuZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5BbW91bnQgdGhlIGFwcGxpY2FudCBtdXN0IHBheTo8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyAgcmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWUgIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsUmVtaXNzaW9uLmVtaXQoKVwiPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0naXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJ1xuICAgICAgKGNsaWNrKT1cImNvbmZpcm1SZW1pc3Npb24oKVwiPlxuICAgICAgICBDb25maXJtXG4gICAgICA8L2J1dHRvbj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj5cblxuYCxcbiAgc3R5bGVzOiBbYC5hZGQtcmVtaXNzaW9uIC5idXR0b257bWFyZ2luOjIwcHggMnB4fS5hZGQtcmVtaXNzaW9uIHRkLmdvdnVrLXRhYmxlX19jZWxse3dpZHRoOjUwJX0uYWRkLXJlbWlzc2lvbiAuZ292dWstYnV0dG9uLS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojZGVlMGUyO2JveC1zaGFkb3c6MCAycHggMCAjODU4Njg4O2NvbG9yOiMwYjBjMGM7bWFyZ2luLXJpZ2h0Oi41ZW19LmFkZC1yZW1pc3Npb24gLmdvdnVrLWxhYmVsLS1zLC5hZGQtcmVtaXNzaW9uIC5nb3Z1ay13YXJuaW5nLXRleHRfX3RleHQsLmFkZC1yZW1pc3Npb24gLmhtY3RzLWN1cnJlbmN5LWlucHV0X19zeW1ib2x7Zm9udC1zaXplOjE5cHh9LmFkZC1yZW1pc3Npb24gLmlubGluZS1lcnJvci1jbGFzc3tvdXRsaW5lOiNhNzE0MTQgc29saWQgM3B4O291dGxpbmUtb2Zmc2V0OjB9LmFkZC1yZW1pc3Npb24gLmlubGluZS1lcnJvci1tZXNzYWdle2NvbG9yOiNhNzE0MTQ7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6MTBweH1gXVxufSlcbmV4cG9ydCBjbGFzcyBBZGRSZW1pc3Npb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBmZWU6IElGZWU7XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcbiAgQElucHV0KCkgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTmV3UGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGNhbmNlbFJlbWlzc2lvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlbWlzc2lvbkZvcm06IEZvcm1Hcm91cDtcbiAgaGFzRXJyb3JzID0gZmFsc2U7XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIG9wdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcblxuICBpc1JlbWlzc2lvbkNvZGVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25Db2RlSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBbW91bnRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT047XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMucmVtaXNzaW9uRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcmVtaXNzaW9uQ29kZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOV17M30pLShbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KSQnKVxuICAgICAgXSkpLFxuICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXFxcLlswLTldezJ9KT8kJylcbiAgICAgIF0pKVxuICAgIH0pO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbigpIHtcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scyxcbiAgICAgIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUgPSB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCA+IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0udmFsaWQgJiYgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSkge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbmZpcm1hdGlvbic7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJscy5hbW91bnQudmFsaWQgJiYgIWlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpe1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRSZW1pc3Npb25Gb3JtKHZhbCwgZmllbGQpe1xuICAgIGlmKGZpZWxkPT09J3JlbWlzc2lvbkNvZGUnIHx8IGZpZWxkPT09J0FsbCcpIHtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25Db2RlRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlbWlzc2lvbkNvZGVIYXNFcnJvciA9IHZhbFsxXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkPT09J2Ftb3VudCcgfHwgZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMl07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzNdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbNF07XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVJlbWlzc2lvbigpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IG5ld05ldEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWUsXG4gICAgIHJlbWlzc2lvbkFtb3VudCA9IHRoaXMuZmVlLm5ldF9hbW91bnQgLSBuZXdOZXRBbW91bnQsXG4gICAgIHJlcXVlc3RCb2R5ID0gbmV3IEFkZFJlbWlzc2lvblJlcXVlc3RcbiAgICAodGhpcy5jY2RDYXNlTnVtYmVyLCB0aGlzLmZlZSwgcmVtaXNzaW9uQW1vdW50LCB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMucmVtaXNzaW9uQ29kZS52YWx1ZSwgdGhpcy5jYXNlVHlwZSk7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRHcm91cFdpdGhSZW1pc3Npb25zKGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLnBheW1lbnRHcm91cFJlZikudHJpbSgpLCB0aGlzLmZlZS5pZCwgcmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBsZXQgTERVcmwgPSB0aGlzLmlzVHVybk9mZiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJ1xuICAgICAgICAgICAgTERVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgICAgICAgICAgTERVcmwgKz0gdGhpcy5pc05ld1BjaXBhbE9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSdcbiAgICAgICAgICAgIExEVXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnXG4gICAgICAgICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24pIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWZlZS1zdW1tYXJ5JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSZkY249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNufSR7TERVcmx9YCk7XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPSB0aGlzLmlzTmV3UGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA9IHRoaXMuaXNPbGRQY2lwYWxPZmY7XG5cbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBsZXQgcGFydFVybCA9IHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWA7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuXG4gICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9dHJ1ZSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxufVxuIl19
1008
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztNQUVoRSxjQUFjLEdBQUcsdUJBQXVCO0FBTzlDLE1BQU0sT0FBTyxxQkFBcUI7Ozs7Ozs7Ozs7O0lBcUVoQyxZQUFvQixXQUF3QixFQUNsQyxNQUFjLEVBQ2Qsa0JBQXNDLEVBQ3RDLG1CQUF3QyxFQUN4QyxhQUE2QixFQUM3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O0lBQzdCLDJDQUF5Qjs7SUFDekIscURBQXVDOztJQUN2Qyx3REFBMEM7O0lBQzFDLHlEQUEyQzs7SUFDM0MsMENBQTJCOztJQUMzQixnREFBbUU7O0lBRW5FLGlEQUFnRjs7SUFDaEYsaURBQXNFOztJQUV0RSx1Q0FPQzs7SUFFRCw4Q0FBeUI7O0lBQ3pCLDBDQUFrQjs7SUFDbEIsMkNBQW9COztJQUNwQiw2Q0FBb0I7O0lBQ3BCLHVDQUFzQjs7SUFDdEIsMERBQTJDOztJQUMzQyxtREFBMkI7O0lBQzNCLDhDQUFzQjs7SUFDdEIsdUNBQVk7O0lBQ1osK0NBQWdDOztJQUNoQyxtREFBZ0M7O0lBQ2hDLGdEQUF3Qjs7SUFDeEIsNkNBQXFCOztJQUNyQiwyREFBNEM7O0lBQzVDLDZDQUFvQjs7SUFDcEIscURBQTZCOztJQUM3QiwyQ0FBa0I7O0lBQ2xCLGlEQUEwQjs7SUFDMUIscURBQXNDOztJQUN0QyxzREFBdUM7O0lBQ3ZDLDhDQUErQjs7SUFDL0IsOENBQStCOztJQUMvQiwrQ0FBZ0M7O0lBQ2hDLDREQUE2Qzs7SUFDN0MsK0NBQStCOztJQUMvQixpREFBa0M7O0lBQ2xDLG1EQUFvQzs7SUFDcEMsNkNBQW9COztJQUNwQiw4Q0FBMEI7O0lBQzFCLG9EQUFnQzs7SUFDaEMsK0NBQXdCOztJQUN4Qix3REFBaUM7O0lBQ2pDLHdDQUFnQjs7SUFDaEIsNkNBQXFCOzs7OztJQUdULDRDQUFnQzs7Ozs7SUFDMUMsdUNBQXNCOzs7OztJQUN0QixtREFBOEM7Ozs7O0lBQzlDLG9EQUFnRDs7Ozs7SUFDaEQsOENBQXFDOzs7OztJQUNyQyxtQ0FBNkI7Ozs7O0lBQzdCLGtEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkZFJlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7IFJlZnVuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVmdW5kcy9yZWZ1bmRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVJlZnVuZFJlYXNvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRSZWFzb25zJztcbmltcG9ydCB7IFJlZnVuZHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9SZWZ1bmRzUmVxdWVzdCc7XG5pbXBvcnQgeyBBZGRSZXRyb1JlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCc7XG5pbXBvcnQgeyBJc3N1ZVJlZnVuZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lzc3VlUmVmdW5kUmVxdWVzdCc7XG5pbXBvcnQgeyBQb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1Bvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbic7XG5pbXBvcnQgeyBQb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVtaXNzaW9uJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYWRkLXJlbWlzc2lvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZlZTogSUZlZTtcbiAgQElucHV0KCkgcGF5bWVudDogSVBheW1lbnQ7XG4gIEBJbnB1dCgpIHJlbWlzc2lvbjogSVJlbWlzc2lvbjtcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aWV3Q29tcFN0YXR1czogc3RyaW5nO1xuICBASW5wdXQoKSBwYXltZW50R3JvdXBSZWY6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1JlZnVuZFJlbWlzc2lvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTmV3UGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgb3JkZXJTdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCkgcGFpZEFtb3VudDogYW55O1xuICBASW5wdXQoKSBpc0Zyb21SZWZ1bmRMaXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNGcm9tUGF5bWVudERldGFpbFBhZ2U6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmVlYW1vdW50OiBudW1iZXI7XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy9AT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKHtyZWFzb246c3RyaW5nLCBjb2RlOnN0cmluZ30pO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e3JlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdEFtb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuXG4gIHJlbWlzc2lvbkZvcm06IEZvcm1Hcm91cDtcbiAgaGFzRXJyb3JzID0gZmFsc2U7XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIG9wdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgc2VsZWN0ZWRWYWx1ZSA9ICd5ZXMnO1xuICBhbW91bnQ6IGFueTtcbiAgcmV0cm9SZW1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uUmVmZXJlbmNlOiBzdHJpbmcgPSAnJztcbiAgcmVmdW5kUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlZnVuZEFtb3VudDogc3RyaW5nO1xuICBwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRSZWFzb246c3RyaW5nO1xuICBzZWxlY3RlZFJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRDb2RlOnN0cmluZztcbiAgcmVtZXNzaW9uUGF5bWVudDpJUGF5bWVudDtcbiAgaXNSZW1pc3Npb25Db2RlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uQ29kZUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQW1vdW50RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kSGFzRXJyb3I6Ym9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnRTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25hbXQ6bnVtYmVyO1xuICByZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICBjb21tb25SZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICBzaG93UmVhc29uVGV4dDogYm9vbGVhbjtcbiAgaXNSZWZ1bmRSZWFzb25zU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHN0cmluZztcbiAgcmVhc29uTGVuZ3RoOiBudW1iZXI7XG4gIC8vIHJlZnVuZFJlYXNvbnM6SVJlZnVuZFJlYXNvbnNbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVmdW5kU2VydmljZTogUmVmdW5kc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGVmYXVsdCA9ICdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJztcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzICE9PSAnJyl7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICAgIH1cbiAgICBpZih0aGlzLnJlbWlzc2lvbikge1xuICAgICAgLy8gdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGlmKHRoaXMuZmVlKSB7XG4gICAgdGhpcy5hbW91bnQgPSAodGhpcy5mZWUudm9sdW1lICogdGhpcy5mZWUuY2FsY3VsYXRlZF9hbW91bnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50KXtcbiAgICAgIHRoaXMucmVtZXNzaW9uUGF5bWVudCA9IHRoaXMucGF5bWVudDtcbiAgICAgIGlmKHRoaXMucGF5bWVudC5zdGF0dXMgPT09ICdTdWNjZXNzJykge1xuICAgICAgICB0aGlzLmlzUGF5bWVudFN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT047XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMucmVtaXNzaW9uRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcmVtaXNzaW9uQ29kZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOV17M30pLShbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KSQnKVxuICAgICAgXSkpLFxuICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC5bMC05XXsxLDJ9KT8kJylcbiAgICAgIF0pKSxcbiAgICAgIHJlZnVuZFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICByZWZ1bmRERFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICByZWFzb246IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWZ1bmRERFJlYXNvbiddLnNldFZhbHVlKCdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJywge29ubHlTZWxmOiB0cnVlfSk7XG4gICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJycpe1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICB9XG4gXG4gICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJ2lzc3VlcmVmdW5kJyl7XG4gICAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kUmVhc29ucygpLnN1YnNjcmliZShcbiAgICAgICAgcmVmdW5kUmVhc29ucyA9PiB7IFxuICAgICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnNbJ2RhdGEnXS5maWx0ZXIoKGRhdGEpID0+IGRhdGEucmVjZW50bHlfdXNlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHRoaXMucmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEubmFtZSAhPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJyk7XG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29uc1snZGF0YSddLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5yZWNlbnRseV91c2VkID09PSB0cnVlKTtcbiAgICAgICAgICB0aGlzLmNvbW1vblJlZnVuZFJlYXNvbnMuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygpLmxvY2FsZUNvbXBhcmUoYikpO1xuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9ICk7XG4gICAgICB9XG4gICAgXG4gICAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJyAmJiB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlKXtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3Byb2Nlc3NyZXRyb3JlbWlzc29ucGFnZSc7XG4gICAgICAgIH1cblxuICAgICAgLy8gdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkuc3Vic2NyaWJlKFxuICAgICAgLy8gICB1c2VyZGV0YWlsID0+IHsgXG4gICAgICAvLyAgICAgY29uc29sZS5sb2codXNlcmRldGFpbCk7XG4gICAgICAvLyAgICAgY29uc29sZS5sb2codXNlcmRldGFpbFsnZGF0YSddKTtcbiAgICAgIC8vICAgfSApO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVJcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbigpIHtcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMsXG4gICAgICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlID0gdGhpcy5mZWUuY2FsY3VsYXRlZF9hbW91bnQgPiByZW1pc3Npb25jdHJscy5hbW91bnQudmFsdWU7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydhbW91bnQnXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0udmFsaWQgJiYgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSkge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbmZpcm1hdGlvbic7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkICYmICFpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgbmV3TmV0QW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSxcbiAgICAgcmVtaXNzaW9uQW1vdW50ID0gdGhpcy5mZWUubmV0X2Ftb3VudCAtIG5ld05ldEFtb3VudCxcbiAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmVtaXNzaW9uUmVxdWVzdFxuICAgICh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMuZmVlLCByZW1pc3Npb25BbW91bnQsIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlLCB0aGlzLmNhc2VUeXBlKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkuc3VjY2Vzcykge1xuICAgICAgICAgIGxldCBMRFVybCA9IHRoaXMuaXNUdXJuT2ZmID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnXG4gICAgICAgICAgICBMRFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgICAgICAgICBMRFVybCArPSB0aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgICAgTERVcmwgKz0gdGhpcy5pc09sZFBjaXBhbE9mZiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSdcbiAgICAgICAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9ZmVlLXN1bW1hcnkmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0mcGF5bWVudEdyb3VwUmVmPSR7dGhpcy5wYXltZW50R3JvdXBSZWZ9JmRjbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY259JHtMRFVybH1gKTtcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCl7XG4gICAgaWYgKGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzJdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFszXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzRdO1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsWzVdO1xuICAgIH0gZWxzZSBpZihmaWVsZD09PSdyZW1pc3Npb25Db2RlJyB8fCBmaWVsZD09PSdBbGwnKSB7XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uQ29kZUVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5yZW1pc3Npb25Db2RlSGFzRXJyb3IgPSB2YWxbMV07XG4gICAgfSBlbHNlIGlmIChmaWVsZD09PSdhbW91bnQnIHx8IGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzJdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFszXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzRdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFs1XTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcmV0cm8gcmVtaXNzaW9uIGNoYW5nZXNcbiAgYWRkUmVtaXNzaW9uQ29kZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMsXG4gICAgICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlID0gdGhpcy5mZWUuY2FsY3VsYXRlZF9hbW91bnQgPj0gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRERFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1snYW1vdW50J10uc2V0RXJyb3JzKG51bGwpO1xuICAgIGlmICh0aGlzLnJlbWlzc2lvbkZvcm0uZGlydHkgJiYgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbGlkICYmIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpIHtcbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwicHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlXCI7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlXSwgJ3JlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkICYmICFpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgIFxuICAgIH1cbiAgfVxuXG5cbiAgZ290b0FkZFJldHJvUmVtaXNzaW9uQ29kZVBhZ2UoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICBpZih0aGlzLmlzUmVmdW5kUmVtaXNzaW9uKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kTGlzdEFtb3VudC5lbWl0KCk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9IFxuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9ICd5ZXMnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSBcImFkZHJlbWlzc2lvblwiO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgaWYodGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gICAgfVxuICB9XG5cbiAgZ290b0NoZWNrUmV0cm9SZW1pc3Npb25QYWdlKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBpZiggIXRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICB2YXIgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID49IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSApIHtcbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyB8fCByZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZihyZW1pc3Npb25jdHJscy5hbW91bnQudmFsaWQgJiYgIWlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpe1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAnYW1vdW50Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSBcImNoZWNrcmV0cm9yZW1pc3Npb25wYWdlXCI7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgLy9pZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICkge1xuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnIHx8IHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA8IDAgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUpO1xuICAgICAgfVxuICAgIC8vfVxuICAgXG4gIH1cbiAgfVxuXG4gIGdvdG9Qcm9jZXNzUmV0cm9SZW1pc3Npb25QYWdlKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnYWRkcmVtaXNzaW9uJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgY29uZmlybVJldHJvUmVtaXNzaW9uKCkge1xuICAgIGlmKCF0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQpIHtcbiAgICB0aGlzLnJldHJvUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLnJlbWlzc2lvbmFtdCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWU7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0KHRoaXMucmVtaXNzaW9uYW10LHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlIClcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJldHJvUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZXRyb3JlbWlzc2lvbmNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgIHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZW1pc3Npb25fcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1JlZnVuZCgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZW1pc3Npb25SZWZlcmVuY2UgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9PT0gJycpIHtcbiAgICAgIHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID0gdGhpcy5yZW1pc3Npb24ucmVtaXNzaW9uX3JlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24odGhpcy5yZW1pc3Npb25SZWZlcmVuY2UpO1xuICBcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24ocmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9KVxuICB9XG5cbiAgLy8gSXNzdWUgUmVmdW5kIGNoYW5nZXNcblxuICBnb3RvSXNzdWVSZWZ1bmRDb25maXJtYXRpb24ocGF5bWVudDogSVBheW1lbnQpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10udmFsdWUgPT09IG51bGwgPyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZEREUmVhc29uJ10udmFsdWUgOiB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnZhbHVlO1xuICAgIGlmKCF0aGlzLnJlZnVuZFJlYXNvbikge1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykgJiYgKHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgPT0gJycgfHwgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAncmVhc29uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpICYmIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgIT09ICcnKSB7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiArPSAgJy0nICsgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY2hlY2tpc3N1ZXJlZnVuZHBhZ2UnO1xuICAgICAgfVxuICAgICAgXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY2hlY2tpc3N1ZXJlZnVuZHBhZ2UnO1xuICAgICAgfVxuICAgXG4gICAgfVxuICB9XG5cbiAgZ290b0lzc3VlUmVmdW5kUGFnZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICB9XG5cbiAgY2hhbmdlSXNzdWVSZWZ1bmRSZWFzb24oKSB7XG4gICAvLyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldFZhbHVlKCdEdXBsaWNhdGUgcGF5bWVudCcpO1xuICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gIH1cblxuICBjb25maXJtSXNzdWVSZWZ1bmQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmKCB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uKSB7XG4gICAgICB0aGlzLnJldHJvUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG4gICBcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IG5ldyBQb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24odGhpcy5wYXltZW50LnJlZmVyZW5jZSx0aGlzLnJlZnVuZFJlYXNvbik7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFJlZnVuZHNSZWFzb24ocmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgID0gJyc7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICAgIGlmKEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgfVxuXG4vLyBSZXRybyBSZWZ1bmRcblxuICBjb25maXJtUmV0cm9SZWZ1bmQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmKCB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uKSB7XG4gICAgICB0aGlzLnJldHJvUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IG5ldyBQb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24odGhpcy5wYXltZW50LnJlZmVyZW5jZSwnUlIwMDQtUmV0cm9zcGVjdGl2ZSByZW1pc3Npb24nKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZXRyb3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPUpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICBpZihKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB2YWx1ZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibXlyYWRpb1wiLCBrZXkpO1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICByZW1pc3Npb25jdHJsc1sncmVmdW5kRERSZWFzb24nXS5zZXRWYWx1ZSgnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbicsIHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWFzb24nXS5yZXNldCgpO1xuICAgIHRoaXMuaXNSZWZ1bmRSZWFzb25zU2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0ga2V5O1xuICAgIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykpIHtcbiAgICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Y2hhbmdlKGFyZ3MpIHtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZFJlYXNvbiddLnJlc2V0KCk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQub3B0aW9ucy5zZWxlY3RlZEluZGV4XS5pZDtcbiAgICB0aGlzLnJlYXNvbkxlbmd0aCA9ICgyOS10aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLnNwbGl0KCctICcpWzFdLmxlbmd0aCk7XG5cbiAgICBpZih0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpKSB7XG4gICAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0gYXJncy50YXJnZXQub3B0aW9uc1thcmdzLnRhcmdldC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLmlkO1xuICAgIH1cblxuXG4gIH1cblxuICBnb3RvU2VydmljZVJlcXVlc3RQYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJ1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKHRydWUpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnc2VydmljZXJlcXVlc3RwYWdlJyk7XG4gICAgfVxuICAgIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB9IFxuICAgIGlmKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSkgIHtcbiAgICAgICAgaWYodGhpcy5wYXltZW50KSB7XG4gICAgICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRwYXltZW50UGFnZVZpZXcoe21ldGhvZDogdGhpcy5wYXltZW50Lm1ldGhvZCxwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogdGhpcy5wYXltZW50R3JvdXBSZWYsIHJlZmVyZW5jZTp0aGlzLnBheW1lbnQucmVmZXJlbmNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7IFxuICAgICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ3NlcnZpY2VyZXF1ZXN0cGFnZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ3BheW1lbnRkZXRhaWxzcGFnZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICAgIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID0gdGhpcy5pc05ld1BjaXBhbE9mZjtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID0gdGhpcy5pc09sZFBjaXBhbE9mZjtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7ICBcbiAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAgICAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgICAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAgICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuICAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgICAgICAgaWYodGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgICAgICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD10cnVlJnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPT09ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA9IHRoaXMuaXNOZXdQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID0gdGhpcy5pc09sZFBjaXBhbE9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdHJ1ZTsgIFxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZVxuICAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD10cnVlJnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICB9XG5cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZUNhbmNlbEJ0bkNsaWNrZWQoKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0cGF5bWVudFBhZ2VWaWV3KHttZXRob2Q6ICcnLHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiAnJywgcmVmZXJlbmNlOicnfSk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPSB0aGlzLmlzTmV3UGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA9IHRoaXMuaXNPbGRQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7ICBcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBsZXQgcGFydFVybCA9IHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWA7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBpZih0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlKSB7XG4gICAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUGF5bWVudERldGFpbFBhZ2VcbiAgICAgfVxuXG4gICAgIGlmKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PXRydWUmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1cmwgPWAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT9zZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICAgfVxuICAgIFxuICAgIFxuICB9XG5cblxuICBnZXRGb3JtYXR0ZWRDdXJyZW5jeShjdXJyZW5jeTpudW1iZXIpe1xuICAgIGlmKGN1cnJlbmN5LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCIuXCIpKXtcbiAgICAgIHJldHVybiBjdXJyZW5jeVxuICAgIH1cbiAgICAgcmV0dXJuIGN1cnJlbmN5LnRvU3RyaW5nKCkuY29uY2F0KFwiLjAwXCIpO1xuICB9XG4gIFxufVxuIl19