@sachin9822/reports-lib 0.0.210 → 0.0.212

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 (211) hide show
  1. package/karma.conf.js +44 -0
  2. package/ng-package.json +17 -0
  3. package/package.json +16 -31
  4. package/src/assets/images/BreadcrumbArrow.png +0 -0
  5. package/src/lib/assets/images/Search.svg +10 -0
  6. package/src/lib/assets/images/XMLogo.png +0 -0
  7. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.html +27 -0
  8. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.scss +46 -0
  9. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.spec.ts +23 -0
  10. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.ts +292 -0
  11. package/src/lib/components/accounting-report/accounting-report.component.html +64 -0
  12. package/src/lib/components/accounting-report/accounting-report.component.scss +24 -0
  13. package/src/lib/components/accounting-report/accounting-report.component.spec.ts +23 -0
  14. package/src/lib/components/accounting-report/accounting-report.component.ts +738 -0
  15. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.html +46 -0
  16. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.scss +2 -0
  17. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.spec.ts +23 -0
  18. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.ts +247 -0
  19. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.html +46 -0
  20. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.scss +3 -0
  21. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.spec.ts +23 -0
  22. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.ts +276 -0
  23. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.html +51 -0
  24. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.scss +7 -0
  25. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.spec.ts +23 -0
  26. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.ts +840 -0
  27. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.html +68 -0
  28. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.scss +65 -0
  29. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.spec.ts +23 -0
  30. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.ts +290 -0
  31. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.html +25 -0
  32. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.scss +1 -0
  33. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.spec.ts +23 -0
  34. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.ts +213 -0
  35. package/src/lib/components/funding-report/funding-report.component.html +49 -0
  36. package/src/lib/components/funding-report/funding-report.component.scss +1 -0
  37. package/src/lib/components/funding-report/funding-report.component.spec.ts +23 -0
  38. package/src/lib/components/funding-report/funding-report.component.ts +221 -0
  39. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.html +26 -0
  40. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.scss +1 -0
  41. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.spec.ts +23 -0
  42. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.ts +267 -0
  43. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.html +95 -0
  44. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.scss +54 -0
  45. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.spec.ts +23 -0
  46. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.ts +904 -0
  47. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.html +49 -0
  48. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.scss +2 -0
  49. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.spec.ts +32 -0
  50. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.ts +304 -0
  51. package/src/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.html +46 -0
  52. package/src/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.scss +7 -0
  53. package/src/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.ts +343 -0
  54. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.html +25 -0
  55. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.scss +23 -0
  56. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.spec.ts +23 -0
  57. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.ts +745 -0
  58. package/src/lib/models/acc-gl-details-enquiry-report/accgl-details-enquiry-reportmodel.ts +10 -0
  59. package/src/lib/models/acc-gl-details-enquiry-report/journal-voucher-entry-model.ts +20 -0
  60. package/src/lib/models/accounting-report/accounting-report-branch-group.ts +7 -0
  61. package/src/lib/models/accounting-report/accounting-report-entry-model.ts +25 -0
  62. package/src/lib/models/accounting-report/accounting-report-model.ts +7 -0
  63. package/{lib/models/accounting-report/accounting-report-sub-group.d.ts → src/lib/models/accounting-report/accounting-report-sub-group.ts} +3 -2
  64. package/{lib/models/app-config.model.d.ts → src/lib/models/app-config.model.ts} +8 -7
  65. package/src/lib/models/branch-activity-receive-report/branch-activity-receive.model.ts +18 -0
  66. package/src/lib/models/branch-activity-report/branch-activity-send-report-request-domain-model.ts +16 -0
  67. package/src/lib/models/branch-activity-report/branch-activity-send-report.ts +26 -0
  68. package/src/lib/models/cancellation-transaction-report/cancellation-transaction.model.ts +65 -0
  69. package/src/lib/models/component-loading-states.ts +5 -0
  70. package/src/lib/models/credit-limit-status-enquiry-report/credit-limit-status-enquiry.model.ts +28 -0
  71. package/{lib/models/revenue-per-transaction-report/revenue-per-transaction.model.d.ts → src/lib/models/revenue-per-transaction-report/revenue-per-transaction.model.ts} +1 -1
  72. package/src/lib/models/statement-of-account-report/statement-of-accounts.model.ts +21 -0
  73. package/src/lib/models/transaction-enquiry-report/transaction-enquiry.model.ts +127 -0
  74. package/src/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.ts +16 -0
  75. package/src/lib/models/transaction-monitoring-report/transaction-monitoring-report.ts +29 -0
  76. package/src/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.ts +46 -0
  77. package/src/lib/reports-lib-routing.module.ts +20 -0
  78. package/src/lib/reports-lib.component.spec.ts +23 -0
  79. package/src/lib/reports-lib.component.ts +20 -0
  80. package/src/lib/reports-lib.module.ts +102 -0
  81. package/src/lib/reports-lib.service.spec.ts +16 -0
  82. package/src/lib/reports-lib.service.ts +9 -0
  83. package/src/lib/services/config.service.ts +43 -0
  84. package/src/lib/services/report.service.spec.ts +16 -0
  85. package/src/lib/services/report.service.ts +463 -0
  86. package/src/lib/shared/export-generic.service.ts +557 -0
  87. package/src/lib/shared/export.service.spec.ts +16 -0
  88. package/src/lib/shared/export.service.ts +457 -0
  89. package/src/lib/shared/loader/loader.component.html +8 -0
  90. package/src/lib/shared/loader/loader.component.scss +52 -0
  91. package/src/lib/shared/loader/loader.component.ts +10 -0
  92. package/src/lib/shared/metadata/metadata.component.html +42 -0
  93. package/src/lib/shared/metadata/metadata.component.scss +95 -0
  94. package/src/lib/shared/metadata/metadata.component.spec.ts +23 -0
  95. package/src/lib/shared/metadata/metadata.component.ts +38 -0
  96. package/src/lib/shared/page-size-selector/page-size-selector.component.html +7 -0
  97. package/src/lib/shared/page-size-selector/page-size-selector.component.scss +42 -0
  98. package/src/lib/shared/page-size-selector/page-size-selector.component.spec.ts +23 -0
  99. package/src/lib/shared/page-size-selector/page-size-selector.component.ts +38 -0
  100. package/src/lib/shared/search-filter/search-filter.component.html +601 -0
  101. package/src/lib/shared/search-filter/search-filter.component.scss +203 -0
  102. package/src/lib/shared/search-filter/search-filter.component.spec.ts +23 -0
  103. package/src/lib/shared/search-filter/search-filter.component.ts +2387 -0
  104. package/src/lib/shared/shared.module.ts +13 -0
  105. package/{public-api.d.ts → src/public-api.ts} +17 -7
  106. package/src/styles/ag-grid-report-style.scss +71 -0
  107. package/src/styles/common-ag-grid-style.scss +146 -0
  108. package/src/styles/common-report-style.scss +395 -0
  109. package/src/styles/common-style.scss +615 -0
  110. package/src/test.ts +27 -0
  111. package/tsconfig.lib.json +15 -0
  112. package/tsconfig.lib.prod.json +10 -0
  113. package/tsconfig.spec.json +17 -0
  114. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +0 -240
  115. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +0 -596
  116. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +0 -218
  117. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +0 -243
  118. package/esm2020/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.mjs +0 -700
  119. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +0 -255
  120. package/esm2020/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.mjs +0 -192
  121. package/esm2020/lib/components/funding-report/funding-report.component.mjs +0 -198
  122. package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +0 -244
  123. package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +0 -776
  124. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +0 -266
  125. package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +0 -311
  126. package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +0 -631
  127. package/esm2020/lib/models/acc-gl-details-enquiry-report/accgl-details-enquiry-reportmodel.mjs +0 -2
  128. package/esm2020/lib/models/acc-gl-details-enquiry-report/journal-voucher-entry-model.mjs +0 -2
  129. package/esm2020/lib/models/accounting-report/accounting-report-branch-group.mjs +0 -2
  130. package/esm2020/lib/models/accounting-report/accounting-report-entry-model.mjs +0 -2
  131. package/esm2020/lib/models/accounting-report/accounting-report-model.mjs +0 -2
  132. package/esm2020/lib/models/accounting-report/accounting-report-sub-group.mjs +0 -2
  133. package/esm2020/lib/models/app-config.model.mjs +0 -2
  134. package/esm2020/lib/models/branch-activity-receive-report/branch-activity-receive.model.mjs +0 -2
  135. package/esm2020/lib/models/branch-activity-report/branch-activity-send-report-request-domain-model.mjs +0 -6
  136. package/esm2020/lib/models/branch-activity-report/branch-activity-send-report.mjs +0 -3
  137. package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +0 -10
  138. package/esm2020/lib/models/component-loading-states.mjs +0 -7
  139. package/esm2020/lib/models/credit-limit-status-enquiry-report/credit-limit-status-enquiry.model.mjs +0 -5
  140. package/esm2020/lib/models/revenue-per-transaction-report/revenue-per-transaction.model.mjs +0 -2
  141. package/esm2020/lib/models/statement-of-account-report/statement-of-accounts.model.mjs +0 -2
  142. package/esm2020/lib/models/transaction-enquiry-report/transaction-enquiry.model.mjs +0 -8
  143. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.mjs +0 -6
  144. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report.mjs +0 -5
  145. package/esm2020/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.mjs +0 -3
  146. package/esm2020/lib/reports-lib-routing.module.mjs +0 -24
  147. package/esm2020/lib/reports-lib.component.mjs +0 -22
  148. package/esm2020/lib/reports-lib.module.mjs +0 -172
  149. package/esm2020/lib/reports-lib.service.mjs +0 -14
  150. package/esm2020/lib/services/config.service.mjs +0 -39
  151. package/esm2020/lib/services/report.service.mjs +0 -374
  152. package/esm2020/lib/shared/export-generic.service.mjs +0 -443
  153. package/esm2020/lib/shared/export.service.mjs +0 -379
  154. package/esm2020/lib/shared/loader/loader.component.mjs +0 -11
  155. package/esm2020/lib/shared/metadata/metadata.component.mjs +0 -51
  156. package/esm2020/lib/shared/page-size-selector/page-size-selector.component.mjs +0 -44
  157. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +0 -2134
  158. package/esm2020/lib/shared/shared.module.mjs +0 -21
  159. package/esm2020/public-api.mjs +0 -41
  160. package/esm2020/sachin9822-reports-lib.mjs +0 -5
  161. package/fesm2015/sachin9822-reports-lib.mjs +0 -8402
  162. package/fesm2015/sachin9822-reports-lib.mjs.map +0 -1
  163. package/fesm2020/sachin9822-reports-lib.mjs +0 -8384
  164. package/fesm2020/sachin9822-reports-lib.mjs.map +0 -1
  165. package/index.d.ts +0 -5
  166. package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +0 -70
  167. package/lib/components/accounting-report/accounting-report.component.d.ts +0 -76
  168. package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +0 -58
  169. package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +0 -69
  170. package/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.d.ts +0 -78
  171. package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +0 -95
  172. package/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.d.ts +0 -55
  173. package/lib/components/funding-report/funding-report.component.d.ts +0 -55
  174. package/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.d.ts +0 -57
  175. package/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.d.ts +0 -109
  176. package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +0 -76
  177. package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +0 -68
  178. package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +0 -71
  179. package/lib/models/acc-gl-details-enquiry-report/accgl-details-enquiry-reportmodel.d.ts +0 -8
  180. package/lib/models/acc-gl-details-enquiry-report/journal-voucher-entry-model.d.ts +0 -18
  181. package/lib/models/accounting-report/accounting-report-branch-group.d.ts +0 -6
  182. package/lib/models/accounting-report/accounting-report-entry-model.d.ts +0 -24
  183. package/lib/models/accounting-report/accounting-report-model.d.ts +0 -6
  184. package/lib/models/branch-activity-receive-report/branch-activity-receive.model.d.ts +0 -18
  185. package/lib/models/branch-activity-report/branch-activity-send-report-request-domain-model.d.ts +0 -13
  186. package/lib/models/branch-activity-report/branch-activity-send-report.d.ts +0 -24
  187. package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +0 -44
  188. package/lib/models/component-loading-states.d.ts +0 -5
  189. package/lib/models/credit-limit-status-enquiry-report/credit-limit-status-enquiry.model.d.ts +0 -26
  190. package/lib/models/statement-of-account-report/statement-of-accounts.model.d.ts +0 -18
  191. package/lib/models/transaction-enquiry-report/transaction-enquiry.model.d.ts +0 -113
  192. package/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.d.ts +0 -13
  193. package/lib/models/transaction-monitoring-report/transaction-monitoring-report.d.ts +0 -23
  194. package/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.d.ts +0 -38
  195. package/lib/reports-lib-routing.module.d.ts +0 -7
  196. package/lib/reports-lib.component.d.ts +0 -8
  197. package/lib/reports-lib.module.d.ts +0 -33
  198. package/lib/reports-lib.service.d.ts +0 -6
  199. package/lib/services/config.service.d.ts +0 -20
  200. package/lib/services/report.service.d.ts +0 -80
  201. package/lib/shared/export-generic.service.d.ts +0 -50
  202. package/lib/shared/export.service.d.ts +0 -32
  203. package/lib/shared/loader/loader.component.d.ts +0 -5
  204. package/lib/shared/metadata/metadata.component.d.ts +0 -24
  205. package/lib/shared/page-size-selector/page-size-selector.component.d.ts +0 -15
  206. package/lib/shared/search-filter/search-filter.component.d.ts +0 -127
  207. package/lib/shared/shared.module.d.ts +0 -11
  208. /package/{lib → src}/assets/images/Search.svg +0 -0
  209. /package/{lib/assets/images/XMLogo.png → src/assets/images/XMCoral.png} +0 -0
  210. /package/{lib → src/lib}/assets/config/app-config.json +0 -0
  211. /package/{lib → src/lib}/assets/svg-loaders/blue-tail-spin.svg +0 -0
@@ -1,374 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { map, retry } from 'rxjs/operators';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common/http";
5
- import * as i2 from "./config.service";
6
- export class ReportService {
7
- // private reportUrl = '/api/v1/Report';
8
- // private systemReportUrl = '/api/v1/CompanyConfiguration/SystemReports';
9
- constructor(http, config) {
10
- this.http = http;
11
- this.config = config;
12
- if (!this.config.get) {
13
- throw new Error('ConfigService is not initialized. Ensure APP_INITIALIZER ran before using ReportService.');
14
- }
15
- this.reportServiceUrl = this.config.get.reportServiceUrl;
16
- }
17
- getAccGLDetailsReport(formattedDate, dateType) {
18
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccGlDetailsEnquiryReport/GetAccGLDetailsEnquiryReport/${formattedDate}/${dateType}`;
19
- return this.http.get(apiPath);
20
- }
21
- getPayInAgents() {
22
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetAllPayInAgents`;
23
- return this.http.get(apiPath).pipe(map(response => {
24
- return response;
25
- }));
26
- }
27
- getBranchByAgent(code) {
28
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetBranchByAgent/${code}/BH`;
29
- return this.http.get(apiPath).pipe(map(response => {
30
- retry(2),
31
- map(response => response);
32
- return response;
33
- }));
34
- }
35
- getParams() {
36
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetBranchActivitySendReportParams`;
37
- return this.http.get(apiPath).pipe(map(response => {
38
- retry(2),
39
- map(response => response);
40
- return response;
41
- }));
42
- }
43
- getBranchActivityReport(data) {
44
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetBranchActivitySendReport`;
45
- return this.http.post(apiPath, data).pipe(map(response => {
46
- return response;
47
- }));
48
- }
49
- getUserNameFromSessionStorage() {
50
- let fossilUserName = sessionStorage.getItem('fossilusername');
51
- let ezremitusername = sessionStorage.getItem('ezremitusername');
52
- if (fossilUserName) {
53
- return fossilUserName.replace(/^"(.*)"$/, '$1');
54
- }
55
- else {
56
- return ezremitusername.replace(/^"(.*)"$/, '$1');
57
- }
58
- }
59
- //Trasaction Enquiry Report Apis
60
- // API 1: Get initial page load data
61
- getPageLoadData() {
62
- const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/pageLoadData`;
63
- return this.http.get(url).pipe(map(response => response));
64
- }
65
- // API 2: Get branches by agent
66
- getBranchesByAgent(agentCode) {
67
- const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/branches/${agentCode}`;
68
- return this.http.get(url).pipe(map(response => response));
69
- }
70
- // API 4: Get users by branch
71
- getUsersByBranch(businessPartnerCode, branchCode) {
72
- const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/users/${businessPartnerCode}/${branchCode}`;
73
- return this.http.get(url).pipe(map(response => response));
74
- }
75
- // API 5: Search transactions
76
- searchTransactions(data) {
77
- const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/viewReport`;
78
- return this.http.post(url, data).pipe(map(response => response));
79
- }
80
- // Branch Activity Receive Report API
81
- getAllPayOutAgents() {
82
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetAllPayoutAgents/`;
83
- return this.http.get(apiPath).pipe(map(response => {
84
- return response;
85
- }));
86
- }
87
- getBranchActivityReceiveParams() {
88
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetBranchActivityReceiveReportParams`;
89
- return this.http.get(apiPath).pipe(map(response => {
90
- return response;
91
- }));
92
- }
93
- getBranchActivityReceivePayoutAgentBranch(code) {
94
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetBranchByPayoutAgent/${code}/BH`;
95
- return this.http.get(apiPath).pipe(map(response => {
96
- retry(2),
97
- map(response => response);
98
- return response;
99
- }));
100
- }
101
- getBranchActivityReceiveReport(data) {
102
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetBranchActivityReceiveReport`;
103
- return this.http.post(apiPath, data).pipe(map(response => {
104
- return response;
105
- }));
106
- }
107
- //Cancellation Transaction Report apis
108
- //Api 1
109
- loadDataforCancallation() {
110
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/CancellationTransactionReport/pageLoadData`;
111
- return this.http.get(apiPath);
112
- }
113
- /** Api 2 - Get list of branches for an agent */
114
- getBranches(agentCode) {
115
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/CancellationTransactionReport/branches/${agentCode}`;
116
- return this.http.get(apiPath).pipe(map(response => response || []));
117
- }
118
- //Api 3
119
- getCancellationReport(criteria) {
120
- const url = `${this.reportServiceUrl}/api/v1/Report/CancellationTransactionReport/viewReport`;
121
- return this.http.post(url, criteria).pipe(map(response => {
122
- return response;
123
- }));
124
- }
125
- // Revenue Per Transaction Report API
126
- getAgentsForRevenuePerTransaction() {
127
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/RevenuePerTransaction/GetAgentsForRevenuePerTransaction`;
128
- return this.http.get(apiPath).pipe(map(response => {
129
- return response;
130
- }));
131
- }
132
- getRevenuePerTransactionReportParams() {
133
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/RevenuePerTransaction/GetRevenuePerTransactionParams`;
134
- return this.http.get(apiPath);
135
- }
136
- getRevenuePerTransactionReport(data) {
137
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/RevenuePerTransaction/GetRevenuePerTransactionReport`;
138
- return this.http.post(apiPath, data).pipe(map(response => {
139
- return response;
140
- }));
141
- }
142
- //Statement of Accounts Report
143
- loadClientsForStatementOfAccounts() {
144
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/StatementofAccounts/Clients`;
145
- return this.http.get(apiPath);
146
- }
147
- checkClientForStatementOfAccounts(clientId) {
148
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/StatementofAccounts/checkClient/${clientId}`;
149
- return this.http.get(apiPath);
150
- }
151
- getStatementOfAccount(criteria) {
152
- const url = `${this.reportServiceUrl}/api/v1/Report/StatementofAccounts/statementOfAccount`;
153
- return this.http.post(url, criteria).pipe(map(response => response || {
154
- openingBalAndFunding: [],
155
- sendDetails: [],
156
- receiveDetails: []
157
- }));
158
- }
159
- // Accounting Report
160
- // Api 1 - get accounting report
161
- getAccountingReport(object) {
162
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAccountingReport`;
163
- return this.http.post(apiPath, object).pipe(map(response => response || undefined));
164
- }
165
- // Api 2 - get All clients
166
- getClientsForAccountingReport(sysUserID) {
167
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAllPayInAgents/${sysUserID}`;
168
- return this.http.get(apiPath).pipe(map(response => {
169
- return response;
170
- }));
171
- }
172
- // Api 3 - get branch by agent or client
173
- getBranchByAgentForAccountingReport(sysUserId, code) {
174
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetBranchByAgent/${code}/${sysUserId}/BH`;
175
- return this.http.get(apiPath).pipe(map(response => {
176
- retry(2),
177
- map(response => response);
178
- return response;
179
- }));
180
- }
181
- // Api 4 - get All transaction types ( products )
182
- getTransactionTypesForAccountingReport() {
183
- const url = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/getTransactionTypes`;
184
- return this.http.get(url).pipe(map(response => response));
185
- }
186
- // Api 5 - get All currencies
187
- getAllCurrenciesForAccountingReport() {
188
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/getAllCurrencies`;
189
- return this.http.get(apiPath).pipe(map(response => {
190
- return response;
191
- }));
192
- }
193
- // Api 6 - get All Transaction Status
194
- getAllTransactionStatusForAccountingReport() {
195
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAllTransactionStatus`;
196
- return this.http.get(apiPath).pipe(map(response => {
197
- return response;
198
- }));
199
- }
200
- // Api 7 - get All Countries
201
- getAllCountriesForAccountingReport() {
202
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAllCountries`;
203
- return this.http.get(apiPath).pipe(map(response => {
204
- return response;
205
- }));
206
- }
207
- // Trial Balance - Accounts Report
208
- // Api 1 - Get Trial Balance - Accounts report
209
- getTrialBalanceAccountsReport(object) {
210
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetTrialBalanceAccountsReport`;
211
- return this.http.post(apiPath, object).pipe(map(response => response || undefined));
212
- }
213
- // Api 2 - Get Business Unit
214
- GetBusinessUnitForTrialBalanceAccountsReport() {
215
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetBusinessUnit`;
216
- return this.http.get(apiPath).pipe(map(response => {
217
- return response;
218
- }));
219
- }
220
- // Api 3 - Get Account Status
221
- GetAccountStatusForTrialBalanceAccountsReport() {
222
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetAccountStatus`;
223
- return this.http.get(apiPath).pipe(map(response => {
224
- return response;
225
- }));
226
- }
227
- // Api 4 - Get Date Type
228
- GetDateTypeForTrialBalanceAccountsReport() {
229
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetDateType`;
230
- return this.http.get(apiPath).pipe(map(response => {
231
- return response;
232
- }));
233
- }
234
- // Api 5 - Get Year
235
- GetYearForTrialBalanceAccountsReport() {
236
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetFinancialYear`;
237
- return this.http.get(apiPath).pipe(map(response => {
238
- return response;
239
- }));
240
- }
241
- // Api 6 - Get From Months
242
- GetFromMonthsForTrialBalanceAccountsReport() {
243
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetFromMonths`;
244
- return this.http.get(apiPath).pipe(map(response => {
245
- return response;
246
- }));
247
- }
248
- // Api 7 - Get To Months
249
- GetToMonthsForTrialBalanceAccountsReport(year, month) {
250
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetToMonths/${year}/${month}`;
251
- return this.http.get(apiPath).pipe(map(response => {
252
- return response;
253
- }));
254
- }
255
- // Api 8 - Get From Dates
256
- GetFromDatesForTrialBalanceAccountsReport(year, fromMonthLabel) {
257
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetFromDates/${year}/${fromMonthLabel}`;
258
- return this.http.get(apiPath).pipe(map(response => {
259
- return response;
260
- }));
261
- }
262
- // Api 9 - Get To Dates
263
- GetToDatesForTrialBalanceAccountsReport(object) {
264
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetToDates`;
265
- return this.http.post(apiPath, object).pipe(map(response => {
266
- return response;
267
- }));
268
- }
269
- // Api 10 - Get Currencies
270
- GetCurrenciesForTrialBalanceAccountsReport() {
271
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetCurrencies`;
272
- return this.http.get(apiPath).pipe(map(response => {
273
- return response;
274
- }));
275
- }
276
- // Api 11 - Get default month,year
277
- GetParamDateDefaultForTrialBalanceAccountsReport() {
278
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetParamDateDefault`;
279
- return this.http.get(apiPath).pipe(map(response => {
280
- return response;
281
- }));
282
- }
283
- //Credit Limit Status Enquiry Report APIs
284
- getClientsForCreditLimitStatusEnquiryReport() {
285
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/CreditLimitStatusEnquiry/GetBusinessPartners`;
286
- return this.http.get(apiPath).pipe(map(response => {
287
- return response;
288
- }));
289
- }
290
- getTransactionTypesForCreditLimitStatusEnquiryReport() {
291
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/CreditLimitStatusEnquiry/GetTransactionStatus`;
292
- return this.http.get(apiPath).pipe(map(response => {
293
- return response;
294
- }));
295
- }
296
- getCreditLimitStatusEnquiryReport(model) {
297
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/CreditLimitStatusEnquiry/GetCreditLimitStatusEnquiryReport`;
298
- return this.http.post(apiPath, model).pipe(map(response => {
299
- return response;
300
- }));
301
- }
302
- //Funding Report
303
- getFundingReport(criteria) {
304
- const url = `${this.reportServiceUrl}/api/v1/Report/Funding/viewReport`;
305
- return this.http.post(url, criteria).pipe(map(response => response || {}));
306
- }
307
- //Branch Activity Send Summary Report
308
- getPayInAgentforSendSummaryReport() {
309
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetAllPayInAgents`;
310
- return this.http.get(apiPath).pipe(map(response => {
311
- return response;
312
- }));
313
- }
314
- getBranchByAgentForSendSummaryReport(code) {
315
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetBranchByAgent/${code}/BH`;
316
- return this.http.get(apiPath).pipe(map(response => {
317
- retry(2),
318
- map(response => response);
319
- return response;
320
- }));
321
- }
322
- getParamsForSendSummaryReport() {
323
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetBranchActivitySendSummaryReportParams`;
324
- return this.http.get(apiPath).pipe(map(response => {
325
- retry(2),
326
- map(response => response);
327
- return response;
328
- }));
329
- }
330
- getBranchActivitySendSummaryReport(data) {
331
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetBranchActivitySendSummaryReport`;
332
- return this.http.post(apiPath, data).pipe(map(response => {
333
- return response;
334
- }));
335
- }
336
- //Transaction monitoring Report.
337
- getParamsForTransactionMonitoringReport() {
338
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/TransactionMonitoringReportParams`;
339
- return this.http.get(apiPath).pipe(map(response => {
340
- retry(2),
341
- map(response => response);
342
- return response;
343
- }));
344
- }
345
- getBranchByAgentForTransactionMonitoringReport(code) {
346
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/GetBranchByAgent/${code}/BH`;
347
- return this.http.get(apiPath).pipe(map(response => {
348
- retry(2),
349
- map(response => response);
350
- return response;
351
- }));
352
- }
353
- getPayInAgentforTransactionMonitoringReport() {
354
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/GetAllPayInAgents`;
355
- return this.http.get(apiPath).pipe(map(response => {
356
- return response;
357
- }));
358
- }
359
- getTransactionMonitoringReport(data) {
360
- const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/GetTransactionMonitoringReport`;
361
- return this.http.post(apiPath, data).pipe(map(response => {
362
- return response;
363
- }));
364
- }
365
- }
366
- ReportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReportService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
367
- ReportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReportService, providedIn: 'root' });
368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReportService, decorators: [{
369
- type: Injectable,
370
- args: [{
371
- providedIn: 'root'
372
- }]
373
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigService }]; } });
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWtCNUMsTUFBTSxPQUFPLGFBQWE7SUFHeEIsd0NBQXdDO0lBQ3hDLDBFQUEwRTtJQUUxRSxZQUFvQixJQUFnQixFQUFVLE1BQXFCO1FBQS9DLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixDQUFDLENBQUM7U0FDN0c7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsQ0FBQztJQUVNLHFCQUFxQixDQUFDLGFBQWlDLEVBQUUsUUFBZ0I7UUFDOUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLHlFQUF5RSxhQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDN0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBaUMsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0Isa0NBQWtDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hE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SUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ04sR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDM0IsT0FBYyxRQUFRLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCwyQ0FBMkM7UUFDekMsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLDhEQUE4RCxDQUFDO1FBQ3ZHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRCxPQUFjLFFBQVEsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUdELDhCQUE4QixDQUFDLElBQW1EO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQiwyRUFBMkUsQ0FBQztRQUNwSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZELE9BQXNELFFBQVEsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzs7MEdBdmJVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC9hY2NnbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0bW9kZWwnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJyYW5jaEFjdGl2aXR5U2VuZFJlcG9ydFJlcXVlc3REb21haW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9icmFuY2gtYWN0aXZpdHktcmVwb3J0L2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC1yZXF1ZXN0LWRvbWFpbi1tb2RlbCc7XHJcbmltcG9ydCB7IEJyYW5jaEFjdGl2aXR5UmVwb3J0IH0gZnJvbSAnLi4vbW9kZWxzL2JyYW5jaC1hY3Rpdml0eS1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0JztcclxuaW1wb3J0IHsgUHJvZHVjdCwgVXNlciwgQnJhbmNoLCBUcmFuc2FjdGlvbkRhdGEsIFBhZ2VMb2FkRGF0YVJlc3BvbnNlLCBTZWFyY2hDcml0ZXJpYSB9IGZyb20gJy4uL21vZGVscy90cmFuc2FjdGlvbi1lbnF1aXJ5LXJlcG9ydC90cmFuc2FjdGlvbi1lbnF1aXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9icmFuY2gtYWN0aXZpdHktcmVjZWl2ZS1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUubW9kZWwnO1xyXG5pbXBvcnQgeyBDYW5jZWxsYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4uL21vZGVscy9jYW5jZWxsYXRpb24tdHJhbnNhY3Rpb24tcmVwb3J0L2NhbmNlbGxhdGlvbi10cmFuc2FjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFJldmVudWVQZXJUcmFuc2FjdGlvblJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcmV2ZW51ZS1wZXItdHJhbnNhY3Rpb24tcmVwb3J0L3JldmVudWUtcGVyLXRyYW5zYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgU3RhdGVtZW50T2ZBY2NvdW50UmVxdWVzdCwgU3RhdGVtZW50T2ZBY2NvdW50UmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvc3RhdGVtZW50LW9mLWFjY291bnQtcmVwb3J0L3N0YXRlbWVudC1vZi1hY2NvdW50cy5tb2RlbCc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1tb2RlbCc7XHJcbmltcG9ydCB7IFRyaWFsQmFsYW5jZVJlcG9ydCB9IGZyb20gJy4uL21vZGVscy90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC90cmlhbC1iYWxhbmNlLWFjY291bnRzLm1vZGVscyc7XHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcXVlc3REb21haW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydC90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydC1yZXF1ZXN0LWRvbWFpbi1tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydCB9IGZyb20gJy4uL21vZGVscy90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydC90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydCc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgcmVwb3J0U2VydmljZVVybDogc3RyaW5nO1xyXG4gIC8vIHByaXZhdGUgcmVwb3J0VXJsID0gJy9hcGkvdjEvUmVwb3J0JztcclxuICAvLyBwcml2YXRlIHN5c3RlbVJlcG9ydFVybCA9ICcvYXBpL3YxL0NvbXBhbnlDb25maWd1cmF0aW9uL1N5c3RlbVJlcG9ydHMnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmdldCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpZ1NlcnZpY2UgaXMgbm90IGluaXRpYWxpemVkLiBFbnN1cmUgQVBQX0lOSVRJQUxJWkVSIHJhbiBiZWZvcmUgdXNpbmcgUmVwb3J0U2VydmljZS4nKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0U2VydmljZVVybCA9IHRoaXMuY29uZmlnLmdldC5yZXBvcnRTZXJ2aWNlVXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY0dMRGV0YWlsc1JlcG9ydChmb3JtYXR0ZWREYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRhdGVUeXBlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbD4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9BY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0L0dldEFjY0dMRGV0YWlsc0VucXVpcnlSZXBvcnQvJHtmb3JtYXR0ZWREYXRlfS8ke2RhdGVUeXBlfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWw+KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGF5SW5BZ2VudHMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9HZXRBbGxQYXlJbkFnZW50c2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXRCcmFuY2hCeUFnZW50KGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvR2V0QnJhbmNoQnlBZ2VudC8ke2NvZGV9L0JIYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0cnkoMiksXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1zKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvR2V0QnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UGFyYW1zYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0cnkoMiksXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnJhbmNoQWN0aXZpdHlSZXBvcnQoZGF0YTogQnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UmVxdWVzdERvbWFpbk1vZGVsIHwgYW55KTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBCcmFuY2hBY3Rpdml0eVJlcG9ydFtdPj4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9HZXRCcmFuY2hBY3Rpdml0eVNlbmRSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxSZWNvcmQ8c3RyaW5nLCBCcmFuY2hBY3Rpdml0eVJlcG9ydFtdPj5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVc2VyTmFtZUZyb21TZXNzaW9uU3RvcmFnZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZvc3NpbFVzZXJOYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKTtcclxuICAgIGxldCBlenJlbWl0dXNlcm5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlenJlbWl0dXNlcm5hbWUnKTtcclxuICAgIGlmIChmb3NzaWxVc2VyTmFtZSkge1xyXG4gICAgICByZXR1cm4gZm9zc2lsVXNlck5hbWUucmVwbGFjZSgvXlwiKC4qKVwiJC8sICckMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV6cmVtaXR1c2VybmFtZS5yZXBsYWNlKC9eXCIoLiopXCIkLywgJyQxJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RyYXNhY3Rpb24gRW5xdWlyeSBSZXBvcnQgQXBpc1xyXG4gIC8vIEFQSSAxOiBHZXQgaW5pdGlhbCBwYWdlIGxvYWQgZGF0YVxyXG4gIGdldFBhZ2VMb2FkRGF0YSgpOiBPYnNlcnZhYmxlPFBhZ2VMb2FkRGF0YVJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25FbnF1aXJ5L3BhZ2VMb2FkRGF0YWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiA8UGFnZUxvYWREYXRhUmVzcG9uc2U+cmVzcG9uc2UpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gQVBJIDI6IEdldCBicmFuY2hlcyBieSBhZ2VudFxyXG4gIGdldEJyYW5jaGVzQnlBZ2VudChhZ2VudENvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8QnJhbmNoW10+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmFuc2FjdGlvbkVucXVpcnkvYnJhbmNoZXMvJHthZ2VudENvZGV9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IDxCcmFuY2hbXT5yZXNwb25zZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgNDogR2V0IHVzZXJzIGJ5IGJyYW5jaFxyXG4gIGdldFVzZXJzQnlCcmFuY2goYnVzaW5lc3NQYXJ0bmVyQ29kZTogc3RyaW5nLCBicmFuY2hDb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVzZXJbXT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyYW5zYWN0aW9uRW5xdWlyeS91c2Vycy8ke2J1c2luZXNzUGFydG5lckNvZGV9LyR7YnJhbmNoQ29kZX1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gPFVzZXJbXT5yZXNwb25zZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgNTogU2VhcmNoIHRyYW5zYWN0aW9uc1xyXG4gIHNlYXJjaFRyYW5zYWN0aW9ucyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uRGF0YVtdPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25FbnF1aXJ5L3ZpZXdSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgZGF0YSkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IDxUcmFuc2FjdGlvbkRhdGFbXT5yZXNwb25zZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZSBSZXBvcnQgQVBJXHJcbiAgZ2V0QWxsUGF5T3V0QWdlbnRzKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQnJhbmNoQWN0aXZpdHlSZWNlaXZlL0dldEFsbFBheW91dEFnZW50cy9gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICBnZXRCcmFuY2hBY3Rpdml0eVJlY2VpdmVQYXJhbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9CcmFuY2hBY3Rpdml0eVJlY2VpdmUvR2V0QnJhbmNoQWN0aXZpdHlSZWNlaXZlUmVwb3J0UGFyYW1zYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVBheW91dEFnZW50QnJhbmNoKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQnJhbmNoQWN0aXZpdHlSZWNlaXZlL0dldEJyYW5jaEJ5UGF5b3V0QWdlbnQvJHtjb2RlfS9CSGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVJlcG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVJlcG9ydE1vZGVsW10+PiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0JyYW5jaEFjdGl2aXR5UmVjZWl2ZS9HZXRCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxSZWNvcmQ8c3RyaW5nLCBCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRNb2RlbFtdPj5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uIFJlcG9ydCBhcGlzXHJcbiAgLy9BcGkgMVxyXG4gIGxvYWREYXRhZm9yQ2FuY2FsbGF0aW9uKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NhbmNlbGxhdGlvblRyYW5zYWN0aW9uUmVwb3J0L3BhZ2VMb2FkRGF0YWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFwaSAyIC0gR2V0IGxpc3Qgb2YgYnJhbmNoZXMgZm9yIGFuIGFnZW50ICovXHJcbiAgZ2V0QnJhbmNoZXMoYWdlbnRDb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJyYW5jaFtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NhbmNlbGxhdGlvblRyYW5zYWN0aW9uUmVwb3J0L2JyYW5jaGVzLyR7YWdlbnRDb2RlfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxCcmFuY2hbXT4oYXBpUGF0aCkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlIHx8IFtdKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vQXBpIDNcclxuICBnZXRDYW5jZWxsYXRpb25SZXBvcnQoY3JpdGVyaWE6IGFueSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgQ2FuY2VsbGF0aW9uVHJhbnNhY3Rpb25bXT4+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9DYW5jZWxsYXRpb25UcmFuc2FjdGlvblJlcG9ydC92aWV3UmVwb3J0YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGNyaXRlcmlhKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8UmVjb3JkPHN0cmluZywgQ2FuY2VsbGF0aW9uVHJhbnNhY3Rpb25bXT4+cmVzcG9uc2U7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXZlbnVlIFBlciBUcmFuc2FjdGlvbiBSZXBvcnQgQVBJXHJcbiAgZ2V0QWdlbnRzRm9yUmV2ZW51ZVBlclRyYW5zYWN0aW9uKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvUmV2ZW51ZVBlclRyYW5zYWN0aW9uL0dldEFnZW50c0ZvclJldmVudWVQZXJUcmFuc2FjdGlvbmA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIGdldFJldmVudWVQZXJUcmFuc2FjdGlvblJlcG9ydFBhcmFtcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9SZXZlbnVlUGVyVHJhbnNhY3Rpb24vR2V0UmV2ZW51ZVBlclRyYW5zYWN0aW9uUGFyYW1zYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmV2ZW51ZVBlclRyYW5zYWN0aW9uUmVwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8UmV2ZW51ZVBlclRyYW5zYWN0aW9uUmVzcG9uc2VNb2RlbFtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1JldmVudWVQZXJUcmFuc2FjdGlvbi9HZXRSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIDxSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXNwb25zZU1vZGVsW10+cmVzcG9uc2U7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvL1N0YXRlbWVudCBvZiBBY2NvdW50cyBSZXBvcnRcclxuICBsb2FkQ2xpZW50c0ZvclN0YXRlbWVudE9mQWNjb3VudHMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TdGF0ZW1lbnRvZkFjY291bnRzL0NsaWVudHNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tDbGllbnRGb3JTdGF0ZW1lbnRPZkFjY291bnRzKGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmcgfT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TdGF0ZW1lbnRvZkFjY291bnRzL2NoZWNrQ2xpZW50LyR7Y2xpZW50SWR9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgcmVzdWx0OiBzdHJpbmcgfT4oYXBpUGF0aCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZW1lbnRPZkFjY291bnQoY3JpdGVyaWE6IFN0YXRlbWVudE9mQWNjb3VudFJlcXVlc3QpOiBPYnNlcnZhYmxlPFN0YXRlbWVudE9mQWNjb3VudFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvU3RhdGVtZW50b2ZBY2NvdW50cy9zdGF0ZW1lbnRPZkFjY291bnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFN0YXRlbWVudE9mQWNjb3VudFJlc3BvbnNlPih1cmwsIGNyaXRlcmlhKS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UgfHwge1xyXG4gICAgICAgIG9wZW5pbmdCYWxBbmRGdW5kaW5nOiBbXSxcclxuICAgICAgICBzZW5kRGV0YWlsczogW10sXHJcbiAgICAgICAgcmVjZWl2ZURldGFpbHM6IFtdXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyBBY2NvdW50aW5nIFJlcG9ydFxyXG5cclxuICAvLyBBcGkgMSAtIGdldCBhY2NvdW50aW5nIHJlcG9ydFxyXG4gIGdldEFjY291bnRpbmdSZXBvcnQob2JqZWN0OiBhbnkpOiBPYnNlcnZhYmxlPEFjY291bnRpbmdSZXBvcnRNb2RlbD4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9BY2NvdW50aW5nUmVwb3J0L0dldEFjY291bnRpbmdSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFjY291bnRpbmdSZXBvcnRNb2RlbD4oYXBpUGF0aCwgb2JqZWN0KS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UgfHwgdW5kZWZpbmVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEFwaSAyIC0gZ2V0IEFsbCBjbGllbnRzXHJcbiAgZ2V0Q2xpZW50c0ZvckFjY291bnRpbmdSZXBvcnQoc3lzVXNlcklEOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0FjY291bnRpbmdSZXBvcnQvR2V0QWxsUGF5SW5BZ2VudHMvJHtzeXNVc2VySUR9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDMgLSBnZXQgYnJhbmNoIGJ5IGFnZW50IG9yIGNsaWVudFxyXG4gIGdldEJyYW5jaEJ5QWdlbnRGb3JBY2NvdW50aW5nUmVwb3J0KHN5c1VzZXJJZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0FjY291bnRpbmdSZXBvcnQvR2V0QnJhbmNoQnlBZ2VudC8ke2NvZGV9LyR7c3lzVXNlcklkfS9CSGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vIEFwaSA0IC0gZ2V0IEFsbCB0cmFuc2FjdGlvbiB0eXBlcyAoIHByb2R1Y3RzIClcclxuICBnZXRUcmFuc2FjdGlvblR5cGVzRm9yQWNjb3VudGluZ1JlcG9ydCgpOiBPYnNlcnZhYmxlPFByb2R1Y3RbXT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0FjY291bnRpbmdSZXBvcnQvZ2V0VHJhbnNhY3Rpb25UeXBlc2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiA8UHJvZHVjdFtdPnJlc3BvbnNlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEFwaSA1IC0gZ2V0IEFsbCBjdXJyZW5jaWVzXHJcbiAgZ2V0QWxsQ3VycmVuY2llc0ZvckFjY291bnRpbmdSZXBvcnQoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9BY2NvdW50aW5nUmVwb3J0L2dldEFsbEN1cnJlbmNpZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgNiAtIGdldCBBbGwgVHJhbnNhY3Rpb24gU3RhdHVzXHJcbiAgZ2V0QWxsVHJhbnNhY3Rpb25TdGF0dXNGb3JBY2NvdW50aW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQWNjb3VudGluZ1JlcG9ydC9HZXRBbGxUcmFuc2FjdGlvblN0YXR1c2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIC8vIEFwaSA3IC0gZ2V0IEFsbCBDb3VudHJpZXNcclxuICBnZXRBbGxDb3VudHJpZXNGb3JBY2NvdW50aW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQWNjb3VudGluZ1JlcG9ydC9HZXRBbGxDb3VudHJpZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzIFJlcG9ydFxyXG5cclxuICAvLyBBcGkgMSAtIEdldCBUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHMgcmVwb3J0XHJcbiAgZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQob2JqZWN0OiBhbnkpOiBPYnNlcnZhYmxlPFRyaWFsQmFsYW5jZVJlcG9ydD4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydC9HZXRUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VHJpYWxCYWxhbmNlUmVwb3J0PihhcGlQYXRoLCBvYmplY3QpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSB8fCB1bmRlZmluZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDIgLSBHZXQgQnVzaW5lc3MgVW5pdFxyXG4gIEdldEJ1c2luZXNzVW5pdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQvR2V0QnVzaW5lc3NVbml0YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDMgLSBHZXQgQWNjb3VudCBTdGF0dXNcclxuICBHZXRBY2NvdW50U3RhdHVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydC9HZXRBY2NvdW50U3RhdHVzYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDQgLSBHZXQgRGF0ZSBUeXBlXHJcbiAgR2V0RGF0ZVR5cGVGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldERhdGVUeXBlYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDUgLSBHZXQgWWVhclxyXG4gIEdldFllYXJGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEZpbmFuY2lhbFllYXJgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgNiAtIEdldCBGcm9tIE1vbnRoc1xyXG4gIEdldEZyb21Nb250aHNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEZyb21Nb250aHNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgNyAtIEdldCBUbyBNb250aHNcclxuICBHZXRUb01vbnRoc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlcik6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQvR2V0VG9Nb250aHMvJHt5ZWFyfS8ke21vbnRofWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIC8vIEFwaSA4IC0gR2V0IEZyb20gRGF0ZXNcclxuICBHZXRGcm9tRGF0ZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCh5ZWFyOiBudW1iZXIsIGZyb21Nb250aExhYmVsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEZyb21EYXRlcy8ke3llYXJ9LyR7ZnJvbU1vbnRoTGFiZWx9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDkgLSBHZXQgVG8gRGF0ZXNcclxuICBHZXRUb0RhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQob2JqZWN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldFRvRGF0ZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIG9iamVjdCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgMTAgLSBHZXQgQ3VycmVuY2llc1xyXG4gIEdldEN1cnJlbmNpZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEN1cnJlbmNpZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgMTEgLSBHZXQgZGVmYXVsdCBtb250aCx5ZWFyXHJcbiAgR2V0UGFyYW1EYXRlRGVmYXVsdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQvR2V0UGFyYW1EYXRlRGVmYXVsdGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG5cclxuICAgIC8vQ3JlZGl0IExpbWl0IFN0YXR1cyBFbnF1aXJ5IFJlcG9ydCBBUElzXHJcbiAgZ2V0Q2xpZW50c0ZvckNyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NyZWRpdExpbWl0U3RhdHVzRW5xdWlyeS9HZXRCdXNpbmVzc1BhcnRuZXJzYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0VHJhbnNhY3Rpb25UeXBlc0ZvckNyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NyZWRpdExpbWl0U3RhdHVzRW5xdWlyeS9HZXRUcmFuc2FjdGlvblN0YXR1c2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gIGdldENyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydChtb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9DcmVkaXRMaW1pdFN0YXR1c0VucXVpcnkvR2V0Q3JlZGl0TGltaXRTdGF0dXNFbnF1aXJ5UmVwb3J0YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChhcGlQYXRoLCBtb2RlbCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG4gIC8vRnVuZGluZyBSZXBvcnRcclxuICBnZXRGdW5kaW5nUmVwb3J0KGNyaXRlcmlhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0Z1bmRpbmcvdmlld1JlcG9ydGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBjcml0ZXJpYSkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlIHx8IHt9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vQnJhbmNoIEFjdGl2aXR5IFNlbmQgU3VtbWFyeSBSZXBvcnRcclxuICAgZ2V0UGF5SW5BZ2VudGZvclNlbmRTdW1tYXJ5UmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TZW5kU3VtbWFyeVJlcG9ydC9HZXRBbGxQYXlJbkFnZW50c2A7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRCcmFuY2hCeUFnZW50Rm9yU2VuZFN1bW1hcnlSZXBvcnQoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1NlbmRTdW1tYXJ5UmVwb3J0L0dldEJyYW5jaEJ5QWdlbnQvJHtjb2RlfS9CSGA7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXRyeSgyKSxcclxuICAgICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRQYXJhbXNGb3JTZW5kU3VtbWFyeVJlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvU2VuZFN1bW1hcnlSZXBvcnQvR2V0QnJhbmNoQWN0aXZpdHlTZW5kU3VtbWFyeVJlcG9ydFBhcmFtc2A7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXRyeSgyKSxcclxuICAgICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRCcmFuY2hBY3Rpdml0eVNlbmRTdW1tYXJ5UmVwb3J0KGRhdGE6IEJyYW5jaEFjdGl2aXR5U2VuZFJlcG9ydFJlcXVlc3REb21haW5Nb2RlbCB8IGFueSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgQnJhbmNoQWN0aXZpdHlSZXBvcnRbXT4+IHtcclxuICAgICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TZW5kU3VtbWFyeVJlcG9ydC9HZXRCcmFuY2hBY3Rpdml0eVNlbmRTdW1tYXJ5UmVwb3J0YDtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXR1cm4gPFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+PnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbi8vVHJhbnNhY3Rpb24gbW9uaXRvcmluZyBSZXBvcnQuXHJcbiAgXHJcbiAgZ2V0UGFyYW1zRm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0L1RyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydFBhcmFtc2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldEJyYW5jaEJ5QWdlbnRGb3JUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQvR2V0QnJhbmNoQnlBZ2VudC8ke2NvZGV9L0JIYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0cnkoMiksXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuICBcclxuICBnZXRQYXlJbkFnZW50Zm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0L0dldEFsbFBheUluQWdlbnRzYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQoZGF0YTogVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVxdWVzdERvbWFpbk1vZGVsIHwgYW55KTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnRbXT4+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0L0dldFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYXBpUGF0aCwgZGF0YSkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydFtdPj5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuIl19