raise-common-lib 0.0.205 → 0.0.207

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 (228) hide show
  1. package/bundles/raise-common-lib.umd.js +28147 -1277
  2. package/bundles/raise-common-lib.umd.js.map +1 -1
  3. package/bundles/raise-common-lib.umd.min.js +1 -1
  4. package/bundles/raise-common-lib.umd.min.js.map +1 -1
  5. package/esm2015/lib/dashboard/api.js +46 -0
  6. package/esm2015/lib/dashboard/bar-charts/bar-charts.component.js +638 -0
  7. package/esm2015/lib/dashboard/bar-charts/utils.js +40 -0
  8. package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +700 -0
  9. package/esm2015/lib/dashboard/dashboard.service.js +650 -0
  10. package/esm2015/lib/dashboard/dashboardPorlets.service.js +3107 -0
  11. package/esm2015/lib/dashboard/dialog-group/download/index.component.js +358 -0
  12. package/esm2015/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +67 -0
  13. package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +4443 -0
  14. package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +4293 -0
  15. package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +1553 -0
  16. package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +857 -0
  17. package/esm2015/lib/dashboard/pane-group-new.component.js +2930 -0
  18. package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +1016 -0
  19. package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +1003 -0
  20. package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +319 -0
  21. package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +1638 -0
  22. package/esm2015/lib/layout/rs-stepper/index.component.js +175 -9
  23. package/esm2015/lib/raise-common-lib.module.js +56 -3
  24. package/esm2015/lib/service/InjectionToken.js +13 -0
  25. package/esm2015/public-api.js +3 -1
  26. package/esm2015/raise-common-lib.js +22 -6
  27. package/esm5/lib/dashboard/api.js +48 -0
  28. package/esm5/lib/dashboard/bar-charts/bar-charts.component.js +733 -0
  29. package/esm5/lib/dashboard/bar-charts/utils.js +45 -0
  30. package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +772 -0
  31. package/esm5/lib/dashboard/dashboard.service.js +846 -0
  32. package/esm5/lib/dashboard/dashboardPorlets.service.js +3536 -0
  33. package/esm5/lib/dashboard/dialog-group/download/index.component.js +441 -0
  34. package/esm5/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +78 -0
  35. package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +4940 -0
  36. package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +4751 -0
  37. package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +1683 -0
  38. package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +931 -0
  39. package/esm5/lib/dashboard/pane-group-new.component.js +3307 -0
  40. package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +1138 -0
  41. package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +1184 -0
  42. package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +354 -0
  43. package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +1792 -0
  44. package/esm5/lib/layout/rs-stepper/index.component.js +206 -12
  45. package/esm5/lib/raise-common-lib.module.js +56 -3
  46. package/esm5/lib/service/InjectionToken.js +13 -0
  47. package/esm5/public-api.js +3 -1
  48. package/esm5/raise-common-lib.js +22 -6
  49. package/fesm2015/raise-common-lib.js +24917 -1169
  50. package/fesm2015/raise-common-lib.js.map +1 -1
  51. package/fesm5/raise-common-lib.js +27944 -1267
  52. package/fesm5/raise-common-lib.js.map +1 -1
  53. package/lib/dashboard/api.d.ts +21 -0
  54. package/lib/dashboard/bar-charts/bar-charts.component.d.ts +60 -0
  55. package/lib/dashboard/bar-charts/utils.d.ts +1 -0
  56. package/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.d.ts +49 -0
  57. package/lib/dashboard/dashboard.service.d.ts +149 -0
  58. package/lib/dashboard/dashboardPorlets.service.d.ts +211 -0
  59. package/lib/dashboard/dialog-group/download/index.component.d.ts +33 -0
  60. package/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.d.ts +12 -0
  61. package/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.d.ts +125 -0
  62. package/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.d.ts +128 -0
  63. package/lib/dashboard/gadget-group/gadget-table/gadget-table.component.d.ts +74 -0
  64. package/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.d.ts +44 -0
  65. package/lib/dashboard/pane-group-new.component.d.ts +165 -0
  66. package/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.d.ts +53 -0
  67. package/lib/dashboard/sidebar-iconlist/field-format/field-format.component.d.ts +59 -0
  68. package/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.d.ts +27 -0
  69. package/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.d.ts +147 -0
  70. package/lib/layout/rs-stepper/index.component.d.ts +17 -4
  71. package/lib/service/InjectionToken.d.ts +4 -0
  72. package/package.json +1 -1
  73. package/public-api.d.ts +2 -0
  74. package/raise-common-lib.d.ts +20 -4
  75. package/raise-common-lib.metadata.json +1 -1
  76. package/src/assets/img/dashboard_icon/AddPerson.svg +4 -0
  77. package/src/assets/img/dashboard_icon/Angle-double-left.svg +12 -0
  78. package/src/assets/img/dashboard_icon/Angle-double-right.svg +12 -0
  79. package/src/assets/img/dashboard_icon/Arrow_collapse.svg +3 -0
  80. package/src/assets/img/dashboard_icon/Arrow_expand.svg +3 -0
  81. package/src/assets/img/dashboard_icon/Close.svg +4 -0
  82. package/src/assets/img/dashboard_icon/Edit_label.svg +3 -0
  83. package/src/assets/img/dashboard_icon/RemoveMini.svg +3 -0
  84. package/src/assets/img/dashboard_icon/ShareTo.svg +3 -0
  85. package/src/assets/img/dashboard_icon/add-dashboard.svg +4 -0
  86. package/src/assets/img/dashboard_icon/add-tab.svg +4 -0
  87. package/src/assets/img/dashboard_icon/angle-left.svg +12 -0
  88. package/src/assets/img/dashboard_icon/angle-right.svg +12 -0
  89. package/src/assets/img/dashboard_icon/area-white.svg +3 -0
  90. package/src/assets/img/dashboard_icon/area.svg +3 -0
  91. package/src/assets/img/dashboard_icon/bar-white.svg +14 -0
  92. package/src/assets/img/dashboard_icon/bar.svg +14 -0
  93. package/src/assets/img/dashboard_icon/basic-icon-filter.svg +14 -0
  94. package/src/assets/img/dashboard_icon/chart-combined-active.svg +7 -0
  95. package/src/assets/img/dashboard_icon/chart-combined.svg +7 -0
  96. package/src/assets/img/dashboard_icon/column-white.svg +14 -0
  97. package/src/assets/img/dashboard_icon/column.svg +26 -0
  98. package/src/assets/img/dashboard_icon/customize.png +0 -0
  99. package/src/assets/img/dashboard_icon/dashboard-description.svg +18 -0
  100. package/src/assets/img/dashboard_icon/dashboard-download.svg +18 -0
  101. package/src/assets/img/dashboard_icon/dashboard-drag.svg +28 -0
  102. package/src/assets/img/dashboard_icon/dashboard-duplicate.svg +24 -0
  103. package/src/assets/img/dashboard_icon/dashboard-icon.svg +12 -0
  104. package/src/assets/img/dashboard_icon/dashboard-properties.svg +18 -0
  105. package/src/assets/img/dashboard_icon/dashboard-rename.svg +18 -0
  106. package/src/assets/img/dashboard_icon/dashboard-share.svg +20 -0
  107. package/src/assets/img/dashboard_icon/dashboard-tab-delete.svg +4 -0
  108. package/src/assets/img/dashboard_icon/dashboard_Share.svg +3 -0
  109. package/src/assets/img/dashboard_icon/dashboard_ToolsHide.svg +4 -0
  110. package/src/assets/img/dashboard_icon/datamart_.svg +5 -0
  111. package/src/assets/img/dashboard_icon/datamart_Admin.svg +3 -0
  112. package/src/assets/img/dashboard_icon/datamart_Asset Portfolio.svg +4 -0
  113. package/src/assets/img/dashboard_icon/datamart_Bank.svg +3 -0
  114. package/src/assets/img/dashboard_icon/datamart_CRM.svg +6 -0
  115. package/src/assets/img/dashboard_icon/datamart_Company.svg +6 -0
  116. package/src/assets/img/dashboard_icon/datamart_Compliance.svg +3 -0
  117. package/src/assets/img/dashboard_icon/datamart_Contact.svg +3 -0
  118. package/src/assets/img/dashboard_icon/datamart_DASHBOARD.svg +4 -0
  119. package/src/assets/img/dashboard_icon/datamart_DOCX.svg +4 -0
  120. package/src/assets/img/dashboard_icon/datamart_ESG.svg +4 -0
  121. package/src/assets/img/dashboard_icon/datamart_Financials - Company.svg +3 -0
  122. package/src/assets/img/dashboard_icon/datamart_Fund.svg +4 -0
  123. package/src/assets/img/dashboard_icon/datamart_FundFinancial.svg +4 -0
  124. package/src/assets/img/dashboard_icon/datamart_HTML.svg +4 -0
  125. package/src/assets/img/dashboard_icon/datamart_Logs.svg +8 -0
  126. package/src/assets/img/dashboard_icon/datamart_PDF.svg +5 -0
  127. package/src/assets/img/dashboard_icon/datamart_Project.svg +3 -0
  128. package/src/assets/img/dashboard_icon/datamart_Templates.svg +7 -0
  129. package/src/assets/img/dashboard_icon/datamart_Track Change.svg +3 -0
  130. package/src/assets/img/dashboard_icon/datamart_VirtualGroup.svg +5 -0
  131. package/src/assets/img/dashboard_icon/datamart_XLS.svg +4 -0
  132. package/src/assets/img/dashboard_icon/desktop_selected.svg +10 -0
  133. package/src/assets/img/dashboard_icon/desktop_unselected.svg +10 -0
  134. package/src/assets/img/dashboard_icon/favourite-grey.svg +3 -0
  135. package/src/assets/img/dashboard_icon/favourite-yellow.svg +3 -0
  136. package/src/assets/img/dashboard_icon/forms-checkbox-square-tick.svg +3 -0
  137. package/src/assets/img/dashboard_icon/ftable-white.svg +24 -0
  138. package/src/assets/img/dashboard_icon/ftable.svg +24 -0
  139. package/src/assets/img/dashboard_icon/gadget-basic-arrow-down.svg +14 -0
  140. package/src/assets/img/dashboard_icon/gadget-basic-format.svg +21 -0
  141. package/src/assets/img/dashboard_icon/gadget-basic-sub-total.svg +18 -0
  142. package/src/assets/img/dashboard_icon/gadget-basic-total-1.svg +9 -0
  143. package/src/assets/img/dashboard_icon/gadget-basic-total.svg +16 -0
  144. package/src/assets/img/dashboard_icon/gadget-columns.svg +12 -0
  145. package/src/assets/img/dashboard_icon/gadget-delete.svg +18 -0
  146. package/src/assets/img/dashboard_icon/gadget-download.svg +18 -0
  147. package/src/assets/img/dashboard_icon/gadget-duplicate.svg +24 -0
  148. package/src/assets/img/dashboard_icon/gadget-edit.svg +18 -0
  149. package/src/assets/img/dashboard_icon/gadget-filters-light.svg +9 -0
  150. package/src/assets/img/dashboard_icon/gadget-filters.svg +9 -0
  151. package/src/assets/img/dashboard_icon/gadget-format-0.svg +8 -0
  152. package/src/assets/img/dashboard_icon/gadget-format-1.svg +8 -0
  153. package/src/assets/img/dashboard_icon/gadget-format.svg +19 -0
  154. package/src/assets/img/dashboard_icon/gadget-fullscreen.svg +30 -0
  155. package/src/assets/img/dashboard_icon/gadget-settings.svg +18 -0
  156. package/src/assets/img/dashboard_icon/gadget-sub-total-0.svg +18 -0
  157. package/src/assets/img/dashboard_icon/gadget-sub-total-1.svg +18 -0
  158. package/src/assets/img/dashboard_icon/gadget-thumbnail.svg +12 -0
  159. package/src/assets/img/dashboard_icon/gadget-type-light.svg +15 -0
  160. package/src/assets/img/dashboard_icon/gadget-type.svg +16 -0
  161. package/src/assets/img/dashboard_icon/geo-white.svg +14 -0
  162. package/src/assets/img/dashboard_icon/geo.svg +14 -0
  163. package/src/assets/img/dashboard_icon/historic-IRR-white.svg +9 -0
  164. package/src/assets/img/dashboard_icon/historic-IRR.svg +5 -0
  165. package/src/assets/img/dashboard_icon/information-1.png +0 -0
  166. package/src/assets/img/dashboard_icon/information-grey.svg +4 -0
  167. package/src/assets/img/dashboard_icon/menu-change-group.svg +3 -0
  168. package/src/assets/img/dashboard_icon/menu-close.svg +20 -0
  169. package/src/assets/img/dashboard_icon/menu-delete.svg +18 -0
  170. package/src/assets/img/dashboard_icon/menu-description.svg +19 -0
  171. package/src/assets/img/dashboard_icon/menu-download.svg +24 -0
  172. package/src/assets/img/dashboard_icon/menu-drag.svg +28 -0
  173. package/src/assets/img/dashboard_icon/menu-duplicate.svg +26 -0
  174. package/src/assets/img/dashboard_icon/menu-properties.svg +18 -0
  175. package/src/assets/img/dashboard_icon/menu-rename.svg +23 -0
  176. package/src/assets/img/dashboard_icon/menu-share.svg +20 -0
  177. package/src/assets/img/dashboard_icon/menu-toolbar.svg +10 -0
  178. package/src/assets/img/dashboard_icon/mobile_selected.svg +10 -0
  179. package/src/assets/img/dashboard_icon/mobile_unselected.svg +10 -0
  180. package/src/assets/img/dashboard_icon/more_Save.svg +3 -0
  181. package/src/assets/img/dashboard_icon/more_View.svg +3 -0
  182. package/src/assets/img/dashboard_icon/multi-series-white.svg +20 -0
  183. package/src/assets/img/dashboard_icon/multi-series.svg +6 -0
  184. package/src/assets/img/dashboard_icon/paint-bucket.svg +6 -0
  185. package/src/assets/img/dashboard_icon/pie-white.svg +16 -0
  186. package/src/assets/img/dashboard_icon/pie.svg +16 -0
  187. package/src/assets/img/dashboard_icon/pivot-chart-active.svg +8 -0
  188. package/src/assets/img/dashboard_icon/pivot-chart.svg +8 -0
  189. package/src/assets/img/dashboard_icon/pivot-white.svg +8 -0
  190. package/src/assets/img/dashboard_icon/pivot.svg +8 -0
  191. package/src/assets/img/dashboard_icon/pivot_column.svg +9 -0
  192. package/src/assets/img/dashboard_icon/pivot_column_active.svg +9 -0
  193. package/src/assets/img/dashboard_icon/pivot_line.svg +12 -0
  194. package/src/assets/img/dashboard_icon/pivot_line_active.svg +12 -0
  195. package/src/assets/img/dashboard_icon/print-A2.svg +3 -0
  196. package/src/assets/img/dashboard_icon/radar-white.svg +19 -0
  197. package/src/assets/img/dashboard_icon/radar.svg +19 -0
  198. package/src/assets/img/dashboard_icon/saveAs.svg +3 -0
  199. package/src/assets/img/dashboard_icon/search_input.svg +4 -0
  200. package/src/assets/img/dashboard_icon/table-3-white.svg +16 -0
  201. package/src/assets/img/dashboard_icon/table-3.svg +16 -0
  202. package/src/assets/img/dashboard_icon/table-filter-off.svg +5 -0
  203. package/src/assets/img/dashboard_icon/table-filter-on.svg +5 -0
  204. package/src/assets/img/dashboard_icon/tag_dashboard_selected.svg +3 -0
  205. package/src/assets/img/dashboard_icon/tag_dashboard_unselected.svg +3 -0
  206. package/src/assets/img/dashboard_icon/tag_share_selected.svg +3 -0
  207. package/src/assets/img/dashboard_icon/tag_share_unselected.svg +3 -0
  208. package/src/assets/img/dashboard_icon/tick.svg +26 -0
  209. package/src/assets/img/dashboard_icon/toolbar_AddDashboard.svg +5 -0
  210. package/src/assets/img/dashboard_icon/toolbar_AddGroup.svg +3 -0
  211. package/src/assets/img/dashboard_icon/toolbar_AddReport.svg +3 -0
  212. package/src/assets/img/dashboard_icon/toolbar_CollapseAll.svg +3 -0
  213. package/src/assets/img/dashboard_icon/toolbar_Customize.svg +3 -0
  214. package/src/assets/img/dashboard_icon/toolbar_DeleteDark.svg +3 -0
  215. package/src/assets/img/dashboard_icon/toolbar_Duplicate.svg +3 -0
  216. package/src/assets/img/dashboard_icon/toolbar_Edit.svg +3 -0
  217. package/src/assets/img/dashboard_icon/toolbar_ExpandAll.svg +3 -0
  218. package/src/assets/img/dashboard_icon/toolbar_Search.svg +3 -0
  219. package/src/assets/img/dashboard_icon/topbar-menu.svg +33 -0
  220. package/src/assets/img/dashboard_icon/topbar-refresh.svg +17 -0
  221. package/src/assets/img/dashboard_icon/topbar-tool-off.svg +12 -0
  222. package/src/assets/img/dashboard_icon/topbar-tool-on.svg +12 -0
  223. package/src/assets/img/dashboard_icon/trade-up-white.svg +14 -0
  224. package/src/assets/img/dashboard_icon/trade-up.svg +14 -0
  225. package/src/assets/img/dashboard_icon/transpose-white.svg +16 -0
  226. package/src/assets/img/dashboard_icon/transpose.svg +16 -0
  227. package/src/assets/style/reset/mat-dialog.scss +11 -5
  228. package/src/assets/style/style.scss +14 -4
@@ -0,0 +1,3307 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/dashboard/pane-group-new.component.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import * as tslib_1 from "tslib";
7
+ import { Component, ViewChild, ChangeDetectorRef, Output, EventEmitter, ElementRef, ViewChildren, QueryList, HostListener, Input, Optional, Inject, } from "@angular/core";
8
+ import { MatDialog } from "@angular/material";
9
+ import { ActivatedRoute, NavigationEnd, Router } from "@angular/router";
10
+ import { DashboardService } from "./dashboard.service";
11
+ import { ApiList } from "./api";
12
+ import { API_SERVICE_TOKEN, PBF_TOKEN, ROLE_SERVICE_TOKEN, } from "../service/InjectionToken";
13
+ import { DashboardPorletsService } from "./dashboardPorlets.service";
14
+ import CircularJSON from "circular-json";
15
+ import { MAT_DATE_FORMATS } from "@angular/material/core";
16
+ import { cloneDeep, find } from "lodash";
17
+ import { DashboardLayoutComponent } from "@syncfusion/ej2-angular-layouts";
18
+ import { FieldFormatComponent } from "./sidebar-iconlist/field-format/field-format.component";
19
+ import { HttpClient } from "@angular/common/http";
20
+ import { DataMartNewComponent } from "./dashboard-properties/data-mart-new/data-mart-new.component";
21
+ import { debounce } from "./bar-charts/utils";
22
+ import { DatePipe } from "@angular/common";
23
+ import { PaneDownloadComponent } from "./dialog-group/download/index.component";
24
+ import { filter } from "rxjs/operators";
25
+ import { DialogService } from "../service/dialog.service";
26
+ /** @type {?} */
27
+ var dateFormat = "DD-MM-YYYY";
28
+ if (localStorage["setting"]) {
29
+ /** @type {?} */
30
+ var dateArray = find(JSON.parse(localStorage.getItem("setting") || "{}"), (/**
31
+ * @param {?} item
32
+ * @return {?}
33
+ */
34
+ function (item) { return item && item["parameter"] === "DATE_FORMAT"; }));
35
+ if (dateArray) {
36
+ dateFormat = dateArray.value;
37
+ }
38
+ }
39
+ /** @type {?} */
40
+ var MY_FORMATS = {
41
+ parse: {
42
+ dateInput: "DD-MM-YYYY",
43
+ },
44
+ display: {
45
+ dateInput: dateFormat,
46
+ monthYearLabel: "YYYY",
47
+ dateA11yLabel: "LL",
48
+ monthYearA11yLabel: "YYYY",
49
+ },
50
+ };
51
+ var ɵ0 = MY_FORMATS;
52
+ var PaneGroupNewComponent = /** @class */ (function () {
53
+ function PaneGroupNewComponent(dialog, dialogService, dashboardService, api, activatedRoute, DashboardPorletsService, ref, router, httpClient, datePipe, pbf, http, rs) {
54
+ var _this = this;
55
+ this.dialog = dialog;
56
+ this.dialogService = dialogService;
57
+ this.dashboardService = dashboardService;
58
+ this.api = api;
59
+ this.activatedRoute = activatedRoute;
60
+ this.DashboardPorletsService = DashboardPorletsService;
61
+ this.ref = ref;
62
+ this.router = router;
63
+ this.httpClient = httpClient;
64
+ this.datePipe = datePipe;
65
+ this.pbf = pbf;
66
+ this.http = http;
67
+ this.rs = rs;
68
+ this.appCode = "PMS";
69
+ this.selectedY = [];
70
+ this.selectedSecondY = [];
71
+ this.selectedX = [];
72
+ this.hasInit = true;
73
+ this.hasChangeDataTable = false;
74
+ this.activeTabLabel = "";
75
+ this.translation = JSON.parse(localStorage.getItem("translation") || "{}");
76
+ this.push_btn = false;
77
+ this.draggableHandle = ".gadget-title";
78
+ this.subscriptions = [];
79
+ this.haveFullScreen = [];
80
+ // private clientHeight_;
81
+ this.cellSpacing = [20, 20];
82
+ this.newPosition = [];
83
+ this.customized = false;
84
+ this.chartTypeList = ["Column", "Bar", "Line", "Area", "Scatter", "Polar"];
85
+ this.pivotTableSubTotalList = [
86
+ {
87
+ selected: false,
88
+ value: this.translation.SHOW_SUB_TOTALS || "Show sub totals",
89
+ },
90
+ {
91
+ selected: false,
92
+ value: this.translation.HIDE_SUB_TOTALS || "Hide sub totals",
93
+ },
94
+ {
95
+ selected: false,
96
+ value: this.translation.SHOW_SUB_TOTALS_ROWS_ONLY ||
97
+ "Show sub totals rows only",
98
+ },
99
+ {
100
+ selected: false,
101
+ value: this.translation.SHOW_SUB_TOTALS_COLUMNS_ONLY ||
102
+ "Show sub totals columns only",
103
+ },
104
+ ];
105
+ this.pivotTableGrandTotalList = [
106
+ {
107
+ selected: false,
108
+ value: this.translation.SHOW_GRAND_TOTALS || "Show grand totals",
109
+ },
110
+ {
111
+ selected: false,
112
+ value: this.translation.HIDE_GRAND_TOTALS || "Hide grand totals",
113
+ },
114
+ {
115
+ selected: false,
116
+ value: this.translation.SHOW_GRAND_TOTALS_ROWS_ONLY ||
117
+ "Show grand totals rows only",
118
+ },
119
+ {
120
+ selected: false,
121
+ value: this.translation.SHOW_GRAND_TOTALS_COLUMNS_ONLY ||
122
+ "Show grand totals columns only",
123
+ },
124
+ ];
125
+ this.tableGrandTotalList = [
126
+ {
127
+ selected: false,
128
+ value: this.translation.SHOW_GRAND_TOTALS || "Show grand totals",
129
+ },
130
+ {
131
+ selected: false,
132
+ value: this.translation.HIDE_GRAND_TOTALS || "Hide grand totals",
133
+ },
134
+ ];
135
+ this.themeData = [
136
+ {
137
+ id: "theme13",
138
+ value: ["#1C3484", "#35B9FC"],
139
+ },
140
+ {
141
+ id: "theme14",
142
+ value: ["#04578F", "#3EBBCE"],
143
+ },
144
+ {
145
+ id: "theme15",
146
+ value: ["#1C3484", "#136BBB", "#35B9FC"],
147
+ },
148
+ {
149
+ id: "theme16",
150
+ value: ["#04578F", "#0082AF", "#3EBBCE"],
151
+ },
152
+ {
153
+ id: "theme17",
154
+ value: ["#1C3484", "#1659A9", "#1D97E1", "#35B9FC"],
155
+ },
156
+ {
157
+ id: "theme18",
158
+ value: ["#04578F", "#0070A3", "#16A2C2", "#3EBBCE"],
159
+ },
160
+ {
161
+ id: "theme19",
162
+ value: ["#1C3484", "#1659A9", "#1375C4", "#1D97E1", "#35B9FC"],
163
+ },
164
+ {
165
+ id: "theme20",
166
+ value: ["#04578F", "#0070A3", "#0089B4", "#16A2C2", "#3EBBCE"],
167
+ },
168
+ {
169
+ id: "theme21",
170
+ value: ["#1C3484", "#1659A9", "#1368B8", "#1375C4", "#1D97E1", "#35B9FC"],
171
+ },
172
+ {
173
+ id: "theme22",
174
+ value: ["#04578F", "#0070A3", "#007FAD", "#0089B4", "#16A2C2", "#3EBBCE"],
175
+ },
176
+ {
177
+ id: "theme23",
178
+ value: [
179
+ "#1C3484",
180
+ "#1659A9",
181
+ "#145FAF",
182
+ "#1368B8",
183
+ "#1375C4",
184
+ "#1D97E1",
185
+ "#35B9FC",
186
+ ],
187
+ },
188
+ {
189
+ id: "theme24",
190
+ value: [
191
+ "#04578F",
192
+ "#0070A3",
193
+ "#0078A9",
194
+ "#007FAD",
195
+ "#0089B4",
196
+ "#16A2C2",
197
+ "#3EBBCE",
198
+ ],
199
+ },
200
+ {
201
+ id: "theme11",
202
+ value: [
203
+ "#1C3484",
204
+ "#194697",
205
+ "#1659A9",
206
+ "#136BBB",
207
+ "#147ECC",
208
+ "#1B92DD",
209
+ "#26A5ED",
210
+ "#35B9FC",
211
+ ],
212
+ },
213
+ {
214
+ id: "theme12",
215
+ value: [
216
+ "#04578F",
217
+ "#00659B",
218
+ "#0073A6",
219
+ "#0082AF",
220
+ "#0090B8",
221
+ "#0F9EC0",
222
+ "#29ADC7",
223
+ "#3EBBCE",
224
+ ],
225
+ },
226
+ {
227
+ id: "theme1",
228
+ value: [
229
+ "#594bb9",
230
+ "#f1af32",
231
+ "#4688ed",
232
+ "#e0563e",
233
+ "#803a63",
234
+ "#6dd8b5",
235
+ "#e87225",
236
+ "#c5df42",
237
+ "#c6437d",
238
+ ],
239
+ },
240
+ {
241
+ id: "theme2",
242
+ value: [
243
+ "#4688ed",
244
+ "#f1af32",
245
+ "#e0563e",
246
+ "#803a63",
247
+ "#6dd8b5",
248
+ "#e87225",
249
+ "#c5df42",
250
+ "#c6437d",
251
+ "#594bb9",
252
+ ],
253
+ },
254
+ {
255
+ id: "theme3",
256
+ value: [
257
+ "#c6437d",
258
+ "#c5df42",
259
+ "#e87225",
260
+ "#6dd8b5",
261
+ "#e0563e",
262
+ "#803a63",
263
+ "#f1af32",
264
+ "#594bb9",
265
+ "#4688ed",
266
+ ],
267
+ },
268
+ {
269
+ id: "theme4",
270
+ value: [
271
+ "#2f499f",
272
+ "#8d1d2e",
273
+ "#e9bf35",
274
+ "#51772f",
275
+ "#469bd8",
276
+ "#5c448f",
277
+ "#da732f",
278
+ "#245353",
279
+ "#43a245",
280
+ ],
281
+ },
282
+ {
283
+ id: "theme5",
284
+ value: [
285
+ "#383839",
286
+ "#446ec6",
287
+ "#cf6384",
288
+ "#ebb37e",
289
+ "#71a249",
290
+ "#4bb1a5",
291
+ "#e87225",
292
+ "#c5df42",
293
+ "#c6437d",
294
+ ],
295
+ },
296
+ {
297
+ id: "theme6",
298
+ value: [
299
+ "#517ae1",
300
+ "#6386e5",
301
+ "#7491e9",
302
+ "#849dec",
303
+ "#94a9ef",
304
+ "#a4b6f2",
305
+ "#b4c3f6",
306
+ "#c4cff9",
307
+ "#d4ddfd",
308
+ ],
309
+ },
310
+ {
311
+ id: "theme7",
312
+ value: [
313
+ "#39828e",
314
+ "#488e99",
315
+ "#579aa5",
316
+ "#66a6b0",
317
+ "#75b3bd",
318
+ "#85bfc9",
319
+ "#95cdd6",
320
+ "#a4dae2",
321
+ "#b5e8f0",
322
+ ],
323
+ },
324
+ {
325
+ id: "theme8",
326
+ value: [
327
+ "#e7963d",
328
+ "#ea9e4b",
329
+ "#eea659",
330
+ "#f0ae68",
331
+ "#f2b678",
332
+ "#f3bf87",
333
+ "#f5c798",
334
+ "#f6d0aa",
335
+ "#f7d9bb",
336
+ ],
337
+ },
338
+ {
339
+ id: "theme9",
340
+ value: [
341
+ "#64a8b4",
342
+ "#7ebec0",
343
+ "#9cc9ca",
344
+ "#b8d4d4",
345
+ "#d9d6cd",
346
+ "#d8b7a7",
347
+ "#ce8f93",
348
+ "#c1627f",
349
+ "#ad2458",
350
+ ],
351
+ },
352
+ {
353
+ id: "theme10",
354
+ value: [
355
+ "#4176ba",
356
+ "#559ae8",
357
+ "#70b3e8",
358
+ "#a7cce7",
359
+ "#dfdfdf",
360
+ "#d2a08b",
361
+ "#c76a50",
362
+ "#ca4e34",
363
+ "#aa3c29",
364
+ ],
365
+ },
366
+ ];
367
+ this.startEdit = false;
368
+ this.showSubTotalGroup = false;
369
+ this.showgrandTotalGroup = false;
370
+ this.showTableGrandTotalGroup = false;
371
+ this.restoreModel = [];
372
+ this.themeObj = {};
373
+ this.enableMultipleAxis = false;
374
+ this.showLegend = false;
375
+ this.activeTab = 1;
376
+ this.prevId = null;
377
+ this.dashboard_sidebar = false;
378
+ this.ActiveDashboardPortlets = [];
379
+ this.portlets = [];
380
+ this.hasResize = false;
381
+ this.router.events
382
+ .pipe(filter((/**
383
+ * @param {?} event
384
+ * @return {?}
385
+ */
386
+ function (event) { return event instanceof NavigationEnd; })))
387
+ .subscribe((/**
388
+ * @param {?} e
389
+ * @return {?}
390
+ */
391
+ function (e) {
392
+ if (_this.hasResize &&
393
+ e.url === _this.activatedRoute["_routerState"].snapshot.url) {
394
+ if (_this.dashboardLayout) {
395
+ _this.ActiveDashboardPortlets = [];
396
+ _this.hasResize = false;
397
+ _this.pbf.pageLoading = true;
398
+ _this.pbf.pageLoading_.next(true);
399
+ _this.dashboardLayout.removeAll();
400
+ _this.ref.markForCheck();
401
+ setTimeout((/**
402
+ * @return {?}
403
+ */
404
+ function () {
405
+ _this.setActiveDashboardPortlets();
406
+ }), 500);
407
+ }
408
+ }
409
+ }));
410
+ }
411
+ /**
412
+ * @param {?} e
413
+ * @return {?}
414
+ */
415
+ PaneGroupNewComponent.prototype.bodyClick = /**
416
+ * @param {?} e
417
+ * @return {?}
418
+ */
419
+ function (e) {
420
+ if (this.unclick &&
421
+ this.unclick.first &&
422
+ e.target.tagName !== "IMG" &&
423
+ !this.unclick.first.nativeElement.contains(e.target)) {
424
+ this.showSubTotalGroup = false;
425
+ }
426
+ if (this.unclickGrand.first &&
427
+ e.target.tagName !== "IMG" &&
428
+ !this.unclickGrand.first.nativeElement.contains(e.target)) {
429
+ this.showgrandTotalGroup = false;
430
+ this.showTableGrandTotalGroup = false;
431
+ }
432
+ };
433
+ /**
434
+ * @return {?}
435
+ */
436
+ PaneGroupNewComponent.prototype.ngOnInit = /**
437
+ * @return {?}
438
+ */
439
+ function () {
440
+ var _this = this;
441
+ this.pbf.pageLoading = true;
442
+ this.pbf.pageLoading_.next(true);
443
+ this.ref.markForCheck();
444
+ this.ref.detectChanges();
445
+ if (this.themeData && this.themeData.length > 0) {
446
+ this.themeData.forEach((/**
447
+ * @param {?} e
448
+ * @return {?}
449
+ */
450
+ function (e) {
451
+ _this.themeObj[e.id] = e["value"];
452
+ }));
453
+ }
454
+ this.getInfo();
455
+ this.getDashboard();
456
+ this.subscriptions.push(this.pbf.pub$.subscribe((/**
457
+ * @param {?} res
458
+ * @return {?}
459
+ */
460
+ function (res) {
461
+ if (res.refreshUrl &&
462
+ res.refreshUrl === _this.activatedRoute["_routerState"].snapshot.url) {
463
+ _this.pbf.pageLoading = true;
464
+ _this.pbf.pageLoading_.next(true);
465
+ setTimeout((/**
466
+ * @return {?}
467
+ */
468
+ function () {
469
+ _this.getDashboard();
470
+ }), 500);
471
+ }
472
+ })));
473
+ this.subscriptions.push(this.dashboardService.getDashboardRename().subscribe((/**
474
+ * @param {?} res
475
+ * @return {?}
476
+ */
477
+ function (res) {
478
+ if (_this.dashboard && _this.dashboard.id === res.id) {
479
+ _this.dashboard.dashboardGroupName = res.dashboardGroupName;
480
+ _this.dashboard.dashboardGroupId = res.dashboardGroupId;
481
+ _this.dashboard.description = res.description;
482
+ _this.dashboard.name = res.name;
483
+ _this.updateDashboardLastUpdateDate();
484
+ }
485
+ })));
486
+ this.subscriptions.push(this.dashboardService.getCustomizeStatus().subscribe((/**
487
+ * @param {?} id
488
+ * @return {?}
489
+ */
490
+ function (id) {
491
+ if (_this.dashboard && _this.dashboard.id === id) {
492
+ _this.ref.markForCheck();
493
+ _this.ref.detectChanges();
494
+ }
495
+ })));
496
+ this.subscriptions.push(this.pbf.getHasResize().subscribe((/**
497
+ * @param {?} url
498
+ * @return {?}
499
+ */
500
+ function (url) {
501
+ if (url) {
502
+ if (_this.activatedRoute["_routerState"].snapshot.url === url) {
503
+ if (_this.dashboardLayout) {
504
+ _this.ActiveDashboardPortlets = [];
505
+ _this.dashboardLayout.removeAll();
506
+ _this.pbf.pageLoading = true;
507
+ _this.pbf.pageLoading_.next(true);
508
+ _this.ref.markForCheck();
509
+ setTimeout((/**
510
+ * @return {?}
511
+ */
512
+ function () {
513
+ _this.setActiveDashboardPortlets();
514
+ }), 500);
515
+ }
516
+ }
517
+ else {
518
+ _this.hasResize = true;
519
+ }
520
+ }
521
+ })));
522
+ };
523
+ /**
524
+ * @private
525
+ * @param {?} item
526
+ * @param {?=} noDetect
527
+ * @return {?}
528
+ */
529
+ PaneGroupNewComponent.prototype.getAllFields = /**
530
+ * @private
531
+ * @param {?} item
532
+ * @param {?=} noDetect
533
+ * @return {?}
534
+ */
535
+ function (item, noDetect) {
536
+ var _this = this;
537
+ if (noDetect === void 0) { noDetect = false; }
538
+ if (!noDetect) {
539
+ this.pbf.pageLoading = true;
540
+ }
541
+ return new Promise((/**
542
+ * @param {?} resolve
543
+ * @param {?} reject
544
+ * @return {?}
545
+ */
546
+ function (resolve, reject) {
547
+ /** @type {?} */
548
+ var dataMartCode = item.figureCode;
549
+ /** @type {?} */
550
+ var dataObj = {
551
+ language: _this.lang,
552
+ dataMartCode: dataMartCode,
553
+ };
554
+ _this.DashboardPorletsService.setSchemaParams(dataObj, dataMartCode, _this.dashboard);
555
+ _this.http.post(_this.api.urlList.GetSchema, dataObj, (/**
556
+ * @param {?} res
557
+ * @return {?}
558
+ */
559
+ function (res) {
560
+ if (!noDetect) {
561
+ _this.pbf.pageLoading = false;
562
+ _this.pbf.pageLoading_.next(true);
563
+ }
564
+ resolve(res);
565
+ }));
566
+ }));
567
+ };
568
+ /**
569
+ * @param {?} e
570
+ * @return {?}
571
+ */
572
+ PaneGroupNewComponent.prototype.onCloseRight = /**
573
+ * @param {?} e
574
+ * @return {?}
575
+ */
576
+ function (e) {
577
+ this.push_btn = false;
578
+ this.ref.detectChanges();
579
+ };
580
+ /**
581
+ * @param {?=} noDetect
582
+ * @return {?}
583
+ */
584
+ PaneGroupNewComponent.prototype.setActiveDashboardPortlets = /**
585
+ * @param {?=} noDetect
586
+ * @return {?}
587
+ */
588
+ function (noDetect) {
589
+ var _this = this;
590
+ if (noDetect === void 0) { noDetect = false; }
591
+ if (this.hasChangeDataTable) {
592
+ this.ActiveDashboardPortlets = [];
593
+ this.ref.markForCheck();
594
+ }
595
+ /** @type {?} */
596
+ var portlets = this.portlets.filter((/**
597
+ * @param {?} portlet
598
+ * @return {?}
599
+ */
600
+ function (portlet) {
601
+ if (!portlet || !portlet.config) {
602
+ return;
603
+ }
604
+ /** @type {?} */
605
+ var config = JSON.parse(portlet.config);
606
+ /** @type {?} */
607
+ var tabId = config.tabId || 1;
608
+ if (tabId === _this.activeTab) {
609
+ return portlet;
610
+ }
611
+ })) || [];
612
+ setTimeout((/**
613
+ * @return {?}
614
+ */
615
+ function () {
616
+ _this.ActiveDashboardPortlets = tslib_1.__spread(portlets);
617
+ if (!_this.ActiveDashboardPortlets.length &&
618
+ _this.dashboardLayout &&
619
+ _this.dashboardLayout.panels &&
620
+ _this.dashboardLayout.panels.length) {
621
+ _this.dashboardLayout.removeAll();
622
+ }
623
+ _this.hasChangeDataTable = false;
624
+ if (!noDetect) {
625
+ _this.pbf.pageLoading = false;
626
+ _this.pbf.pageLoading_.next(true);
627
+ }
628
+ _this.ref.detectChanges();
629
+ }));
630
+ };
631
+ /**
632
+ * @param {?} tab
633
+ * @param {?} index
634
+ * @return {?}
635
+ */
636
+ PaneGroupNewComponent.prototype.onActiveTab = /**
637
+ * @param {?} tab
638
+ * @param {?} index
639
+ * @return {?}
640
+ */
641
+ function (tab, index) {
642
+ this.dashboard_sidebar = false;
643
+ this.push_btn = false;
644
+ var id = tab.id, label = tab.label;
645
+ if (tab.id === this.activeTab) {
646
+ return;
647
+ }
648
+ this.activeTabId = id;
649
+ this.activeTabLabel = label;
650
+ if (index !== 0) {
651
+ this.prevId = this.tabList[index - 1].id;
652
+ }
653
+ this.startEdit = false;
654
+ this.activeTab = id;
655
+ this.setActiveDashboardPortlets();
656
+ };
657
+ /**
658
+ * @param {?} item
659
+ * @return {?}
660
+ */
661
+ PaneGroupNewComponent.prototype.onDeleteTab = /**
662
+ * @param {?} item
663
+ * @return {?}
664
+ */
665
+ function (item) {
666
+ var _this = this;
667
+ /** @type {?} */
668
+ var _title = this.translation.ARE_YOU_SURE_TO_DELETE_DASHBOARD_TAB_WARNING_MESSAGE ||
669
+ ".ARE_YOU_SURE_TO_DELETE_DASHBOARD_TAB_WARNING_MESSAGE";
670
+ _title = _title.replace("{Tab Name}", item.label);
671
+ /** @type {?} */
672
+ var dialogRef = this.dialogService.showCommonDilaog({
673
+ title: this.translation.DELETE_RECORD || ".DELETE_RECORD",
674
+ description: _title,
675
+ });
676
+ dialogRef.afterClosed().subscribe((/**
677
+ * @param {?} res
678
+ * @return {?}
679
+ */
680
+ function (res) {
681
+ if (res === "save") {
682
+ /** @type {?} */
683
+ var isActive = _this.activeTab === item.id;
684
+ /** @type {?} */
685
+ var index_1 = 0;
686
+ for (var i = _this.portlets.length - 1; i >= 0; i--) {
687
+ /** @type {?} */
688
+ var config = JSON.parse(_this.portlets[i].config);
689
+ if (config.tabId === _this.activeTab) {
690
+ _this.portlets.splice(i, 1);
691
+ }
692
+ }
693
+ _this.tabList.forEach((/**
694
+ * @param {?} tab
695
+ * @param {?} i
696
+ * @return {?}
697
+ */
698
+ function (tab, i) {
699
+ if (tab.id === item.id) {
700
+ _this.tabList.splice(i, 1);
701
+ index_1 = i;
702
+ _this.ref.markForCheck();
703
+ _this.ref.detectChanges();
704
+ }
705
+ }));
706
+ if (isActive) {
707
+ if (!_this.tabList[index_1]) {
708
+ index_1 -= 1;
709
+ }
710
+ _this.activeTab = _this.tabList[index_1].id;
711
+ _this.activeTabId = _this.activeTab;
712
+ _this.portlets.forEach((/**
713
+ * @param {?} portlet
714
+ * @return {?}
715
+ */
716
+ function (portlet) {
717
+ /** @type {?} */
718
+ var config = JSON.parse(portlet.config);
719
+ config.activeTab = _this.activeTab;
720
+ portlet.config = CircularJSON.stringify(config);
721
+ }));
722
+ _this.ref.detectChanges();
723
+ _this.onActiveTab(_this.tabList[index_1], index_1);
724
+ }
725
+ _this.savedashboard("true");
726
+ }
727
+ }));
728
+ };
729
+ /**
730
+ * @return {?}
731
+ */
732
+ PaneGroupNewComponent.prototype.onAddTab = /**
733
+ * @return {?}
734
+ */
735
+ function () {
736
+ /** @type {?} */
737
+ var label = "Tab " + (this.tabList.length + 1);
738
+ this.prevId = this.tabList[this.tabList.length - 1].id;
739
+ /** @type {?} */
740
+ var newId = 1;
741
+ this.tabList.forEach((/**
742
+ * @param {?} tab
743
+ * @return {?}
744
+ */
745
+ function (tab) {
746
+ newId = Math.max(newId, tab.id);
747
+ }));
748
+ this.activeTab = newId + 1;
749
+ this.tabList.push({
750
+ id: this.activeTab,
751
+ label: label,
752
+ displayLabel: (this.translation.TAB || "Tab") + " " + (this.tabList.length + 1),
753
+ });
754
+ this.activeTabId = this.activeTab;
755
+ this.activeTabLabel = label;
756
+ // 隐藏右侧菜单,清除当前选中的portlet
757
+ this.portlet = null;
758
+ this.dashboard_sidebar = false;
759
+ this.hasChangeDataTable = true;
760
+ this.push_btn = false;
761
+ this.setActiveDashboardPortlets();
762
+ };
763
+ /**
764
+ * @param {?} e
765
+ * @return {?}
766
+ */
767
+ PaneGroupNewComponent.prototype.setTabInput = /**
768
+ * @param {?} e
769
+ * @return {?}
770
+ */
771
+ function (e) {
772
+ var _this = this;
773
+ this.portlets.forEach((/**
774
+ * @param {?} portlet
775
+ * @return {?}
776
+ */
777
+ function (portlet) {
778
+ /** @type {?} */
779
+ var _config = JSON.parse(portlet.config);
780
+ /** @type {?} */
781
+ var _tabId = _config.tabId || 1;
782
+ if (_tabId === _this.activeTab) {
783
+ _config.tabLabel = e.target.value;
784
+ portlet.config = CircularJSON.stringify(_config);
785
+ }
786
+ }));
787
+ this.ref.markForCheck();
788
+ this.ref.detectChanges();
789
+ };
790
+ /**
791
+ * @param {?} item
792
+ * @return {?}
793
+ */
794
+ PaneGroupNewComponent.prototype.saveTabInput = /**
795
+ * @param {?} item
796
+ * @return {?}
797
+ */
798
+ function (item) {
799
+ this.startEdit = false;
800
+ item.displayLabel = this.truncateText(item.label);
801
+ this.ref.markForCheck();
802
+ this.ref.detectChanges();
803
+ };
804
+ /**
805
+ * @param {?} id
806
+ * @return {?}
807
+ */
808
+ PaneGroupNewComponent.prototype.onStartEdit = /**
809
+ * @param {?} id
810
+ * @return {?}
811
+ */
812
+ function (id) {
813
+ if (!this.customized) {
814
+ return;
815
+ }
816
+ if (this.activeTab !== id) {
817
+ return;
818
+ }
819
+ this.startEdit = true;
820
+ };
821
+ /**
822
+ * @private
823
+ * @param {?=} noDetect
824
+ * @return {?}
825
+ */
826
+ PaneGroupNewComponent.prototype.initTabList = /**
827
+ * @private
828
+ * @param {?=} noDetect
829
+ * @return {?}
830
+ */
831
+ function (noDetect) {
832
+ var _this = this;
833
+ if (noDetect === void 0) { noDetect = false; }
834
+ this.tabList = [];
835
+ if (!this.activeTab || !this.stayActiveTab) {
836
+ this.activeTab = 1;
837
+ }
838
+ this.prevId = null;
839
+ /** @type {?} */
840
+ var tabMap = {};
841
+ this.portlets.forEach((/**
842
+ * @param {?} portlet
843
+ * @param {?} idx
844
+ * @return {?}
845
+ */
846
+ function (portlet, idx) {
847
+ if (portlet.config) {
848
+ /** @type {?} */
849
+ var config = JSON.parse(portlet.config);
850
+ /** @type {?} */
851
+ var txt = _this.translation["TAB"] || "Tab";
852
+ if (config.activeTab && !_this.stayActiveTab) {
853
+ _this.activeTab = config.activeTab;
854
+ }
855
+ /** @type {?} */
856
+ var tabId = config.tabId || 1;
857
+ /** @type {?} */
858
+ var tabLabel = config.tabLabel || "Tab 1";
859
+ /** @type {?} */
860
+ var displayLabel = config.tabLabel || txt + " 1";
861
+ if (config.tabLabel && config.tabLabel.startsWith("Tab")) {
862
+ displayLabel = txt + config.tabLabel.slice(3);
863
+ }
864
+ if (!tabMap[tabId]) {
865
+ _this.tabList.push({
866
+ id: tabId,
867
+ label: tabLabel,
868
+ displayLabel: tabLabel
869
+ ? _this.truncateText(displayLabel)
870
+ : (_this.translation.TAB || "Tab") + " 1",
871
+ });
872
+ tabMap[tabId] = true;
873
+ }
874
+ // if (!this.activeTabId) {
875
+ // this.activeTab = tabId;
876
+ // this.activeTabId = tabId;
877
+ // this.activeTabLabel = tabLabel;
878
+ // }
879
+ }
880
+ }));
881
+ if (!this.tabList.length) {
882
+ this.tabList = [
883
+ {
884
+ id: 1,
885
+ label: "Tab 1",
886
+ displayLabel: (this.translation.TAB || "Tab") + " 1",
887
+ },
888
+ ];
889
+ this.activeTabId = 1;
890
+ this.activeTabLabel = "Tab 1";
891
+ }
892
+ this.tabList = this.tabList.sort((/**
893
+ * @param {?} a
894
+ * @param {?} b
895
+ * @return {?}
896
+ */
897
+ function (a, b) { return a.id - b.id; }));
898
+ /** @type {?} */
899
+ var activeTab = this.tabList.find((/**
900
+ * @param {?} i
901
+ * @return {?}
902
+ */
903
+ function (i) { return i.id === _this.activeTab; })) || this.tabList[0];
904
+ if (activeTab.id) {
905
+ this.activeTabId = activeTab.id;
906
+ this.activeTabLabel = activeTab.label;
907
+ }
908
+ this.stayActiveTab = false;
909
+ this.setPrevId();
910
+ if (!noDetect) {
911
+ this.setActiveDashboardPortlets();
912
+ }
913
+ };
914
+ /**
915
+ * @param {?=} shouldGetFields
916
+ * @param {?=} noDetect
917
+ * @return {?}
918
+ */
919
+ PaneGroupNewComponent.prototype.initlayout = /**
920
+ * @param {?=} shouldGetFields
921
+ * @param {?=} noDetect
922
+ * @return {?}
923
+ */
924
+ function (shouldGetFields, noDetect) {
925
+ if (shouldGetFields === void 0) { shouldGetFields = false; }
926
+ if (noDetect === void 0) { noDetect = false; }
927
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
928
+ var _loop_1, this_1, _a, _b, portlet, e_1_1;
929
+ var e_1, _c;
930
+ return tslib_1.__generator(this, function (_d) {
931
+ switch (_d.label) {
932
+ case 0:
933
+ if (!shouldGetFields) {
934
+ this.initTabList(noDetect);
935
+ }
936
+ if (!(this.portlets && this.portlets.length > 0)) return [3 /*break*/, 9];
937
+ _loop_1 = function (portlet) {
938
+ var config, fields_1;
939
+ return tslib_1.__generator(this, function (_a) {
940
+ switch (_a.label) {
941
+ case 0:
942
+ config = JSON.parse(portlet.config);
943
+ if (!shouldGetFields) return [3 /*break*/, 2];
944
+ // GetSchema配置的列数据源
945
+ return [4 /*yield*/, this_1.getAllFields(portlet)];
946
+ case 1:
947
+ fields_1 = _a.sent();
948
+ // 每个portlet自定义的数据
949
+ config.fields.forEach((/**
950
+ * @param {?} field
951
+ * @return {?}
952
+ */
953
+ function (field) {
954
+ if (field.format) {
955
+ fields_1.forEach((/**
956
+ * @param {?} _f
957
+ * @return {?}
958
+ */
959
+ function (_f) {
960
+ if (_f.colName === field.colName) {
961
+ _f.format = field.format;
962
+ }
963
+ }));
964
+ }
965
+ /** @type {?} */
966
+ var item = fields_1.find((/**
967
+ * @param {?} _f
968
+ * @return {?}
969
+ */
970
+ function (_f) { return _f.colName === field.colName; }));
971
+ if (!item) {
972
+ fields_1.push(field);
973
+ }
974
+ }));
975
+ if (config.portletType === "pivot") {
976
+ // @ts-ignore
977
+ config.fields = fields_1;
978
+ portlet.config = CircularJSON.stringify(config);
979
+ }
980
+ _a.label = 2;
981
+ case 2:
982
+ portlet.newId = "portlet_" + this_1.pbf.Guid();
983
+ portlet.col = portlet.posX;
984
+ portlet.row = portlet.posY;
985
+ portlet.sizeX = portlet.width;
986
+ portlet.sizeY = portlet.height;
987
+ return [2 /*return*/];
988
+ }
989
+ });
990
+ };
991
+ this_1 = this;
992
+ _d.label = 1;
993
+ case 1:
994
+ _d.trys.push([1, 6, 7, 8]);
995
+ _a = tslib_1.__values(this.portlets), _b = _a.next();
996
+ _d.label = 2;
997
+ case 2:
998
+ if (!!_b.done) return [3 /*break*/, 5];
999
+ portlet = _b.value;
1000
+ return [5 /*yield**/, _loop_1(portlet)];
1001
+ case 3:
1002
+ _d.sent();
1003
+ _d.label = 4;
1004
+ case 4:
1005
+ _b = _a.next();
1006
+ return [3 /*break*/, 2];
1007
+ case 5: return [3 /*break*/, 8];
1008
+ case 6:
1009
+ e_1_1 = _d.sent();
1010
+ e_1 = { error: e_1_1 };
1011
+ return [3 /*break*/, 8];
1012
+ case 7:
1013
+ try {
1014
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
1015
+ }
1016
+ finally { if (e_1) throw e_1.error; }
1017
+ return [7 /*endfinally*/];
1018
+ case 8:
1019
+ this.initCharData(noDetect);
1020
+ this.setActiveDashboardPortlets(noDetect);
1021
+ return [3 /*break*/, 10];
1022
+ case 9:
1023
+ this.ActiveDashboardPortlets = [];
1024
+ this.dashboardLayout.removeAll();
1025
+ _d.label = 10;
1026
+ case 10: return [2 /*return*/];
1027
+ }
1028
+ });
1029
+ });
1030
+ };
1031
+ /**
1032
+ * @return {?}
1033
+ */
1034
+ PaneGroupNewComponent.prototype.ngAfterViewInit = /**
1035
+ * @return {?}
1036
+ */
1037
+ function () {
1038
+ var _this = this;
1039
+ this.subscriptions.push(this.pbf.getTriggerDashboardFilterChange().subscribe((/**
1040
+ * @param {?} e
1041
+ * @return {?}
1042
+ */
1043
+ function (e) {
1044
+ /** @type {?} */
1045
+ var dashboarId = e["id"];
1046
+ /** @type {?} */
1047
+ var newId = e["newId"];
1048
+ if (dashboarId !== _this.dashboard.id) {
1049
+ return;
1050
+ }
1051
+ _this.filterData(newId);
1052
+ })));
1053
+ this.subscriptions.push(this.dashboardService
1054
+ .getchangelayout()
1055
+ .subscribe((/**
1056
+ * @param {?} __0
1057
+ * @return {?}
1058
+ */
1059
+ function (_a) {
1060
+ var status = _a.status, _b = _a.id, id = _b === void 0 ? "" : _b;
1061
+ if (_this.dashboard && _this.dashboard.id === id) {
1062
+ /** @type {?} */
1063
+ var params = status === "true" ? false : true;
1064
+ _this.initlayout(params);
1065
+ }
1066
+ })));
1067
+ this.subscriptions.push(this.dashboardService.editProperties().subscribe((/**
1068
+ * @param {?} __0
1069
+ * @return {?}
1070
+ */
1071
+ function (_a) {
1072
+ var status = _a.status, id = _a.id;
1073
+ if (!_this.dashboard || _this.dashboard.id !== id || _this.timer) {
1074
+ return;
1075
+ }
1076
+ _this.timer = setTimeout((/**
1077
+ * @return {?}
1078
+ */
1079
+ function () {
1080
+ _this.timer = null;
1081
+ }), 200);
1082
+ _this.dialog.closeAll();
1083
+ _this.dialog
1084
+ .open(DataMartNewComponent, {
1085
+ data: {
1086
+ edit: status,
1087
+ dashboardId: _this.url_id,
1088
+ dashboard: _this.dashboard,
1089
+ },
1090
+ height: "85%",
1091
+ width: "55%",
1092
+ disableClose: true,
1093
+ panelClass: "report-dialog",
1094
+ })
1095
+ .afterClosed()
1096
+ .subscribe((/**
1097
+ * @param {?} e
1098
+ * @return {?}
1099
+ */
1100
+ function (e) {
1101
+ if (!e) {
1102
+ return;
1103
+ }
1104
+ var push_btn = e.push_btn, portlet = e.portlet, dashboard = e.dashboard;
1105
+ _this.dashboard = cloneDeep(dashboard);
1106
+ _this.portlet = cloneDeep(portlet);
1107
+ _this.push_btn = push_btn;
1108
+ _this.dashboardService.updateDatamartEntity.next(_this.dashboard);
1109
+ _this.ref.markForCheck();
1110
+ _this.ref.detectChanges();
1111
+ }));
1112
+ })));
1113
+ this.subscriptions.push(this.dashboardService.getDownloadDashbord().subscribe((/**
1114
+ * @param {?} id
1115
+ * @return {?}
1116
+ */
1117
+ function (id) {
1118
+ var e_2, _a;
1119
+ if (_this.dashboard && _this.dashboard.id === id) {
1120
+ try {
1121
+ // this.downloadAll();
1122
+ for (var _b = tslib_1.__values(_this.ActiveDashboardPortlets), _c = _b.next(); !_c.done; _c = _b.next()) {
1123
+ var item = _c.value;
1124
+ _this.download(item);
1125
+ }
1126
+ }
1127
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
1128
+ finally {
1129
+ try {
1130
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1131
+ }
1132
+ finally { if (e_2) throw e_2.error; }
1133
+ }
1134
+ }
1135
+ })));
1136
+ this.subscriptions.push(this.dashboardService.getaddportlet().subscribe((/**
1137
+ * @param {?} id
1138
+ * @return {?}
1139
+ */
1140
+ function (id) {
1141
+ if (_this.dashboard && _this.dashboard.id === id) {
1142
+ if (_this.portlet) {
1143
+ _this.portlets.push(_this.portlet);
1144
+ }
1145
+ /** @type {?} */
1146
+ var config = _this.portlet.config instanceof String
1147
+ ? JSON.parse(_this.portlet.config)
1148
+ : _this.portlet.config;
1149
+ if (typeof config === "string") {
1150
+ config = JSON.parse(config);
1151
+ }
1152
+ /** @type {?} */
1153
+ var portletType = config.portletType === "historicalIRR"
1154
+ ? config.selectedVisualType
1155
+ : config.portletType;
1156
+ // 只有新增的Porlet是图表类才需要初始化
1157
+ if (_this.portlet &&
1158
+ _this.portlet.config &&
1159
+ ["newcolumn", "newline", "newcolumnline"].includes(portletType)) {
1160
+ _this.initCharData(); // 拼接Chart需要用的数据源
1161
+ }
1162
+ _this.getNewPosition();
1163
+ _this.setActiveDashboardPortlets();
1164
+ }
1165
+ })));
1166
+ this.subscriptions.push(this.dashboardService.getLeftMenuBar().subscribe((/**
1167
+ * @param {?} open
1168
+ * @return {?}
1169
+ */
1170
+ function (open) {
1171
+ /** @type {?} */
1172
+ var width = _this.panesList.nativeElement.offsetWidth;
1173
+ if (open) {
1174
+ _this.panesList.nativeElement.style.width = width - 195 + "px";
1175
+ }
1176
+ else {
1177
+ _this.panesList.nativeElement.style.width = width + 195 + "px";
1178
+ }
1179
+ })));
1180
+ };
1181
+ /**
1182
+ * @private
1183
+ * @param {?} id
1184
+ * @return {?}
1185
+ */
1186
+ PaneGroupNewComponent.prototype.filterData = /**
1187
+ * @private
1188
+ * @param {?} id
1189
+ * @return {?}
1190
+ */
1191
+ function (id) {
1192
+ this.chartUpdate(id);
1193
+ };
1194
+ /**
1195
+ * @param {?=} id
1196
+ * @return {?}
1197
+ */
1198
+ PaneGroupNewComponent.prototype.chartUpdate = /**
1199
+ * @param {?=} id
1200
+ * @return {?}
1201
+ */
1202
+ function (id) {
1203
+ this.hasChangeDataTable = true;
1204
+ if (id) {
1205
+ this.dashboardService.chartUpdate.next(id);
1206
+ }
1207
+ this.initCharData(); // 拼接Chart需要用的数据源
1208
+ };
1209
+ /**
1210
+ * @return {?}
1211
+ */
1212
+ PaneGroupNewComponent.prototype.ngOnDestroy = /**
1213
+ * @return {?}
1214
+ */
1215
+ function () {
1216
+ this.subscriptions.forEach((/**
1217
+ * @param {?} sub
1218
+ * @return {?}
1219
+ */
1220
+ function (sub) {
1221
+ sub.unsubscribe();
1222
+ }));
1223
+ };
1224
+ /**
1225
+ * @private
1226
+ * @return {?}
1227
+ */
1228
+ PaneGroupNewComponent.prototype.getInfo = /**
1229
+ * @private
1230
+ * @return {?}
1231
+ */
1232
+ function () {
1233
+ this.translation = JSON.parse(localStorage.getItem("translation"));
1234
+ this.lang = this.pbf.getLanguageParams();
1235
+ this.datePipeFormat = localStorage.getItem("datePipe");
1236
+ };
1237
+ /**
1238
+ * @param {?} portlet
1239
+ * @return {?}
1240
+ */
1241
+ PaneGroupNewComponent.prototype.getPorletConfig = /**
1242
+ * @param {?} portlet
1243
+ * @return {?}
1244
+ */
1245
+ function (portlet) {
1246
+ if (!portlet.config) {
1247
+ return;
1248
+ }
1249
+ /** @type {?} */
1250
+ var config = JSON.parse(portlet.config);
1251
+ if (!config.pvtableChartSetting) {
1252
+ return;
1253
+ }
1254
+ this.showLegend =
1255
+ !!config.pvtableChartSetting.chartSettings.legendSettings.visible;
1256
+ this.enableMultipleAxis =
1257
+ config.pvtableChartSetting.chartSettings.enableMultipleAxis;
1258
+ this.ref.markForCheck();
1259
+ this.ref.detectChanges();
1260
+ };
1261
+ /**
1262
+ * @param {?} e
1263
+ * @return {?}
1264
+ */
1265
+ PaneGroupNewComponent.prototype.updateTheme = /**
1266
+ * @param {?} e
1267
+ * @return {?}
1268
+ */
1269
+ function (e) {
1270
+ var selectedX = e.selectedX, selectedY = e.selectedY, selectedSecondY = e.selectedSecondY, selectedMultiples = e.selectedMultiples, selectTheme = e.selectTheme;
1271
+ this.selectedX = selectedX;
1272
+ this.selectedY = selectedY;
1273
+ this.selectedSecondY = selectedSecondY;
1274
+ this.selectedMultiples = selectedMultiples;
1275
+ this.selectTheme = selectTheme;
1276
+ };
1277
+ /**
1278
+ * @param {?} e
1279
+ * @return {?}
1280
+ */
1281
+ PaneGroupNewComponent.prototype.updateDashboard = /**
1282
+ * @param {?} e
1283
+ * @return {?}
1284
+ */
1285
+ function (e) {
1286
+ var _this = this;
1287
+ var portlets = e.portlets, dashboard = e.dashboard, noDetect = e.noDetect, stayActiveTab = e.stayActiveTab;
1288
+ this.stayActiveTab = stayActiveTab;
1289
+ this.dashboard = cloneDeep(dashboard);
1290
+ this.portlets = tslib_1.__spread(portlets);
1291
+ if (!noDetect) {
1292
+ this.ref.markForCheck();
1293
+ }
1294
+ setTimeout((/**
1295
+ * @return {?}
1296
+ */
1297
+ function () {
1298
+ _this.dashboardService.updateDatamartEntity.next(dashboard);
1299
+ }));
1300
+ };
1301
+ /**
1302
+ * @param {?} e
1303
+ * @return {?}
1304
+ */
1305
+ PaneGroupNewComponent.prototype.updatePorletConfig = /**
1306
+ * @param {?} e
1307
+ * @return {?}
1308
+ */
1309
+ function (e) {
1310
+ var _this = this;
1311
+ var newId = e.newId, config = e.config;
1312
+ /** @type {?} */
1313
+ var _config = Object.assign({}, config);
1314
+ this.portlet.config = CircularJSON.stringify(_config);
1315
+ this.portlets.forEach((/**
1316
+ * @param {?} portlet
1317
+ * @param {?} i
1318
+ * @return {?}
1319
+ */
1320
+ function (portlet, i) {
1321
+ if (portlet.newId === newId) {
1322
+ _this.portlets[i].config = CircularJSON.stringify(_config);
1323
+ }
1324
+ }));
1325
+ this.portlets = tslib_1.__spread(this.portlets);
1326
+ this.setActiveDashboardPortlets();
1327
+ };
1328
+ /**
1329
+ * @param {?} item
1330
+ * @return {?}
1331
+ */
1332
+ PaneGroupNewComponent.prototype.edit = /**
1333
+ * @param {?} item
1334
+ * @return {?}
1335
+ */
1336
+ function (item) {
1337
+ /** @type {?} */
1338
+ var config = JSON.parse(item.config);
1339
+ /** @type {?} */
1340
+ var portletType = config.portletType === "historicalIRR"
1341
+ ? config.selectedVisualType
1342
+ : config.portletType;
1343
+ if (["newcolumn", "newline", "newcolumnline"].includes(portletType)) {
1344
+ this.selectedY = config["selectedY"];
1345
+ this.selectedSecondY = config.selectedSecondY;
1346
+ this.selectedX = config["selectedX"];
1347
+ this.selectedMultiples = config["selectedMultiples"];
1348
+ this.selectTheme = config["selectTheme"];
1349
+ }
1350
+ this.portlet = cloneDeep(item);
1351
+ if (this.push_btn) {
1352
+ this.sidebar.portlet = this.portlet;
1353
+ }
1354
+ this.dashboard_sidebar = true;
1355
+ this.push_btn = true;
1356
+ this.figureCode = item.figureCode;
1357
+ this.tabactive = false;
1358
+ this.ref.detectChanges();
1359
+ this.dashboardService.portletEdit.next(this.url_id);
1360
+ };
1361
+ /**
1362
+ * @param {?} config
1363
+ * @return {?}
1364
+ */
1365
+ PaneGroupNewComponent.prototype.GetgadgetTitle = /**
1366
+ * @param {?} config
1367
+ * @return {?}
1368
+ */
1369
+ function (config) {
1370
+ if (config && config !== "null") {
1371
+ /** @type {?} */
1372
+ var config_ = JSON.parse(config);
1373
+ return config_.gadgetTitle;
1374
+ }
1375
+ else {
1376
+ return "";
1377
+ }
1378
+ };
1379
+ /**
1380
+ * @param {?} item
1381
+ * @return {?}
1382
+ */
1383
+ PaneGroupNewComponent.prototype.getPortletType = /**
1384
+ * @param {?} item
1385
+ * @return {?}
1386
+ */
1387
+ function (item) {
1388
+ /** @type {?} */
1389
+ var config = item && item.config ? JSON.parse(item.config) : {};
1390
+ if (config.portletType) {
1391
+ if (config.portletType === "historicalIRR") {
1392
+ return config.selectedVisualType;
1393
+ }
1394
+ return config.portletType;
1395
+ }
1396
+ };
1397
+ /**
1398
+ * @param {?} item
1399
+ * @return {?}
1400
+ */
1401
+ PaneGroupNewComponent.prototype.delete = /**
1402
+ * @param {?} item
1403
+ * @return {?}
1404
+ */
1405
+ function (item) {
1406
+ /** @type {?} */
1407
+ var index = this.portlets.findIndex((/**
1408
+ * @param {?} x
1409
+ * @return {?}
1410
+ */
1411
+ function (x) { return x.newId === item.newId; }));
1412
+ this.dashboardLayout.removePanel(item.newId);
1413
+ this.portlets.splice(index, 1);
1414
+ this.setActiveDashboardPortlets();
1415
+ this.getNewPosition();
1416
+ };
1417
+ /**
1418
+ * @param {?} item
1419
+ * @return {?}
1420
+ */
1421
+ PaneGroupNewComponent.prototype.copyPortlet = /**
1422
+ * @param {?} item
1423
+ * @return {?}
1424
+ */
1425
+ function (item) {
1426
+ /** @type {?} */
1427
+ var portlet = tslib_1.__assign({}, item);
1428
+ portlet.id = "00000000-0000-0000-0000-000000000000";
1429
+ portlet.newId = "portlet_" + this.pbf.Guid();
1430
+ // 处理 1.复制别的复制体 2.新建的个体 3.已存在的个体
1431
+ portlet.copyId = portlet.copyId
1432
+ ? portlet.copyId
1433
+ : item.id === "00000000-0000-0000-0000-000000000000"
1434
+ ? item.newId
1435
+ : item.id;
1436
+ this.DashboardPorletsService.portletData_New[this.dashboard.id][portlet.newId] = cloneDeep(this.DashboardPorletsService.portletData_New[this.dashboard.id][portlet.copyId]);
1437
+ this.portlets.push(portlet);
1438
+ this.setActiveDashboardPortlets();
1439
+ this.getNewPosition();
1440
+ };
1441
+ /**
1442
+ * @param {?} item
1443
+ * @return {?}
1444
+ */
1445
+ PaneGroupNewComponent.prototype.getAsofdate = /**
1446
+ * @param {?} item
1447
+ * @return {?}
1448
+ */
1449
+ function (item) {
1450
+ return JSON.parse(item.config).asOfDate;
1451
+ };
1452
+ /**
1453
+ * @param {?} config
1454
+ * @return {?}
1455
+ */
1456
+ PaneGroupNewComponent.prototype.getCurrency = /**
1457
+ * @param {?} config
1458
+ * @return {?}
1459
+ */
1460
+ function (config) {
1461
+ return JSON.parse(config).currencyCode;
1462
+ };
1463
+ /**
1464
+ * @param {?} figureCode
1465
+ * @return {?}
1466
+ */
1467
+ PaneGroupNewComponent.prototype.getFigurecode = /**
1468
+ * @param {?} figureCode
1469
+ * @return {?}
1470
+ */
1471
+ function (figureCode) {
1472
+ switch (figureCode) {
1473
+ case "Tasks":
1474
+ return 1;
1475
+ case "FundList":
1476
+ return 2;
1477
+ case "IRR":
1478
+ return 3;
1479
+ case "Notes":
1480
+ return 4;
1481
+ default:
1482
+ return 0;
1483
+ }
1484
+ };
1485
+ /**
1486
+ * @param {?} item
1487
+ * @return {?}
1488
+ */
1489
+ PaneGroupNewComponent.prototype.getTableName = /**
1490
+ * @param {?} item
1491
+ * @return {?}
1492
+ */
1493
+ function (item) {
1494
+ /** @type {?} */
1495
+ var config = item.config ? JSON.parse(item.config) : {};
1496
+ if (config.portletType) {
1497
+ /** @type {?} */
1498
+ var typeList = ["table", "financialTable", "transpose", "pivot"];
1499
+ /** @type {?} */
1500
+ var idx = typeList.indexOf(config.portletType);
1501
+ return idx > -1 ? true : false;
1502
+ }
1503
+ };
1504
+ /**
1505
+ * @return {?}
1506
+ */
1507
+ PaneGroupNewComponent.prototype.pushSlider = /**
1508
+ * @return {?}
1509
+ */
1510
+ function () {
1511
+ this.push_btn = !this.push_btn;
1512
+ };
1513
+ /**
1514
+ * @private
1515
+ * @param {?} figureCode
1516
+ * @return {?}
1517
+ */
1518
+ PaneGroupNewComponent.prototype.getFigureCode = /**
1519
+ * @private
1520
+ * @param {?} figureCode
1521
+ * @return {?}
1522
+ */
1523
+ function (figureCode) {
1524
+ /** @type {?} */
1525
+ var codeArr = ["Tasks", "FundList", "IRR", "Notes"];
1526
+ /** @type {?} */
1527
+ var i = codeArr.indexOf(figureCode);
1528
+ return i > -1 ? true : false;
1529
+ };
1530
+ /**
1531
+ * @return {?}
1532
+ */
1533
+ PaneGroupNewComponent.prototype.getDashboard = /**
1534
+ * @return {?}
1535
+ */
1536
+ function () {
1537
+ var _this = this;
1538
+ this.url = "dashboardDetail";
1539
+ /** @type {?} */
1540
+ var url_arr = this.pbf.getRouterUrl().split("?");
1541
+ this.url_id = this.pbf.getUrlId(url_arr[0]);
1542
+ this.url_type =
1543
+ url_arr[1] == "dashboardType=customizedBeta"
1544
+ ? "customizedBeta"
1545
+ : url_arr[1] == "dashboardType=sharedBeta"
1546
+ ? "sharedBeta"
1547
+ : "";
1548
+ this.DashboardPorletsService.GetDashboardV1(this.url_id, true, (/**
1549
+ * @param {?} res
1550
+ * @param {?=} portlets
1551
+ * @return {?}
1552
+ */
1553
+ function (res, portlets) {
1554
+ if (portlets === void 0) { portlets = []; }
1555
+ _this.hasInit = true;
1556
+ if (!res) {
1557
+ _this.pbf.pageLoading = false;
1558
+ _this.pbf.pageLoading_.next(true);
1559
+ return;
1560
+ }
1561
+ _this.portlets = tslib_1.__spread(portlets);
1562
+ _this.initlayout(false, true);
1563
+ setTimeout((/**
1564
+ * @return {?}
1565
+ */
1566
+ function () {
1567
+ _this.dashboardService.updateDatamartEntity.next(_this.dashboard);
1568
+ // this.chartUpdate();
1569
+ _this.pbf.pageLoading = false;
1570
+ _this.pbf.pageLoading_.next(true);
1571
+ }), 500);
1572
+ }), false, (/**
1573
+ * @param {?} res
1574
+ * @return {?}
1575
+ */
1576
+ function (res) {
1577
+ _this.dashboard = Object.assign({}, res);
1578
+ if (_this.dashboardLayout) {
1579
+ _this.dashboardLayout.refresh();
1580
+ }
1581
+ _this.ref.markForCheck();
1582
+ _this.ref.detectChanges();
1583
+ }));
1584
+ };
1585
+ /**
1586
+ * @return {?}
1587
+ */
1588
+ PaneGroupNewComponent.prototype.routerPage = /**
1589
+ * @return {?}
1590
+ */
1591
+ function () {
1592
+ this.router.navigateByUrl("/pages/dashboard/dashboardlist");
1593
+ };
1594
+ /**
1595
+ * @param {?} item
1596
+ * @return {?}
1597
+ */
1598
+ PaneGroupNewComponent.prototype.displayIconPrompt = /**
1599
+ * @param {?} item
1600
+ * @return {?}
1601
+ */
1602
+ function (item) {
1603
+ return JSON.parse(item.config).portletType ||
1604
+ this.getFigureCode(item.figureCode)
1605
+ ? false
1606
+ : true;
1607
+ };
1608
+ /**
1609
+ * @param {?} item
1610
+ * @param {?} event
1611
+ * @return {?}
1612
+ */
1613
+ PaneGroupNewComponent.prototype.configurations = /**
1614
+ * @param {?} item
1615
+ * @param {?} event
1616
+ * @return {?}
1617
+ */
1618
+ function (item, event) {
1619
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
1620
+ var portletType, table, _y, y, pivot, transpose;
1621
+ return tslib_1.__generator(this, function (_a) {
1622
+ portletType = this.getPortletType(item);
1623
+ switch (portletType) {
1624
+ case "table":
1625
+ table = find(((/** @type {?} */ (this.table)))._results, (/**
1626
+ * @param {?} el
1627
+ * @return {?}
1628
+ */
1629
+ function (el) { return el.portlet.newId === item.newId; }));
1630
+ if (table.grid &&
1631
+ table.grid.getCurrentViewRecords() &&
1632
+ table.grid.getCurrentViewRecords().length) {
1633
+ // let mask: any = document.querySelector("#pivot-table-mask");
1634
+ // if (mask) mask.style.display = "block";
1635
+ _y = 0;
1636
+ if (event && event.target) {
1637
+ y = event.target.getBoundingClientRect().y;
1638
+ if (document.body.clientHeight - y < 400) {
1639
+ _y = -415;
1640
+ }
1641
+ }
1642
+ table.grid &&
1643
+ table.grid.columnChooserModule &&
1644
+ table.grid.columnChooserModule.openColumnChooser(200, _y);
1645
+ }
1646
+ break;
1647
+ case "newchart":
1648
+ case "pivot":
1649
+ pivot = find(((/** @type {?} */ (this.pivot)))._results, (/**
1650
+ * @param {?} el
1651
+ * @return {?}
1652
+ */
1653
+ function (el) { return el.portlet.newId === item.newId; }));
1654
+ if (pivot.fieldlistObj.dialogRenderer &&
1655
+ pivot.fieldlistObj.dialogRenderer.fieldListDialog) {
1656
+ pivot.fieldlistObj.dialogRenderer.fieldListDialog.show();
1657
+ }
1658
+ break;
1659
+ case "transpose":
1660
+ transpose = find(((/** @type {?} */ (this.transpose)))._results, (/**
1661
+ * @param {?} el
1662
+ * @return {?}
1663
+ */
1664
+ function (el) { return el.portlet.newId === item.newId; }));
1665
+ // 开启适配 手动缩小
1666
+ transpose.grid.columnChooserModule.showCustomColumnChooser();
1667
+ setTimeout((/**
1668
+ * @return {?}
1669
+ */
1670
+ function () {
1671
+ /** @type {?} */
1672
+ var dlg = document.querySelector(".e-rescolumnchooserdiv.e-responsive-dialog");
1673
+ if (dlg) {
1674
+ dlg.style.opacity = 1;
1675
+ dlg.style.setProperty("width", "300px", "important");
1676
+ dlg.style.setProperty("height", "350px", "important");
1677
+ dlg.style.setProperty("position", "absolute", "important");
1678
+ dlg.style.setProperty("left", event.clientX - 135 + "px", "important");
1679
+ dlg.style.setProperty("top", event.clientY + 30 + "px", "important");
1680
+ }
1681
+ }), 0);
1682
+ break;
1683
+ }
1684
+ return [2 /*return*/];
1685
+ });
1686
+ });
1687
+ };
1688
+ /**
1689
+ * @private
1690
+ * @return {?}
1691
+ */
1692
+ PaneGroupNewComponent.prototype.setPrevId = /**
1693
+ * @private
1694
+ * @return {?}
1695
+ */
1696
+ function () {
1697
+ var _this = this;
1698
+ this.tabList.forEach((/**
1699
+ * @param {?} tab
1700
+ * @param {?} i
1701
+ * @return {?}
1702
+ */
1703
+ function (tab, i) {
1704
+ if (tab.id === _this.activeTab) {
1705
+ if (_this.tabList[i - 1]) {
1706
+ _this.prevId = _this.tabList[i - 1].id;
1707
+ }
1708
+ }
1709
+ }));
1710
+ };
1711
+ /**
1712
+ * @param {?} e
1713
+ * @return {?}
1714
+ */
1715
+ PaneGroupNewComponent.prototype.drop = /**
1716
+ * @param {?} e
1717
+ * @return {?}
1718
+ */
1719
+ function (e) {
1720
+ var _a;
1721
+ var previousIndex = e.previousIndex, currentIndex = e.currentIndex;
1722
+ /** @type {?} */
1723
+ var prevId = this.tabList[previousIndex].id;
1724
+ /** @type {?} */
1725
+ var currId = this.tabList[currentIndex].id;
1726
+ for (var i = this.tabList.length - 1; i >= 0; i--) {
1727
+ /** @type {?} */
1728
+ var tabId = this.tabList[i].id;
1729
+ if (tabId === prevId) {
1730
+ this.tabList[i].id = currId;
1731
+ }
1732
+ if (tabId === currId) {
1733
+ this.tabList[i].id = prevId;
1734
+ }
1735
+ }
1736
+ for (var i = this.portlets.length - 1; i >= 0; i--) {
1737
+ /** @type {?} */
1738
+ var config = JSON.parse(this.portlets[i].config);
1739
+ /** @type {?} */
1740
+ var tabId = config.tabId;
1741
+ if (tabId === prevId) {
1742
+ config.tabId = currId;
1743
+ this.portlets[i].config = JSON.stringify(config);
1744
+ }
1745
+ if (tabId === currId) {
1746
+ config.tabId = prevId;
1747
+ this.portlets[i].config = JSON.stringify(config);
1748
+ }
1749
+ }
1750
+ if (this.activeTab === currId) {
1751
+ this.activeTab = prevId;
1752
+ }
1753
+ else if (this.activeTab === prevId) {
1754
+ this.activeTab = currId;
1755
+ }
1756
+ this.setPrevId();
1757
+ _a = tslib_1.__read([
1758
+ this.tabList[currentIndex],
1759
+ this.tabList[previousIndex],
1760
+ ], 2), this.tabList[previousIndex] = _a[0], this.tabList[currentIndex] = _a[1];
1761
+ this.tabList = tslib_1.__spread(this.tabList);
1762
+ this.ref.markForCheck();
1763
+ };
1764
+ /**
1765
+ * @return {?}
1766
+ */
1767
+ PaneGroupNewComponent.prototype.closeAll = /**
1768
+ * @return {?}
1769
+ */
1770
+ function () {
1771
+ var _this = this;
1772
+ this.pbf.pageLoading = true;
1773
+ this.pbf.pageLoading_.next(true);
1774
+ this.ref.markForCheck();
1775
+ /** @type {?} */
1776
+ var hasConfig = false;
1777
+ this.ActiveDashboardPortlets.forEach((/**
1778
+ * @param {?} portlet
1779
+ * @return {?}
1780
+ */
1781
+ function (portlet) {
1782
+ /** @type {?} */
1783
+ var portletType = _this.getPortletType(portlet);
1784
+ switch (portletType) {
1785
+ case "pivot":
1786
+ case "newchart":
1787
+ /** @type {?} */
1788
+ var dom = document.getElementById(portlet.newId + "_DeferUpdateButton2");
1789
+ if (dom) {
1790
+ hasConfig = true;
1791
+ dom.click();
1792
+ }
1793
+ break;
1794
+ case "table":
1795
+ /** @type {?} */
1796
+ var cancelBtn = document.querySelector(".e-cc-cnbtn");
1797
+ if (cancelBtn) {
1798
+ hasConfig = true;
1799
+ // @ts-ignore
1800
+ cancelBtn.click();
1801
+ }
1802
+ break;
1803
+ }
1804
+ }));
1805
+ if (hasConfig) {
1806
+ setTimeout((/**
1807
+ * @return {?}
1808
+ */
1809
+ function () {
1810
+ _this.pbf.pageLoading = false;
1811
+ _this.pbf.pageLoading_.next(true);
1812
+ _this.ref.markForCheck();
1813
+ }), 400);
1814
+ }
1815
+ else {
1816
+ this.pbf.pageLoading = false;
1817
+ this.pbf.pageLoading_.next(true);
1818
+ }
1819
+ return hasConfig;
1820
+ };
1821
+ /**
1822
+ * @return {?}
1823
+ */
1824
+ PaneGroupNewComponent.prototype.downloadAll = /**
1825
+ * @return {?}
1826
+ */
1827
+ function () {
1828
+ /** @type {?} */
1829
+ var dialogRef = this.dialog.open(PaneDownloadComponent, {
1830
+ data: {
1831
+ portlets: this.portlets,
1832
+ dashboard: this.dashboard,
1833
+ },
1834
+ height: "850px",
1835
+ width: "562px",
1836
+ });
1837
+ dialogRef.afterClosed().subscribe((/**
1838
+ * @param {?} res
1839
+ * @return {?}
1840
+ */
1841
+ function (res) { }));
1842
+ };
1843
+ /**
1844
+ * @param {?} item
1845
+ * @return {?}
1846
+ */
1847
+ PaneGroupNewComponent.prototype.download = /**
1848
+ * @param {?} item
1849
+ * @return {?}
1850
+ */
1851
+ function (item) {
1852
+ var _this = this;
1853
+ /** @type {?} */
1854
+ var portletType = this.getPortletType(item);
1855
+ /** @type {?} */
1856
+ var title = this.GetgadgetTitle(item.config);
1857
+ switch (portletType) {
1858
+ case "table":
1859
+ this.downloadTable(item, title);
1860
+ break;
1861
+ case "newchart":
1862
+ case "pivot":
1863
+ /** @type {?} */
1864
+ var pivot = find(((/** @type {?} */ (this.pivot)))._results, (/**
1865
+ * @param {?} el
1866
+ * @return {?}
1867
+ */
1868
+ function (el) { return el.portlet.newId === item.newId; }));
1869
+ pivot.headRowSpan = 0; //重置导出header处理
1870
+ pivot.headRowCount = 0; //重置导出header处理
1871
+ //重置导出header处理
1872
+ /** @type {?} */
1873
+ var excelExportProperties_pivot = {
1874
+ fileName: title
1875
+ ? title + ".xlsx"
1876
+ : "Pivot-" + new Date().toISOString() + ".xlsx",
1877
+ };
1878
+ if (pivot.pivotObj.dataSourceSettings.formatSettings) {
1879
+ pivot.pivotObj.dataSourceSettings.formatSettings.forEach((/**
1880
+ * @param {?} setting
1881
+ * @return {?}
1882
+ */
1883
+ function (setting) {
1884
+ // syncfusion format transform to excel format
1885
+ /** @type {?} */
1886
+ var map = {
1887
+ "#,###,,.0;(#,###,,.0)": '0.0,,"";(0.0,,)',
1888
+ '0.0,,"";(0.0,,)': "#,###,,.0;(#,###,,.0)",
1889
+ "#,###,,;(#,###,,)": '0,,"";(0,,)',
1890
+ '0,,"";(0,,)': "#,###,,;(#,###,,)",
1891
+ "#,###,,.00;(#,###,,.00)": '0.00,,"";(0.00,,)',
1892
+ '0.00,,"";(0.00,,)': "#,###,,.00;(#,###,,.00)",
1893
+ };
1894
+ if (map[setting.format]) {
1895
+ setting.format = map[setting.format];
1896
+ setTimeout((/**
1897
+ * @return {?}
1898
+ */
1899
+ function () {
1900
+ setting.format = map[setting.format];
1901
+ _this.ref.markForCheck();
1902
+ _this.ref.detectChanges();
1903
+ }));
1904
+ }
1905
+ }));
1906
+ }
1907
+ this.updateFormat((/** @type {?} */ (pivot.pivotObj.grid.columns)), pivot.pivotObj);
1908
+ pivot.pivotObj.excelExport(excelExportProperties_pivot);
1909
+ break;
1910
+ // case "transpose":
1911
+ // // const transpose = find(
1912
+ // // (this.transpose as any)._results,
1913
+ // // (el) => el.portlet.newId === item.newId
1914
+ // // );
1915
+ // break;
1916
+ case "newcolumn":
1917
+ case "newline":
1918
+ case "newcolumnline":
1919
+ /** @type {?} */
1920
+ var chartIdx = this.getChartIndexInAll(item);
1921
+ /** @type {?} */
1922
+ var selectedComponent = this.newChart.toArray()[chartIdx];
1923
+ selectedComponent.exportChart();
1924
+ break;
1925
+ }
1926
+ };
1927
+ // 根据idx获取点击图表在图表列表里的真正顺序
1928
+ // 根据idx获取点击图表在图表列表里的真正顺序
1929
+ /**
1930
+ * @param {?} item
1931
+ * @return {?}
1932
+ */
1933
+ PaneGroupNewComponent.prototype.getChartIndexInAll =
1934
+ // 根据idx获取点击图表在图表列表里的真正顺序
1935
+ /**
1936
+ * @param {?} item
1937
+ * @return {?}
1938
+ */
1939
+ function (item) {
1940
+ /** @type {?} */
1941
+ var charArr = this.ActiveDashboardPortlets.filter((/**
1942
+ * @param {?} e
1943
+ * @return {?}
1944
+ */
1945
+ function (e) {
1946
+ return ["newcolumn", "newline", "newcolumnline"].includes(JSON.parse(e.config).portletType);
1947
+ }));
1948
+ /** @type {?} */
1949
+ var resultIdx = 0;
1950
+ if (charArr.length > 0) {
1951
+ charArr.forEach((/**
1952
+ * @param {?} e
1953
+ * @param {?} idx
1954
+ * @return {?}
1955
+ */
1956
+ function (e, idx) {
1957
+ if (e.newId == item.newId) {
1958
+ resultIdx = idx;
1959
+ }
1960
+ }));
1961
+ }
1962
+ return resultIdx;
1963
+ };
1964
+ /**
1965
+ * @param {?} item
1966
+ * @param {?} title
1967
+ * @return {?}
1968
+ */
1969
+ PaneGroupNewComponent.prototype.downloadTable = /**
1970
+ * @param {?} item
1971
+ * @param {?} title
1972
+ * @return {?}
1973
+ */
1974
+ function (item, title) {
1975
+ var _this = this;
1976
+ // Table 下载全部数据
1977
+ /** @type {?} */
1978
+ var config = JSON.parse(item.config);
1979
+ /** @type {?} */
1980
+ var pageSetting = Object.assign({
1981
+ currentPage: 1,
1982
+ pageSize: 9999999,
1983
+ }, config && config.tableSortSetting);
1984
+ /** @type {?} */
1985
+ var params = this.DashboardPorletsService.getParamsByPortlet(item, pageSetting, null, this.dashboard);
1986
+ // json buffer
1987
+ this.httpClient
1988
+ .post(this.api.baseurl + this.api.urlList.GetPortletDataV2, params)
1989
+ .subscribe((/**
1990
+ * @param {?} result
1991
+ * @return {?}
1992
+ */
1993
+ function (result) {
1994
+ if (result) {
1995
+ /** @type {?} */
1996
+ var table = find(((/** @type {?} */ (_this.table)))._results, (/**
1997
+ * @param {?} el
1998
+ * @return {?}
1999
+ */
2000
+ function (el) { return el.portlet.newId === item.newId; }));
2001
+ /** @type {?} */
2002
+ var excelExportProperties = {
2003
+ fileName: title
2004
+ ? title + ".xlsx"
2005
+ : "Table-" + new Date().toISOString() + ".xlsx",
2006
+ // @ts-ignore
2007
+ dataSource: result.data,
2008
+ };
2009
+ if (table) {
2010
+ table.grid.excelExport(excelExportProperties);
2011
+ }
2012
+ }
2013
+ }), (/**
2014
+ * @param {?} response
2015
+ * @return {?}
2016
+ */
2017
+ function (response) { }), (/**
2018
+ * @return {?}
2019
+ */
2020
+ function () { }));
2021
+ };
2022
+ /**
2023
+ * @private
2024
+ * @param {?} columns
2025
+ * @param {?} pivotObj
2026
+ * @return {?}
2027
+ */
2028
+ PaneGroupNewComponent.prototype.updateFormat = /**
2029
+ * @private
2030
+ * @param {?} columns
2031
+ * @param {?} pivotObj
2032
+ * @return {?}
2033
+ */
2034
+ function (columns, pivotObj) {
2035
+ /** @type {?} */
2036
+ var fList = pivotObj.renderModule.getFormatList();
2037
+ for (var i = 0; i < columns.length; i++) {
2038
+ if (((/** @type {?} */ (columns[i]))).columns &&
2039
+ ((/** @type {?} */ (columns[i]))).columns.length > 0) {
2040
+ this.updateFormat((/** @type {?} */ (((/** @type {?} */ (columns[i]))).columns)), pivotObj);
2041
+ }
2042
+ else {
2043
+ if (columns[i].customAttributes &&
2044
+ fList[((/** @type {?} */ (columns[i].customAttributes.cell))).actualText] ===
2045
+ "N") {
2046
+ ((/** @type {?} */ (columns[i]))).format = undefined;
2047
+ }
2048
+ }
2049
+ }
2050
+ };
2051
+ /**
2052
+ * @param {?} item
2053
+ * @return {?}
2054
+ */
2055
+ PaneGroupNewComponent.prototype.fieldFormat = /**
2056
+ * @param {?} item
2057
+ * @return {?}
2058
+ */
2059
+ function (item) {
2060
+ this.portlet = cloneDeep(item);
2061
+ /** @type {?} */
2062
+ var dialogRef = this.dialog.open(FieldFormatComponent, {
2063
+ data: {
2064
+ portletData: item,
2065
+ portlets: this.portlets,
2066
+ },
2067
+ height: "850px",
2068
+ minWidth: "562px",
2069
+ autoFocus: false,
2070
+ disableClose: true,
2071
+ panelClass: "dialog-position",
2072
+ });
2073
+ dialogRef.afterClosed().subscribe((/**
2074
+ * @param {?} res
2075
+ * @return {?}
2076
+ */
2077
+ function (res) { }));
2078
+ };
2079
+ /**
2080
+ * @param {?} item
2081
+ * @return {?}
2082
+ */
2083
+ PaneGroupNewComponent.prototype.openFilter = /**
2084
+ * @param {?} item
2085
+ * @return {?}
2086
+ */
2087
+ function (item) {
2088
+ this.portlet = cloneDeep(item);
2089
+ this.dashboard_sidebar = true;
2090
+ this.push_btn = true;
2091
+ this.figureCode = item.figureCode;
2092
+ this.tabactive = true;
2093
+ this.dashboardService.portletEdit.next(this.url_id);
2094
+ };
2095
+ /**
2096
+ * @param {?} e
2097
+ * @return {?}
2098
+ */
2099
+ PaneGroupNewComponent.prototype.updatePushBtn = /**
2100
+ * @param {?} e
2101
+ * @return {?}
2102
+ */
2103
+ function (e) {
2104
+ this.push_btn = e;
2105
+ this.ref.markForCheck();
2106
+ };
2107
+ /**
2108
+ * @param {?} customized
2109
+ * @return {?}
2110
+ */
2111
+ PaneGroupNewComponent.prototype.toggleCustomize = /**
2112
+ * @param {?} customized
2113
+ * @return {?}
2114
+ */
2115
+ function (customized) {
2116
+ this.customized = customized;
2117
+ this.ref.markForCheck();
2118
+ };
2119
+ /**
2120
+ * @param {?} bool
2121
+ * @return {?}
2122
+ */
2123
+ PaneGroupNewComponent.prototype.toggleSidebar = /**
2124
+ * @param {?} bool
2125
+ * @return {?}
2126
+ */
2127
+ function (bool) {
2128
+ this.dashboard_sidebar = bool;
2129
+ this.ref.markForCheck();
2130
+ };
2131
+ /**
2132
+ * @param {?} bool
2133
+ * @return {?}
2134
+ */
2135
+ PaneGroupNewComponent.prototype.onToggleTabactive = /**
2136
+ * @param {?} bool
2137
+ * @return {?}
2138
+ */
2139
+ function (bool) {
2140
+ this.tabactive = bool;
2141
+ this.ref.markForCheck();
2142
+ };
2143
+ /**
2144
+ * @param {?} portlet
2145
+ * @return {?}
2146
+ */
2147
+ PaneGroupNewComponent.prototype.updatePorlet = /**
2148
+ * @param {?} portlet
2149
+ * @return {?}
2150
+ */
2151
+ function (portlet) {
2152
+ var _this = this;
2153
+ if (!portlet) {
2154
+ this.portlet = null;
2155
+ return;
2156
+ }
2157
+ this.portlet = cloneDeep(portlet);
2158
+ this.portlets.forEach((/**
2159
+ * @param {?} _portlet
2160
+ * @param {?} i
2161
+ * @return {?}
2162
+ */
2163
+ function (_portlet, i) {
2164
+ if (_portlet.newId === portlet.newId) {
2165
+ _this.portlets[i] = Object.assign({}, portlet);
2166
+ }
2167
+ }));
2168
+ this.portlets = tslib_1.__spread(this.portlets);
2169
+ };
2170
+ /**
2171
+ * @return {?}
2172
+ */
2173
+ PaneGroupNewComponent.prototype.addPorlet = /**
2174
+ * @return {?}
2175
+ */
2176
+ function () {
2177
+ this.push_btn = true;
2178
+ this.dashboard_sidebar = true;
2179
+ this.portlet = null;
2180
+ this.tabactive = false;
2181
+ this.dashboardService.create_btn.next(this.url_id);
2182
+ };
2183
+ /**
2184
+ * @param {?} e
2185
+ * @return {?}
2186
+ */
2187
+ PaneGroupNewComponent.prototype.closeSidebar = /**
2188
+ * @param {?} e
2189
+ * @return {?}
2190
+ */
2191
+ function (e) {
2192
+ this.dashboard_sidebar = false;
2193
+ this.ref.markForCheck();
2194
+ };
2195
+ /**
2196
+ * @param {?} args
2197
+ * @return {?}
2198
+ */
2199
+ PaneGroupNewComponent.prototype.resizeStop = /**
2200
+ * @param {?} args
2201
+ * @return {?}
2202
+ */
2203
+ function (args) {
2204
+ this.getNewPosition();
2205
+ if (args.element.querySelector(".e-grid")) {
2206
+ /** @type {?} */
2207
+ var table = find(((/** @type {?} */ (this.table)))._results, (/**
2208
+ * @param {?} el
2209
+ * @return {?}
2210
+ */
2211
+ function (el) { return el.portlet.newId === args.element.id; }));
2212
+ if (table) {
2213
+ table.grid.height = parseInt(args.element.style.height) - 80;
2214
+ table.grid.refreshColumns();
2215
+ }
2216
+ }
2217
+ if (args.element.querySelector(".e-pivotview")) {
2218
+ /** @type {?} */
2219
+ var pivot = find(((/** @type {?} */ (this.pivot)))._results, (/**
2220
+ * @param {?} el
2221
+ * @return {?}
2222
+ */
2223
+ function (el) { return el.portlet.newId === args.element.id; }));
2224
+ if (pivot) {
2225
+ pivot.pivotObj.layoutRefresh();
2226
+ }
2227
+ }
2228
+ };
2229
+ /**
2230
+ * @param {?} e
2231
+ * @return {?}
2232
+ */
2233
+ PaneGroupNewComponent.prototype.dragStop = /**
2234
+ * @param {?} e
2235
+ * @return {?}
2236
+ */
2237
+ function (e) {
2238
+ this.getNewPosition();
2239
+ };
2240
+ /**
2241
+ * @return {?}
2242
+ */
2243
+ PaneGroupNewComponent.prototype.getNewPosition = /**
2244
+ * @return {?}
2245
+ */
2246
+ function () {
2247
+ /** @type {?} */
2248
+ var pdata = this.dashboardLayout.serialize();
2249
+ this.newPosition = tslib_1.__spread(pdata);
2250
+ this.portlets.forEach((/**
2251
+ * @param {?} portlet
2252
+ * @return {?}
2253
+ */
2254
+ function (portlet) {
2255
+ pdata.forEach((/**
2256
+ * @param {?} p
2257
+ * @return {?}
2258
+ */
2259
+ function (p) {
2260
+ if (portlet.newId === p.id) {
2261
+ portlet = tslib_1.__assign({}, portlet, { posX: p.col, posY: p.row, col: p.col, row: p.row, width: p.sizeX, height: p.sizeY, sizeX: p.sizeX, sizeY: p.sizeY });
2262
+ }
2263
+ }));
2264
+ }));
2265
+ this.ref.markForCheck();
2266
+ this.ref.detectChanges();
2267
+ };
2268
+ /**
2269
+ * @param {?} item
2270
+ * @return {?}
2271
+ */
2272
+ PaneGroupNewComponent.prototype.openSubtotal = /**
2273
+ * @param {?} item
2274
+ * @return {?}
2275
+ */
2276
+ function (item) {
2277
+ this.Current_PortletId = item.newId;
2278
+ this.config = item.config ? JSON.parse(item.config) : {};
2279
+ this.pivotTableSubTotalList.map((/**
2280
+ * @param {?} el
2281
+ * @return {?}
2282
+ */
2283
+ function (el) {
2284
+ el.selected = false;
2285
+ }));
2286
+ this.getSelectTotalGroupStatus("sub");
2287
+ this.showSubTotalGroup = !this.showSubTotalGroup;
2288
+ this.showgrandTotalGroup = false;
2289
+ };
2290
+ /**
2291
+ * @param {?} item
2292
+ * @return {?}
2293
+ */
2294
+ PaneGroupNewComponent.prototype.openGrandtotal = /**
2295
+ * @param {?} item
2296
+ * @return {?}
2297
+ */
2298
+ function (item) {
2299
+ this.Current_PortletId = item.newId;
2300
+ this.config = item.config ? JSON.parse(item.config) : {};
2301
+ this.pivotTableGrandTotalList.map((/**
2302
+ * @param {?} el
2303
+ * @return {?}
2304
+ */
2305
+ function (el) {
2306
+ el.selected = false;
2307
+ }));
2308
+ if (this.getPortletType(item) === "table") {
2309
+ this.getSelectTotalGroupStatus("tableGrand");
2310
+ this.showTableGrandTotalGroup = !this.showTableGrandTotalGroup;
2311
+ }
2312
+ else {
2313
+ this.getSelectTotalGroupStatus();
2314
+ this.showgrandTotalGroup = !this.showgrandTotalGroup;
2315
+ this.showSubTotalGroup = false;
2316
+ }
2317
+ };
2318
+ /**
2319
+ * @param {?} index
2320
+ * @param {?} type
2321
+ * @param {?} item
2322
+ * @return {?}
2323
+ */
2324
+ PaneGroupNewComponent.prototype.selectTotalGroup = /**
2325
+ * @param {?} index
2326
+ * @param {?} type
2327
+ * @param {?} item
2328
+ * @return {?}
2329
+ */
2330
+ function (index, type, item) {
2331
+ var e_3, _a, e_4, _b;
2332
+ if (this.getPortletType(item) === "pivot") {
2333
+ /** @type {?} */
2334
+ var pivot = find(((/** @type {?} */ (this.pivot)))._results, (/**
2335
+ * @param {?} el
2336
+ * @return {?}
2337
+ */
2338
+ function (el) { return el.portlet.newId === item.newId; }));
2339
+ if (type === "sub") {
2340
+ this.showSubTotalGroup = false;
2341
+ this.pivotTableSubTotalList.forEach((/**
2342
+ * @param {?} subtotal
2343
+ * @return {?}
2344
+ */
2345
+ function (subtotal) {
2346
+ subtotal.selected = false;
2347
+ }));
2348
+ this.pivotTableSubTotalList[index].selected = true;
2349
+ if (pivot.pivotObj) {
2350
+ switch (index) {
2351
+ case 0:
2352
+ this.config.fields.map((/**
2353
+ * @param {?} el
2354
+ * @return {?}
2355
+ */
2356
+ function (el) {
2357
+ el.showSubTotals = true;
2358
+ }));
2359
+ pivot.pivotObj.dataSourceSettings.showSubTotals = true;
2360
+ pivot.pivotObj.dataSourceSettings.showRowSubTotals = true;
2361
+ pivot.pivotObj.dataSourceSettings.showColumnSubTotals = true;
2362
+ this.config.showSubTotals = true;
2363
+ this.config.showRowSubTotals = true;
2364
+ this.config.showColumnSubTotals = true;
2365
+ break;
2366
+ case 1:
2367
+ this.config.fields.map((/**
2368
+ * @param {?} el
2369
+ * @return {?}
2370
+ */
2371
+ function (el) {
2372
+ el.showSubTotals = false;
2373
+ }));
2374
+ pivot.pivotObj.dataSourceSettings.showSubTotals = false;
2375
+ pivot.pivotObj.dataSourceSettings.showRowSubTotals = true;
2376
+ pivot.pivotObj.dataSourceSettings.showColumnSubTotals = true;
2377
+ this.config.showSubTotals = false;
2378
+ this.config.showRowSubTotals = true;
2379
+ this.config.showColumnSubTotals = true;
2380
+ break;
2381
+ case 2:
2382
+ this.config.fields.map((/**
2383
+ * @param {?} el
2384
+ * @return {?}
2385
+ */
2386
+ function (el) {
2387
+ el.showSubTotals = false;
2388
+ }));
2389
+ var _loop_2 = function (gitem) {
2390
+ /** @type {?} */
2391
+ var field = this_2.config.fields.filter((/**
2392
+ * @param {?} fl
2393
+ * @return {?}
2394
+ */
2395
+ function (fl) { return fl.colName === gitem.name; }));
2396
+ if (field.length > 0) {
2397
+ field[0].showSubTotals = true;
2398
+ }
2399
+ };
2400
+ var this_2 = this;
2401
+ try {
2402
+ for (var _c = tslib_1.__values(this.config.xaxis.groups), _d = _c.next(); !_d.done; _d = _c.next()) {
2403
+ var gitem = _d.value;
2404
+ _loop_2(gitem);
2405
+ }
2406
+ }
2407
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
2408
+ finally {
2409
+ try {
2410
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
2411
+ }
2412
+ finally { if (e_3) throw e_3.error; }
2413
+ }
2414
+ pivot.pivotObj.dataSourceSettings.showSubTotals = true;
2415
+ pivot.pivotObj.dataSourceSettings.showRowSubTotals = true;
2416
+ pivot.pivotObj.dataSourceSettings.showColumnSubTotals = false;
2417
+ this.config.showSubTotals = true;
2418
+ this.config.showRowSubTotals = true;
2419
+ this.config.showColumnSubTotals = false;
2420
+ break;
2421
+ case 3:
2422
+ this.config.fields.map((/**
2423
+ * @param {?} el
2424
+ * @return {?}
2425
+ */
2426
+ function (el) {
2427
+ el.showSubTotals = false;
2428
+ }));
2429
+ var _loop_3 = function (item_1) {
2430
+ /** @type {?} */
2431
+ var field = this_3.config.fields.filter((/**
2432
+ * @param {?} fl
2433
+ * @return {?}
2434
+ */
2435
+ function (fl) { return fl.colName === item_1.name; }));
2436
+ if (field.length > 0) {
2437
+ field[0].showSubTotals = true;
2438
+ }
2439
+ };
2440
+ var this_3 = this;
2441
+ try {
2442
+ for (var _e = tslib_1.__values(this.config.columnGroup), _g = _e.next(); !_g.done; _g = _e.next()) {
2443
+ var item_1 = _g.value;
2444
+ _loop_3(item_1);
2445
+ }
2446
+ }
2447
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
2448
+ finally {
2449
+ try {
2450
+ if (_g && !_g.done && (_b = _e.return)) _b.call(_e);
2451
+ }
2452
+ finally { if (e_4) throw e_4.error; }
2453
+ }
2454
+ pivot.pivotObj.dataSourceSettings.showSubTotals = true;
2455
+ pivot.pivotObj.dataSourceSettings.showRowSubTotals = false;
2456
+ pivot.pivotObj.dataSourceSettings.showColumnSubTotals = true;
2457
+ this.config.showSubTotals = true;
2458
+ this.config.showRowSubTotals = false;
2459
+ this.config.showColumnSubTotals = true;
2460
+ break;
2461
+ default:
2462
+ break;
2463
+ }
2464
+ }
2465
+ }
2466
+ else {
2467
+ this.showgrandTotalGroup = false;
2468
+ this.pivotTableGrandTotalList.forEach((/**
2469
+ * @param {?} grandtotal
2470
+ * @return {?}
2471
+ */
2472
+ function (grandtotal) {
2473
+ grandtotal.selected = false;
2474
+ }));
2475
+ this.pivotTableGrandTotalList[index].selected = true;
2476
+ if (pivot.pivotObj) {
2477
+ switch (index) {
2478
+ case 0:
2479
+ pivot.pivotObj.dataSourceSettings.showGrandTotals = true;
2480
+ pivot.pivotObj.dataSourceSettings.showRowGrandTotals = true;
2481
+ pivot.pivotObj.dataSourceSettings.showColumnGrandTotals = true;
2482
+ this.config.showGrandTotals = true;
2483
+ this.config.showRowGrandTotals = true;
2484
+ this.config.showColumnGrandTotals = true;
2485
+ break;
2486
+ case 1:
2487
+ pivot.pivotObj.dataSourceSettings.showGrandTotals = false;
2488
+ pivot.pivotObj.dataSourceSettings.showRowGrandTotals = true;
2489
+ pivot.pivotObj.dataSourceSettings.showColumnGrandTotals = true;
2490
+ this.config.showGrandTotals = false;
2491
+ this.config.showRowGrandTotals = true;
2492
+ this.config.showColumnGrandTotals = true;
2493
+ break;
2494
+ case 2:
2495
+ pivot.pivotObj.dataSourceSettings.showGrandTotals = true;
2496
+ pivot.pivotObj.dataSourceSettings.showRowGrandTotals = true;
2497
+ pivot.pivotObj.dataSourceSettings.showColumnGrandTotals = false;
2498
+ this.config.showGrandTotals = true;
2499
+ this.config.showRowGrandTotals = true;
2500
+ this.config.showColumnGrandTotals = false;
2501
+ break;
2502
+ case 3:
2503
+ pivot.pivotObj.dataSourceSettings.showGrandTotals = true;
2504
+ pivot.pivotObj.dataSourceSettings.showRowGrandTotals = false;
2505
+ pivot.pivotObj.dataSourceSettings.showColumnGrandTotals = true;
2506
+ this.config.showGrandTotals = true;
2507
+ this.config.showRowGrandTotals = false;
2508
+ this.config.showColumnGrandTotals = true;
2509
+ break;
2510
+ default:
2511
+ break;
2512
+ }
2513
+ }
2514
+ }
2515
+ if (pivot.pivotObj) {
2516
+ pivot.pivotObj.render();
2517
+ item.config = CircularJSON.stringify(this.config);
2518
+ /** @type {?} */
2519
+ var portletIndex = this.portlets.findIndex((/**
2520
+ * @param {?} x
2521
+ * @return {?}
2522
+ */
2523
+ function (x) { return x.newId === item.newId; }));
2524
+ this.portlets[portletIndex] = item;
2525
+ this.dashboardService.changePivot.next(item.newId);
2526
+ }
2527
+ }
2528
+ else {
2529
+ /** @type {?} */
2530
+ var table = find(((/** @type {?} */ (this.table)))._results, (/**
2531
+ * @param {?} el
2532
+ * @return {?}
2533
+ */
2534
+ function (el) { return el.portlet.newId === item.newId; }));
2535
+ this.showTableGrandTotalGroup = false;
2536
+ this.tableGrandTotalList.forEach((/**
2537
+ * @param {?} grandtotal
2538
+ * @return {?}
2539
+ */
2540
+ function (grandtotal) {
2541
+ grandtotal.selected = false;
2542
+ }));
2543
+ this.tableGrandTotalList[index].selected = true;
2544
+ if (table) {
2545
+ switch (index) {
2546
+ case 0:
2547
+ this.config.showGrandTotals = true;
2548
+ table.grid.element
2549
+ .querySelector(".e-gridfooter")
2550
+ .classList.remove("hidesummary");
2551
+ break;
2552
+ case 1:
2553
+ this.config.showGrandTotals = false;
2554
+ table.grid.element
2555
+ .querySelector(".e-gridfooter")
2556
+ .classList.add("hidesummary");
2557
+ break;
2558
+ }
2559
+ item.config = CircularJSON.stringify(this.config);
2560
+ /** @type {?} */
2561
+ var portletIndex = this.portlets.findIndex((/**
2562
+ * @param {?} x
2563
+ * @return {?}
2564
+ */
2565
+ function (x) { return x.newId === item.newId; }));
2566
+ this.portlets[portletIndex] = item;
2567
+ }
2568
+ }
2569
+ };
2570
+ /**
2571
+ * @param {?=} type
2572
+ * @return {?}
2573
+ */
2574
+ PaneGroupNewComponent.prototype.getSelectTotalGroupStatus = /**
2575
+ * @param {?=} type
2576
+ * @return {?}
2577
+ */
2578
+ function (type) {
2579
+ if (type === "sub") {
2580
+ if (this.config.showSubTotals &&
2581
+ this.config.showRowSubTotals &&
2582
+ this.config.showColumnSubTotals) {
2583
+ this.pivotTableSubTotalList[0].selected = true;
2584
+ }
2585
+ if (!this.config.showSubTotals &&
2586
+ this.config.showRowSubTotals &&
2587
+ this.config.showColumnSubTotals) {
2588
+ this.pivotTableSubTotalList[1].selected = true;
2589
+ }
2590
+ if (this.config.showSubTotals &&
2591
+ this.config.showRowSubTotals &&
2592
+ !this.config.showColumnSubTotals) {
2593
+ this.pivotTableSubTotalList[2].selected = true;
2594
+ }
2595
+ if (this.config.showSubTotals &&
2596
+ !this.config.showRowSubTotals &&
2597
+ this.config.showColumnSubTotals) {
2598
+ this.pivotTableSubTotalList[3].selected = true;
2599
+ }
2600
+ }
2601
+ else if (type === "tableGrand") {
2602
+ if (this.config && this.config.showGrandTotals) {
2603
+ this.tableGrandTotalList[0].selected = true;
2604
+ }
2605
+ if (!this.config.showGrandTotals) {
2606
+ this.tableGrandTotalList[1].selected = true;
2607
+ }
2608
+ }
2609
+ else {
2610
+ if (this.config.showGrandTotals &&
2611
+ this.config.showRowGrandTotals &&
2612
+ this.config.showColumnGrandTotals) {
2613
+ this.pivotTableGrandTotalList[0].selected = true;
2614
+ }
2615
+ if (!this.config.showGrandTotals &&
2616
+ this.config.showRowGrandTotals &&
2617
+ this.config.showColumnGrandTotals) {
2618
+ this.pivotTableGrandTotalList[1].selected = true;
2619
+ }
2620
+ if (this.config.showGrandTotals &&
2621
+ this.config.showRowGrandTotals &&
2622
+ !this.config.showColumnGrandTotals) {
2623
+ this.pivotTableGrandTotalList[2].selected = true;
2624
+ }
2625
+ if (this.config.showGrandTotals &&
2626
+ !this.config.showRowGrandTotals &&
2627
+ this.config.showColumnGrandTotals) {
2628
+ this.pivotTableGrandTotalList[3].selected = true;
2629
+ }
2630
+ }
2631
+ };
2632
+ /**
2633
+ * @param {?=} noDetect
2634
+ * @return {?}
2635
+ */
2636
+ PaneGroupNewComponent.prototype.initCharData = /**
2637
+ * @param {?=} noDetect
2638
+ * @return {?}
2639
+ */
2640
+ function (noDetect) {
2641
+ var _this = this;
2642
+ if (noDetect === void 0) { noDetect = false; }
2643
+ if (!this.dashboard) {
2644
+ return;
2645
+ }
2646
+ /** @type {?} */
2647
+ var filesObj = {};
2648
+ for (var i in this.DashboardPorletsService.fieldsArr[this.dashboard.id]) {
2649
+ if (this.DashboardPorletsService.fieldsArr[this.dashboard.id][i]) {
2650
+ this.DashboardPorletsService.fieldsArr[this.dashboard.id][i].forEach((/**
2651
+ * @param {?} t
2652
+ * @return {?}
2653
+ */
2654
+ function (t) {
2655
+ filesObj[t.colName] = t["langCode"];
2656
+ }));
2657
+ }
2658
+ }
2659
+ this.portlets.forEach((/**
2660
+ * @param {?} e
2661
+ * @return {?}
2662
+ */
2663
+ function (e) {
2664
+ if (!e.config) {
2665
+ return;
2666
+ }
2667
+ /** @type {?} */
2668
+ var config = JSON.parse(e.config);
2669
+ // 如果是 historicalIRR,根据 visualType 进行渲染
2670
+ /** @type {?} */
2671
+ var portletType = config.portletType === "historicalIRR"
2672
+ ? config.selectedVisualType
2673
+ : config.portletType;
2674
+ /** @type {?} */
2675
+ var isNewChart = ["newcolumn", "newline", "newcolumnline"].includes(portletType);
2676
+ if (isNewChart) {
2677
+ /** @type {?} */
2678
+ var dataColumn_1 = [];
2679
+ /** @type {?} */
2680
+ var dataLine_1 = [];
2681
+ /** @type {?} */
2682
+ var yXias_1 = [];
2683
+ /** @type {?} */
2684
+ var secondYXias_1 = [];
2685
+ // const config = JSON.parse(e.config);
2686
+ if (config.selectedY && config.selectedY.length > 0) {
2687
+ yXias_1 = config.selectedY;
2688
+ }
2689
+ if (config.selectedSecondY && config.selectedSecondY.length > 0) {
2690
+ secondYXias_1 = config.selectedSecondY;
2691
+ }
2692
+ /** @type {?} */
2693
+ var dataItem = void 0;
2694
+ if (e.id && e.id != "00000000-0000-0000-0000-000000000000") {
2695
+ dataItem =
2696
+ _this.DashboardPorletsService.portletData_New[_this.dashboard.id][e.id] || [];
2697
+ }
2698
+ else if (e.newId) {
2699
+ dataItem =
2700
+ _this.DashboardPorletsService.portletData_New[_this.dashboard.id][e.newId] || [];
2701
+ }
2702
+ if (dataItem && dataItem.data && dataItem.data.length > 0) {
2703
+ /** @type {?} */
2704
+ var xAxisField_1 = config.fields.find((/**
2705
+ * @param {?} field
2706
+ * @return {?}
2707
+ */
2708
+ function (field) { return field.colName === config.selectedX; }));
2709
+ dataItem.data.forEach((/**
2710
+ * @param {?} item
2711
+ * @return {?}
2712
+ */
2713
+ function (item) {
2714
+ /** @type {?} */
2715
+ var period = xAxisField_1 && xAxisField_1.dataType === "date"
2716
+ ? _this.datePipe.transform(item[config.selectedX], "yyyy-MM-dd")
2717
+ : item[config.selectedX];
2718
+ if (portletType == "newline") {
2719
+ if (yXias_1.length > 0) {
2720
+ /** @type {?} */
2721
+ var obj_1 = { period: period };
2722
+ yXias_1.forEach((/**
2723
+ * @param {?} y
2724
+ * @return {?}
2725
+ */
2726
+ function (y) {
2727
+ obj_1[_this.translation[filesObj[y]] || y] = item[y];
2728
+ }));
2729
+ dataLine_1.push(obj_1);
2730
+ }
2731
+ }
2732
+ else {
2733
+ if (yXias_1.length > 0) {
2734
+ /** @type {?} */
2735
+ var obj_2 = { period: period };
2736
+ yXias_1.forEach((/**
2737
+ * @param {?} y
2738
+ * @return {?}
2739
+ */
2740
+ function (y) {
2741
+ obj_2[_this.translation[filesObj[y]] || y] = item[y];
2742
+ }));
2743
+ dataColumn_1.push(obj_2);
2744
+ }
2745
+ if (secondYXias_1.length > 0) {
2746
+ /** @type {?} */
2747
+ var obj_3 = { period: period };
2748
+ secondYXias_1.forEach((/**
2749
+ * @param {?} y
2750
+ * @return {?}
2751
+ */
2752
+ function (y) {
2753
+ obj_3[_this.translation[filesObj[y]] || y] = item[y];
2754
+ }));
2755
+ dataLine_1.push(obj_3);
2756
+ }
2757
+ }
2758
+ }));
2759
+ }
2760
+ // 时间排序
2761
+ if (config.selectedX == "Date") {
2762
+ dataColumn_1 && dataColumn_1.sort(_this.compareDates);
2763
+ dataLine_1 && dataLine_1.sort(_this.compareDates);
2764
+ }
2765
+ // 赋值dataColumn和dataLine对应的Type
2766
+ config.fields.forEach((/**
2767
+ * @param {?} t
2768
+ * @return {?}
2769
+ */
2770
+ function (t) {
2771
+ if (config.selectedY && config.selectedY.length > 0) {
2772
+ if (t["colName"] == config.selectedY[0]) {
2773
+ e["columnType"] = t["dataType"];
2774
+ }
2775
+ }
2776
+ if (config.selectedSecondY && config.selectedSecondY.length > 0) {
2777
+ if (t["colName"] == config.selectedSecondY[0]) {
2778
+ e["lineType"] = t["dataType"];
2779
+ }
2780
+ }
2781
+ }));
2782
+ e["dataColumn"] = dataColumn_1;
2783
+ e["dataLine"] = dataLine_1;
2784
+ if (config["selectTheme"]) {
2785
+ e["themeColor"] = _this.themeObj[config["selectTheme"]];
2786
+ }
2787
+ }
2788
+ }));
2789
+ if (!noDetect) {
2790
+ this.setActiveDashboardPortlets();
2791
+ }
2792
+ };
2793
+ /**
2794
+ * @param {?} a
2795
+ * @param {?} b
2796
+ * @return {?}
2797
+ */
2798
+ PaneGroupNewComponent.prototype.compareDates = /**
2799
+ * @param {?} a
2800
+ * @param {?} b
2801
+ * @return {?}
2802
+ */
2803
+ function (a, b) {
2804
+ /** @type {?} */
2805
+ var dateA = new Date(a.period);
2806
+ /** @type {?} */
2807
+ var dateB = new Date(b.period);
2808
+ if (dateA < dateB) {
2809
+ return -1;
2810
+ }
2811
+ else if (dateA > dateB) {
2812
+ return 1;
2813
+ }
2814
+ else {
2815
+ return 0;
2816
+ }
2817
+ };
2818
+ /**
2819
+ * @param {?} text
2820
+ * @param {?=} maxWidth
2821
+ * @param {?=} fontSize
2822
+ * @return {?}
2823
+ */
2824
+ PaneGroupNewComponent.prototype.truncateText = /**
2825
+ * @param {?} text
2826
+ * @param {?=} maxWidth
2827
+ * @param {?=} fontSize
2828
+ * @return {?}
2829
+ */
2830
+ function (text, maxWidth, fontSize) {
2831
+ if (maxWidth === void 0) { maxWidth = 70; }
2832
+ if (fontSize === void 0) { fontSize = 11; }
2833
+ // 创建一个隐形的 span 来测量文本宽度
2834
+ /** @type {?} */
2835
+ var measureSpan = document.createElement("div");
2836
+ measureSpan.style.visibility = "hidden";
2837
+ measureSpan.style.position = "absolute";
2838
+ measureSpan.style.fontSize = fontSize + "px";
2839
+ measureSpan.style.whiteSpace = "nowrap";
2840
+ measureSpan.innerText = text;
2841
+ document.body.appendChild(measureSpan);
2842
+ // 二分查找来找到最佳截断点
2843
+ /** @type {?} */
2844
+ var left = 1;
2845
+ /** @type {?} */
2846
+ var right = text.length - 1;
2847
+ /** @type {?} */
2848
+ var leftOrRight = "left";
2849
+ /** @type {?} */
2850
+ var isBigger = false;
2851
+ if (measureSpan.offsetWidth > maxWidth) {
2852
+ while (!isBigger) {
2853
+ measureSpan.innerText = text.slice(0, left) + "..." + text.slice(right);
2854
+ if (measureSpan.offsetWidth > maxWidth) {
2855
+ isBigger = true;
2856
+ }
2857
+ else {
2858
+ if (leftOrRight === "left") {
2859
+ leftOrRight = "right";
2860
+ left = left + 1;
2861
+ }
2862
+ else {
2863
+ leftOrRight = "left";
2864
+ right = right - 1;
2865
+ }
2866
+ }
2867
+ }
2868
+ }
2869
+ else {
2870
+ document.body.removeChild(measureSpan);
2871
+ return text;
2872
+ }
2873
+ // 清理并返回结果
2874
+ document.body.removeChild(measureSpan);
2875
+ return "" + text.slice(0, left - 1) + (left !== 1 ? "..." : "") + text.slice(right + 1);
2876
+ };
2877
+ /**
2878
+ * @return {?}
2879
+ */
2880
+ PaneGroupNewComponent.prototype.getPaddingBottom = /**
2881
+ * @return {?}
2882
+ */
2883
+ function () {
2884
+ /** @type {?} */
2885
+ var paddingBotto = 50;
2886
+ // 存在Title 或者 Description占位置时
2887
+ if (this.dashboard &&
2888
+ (this.dashboard.title || this.dashboard.description)) {
2889
+ /** @type {?} */
2890
+ var gap = 0;
2891
+ if (this.dashboard.title) {
2892
+ gap += 5;
2893
+ }
2894
+ if (this.dashboard.description) {
2895
+ gap += 20;
2896
+ }
2897
+ /** @type {?} */
2898
+ var element = document.querySelector(".portlets-description");
2899
+ paddingBotto = element ? element.offsetHeight + gap + 50 : 50;
2900
+ }
2901
+ return paddingBotto + "px";
2902
+ };
2903
+ /**
2904
+ * @return {?}
2905
+ */
2906
+ PaneGroupNewComponent.prototype.updateDashboardLastUpdateDate = /**
2907
+ * @return {?}
2908
+ */
2909
+ function () {
2910
+ var _this = this;
2911
+ this.pbf.pageLoading = true;
2912
+ this.pbf.pageLoading_.next(true);
2913
+ /** @type {?} */
2914
+ var _dataObj = { dashboardId: this.url_id, language: this.lang };
2915
+ this.http.post(this.api.urlList.GetDashboardV2, _dataObj, (/**
2916
+ * @param {?} res
2917
+ * @return {?}
2918
+ */
2919
+ function (res) {
2920
+ res = _this.pbf.convertKeysToLowerCase(res);
2921
+ _this.dashboard.UpdatedDate = res.UpdatedDate;
2922
+ _this.pbf.pageLoading = false;
2923
+ _this.pbf.pageLoading_.next(true);
2924
+ }));
2925
+ };
2926
+ /**
2927
+ * @param {?=} shouldUpdate
2928
+ * @return {?}
2929
+ */
2930
+ PaneGroupNewComponent.prototype.savedashboard = /**
2931
+ * @param {?=} shouldUpdate
2932
+ * @return {?}
2933
+ */
2934
+ function (shouldUpdate) {
2935
+ var _this = this;
2936
+ if (shouldUpdate === void 0) { shouldUpdate = "false"; }
2937
+ this.pbf.pageLoading = true;
2938
+ this.pbf.pageLoading_.next(true);
2939
+ /** @type {?} */
2940
+ var pdata = this.dashboardLayout.serialize();
2941
+ this.newPosition = tslib_1.__spread(pdata);
2942
+ /** @type {?} */
2943
+ var portlets = tslib_1.__spread(this.portlets);
2944
+ if (portlets && portlets.length) {
2945
+ /** @type {?} */
2946
+ var activeTabHasPortlet_1 = false;
2947
+ /** @type {?} */
2948
+ var tabIds_1 = [];
2949
+ portlets.map((/**
2950
+ * @param {?} el
2951
+ * @return {?}
2952
+ */
2953
+ function (el) {
2954
+ /** @type {?} */
2955
+ var data = find(_this.newPosition, (/**
2956
+ * @param {?} item
2957
+ * @return {?}
2958
+ */
2959
+ function (item) { return item.id === el.newId; }));
2960
+ if (data) {
2961
+ el.col = data.col;
2962
+ el.posX = data.col;
2963
+ el.row = data.row;
2964
+ el.posY = data.row;
2965
+ el.sizeX = data.sizeX;
2966
+ el.width = data.sizeX;
2967
+ el.sizeY = data.sizeY;
2968
+ el.height = data.sizeY;
2969
+ }
2970
+ /** @type {?} */
2971
+ var config = el.config ? JSON.parse(el.config) : null;
2972
+ if (config) {
2973
+ config = tslib_1.__assign({}, config, { prevDashboarId: el.id, activeTab: _this.activeTab });
2974
+ tabIds_1.push(config.tabId);
2975
+ if (config.tabId === _this.activeTab) {
2976
+ activeTabHasPortlet_1 = true;
2977
+ }
2978
+ el.config = CircularJSON.stringify(config);
2979
+ }
2980
+ }));
2981
+ if (!activeTabHasPortlet_1) {
2982
+ portlets.forEach((/**
2983
+ * @param {?} el
2984
+ * @return {?}
2985
+ */
2986
+ function (el) {
2987
+ /** @type {?} */
2988
+ var config = el.config ? JSON.parse(el.config) : null;
2989
+ if (config) {
2990
+ config = tslib_1.__assign({}, config, { prevDashboarId: el.id, activeTab: tabIds_1[0] });
2991
+ }
2992
+ el.config = CircularJSON.stringify(config);
2993
+ }));
2994
+ }
2995
+ }
2996
+ /** @type {?} */
2997
+ var dataObj = {
2998
+ portlets: portlets,
2999
+ dashboardId: this.url_id,
3000
+ lastUpdateDate: this.dashboard.UpdatedDate,
3001
+ };
3002
+ this.http.post(this.api.urlList.SaveDashboardPortlets, dataObj, (/**
3003
+ * @param {?} res
3004
+ * @return {?}
3005
+ */
3006
+ function (res) {
3007
+ if (res.status == "SUCCESS") {
3008
+ _this.DashboardPorletsService.GetDashboardV1(_this.url_id, false, (/**
3009
+ * @param {?} _res
3010
+ * @param {?=} _portlets
3011
+ * @return {?}
3012
+ */
3013
+ function (_res, _portlets) {
3014
+ if (_portlets === void 0) { _portlets = []; }
3015
+ _this.pbf.pageLoading = false;
3016
+ _this.pbf.pageLoading_.next(true);
3017
+ if (!_res) {
3018
+ return;
3019
+ }
3020
+ /** @type {?} */
3021
+ var _saveMessage = _this.translation.DASHBOARD_SAVE_MESSAGE ||
3022
+ "Dashboard has been updated";
3023
+ _this.dialogService.showSucMsg(_saveMessage);
3024
+ if (shouldUpdate !== "true") {
3025
+ _this.toggleCustomize(false);
3026
+ _this.toggleSidebar(false);
3027
+ _this.updatePushBtn(false);
3028
+ }
3029
+ _this.updateDashboard({
3030
+ dashboard: _res,
3031
+ portlets: _portlets,
3032
+ noDetect: true,
3033
+ });
3034
+ _this.initlayout(true);
3035
+ _this.ref.markForCheck();
3036
+ _this.ref.detectChanges();
3037
+ }));
3038
+ }
3039
+ else {
3040
+ /** @type {?} */
3041
+ var errorMessage = "Dashboard save failed";
3042
+ if (Array.isArray(res.messages)) {
3043
+ errorMessage = res.messages[0].message;
3044
+ }
3045
+ _this.dialogService.showNotification(errorMessage, {
3046
+ status: "Error",
3047
+ });
3048
+ _this.pbf.pageLoading = false;
3049
+ _this.pbf.pageLoading_.next(true);
3050
+ }
3051
+ }));
3052
+ };
3053
+ PaneGroupNewComponent.decorators = [
3054
+ { type: Component, args: [{
3055
+ selector: "rs-dashboard",
3056
+ template: "<div id=\"kt-dashboard-container\" class=\"content-portlets\">\r\n <div\r\n *ngIf=\"\r\n dashboard &&\r\n (dashboard.title || dashboard.description) &&\r\n !haveFullScreen.length\r\n \"\r\n class=\"portlets-description\"\r\n >\r\n <h4 *ngIf=\"dashboard && dashboard.title && !haveFullScreen.length\">\r\n {{ dashboard ? dashboard.title : \"\" }}\r\n </h4>\r\n <p *ngIf=\"dashboard && dashboard.description && !haveFullScreen.length\">\r\n {{ dashboard ? dashboard.description : \"\" }}\r\n </p>\r\n </div>\r\n <div class=\"panes-list\" id=\"kt-dashboard-layout\" #panesList>\r\n <div style=\"width: 100%\">\r\n <ejs-dashboardlayout\r\n id=\"defaultLayout\"\r\n #defaultLayout\r\n [columns]=\"4\"\r\n [cellSpacing]=\"cellSpacing\"\r\n [cellAspectRatio]=\"cellAspectRatio\"\r\n [allowDragging]=\"customized\"\r\n [allowResizing]=\"customized\"\r\n [resizableHandles]=\"resizableHandles\"\r\n [draggableHandle]=\"draggableHandle\"\r\n [mediaQuery]=\"mediaQuery\"\r\n (resizeStop)=\"resizeStop($event)\"\r\n (dragStop)=\"dragStop($event)\"\r\n >\r\n <e-panels\r\n *ngIf=\"ActiveDashboardPortlets && ActiveDashboardPortlets.length\"\r\n >\r\n <e-panel\r\n *ngFor=\"let item of ActiveDashboardPortlets; let i = index\"\r\n [sizeX]=\"item.sizeX\"\r\n [id]=\"item.newId\"\r\n [sizeY]=\"item.sizeY\"\r\n [row]=\"item.row\"\r\n [col]=\"item.col\"\r\n >\r\n <ng-template #header>\r\n <div class=\"gadget-title\">\r\n {{ GetgadgetTitle(item.config) }}\r\n </div>\r\n <div class=\"gadgetBar pane-group-gadget\">\r\n <ul class=\"pane-gadget-container\">\r\n <li\r\n *ngIf=\"customized\"\r\n [matTooltip]=\"\r\n translation.DUPLICATE\r\n ? translation.DUPLICATE\r\n : '.DUPLICATE'\r\n \"\r\n (click)=\"copyPortlet(item)\"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/menu-duplicate.svg\"\r\n />\r\n </li>\r\n <li\r\n *ngIf=\"customized && rs.hasPermission('DELETE')\"\r\n [matTooltip]=\"\r\n translation.DELETE ? translation.DELETE : '.DELETE'\r\n \"\r\n (click)=\"delete(item)\"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-delete.svg\"\r\n />\r\n </li>\r\n <li\r\n *ngIf=\"getPortletType(item) !== 'transpose'\"\r\n [matTooltip]=\"\r\n translation.DOWNLOAD ? translation.DOWNLOAD : '.DOWNLOAD'\r\n \"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/menu-download.svg\"\r\n (click)=\"download(item)\"\r\n />\r\n </li>\r\n <li\r\n *ngIf=\"\r\n customized &&\r\n !['newcolumn', 'newline', 'newcolumnline'].includes(\r\n getPortletType(item)\r\n )\r\n \"\r\n [matTooltip]=\"\r\n translation.FILTER ? translation.FILTER : '.FILTER'\r\n \"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-filters.svg\"\r\n (click)=\"openFilter(item)\"\r\n />\r\n </li>\r\n\r\n <li\r\n #unclick\r\n *ngIf=\"customized && getPortletType(item) === 'pivot'\"\r\n style=\"margin-right: 18px\"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-basic-sub-total.svg\"\r\n (click)=\"openSubtotal(item)\"\r\n />\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-basic-arrow-down.svg\"\r\n (click)=\"openSubtotal(item)\"\r\n />\r\n </li>\r\n <div\r\n #unclick\r\n class=\"pivotTable-sub-grand-group\"\r\n *ngIf=\"\r\n showSubTotalGroup &&\r\n getPortletType(item) === 'pivot' &&\r\n Current_PortletId === item.newId\r\n \"\r\n >\r\n <ul>\r\n <li\r\n class=\"sub-grand-group\"\r\n [ngStyle]=\"{\r\n 'background-color': subtotal.selected\r\n ? '#f8fafb'\r\n : '#fff'\r\n }\"\r\n *ngFor=\"\r\n let subtotal of pivotTableSubTotalList;\r\n let idx = index\r\n \"\r\n (click)=\"selectTotalGroup(idx, 'sub', item)\"\r\n >\r\n <div style=\"display: flex\">\r\n <div\r\n style=\"\r\n height: 33px;\r\n width: 34px;\r\n text-align: center;\r\n \"\r\n >\r\n <img\r\n *ngIf=\"subtotal.selected\"\r\n src=\"../../assets/img/dashboard_icon/forms-checkbox-square-tick.svg\"\r\n />\r\n </div>\r\n <span>{{ subtotal.value }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <li\r\n #unclickGrand\r\n *ngIf=\"\r\n customized &&\r\n (getPortletType(item) === 'pivot' ||\r\n getPortletType(item) === 'table')\r\n \"\r\n style=\"margin-right: 18px\"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-basic-total.svg\"\r\n (click)=\"openGrandtotal(item)\"\r\n />\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-basic-arrow-down.svg\"\r\n (click)=\"openGrandtotal(item)\"\r\n />\r\n </li>\r\n <div\r\n #unclickGrand\r\n class=\"pivotTable-sub-grand-group\"\r\n style=\"left: 230px\"\r\n *ngIf=\"\r\n showgrandTotalGroup &&\r\n getPortletType(item) === 'pivot' &&\r\n Current_PortletId === item.newId\r\n \"\r\n >\r\n <ul>\r\n <li\r\n class=\"sub-grand-group\"\r\n [ngStyle]=\"{\r\n 'background-color': grandtotal.selected\r\n ? '#f8fafb'\r\n : '#fff'\r\n }\"\r\n *ngFor=\"\r\n let grandtotal of pivotTableGrandTotalList;\r\n let idx = index\r\n \"\r\n (click)=\"selectTotalGroup(idx, 'grand', item)\"\r\n >\r\n <div style=\"display: flex\">\r\n <div\r\n style=\"\r\n height: 33px;\r\n width: 34px;\r\n text-align: center;\r\n \"\r\n >\r\n <img\r\n *ngIf=\"grandtotal.selected\"\r\n src=\"../../assets/img/dashboard_icon/forms-checkbox-square-tick.svg\"\r\n />\r\n </div>\r\n <span>{{ grandtotal.value }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n #unclickGrand\r\n class=\"pivotTable-sub-grand-group\"\r\n style=\"left: 210px; height: 76px\"\r\n *ngIf=\"\r\n showTableGrandTotalGroup &&\r\n getPortletType(item) === 'table' &&\r\n Current_PortletId === item.newId\r\n \"\r\n >\r\n <ul>\r\n <li\r\n class=\"sub-grand-group\"\r\n [ngStyle]=\"{\r\n 'background-color': grandtotal.selected\r\n ? '#f8fafb'\r\n : '#fff'\r\n }\"\r\n *ngFor=\"\r\n let grandtotal of tableGrandTotalList;\r\n let idx = index\r\n \"\r\n (click)=\"selectTotalGroup(idx, 'tableGrand', item)\"\r\n >\r\n <div style=\"display: flex\">\r\n <div\r\n style=\"\r\n height: 33px;\r\n width: 34px;\r\n text-align: center;\r\n \"\r\n >\r\n <img\r\n *ngIf=\"grandtotal.selected\"\r\n src=\"../../assets/img/dashboard_icon/forms-checkbox-square-tick.svg\"\r\n />\r\n </div>\r\n <span>{{ grandtotal.value }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <li\r\n *ngIf=\"\r\n customized &&\r\n !['newcolumn', 'newline', 'newcolumnline'].includes(\r\n getPortletType(item)\r\n )\r\n \"\r\n [matTooltip]=\"\r\n translation.FORMAT ? translation.FORMAT : '.FORMAT'\r\n \"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-basic-format.svg\"\r\n (click)=\"fieldFormat(item)\"\r\n />\r\n </li>\r\n <li\r\n *ngIf=\"\r\n (customized || url_type === 'sharedbeta') &&\r\n !['newcolumn', 'newline', 'newcolumnline'].includes(\r\n getPortletType(item)\r\n )\r\n \"\r\n [matTooltip]=\"\r\n translation.CONFIGURATIONS || '.CONFIGURATIONS'\r\n \"\r\n (click)=\"configurations(item, $event)\"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-settings.svg\"\r\n />\r\n </li>\r\n <li\r\n *ngIf=\"customized\"\r\n [matTooltip]=\"translation.EDIT ? translation.EDIT : '.EDIT'\"\r\n (click)=\"edit(item)\"\r\n >\r\n <img\r\n src=\"../../assets/img/dashboard_icon/gadget-edit.svg\"\r\n />\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <kt-gadget-table\r\n #table\r\n *ngIf=\"getPortletType(item) == 'table'\"\r\n [portlets]=\"portlets\"\r\n [dashboard]=\"dashboard\"\r\n [portlet]=\"item\"\r\n >\r\n </kt-gadget-table>\r\n <kt-gadget-pivot\r\n #pivot\r\n *ngIf=\"getPortletType(item) == 'pivot'\"\r\n [portlet]=\"item\"\r\n [dashboard]=\"dashboard\"\r\n [portlets]=\"portlets\"\r\n [themeColor]=\"item.themeColor\"\r\n >\r\n </kt-gadget-pivot>\r\n <kt-gadget-pivot-chart\r\n #pivot\r\n *ngIf=\"getPortletType(item) == 'newchart'\"\r\n [portlet]=\"item\"\r\n [dashboard]=\"dashboard\"\r\n (updatePorletConfig)=\"updatePorletConfig($event)\"\r\n [portlets]=\"portlets\"\r\n [themeColor]=\"item.themeColor\"\r\n >\r\n </kt-gadget-pivot-chart>\r\n <kt-gadget-transpose\r\n #transpose\r\n *ngIf=\"getPortletType(item) == 'transpose'\"\r\n [portlets]=\"portlets\"\r\n [dashboard]=\"dashboard\"\r\n [portlet]=\"item\"\r\n >\r\n </kt-gadget-transpose>\r\n <kt-bar-charts\r\n *ngIf=\"\r\n ['newcolumn', 'newline', 'newcolumnline'].includes(\r\n getPortletType(item)\r\n )\r\n \"\r\n #newChart\r\n [dashboard]=\"dashboard\"\r\n [dataColumn]=\"item.dataColumn\"\r\n [dataLine]=\"item.dataLine\"\r\n [columnType]=\"item.columnType\"\r\n [lineType]=\"item.lineType\"\r\n [themeColor]=\"item.themeColor\"\r\n [portlet]=\"item\"\r\n ></kt-bar-charts>\r\n </ng-template>\r\n </e-panel>\r\n </e-panels>\r\n </ejs-dashboardlayout>\r\n </div>\r\n </div>\r\n <kt-empty-icon-prompt\r\n [displayCode]=\"'customize'\"\r\n [dashboard]=\"dashboard\"\r\n hidden\r\n >\r\n </kt-empty-icon-prompt>\r\n <div\r\n id=\"kt-dashboard-tabs\"\r\n class=\"dashboard-tab-list\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n >\r\n <div\r\n class=\"tab-item\"\r\n *ngFor=\"let item of tabList; let i = index\"\r\n [ngClass]=\"{\r\n active: item.id === activeTab,\r\n prev: prevId === item.id && i !== tabList.length - 1\r\n }\"\r\n (click)=\"onActiveTab(item, i)\"\r\n (dblclick)=\"onStartEdit(item.id)\"\r\n cdkDrag\r\n >\r\n <div\r\n *ngIf=\"!startEdit || item.id !== activeTab\"\r\n [matTooltip]=\"\r\n item.label === item.displayLabel ? null : item.displayLabel\r\n \"\r\n >\r\n {{ item.displayLabel }}\r\n <img\r\n *ngIf=\"tabList.length > 1\"\r\n src=\"../../assets/img/dashboard_icon/dashboard-tab-delete.svg\"\r\n alt=\"\"\r\n (click)=\"onDeleteTab(item)\"\r\n />\r\n </div>\r\n <input\r\n *ngIf=\"startEdit && item.id === activeTab\"\r\n type=\"text\"\r\n [(ngModel)]=\"item.label\"\r\n (input)=\"setTabInput($event)\"\r\n (blur)=\"saveTabInput(item)\"\r\n />\r\n </div>\r\n <img\r\n class=\"add-tab-icon\"\r\n src=\"../../assets/img/dashboard_icon/add-tab.svg\"\r\n (click)=\"onAddTab()\"\r\n />\r\n </div>\r\n</div>\r\n\r\n<div class=\"sidebar\" [ngClass]=\"{ gone: !push_btn }\" *ngIf=\"dashboard_sidebar\">\r\n <span class=\"push-btn\" (click)=\"pushSlider()\" [class.left-place]=\"!push_btn\">\r\n <span\r\n class=\"sidebar-btn\"\r\n *ngIf=\"push_btn\"\r\n [inlineSVG]=\"'../../assets/img/dashboard_icon/Angle-double-right.svg'\"\r\n ></span>\r\n <span\r\n class=\"sidebar-btn\"\r\n *ngIf=\"!push_btn\"\r\n [inlineSVG]=\"'../../assets/img/dashboard_icon/Angle-double-left.svg'\"\r\n ></span>\r\n </span>\r\n <kt-sidebar-iconlist-new\r\n #sidebar\r\n *ngIf=\"push_btn\"\r\n [dashboard_sidebar]=\"dashboard_sidebar\"\r\n [dashboard]=\"dashboard\"\r\n [dashboardId]=\"url_id\"\r\n [portlet]=\"portlet\"\r\n [portlets]=\"portlets\"\r\n [activeTabId]=\"activeTabId\"\r\n [activeTabLabel]=\"activeTabLabel\"\r\n [figureCode]=\"figureCode\"\r\n [tabactive]=\"tabactive\"\r\n [_selectedY]=\"selectedY\"\r\n [_selectedSecondY]=\"selectedSecondY\"\r\n [_selectedX]=\"selectedX\"\r\n [_selectedMultiples]=\"selectedMultiples\"\r\n [_selectTheme]=\"selectTheme\"\r\n [appCode]=\"appCode\"\r\n (updatePorlet)=\"updatePorlet($event)\"\r\n (chartUpdate)=\"chartUpdate($event)\"\r\n (closeSidebar)=\"closeSidebar($event)\"\r\n (updatePushBtn)=\"updatePushBtn($event)\"\r\n (updateTheme)=\"updateTheme($event)\"\r\n (updatePorletConfig)=\"updatePorletConfig($event)\"\r\n (onToggleTabactive)=\"onToggleTabactive($event)\"\r\n >\r\n </kt-sidebar-iconlist-new>\r\n</div>\r\n<button\r\n class=\"addPorlet\"\r\n *ngIf=\"customized && !push_btn\"\r\n mat-mini-fab\r\n color=\"primary\"\r\n (click)=\"addPorlet()\"\r\n>\r\n +\r\n</button>\r\n",
3057
+ // changeDetection: ChangeDetectionStrategy.OnPush,
3058
+ providers: [DatePipe, { provide: MAT_DATE_FORMATS, useValue: ɵ0 }],
3059
+ styles: ["@charset \"UTF-8\";.kt-portlet.kt-portlet--mobile.kt-portlet--sortable{position:relative;overflow-x:auto;overflow-y:hidden;height:100%!important}.kt-portlet.kt-portlet--mobile.kt-portlet--sortable::-webkit-scrollbar{width:5px;height:8px;background:#fff}.kt-portlet.kt-portlet--mobile.kt-portlet--sortable::-webkit-scrollbar-thumb{background:#eaedf0}.kt-portlet .kt-portlet__body{height:100%;overflow:hidden;padding:0 0 30px!important}.pane{margin-bottom:30px}i.la.la-compress{font-size:20px!important}.dropdown-menu.dropdown-menu-right.dropdown-menu-md.dropdown-menu-fit{z-index:102}h3.kt-portlet__head-title{font-size:18px!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .date-portlet .mat-form-field-wrapper{width:100px;margin-left:15px}.table-none-padding{padding:0}.kt-portlet__head-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-bordered{height:30px;width:40px;border-radius:5px;border:1px solid #6c757d;color:#44566c;padding:0}.btn-bordered.date{padding-top:4px;padding-left:8px;width:160px;font-size:15px}.btn-bordered .mat-datepicker-toggle{color:rgba(0,0,0,.5)}.btn-bordered svg.mat-datepicker-toggle-default-icon.ng-star-inserted{width:20px!important}:host::ng-deep button.mat-icon-button.mat-button-base{transform:translateY(-10px)!important}gridster.scrollVertical{width:auto!important;background:#f2f2f8!important;padding-left:2px!important}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{padding-right:15px!important;padding-left:15px!important}.kt-portlet__head-group.show{position:relative!important}.dropdown-menu.dropdown-menu-right.dropdown-menu-md.dropdown-menu-fit.show{top:48px!important;left:-230px!important;transform:none!important}span.top-date{font-family:Arial;font-size:15px;color:#6c757d}svg.bi.bi-arrows-angle-contract{color:#a2a5b9;margin-right:10px}li.full-svg:hover svg.bi.bi-arrows-angle-contract{color:#0081ff}.pdf-size{width:666px;height:999px}.portlets-description{padding:12px 8px 12px 20px;display:flex;flex-flow:column;gap:12px}.portlets-description h4,.portlets-description p{margin:0;color:#44566c;font-family:Arial;font-size:11px!important;font-style:normal;font-weight:400;line-height:14px}.edit-portlet{border:2px solid #0181ff;border-radius:10px}.kt-form__path{margin-bottom:23px;font-size:13px}.kt-form__path .fa-angle-right,.kt-form__path .lastspan{color:#8697a8}::ng-deep rs-dashboard{height:100%;display:flex;flex-direction:column;position:relative}::ng-deep rs-dashboard .panes-list{width:100%!important;margin-bottom:70px!important}::ng-deep rs-dashboard .panes-list .kt-portlet{border-radius:5px;border-top:10px solid #fff}::ng-deep rs-dashboard button.addPorlet{font-size:32px;position:fixed;bottom:100px;right:20px;z-index:1003;background-color:#0081ff!important}::ng-deep rs-dashboard .sidebar{right:0;top:0;bottom:0;position:absolute;z-index:1000;width:400px;background:#fff!important;transition:width .3s}::ng-deep rs-dashboard .sidebar .push-btn{position:absolute;left:0;top:0;z-index:1}::ng-deep rs-dashboard .sidebar.gone{width:0}::ng-deep rs-dashboard .sidebar .sidebar-btn svg g polygon{fill-opacity:0}::ng-deep rs-dashboard .sidebar .sidebar-btn:hover svg g path{fill:#0081ff;transition:fill .3s}.panes-list{height:100%;width:100%;margin:0!important;overflow:auto;padding-bottom:50px;background:#f2f2f8}.panes-list ::ng-deep .e-panel{border-radius:10px;overflow:auto}.panes-list ::ng-deep .e-panel .e-panel-container{min-width:340px;min-height:340px}.panes-list-dashboard{top:-20px!important}.panes-list-desktop{left:-25px!important;top:-36px!important}:host ::ng-deep .e-panel-header{padding:0!important;height:auto!important;border:0!important}.gadgetBar{height:24px;background-color:#fff!important}.gadgetBar .pane-gadget-container{padding:0 12px}.gadgetBar .pivotTable-sub-grand-group ul{width:100%;display:block}.gadgetBar .pivotTable-sub-grand-group ul li{width:24px;height:24px;display:flex;align-items:center;cursor:pointer;padding:4px}.gadgetBar ul{margin:0;padding:0;list-style:none;display:flex;width:100%;gap:12px}.gadgetBar ul li{width:24px;height:24px;display:flex;align-items:center;cursor:pointer;padding:4px}.gadget-title{height:36px;padding:10px 12px 8px;color:#43566c;font-family:Arial;font-size:15px;font-weight:700;line-height:18px}.pivotTable-sub-grand-group{width:241px;height:142px;z-index:999;position:absolute;left:180px;top:80px;border-radius:10px;border:1px solid #eaedf0;background-color:#fff}.sub-grand-group{width:100%!important;display:block!important;height:33px!important;margin:0!important;line-height:33px!important;text-align:left!important}.sub-grand-group span{font-family:Arial;font-size:14px;color:#44566c;font-weight:400}.sub-grand-group:hover{background-color:#f8fafb!important}::ng-deep .e-pivotfieldlist-container .e-field-list-container .e-field-table .e-field-list-tree-outer-div{height:278px!important}.content-portlets{height:100%;position:relative;overflow:hidden}.content-portlets .dashboard-tab-list{position:absolute;bottom:0;left:0;z-index:1000;width:100%;border-top:1px solid #dbe1e7;border-bottom:1px solid #dbe1e7;background:#f8fafb;box-shadow:0 -1px 4px 0 rgba(0,0,0,.05);display:flex;align-items:center;height:28px}.content-portlets .dashboard-tab-list img{margin-left:10px;cursor:pointer}.content-portlets .dashboard-tab-list .tab-item{cursor:pointer;padding-bottom:4px;border-left:0;color:#43566c}.content-portlets .dashboard-tab-list .tab-item:hover img{display:block!important}.content-portlets .dashboard-tab-list .tab-item div{border-right:1px solid #d0d6dd;border-left:1px solid transparent;border-bottom:1px solid transparent;font-size:11px;line-height:16px;min-height:16px;padding:5px 12px 2px;display:flex;width:114px;align-items:center;justify-content:space-between;gap:6px}.content-portlets .dashboard-tab-list .tab-item div img{display:none;cursor:pointer;margin-left:0}.content-portlets .dashboard-tab-list .tab-item:first-child div{border-left:1px solid #d0d6dd}.content-portlets .dashboard-tab-list .tab-item:first-child.active div{border-right:1px solid #d6dce2}.content-portlets .dashboard-tab-list .tab-item.active div{background-color:#fff;border-bottom-color:#d6dce2;font-weight:700;border-radius:0 0 6px 6px;border-left-color:#d6dce2}.content-portlets .dashboard-tab-list .tab-item.prev div{border-right-color:transparent}.content-portlets .dashboard-tab-list .tab-item input{border:none;text-shadow:none;border-bottom:1px solid #43566c;outline:0;height:16px;width:150px;font-size:11px!important}::ng-deep .mat-menu-content .options{padding:4px 0}::ng-deep .mat-menu-content .options .option-item{padding:4px 8px;font-size:13px;cursor:pointer}::ng-deep .mat-menu-content .options .option-item:hover{background:rgba(0,0,0,.05)}::ng-deep .mat-menu-content .options .option-checkbox{padding:8px}::ng-deep .mat-menu-content .options .option-checkbox.first{border-top:1px solid rgba(0,0,0,.1)}::ng-deep .mat-menu-content .options .option-checkbox .e-icons{height:18px;width:18px}::ng-deep .mat-menu-content .options .option-checkbox .e-icons:before{font-size:12px}::ng-deep #vegetables_popup{width:400px!important}#kt-dashboard-container{display:flex;flex-flow:column nowrap}#kt-dashboard-tabs{flex:none;position:static;height:30px;padding:0 20px;display:flex;flex-flow:row nowrap;align-items:flex-start}#kt-dashboard-tabs .tab-item.active>div{padding-bottom:4px}#kt-dashboard-tabs .tab-item>div{color:#1f3f5c;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:14px}#kt-dashboard-tabs .add-tab-icon{width:16px;height:16px;margin:5px 12px auto}#kt-dashboard-layout{flex:auto;height:0;padding:20px;background-color:rgba(68,86,108,.1)}.left-place{left:-24px!important}"]
3060
+ }] }
3061
+ ];
3062
+ /** @nocollapse */
3063
+ PaneGroupNewComponent.ctorParameters = function () { return [
3064
+ { type: MatDialog },
3065
+ { type: DialogService },
3066
+ { type: DashboardService },
3067
+ { type: ApiList },
3068
+ { type: ActivatedRoute },
3069
+ { type: DashboardPorletsService },
3070
+ { type: ChangeDetectorRef },
3071
+ { type: Router },
3072
+ { type: HttpClient },
3073
+ { type: DatePipe },
3074
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [PBF_TOKEN,] }] },
3075
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [API_SERVICE_TOKEN,] }] },
3076
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ROLE_SERVICE_TOKEN,] }] }
3077
+ ]; };
3078
+ PaneGroupNewComponent.propDecorators = {
3079
+ dateChange: [{ type: Output }],
3080
+ appCode: [{ type: Input }],
3081
+ sidebar: [{ type: ViewChild, args: ["sidebar", { static: false },] }],
3082
+ unclick: [{ type: ViewChildren, args: ["unclick",] }],
3083
+ unclickGrand: [{ type: ViewChildren, args: ["unclickGrand",] }],
3084
+ newChart: [{ type: ViewChildren, args: ["newChart",] }],
3085
+ bodyClick: [{ type: HostListener, args: ["document:click", ["$event"],] }],
3086
+ dashboardLayout: [{ type: ViewChild, args: ["defaultLayout", { static: false },] }],
3087
+ canvas: [{ type: ViewChild, args: ["canvas", { static: true },] }],
3088
+ table: [{ type: ViewChildren, args: ["table",] }],
3089
+ pivot: [{ type: ViewChildren, args: ["pivot",] }],
3090
+ transpose: [{ type: ViewChildren, args: ["transpose",] }],
3091
+ panesList: [{ type: ViewChild, args: ["panesList", { static: true },] }]
3092
+ };
3093
+ tslib_1.__decorate([
3094
+ debounce(100),
3095
+ tslib_1.__metadata("design:type", Function),
3096
+ tslib_1.__metadata("design:paramtypes", [Object]),
3097
+ tslib_1.__metadata("design:returntype", void 0)
3098
+ ], PaneGroupNewComponent.prototype, "filterData", null);
3099
+ tslib_1.__decorate([
3100
+ debounce(300),
3101
+ tslib_1.__metadata("design:type", Function),
3102
+ tslib_1.__metadata("design:paramtypes", [Object]),
3103
+ tslib_1.__metadata("design:returntype", void 0)
3104
+ ], PaneGroupNewComponent.prototype, "GetgadgetTitle", null);
3105
+ return PaneGroupNewComponent;
3106
+ }());
3107
+ export { PaneGroupNewComponent };
3108
+ if (false) {
3109
+ /** @type {?} */
3110
+ PaneGroupNewComponent.prototype.dateChange;
3111
+ /** @type {?} */
3112
+ PaneGroupNewComponent.prototype.appCode;
3113
+ /** @type {?} */
3114
+ PaneGroupNewComponent.prototype.sidebar;
3115
+ /** @type {?} */
3116
+ PaneGroupNewComponent.prototype.unclick;
3117
+ /** @type {?} */
3118
+ PaneGroupNewComponent.prototype.unclickGrand;
3119
+ /** @type {?} */
3120
+ PaneGroupNewComponent.prototype.newChart;
3121
+ /** @type {?} */
3122
+ PaneGroupNewComponent.prototype.portlet;
3123
+ /** @type {?} */
3124
+ PaneGroupNewComponent.prototype.tabactive;
3125
+ /** @type {?} */
3126
+ PaneGroupNewComponent.prototype.dashboard;
3127
+ /** @type {?} */
3128
+ PaneGroupNewComponent.prototype.selectedY;
3129
+ /** @type {?} */
3130
+ PaneGroupNewComponent.prototype.selectedSecondY;
3131
+ /** @type {?} */
3132
+ PaneGroupNewComponent.prototype.selectedX;
3133
+ /** @type {?} */
3134
+ PaneGroupNewComponent.prototype.selectedMultiples;
3135
+ /** @type {?} */
3136
+ PaneGroupNewComponent.prototype.selectTheme;
3137
+ /** @type {?} */
3138
+ PaneGroupNewComponent.prototype.hasInit;
3139
+ /** @type {?} */
3140
+ PaneGroupNewComponent.prototype.activeTabId;
3141
+ /** @type {?} */
3142
+ PaneGroupNewComponent.prototype.hasChangeDataTable;
3143
+ /** @type {?} */
3144
+ PaneGroupNewComponent.prototype.activeTabLabel;
3145
+ /** @type {?} */
3146
+ PaneGroupNewComponent.prototype.stayActiveTab;
3147
+ /** @type {?} */
3148
+ PaneGroupNewComponent.prototype.translation;
3149
+ /**
3150
+ * @type {?}
3151
+ * @private
3152
+ */
3153
+ PaneGroupNewComponent.prototype.lang;
3154
+ /** @type {?} */
3155
+ PaneGroupNewComponent.prototype.push_btn;
3156
+ /** @type {?} */
3157
+ PaneGroupNewComponent.prototype.dashboardLayout;
3158
+ /** @type {?} */
3159
+ PaneGroupNewComponent.prototype.canvas;
3160
+ /**
3161
+ * @type {?}
3162
+ * @private
3163
+ */
3164
+ PaneGroupNewComponent.prototype.config;
3165
+ /** @type {?} */
3166
+ PaneGroupNewComponent.prototype.draggableHandle;
3167
+ /**
3168
+ * @type {?}
3169
+ * @private
3170
+ */
3171
+ PaneGroupNewComponent.prototype.subscriptions;
3172
+ /** @type {?} */
3173
+ PaneGroupNewComponent.prototype.url;
3174
+ /** @type {?} */
3175
+ PaneGroupNewComponent.prototype.url_id;
3176
+ /** @type {?} */
3177
+ PaneGroupNewComponent.prototype.url_type;
3178
+ /** @type {?} */
3179
+ PaneGroupNewComponent.prototype.datePipeFormat;
3180
+ /** @type {?} */
3181
+ PaneGroupNewComponent.prototype.haveFullScreen;
3182
+ /** @type {?} */
3183
+ PaneGroupNewComponent.prototype.cellSpacing;
3184
+ /** @type {?} */
3185
+ PaneGroupNewComponent.prototype.cellAspectRatio;
3186
+ /** @type {?} */
3187
+ PaneGroupNewComponent.prototype.resizableHandles;
3188
+ /** @type {?} */
3189
+ PaneGroupNewComponent.prototype.newPosition;
3190
+ /** @type {?} */
3191
+ PaneGroupNewComponent.prototype.mediaQuery;
3192
+ /** @type {?} */
3193
+ PaneGroupNewComponent.prototype.figureCode;
3194
+ /** @type {?} */
3195
+ PaneGroupNewComponent.prototype.customized;
3196
+ /** @type {?} */
3197
+ PaneGroupNewComponent.prototype.chartTypeList;
3198
+ /** @type {?} */
3199
+ PaneGroupNewComponent.prototype.table;
3200
+ /** @type {?} */
3201
+ PaneGroupNewComponent.prototype.pivot;
3202
+ /** @type {?} */
3203
+ PaneGroupNewComponent.prototype.transpose;
3204
+ /** @type {?} */
3205
+ PaneGroupNewComponent.prototype.pivotTableSubTotalList;
3206
+ /** @type {?} */
3207
+ PaneGroupNewComponent.prototype.pivotTableGrandTotalList;
3208
+ /** @type {?} */
3209
+ PaneGroupNewComponent.prototype.tableGrandTotalList;
3210
+ /** @type {?} */
3211
+ PaneGroupNewComponent.prototype.themeData;
3212
+ /** @type {?} */
3213
+ PaneGroupNewComponent.prototype.startEdit;
3214
+ /** @type {?} */
3215
+ PaneGroupNewComponent.prototype.showSubTotalGroup;
3216
+ /** @type {?} */
3217
+ PaneGroupNewComponent.prototype.showgrandTotalGroup;
3218
+ /** @type {?} */
3219
+ PaneGroupNewComponent.prototype.showTableGrandTotalGroup;
3220
+ /** @type {?} */
3221
+ PaneGroupNewComponent.prototype.Current_PortletId;
3222
+ /** @type {?} */
3223
+ PaneGroupNewComponent.prototype.restoreModel;
3224
+ /** @type {?} */
3225
+ PaneGroupNewComponent.prototype.themeObj;
3226
+ /** @type {?} */
3227
+ PaneGroupNewComponent.prototype.enableMultipleAxis;
3228
+ /** @type {?} */
3229
+ PaneGroupNewComponent.prototype.showLegend;
3230
+ /** @type {?} */
3231
+ PaneGroupNewComponent.prototype.timer;
3232
+ /** @type {?} */
3233
+ PaneGroupNewComponent.prototype.tabList;
3234
+ /** @type {?} */
3235
+ PaneGroupNewComponent.prototype.activeTab;
3236
+ /** @type {?} */
3237
+ PaneGroupNewComponent.prototype.prevId;
3238
+ /** @type {?} */
3239
+ PaneGroupNewComponent.prototype.dashboard_sidebar;
3240
+ /** @type {?} */
3241
+ PaneGroupNewComponent.prototype.ActiveDashboardPortlets;
3242
+ /** @type {?} */
3243
+ PaneGroupNewComponent.prototype.portlets;
3244
+ /** @type {?} */
3245
+ PaneGroupNewComponent.prototype.hasResize;
3246
+ /** @type {?} */
3247
+ PaneGroupNewComponent.prototype.panesList;
3248
+ /** @type {?} */
3249
+ PaneGroupNewComponent.prototype.x;
3250
+ /** @type {?} */
3251
+ PaneGroupNewComponent.prototype.y;
3252
+ /** @type {?} */
3253
+ PaneGroupNewComponent.prototype.dialog;
3254
+ /**
3255
+ * @type {?}
3256
+ * @private
3257
+ */
3258
+ PaneGroupNewComponent.prototype.dialogService;
3259
+ /** @type {?} */
3260
+ PaneGroupNewComponent.prototype.dashboardService;
3261
+ /**
3262
+ * @type {?}
3263
+ * @private
3264
+ */
3265
+ PaneGroupNewComponent.prototype.api;
3266
+ /**
3267
+ * @type {?}
3268
+ * @private
3269
+ */
3270
+ PaneGroupNewComponent.prototype.activatedRoute;
3271
+ /** @type {?} */
3272
+ PaneGroupNewComponent.prototype.DashboardPorletsService;
3273
+ /**
3274
+ * @type {?}
3275
+ * @private
3276
+ */
3277
+ PaneGroupNewComponent.prototype.ref;
3278
+ /**
3279
+ * @type {?}
3280
+ * @private
3281
+ */
3282
+ PaneGroupNewComponent.prototype.router;
3283
+ /**
3284
+ * @type {?}
3285
+ * @private
3286
+ */
3287
+ PaneGroupNewComponent.prototype.httpClient;
3288
+ /**
3289
+ * @type {?}
3290
+ * @private
3291
+ */
3292
+ PaneGroupNewComponent.prototype.datePipe;
3293
+ /**
3294
+ * @type {?}
3295
+ * @private
3296
+ */
3297
+ PaneGroupNewComponent.prototype.pbf;
3298
+ /**
3299
+ * @type {?}
3300
+ * @private
3301
+ */
3302
+ PaneGroupNewComponent.prototype.http;
3303
+ /** @type {?} */
3304
+ PaneGroupNewComponent.prototype.rs;
3305
+ }
3306
+ export { ɵ0 };
3307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZS1ncm91cC1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kYXNoYm9hcmQvcGFuZS1ncm91cC1uZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUEyQixNQUFNLG1CQUFtQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsa0JBQWtCLEdBQ25CLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFckUsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBVzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxP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LDJDQUFXOztJQUNYLDJDQUFtQjs7SUFDbkIsOENBQTZFOztJQUM3RSxzQ0FDOEM7O0lBQzlDLHNDQUMwRTs7SUFDMUUsMENBQ3NEOztJQUN0RCx1REFxQkU7O0lBQ0YseURBcUJFOztJQUNGLG9EQVNFOztJQUVGLDBDQXVPRTs7SUFDRiwwQ0FBa0I7O0lBQ2xCLGtEQUEwQzs7SUFDMUMsb0RBQTRDOztJQUM1Qyx5REFBaUQ7O0lBQ2pELGtEQUF5Qjs7SUFDekIsNkNBQThCOztJQUM5Qix5Q0FBcUI7O0lBQ3JCLG1EQUEyQjs7SUFDM0IsMkNBQW1COztJQUNuQixzQ0FBTTs7SUFDTix3Q0FBUTs7SUFDUiwwQ0FBYzs7SUFDZCx1Q0FBYzs7SUFDZCxrREFBMEI7O0lBQzFCLHdEQUE2Qjs7SUFDN0IseUNBQWM7O0lBQ2QsMENBQWtCOztJQUVsQiwwQ0FBZ0U7O0lBd3NCaEUsa0NBQUU7O0lBQ0Ysa0NBQUU7O0lBdnNCQSx1Q0FBd0I7Ozs7O0lBQ3hCLDhDQUFvQzs7SUFDcEMsaURBQXlDOzs7OztJQUN6QyxvQ0FBb0I7Ozs7O0lBQ3BCLCtDQUFzQzs7SUFDdEMsd0RBQXVEOzs7OztJQUN2RCxvQ0FBOEI7Ozs7O0lBQzlCLHVDQUFzQjs7Ozs7SUFDdEIsMkNBQThCOzs7OztJQUM5Qix5Q0FBMEI7Ozs7O0lBQzFCLG9DQUErQzs7Ozs7SUFDL0MscUNBQXdEOztJQUN4RCxtQ0FBc0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPcHRpb25hbCxcclxuICBJbmplY3QsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbFwiO1xyXG5cclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRGFzaGJvYXJkU2VydmljZSB9IGZyb20gXCIuL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwaUxpc3QgfSBmcm9tIFwiLi9hcGlcIjtcclxuaW1wb3J0IHtcclxuICBBUElfU0VSVklDRV9UT0tFTixcclxuICBQQkZfVE9LRU4sXHJcbiAgUk9MRV9TRVJWSUNFX1RPS0VOLFxyXG59IGZyb20gXCIuLi9zZXJ2aWNlL0luamVjdGlvblRva2VuXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlIH0gZnJvbSBcIi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCBDaXJjdWxhckpTT04gZnJvbSBcImNpcmN1bGFyLWpzb25cIjtcclxuXHJcbmltcG9ydCB7IE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGZpbmQgfSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZExheW91dENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1sYXlvdXRzXCI7XHJcbmltcG9ydCB7IEZpZWxkRm9ybWF0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2lkZWJhci1pY29ubGlzdC9maWVsZC1mb3JtYXQvZmllbGQtZm9ybWF0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtdGFibGUvZ2FkZ2V0LXRhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRQaXZvdENvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRQaXZvdENoYXJ0Q29tcG9uZW50IH0gZnJvbSBcIi4vZ2FkZ2V0LWdyb3VwL2dhZGdldC1waXZvdC1jaGFydC9nYWRnZXQtcGl2b3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEdhZGdldFRyYW5zcG9zZUNvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtdHJhbnNwb3NlL2dhZGdldC10cmFuc3Bvc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcbiAgLy8gUGRmRXhwb3J0UHJvcGVydGllcyxcclxuICBFeGNlbEV4cG9ydFByb3BlcnRpZXMsXHJcbiAgQ29sdW1uTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWdyaWRzXCI7XHJcbmltcG9ydCB7IElBeGlzU2V0IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERhdGFNYXJ0TmV3Q29tcG9uZW50IH0gZnJvbSBcIi4vZGFzaGJvYXJkLXByb3BlcnRpZXMvZGF0YS1tYXJ0LW5ldy9kYXRhLW1hcnQtbmV3LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBCYXJDaGFydHNDb21wb25lbnQgfSBmcm9tIFwiLi9iYXItY2hhcnRzL2Jhci1jaGFydHMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIi4vYmFyLWNoYXJ0cy91dGlsc1wiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUGFuZURvd25sb2FkQ29tcG9uZW50IH0gZnJvbSBcIi4vZGlhbG9nLWdyb3VwL2Rvd25sb2FkL2luZGV4LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5sZXQgZGF0ZUZvcm1hdCA9IFwiREQtTU0tWVlZWVwiO1xyXG5pZiAobG9jYWxTdG9yYWdlW1wic2V0dGluZ1wiXSkge1xyXG4gIGNvbnN0IGRhdGVBcnJheSA9IGZpbmQoXHJcbiAgICBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2V0dGluZ1wiKSB8fCBcInt9XCIpLFxyXG4gICAgKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbVtcInBhcmFtZXRlclwiXSA9PT0gXCJEQVRFX0ZPUk1BVFwiXHJcbiAgKTtcclxuICBpZiAoZGF0ZUFycmF5KSB7XHJcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUFycmF5LnZhbHVlO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgTVlfRk9STUFUUyA9IHtcclxuICBwYXJzZToge1xyXG4gICAgZGF0ZUlucHV0OiBcIkRELU1NLVlZWVlcIixcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogZGF0ZUZvcm1hdCxcclxuICAgIG1vbnRoWWVhckxhYmVsOiBcIllZWVlcIixcclxuICAgIGRhdGVBMTF5TGFiZWw6IFwiTExcIixcclxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogXCJZWVlZXCIsXHJcbiAgfSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLWRhc2hib2FyZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcGFuZS1ncm91cC1uZXcuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vcGFuZS1ncm91cC1uZXcuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGUsIHsgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IE1ZX0ZPUk1BVFMgfV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYW5lR3JvdXBOZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8YW55Pj47XHJcbiAgQElucHV0KCkgYXBwQ29kZSA9IFwiUE1TXCI7XHJcbiAgQFZpZXdDaGlsZChcInNpZGViYXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNpZGViYXI6IGFueTtcclxuICBAVmlld0NoaWxkcmVuKFwidW5jbGlja1wiKSB1bmNsaWNrOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQFZpZXdDaGlsZHJlbihcInVuY2xpY2tHcmFuZFwiKSB1bmNsaWNrR3JhbmQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAVmlld0NoaWxkcmVuKFwibmV3Q2hhcnRcIikgbmV3Q2hhcnQ6IFF1ZXJ5TGlzdDxCYXJDaGFydHNDb21wb25lbnQ+O1xyXG4gIHBvcnRsZXQ7XHJcbiAgdGFiYWN0aXZlOiBib29sZWFuO1xyXG4gIGRhc2hib2FyZDtcclxuICBzZWxlY3RlZFkgPSBbXTtcclxuICBzZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICBzZWxlY3RlZFggPSBbXTtcclxuICBzZWxlY3RlZE11bHRpcGxlczogYW55O1xyXG4gIHNlbGVjdFRoZW1lOiBhbnk7XHJcbiAgaGFzSW5pdCA9IHRydWU7XHJcbiAgYWN0aXZlVGFiSWQ6IGFueTtcclxuICBoYXNDaGFuZ2VEYXRhVGFibGUgPSBmYWxzZTtcclxuICBhY3RpdmVUYWJMYWJlbCA9IFwiXCI7XHJcbiAgc3RheUFjdGl2ZVRhYjogYm9vbGVhbjtcclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCJdKSBib2R5Q2xpY2soZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnVuY2xpY2sgJiZcclxuICAgICAgdGhpcy51bmNsaWNrLmZpcnN0ICYmXHJcbiAgICAgIGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiSU1HXCIgJiZcclxuICAgICAgIXRoaXMudW5jbGljay5maXJzdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudW5jbGlja0dyYW5kLmZpcnN0ICYmXHJcbiAgICAgIGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiSU1HXCIgJiZcclxuICAgICAgIXRoaXMudW5jbGlja0dyYW5kLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zaG93Z3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB0cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSB8fCBcInt9XCIpO1xyXG4gIHByaXZhdGUgbGFuZztcclxuICBwdXNoX2J0biA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0TGF5b3V0XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGRhc2hib2FyZExheW91dDogRGFzaGJvYXJkTGF5b3V0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNcIiwgeyBzdGF0aWM6IHRydWUgfSkgY2FudmFzOiBFbGVtZW50UmVmO1xyXG4gIHByaXZhdGUgY29uZmlnO1xyXG4gIHB1YmxpYyBkcmFnZ2FibGVIYW5kbGU6IHN0cmluZyA9IFwiLmdhZGdldC10aXRsZVwiO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgdXJsO1xyXG4gIHB1YmxpYyB1cmxfaWQ7XHJcbiAgcHVibGljIHVybF90eXBlO1xyXG4gIC8vIHByaXZhdGUgaW1nO1xyXG4gIHB1YmxpYyBkYXRlUGlwZUZvcm1hdDtcclxuICBwdWJsaWMgaGF2ZUZ1bGxTY3JlZW4gPSBbXTtcclxuICAvLyBwcml2YXRlIGNsaWVudEhlaWdodF87XHJcbiAgcHVibGljIGNlbGxTcGFjaW5nOiBudW1iZXJbXSA9IFsyMCwgMjBdO1xyXG4gIHB1YmxpYyBjZWxsQXNwZWN0UmF0aW87XHJcbiAgcHVibGljIHJlc2l6YWJsZUhhbmRsZXM7XHJcbiAgbmV3UG9zaXRpb24gPSBbXTtcclxuXHJcbiAgcHVibGljIG1lZGlhUXVlcnk7XHJcbiAgZmlndXJlQ29kZTtcclxuICBjdXN0b21pemVkID0gZmFsc2U7XHJcbiAgcHVibGljIGNoYXJ0VHlwZUxpc3QgPSBbXCJDb2x1bW5cIiwgXCJCYXJcIiwgXCJMaW5lXCIsIFwiQXJlYVwiLCBcIlNjYXR0ZXJcIiwgXCJQb2xhclwiXTtcclxuICBAVmlld0NoaWxkcmVuKFwidGFibGVcIilcclxuICBwdWJsaWMgdGFibGU6IFF1ZXJ5TGlzdDxHYWRnZXRUYWJsZUNvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbihcInBpdm90XCIpXHJcbiAgcHVibGljIHBpdm90OiBRdWVyeUxpc3Q8R2FkZ2V0UGl2b3RDb21wb25lbnQgfCBHYWRnZXRQaXZvdENoYXJ0Q29tcG9uZW50PjtcclxuICBAVmlld0NoaWxkcmVuKFwidHJhbnNwb3NlXCIpXHJcbiAgcHVibGljIHRyYW5zcG9zZTogUXVlcnlMaXN0PEdhZGdldFRyYW5zcG9zZUNvbXBvbmVudD47XHJcbiAgcHVibGljIHBpdm90VGFibGVTdWJUb3RhbExpc3Q6IEFycmF5PGFueT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHRoaXMudHJhbnNsYXRpb24uU0hPV19TVUJfVE9UQUxTIHx8IFwiU2hvdyBzdWIgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0aW9uLkhJREVfU1VCX1RPVEFMUyB8fCBcIkhpZGUgc3ViIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTpcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLlNIT1dfU1VCX1RPVEFMU19ST1dTX09OTFkgfHxcclxuICAgICAgICBcIlNob3cgc3ViIHRvdGFscyByb3dzIG9ubHlcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5TSE9XX1NVQl9UT1RBTFNfQ09MVU1OU19PTkxZIHx8XHJcbiAgICAgICAgXCJTaG93IHN1YiB0b3RhbHMgY29sdW1ucyBvbmx5XCIsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgcHVibGljIHBpdm90VGFibGVHcmFuZFRvdGFsTGlzdDogQXJyYXk8YW55PiA9IFtcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGlvbi5TSE9XX0dSQU5EX1RPVEFMUyB8fCBcIlNob3cgZ3JhbmQgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0aW9uLkhJREVfR1JBTkRfVE9UQUxTIHx8IFwiSGlkZSBncmFuZCB0b3RhbHNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5TSE9XX0dSQU5EX1RPVEFMU19ST1dTX09OTFkgfHxcclxuICAgICAgICBcIlNob3cgZ3JhbmQgdG90YWxzIHJvd3Mgb25seVwiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTpcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLlNIT1dfR1JBTkRfVE9UQUxTX0NPTFVNTlNfT05MWSB8fFxyXG4gICAgICAgIFwiU2hvdyBncmFuZCB0b3RhbHMgY29sdW1ucyBvbmx5XCIsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgcHVibGljIHRhYmxlR3JhbmRUb3RhbExpc3Q6IEFycmF5PGFueT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHRoaXMudHJhbnNsYXRpb24uU0hPV19HUkFORF9UT1RBTFMgfHwgXCJTaG93IGdyYW5kIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGlvbi5ISURFX0dSQU5EX1RPVEFMUyB8fCBcIkhpZGUgZ3JhbmQgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIHRoZW1lRGF0YTogYW55ID0gW1xyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTEzXCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMUMzNDg0XCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTRcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxNVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxMzZCQkJcIiwgXCIjMzVCOUZDXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxNlwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzA0NTc4RlwiLCBcIiMwMDgyQUZcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxN1wiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMThcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzE2QTJDMlwiLCBcIiMzRUJCQ0VcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE5XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMUMzNDg0XCIsIFwiIzE2NTlBOVwiLCBcIiMxMzc1QzRcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjBcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzAwODlCNFwiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyMVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMTM2OEI4XCIsIFwiIzEzNzVDNFwiLCBcIiMxRDk3RTFcIiwgXCIjMzVCOUZDXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyMlwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzA0NTc4RlwiLCBcIiMwMDcwQTNcIiwgXCIjMDA3RkFEXCIsIFwiIzAwODlCNFwiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyM1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzFDMzQ4NFwiLFxyXG4gICAgICAgIFwiIzE2NTlBOVwiLFxyXG4gICAgICAgIFwiIzE0NUZBRlwiLFxyXG4gICAgICAgIFwiIzEzNjhCOFwiLFxyXG4gICAgICAgIFwiIzEzNzVDNFwiLFxyXG4gICAgICAgIFwiIzFEOTdFMVwiLFxyXG4gICAgICAgIFwiIzM1QjlGQ1wiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyNFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzA0NTc4RlwiLFxyXG4gICAgICAgIFwiIzAwNzBBM1wiLFxyXG4gICAgICAgIFwiIzAwNzhBOVwiLFxyXG4gICAgICAgIFwiIzAwN0ZBRFwiLFxyXG4gICAgICAgIFwiIzAwODlCNFwiLFxyXG4gICAgICAgIFwiIzE2QTJDMlwiLFxyXG4gICAgICAgIFwiIzNFQkJDRVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxMVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzFDMzQ4NFwiLFxyXG4gICAgICAgIFwiIzE5NDY5N1wiLFxyXG4gICAgICAgIFwiIzE2NTlBOVwiLFxyXG4gICAgICAgIFwiIzEzNkJCQlwiLFxyXG4gICAgICAgIFwiIzE0N0VDQ1wiLFxyXG4gICAgICAgIFwiIzFCOTJERFwiLFxyXG4gICAgICAgIFwiIzI2QTVFRFwiLFxyXG4gICAgICAgIFwiIzM1QjlGQ1wiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxMlwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzA0NTc4RlwiLFxyXG4gICAgICAgIFwiIzAwNjU5QlwiLFxyXG4gICAgICAgIFwiIzAwNzNBNlwiLFxyXG4gICAgICAgIFwiIzAwODJBRlwiLFxyXG4gICAgICAgIFwiIzAwOTBCOFwiLFxyXG4gICAgICAgIFwiIzBGOUVDMFwiLFxyXG4gICAgICAgIFwiIzI5QURDN1wiLFxyXG4gICAgICAgIFwiIzNFQkJDRVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxXCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgICAgXCIjZjFhZjMyXCIsXHJcbiAgICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgXCIjODAzYTYzXCIsXHJcbiAgICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTJcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgICBcIiNlMDU2M2VcIixcclxuICAgICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICBcIiM1OTRiYjlcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lM1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiI2M2NDM3ZFwiLFxyXG4gICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICAgIFwiIzZkZDhiNVwiLFxyXG4gICAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICAgIFwiIzQ2ODhlZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU0XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMmY0OTlmXCIsXHJcbiAgICAgICAgXCIjOGQxZDJlXCIsXHJcbiAgICAgICAgXCIjZTliZjM1XCIsXHJcbiAgICAgICAgXCIjNTE3NzJmXCIsXHJcbiAgICAgICAgXCIjNDY5YmQ4XCIsXHJcbiAgICAgICAgXCIjNWM0NDhmXCIsXHJcbiAgICAgICAgXCIjZGE3MzJmXCIsXHJcbiAgICAgICAgXCIjMjQ1MzUzXCIsXHJcbiAgICAgICAgXCIjNDNhMjQ1XCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTVcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMzODM4MzlcIixcclxuICAgICAgICBcIiM0NDZlYzZcIixcclxuICAgICAgICBcIiNjZjYzODRcIixcclxuICAgICAgICBcIiNlYmIzN2VcIixcclxuICAgICAgICBcIiM3MWEyNDlcIixcclxuICAgICAgICBcIiM0YmIxYTVcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lNlwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzUxN2FlMVwiLFxyXG4gICAgICAgIFwiIzYzODZlNVwiLFxyXG4gICAgICAgIFwiIzc0OTFlOVwiLFxyXG4gICAgICAgIFwiIzg0OWRlY1wiLFxyXG4gICAgICAgIFwiIzk0YTllZlwiLFxyXG4gICAgICAgIFwiI2E0YjZmMlwiLFxyXG4gICAgICAgIFwiI2I0YzNmNlwiLFxyXG4gICAgICAgIFwiI2M0Y2ZmOVwiLFxyXG4gICAgICAgIFwiI2Q0ZGRmZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU3XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMzk4MjhlXCIsXHJcbiAgICAgICAgXCIjNDg4ZTk5XCIsXHJcbiAgICAgICAgXCIjNTc5YWE1XCIsXHJcbiAgICAgICAgXCIjNjZhNmIwXCIsXHJcbiAgICAgICAgXCIjNzViM2JkXCIsXHJcbiAgICAgICAgXCIjODViZmM5XCIsXHJcbiAgICAgICAgXCIjOTVjZGQ2XCIsXHJcbiAgICAgICAgXCIjYTRkYWUyXCIsXHJcbiAgICAgICAgXCIjYjVlOGYwXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZThcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiNlNzk2M2RcIixcclxuICAgICAgICBcIiNlYTllNGJcIixcclxuICAgICAgICBcIiNlZWE2NTlcIixcclxuICAgICAgICBcIiNmMGFlNjhcIixcclxuICAgICAgICBcIiNmMmI2NzhcIixcclxuICAgICAgICBcIiNmM2JmODdcIixcclxuICAgICAgICBcIiNmNWM3OThcIixcclxuICAgICAgICBcIiNmNmQwYWFcIixcclxuICAgICAgICBcIiNmN2Q5YmJcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lOVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzY0YThiNFwiLFxyXG4gICAgICAgIFwiIzdlYmVjMFwiLFxyXG4gICAgICAgIFwiIzljYzljYVwiLFxyXG4gICAgICAgIFwiI2I4ZDRkNFwiLFxyXG4gICAgICAgIFwiI2Q5ZDZjZFwiLFxyXG4gICAgICAgIFwiI2Q4YjdhN1wiLFxyXG4gICAgICAgIFwiI2NlOGY5M1wiLFxyXG4gICAgICAgIFwiI2MxNjI3ZlwiLFxyXG4gICAgICAgIFwiI2FkMjQ1OFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxMFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzQxNzZiYVwiLFxyXG4gICAgICAgIFwiIzU1OWFlOFwiLFxyXG4gICAgICAgIFwiIzcwYjNlOFwiLFxyXG4gICAgICAgIFwiI2E3Y2NlN1wiLFxyXG4gICAgICAgIFwiI2RmZGZkZlwiLFxyXG4gICAgICAgIFwiI2QyYTA4YlwiLFxyXG4gICAgICAgIFwiI2M3NmE1MFwiLFxyXG4gICAgICAgIFwiI2NhNGUzNFwiLFxyXG4gICAgICAgIFwiI2FhM2MyOVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHN0YXJ0RWRpdCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U3ViVG90YWxHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Z3JhbmRUb3RhbEdyb3VwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dUYWJsZUdyYW5kVG90YWxHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBDdXJyZW50X1BvcnRsZXRJZDtcclxuICBwdWJsaWMgcmVzdG9yZU1vZGVsOiBhbnkgPSBbXTtcclxuICBwdWJsaWMgdGhlbWVPYmogPSB7fTtcclxuICBlbmFibGVNdWx0aXBsZUF4aXMgPSBmYWxzZTtcclxuICBzaG93TGVnZW5kID0gZmFsc2U7XHJcbiAgdGltZXI7XHJcbiAgdGFiTGlzdDtcclxuICBhY3RpdmVUYWIgPSAxO1xyXG4gIHByZXZJZCA9IG51bGw7XHJcbiAgZGFzaGJvYXJkX3NpZGViYXIgPSBmYWxzZTtcclxuICBBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cyA9IFtdO1xyXG4gIHBvcnRsZXRzID0gW107XHJcbiAgaGFzUmVzaXplID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJwYW5lc0xpc3RcIiwgeyBzdGF0aWM6IHRydWUgfSkgcGFuZXNMaXN0OiBFbGVtZW50UmVmO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaTogQXBpTGlzdCxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIERhc2hib2FyZFBvcmxldHNTZXJ2aWNlOiBEYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUEJGX1RPS0VOKSBwcml2YXRlIHBiZjogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUElfU0VSVklDRV9UT0tFTikgcHJpdmF0ZSBodHRwOiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJPTEVfU0VSVklDRV9UT0tFTikgcHVibGljIHJzOiBhbnlcclxuICApIHtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlOiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5oYXNSZXNpemUgJiZcclxuICAgICAgICAgIGUudXJsID09PSB0aGlzLmFjdGl2YXRlZFJvdXRlW1wiX3JvdXRlclN0YXRlXCJdLnNuYXBzaG90LnVybFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkTGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5oYXNSZXNpemUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVtb3ZlQWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy50aGVtZURhdGEgJiYgdGhpcy50aGVtZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnRoZW1lRGF0YS5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aGVtZU9ialtlLmlkXSA9IGVbXCJ2YWx1ZVwiXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEluZm8oKTtcclxuICAgIHRoaXMuZ2V0RGFzaGJvYXJkKCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGJmLnB1YiQuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXMucmVmcmVzaFVybCAmJlxyXG4gICAgICAgICAgcmVzLnJlZnJlc2hVcmwgPT09IHRoaXMuYWN0aXZhdGVkUm91dGVbXCJfcm91dGVyU3RhdGVcIl0uc25hcHNob3QudXJsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldERhc2hib2FyZCgpO1xyXG4gICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0RGFzaGJvYXJkUmVuYW1lKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IHJlcy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZGFzaGJvYXJkR3JvdXBOYW1lID0gcmVzLmRhc2hib2FyZEdyb3VwTmFtZTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmRhc2hib2FyZEdyb3VwSWQgPSByZXMuZGFzaGJvYXJkR3JvdXBJZDtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmRlc2NyaXB0aW9uID0gcmVzLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQubmFtZSA9IHJlcy5uYW1lO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRMYXN0VXBkYXRlRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRDdXN0b21pemVTdGF0dXMoKS5zdWJzY3JpYmUoKGlkKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkICYmIHRoaXMuZGFzaGJvYXJkLmlkID09PSBpZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5wYmYuZ2V0SGFzUmVzaXplKCkuc3Vic2NyaWJlKCh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmF0ZWRSb3V0ZVtcIl9yb3V0ZXJTdGF0ZVwiXS5zbmFwc2hvdC51cmwgPT09IHVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRMYXlvdXQpIHtcclxuICAgICAgICAgICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVtb3ZlQWxsKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzaXplID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBbGxGaWVsZHMoaXRlbSwgbm9EZXRlY3QgPSBmYWxzZSk6IFByb21pc2U8YW55W10+IHtcclxuICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgZGF0YU1hcnRDb2RlID0gaXRlbS5maWd1cmVDb2RlO1xyXG4gICAgICBjb25zdCBkYXRhT2JqID0ge1xyXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmcsXHJcbiAgICAgICAgZGF0YU1hcnRDb2RlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNldFNjaGVtYVBhcmFtcyhcclxuICAgICAgICBkYXRhT2JqLFxyXG4gICAgICAgIGRhdGFNYXJ0Q29kZSxcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmFwaS51cmxMaXN0LkdldFNjaGVtYSwgZGF0YU9iaiwgKHJlcykgPT4ge1xyXG4gICAgICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZVJpZ2h0KGUpIHtcclxuICAgIHRoaXMucHVzaF9idG4gPSBmYWxzZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmhhc0NoYW5nZURhdGFUYWJsZSkge1xyXG4gICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gW107XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9ydGxldHMgPVxyXG4gICAgICB0aGlzLnBvcnRsZXRzLmZpbHRlcigocG9ydGxldCkgPT4ge1xyXG4gICAgICAgIGlmICghcG9ydGxldCB8fCAhcG9ydGxldC5jb25maWcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgdGFiSWQgPSBjb25maWcudGFiSWQgfHwgMTtcclxuICAgICAgICBpZiAodGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9ydGxldDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pIHx8IFtdO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbLi4ucG9ydGxldHNdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMubGVuZ3RoICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQgJiZcclxuICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5wYW5lbHMgJiZcclxuICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5wYW5lbHMubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZUFsbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGFzQ2hhbmdlRGF0YVRhYmxlID0gZmFsc2U7XHJcbiAgICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BY3RpdmVUYWIodGFiLCBpbmRleCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRfc2lkZWJhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IGZhbHNlO1xyXG4gICAgY29uc3QgeyBpZCwgbGFiZWwgfSA9IHRhYjtcclxuICAgIGlmICh0YWIuaWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBpZDtcclxuICAgIHRoaXMuYWN0aXZlVGFiTGFiZWwgPSBsYWJlbDtcclxuICAgIGlmIChpbmRleCAhPT0gMCkge1xyXG4gICAgICB0aGlzLnByZXZJZCA9IHRoaXMudGFiTGlzdFtpbmRleCAtIDFdLmlkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGFydEVkaXQgPSBmYWxzZTtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gaWQ7XHJcbiAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVRhYihpdGVtKSB7XHJcbiAgICBsZXQgX3RpdGxlID1cclxuICAgICAgdGhpcy50cmFuc2xhdGlvbi5BUkVfWU9VX1NVUkVfVE9fREVMRVRFX0RBU0hCT0FSRF9UQUJfV0FSTklOR19NRVNTQUdFIHx8XHJcbiAgICAgIFwiLkFSRV9ZT1VfU1VSRV9UT19ERUxFVEVfREFTSEJPQVJEX1RBQl9XQVJOSU5HX01FU1NBR0VcIjtcclxuICAgIF90aXRsZSA9IF90aXRsZS5yZXBsYWNlKFwie1RhYiBOYW1lfVwiLCBpdGVtLmxhYmVsKTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29tbW9uRGlsYW9nKHtcclxuICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRpb24uREVMRVRFX1JFQ09SRCB8fCBcIi5ERUxFVEVfUkVDT1JEXCIsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBfdGl0bGUsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMgPT09IFwic2F2ZVwiKSB7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmFjdGl2ZVRhYiA9PT0gaXRlbS5pZDtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnBvcnRsZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldHNbaV0uY29uZmlnKTtcclxuICAgICAgICAgIGlmIChjb25maWcudGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYkxpc3QuZm9yRWFjaCgodGFiLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGFiLmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFiTGlzdC5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcclxuICAgICAgICAgIGlmICghdGhpcy50YWJMaXN0W2luZGV4XSkge1xyXG4gICAgICAgICAgICBpbmRleCAtPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLnRhYkxpc3RbaW5kZXhdLmlkO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRoaXMuYWN0aXZlVGFiO1xyXG4gICAgICAgICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgICAgICAgICBjb25maWcuYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWI7XHJcbiAgICAgICAgICAgIHBvcnRsZXQuY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQWN0aXZlVGFiKHRoaXMudGFiTGlzdFtpbmRleF0sIGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zYXZlZGFzaGJvYXJkKFwidHJ1ZVwiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkFkZFRhYigpIHtcclxuICAgIGNvbnN0IGxhYmVsID0gYFRhYiAke3RoaXMudGFiTGlzdC5sZW5ndGggKyAxfWA7XHJcbiAgICB0aGlzLnByZXZJZCA9IHRoaXMudGFiTGlzdFt0aGlzLnRhYkxpc3QubGVuZ3RoIC0gMV0uaWQ7XHJcbiAgICBsZXQgbmV3SWQgPSAxO1xyXG4gICAgdGhpcy50YWJMaXN0LmZvckVhY2goKHRhYikgPT4ge1xyXG4gICAgICBuZXdJZCA9IE1hdGgubWF4KG5ld0lkLCB0YWIuaWQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IG5ld0lkICsgMTtcclxuICAgIHRoaXMudGFiTGlzdC5wdXNoKHtcclxuICAgICAgaWQ6IHRoaXMuYWN0aXZlVGFiLFxyXG4gICAgICBsYWJlbCxcclxuICAgICAgZGlzcGxheUxhYmVsOiBgJHt0aGlzLnRyYW5zbGF0aW9uLlRBQiB8fCBcIlRhYlwifSAke1xyXG4gICAgICAgIHRoaXMudGFiTGlzdC5sZW5ndGggKyAxXHJcbiAgICAgIH1gLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdGhpcy5hY3RpdmVUYWI7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYkxhYmVsID0gbGFiZWw7XHJcbiAgICAvLyDpmpDol4/lj7Pkvqfoj5zljZXvvIzmuIXpmaTlvZPliY3pgInkuK3nmoRwb3J0bGV0XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBudWxsO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRfc2lkZWJhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNDaGFuZ2VEYXRhVGFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiSW5wdXQoZSkge1xyXG4gICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0KSA9PiB7XHJcbiAgICAgIGNvbnN0IF9jb25maWcgPSBKU09OLnBhcnNlKHBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgY29uc3QgX3RhYklkID0gX2NvbmZpZy50YWJJZCB8fCAxO1xyXG4gICAgICBpZiAoX3RhYklkID09PSB0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICAgIF9jb25maWcudGFiTGFiZWwgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoX2NvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFiSW5wdXQoaXRlbSkge1xyXG4gICAgdGhpcy5zdGFydEVkaXQgPSBmYWxzZTtcclxuICAgIGl0ZW0uZGlzcGxheUxhYmVsID0gdGhpcy50cnVuY2F0ZVRleHQoaXRlbS5sYWJlbCk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uU3RhcnRFZGl0KGlkKSB7XHJcbiAgICBpZiAoIXRoaXMuY3VzdG9taXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY3RpdmVUYWIgIT09IGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnRFZGl0ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFRhYkxpc3Qobm9EZXRlY3QgPSBmYWxzZSkge1xyXG4gICAgdGhpcy50YWJMaXN0ID0gW107XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlVGFiIHx8ICF0aGlzLnN0YXlBY3RpdmVUYWIpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2SWQgPSBudWxsO1xyXG4gICAgY29uc3QgdGFiTWFwID0ge307XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQsIGlkeCkgPT4ge1xyXG4gICAgICBpZiAocG9ydGxldC5jb25maWcpIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgICBjb25zdCB0eHQgPSB0aGlzLnRyYW5zbGF0aW9uW1wiVEFCXCJdIHx8IFwiVGFiXCI7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5hY3RpdmVUYWIgJiYgIXRoaXMuc3RheUFjdGl2ZVRhYikge1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBjb25maWcuYWN0aXZlVGFiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YWJJZCA9IGNvbmZpZy50YWJJZCB8fCAxO1xyXG4gICAgICAgIGNvbnN0IHRhYkxhYmVsID0gY29uZmlnLnRhYkxhYmVsIHx8IFwiVGFiIDFcIjtcclxuICAgICAgICBsZXQgZGlzcGxheUxhYmVsID0gY29uZmlnLnRhYkxhYmVsIHx8IGAke3R4dH0gMWA7XHJcbiAgICAgICAgaWYgKGNvbmZpZy50YWJMYWJlbCAmJiBjb25maWcudGFiTGFiZWwuc3RhcnRzV2l0aChcIlRhYlwiKSkge1xyXG4gICAgICAgICAgZGlzcGxheUxhYmVsID0gdHh0ICsgY29uZmlnLnRhYkxhYmVsLnNsaWNlKDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRhYk1hcFt0YWJJZF0pIHtcclxuICAgICAgICAgIHRoaXMudGFiTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IHRhYklkLFxyXG4gICAgICAgICAgICBsYWJlbDogdGFiTGFiZWwsXHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbDogdGFiTGFiZWxcclxuICAgICAgICAgICAgICA/IHRoaXMudHJ1bmNhdGVUZXh0KGRpc3BsYXlMYWJlbClcclxuICAgICAgICAgICAgICA6IGAke3RoaXMudHJhbnNsYXRpb24uVEFCIHx8IFwiVGFiXCJ9IDFgLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0YWJNYXBbdGFiSWRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmICghdGhpcy5hY3RpdmVUYWJJZCkge1xyXG4gICAgICAgIC8vIFx0dGhpcy5hY3RpdmVUYWIgPSB0YWJJZDtcclxuICAgICAgICAvLyBcdHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDtcclxuICAgICAgICAvLyBcdHRoaXMuYWN0aXZlVGFiTGFiZWwgPSB0YWJMYWJlbDtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy50YWJMaXN0Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRhYkxpc3QgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgICBsYWJlbDogXCJUYWIgMVwiLFxyXG4gICAgICAgICAgZGlzcGxheUxhYmVsOiBgJHt0aGlzLnRyYW5zbGF0aW9uLlRBQiB8fCBcIlRhYlwifSAxYCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmFjdGl2ZVRhYklkID0gMTtcclxuICAgICAgdGhpcy5hY3RpdmVUYWJMYWJlbCA9IFwiVGFiIDFcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhYkxpc3QgPSB0aGlzLnRhYkxpc3Quc29ydCgoYSwgYikgPT4gYS5pZCAtIGIuaWQpO1xyXG4gICAgY29uc3QgYWN0aXZlVGFiID1cclxuICAgICAgdGhpcy50YWJMaXN0LmZpbmQoKGkpID0+IGkuaWQgPT09IHRoaXMuYWN0aXZlVGFiKSB8fCB0aGlzLnRhYkxpc3RbMF07XHJcbiAgICBpZiAoYWN0aXZlVGFiLmlkKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBhY3RpdmVUYWIuaWQ7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiTGFiZWwgPSBhY3RpdmVUYWIubGFiZWw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXlBY3RpdmVUYWIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0UHJldklkKCk7XHJcbiAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRsYXlvdXQoc2hvdWxkR2V0RmllbGRzID0gZmFsc2UsIG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIGlmICghc2hvdWxkR2V0RmllbGRzKSB7XHJcbiAgICAgIHRoaXMuaW5pdFRhYkxpc3Qobm9EZXRlY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldHMgJiYgdGhpcy5wb3J0bGV0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IHBvcnRsZXQgb2YgdGhpcy5wb3J0bGV0cykge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZzogYW55ID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgaWYgKHNob3VsZEdldEZpZWxkcykge1xyXG4gICAgICAgICAgLy8gR2V0U2NoZW1h6YWN572u55qE5YiX5pWw5o2u5rqQXHJcbiAgICAgICAgICBjb25zdCBmaWVsZHM6IGFueVtdID0gYXdhaXQgdGhpcy5nZXRBbGxGaWVsZHMocG9ydGxldCk7XHJcbiAgICAgICAgICAvLyDmr4/kuKpwb3J0bGV06Ieq5a6a5LmJ55qE5pWw5o2uXHJcbiAgICAgICAgICBjb25maWcuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQpIHtcclxuICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoX2YpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfZi5jb2xOYW1lID09PSBmaWVsZC5jb2xOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIF9mLmZvcm1hdCA9IGZpZWxkLmZvcm1hdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZmllbGRzLmZpbmQoKF9mKSA9PiBfZi5jb2xOYW1lID09PSBmaWVsZC5jb2xOYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgZmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChjb25maWcucG9ydGxldFR5cGUgPT09IFwicGl2b3RcIikge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGNvbmZpZy5maWVsZHMgPSBmaWVsZHM7XHJcbiAgICAgICAgICAgIHBvcnRsZXQuY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwb3J0bGV0Lm5ld0lkID0gXCJwb3J0bGV0X1wiICsgdGhpcy5wYmYuR3VpZCgpO1xyXG4gICAgICAgIHBvcnRsZXQuY29sID0gcG9ydGxldC5wb3NYO1xyXG4gICAgICAgIHBvcnRsZXQucm93ID0gcG9ydGxldC5wb3NZO1xyXG4gICAgICAgIHBvcnRsZXQuc2l6ZVggPSBwb3J0bGV0LndpZHRoO1xyXG4gICAgICAgIHBvcnRsZXQuc2l6ZVkgPSBwb3J0bGV0LmhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pbml0Q2hhckRhdGEobm9EZXRlY3QpO1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKG5vRGV0ZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbXTtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVtb3ZlQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5wYmYuZ2V0VHJpZ2dlckRhc2hib2FyZEZpbHRlckNoYW5nZSgpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhc2hib2FySWQgPSBlW1wiaWRcIl07XHJcbiAgICAgICAgY29uc3QgbmV3SWQgPSBlW1wibmV3SWRcIl07XHJcbiAgICAgICAgaWYgKGRhc2hib2FySWQgIT09IHRoaXMuZGFzaGJvYXJkLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YShuZXdJZCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2VcclxuICAgICAgICAuZ2V0Y2hhbmdlbGF5b3V0KClcclxuICAgICAgICAuc3Vic2NyaWJlKCh7IHN0YXR1cywgaWQgPSBcIlwiIH0pID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZCAmJiB0aGlzLmRhc2hib2FyZC5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gc3RhdHVzID09PSBcInRydWVcIiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pbml0bGF5b3V0KHBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5lZGl0UHJvcGVydGllcygpLnN1YnNjcmliZSgoeyBzdGF0dXMsIGlkIH0pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGFzaGJvYXJkIHx8IHRoaXMuZGFzaGJvYXJkLmlkICE9PSBpZCB8fCB0aGlzLnRpbWVyKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgLm9wZW4oRGF0YU1hcnROZXdDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIGVkaXQ6IHN0YXR1cyxcclxuICAgICAgICAgICAgICBkYXNoYm9hcmRJZDogdGhpcy51cmxfaWQsXHJcbiAgICAgICAgICAgICAgZGFzaGJvYXJkOiB0aGlzLmRhc2hib2FyZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBcIjg1JVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogXCI1NSVcIixcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBcInJlcG9ydC1kaWFsb2dcIixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBwdXNoX2J0biwgcG9ydGxldCwgZGFzaGJvYXJkIH0gPSBlO1xyXG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZCA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xyXG4gICAgICAgICAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAocG9ydGxldCk7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaF9idG4gPSBwdXNoX2J0bjtcclxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhdGFtYXJ0RW50aXR5Lm5leHQodGhpcy5kYXNoYm9hcmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0RG93bmxvYWREYXNoYm9yZCgpLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmRvd25sb2FkQWxsKCk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRhZGRwb3J0bGV0KCkuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRhc2hib2FyZCAmJiB0aGlzLmRhc2hib2FyZC5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnBvcnRsZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0cy5wdXNoKHRoaXMucG9ydGxldCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmZpZzogYW55ID1cclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0LmNvbmZpZyBpbnN0YW5jZW9mIFN0cmluZ1xyXG4gICAgICAgICAgICAgID8gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKVxyXG4gICAgICAgICAgICAgIDogdGhpcy5wb3J0bGV0LmNvbmZpZztcclxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBwb3J0bGV0VHlwZSA9XHJcbiAgICAgICAgICAgIGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgICAgICA/IGNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGVcclxuICAgICAgICAgICAgICA6IGNvbmZpZy5wb3J0bGV0VHlwZTtcclxuXHJcbiAgICAgICAgICAvLyDlj6rmnInmlrDlop7nmoRQb3JsZXTmmK/lm77ooajnsbvmiY3pnIDopoHliJ3lp4vljJZcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0ICYmXHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldC5jb25maWcgJiZcclxuICAgICAgICAgICAgW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMocG9ydGxldFR5cGUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q2hhckRhdGEoKTsgLy8g5ou85o6lQ2hhcnTpnIDopoHnlKjnmoTmlbDmja7mupBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZ2V0TmV3UG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRMZWZ0TWVudUJhcigpLnN1YnNjcmliZSgob3BlbikgPT4ge1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMucGFuZXNMaXN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgIHRoaXMucGFuZXNMaXN0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCAtIDE5NSArIFwicHhcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wYW5lc0xpc3QubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgMTk1ICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAZGVib3VuY2UoMTAwKVxyXG4gIHByaXZhdGUgZmlsdGVyRGF0YShpZCkge1xyXG4gICAgdGhpcy5jaGFydFVwZGF0ZShpZCk7XHJcbiAgfVxyXG5cclxuICBjaGFydFVwZGF0ZShpZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5oYXNDaGFuZ2VEYXRhVGFibGUgPSB0cnVlO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jaGFydFVwZGF0ZS5uZXh0KGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENoYXJEYXRhKCk7IC8vIOaLvOaOpUNoYXJ06ZyA6KaB55So55qE5pWw5o2u5rqQXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHtcclxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRJbmZvKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSk7XHJcbiAgICB0aGlzLmxhbmcgPSB0aGlzLnBiZi5nZXRMYW5ndWFnZVBhcmFtcygpO1xyXG4gICAgdGhpcy5kYXRlUGlwZUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZGF0ZVBpcGVcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UG9ybGV0Q29uZmlnKHBvcnRsZXQpIHtcclxuICAgIGlmICghcG9ydGxldC5jb25maWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICBpZiAoIWNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0xlZ2VuZCA9XHJcbiAgICAgICEhY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcuY2hhcnRTZXR0aW5ncy5sZWdlbmRTZXR0aW5ncy52aXNpYmxlO1xyXG4gICAgdGhpcy5lbmFibGVNdWx0aXBsZUF4aXMgPVxyXG4gICAgICBjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZy5jaGFydFNldHRpbmdzLmVuYWJsZU11bHRpcGxlQXhpcztcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGhlbWUoZSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWxlY3RlZFgsXHJcbiAgICAgIHNlbGVjdGVkWSxcclxuICAgICAgc2VsZWN0ZWRTZWNvbmRZLFxyXG4gICAgICBzZWxlY3RlZE11bHRpcGxlcyxcclxuICAgICAgc2VsZWN0VGhlbWUsXHJcbiAgICB9ID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRYID0gc2VsZWN0ZWRYO1xyXG4gICAgdGhpcy5zZWxlY3RlZFkgPSBzZWxlY3RlZFk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2Vjb25kWSA9IHNlbGVjdGVkU2Vjb25kWTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMgPSBzZWxlY3RlZE11bHRpcGxlcztcclxuICAgIHRoaXMuc2VsZWN0VGhlbWUgPSBzZWxlY3RUaGVtZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhc2hib2FyZChlKSB7XHJcbiAgICBjb25zdCB7IHBvcnRsZXRzLCBkYXNoYm9hcmQsIG5vRGV0ZWN0LCBzdGF5QWN0aXZlVGFiIH0gPSBlO1xyXG4gICAgdGhpcy5zdGF5QWN0aXZlVGFiID0gc3RheUFjdGl2ZVRhYjtcclxuICAgIHRoaXMuZGFzaGJvYXJkID0gY2xvbmVEZWVwKGRhc2hib2FyZCk7XHJcbiAgICB0aGlzLnBvcnRsZXRzID0gWy4uLnBvcnRsZXRzXTtcclxuICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhdGFtYXJ0RW50aXR5Lm5leHQoZGFzaGJvYXJkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUG9ybGV0Q29uZmlnKGUpIHtcclxuICAgIGNvbnN0IHsgbmV3SWQsIGNvbmZpZyB9ID0gZTtcclxuICAgIGNvbnN0IF9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBjb25maWcpO1xyXG4gICAgdGhpcy5wb3J0bGV0LmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoX2NvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQsIGkpID0+IHtcclxuICAgICAgaWYgKHBvcnRsZXQubmV3SWQgPT09IG5ld0lkKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1tpXS5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KF9jb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGxldHMgPSBbLi4udGhpcy5wb3J0bGV0c107XHJcbiAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdChpdGVtKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKTtcclxuICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgY29uZmlnLnBvcnRsZXRUeXBlID09PSBcImhpc3RvcmljYWxJUlJcIlxyXG4gICAgICAgID8gY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZVxyXG4gICAgICAgIDogY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgaWYgKFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKHBvcnRsZXRUeXBlKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkWSA9IGNvbmZpZ1tcInNlbGVjdGVkWVwiXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBjb25maWcuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkWCA9IGNvbmZpZ1tcInNlbGVjdGVkWFwiXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IGNvbmZpZ1tcInNlbGVjdGVkTXVsdGlwbGVzXCJdO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoZW1lID0gY29uZmlnW1wic2VsZWN0VGhlbWVcIl07XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5wdXNoX2J0bikge1xyXG4gICAgICB0aGlzLnNpZGViYXIucG9ydGxldCA9IHRoaXMucG9ydGxldDtcclxuICAgIH1cclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IHRydWU7XHJcbiAgICB0aGlzLmZpZ3VyZUNvZGUgPSBpdGVtLmZpZ3VyZUNvZGU7XHJcbiAgICB0aGlzLnRhYmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRFZGl0Lm5leHQodGhpcy51cmxfaWQpO1xyXG4gIH1cclxuXHJcbiAgQGRlYm91bmNlKDMwMClcclxuICBHZXRnYWRnZXRUaXRsZShjb25maWcpIHtcclxuICAgIGlmIChjb25maWcgJiYgY29uZmlnICE9PSBcIm51bGxcIikge1xyXG4gICAgICBsZXQgY29uZmlnXyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZ18uZ2FkZ2V0VGl0bGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQb3J0bGV0VHlwZShpdGVtKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBpdGVtICYmIGl0ZW0uY29uZmlnID8gSlNPTi5wYXJzZShpdGVtLmNvbmZpZykgOiB7fTtcclxuICAgIGlmIChjb25maWcucG9ydGxldFR5cGUpIHtcclxuICAgICAgaWYgKGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCIpIHtcclxuICAgICAgICByZXR1cm4gY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZShpdGVtKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KCh4KSA9PiB4Lm5ld0lkID09PSBpdGVtLm5ld0lkKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZVBhbmVsKGl0ZW0ubmV3SWQpO1xyXG4gICAgdGhpcy5wb3J0bGV0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgdGhpcy5nZXROZXdQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvcHlQb3J0bGV0KGl0ZW0pIHtcclxuICAgIGNvbnN0IHBvcnRsZXQgPSB7IC4uLml0ZW0gfTtcclxuICAgIHBvcnRsZXQuaWQgPSBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiO1xyXG4gICAgcG9ydGxldC5uZXdJZCA9IFwicG9ydGxldF9cIiArIHRoaXMucGJmLkd1aWQoKTtcclxuICAgIC8vIOWkhOeQhiAxLuWkjeWItuWIq+eahOWkjeWItuS9kyAgMi7mlrDlu7rnmoTkuKrkvZMgMy7lt7LlrZjlnKjnmoTkuKrkvZNcclxuICAgIHBvcnRsZXQuY29weUlkID0gcG9ydGxldC5jb3B5SWRcclxuICAgICAgPyBwb3J0bGV0LmNvcHlJZFxyXG4gICAgICA6IGl0ZW0uaWQgPT09IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJcclxuICAgICAgPyBpdGVtLm5ld0lkXHJcbiAgICAgIDogaXRlbS5pZDtcclxuICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucG9ydGxldERhdGFfTmV3W3RoaXMuZGFzaGJvYXJkLmlkXVtcclxuICAgICAgcG9ydGxldC5uZXdJZFxyXG4gICAgXSA9IGNsb25lRGVlcChcclxuICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5wb3J0bGV0RGF0YV9OZXdbdGhpcy5kYXNoYm9hcmQuaWRdW1xyXG4gICAgICAgIHBvcnRsZXQuY29weUlkXHJcbiAgICAgIF1cclxuICAgICk7XHJcbiAgICB0aGlzLnBvcnRsZXRzLnB1c2gocG9ydGxldCk7XHJcbiAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXNvZmRhdGUoaXRlbSkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoaXRlbS5jb25maWcpLmFzT2ZEYXRlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0Q3VycmVuY3koY29uZmlnKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb25maWcpLmN1cnJlbmN5Q29kZTtcclxuICB9XHJcbiAgcHVibGljIGdldEZpZ3VyZWNvZGUoZmlndXJlQ29kZSkge1xyXG4gICAgc3dpdGNoIChmaWd1cmVDb2RlKSB7XHJcbiAgICAgIGNhc2UgXCJUYXNrc1wiOlxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICBjYXNlIFwiRnVuZExpc3RcIjpcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgICAgY2FzZSBcIklSUlwiOlxyXG4gICAgICAgIHJldHVybiAzO1xyXG4gICAgICBjYXNlIFwiTm90ZXNcIjpcclxuICAgICAgICByZXR1cm4gNDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGdldFRhYmxlTmFtZShpdGVtKSB7XHJcbiAgICBsZXQgY29uZmlnID0gaXRlbS5jb25maWcgPyBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKSA6IHt9O1xyXG4gICAgaWYgKGNvbmZpZy5wb3J0bGV0VHlwZSkge1xyXG4gICAgICBsZXQgdHlwZUxpc3QgPSBbXCJ0YWJsZVwiLCBcImZpbmFuY2lhbFRhYmxlXCIsIFwidHJhbnNwb3NlXCIsIFwicGl2b3RcIl07XHJcbiAgICAgIGxldCBpZHggPSB0eXBlTGlzdC5pbmRleE9mKGNvbmZpZy5wb3J0bGV0VHlwZSk7XHJcbiAgICAgIHJldHVybiBpZHggPiAtMSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwdXNoU2xpZGVyKCkge1xyXG4gICAgdGhpcy5wdXNoX2J0biA9ICF0aGlzLnB1c2hfYnRuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWd1cmVDb2RlKGZpZ3VyZUNvZGUpIHtcclxuICAgIGxldCBjb2RlQXJyID0gW1wiVGFza3NcIiwgXCJGdW5kTGlzdFwiLCBcIklSUlwiLCBcIk5vdGVzXCJdO1xyXG4gICAgbGV0IGkgPSBjb2RlQXJyLmluZGV4T2YoZmlndXJlQ29kZSk7XHJcbiAgICByZXR1cm4gaSA+IC0xID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICB4O1xyXG4gIHk7XHJcblxyXG4gIHB1YmxpYyBnZXREYXNoYm9hcmQoKSB7XHJcbiAgICB0aGlzLnVybCA9IFwiZGFzaGJvYXJkRGV0YWlsXCI7XHJcbiAgICBsZXQgdXJsX2FyciA9IHRoaXMucGJmLmdldFJvdXRlclVybCgpLnNwbGl0KFwiP1wiKTtcclxuICAgIHRoaXMudXJsX2lkID0gdGhpcy5wYmYuZ2V0VXJsSWQodXJsX2FyclswXSk7XHJcbiAgICB0aGlzLnVybF90eXBlID1cclxuICAgICAgdXJsX2FyclsxXSA9PSBcImRhc2hib2FyZFR5cGU9Y3VzdG9taXplZEJldGFcIlxyXG4gICAgICAgID8gXCJjdXN0b21pemVkQmV0YVwiXHJcbiAgICAgICAgOiB1cmxfYXJyWzFdID09IFwiZGFzaGJvYXJkVHlwZT1zaGFyZWRCZXRhXCJcclxuICAgICAgICA/IFwic2hhcmVkQmV0YVwiXHJcbiAgICAgICAgOiBcIlwiO1xyXG4gICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5HZXREYXNoYm9hcmRWMShcclxuICAgICAgdGhpcy51cmxfaWQsXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIChyZXMsIHBvcnRsZXRzID0gW10pID0+IHtcclxuICAgICAgICB0aGlzLmhhc0luaXQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9ydGxldHMgPSBbLi4ucG9ydGxldHNdO1xyXG4gICAgICAgIHRoaXMuaW5pdGxheW91dChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlRGF0YW1hcnRFbnRpdHkubmV4dCh0aGlzLmRhc2hib2FyZCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXJ0VXBkYXRlKCk7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgICAgfSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZCA9IE9iamVjdC5hc3NpZ24oe30sIHJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkTGF5b3V0KSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHVibGljIHJvdXRlclBhZ2UoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiL3BhZ2VzL2Rhc2hib2FyZC9kYXNoYm9hcmRsaXN0XCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc3BsYXlJY29uUHJvbXB0KGl0ZW0pIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKS5wb3J0bGV0VHlwZSB8fFxyXG4gICAgICB0aGlzLmdldEZpZ3VyZUNvZGUoaXRlbS5maWd1cmVDb2RlKVxyXG4gICAgICA/IGZhbHNlXHJcbiAgICAgIDogdHJ1ZTtcclxuICB9XHJcbiAgcHVibGljIGFzeW5jIGNvbmZpZ3VyYXRpb25zKGl0ZW0sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBwb3J0bGV0VHlwZSA9IHRoaXMuZ2V0UG9ydGxldFR5cGUoaXRlbSk7XHJcbiAgICBzd2l0Y2ggKHBvcnRsZXRUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ0YWJsZVwiOlxyXG4gICAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAgICh0aGlzLnRhYmxlIGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRhYmxlLmdyaWQgJiZcclxuICAgICAgICAgIHRhYmxlLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkgJiZcclxuICAgICAgICAgIHRhYmxlLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBsZXQgbWFzazogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwaXZvdC10YWJsZS1tYXNrXCIpO1xyXG4gICAgICAgICAgLy8gaWYgKG1hc2spIG1hc2suc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICAgIGxldCBfeSA9IDA7XHJcbiAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgeSB9ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgLSB5IDwgNDAwKSB7XHJcbiAgICAgICAgICAgICAgX3kgPSAtNDE1O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0YWJsZS5ncmlkICYmXHJcbiAgICAgICAgICAgIHRhYmxlLmdyaWQuY29sdW1uQ2hvb3Nlck1vZHVsZSAmJlxyXG4gICAgICAgICAgICB0YWJsZS5ncmlkLmNvbHVtbkNob29zZXJNb2R1bGUub3BlbkNvbHVtbkNob29zZXIoMjAwLCBfeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwibmV3Y2hhcnRcIjpcclxuICAgICAgY2FzZSBcInBpdm90XCI6XHJcbiAgICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICAgKHRoaXMucGl2b3QgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcGl2b3QuZmllbGRsaXN0T2JqLmRpYWxvZ1JlbmRlcmVyICYmXHJcbiAgICAgICAgICBwaXZvdC5maWVsZGxpc3RPYmouZGlhbG9nUmVuZGVyZXIuZmllbGRMaXN0RGlhbG9nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwaXZvdC5maWVsZGxpc3RPYmouZGlhbG9nUmVuZGVyZXIuZmllbGRMaXN0RGlhbG9nLnNob3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJ0cmFuc3Bvc2VcIjpcclxuICAgICAgICBjb25zdCB0cmFuc3Bvc2UgPSBmaW5kKFxyXG4gICAgICAgICAgKHRoaXMudHJhbnNwb3NlIGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIOW8gOWQr+mAgumFjSDmiYvliqjnvKnlsI9cclxuICAgICAgICB0cmFuc3Bvc2UuZ3JpZC5jb2x1bW5DaG9vc2VyTW9kdWxlLnNob3dDdXN0b21Db2x1bW5DaG9vc2VyKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZGxnOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICBcIi5lLXJlc2NvbHVtbmNob29zZXJkaXYuZS1yZXNwb25zaXZlLWRpYWxvZ1wiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGRsZykge1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUub3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgIGRsZy5zdHlsZS5zZXRQcm9wZXJ0eShcIndpZHRoXCIsIFwiMzAwcHhcIiwgXCJpbXBvcnRhbnRcIik7XHJcbiAgICAgICAgICAgIGRsZy5zdHlsZS5zZXRQcm9wZXJ0eShcImhlaWdodFwiLCBcIjM1MHB4XCIsIFwiaW1wb3J0YW50XCIpO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIsIFwiaW1wb3J0YW50XCIpO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgICAgZXZlbnQuY2xpZW50WCAtIDEzNSArIFwicHhcIixcclxuICAgICAgICAgICAgICBcImltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGRsZy5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAgICAgICBcInRvcFwiLFxyXG4gICAgICAgICAgICAgIGV2ZW50LmNsaWVudFkgKyAzMCArIFwicHhcIixcclxuICAgICAgICAgICAgICBcImltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFByZXZJZCgpIHtcclxuICAgIHRoaXMudGFiTGlzdC5mb3JFYWNoKCh0YWIsIGkpID0+IHtcclxuICAgICAgaWYgKHRhYi5pZCA9PT0gdGhpcy5hY3RpdmVUYWIpIHtcclxuICAgICAgICBpZiAodGhpcy50YWJMaXN0W2kgLSAxXSkge1xyXG4gICAgICAgICAgdGhpcy5wcmV2SWQgPSB0aGlzLnRhYkxpc3RbaSAtIDFdLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wKGUpIHtcclxuICAgIGNvbnN0IHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0gPSBlO1xyXG4gICAgY29uc3QgcHJldklkID0gdGhpcy50YWJMaXN0W3ByZXZpb3VzSW5kZXhdLmlkO1xyXG4gICAgY29uc3QgY3VycklkID0gdGhpcy50YWJMaXN0W2N1cnJlbnRJbmRleF0uaWQ7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHRoaXMudGFiTGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCB0YWJJZCA9IHRoaXMudGFiTGlzdFtpXS5pZDtcclxuICAgICAgaWYgKHRhYklkID09PSBwcmV2SWQpIHtcclxuICAgICAgICB0aGlzLnRhYkxpc3RbaV0uaWQgPSBjdXJySWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhYklkID09PSBjdXJySWQpIHtcclxuICAgICAgICB0aGlzLnRhYkxpc3RbaV0uaWQgPSBwcmV2SWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnBvcnRsZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0c1tpXS5jb25maWcpO1xyXG4gICAgICBjb25zdCB0YWJJZCA9IGNvbmZpZy50YWJJZDtcclxuICAgICAgaWYgKHRhYklkID09PSBwcmV2SWQpIHtcclxuICAgICAgICBjb25maWcudGFiSWQgPSBjdXJySWQ7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1tpXS5jb25maWcgPSBKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0YWJJZCA9PT0gY3VycklkKSB7XHJcbiAgICAgICAgY29uZmlnLnRhYklkID0gcHJldklkO1xyXG4gICAgICAgIHRoaXMucG9ydGxldHNbaV0uY29uZmlnID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiID09PSBjdXJySWQpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSBwcmV2SWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVGFiID09PSBwcmV2SWQpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSBjdXJySWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFByZXZJZCgpO1xyXG4gICAgW3RoaXMudGFiTGlzdFtwcmV2aW91c0luZGV4XSwgdGhpcy50YWJMaXN0W2N1cnJlbnRJbmRleF1dID0gW1xyXG4gICAgICB0aGlzLnRhYkxpc3RbY3VycmVudEluZGV4XSxcclxuICAgICAgdGhpcy50YWJMaXN0W3ByZXZpb3VzSW5kZXhdLFxyXG4gICAgXTtcclxuICAgIHRoaXMudGFiTGlzdCA9IFsuLi50aGlzLnRhYkxpc3RdO1xyXG5cclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBjbG9zZUFsbCgpIHtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICBsZXQgaGFzQ29uZmlnID0gZmFsc2U7XHJcbiAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQpID0+IHtcclxuICAgICAgY29uc3QgcG9ydGxldFR5cGUgPSB0aGlzLmdldFBvcnRsZXRUeXBlKHBvcnRsZXQpO1xyXG4gICAgICBzd2l0Y2ggKHBvcnRsZXRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcInBpdm90XCI6XHJcbiAgICAgICAgY2FzZSBcIm5ld2NoYXJ0XCI6XHJcbiAgICAgICAgICBjb25zdCBkb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICAgICAgYCR7cG9ydGxldC5uZXdJZH1fRGVmZXJVcGRhdGVCdXR0b24yYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkb20pIHtcclxuICAgICAgICAgICAgaGFzQ29uZmlnID0gdHJ1ZTtcclxuICAgICAgICAgICAgZG9tLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGFibGVcIjpcclxuICAgICAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1jYy1jbmJ0blwiKTtcclxuICAgICAgICAgIGlmIChjYW5jZWxCdG4pIHtcclxuICAgICAgICAgICAgaGFzQ29uZmlnID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBjYW5jZWxCdG4uY2xpY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChoYXNDb25maWcpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSwgNDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc0NvbmZpZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZEFsbCgpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUGFuZURvd25sb2FkQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwb3J0bGV0czogdGhpcy5wb3J0bGV0cyxcclxuICAgICAgICBkYXNoYm9hcmQ6IHRoaXMuZGFzaGJvYXJkLFxyXG4gICAgICB9LFxyXG4gICAgICBoZWlnaHQ6IFwiODUwcHhcIixcclxuICAgICAgd2lkdGg6IFwiNTYycHhcIixcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZChpdGVtKSB7XHJcbiAgICBjb25zdCBwb3J0bGV0VHlwZSA9IHRoaXMuZ2V0UG9ydGxldFR5cGUoaXRlbSk7XHJcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuR2V0Z2FkZ2V0VGl0bGUoaXRlbS5jb25maWcpO1xyXG4gICAgc3dpdGNoIChwb3J0bGV0VHlwZSkge1xyXG4gICAgICBjYXNlIFwidGFibGVcIjpcclxuICAgICAgICB0aGlzLmRvd25sb2FkVGFibGUoaXRlbSwgdGl0bGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwibmV3Y2hhcnRcIjpcclxuICAgICAgY2FzZSBcInBpdm90XCI6XHJcbiAgICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICAgKHRoaXMucGl2b3QgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcGl2b3QuaGVhZFJvd1NwYW4gPSAwOyAvL+mHjee9ruWvvOWHumhlYWRlcuWkhOeQhlxyXG4gICAgICAgIHBpdm90LmhlYWRSb3dDb3VudCA9IDA7IC8v6YeN572u5a+85Ye6aGVhZGVy5aSE55CGXHJcbiAgICAgICAgY29uc3QgZXhjZWxFeHBvcnRQcm9wZXJ0aWVzX3Bpdm90OiBFeGNlbEV4cG9ydFByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICBmaWxlTmFtZTogdGl0bGVcclxuICAgICAgICAgICAgPyB0aXRsZSArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgICA6IFwiUGl2b3QtXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyBcIi54bHN4XCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzKSB7XHJcbiAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZm9ybWF0U2V0dGluZ3MuZm9yRWFjaChcclxuICAgICAgICAgICAgKHNldHRpbmcpID0+IHtcclxuICAgICAgICAgICAgICAvLyBzeW5jZnVzaW9uIGZvcm1hdCB0cmFuc2Zvcm0gdG8gZXhjZWwgZm9ybWF0XHJcbiAgICAgICAgICAgICAgY29uc3QgbWFwID0ge1xyXG4gICAgICAgICAgICAgICAgXCIjLCMjIywsLjA7KCMsIyMjLCwuMClcIjogJzAuMCwsXCJcIjsoMC4wLCwpJyxcclxuICAgICAgICAgICAgICAgICcwLjAsLFwiXCI7KDAuMCwsKSc6IFwiIywjIyMsLC4wOygjLCMjIywsLjApXCIsXHJcbiAgICAgICAgICAgICAgICBcIiMsIyMjLCw7KCMsIyMjLCwpXCI6ICcwLCxcIlwiOygwLCwpJyxcclxuICAgICAgICAgICAgICAgICcwLCxcIlwiOygwLCwpJzogXCIjLCMjIywsOygjLCMjIywsKVwiLFxyXG4gICAgICAgICAgICAgICAgXCIjLCMjIywsLjAwOygjLCMjIywsLjAwKVwiOiAnMC4wMCwsXCJcIjsoMC4wMCwsKScsXHJcbiAgICAgICAgICAgICAgICAnMC4wMCwsXCJcIjsoMC4wMCwsKSc6IFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIixcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBpZiAobWFwW3NldHRpbmcuZm9ybWF0XSkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy5mb3JtYXQgPSBtYXBbc2V0dGluZy5mb3JtYXRdO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHNldHRpbmcuZm9ybWF0ID0gbWFwW3NldHRpbmcuZm9ybWF0XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoXHJcbiAgICAgICAgICBwaXZvdC5waXZvdE9iai5ncmlkLmNvbHVtbnMgYXMgQ29sdW1uTW9kZWxbXSxcclxuICAgICAgICAgIHBpdm90LnBpdm90T2JqXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwaXZvdC5waXZvdE9iai5leGNlbEV4cG9ydChleGNlbEV4cG9ydFByb3BlcnRpZXNfcGl2b3QpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlIFwidHJhbnNwb3NlXCI6XHJcbiAgICAgIC8vIFx0Ly8gY29uc3QgdHJhbnNwb3NlID0gZmluZChcclxuICAgICAgLy8gXHQvLyBcdCh0aGlzLnRyYW5zcG9zZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAvLyBcdC8vIFx0KGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgIC8vIFx0Ly8gKTtcclxuICAgICAgLy8gXHRicmVhaztcclxuICAgICAgY2FzZSBcIm5ld2NvbHVtblwiOlxyXG4gICAgICBjYXNlIFwibmV3bGluZVwiOlxyXG4gICAgICBjYXNlIFwibmV3Y29sdW1ubGluZVwiOlxyXG4gICAgICAgIGNvbnN0IGNoYXJ0SWR4ID0gdGhpcy5nZXRDaGFydEluZGV4SW5BbGwoaXRlbSk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb21wb25lbnQgPSB0aGlzLm5ld0NoYXJ0LnRvQXJyYXkoKVtjaGFydElkeF07XHJcbiAgICAgICAgc2VsZWN0ZWRDb21wb25lbnQuZXhwb3J0Q2hhcnQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOagueaNrmlkeOiOt+WPlueCueWHu+WbvuihqOWcqOWbvuihqOWIl+ihqOmHjOeahOecn+ato+mhuuW6j1xyXG4gIGdldENoYXJ0SW5kZXhJbkFsbChpdGVtKSB7XHJcbiAgICBjb25zdCBjaGFyQXJyID0gdGhpcy5BY3RpdmVEYXNoYm9hcmRQb3J0bGV0cy5maWx0ZXIoKGUpID0+IHtcclxuICAgICAgcmV0dXJuIFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKFxyXG4gICAgICAgIEpTT04ucGFyc2UoZS5jb25maWcpLnBvcnRsZXRUeXBlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGxldCByZXN1bHRJZHggPSAwO1xyXG4gICAgaWYgKGNoYXJBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGFyQXJyLmZvckVhY2goKGUsIGlkeCkgPT4ge1xyXG4gICAgICAgIGlmIChlLm5ld0lkID09IGl0ZW0ubmV3SWQpIHtcclxuICAgICAgICAgIHJlc3VsdElkeCA9IGlkeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdElkeDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZFRhYmxlKGl0ZW0sIHRpdGxlKSB7XHJcbiAgICAvLyBUYWJsZSDkuIvovb3lhajpg6jmlbDmja5cclxuICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKTtcclxuICAgIGxldCBwYWdlU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHtcclxuICAgICAgICBjdXJyZW50UGFnZTogMSxcclxuICAgICAgICBwYWdlU2l6ZTogOTk5OTk5OSxcclxuICAgICAgfSxcclxuICAgICAgY29uZmlnICYmIGNvbmZpZy50YWJsZVNvcnRTZXR0aW5nXHJcbiAgICApO1xyXG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UGFyYW1zQnlQb3J0bGV0KFxyXG4gICAgICBpdGVtLFxyXG4gICAgICBwYWdlU2V0dGluZyxcclxuICAgICAgbnVsbCxcclxuICAgICAgdGhpcy5kYXNoYm9hcmRcclxuICAgICk7XHJcbiAgICAvLyBqc29uIGJ1ZmZlclxyXG4gICAgdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0KHRoaXMuYXBpLmJhc2V1cmwgKyB0aGlzLmFwaS51cmxMaXN0LkdldFBvcnRsZXREYXRhVjIsIHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAgICAgICAodGhpcy50YWJsZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBleGNlbEV4cG9ydFByb3BlcnRpZXM6IEV4Y2VsRXhwb3J0UHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICBmaWxlTmFtZTogdGl0bGVcclxuICAgICAgICAgICAgICAgID8gdGl0bGUgKyBcIi54bHN4XCJcclxuICAgICAgICAgICAgICAgIDogXCJUYWJsZS1cIiArIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArIFwiLnhsc3hcIixcclxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZTogcmVzdWx0LmRhdGEsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgICAgICAgIHRhYmxlLmdyaWQuZXhjZWxFeHBvcnQoZXhjZWxFeHBvcnRQcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7fSxcclxuICAgICAgICAoKSA9PiB7fVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXQoY29sdW1uczogQ29sdW1uTW9kZWxbXSwgcGl2b3RPYmopIHtcclxuICAgIHZhciBmTGlzdCA9IHBpdm90T2JqLnJlbmRlck1vZHVsZS5nZXRGb3JtYXRMaXN0KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIChjb2x1bW5zW2ldIGFzIENvbHVtbk1vZGVsKS5jb2x1bW5zICYmXHJcbiAgICAgICAgKGNvbHVtbnNbaV0gYXMgQ29sdW1uTW9kZWwpLmNvbHVtbnMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdChcclxuICAgICAgICAgIChjb2x1bW5zW2ldIGFzIENvbHVtbk1vZGVsKS5jb2x1bW5zIGFzIENvbHVtbk1vZGVsW10sXHJcbiAgICAgICAgICBwaXZvdE9ialxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sdW1uc1tpXS5jdXN0b21BdHRyaWJ1dGVzICYmXHJcbiAgICAgICAgICBmTGlzdFsoY29sdW1uc1tpXS5jdXN0b21BdHRyaWJ1dGVzLmNlbGwgYXMgSUF4aXNTZXQpLmFjdHVhbFRleHRdID09PVxyXG4gICAgICAgICAgICBcIk5cIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgKGNvbHVtbnNbaV0gYXMgQ29sdW1uTW9kZWwpLmZvcm1hdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWVsZEZvcm1hdChpdGVtKSB7XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAoaXRlbSk7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEZpZWxkRm9ybWF0Q29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwb3J0bGV0RGF0YTogaXRlbSxcclxuICAgICAgICBwb3J0bGV0czogdGhpcy5wb3J0bGV0cyxcclxuICAgICAgfSxcclxuICAgICAgaGVpZ2h0OiBcIjg1MHB4XCIsXHJcbiAgICAgIG1pbldpZHRoOiBcIjU2MnB4XCIsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgcGFuZWxDbGFzczogXCJkaWFsb2ctcG9zaXRpb25cIixcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuRmlsdGVyKGl0ZW0pIHtcclxuICAgIHRoaXMucG9ydGxldCA9IGNsb25lRGVlcChpdGVtKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IHRydWU7XHJcbiAgICB0aGlzLmZpZ3VyZUNvZGUgPSBpdGVtLmZpZ3VyZUNvZGU7XHJcbiAgICB0aGlzLnRhYmFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UucG9ydGxldEVkaXQubmV4dCh0aGlzLnVybF9pZCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQdXNoQnRuKGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHVzaF9idG4gPSBlO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDdXN0b21pemUoY3VzdG9taXplZCkge1xyXG4gICAgdGhpcy5jdXN0b21pemVkID0gY3VzdG9taXplZDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2lkZWJhcihib29sKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gYm9vbDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVUYWJhY3RpdmUoYm9vbCkge1xyXG4gICAgdGhpcy50YWJhY3RpdmUgPSBib29sO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQb3JsZXQocG9ydGxldCkge1xyXG4gICAgaWYgKCFwb3J0bGV0KSB7XHJcbiAgICAgIHRoaXMucG9ydGxldCA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucG9ydGxldCA9IGNsb25lRGVlcChwb3J0bGV0KTtcclxuICAgIHRoaXMucG9ydGxldHMuZm9yRWFjaCgoX3BvcnRsZXQsIGkpID0+IHtcclxuICAgICAgaWYgKF9wb3J0bGV0Lm5ld0lkID09PSBwb3J0bGV0Lm5ld0lkKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1tpXSA9IE9iamVjdC5hc3NpZ24oe30sIHBvcnRsZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGxldHMgPSBbLi4udGhpcy5wb3J0bGV0c107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkUG9ybGV0KCkge1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IHRydWU7XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gdHJ1ZTtcclxuICAgIHRoaXMucG9ydGxldCA9IG51bGw7XHJcbiAgICB0aGlzLnRhYmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNyZWF0ZV9idG4ubmV4dCh0aGlzLnVybF9pZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VTaWRlYmFyKGUpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplU3RvcChhcmdzKSB7XHJcbiAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgICBpZiAoYXJncy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1ncmlkXCIpKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAodGhpcy50YWJsZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gYXJncy5lbGVtZW50LmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgIHRhYmxlLmdyaWQuaGVpZ2h0ID0gcGFyc2VJbnQoYXJncy5lbGVtZW50LnN0eWxlLmhlaWdodCkgLSA4MDtcclxuICAgICAgICB0YWJsZS5ncmlkLnJlZnJlc2hDb2x1bW5zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXJncy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1waXZvdHZpZXdcIikpIHtcclxuICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICh0aGlzLnBpdm90IGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBhcmdzLmVsZW1lbnQuaWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHBpdm90KSB7XHJcbiAgICAgICAgcGl2b3QucGl2b3RPYmoubGF5b3V0UmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnU3RvcChlKSB7XHJcbiAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXdQb3NpdGlvbigpIHtcclxuICAgIGNvbnN0IHBkYXRhID0gdGhpcy5kYXNoYm9hcmRMYXlvdXQuc2VyaWFsaXplKCk7XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gWy4uLnBkYXRhXTtcclxuICAgIHRoaXMucG9ydGxldHMuZm9yRWFjaCgocG9ydGxldCkgPT4ge1xyXG4gICAgICBwZGF0YS5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgaWYgKHBvcnRsZXQubmV3SWQgPT09IHAuaWQpIHtcclxuICAgICAgICAgIHBvcnRsZXQgPSB7XHJcbiAgICAgICAgICAgIC4uLnBvcnRsZXQsXHJcbiAgICAgICAgICAgIHBvc1g6IHAuY29sLFxyXG4gICAgICAgICAgICBwb3NZOiBwLnJvdyxcclxuICAgICAgICAgICAgY29sOiBwLmNvbCxcclxuICAgICAgICAgICAgcm93OiBwLnJvdyxcclxuICAgICAgICAgICAgd2lkdGg6IHAuc2l6ZVgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcC5zaXplWSxcclxuICAgICAgICAgICAgc2l6ZVg6IHAuc2l6ZVgsXHJcbiAgICAgICAgICAgIHNpemVZOiBwLnNpemVZLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9wZW5TdWJ0b3RhbChpdGVtKSB7XHJcbiAgICB0aGlzLkN1cnJlbnRfUG9ydGxldElkID0gaXRlbS5uZXdJZDtcclxuICAgIHRoaXMuY29uZmlnID0gaXRlbS5jb25maWcgPyBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKSA6IHt9O1xyXG4gICAgdGhpcy5waXZvdFRhYmxlU3ViVG90YWxMaXN0Lm1hcCgoZWwpID0+IHtcclxuICAgICAgZWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRTZWxlY3RUb3RhbEdyb3VwU3RhdHVzKFwic3ViXCIpO1xyXG4gICAgdGhpcy5zaG93U3ViVG90YWxHcm91cCA9ICF0aGlzLnNob3dTdWJUb3RhbEdyb3VwO1xyXG4gICAgdGhpcy5zaG93Z3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvcGVuR3JhbmR0b3RhbChpdGVtKSB7XHJcbiAgICB0aGlzLkN1cnJlbnRfUG9ydGxldElkID0gaXRlbS5uZXdJZDtcclxuICAgIHRoaXMuY29uZmlnID0gaXRlbS5jb25maWcgPyBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKSA6IHt9O1xyXG4gICAgdGhpcy5waXZvdFRhYmxlR3JhbmRUb3RhbExpc3QubWFwKChlbCkgPT4ge1xyXG4gICAgICBlbC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5nZXRQb3J0bGV0VHlwZShpdGVtKSA9PT0gXCJ0YWJsZVwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0VG90YWxHcm91cFN0YXR1cyhcInRhYmxlR3JhbmRcIik7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gIXRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRTZWxlY3RUb3RhbEdyb3VwU3RhdHVzKCk7XHJcbiAgICAgIHRoaXMuc2hvd2dyYW5kVG90YWxHcm91cCA9ICF0aGlzLnNob3dncmFuZFRvdGFsR3JvdXA7XHJcbiAgICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFRvdGFsR3JvdXAoaW5kZXgsIHR5cGUsIGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdldFBvcnRsZXRUeXBlKGl0ZW0pID09PSBcInBpdm90XCIpIHtcclxuICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICh0aGlzLnBpdm90IGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0eXBlID09PSBcInN1YlwiKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U3ViVG90YWxHcm91cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdC5mb3JFYWNoKChzdWJ0b3RhbCkgPT4ge1xyXG4gICAgICAgICAgc3VidG90YWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3RbaW5kZXhdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAocGl2b3QucGl2b3RPYmopIHtcclxuICAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1Jvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5TdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgZ2l0ZW0gb2YgdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChmbCkgPT4gZmwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkWzBdLnNob3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuZmllbGRzLm1hcCgoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLnNob3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChmbCkgPT4gZmwuY29sTmFtZSA9PT0gaXRlbS5uYW1lXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgZmllbGRbMF0uc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1Jvd1N1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd2dyYW5kVG90YWxHcm91cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0LmZvckVhY2goKGdyYW5kdG90YWwpID0+IHtcclxuICAgICAgICAgIGdyYW5kdG90YWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdFtpbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChwaXZvdC5waXZvdE9iaikge1xyXG4gICAgICAgICAgc3dpdGNoIChpbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0dyYW5kVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93R3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0NvbHVtbkdyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwaXZvdC5waXZvdE9iaikge1xyXG4gICAgICAgIHBpdm90LnBpdm90T2JqLnJlbmRlcigpO1xyXG4gICAgICAgIGl0ZW0uY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgcG9ydGxldEluZGV4ID0gdGhpcy5wb3J0bGV0cy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoeCkgPT4geC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1twb3J0bGV0SW5kZXhdID0gaXRlbTtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2hhbmdlUGl2b3QubmV4dChpdGVtLm5ld0lkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGFibGUgPSBmaW5kKFxyXG4gICAgICAgICh0aGlzLnRhYmxlIGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGFibGVHcmFuZFRvdGFsTGlzdC5mb3JFYWNoKChncmFuZHRvdGFsKSA9PiB7XHJcbiAgICAgICAgZ3JhbmR0b3RhbC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50YWJsZUdyYW5kVG90YWxMaXN0W2luZGV4XS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFibGUuZ3JpZC5lbGVtZW50XHJcbiAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCIuZS1ncmlkZm9vdGVyXCIpXHJcbiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlc3VtbWFyeVwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YWJsZS5ncmlkLmVsZW1lbnRcclxuICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5lLWdyaWRmb290ZXJcIilcclxuICAgICAgICAgICAgICAuY2xhc3NMaXN0LmFkZChcImhpZGVzdW1tYXJ5XCIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlbS5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuICAgICAgICBjb25zdCBwb3J0bGV0SW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleChcclxuICAgICAgICAgICh4KSA9PiB4Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvcnRsZXRzW3BvcnRsZXRJbmRleF0gPSBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RUb3RhbEdyb3VwU3RhdHVzKHR5cGU/KSB7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdWJcIikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5TdWJUb3RhbHNcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlU3ViVG90YWxMaXN0WzFdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICAhdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3RbMl0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzICYmXHJcbiAgICAgICAgIXRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdFszXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0YWJsZUdyYW5kXCIpIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscykge1xyXG4gICAgICAgIHRoaXMudGFibGVHcmFuZFRvdGFsTGlzdFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMpIHtcclxuICAgICAgICB0aGlzLnRhYmxlR3JhbmRUb3RhbExpc3RbMV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0WzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdFsxXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgICF0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHNcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlR3JhbmRUb3RhbExpc3RbMl0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgJiZcclxuICAgICAgICAhdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0WzNdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdENoYXJEYXRhKG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5kYXNoYm9hcmQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVzT2JqID0ge307IC8vIOeUqOadpee/u+ivkVxyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZpZWxkc0Fyclt0aGlzLmRhc2hib2FyZC5pZF0pIHtcclxuICAgICAgaWYgKHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZmllbGRzQXJyW3RoaXMuZGFzaGJvYXJkLmlkXVtpXSkge1xyXG4gICAgICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZmllbGRzQXJyW3RoaXMuZGFzaGJvYXJkLmlkXVtpXS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHQpID0+IHtcclxuICAgICAgICAgICAgZmlsZXNPYmpbdC5jb2xOYW1lXSA9IHRbXCJsYW5nQ29kZVwiXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgaWYgKCFlLmNvbmZpZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGUuY29uZmlnKTtcclxuICAgICAgLy8g5aaC5p6c5pivIGhpc3RvcmljYWxJUlLvvIzmoLnmja4gdmlzdWFsVHlwZSDov5vooYzmuLLmn5NcclxuICAgICAgY29uc3QgcG9ydGxldFR5cGUgPVxyXG4gICAgICAgIGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgID8gY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZVxyXG4gICAgICAgICAgOiBjb25maWcucG9ydGxldFR5cGU7XHJcbiAgICAgIGxldCBpc05ld0NoYXJ0ID0gW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMoXHJcbiAgICAgICAgcG9ydGxldFR5cGVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChpc05ld0NoYXJ0KSB7XHJcbiAgICAgICAgbGV0IGRhdGFDb2x1bW4gPSBbXTtcclxuICAgICAgICBsZXQgZGF0YUxpbmUgPSBbXTtcclxuICAgICAgICBsZXQgeVhpYXMgPSBbXTtcclxuICAgICAgICBsZXQgc2Vjb25kWVhpYXMgPSBbXTtcclxuICAgICAgICAvLyBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGUuY29uZmlnKTtcclxuICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGVkWSAmJiBjb25maWcuc2VsZWN0ZWRZLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHlYaWFzID0gY29uZmlnLnNlbGVjdGVkWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWNvbmRZICYmIGNvbmZpZy5zZWxlY3RlZFNlY29uZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgc2Vjb25kWVhpYXMgPSBjb25maWcuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRhdGFJdGVtO1xyXG4gICAgICAgIGlmIChlLmlkICYmIGUuaWQgIT0gXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIikge1xyXG4gICAgICAgICAgZGF0YUl0ZW0gPVxyXG4gICAgICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBvcnRsZXREYXRhX05ld1t0aGlzLmRhc2hib2FyZC5pZF1bXHJcbiAgICAgICAgICAgICAgZS5pZFxyXG4gICAgICAgICAgICBdIHx8IFtdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5uZXdJZCkge1xyXG4gICAgICAgICAgZGF0YUl0ZW0gPVxyXG4gICAgICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBvcnRsZXREYXRhX05ld1t0aGlzLmRhc2hib2FyZC5pZF1bXHJcbiAgICAgICAgICAgICAgZS5uZXdJZFxyXG4gICAgICAgICAgICBdIHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YUl0ZW0gJiYgZGF0YUl0ZW0uZGF0YSAmJiBkYXRhSXRlbS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHhBeGlzRmllbGQgPSBjb25maWcuZmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29sTmFtZSA9PT0gY29uZmlnLnNlbGVjdGVkWFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGRhdGFJdGVtLmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwZXJpb2QgPVxyXG4gICAgICAgICAgICAgIHhBeGlzRmllbGQgJiYgeEF4aXNGaWVsZC5kYXRhVHlwZSA9PT0gXCJkYXRlXCJcclxuICAgICAgICAgICAgICAgID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oaXRlbVtjb25maWcuc2VsZWN0ZWRYXSwgXCJ5eXl5LU1NLWRkXCIpXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW1bY29uZmlnLnNlbGVjdGVkWF07XHJcbiAgICAgICAgICAgIGlmIChwb3J0bGV0VHlwZSA9PSBcIm5ld2xpbmVcIikge1xyXG4gICAgICAgICAgICAgIGlmICh5WGlhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0geyBwZXJpb2QgfTtcclxuICAgICAgICAgICAgICAgIHlYaWFzLmZvckVhY2goKHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb2JqW3RoaXMudHJhbnNsYXRpb25bZmlsZXNPYmpbeV1dIHx8IHldID0gaXRlbVt5XTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZGF0YUxpbmUucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoeVhpYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHsgcGVyaW9kIH07XHJcbiAgICAgICAgICAgICAgICB5WGlhcy5mb3JFYWNoKCh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9ialt0aGlzLnRyYW5zbGF0aW9uW2ZpbGVzT2JqW3ldXSB8fCB5XSA9IGl0ZW1beV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRhdGFDb2x1bW4ucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNlY29uZFlYaWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7IHBlcmlvZCB9O1xyXG4gICAgICAgICAgICAgICAgc2Vjb25kWVhpYXMuZm9yRWFjaCgoeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBvYmpbdGhpcy50cmFuc2xhdGlvbltmaWxlc09ialt5XV0gfHwgeV0gPSBpdGVtW3ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkYXRhTGluZS5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOaXtumXtOaOkuW6j1xyXG4gICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRYID09IFwiRGF0ZVwiKSB7XHJcbiAgICAgICAgICBkYXRhQ29sdW1uICYmIGRhdGFDb2x1bW4uc29ydCh0aGlzLmNvbXBhcmVEYXRlcyk7XHJcbiAgICAgICAgICBkYXRhTGluZSAmJiBkYXRhTGluZS5zb3J0KHRoaXMuY29tcGFyZURhdGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOi1i+WAvGRhdGFDb2x1bW7lkoxkYXRhTGluZeWvueW6lOeahFR5cGVcclxuICAgICAgICBjb25maWcuZmllbGRzLmZvckVhY2goKHQpID0+IHtcclxuICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRZICYmIGNvbmZpZy5zZWxlY3RlZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodFtcImNvbE5hbWVcIl0gPT0gY29uZmlnLnNlbGVjdGVkWVswXSkge1xyXG4gICAgICAgICAgICAgIGVbXCJjb2x1bW5UeXBlXCJdID0gdFtcImRhdGFUeXBlXCJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZy5zZWxlY3RlZFNlY29uZFkgJiYgY29uZmlnLnNlbGVjdGVkU2Vjb25kWS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0W1wiY29sTmFtZVwiXSA9PSBjb25maWcuc2VsZWN0ZWRTZWNvbmRZWzBdKSB7XHJcbiAgICAgICAgICAgICAgZVtcImxpbmVUeXBlXCJdID0gdFtcImRhdGFUeXBlXCJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGVbXCJkYXRhQ29sdW1uXCJdID0gZGF0YUNvbHVtbjtcclxuICAgICAgICBlW1wiZGF0YUxpbmVcIl0gPSBkYXRhTGluZTtcclxuICAgICAgICBpZiAoY29uZmlnW1wic2VsZWN0VGhlbWVcIl0pIHtcclxuICAgICAgICAgIGVbXCJ0aGVtZUNvbG9yXCJdID0gdGhpcy50aGVtZU9ialtjb25maWdbXCJzZWxlY3RUaGVtZVwiXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcGFyZURhdGVzKGEsIGIpIHtcclxuICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5wZXJpb2QpO1xyXG4gICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnBlcmlvZCk7XHJcblxyXG4gICAgaWYgKGRhdGVBIDwgZGF0ZUIpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfSBlbHNlIGlmIChkYXRlQSA+IGRhdGVCKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZVRleHQodGV4dCwgbWF4V2lkdGggPSA3MCwgZm9udFNpemUgPSAxMSkge1xyXG4gICAgLy8g5Yib5bu65LiA5Liq6ZqQ5b2i55qEIHNwYW4g5p2l5rWL6YeP5paH5pys5a695bqmXHJcbiAgICBjb25zdCBtZWFzdXJlU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBtZWFzdXJlU3Bhbi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG1lYXN1cmVTcGFuLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgbWVhc3VyZVNwYW4uc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZSArIFwicHhcIjtcclxuICAgIG1lYXN1cmVTcGFuLnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiO1xyXG4gICAgbWVhc3VyZVNwYW4uaW5uZXJUZXh0ID0gdGV4dDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWVhc3VyZVNwYW4pO1xyXG5cclxuICAgIC8vIOS6jOWIhuafpeaJvuadpeaJvuWIsOacgOS9s+aIquaWreeCuVxyXG4gICAgbGV0IGxlZnQgPSAxO1xyXG4gICAgbGV0IHJpZ2h0ID0gdGV4dC5sZW5ndGggLSAxO1xyXG4gICAgbGV0IGxlZnRPclJpZ2h0ID0gXCJsZWZ0XCI7XHJcbiAgICBsZXQgaXNCaWdnZXIgPSBmYWxzZTtcclxuICAgIGlmIChtZWFzdXJlU3Bhbi5vZmZzZXRXaWR0aCA+IG1heFdpZHRoKSB7XHJcbiAgICAgIHdoaWxlICghaXNCaWdnZXIpIHtcclxuICAgICAgICBtZWFzdXJlU3Bhbi5pbm5lclRleHQgPSBgJHt0ZXh0LnNsaWNlKDAsIGxlZnQpfS4uLiR7dGV4dC5zbGljZShyaWdodCl9YDtcclxuICAgICAgICBpZiAobWVhc3VyZVNwYW4ub2Zmc2V0V2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICAgICAgaXNCaWdnZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAobGVmdE9yUmlnaHQgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgICAgIGxlZnRPclJpZ2h0ID0gXCJyaWdodFwiO1xyXG4gICAgICAgICAgICBsZWZ0ID0gbGVmdCArIDE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0T3JSaWdodCA9IFwibGVmdFwiO1xyXG4gICAgICAgICAgICByaWdodCA9IHJpZ2h0IC0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWVhc3VyZVNwYW4pO1xyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICAgIC8vIOa4heeQhuW5tui/lOWbnue7k+aenFxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtZWFzdXJlU3Bhbik7XHJcbiAgICByZXR1cm4gYCR7dGV4dC5zbGljZSgwLCBsZWZ0IC0gMSl9JHtsZWZ0ICE9PSAxID8gXCIuLi5cIiA6IFwiXCJ9JHt0ZXh0LnNsaWNlKFxyXG4gICAgICByaWdodCArIDFcclxuICAgICl9YDtcclxuICB9XHJcblxyXG4gIGdldFBhZGRpbmdCb3R0b20oKSB7XHJcbiAgICBsZXQgcGFkZGluZ0JvdHRvID0gNTA7XHJcbiAgICAvLyDlrZjlnKhUaXRsZSDmiJbogIUgRGVzY3JpcHRpb27ljaDkvY3nva7ml7ZcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXNoYm9hcmQgJiZcclxuICAgICAgKHRoaXMuZGFzaGJvYXJkLnRpdGxlIHx8IHRoaXMuZGFzaGJvYXJkLmRlc2NyaXB0aW9uKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBnYXAgPSAwO1xyXG4gICAgICBpZiAodGhpcy5kYXNoYm9hcmQudGl0bGUpIHtcclxuICAgICAgICBnYXAgKz0gNTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXNoYm9hcmQuZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBnYXAgKz0gMjA7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZWxlbWVudDogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5wb3J0bGV0cy1kZXNjcmlwdGlvblwiKTtcclxuICAgICAgcGFkZGluZ0JvdHRvID0gZWxlbWVudCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZ2FwICsgNTAgOiA1MDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYWRkaW5nQm90dG8gKyBcInB4XCI7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXNoYm9hcmRMYXN0VXBkYXRlRGF0ZSgpIHtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgX2RhdGFPYmogPSB7IGRhc2hib2FyZElkOiB0aGlzLnVybF9pZCwgbGFuZ3VhZ2U6IHRoaXMubGFuZyB9O1xyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGkudXJsTGlzdC5HZXREYXNoYm9hcmRWMiwgX2RhdGFPYmosIChyZXMpID0+IHtcclxuICAgICAgcmVzID0gdGhpcy5wYmYuY29udmVydEtleXNUb0xvd2VyQ2FzZShyZXMpO1xyXG4gICAgICB0aGlzLmRhc2hib2FyZC5VcGRhdGVkRGF0ZSA9IHJlcy5VcGRhdGVkRGF0ZTtcclxuICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVkYXNoYm9hcmQoc2hvdWxkVXBkYXRlID0gXCJmYWxzZVwiKSB7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHBkYXRhID0gdGhpcy5kYXNoYm9hcmRMYXlvdXQuc2VyaWFsaXplKCk7XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gWy4uLnBkYXRhXTtcclxuICAgIGNvbnN0IHBvcnRsZXRzID0gWy4uLnRoaXMucG9ydGxldHNdO1xyXG5cclxuICAgIGlmIChwb3J0bGV0cyAmJiBwb3J0bGV0cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGFjdGl2ZVRhYkhhc1BvcnRsZXQgPSBmYWxzZTtcclxuICAgICAgY29uc3QgdGFiSWRzID0gW107XHJcbiAgICAgIHBvcnRsZXRzLm1hcCgoZWwpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gZmluZCh0aGlzLm5ld1Bvc2l0aW9uLCAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZWwubmV3SWQpO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBlbC5jb2wgPSBkYXRhLmNvbDtcclxuICAgICAgICAgIGVsLnBvc1ggPSBkYXRhLmNvbDtcclxuICAgICAgICAgIGVsLnJvdyA9IGRhdGEucm93O1xyXG4gICAgICAgICAgZWwucG9zWSA9IGRhdGEucm93O1xyXG4gICAgICAgICAgZWwuc2l6ZVggPSBkYXRhLnNpemVYO1xyXG4gICAgICAgICAgZWwud2lkdGggPSBkYXRhLnNpemVYO1xyXG4gICAgICAgICAgZWwuc2l6ZVkgPSBkYXRhLnNpemVZO1xyXG4gICAgICAgICAgZWwuaGVpZ2h0ID0gZGF0YS5zaXplWTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbmZpZyA9IGVsLmNvbmZpZyA/IEpTT04ucGFyc2UoZWwuY29uZmlnKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgICAgIHByZXZEYXNoYm9hcklkOiBlbC5pZCxcclxuICAgICAgICAgICAgYWN0aXZlVGFiOiB0aGlzLmFjdGl2ZVRhYixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0YWJJZHMucHVzaChjb25maWcudGFiSWQpO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZy50YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWIpIHtcclxuICAgICAgICAgICAgYWN0aXZlVGFiSGFzUG9ydGxldCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbC5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFhY3RpdmVUYWJIYXNQb3J0bGV0KSB7XHJcbiAgICAgICAgcG9ydGxldHMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgICAgIGxldCBjb25maWcgPSBlbC5jb25maWcgPyBKU09OLnBhcnNlKGVsLmNvbmZpZykgOiBudWxsO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgICAgIHByZXZEYXNoYm9hcklkOiBlbC5pZCxcclxuICAgICAgICAgICAgICBhY3RpdmVUYWI6IHRhYklkc1swXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsLmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGRhdGFPYmogPSB7XHJcbiAgICAgIHBvcnRsZXRzLFxyXG4gICAgICBkYXNoYm9hcmRJZDogdGhpcy51cmxfaWQsXHJcbiAgICAgIGxhc3RVcGRhdGVEYXRlOiB0aGlzLmRhc2hib2FyZC5VcGRhdGVkRGF0ZSxcclxuICAgIH07XHJcbiAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmFwaS51cmxMaXN0LlNhdmVEYXNoYm9hcmRQb3J0bGV0cywgZGF0YU9iaiwgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuR2V0RGFzaGJvYXJkVjEoXHJcbiAgICAgICAgICB0aGlzLnVybF9pZCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgKF9yZXMsIF9wb3J0bGV0cyA9IFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoIV9yZXMpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgX3NhdmVNZXNzYWdlID1cclxuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLkRBU0hCT0FSRF9TQVZFX01FU1NBR0UgfHxcclxuICAgICAgICAgICAgICBcIkRhc2hib2FyZCBoYXMgYmVlbiB1cGRhdGVkXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93U3VjTXNnKF9zYXZlTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGUgIT09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2dnbGVDdXN0b21pemUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlU2lkZWJhcihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVQdXNoQnRuKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZCh7XHJcbiAgICAgICAgICAgICAgZGFzaGJvYXJkOiBfcmVzLFxyXG4gICAgICAgICAgICAgIHBvcnRsZXRzOiBfcG9ydGxldHMsXHJcbiAgICAgICAgICAgICAgbm9EZXRlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRsYXlvdXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJEYXNoYm9hcmQgc2F2ZSBmYWlsZWRcIjtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMubWVzc2FnZXMpKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXMubWVzc2FnZXNbMF0ubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dOb3RpZmljYXRpb24oZXJyb3JNZXNzYWdlLCB7XHJcbiAgICAgICAgICBzdGF0dXM6IFwiRXJyb3JcIixcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19