@hotstaq/admin-panel 0.2.5 → 0.2.7

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 (99) hide show
  1. package/.vscode/launch.json +5 -5
  2. package/HotSite.json +2 -2
  3. package/build/{src/AppAPI.d.ts → AppAPI.d.ts} +0 -0
  4. package/build/AppAPI.d.ts.map +1 -0
  5. package/build/{src/AppAPI.js → AppAPI.js} +48 -1
  6. package/build/AppAPI.js.map +1 -0
  7. package/build/WebExport.d.ts +3 -0
  8. package/build/WebExport.d.ts.map +1 -0
  9. package/build/{src/WebExport.js → WebExport.js} +8 -22
  10. package/build/WebExport.js.map +1 -0
  11. package/build/{src/cli.d.ts → cli.d.ts} +0 -0
  12. package/build/cli.d.ts.map +1 -0
  13. package/build/{src/cli.js → cli.js} +2 -2
  14. package/build/cli.js.map +1 -0
  15. package/build/{src/components → components}/admin-button.d.ts +1 -1
  16. package/build/components/admin-button.d.ts.map +1 -0
  17. package/build/{src/components → components}/admin-button.js +1 -5
  18. package/build/components/admin-button.js.map +1 -0
  19. package/build/components/admin-checkbox.d.ts +1 -0
  20. package/build/components/admin-checkbox.d.ts.map +1 -0
  21. package/build/components/admin-checkbox.js +43 -0
  22. package/build/components/admin-checkbox.js.map +1 -0
  23. package/build/{src/components → components}/admin-dashboard.d.ts +2 -2
  24. package/build/components/admin-dashboard.d.ts.map +1 -0
  25. package/build/components/admin-dashboard.js +44 -0
  26. package/build/components/admin-dashboard.js.map +1 -0
  27. package/build/components/admin-edit.d.ts +87 -0
  28. package/build/components/admin-edit.d.ts.map +1 -0
  29. package/build/components/admin-edit.js +297 -0
  30. package/build/components/admin-edit.js.map +1 -0
  31. package/build/{src/components → components}/admin-table-field.d.ts +3 -6
  32. package/build/components/admin-table-field.d.ts.map +1 -0
  33. package/build/components/admin-table-field.js +47 -0
  34. package/build/components/admin-table-field.js.map +1 -0
  35. package/build/{src/components → components}/admin-table-row.d.ts +3 -6
  36. package/build/components/admin-table-row.d.ts.map +1 -0
  37. package/build/components/admin-table-row.js +55 -0
  38. package/build/components/admin-table-row.js.map +1 -0
  39. package/build/{src/components → components}/admin-table.d.ts +36 -4
  40. package/build/components/admin-table.d.ts.map +1 -0
  41. package/build/{src/components → components}/admin-table.js +116 -23
  42. package/build/components/admin-table.js.map +1 -0
  43. package/build/components/admin-text.d.ts +26 -0
  44. package/build/components/admin-text.d.ts.map +1 -0
  45. package/build/components/admin-text.js +57 -0
  46. package/build/components/admin-text.js.map +1 -0
  47. package/build/{src/WebExport.d.ts → index.d.ts} +2 -3
  48. package/build/index.d.ts.map +1 -0
  49. package/build/index.js +18 -0
  50. package/build/index.js.map +1 -0
  51. package/build-web/AdminPanelComponents.js +2 -2
  52. package/build-web/AdminPanelWeb_AppAPI.js +87 -0
  53. package/package.json +8 -7
  54. package/src/AppAPI.ts +55 -2
  55. package/src/WebExport.ts +9 -24
  56. package/src/cli.ts +2 -2
  57. package/src/components/admin-button.ts +2 -2
  58. package/src/components/admin-checkbox.ts +52 -0
  59. package/src/components/admin-dashboard.ts +4 -3
  60. package/src/components/admin-edit.ts +233 -16
  61. package/src/components/admin-table-field.ts +8 -7
  62. package/src/components/admin-table-row.ts +9 -5
  63. package/src/components/admin-table.ts +169 -10
  64. package/src/components/admin-text.ts +24 -4
  65. package/src/index.ts +17 -0
  66. package/tsconfig.json +1 -0
  67. package/webpack.config.cjs +2 -1
  68. package/build/scripts/watch.d.ts +0 -2
  69. package/build/scripts/watch.d.ts.map +0 -1
  70. package/build/scripts/watch.js +0 -127
  71. package/build/scripts/watch.js.map +0 -1
  72. package/build/src/AppAPI.d.ts.map +0 -1
  73. package/build/src/AppAPI.js.map +0 -1
  74. package/build/src/WebExport.d.ts.map +0 -1
  75. package/build/src/WebExport.js.map +0 -1
  76. package/build/src/cli.d.ts.map +0 -1
  77. package/build/src/cli.js.map +0 -1
  78. package/build/src/components/admin-button.d.ts.map +0 -1
  79. package/build/src/components/admin-button.js.map +0 -1
  80. package/build/src/components/admin-dashboard.d.ts.map +0 -1
  81. package/build/src/components/admin-dashboard.js +0 -89
  82. package/build/src/components/admin-dashboard.js.map +0 -1
  83. package/build/src/components/admin-edit.d.ts +0 -39
  84. package/build/src/components/admin-edit.d.ts.map +0 -1
  85. package/build/src/components/admin-edit.js +0 -124
  86. package/build/src/components/admin-edit.js.map +0 -1
  87. package/build/src/components/admin-table-field.d.ts.map +0 -1
  88. package/build/src/components/admin-table-field.js +0 -92
  89. package/build/src/components/admin-table-field.js.map +0 -1
  90. package/build/src/components/admin-table-row.d.ts.map +0 -1
  91. package/build/src/components/admin-table-row.js +0 -99
  92. package/build/src/components/admin-table-row.js.map +0 -1
  93. package/build/src/components/admin-table.d.ts.map +0 -1
  94. package/build/src/components/admin-table.js.map +0 -1
  95. package/build/src/components/admin-text.d.ts +0 -14
  96. package/build/src/components/admin-text.d.ts.map +0 -1
  97. package/build/src/components/admin-text.js +0 -98
  98. package/build/src/components/admin-text.js.map +0 -1
  99. package/scripts/watch.ts +0 -59
@@ -78,12 +78,18 @@ var AdminTable = /** @class */ (function (_super) {
78
78
  * }
79
79
  */
80
80
  _this.rowElements = [];
81
+ /**
82
+ * Executes this event when a row is selected. If this returns false, the row will not be selected.
83
+ */
84
+ _this.onSelectedRow = null;
81
85
  _this.tag = "admin-table";
82
86
  _this.title = "";
83
87
  _this.schema = "";
84
88
  _this.headerElements = {};
85
89
  _this.headerIndicies = [];
86
90
  _this.rowElements = [];
91
+ //this.selectedRows = [];
92
+ _this.selected = -1;
87
93
  return _this;
88
94
  }
89
95
  /**
@@ -91,6 +97,8 @@ var AdminTable = /** @class */ (function (_super) {
91
97
  */
92
98
  AdminTable.prototype.addHeader = function (tableFieldElement) {
93
99
  var header = this.htmlElements[0].getElementsByTagName("thead")[0];
100
+ if (this.headerIndicies.length < 1)
101
+ this.headerIndicies.push(null);
94
102
  // @ts-ignore
95
103
  this.headerIndicies.push(tableFieldElement.hotComponent.field);
96
104
  header.appendChild(tableFieldElement);
@@ -99,9 +107,97 @@ var AdminTable = /** @class */ (function (_super) {
99
107
  * Add a header to the table.
100
108
  */
101
109
  AdminTable.prototype.addHeaderDataOnly = function (tableField, htmlElement) {
110
+ if (this.headerIndicies.length < 1)
111
+ this.headerIndicies.push(null);
102
112
  this.headerIndicies.push(tableField.field);
103
113
  this.headerElements[tableField.field] = htmlElement;
104
114
  };
115
+ /**
116
+ * Executes when a row is selected.
117
+ */
118
+ AdminTable.prototype.selectRow = function (htmlElement, rowIndex) {
119
+ return __awaiter(this, void 0, void 0, function () {
120
+ var result, tbody, rows, iIdx, row;
121
+ return __generator(this, function (_a) {
122
+ switch (_a.label) {
123
+ case 0:
124
+ if (!(this.onSelectedRow != null)) return [3 /*break*/, 2];
125
+ return [4 /*yield*/, this.onSelectedRow(rowIndex)];
126
+ case 1:
127
+ result = _a.sent();
128
+ if (result === false)
129
+ return [2 /*return*/];
130
+ _a.label = 2;
131
+ case 2:
132
+ // In the future, we will support multiple rows being selected. For now
133
+ // this will ensure that only one row is selected at a time.
134
+ {
135
+ tbody = this.htmlElements[1].getElementsByTagName("tbody")[0];
136
+ rows = tbody.getElementsByTagName("tr");
137
+ for (iIdx = 0; iIdx < rows.length; iIdx++) {
138
+ row = rows[iIdx];
139
+ if (row.classList.contains("table-primary") === true)
140
+ row.classList.remove("table-primary");
141
+ }
142
+ htmlElement.classList.add("table-primary");
143
+ }
144
+ this.selected = rowIndex;
145
+ return [2 /*return*/];
146
+ }
147
+ });
148
+ });
149
+ };
150
+ /**
151
+ * Get the selected data.
152
+ */
153
+ AdminTable.prototype.getSelected = function () {
154
+ var index = this.selected;
155
+ if (index < 0)
156
+ return (null);
157
+ return (this.rowElements[index].fields);
158
+ };
159
+ /**
160
+ * Get the selected data.
161
+ */
162
+ /*getSelectedRows (): any[]
163
+ {
164
+ let rows: any[] = [];
165
+
166
+ for (let iIdx = 0; iIdx < this.selectedRows.length; iIdx++)
167
+ {
168
+ let index: number = this.selectedRows[iIdx];
169
+ rows.push (this.rowElements[index].fields);
170
+ }
171
+
172
+ return (rows);
173
+ }*/
174
+ /**
175
+ * Get the data for each row that has been checked.
176
+ */
177
+ AdminTable.prototype.getCheckedRows = function () {
178
+ var rows = [];
179
+ var tbody = this.htmlElements[1].getElementsByTagName("tbody")[0];
180
+ // Find all the checkboxes in tbody.
181
+ var checkboxes = tbody.getElementsByTagName("input");
182
+ for (var iIdx = 0; iIdx < checkboxes.length; iIdx++) {
183
+ var checkbox = checkboxes[iIdx];
184
+ if (checkbox.checked != null) {
185
+ if (checkbox.checked === true) {
186
+ // Get the data-index attribute.
187
+ var dataIndexStr = checkbox.parentElement.parentElement.getAttribute("data-index");
188
+ var dataIndex = parseInt(dataIndexStr);
189
+ rows.push(this.rowElements[dataIndex].fields);
190
+ }
191
+ }
192
+ }
193
+ return (rows);
194
+ };
195
+ /**
196
+ * Get a row's data.
197
+ */
198
+ AdminTable.prototype.getRow = function (index) {
199
+ return (this.rowElements[index].fields);
200
+ };
105
201
  /**
106
202
  * Add a row to the table.
107
203
  *
@@ -109,15 +205,21 @@ var AdminTable = /** @class */ (function (_super) {
109
205
  */
110
206
  AdminTable.prototype.addRow = function (fields) {
111
207
  var tbody = this.htmlElements[1].getElementsByTagName("tbody")[0];
112
- var rowStr = "<tr>";
208
+ var index = this.rowElements.length;
209
+ var rowStr = "<tr onclick = \"this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ".concat(index, ");\">");
210
+ rowStr += "<td><input type = \"checkbox\" /></td>";
113
211
  for (var iIdx = 0; iIdx < this.headerIndicies.length; iIdx++) {
114
212
  var key = this.headerIndicies[iIdx];
115
213
  var value = fields[key];
116
214
  if (this.headerElements[key] != null)
117
- rowStr += "<td>".concat(value, "</td>");
215
+ rowStr += "<td data-index = \"".concat(index, "\">").concat(value, "</td>");
118
216
  }
119
217
  rowStr += "</tr>";
120
- hotstaq_1.HotStaq.addHtml(tbody, rowStr);
218
+ var newObj = hotstaq_1.HotStaq.addHtml(tbody, rowStr);
219
+ this.rowElements.push({
220
+ fields: fields,
221
+ element: newObj
222
+ });
121
223
  };
122
224
  /**
123
225
  * Clear the list of rows.
@@ -158,31 +260,22 @@ var AdminTable = /** @class */ (function (_super) {
158
260
  /**
159
261
  * Get the list of data from the server.
160
262
  */
161
- // @ts-ignore
162
263
  AdminTable.prototype.onPostPlace = function (parentHtmlElement, htmlElement) {
163
- return __awaiter(this, void 0, void 0, function () {
164
- var _this = this;
264
+ var _this = this;
265
+ setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
165
266
  return __generator(this, function (_a) {
166
- setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
167
- return __generator(this, function (_a) {
168
- switch (_a.label) {
169
- case 0: return [4 /*yield*/, this.refreshList()];
170
- case 1:
171
- _a.sent();
172
- return [2 /*return*/];
173
- }
174
- });
175
- }); }, 50);
176
- return [2 /*return*/];
267
+ switch (_a.label) {
268
+ case 0: return [4 /*yield*/, this.refreshList()];
269
+ case 1:
270
+ _a.sent();
271
+ return [2 /*return*/];
272
+ }
177
273
  });
178
- });
274
+ }); }, 50);
275
+ return (null);
179
276
  };
180
277
  AdminTable.prototype.output = function () {
181
- return __awaiter(this, void 0, void 0, function () {
182
- return __generator(this, function (_a) {
183
- return [2 /*return*/, ("\n\t\t<div id = \"".concat(this.htmlElements[0].id, "\">\n\t\t\t<h2>").concat(this.title, "</h2>\n\t\t\t<div class=\"table-responsive\">\n\t\t\t<table class=\"table table-striped table-sm\">\n\t\t\t\t<thead hot-place-here = \"header\">\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = \"results\">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t</div>\n\t\t</div>"))];
184
- });
185
- });
278
+ return ("\n\t\t<div id = \"".concat(this.htmlElements[0].id, "\">\n\t\t\t<h2>").concat(this.title, "</h2>\n\t\t\t<div class=\"table-responsive\">\n\t\t\t<table id = \"").concat(this.htmlElements[0].id, "Table\" class=\"table table-striped table-sm\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = \"header\">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = \"results\">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t</div>\n\t\t</div>"));
186
279
  };
187
280
  return AdminTable;
188
281
  }(hotstaq_1.HotComponent));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-table.js","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { HotStaq, HotAPI, HotComponent, HotComponentOutput } from "hotstaq";
2
+ export declare class AdminText extends HotComponent {
3
+ /**
4
+ * The associated database field.
5
+ */
6
+ field: string;
7
+ /**
8
+ * The type of field. Can be:
9
+ * * text
10
+ * * date
11
+ *
12
+ * Default: text
13
+ */
14
+ field_type: string;
15
+ /**
16
+ * If set to 1, this will not output the field.
17
+ */
18
+ no_output: string;
19
+ constructor(copy: HotComponent | HotStaq, api: HotAPI);
20
+ /**
21
+ * Corrects the placement of the text elements for modals.
22
+ */
23
+ onPostPlace(parentHtmlElement: HTMLElement, htmlElement: HTMLElement): HTMLElement;
24
+ output(): string | HotComponentOutput[];
25
+ }
26
+ //# sourceMappingURL=admin-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-text.d.ts","sourceRoot":"","sources":["../../src/components/admin-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjF,qBAAa,SAAU,SAAQ,YAAY;IAE1C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;gBAEL,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM;IAUtD;;OAEG;IACH,WAAW,CAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,WAAW;IAmBnF,MAAM,IAAK,MAAM,GAAG,kBAAkB,EAAE;CAcxC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.AdminText = void 0;
19
+ var hotstaq_1 = require("hotstaq");
20
+ var AdminText = /** @class */ (function (_super) {
21
+ __extends(AdminText, _super);
22
+ function AdminText(copy, api) {
23
+ var _this = _super.call(this, copy, api) || this;
24
+ _this.tag = "admin-text";
25
+ _this.field = "";
26
+ _this.field_type = "text";
27
+ _this.no_output = "0";
28
+ return _this;
29
+ }
30
+ /**
31
+ * Corrects the placement of the text elements for modals.
32
+ */
33
+ AdminText.prototype.onPostPlace = function (parentHtmlElement, htmlElement) {
34
+ var placeHereArray = parentHtmlElement.querySelectorAll("hot-place-here[type=\"modal\"]");
35
+ // Search for the input box in the modal we attached to, then store the
36
+ // found input box into the fieldElements array.
37
+ if (placeHereArray.length > 0) {
38
+ var placeHere = placeHereArray[0];
39
+ parentHtmlElement.removeChild(htmlElement);
40
+ placeHere.appendChild(htmlElement);
41
+ // @ts-ignore
42
+ parentHtmlElement.hotComponent.fieldElements[this.field] = htmlElement.querySelector("input");
43
+ }
44
+ return (null);
45
+ };
46
+ AdminText.prototype.output = function () {
47
+ var value = "";
48
+ if (this.value != null)
49
+ value = this.value;
50
+ if (this.no_output === "1")
51
+ return ("<div><input class=\"form-control\" type = \"hidden\" value = \"".concat(value, "\" /></div>"));
52
+ return ("<div>\n\t\t\t<label class=\"form-label\">".concat(this.inner, "</label><input class=\"form-control\" type = \"text\" value = \"").concat(value, "\" />\n\t\t</div>"));
53
+ };
54
+ return AdminText;
55
+ }(hotstaq_1.HotComponent));
56
+ exports.AdminText = AdminText;
57
+ //# sourceMappingURL=admin-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-text.js","sourceRoot":"","sources":["../../src/components/admin-text.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,mCAAiF;AAEjF;IAA+B,6BAAY;IAmB1C,mBAAa,IAA4B,EAAE,GAAW;QAAtD,YAEC,kBAAO,IAAI,EAAE,GAAG,CAAC,SAMjB;QAJA,KAAI,CAAC,GAAG,GAAG,YAAY,CAAC;QACxB,KAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,KAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,KAAI,CAAC,SAAS,GAAG,GAAG,CAAC;;IACtB,CAAC;IAED;;OAEG;IACH,+BAAW,GAAX,UAAa,iBAA8B,EAAE,WAAwB;QAEpE,IAAI,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAE,gCAA8B,CAAC,CAAC;QAEzF,wEAAwE;QACxE,gDAAgD;QAChD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAC7B;YACC,IAAI,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,iBAAiB,CAAC,WAAW,CAAE,WAAW,CAAC,CAAC;YAC5C,SAAS,CAAC,WAAW,CAAE,WAAW,CAAC,CAAC;YAEpC,aAAa;YACb,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,aAAa,CAAE,OAAO,CAAC,CAAC;SAC/F;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,0BAAM,GAAN;QAEC,IAAI,KAAK,GAAW,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;YACzB,OAAO,CAAC,yEAA6D,KAAK,gBAAY,CAAC,CAAC;QAEzF,OAAO,CAAC,mDACqB,IAAI,CAAC,KAAK,6EAA8D,KAAK,sBACnG,CAAC,CAAC;IACV,CAAC;IACF,gBAAC;AAAD,CAAC,AAjED,CAA+B,sBAAY,GAiE1C;AAjEY,8BAAS"}
@@ -5,6 +5,5 @@ import { AdminTable } from "./components/admin-table";
5
5
  import { AdminTableField } from "./components/admin-table-field";
6
6
  import { AdminTableRow } from "./components/admin-table-row";
7
7
  import { AdminText } from "./components/admin-text";
8
- declare function buildAssets(): Promise<any>;
9
- export { buildAssets, AdminButton, AdminDashboard, AdminEdit, AdminTable, AdminTableField, AdminTableRow, AdminText };
10
- //# sourceMappingURL=WebExport.d.ts.map
8
+ export { AdminButton, AdminDashboard, AdminEdit, AdminTable, AdminTableField, AdminTableRow, AdminText };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,UAAU,EACV,eAAe,EACf,aAAa,EACb,SAAS,EACT,CAAC"}
package/build/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminText = exports.AdminTableRow = exports.AdminTableField = exports.AdminTable = exports.AdminEdit = exports.AdminDashboard = exports.AdminButton = void 0;
4
+ var admin_button_1 = require("./components/admin-button");
5
+ Object.defineProperty(exports, "AdminButton", { enumerable: true, get: function () { return admin_button_1.AdminButton; } });
6
+ var admin_dashboard_1 = require("./components/admin-dashboard");
7
+ Object.defineProperty(exports, "AdminDashboard", { enumerable: true, get: function () { return admin_dashboard_1.AdminDashboard; } });
8
+ var admin_edit_1 = require("./components/admin-edit");
9
+ Object.defineProperty(exports, "AdminEdit", { enumerable: true, get: function () { return admin_edit_1.AdminEdit; } });
10
+ var admin_table_1 = require("./components/admin-table");
11
+ Object.defineProperty(exports, "AdminTable", { enumerable: true, get: function () { return admin_table_1.AdminTable; } });
12
+ var admin_table_field_1 = require("./components/admin-table-field");
13
+ Object.defineProperty(exports, "AdminTableField", { enumerable: true, get: function () { return admin_table_field_1.AdminTableField; } });
14
+ var admin_table_row_1 = require("./components/admin-table-row");
15
+ Object.defineProperty(exports, "AdminTableRow", { enumerable: true, get: function () { return admin_table_row_1.AdminTableRow; } });
16
+ var admin_text_1 = require("./components/admin-text");
17
+ Object.defineProperty(exports, "AdminText", { enumerable: true, get: function () { return admin_text_1.AdminText; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0DAAwD;AAStD,4FATO,0BAAW,OASP;AARb,gEAA8D;AAS5D,+FATO,gCAAc,OASP;AARhB,sDAAoD;AASlD,0FATO,sBAAS,OASP;AARX,wDAAsD;AASpD,2FATO,wBAAU,OASP;AARZ,oEAAiE;AAS/D,gGATO,mCAAe,OASP;AARjB,gEAA6D;AAS3D,8FATO,+BAAa,OASP;AARf,sDAAoD;AASlD,0FATO,sBAAS,OASP"}
@@ -1,2 +1,2 @@
1
- var AdminPanelComponentsWeb;(()=>{"use strict";var t={1:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=e.AdminTableRow=e.AdminTableField=e.AdminTable=e.AdminEdit=e.AdminDashboard=e.AdminButton=e.buildAssets=void 0;const o=n(176);Object.defineProperty(e,"AdminButton",{enumerable:!0,get:function(){return o.AdminButton}});const a=n(50);Object.defineProperty(e,"AdminDashboard",{enumerable:!0,get:function(){return a.AdminDashboard}});const s=n(703);Object.defineProperty(e,"AdminEdit",{enumerable:!0,get:function(){return s.AdminEdit}});const d=n(952);Object.defineProperty(e,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const r=n(505);Object.defineProperty(e,"AdminTableField",{enumerable:!0,get:function(){return r.AdminTableField}});const l=n(412);Object.defineProperty(e,"AdminTableRow",{enumerable:!0,get:function(){return l.AdminTableRow}});const c=n(80);Object.defineProperty(e,"AdminText",{enumerable:!0,get:function(){return c.AdminText}}),e.buildAssets=function(){return i(this,void 0,void 0,(function*(){return{import:[{name:"bootstrap",files:["bootstrap.min.js","bootstrap.min.css"]},{name:"jquery",files:["jquery.min.js"]},"chart.js","feather-icons","@popperjs/core"],html:["./assets/html/*.*"],css:["./assets/css/*.*"],js:["./assets/js/*.*","./build-web/AdminPanelComponents.js"],componentLibrary:"AdminPanelComponentsWeb",components:[o.AdminButton,a.AdminDashboard,s.AdminEdit,d.AdminTable,r.AdminTableField,l.AdminTableRow,c.AdminText]}}))}},176:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button"}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}output(){return i(this,void 0,void 0,(function*(){return`<button id = "${this.htmlElements[0].id}" onclick = "this.buttonClicked ();"></button>`}))}}e.AdminButton=a},50:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return i(this,void 0,void 0,(function*(){""!=this.base&&(o.Hot.Data.baseUrl=this.base)}))}output(){return i(this,void 0,void 0,(function*(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "buttons"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}))}}e.AdminDashboard=a},703:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.tag="admin-edit",this.title="",this.button_title="",this.attached_list="",this.schema="",this.fieldElements={},this.modalId=""}onSave(){return i(this,void 0,void 0,(function*(){let t={};for(let e in this.fieldElements){let n=this.fieldElements[e].value;t[e]=n}yield o.Hot.jsonRequest(`${o.Hot.Data.baseUrl}/v1/data/add`,{schema:this.schema,fields:t});let e=document.getElementById(this.attached_list);yield e.hotComponent.refreshList(),$(`#${this.modalId}`).modal("hide")}))}output(){return i(this,void 0,void 0,(function*(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");return this.modalId=`${this.name}Modal`,[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,parentSelector:"body"},{html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#${this.modalId}">Add</button>`,parentSelector:'hot-place-here[name="buttons"]'}]}))}}e.AdminEdit=a},505:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0}onPostPlace(t,e){return i(this,void 0,void 0,(function*(){let n=t.parentNode.parentNode.parentNode.hotComponent;null!=n&&n.addHeaderDataOnly(this,e)}))}output(){return i(this,void 0,void 0,(function*(){return[{html:`<th>${this.inner}</th>`,placeHereParent:"header"}]}))}}e.AdminTableField=a},412:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return i(this,void 0,void 0,(function*(){t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e})}))}output(){return i(this,void 0,void 0,(function*(){let t="";for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}))}}e.AdminTableRow=a},952:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.headerElements={},this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headerElements={},this.headerIndicies=[],this.rowElements=[]}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headerIndicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headerIndicies.push(t.field),this.headerElements[t.field]=e}addRow(t){let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n="<tr>";for(let e=0;e<this.headerIndicies.length;e++){let i=this.headerIndicies[e],o=t[i];null!=this.headerElements[i]&&(n+=`<td>${o}</td>`)}n+="</tr>",o.HotStaq.addHtml(e,n)}clearRows(){return i(this,void 0,void 0,(function*(){this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(){return i(this,void 0,void 0,(function*(){let t=yield o.Hot.jsonRequest(`${o.Hot.Data.baseUrl}/v1/data/list`,{schema:this.schema});this.clearRows();for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return i(this,void 0,void 0,(function*(){setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50)}))}output(){return i(this,void 0,void 0,(function*(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table class="table table-striped table-sm">\n\t\t\t\t<thead hot-place-here = "header">\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t</div>\n\t\t</div>`}))}}e.AdminTable=a},80:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function d(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}r((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const o=n(607);class a extends o.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.field=""}onPostPlace(t,e){return i(this,void 0,void 0,(function*(){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e),t.hotComponent.fieldElements[this.field]=e.querySelector("input")}}))}output(){return i(this,void 0,void 0,(function*(){let t="";return null!=this.value&&(t=this.value),`<div>\n\t\t\t<label class="form-label">${this.inner}</label><input class="form-control" type = "text" value = "${t}" />\n\t\t</div>`}))}}e.AdminText=a},607:t=>{t.exports=HotStaqWeb}},e={},n=function n(i){var o=e[i];if(void 0!==o)return o.exports;var a=e[i]={exports:{}};return t[i].call(a.exports,a,a.exports,n),a.exports}(1);AdminPanelComponentsWeb=n})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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MEJJLENBQW9CLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9XZWJFeHBvcnQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1idXR0b24udHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1kYXNoYm9hcmQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1lZGl0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS1yb3cudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRleHQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvZXh0ZXJuYWwgdmFyIFwiSG90U3RhcVdlYlwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZG1pbkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uXCI7XG5pbXBvcnQgeyBBZG1pbkRhc2hib2FyZCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tZGFzaGJvYXJkXCI7XG5pbXBvcnQgeyBBZG1pbkVkaXQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLWVkaXRcIjtcbmltcG9ydCB7IEFkbWluVGFibGUgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRhYmxlXCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlRmllbGQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRhYmxlLWZpZWxkXCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlUm93IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZS1yb3dcIjtcbmltcG9ydCB7IEFkbWluVGV4dCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGV4dFwiO1xuXG5hc3luYyBmdW5jdGlvbiBidWlsZEFzc2V0cyAoKTogUHJvbWlzZTxhbnk+XG57XG5cdHJldHVybiAoe1xuXHRcdFx0aW1wb3J0OiBbeyBuYW1lOiBcImJvb3RzdHJhcFwiLCBmaWxlczogW1wiYm9vdHN0cmFwLm1pbi5qc1wiLCBcImJvb3RzdHJhcC5taW4uY3NzXCJdIH0sIFxuXHRcdFx0XHR7IG5hbWU6IFwianF1ZXJ5XCIsIGZpbGVzOiBbXCJqcXVlcnkubWluLmpzXCJdIH0sIFxuXHRcdFx0XHRcImNoYXJ0LmpzXCIsIFxuXHRcdFx0XHRcImZlYXRoZXItaWNvbnNcIiwgXG5cdFx0XHRcdFwiQHBvcHBlcmpzL2NvcmVcIl0sXG5cdFx0XHRodG1sOiBbXCIuL2Fzc2V0cy9odG1sLyouKlwiXSxcblx0XHRcdGNzczogW1wiLi9hc3NldHMvY3NzLyouKlwiXSxcblx0XHRcdGpzOiBbXCIuL2Fzc2V0cy9qcy8qLipcIiwgXCIuL2J1aWxkLXdlYi9BZG1pblBhbmVsQ29tcG9uZW50cy5qc1wiXSxcblx0XHRcdGNvbXBvbmVudExpYnJhcnk6IFwiQWRtaW5QYW5lbENvbXBvbmVudHNXZWJcIixcblx0XHRcdGNvbXBvbmVudHM6IFtcblx0XHRcdFx0QWRtaW5CdXR0b24sXG5cdFx0XHRcdEFkbWluRGFzaGJvYXJkLFxuXHRcdFx0XHRBZG1pbkVkaXQsXG5cdFx0XHRcdEFkbWluVGFibGUsXG5cdFx0XHRcdEFkbWluVGFibGVGaWVsZCxcblx0XHRcdFx0QWRtaW5UYWJsZVJvdyxcblx0XHRcdFx0QWRtaW5UZXh0XVxuXHRcdH0pO1xufVxuXG5leHBvcnQge1xuXHRcdGJ1aWxkQXNzZXRzLFxuXHRcdEFkbWluQnV0dG9uLFxuXHRcdEFkbWluRGFzaGJvYXJkLFxuXHRcdEFkbWluRWRpdCxcblx0XHRBZG1pblRhYmxlLFxuXHRcdEFkbWluVGFibGVGaWVsZCxcblx0XHRBZG1pblRhYmxlUm93LFxuXHRcdEFkbWluVGV4dFxuXHR9OyIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5CdXR0b24gZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tYnV0dG9uXCI7XG5cdH1cblxuXHRhc3luYyBidXR0b25DbGlja2VkICgpXG5cdHtcblx0fVxuXG5cdGFzeW5jIG91dHB1dCAoKVxuXHR7XG5cdFx0cmV0dXJuIChgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIiBvbmNsaWNrID0gXCJ0aGlzLmJ1dHRvbkNsaWNrZWQgKCk7XCI+PC9idXR0b24+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5EYXNoYm9hcmQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYmFzZSB1cmwgdG8gdXNlIGZvciB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdGJhc2U6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1kYXNoYm9hcmRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJhc2UgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0Ly8gQHRzLWlnbm9yZVxuXHRhc3luYyBvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPEhUTUxFbGVtZW50PlxuXHR7XG5cdFx0Ly8gU2V0IHRoZSBiYXNlIEFQSSB1cmwgdG8gdXNlIGZvciB0aGlzIGRhc2hib2FyZC5cblx0XHRpZiAodGhpcy5iYXNlICE9IFwiXCIpXG5cdFx0XHRIb3QuRGF0YS5iYXNlVXJsID0gdGhpcy5iYXNlO1xuXHR9XG5cblx0YXN5bmMgb3V0cHV0ICgpOiBQcm9taXNlPHN0cmluZz5cblx0e1xuXHRcdHJldHVybiAoYFxuXHRcdDxtYWluIGNsYXNzPVwiY29sLW1kLTkgbXMtc20tYXV0byBjb2wtbGctMTAgcHgtbWQtNFwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXdyYXAgZmxleC1tZC1ub3dyYXAgYWxpZ24taXRlbXMtY2VudGVyIHB0LTMgcGItMiBtYi0zIGJvcmRlci1ib3R0b21cIj5cblx0XHRcdFx0PGgxIGNsYXNzPVwiaDJcIj4ke3RoaXMudGl0bGV9PC9oMT5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi10b29sYmFyIG1iLTIgbWItbWQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbWUtMlwiPlxuXHRcdFx0XHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImJ1dHRvbnNcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImJvZHlcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdDwvbWFpbj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkVkaXQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJ1dHRvbiB0aXRsZS5cblx0ICovXG5cdGJ1dHRvbl90aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGxpc3QuXG5cdCAqL1xuXHRhdHRhY2hlZF9saXN0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgZmllbGQgZWxlbWVudHMgaW4gdGhlIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHRmaWVsZEVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdC8qKlxuXHQgKiBUaGUgbW9kYWwgaWQuXG5cdCAqL1xuXHRtb2RhbElkOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZWRpdFwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuYnV0dG9uX3RpdGxlID0gXCJcIjtcblx0XHR0aGlzLmF0dGFjaGVkX2xpc3QgPSBcIlwiO1xuXHRcdHRoaXMuc2NoZW1hID0gXCJcIjtcblxuXHRcdHRoaXMuZmllbGRFbGVtZW50cyA9IHt9O1xuXG5cdFx0dGhpcy5tb2RhbElkID0gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIHRoaXMgZm9ybS5cblx0ICovXG5cdGFzeW5jIG9uU2F2ZSAoKVxuXHR7XG5cdFx0bGV0IHZhbHVlczogYW55ID0ge307XG5cblx0XHRmb3IgKGxldCBrZXkgaW4gdGhpcy5maWVsZEVsZW1lbnRzKVxuXHRcdHtcblx0XHRcdGxldCBmaWVsZEVsZW1lbnQgPSB0aGlzLmZpZWxkRWxlbWVudHNba2V5XTtcblx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkRWxlbWVudC52YWx1ZTtcblxuXHRcdFx0dmFsdWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKGAke0hvdC5EYXRhLmJhc2VVcmx9L3YxL2RhdGEvYWRkYCwge1xuXHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRmaWVsZHM6IHZhbHVlc1xuXHRcdFx0fSk7XG5cblx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKHRoaXMuYXR0YWNoZWRfbGlzdCk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0YXdhaXQgYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudC5yZWZyZXNoTGlzdCAoKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHQkKGAjJHt0aGlzLm1vZGFsSWR9YCkubW9kYWwgKFwiaGlkZVwiKTtcblx0fVxuXG5cdGFzeW5jIG91dHB1dCAoKVxuXHR7XG5cdFx0aWYgKHRoaXMubmFtZSA9PT0gXCJcIilcblx0XHRcdHRocm93IG5ldyBFcnJvciAoYFlvdSBtdXN0IHNwZWNpZnkgYSBuYW1lIGZvciBlYWNoIGFkbWluLWVkaXQgZWxlbWVudCFgKTtcblxuXHRcdHRoaXMubW9kYWxJZCA9IGAke3RoaXMubmFtZX1Nb2RhbGA7XG5cblx0XHRyZXR1cm4gKFt7XG5cdFx0XHRodG1sOiBgXG5cdFx0XHQ8IS0tICR7dGhpcy50aXRsZX0gTW9kYWwgU3RhcnQgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiJHt0aGlzLm1vZGFsSWR9XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cIiR7dGhpcy5uYW1lfU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0PGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIiR7dGhpcy5uYW1lfU1vZGFsTGFiZWxcIj4ke3RoaXMudGl0bGV9PC9oNT5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuXHRcdFx0XHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcIm1vZGFsQm9keVwiIHR5cGUgPSBcIm1vZGFsXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5DYW5jZWw8L2J1dHRvbj5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25jbGljayA9IFwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyR7dGhpcy5tb2RhbElkfScpLm9uU2F2ZSAoKTtcIj4ke3RoaXMuYnV0dG9uX3RpdGxlfTwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PCEtLSAke3RoaXMudGl0bGV9IE1vZGFsIEVuZCAtLT5gLFxuXHRcdFx0cGFyZW50U2VsZWN0b3I6IFwiYm9keVwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWFkZC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiMke3RoaXMubW9kYWxJZH1cIj5BZGQ8L2J1dHRvbj5gLFxuXHRcdFx0Ly9gPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWFkZC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBvbmNsaWNrID0gXCIkKCcjJHt0aGlzLm1vZGFsSWR9JykubW9kYWwgKCdzaG93Jyk7XCI+QWRkPC9idXR0b24+YCxcblx0XHRcdHBhcmVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cImJ1dHRvbnNcIl1gXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGVGaWVsZCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRhYmxlIGZpZWxkLlxuXHQgKi9cblx0ZmllbGQ6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1maWVsZFwiO1xuXHRcdHRoaXMuZmllbGQgPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0Ly8gQHRzLWlnbm9yZVxuXHRhc3luYyBvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPEhUTUxFbGVtZW50PlxuXHR7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGxldCBob3RDb21wb25lbnQgPSBwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQ7XG5cblx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRob3RDb21wb25lbnQuYWRkSGVhZGVyRGF0YU9ubHkgKHRoaXMsIGh0bWxFbGVtZW50KTtcblx0fVxuXG5cdGFzeW5jIG91dHB1dCAoKVxuXHR7XG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYDx0aD4ke3RoaXMuaW5uZXJ9PC90aD5gLFxuXHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcImhlYWRlclwiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGVSb3cgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBmaWVsZHMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIkpvaG4gU21pdGhcIiwgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAZW1haWwuY29tXCIgfVxuXHQgKi9cblx0ZmllbGRzOiBhbnlbXTtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1yb3dcIjtcblx0XHR0aGlzLmZpZWxkcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIHJvdyB0byB0aGUgdGFibGVcblx0ICovXG5cdC8vIEB0cy1pZ25vcmVcblx0YXN5bmMgb25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxIVE1MRWxlbWVudD5cblx0e1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQucm93RWxlbWVudHMucHVzaCAoeyBmaWVsZHM6IHRoaXMuZmllbGRzLCBlbGVtZW50OiBodG1sRWxlbWVudH0pO1xuXHR9XG5cblx0YXN5bmMgb3V0cHV0ICgpXG5cdHtcblx0XHRsZXQgcm93SHRtbCA9IFwiXCI7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBmaWVsZE9iaiA9IHRoaXMuZmllbGRzW2lJZHhdO1xuXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gZmllbGRPYmopXG5cdFx0XHR7XG5cdFx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkT2JqW2tleV07XG5cblx0XHRcdFx0cm93SHRtbCArPSBgPHRkPiR7dmFsdWV9PC90ZD5gO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAoW3tcblx0XHRcdGh0bWw6IGA8dHI+JHtyb3dIdG1sfTwvdHI+YCxcblx0XHRcdHBsYWNlSGVyZVBhcmVudDogXCJyZXN1bHRzXCJcblx0XHR9XSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vYWRtaW4tdGFibGUtZmllbGRcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGUgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIHRhYmxlLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBzY2hlbWEuXG5cdCAqL1xuXHRzY2hlbWE6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBoZWFkZXJzIGFyZSBzdG9yZWQgaW4gYSBrZXkvdmFsdWUgb2JqZWN0LlxuXHQgKiBcblx0ICogQGV4YW1wbGUgeyBcIm5hbWVcIjogXCI8dGg+TmFtZTwvdGg+XCIsIFwiZW1haWxcIjogXCI8dGg+RW1haWw8L3RoPlwiIH1cblx0ICovXG5cdGhlYWRlckVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH0gPSB7fTtcblx0LyoqXG5cdCAqIFRoZSBoZWFkZXIgaW5kaWNpZXMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZSBjb25zb2xlLmxvZyAodGhpcy5oZWFkZXJJbmRpY2llc1tcIm5hbWVcIl0pOyAvLyBPdXRwdXRzIDBcblx0ICovXG5cdGhlYWRlckluZGljaWVzOiBudW1iZXJbXTtcblx0LyoqXG5cdCAqIFRoZSByb3cgZWxlbWVudHMgYXJlIHN0b3JlZCBpbiBhbiBhcnJheSB3aXRoIGtleS92YWx1ZSBmaWVsZHMgYW5kIGl0J3MgYXR0YWNoZWQgaHRtbCBlbGVtZW50LlxuXHQgKiBcblx0ICogQGV4YW1wbGVcblx0ICoge1xuXHQgKiAgIFwiZmllbGRzXCI6IFtcblx0ICogICAgICAge1xuXHQgKiAgICAgICAgIFwibmFtZVwiOiBcIkpvaG4gU21pdGhcIixcblx0ICogICAgICAgICBcImVtYWlsXCI6IFwiam9obi5zbWl0aEB0ZXN0LmNvbVwiXG5cdCAqICAgICAgIH1cblx0ICogICAgIF0sXG5cdCAqICAgXCJodG1sXCI6IFwiPHRyPjx0ZD5Kb2huIFNtaXRoPC90ZD48dGQ+am9obi5zbWl0aEB0ZXN0LmNvbTwvdGQ+PC90cj5cIlxuXHQgKiB9XG5cdCAqL1xuXHRyb3dFbGVtZW50czogeyBmaWVsZHM6IGFueVtdOyBodG1sOiBzdHJpbmc7IH1bXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlXCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5zY2hlbWEgPSBcIlwiO1xuXHRcdHRoaXMuaGVhZGVyRWxlbWVudHMgPSB7fTtcblx0XHR0aGlzLmhlYWRlckluZGljaWVzID0gW107XG5cdFx0dGhpcy5yb3dFbGVtZW50cyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIGhlYWRlciB0byB0aGUgdGFibGUuXG5cdCAqL1xuXHRhZGRIZWFkZXIgKHRhYmxlRmllbGRFbGVtZW50OiBIVE1MRWxlbWVudClcblx0e1xuXHRcdGxldCBoZWFkZXIgPSB0aGlzLmh0bWxFbGVtZW50c1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0aGVhZFwiKVswXTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR0aGlzLmhlYWRlckluZGljaWVzLnB1c2ggKHRhYmxlRmllbGRFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZCk7XG5cdFx0aGVhZGVyLmFwcGVuZENoaWxkICh0YWJsZUZpZWxkRWxlbWVudCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgaGVhZGVyIHRvIHRoZSB0YWJsZS5cblx0ICovXG5cdGFkZEhlYWRlckRhdGFPbmx5ICh0YWJsZUZpZWxkOiBBZG1pblRhYmxlRmllbGQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudClcblx0e1xuXHRcdHRoaXMuaGVhZGVySW5kaWNpZXMucHVzaCAodGFibGVGaWVsZC5maWVsZCk7XG5cdFx0dGhpcy5oZWFkZXJFbGVtZW50c1t0YWJsZUZpZWxkLmZpZWxkXSA9IGh0bWxFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHJvdyB0byB0aGUgdGFibGUuXG5cdCAqIFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgQSBsaXN0IG9mIHZhbHVlcyB0byBhcHBlbmQuXG5cdCAqL1xuXHRhZGRSb3cgKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSlcblx0e1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdGxldCByb3dTdHIgPSBcIjx0cj5cIjtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5oZWFkZXJJbmRpY2llcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQga2V5ID0gdGhpcy5oZWFkZXJJbmRpY2llc1tpSWR4XTtcblx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkc1trZXldO1xuXG5cdFx0XHRpZiAodGhpcy5oZWFkZXJFbGVtZW50c1trZXldICE9IG51bGwpXG5cdFx0XHRcdHJvd1N0ciArPSBgPHRkPiR7dmFsdWV9PC90ZD5gO1xuXHRcdH1cblxuXHRcdHJvd1N0ciArPSBcIjwvdHI+XCI7XG5cblx0XHRIb3RTdGFxLmFkZEh0bWwgKHRib2R5LCByb3dTdHIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHRoZSBsaXN0IG9mIHJvd3MuXG5cdCAqL1xuXHRhc3luYyBjbGVhclJvd3MgKClcblx0e1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0dGJvZHkuaW5uZXJIVE1MID0gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoIHRoZSBsaXN0LlxuXHQgKi9cblx0YXN5bmMgcmVmcmVzaExpc3QgKClcblx0e1xuXHRcdGxldCBsaXN0ID0gYXdhaXQgSG90Lmpzb25SZXF1ZXN0IChgJHtIb3QuRGF0YS5iYXNlVXJsfS92MS9kYXRhL2xpc3RgLCB7XG5cdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWFcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5jbGVhclJvd3MgKCk7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGxpc3QubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGZpZWxkcyA9IGxpc3RbaUlkeF07XG5cblx0XHRcdHRoaXMuYWRkUm93IChmaWVsZHMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHQvLyBAdHMtaWdub3JlXG5cdGFzeW5jIG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IFByb21pc2U8SFRNTEVsZW1lbnQ+XG5cdHtcblx0XHRzZXRUaW1lb3V0IChhc3luYyAoKSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJlZnJlc2hMaXN0ICgpO1xuXHRcdFx0fSwgNTApO1xuXHR9XG5cblx0YXN5bmMgb3V0cHV0ICgpXG5cdHtcblx0XHRyZXR1cm4gKGBcblx0XHQ8ZGl2IGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVwiPlxuXHRcdFx0PGgyPiR7dGhpcy50aXRsZX08L2gyPlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cblx0XHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtc21cIj5cblx0XHRcdFx0PHRoZWFkIGhvdC1wbGFjZS1oZXJlID0gXCJoZWFkZXJcIj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5IGhvdC1wbGFjZS1oZXJlID0gXCJyZXN1bHRzXCI+XG5cdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHQ8L3RhYmxlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UZXh0IGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgYXNzb2NpYXRlZCBkYXRhYmFzZSBmaWVsZC5cblx0ICovXG5cdGZpZWxkOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGV4dFwiO1xuXHRcdHRoaXMuZmllbGQgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdC8vIEB0cy1pZ25vcmVcblx0YXN5bmMgb25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxIVE1MRWxlbWVudD5cblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0cGFyZW50SHRtbEVsZW1lbnQuaG90Q29tcG9uZW50LmZpZWxkRWxlbWVudHNbdGhpcy5maWVsZF0gPSBodG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yIChcImlucHV0XCIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIG91dHB1dCAoKVxuXHR7XG5cdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMudmFsdWUgIT0gbnVsbClcblx0XHRcdHZhbHVlID0gdGhpcy52YWx1ZTtcblxuXHRcdHJldHVybiAoYDxkaXY+XG5cdFx0XHQ8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+JHt0aGlzLmlubmVyfTwvbGFiZWw+PGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZSA9IFwidGV4dFwiIHZhbHVlID0gXCIke3ZhbHVlfVwiIC8+XG5cdFx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gSG90U3RhcVdlYjsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuIl0sIm5hbWVzIjpbIkFkbWluQnV0dG9uIiwiQWRtaW5EYXNoYm9hcmQiLCJBZG1pbkVkaXQiLCJBZG1pblRhYmxlIiwiQWRtaW5UYWJsZUZpZWxkIiwiQWRtaW5UYWJsZVJvdyIsIkFkbWluVGV4dCIsImJ1aWxkQXNzZXRzIiwiaW1wb3J0IiwibmFtZSIsImZpbGVzIiwiaHRtbCIsImNzcyIsImpzIiwiY29tcG9uZW50TGlicmFyeSIsImNvbXBvbmVudHMiLCJIb3RDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImNvcHkiLCJhcGkiLCJzdXBlciIsInRoaXMiLCJ0YWciLCJidXR0b25DbGlja2VkIiwib3V0cHV0IiwiaHRtbEVsZW1lbnRzIiwiaWQiLCJ0aXRsZSIsImJhc2UiLCJvblBvc3RQbGFjZSIsInBhcmVudEh0bWxFbGVtZW50IiwiaHRtbEVsZW1lbnQiLCJIb3QiLCJEYXRhIiwiYmFzZVVybCIsImJ1dHRvbl90aXRsZSIsImF0dGFjaGVkX2xpc3QiLCJzY2hlbWEiLCJmaWVsZEVsZW1lbnRzIiwibW9kYWxJZCIsIm9uU2F2ZSIsInZhbHVlcyIsImtleSIsInZhbHVlIiwianNvblJlcXVlc3QiLCJmaWVsZHMiLCJhdHRhY2hlZExpc3QiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaG90Q29tcG9uZW50IiwicmVmcmVzaExpc3QiLCIkIiwibW9kYWwiLCJFcnJvciIsInBhcmVudFNlbGVjdG9yIiwiZmllbGQiLCJwYXJlbnROb2RlIiwiYWRkSGVhZGVyRGF0YU9ubHkiLCJpbm5lciIsInBsYWNlSGVyZVBhcmVudCIsInJvd0VsZW1lbnRzIiwicHVzaCIsImVsZW1lbnQiLCJyb3dIdG1sIiwiaUlkeCIsImxlbmd0aCIsImZpZWxkT2JqIiwiaGVhZGVyRWxlbWVudHMiLCJoZWFkZXJJbmRpY2llcyIsImFkZEhlYWRlciIsInRhYmxlRmllbGRFbGVtZW50IiwiaGVhZGVyIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsInRhYmxlRmllbGQiLCJhZGRSb3ciLCJ0Ym9keSIsInJvd1N0ciIsIkhvdFN0YXEiLCJhZGRIdG1sIiwiY2xlYXJSb3dzIiwiaW5uZXJIVE1MIiwibGlzdCIsInNldFRpbWVvdXQiLCJwbGFjZUhlcmVBcnJheSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJwbGFjZUhlcmUiLCJyZW1vdmVDaGlsZCIsInF1ZXJ5U2VsZWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIiwiSG90U3RhcVdlYiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19leHBvcnRzX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCJdLCJzb3VyY2VSb290IjoiIn0=
1
+ var AdminPanelComponentsWeb;(()=>{"use strict";var t={176:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function d(t){try{a(i.next(t))}catch(t){o(t)}}function s(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(d,s)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button"}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}output(){return`<button id = "${this.htmlElements[0].id}" onclick = "this.buttonClicked ();"></button>`}}e.AdminButton=o},50:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return""!=this.base&&(i.Hot.Data.baseUrl=this.base),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "buttons"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l},703:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function d(t){try{a(i.next(t))}catch(t){o(t)}}function s(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(d,s)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const o=n(607),d=l(n(685));class s extends o.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="",this.attached_list="",this.schema="",this.fieldElements={},this.modalId="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[]}addClicked(){return i(this,void 0,void 0,(function*(){if(null==this.onAddClicked||!1!==(yield this.onAddClicked())){this.modalType="add";for(let t in this.fieldElements)this.fieldElements[t].value="";this.selectedFields=[],d.default.Modal.getInstance(`#${this.modalId}`).show()}}))}editClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onEditClicked&&!1===(yield this.onEditClicked()))return;this.modalType="edit";let t=document.getElementById(this.attached_list).hotComponent.getSelected();if(null!=t){for(let e in this.fieldElements){let n=this.fieldElements[e];if(null!=n){let i=t[e];n.value=i}}this.selectedFields=[t],d.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=attachedList.hotComponent.getCheckedRows();null!=t&&!0===confirm("Are you sure you want to remove this item?")&&(yield o.Hot.jsonRequest(`${o.Hot.Data.baseUrl}/v1/data/remove`,{schema:this.schema,whereFields:t}))}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};for(let e in this.fieldElements){let n=this.fieldElements[e];if(null!=n){let i=n.value;if("remove"===n.parentNode.hotComponent.field_type)continue;t[e]=i}}if("add"===this.modalType&&(yield o.Hot.jsonRequest(`${o.Hot.Data.baseUrl}/v1/data/add`,{schema:this.schema,fields:t})),"edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e=this.selectedFields[0],n={};for(let t in e){let i=this.fieldElements[t],l=e[t];null!=i&&"remove"===i.parentNode.hotComponent.field_type||(n[t]=l)}yield o.Hot.jsonRequest(`${o.Hot.Data.baseUrl}/v1/data/edit`,{schema:this.schema,whereFields:n,fields:t})}let e=document.getElementById(this.attached_list).hotComponent;yield e.refreshList(),!0===this.closeOnSave&&d.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new d.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");return this.modalId=`${this.name}Modal`,[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"},{html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">Add</button>`,documentSelector:'hot-place-here[name="buttons"]'},{html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">Edit</button>`,documentSelector:'hot-place-here[name="buttons"]'},{html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">Remove</button>`,documentSelector:'hot-place-here[name="buttons"]'}]}}e.AdminEdit=s},505:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0}onPostPlace(t,e){let n=t.parentNode.parentNode.parentNode.parentNode.hotComponent;return null!=n&&n.addHeaderDataOnly(this,e),null}output(){return[{html:`<th>${this.inner}</th>`,documentSelector:"[hot-place-here='header']"}]}}e.AdminTableField=l},412:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,documentSelector:"[hot-place-here='results']"}]}}e.AdminTableRow=l},952:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function d(t){try{a(i.next(t))}catch(t){o(t)}}function s(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(d,s)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.headerElements={},this.rowElements=[],this.onSelectedRow=null,this.tag="admin-table",this.title="",this.schema="",this.headerElements={},this.headerIndicies=[],this.rowElements=[],this.selected=-1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headerIndicies.length<1&&this.headerIndicies.push(null),this.headerIndicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headerIndicies.length<1&&this.headerIndicies.push(null),this.headerIndicies.push(t.field),this.headerElements[t.field]=e}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null==this.onSelectedRow||!1!==(yield this.onSelectedRow(e))){{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e}}))}getSelected(){let t=this.selected;return t<0?null:this.rowElements[t].fields}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n=this.rowElements.length,i=`<tr onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ${n});">`;i+='<td><input type = "checkbox" /></td>';for(let e=0;e<this.headerIndicies.length;e++){let l=this.headerIndicies[e],o=t[l];null!=this.headerElements[l]&&(i+=`<td data-index = "${n}">${o}</td>`)}i+="</tr>";let o=l.HotStaq.addHtml(e,i);this.rowElements.push({fields:t,element:o})}clearRows(){return i(this,void 0,void 0,(function*(){this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(){return i(this,void 0,void 0,(function*(){let t=yield l.Hot.jsonRequest(`${l.Hot.Data.baseUrl}/v1/data/list`,{schema:this.schema});this.clearRows();for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50),null}output(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=o},80:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.field="",this.field_type="text",this.no_output="0"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e),t.hotComponent.fieldElements[this.field]=e.querySelector("input")}return null}output(){let t="";return null!=this.value&&(t=this.value),"1"===this.no_output?`<div><input class="form-control" type = "hidden" value = "${t}" /></div>`:`<div>\n\t\t\t<label class="form-label">${this.inner}</label><input class="form-control" type = "text" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},607:t=>{t.exports=HotStaqWeb},685:t=>{t.exports=bootstrap}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminButton=void 0;const e=n(176);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(50);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return l.AdminDashboard}});const o=n(703);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return o.AdminEdit}});const d=n(952);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const s=n(505);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return s.AdminTableField}});const a=n(412);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return a.AdminTableRow}});const r=n(80);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return r.AdminText}})})(),AdminPanelComponentsWeb=i})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZGFzaGJvYXJkLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZWRpdC50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRhYmxlLWZpZWxkLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtcm93LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10ZXh0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL2V4dGVybmFsIHZhciBcIkhvdFN0YXFXZWJcIiIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi9leHRlcm5hbCB2YXIgXCJib290c3RyYXBcIiIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluQnV0dG9uIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWJ1dHRvblwiO1xuXHR9XG5cblx0YXN5bmMgYnV0dG9uQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIiBvbmNsaWNrID0gXCJ0aGlzLmJ1dHRvbkNsaWNrZWQgKCk7XCI+PC9idXR0b24+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5EYXNoYm9hcmQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYmFzZSB1cmwgdG8gdXNlIGZvciB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdGJhc2U6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1kYXNoYm9hcmRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJhc2UgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdC8vIFNldCB0aGUgYmFzZSBBUEkgdXJsIHRvIHVzZSBmb3IgdGhpcyBkYXNoYm9hcmQuXG5cdFx0aWYgKHRoaXMuYmFzZSAhPSBcIlwiKVxuXHRcdFx0SG90LkRhdGEuYmFzZVVybCA9IHRoaXMuYmFzZTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgXG5cdFx0PG1haW4gY2xhc3M9XCJjb2wtbWQtOSBtcy1zbS1hdXRvIGNvbC1sZy0xMCBweC1tZC00XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtd3JhcCBmbGV4LW1kLW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgcHQtMyBwYi0yIG1iLTMgYm9yZGVyLWJvdHRvbVwiPlxuXHRcdFx0XHQ8aDEgY2xhc3M9XCJoMlwiPiR7dGhpcy50aXRsZX08L2gxPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXIgbWItMiBtYi1tZC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi1ncm91cCBtZS0yXCI+XG5cdFx0XHRcdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYnV0dG9uc1wiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYm9keVwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0PC9tYWluPmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5pbXBvcnQgYm9vdHN0cmFwIGZyb20gXCJib290c3RyYXBcIjtcblxuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkVkaXQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJ1dHRvbiB0aXRsZS5cblx0ICovXG5cdGJ1dHRvbl90aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGxpc3QuXG5cdCAqL1xuXHRhdHRhY2hlZF9saXN0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgZmllbGQgZWxlbWVudHMgaW4gdGhlIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHRmaWVsZEVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdC8qKlxuXHQgKiBUaGUgbW9kYWwgaWQuXG5cdCAqL1xuXHRtb2RhbElkOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYm9vdHN0cmFwIG1vZGFsIGluc3RhbmNlLlxuXHQgKi9cblx0bW9kYWw6IGJvb3RzdHJhcC5Nb2RhbDtcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgY2xvc2UgdGhlIG1vZGFsIHdoZW4gc2F2ZSBpcyBjbGlja2VkLlxuXHQgKi9cblx0Y2xvc2VPblNhdmU6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBtb2RhbCB0byBvcGVuLiBDYW4gYmU6XG5cdCAqICogYWRkXG5cdCAqICogZWRpdFxuXHQgKiAqIHJlbW92ZVxuXHQgKi9cblx0cHJvdGVjdGVkIG1vZGFsVHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIGZpZWxkcy5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZEZpZWxkczogYW55W107XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZWRpdFwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuYnV0dG9uX3RpdGxlID0gXCJcIjtcblx0XHR0aGlzLmF0dGFjaGVkX2xpc3QgPSBcIlwiO1xuXHRcdHRoaXMuc2NoZW1hID0gXCJcIjtcblxuXHRcdHRoaXMuZmllbGRFbGVtZW50cyA9IHt9O1xuXG5cdFx0dGhpcy5tb2RhbElkID0gXCJcIjtcblx0XHR0aGlzLm1vZGFsID0gbnVsbDtcblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cdFx0dGhpcy5jbG9zZU9uU2F2ZSA9IHRydWU7XG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgYWRkIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGFkZCBtb2RhbCBvcGVucy5cblx0ICovXG5cdG9uQWRkQ2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGFkZCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGFkZENsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uQWRkQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQWRkQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cblx0XHQvLyBDbGVhciB0aGUgdmFsdWVzIGluIGVhY2ggZmllbGQuXG5cdFx0Zm9yIChsZXQga2V5IGluIHRoaXMuZmllbGRFbGVtZW50cylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRFbGVtZW50ID0gdGhpcy5maWVsZEVsZW1lbnRzW2tleV07XG5cblx0XHRcdGZpZWxkRWxlbWVudC52YWx1ZSA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXG5cdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLnNob3cgKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGVkaXQgbW9kYWwgb3BlbnMuXG5cdCAqL1xuXHRvbkVkaXRDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGVkaXRDbGlja2VkICgpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbkVkaXRDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25FZGl0Q2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiZWRpdFwiO1xuXHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IGhvdENvbXBvbmVudC5nZXRTZWxlY3RlZCAoKTtcblxuXHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0Zm9yIChsZXQga2V5IGluIHRoaXMuZmllbGRFbGVtZW50cylcblx0XHRcdHtcblx0XHRcdFx0bGV0IGZpZWxkRWxlbWVudCA9IHRoaXMuZmllbGRFbGVtZW50c1trZXldO1xuXG5cdFx0XHRcdGlmIChmaWVsZEVsZW1lbnQgIT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRsZXQgdmFsdWUgPSBzZWxlY3RlZEZpZWxkW2tleV07XG5cblx0XHRcdFx0XHRmaWVsZEVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNlbGVjdGVkRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXG5cdFx0XHRib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UgKGAjJHt0aGlzLm1vZGFsSWR9YCkuc2hvdyAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSByZW1vdmUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVtb3ZlIG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25SZW1vdmVDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgcmVtb3ZlQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25SZW1vdmVDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25SZW1vdmVDbGlja2VkICgpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJyZW1vdmVcIjtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRsZXQgY2hlY2tlZFJvd3MgPSBob3RDb21wb25lbnQuZ2V0Q2hlY2tlZFJvd3MgKCk7XG5cblx0XHRpZiAoY2hlY2tlZFJvd3MgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRjb25zdCBjb25maXJtZWQ6IGJvb2xlYW4gPSBjb25maXJtIChcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBpdGVtP1wiKTtcblxuXHRcdFx0aWYgKGNvbmZpcm1lZCA9PT0gdHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChgJHtIb3QuRGF0YS5iYXNlVXJsfS92MS9kYXRhL3JlbW92ZWAsIHtcblx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHR3aGVyZUZpZWxkczogY2hlY2tlZFJvd3Ncblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGlzIGZvcm0uXG5cdCAqL1xuXHRhc3luYyBvblNhdmUgKClcblx0e1xuXHRcdGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChsZXQga2V5IGluIHRoaXMuZmllbGRFbGVtZW50cylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRFbGVtZW50ID0gdGhpcy5maWVsZEVsZW1lbnRzW2tleV07XG5cblx0XHRcdGlmIChmaWVsZEVsZW1lbnQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0bGV0IHZhbHVlID0gZmllbGRFbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRsZXQgZmllbGRUeXBlOiBzdHJpbmcgPSBmaWVsZEVsZW1lbnQucGFyZW50Tm9kZS5ob3RDb21wb25lbnQuZmllbGRfdHlwZTtcblxuXHRcdFx0XHRpZiAoZmllbGRUeXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHZhbHVlc1trZXldID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubW9kYWxUeXBlID09PSBcImFkZFwiKVxuXHRcdHtcblx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAoYCR7SG90LkRhdGEuYmFzZVVybH0vdjEvZGF0YS9hZGRgLCB7XG5cdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRmaWVsZHM6IHZhbHVlc1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5tb2RhbFR5cGUgPT09IFwiZWRpdFwiKVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0YWxlcnQgKFwiTm8gaXRlbShzKSBzZWxlY3RlZCFcIik7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2VsZWN0ZWRGaWVsZHNbMF07XG5cdFx0XHRsZXQgd2hlcmVGaWVsZHM6IGFueSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gc2VsZWN0ZWRGaWVsZClcblx0XHRcdHtcblx0XHRcdFx0bGV0IGZpZWxkRWxlbWVudCA9IHRoaXMuZmllbGRFbGVtZW50c1trZXldO1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBzZWxlY3RlZEZpZWxkW2tleV07XG5cblx0XHRcdFx0aWYgKGZpZWxkRWxlbWVudCAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IGZpZWxkVHlwZTogc3RyaW5nID0gZmllbGRFbGVtZW50LnBhcmVudE5vZGUuaG90Q29tcG9uZW50LmZpZWxkX3R5cGU7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRUeXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGVyZUZpZWxkc1trZXldID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAoYCR7SG90LkRhdGEuYmFzZVVybH0vdjEvZGF0YS9lZGl0YCwge1xuXHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRzLFxuXHRcdFx0XHRcdGZpZWxkczogdmFsdWVzXG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0bGV0IHRhYmxlOiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblxuXHRcdGF3YWl0IHRhYmxlLnJlZnJlc2hMaXN0ICgpO1xuXG5cdFx0aWYgKHRoaXMuY2xvc2VPblNhdmUgPT09IHRydWUpXG5cdFx0e1xuXHRcdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLmhpZGUgKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBkYXRhIGZyb20gdGhlIHNlcnZlci5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHR0aGlzLm1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCAoJChgIyR7dGhpcy5tb2RhbElkfWApWzBdLCB7XG5cdFx0XHRcdFwiYmFja2Ryb3BcIjogdHJ1ZSxcblx0XHRcdFx0XCJrZXlib2FyZFwiOiB0cnVlLFxuXHRcdFx0XHRcImZvY3VzXCI6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IFwiXCIpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IgKGBZb3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSBmb3IgZWFjaCBhZG1pbi1lZGl0IGVsZW1lbnQhYCk7XG5cblx0XHR0aGlzLm1vZGFsSWQgPSBgJHt0aGlzLm5hbWV9TW9kYWxgO1xuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYFxuXHRcdFx0PCEtLSAke3RoaXMudGl0bGV9IE1vZGFsIFN0YXJ0IC0tPlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cIiR7dGhpcy5tb2RhbElkfVwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCI+JHt0aGlzLnRpdGxlfTwvaDU+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblx0XHRcdFx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJtb2RhbEJvZHlcIiB0eXBlID0gXCJtb2RhbFwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG9uY2xpY2sgPSBcImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke3RoaXMubW9kYWxJZH0nKS5vblNhdmUgKCk7XCI+JHt0aGlzLmJ1dHRvbl90aXRsZX08L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDwhLS0gJHt0aGlzLnRpdGxlfSBNb2RhbCBFbmQgLS0+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IFwiYm9keVwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWFkZC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMuYWRkQ2xpY2tlZCAoKTtcIj5BZGQ8L2J1dHRvbj5gLFxuXHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCJidXR0b25zXCJdYFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1lZGl0LWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5lZGl0Q2xpY2tlZCAoKTtcIj5FZGl0PC9idXR0b24+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiYnV0dG9uc1wiXWBcblx0XHR9LFxuXHRcdHtcblx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tZWRpdC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMucmVtb3ZlQ2xpY2tlZCAoKTtcIj5SZW1vdmU8L2J1dHRvbj5gLFxuXHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCJidXR0b25zXCJdYFxuXHRcdH1dKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGVGaWVsZCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRhYmxlIGZpZWxkLlxuXHQgKi9cblx0ZmllbGQ6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1maWVsZFwiO1xuXHRcdHRoaXMuZmllbGQgPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdC8vIEB0cy1pZ25vcmUgLSBsb29vb2wuIEFkZCBhIGJldHRlciB3YXkgdG8gZ2V0IHRoZSBwYXJlbnQgSG90Q29tcG9uZW50LlxuXHRcdGxldCBob3RDb21wb25lbnQgPSBwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudDtcblxuXHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdGhvdENvbXBvbmVudC5hZGRIZWFkZXJEYXRhT25seSAodGhpcywgaHRtbEVsZW1lbnQpO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdHJldHVybiAoW3tcblx0XHRcdGh0bWw6IGA8dGg+JHt0aGlzLmlubmVyfTwvdGg+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IFwiW2hvdC1wbGFjZS1oZXJlPSdoZWFkZXInXVwiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZVJvdyBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIGZpZWxkcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0ICogXG5cdCAqIEBleGFtcGxlIHsgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLCBcImVtYWlsXCI6IFwiam9obi5zbWl0aEBlbWFpbC5jb21cIiB9XG5cdCAqL1xuXHRmaWVsZHM6IGFueVtdO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlLXJvd1wiO1xuXHRcdHRoaXMuZmllbGRzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgcm93IHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQucm93RWxlbWVudHMucHVzaCAoeyBmaWVsZHM6IHRoaXMuZmllbGRzLCBlbGVtZW50OiBodG1sRWxlbWVudH0pO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCByb3dIdG1sID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmZpZWxkcy5sZW5ndGggPiAwKVxuXHRcdFx0cm93SHRtbCArPSBgPHRkPjxpbnB1dCB0eXBlID0gXCJjaGVja2JveFwiIC8+PC90ZD5gO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRPYmogPSB0aGlzLmZpZWxkc1tpSWR4XTtcblxuXHRcdFx0Zm9yIChsZXQga2V5IGluIGZpZWxkT2JqKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBmaWVsZE9ialtrZXldO1xuXG5cdFx0XHRcdHJvd0h0bWwgKz0gYDx0ZD4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFt7XG5cdFx0XHRodG1sOiBgPHRyPiR7cm93SHRtbH08L3RyPmAsXG5cdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBcIltob3QtcGxhY2UtaGVyZT0ncmVzdWx0cyddXCJcblx0XHR9XSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlRmllbGQgfSBmcm9tIFwiLi9hZG1pbi10YWJsZS1maWVsZFwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZSBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRpdGxlIG9mIHRoaXMgdGFibGUuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIHNjaGVtYS5cblx0ICovXG5cdHNjaGVtYTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGhlYWRlcnMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIjx0aD5OYW1lPC90aD5cIiwgXCJlbWFpbFwiOiBcIjx0aD5FbWFpbDwvdGg+XCIgfVxuXHQgKi9cblx0aGVhZGVyRWxlbWVudHM6IHsgW25hbWU6IHN0cmluZ106IGFueTsgfSA9IHt9O1xuXHQvKipcblx0ICogVGhlIGhlYWRlciBpbmRpY2llcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0ICogXG5cdCAqIEBleGFtcGxlIGNvbnNvbGUubG9nICh0aGlzLmhlYWRlckluZGljaWVzW1wibmFtZVwiXSk7IC8vIE91dHB1dHMgMFxuXHQgKi9cblx0aGVhZGVySW5kaWNpZXM6IG51bWJlcltdO1xuXHQvKipcblx0ICogVGhlIHJvdyBlbGVtZW50cyBhcmUgc3RvcmVkIGluIGFuIGFycmF5IHdpdGgga2V5L3ZhbHVlIGZpZWxkcyBhbmQgaXQncyBhdHRhY2hlZCBodG1sIGVsZW1lbnQuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZVxuXHQgKiB7XG5cdCAqICAgXCJmaWVsZHNcIjogW1xuXHQgKiAgICAgICB7XG5cdCAqICAgICAgICAgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLFxuXHQgKiAgICAgICAgIFwiZW1haWxcIjogXCJqb2huLnNtaXRoQHRlc3QuY29tXCJcblx0ICogICAgICAgfVxuXHQgKiAgICAgXSxcblx0ICogICBcImh0bWxcIjogXCI8dHI+PHRkPkpvaG4gU21pdGg8L3RkPjx0ZD5qb2huLnNtaXRoQHRlc3QuY29tPC90ZD48L3RyPlwiXG5cdCAqIH1cblx0ICovXG5cdHJvd0VsZW1lbnRzOiB7IGZpZWxkczogYW55W107IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyB9W10gPSBbXTtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3RlZCByb3cgaW5kaWNpZXMuIEVhY2ggaW5kZXggbWFwcyB0byB0aGUgcm93RWxlbWVudHMgYXJyYXkuXG5cdCAqIFxuXHQgKiBAZml4bWUgQWRkIHN1cHBvcnQgZm9yIHRoaXMgaW4gdGhlIGZ1dHVyZS5cblx0ICovXG5cdC8vcHJvdGVjdGVkIHNlbGVjdGVkUm93czogbnVtYmVyW107XG5cdC8qKlxuXHQgKiBUaGUgbW9zdCByZWNlbnRseSBzZWxlY3RlZCByb3cgaW5kZXguIFRoZSBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZDogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlXCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5zY2hlbWEgPSBcIlwiO1xuXHRcdHRoaXMuaGVhZGVyRWxlbWVudHMgPSB7fTtcblx0XHR0aGlzLmhlYWRlckluZGljaWVzID0gW107XG5cdFx0dGhpcy5yb3dFbGVtZW50cyA9IFtdO1xuXHRcdC8vdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcblx0XHR0aGlzLnNlbGVjdGVkID0gLTE7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgaGVhZGVyIHRvIHRoZSB0YWJsZS5cblx0ICovXG5cdGFkZEhlYWRlciAodGFibGVGaWVsZEVsZW1lbnQ6IEhUTUxFbGVtZW50KVxuXHR7XG5cdFx0bGV0IGhlYWRlciA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRoZWFkXCIpWzBdO1xuXG5cdFx0aWYgKHRoaXMuaGVhZGVySW5kaWNpZXMubGVuZ3RoIDwgMSlcblx0XHRcdHRoaXMuaGVhZGVySW5kaWNpZXMucHVzaCAobnVsbCk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0dGhpcy5oZWFkZXJJbmRpY2llcy5wdXNoICh0YWJsZUZpZWxkRWxlbWVudC5ob3RDb21wb25lbnQuZmllbGQpO1xuXHRcdGhlYWRlci5hcHBlbmRDaGlsZCAodGFibGVGaWVsZEVsZW1lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIGhlYWRlciB0byB0aGUgdGFibGUuXG5cdCAqL1xuXHRhZGRIZWFkZXJEYXRhT25seSAodGFibGVGaWVsZDogQWRtaW5UYWJsZUZpZWxkLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpXG5cdHtcblx0XHRpZiAodGhpcy5oZWFkZXJJbmRpY2llcy5sZW5ndGggPCAxKVxuXHRcdFx0dGhpcy5oZWFkZXJJbmRpY2llcy5wdXNoIChudWxsKTtcblxuXHRcdHRoaXMuaGVhZGVySW5kaWNpZXMucHVzaCAodGFibGVGaWVsZC5maWVsZCk7XG5cdFx0dGhpcy5oZWFkZXJFbGVtZW50c1t0YWJsZUZpZWxkLmZpZWxkXSA9IGh0bWxFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoaXMgZXZlbnQgd2hlbiBhIHJvdyBpcyBzZWxlY3RlZC4gSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgcm93IHdpbGwgbm90IGJlIHNlbGVjdGVkLlxuXHQgKi9cblx0b25TZWxlY3RlZFJvdzogKHJvd0luZGV4OiBudW1iZXIpID0+IFByb21pc2U8Ym9vbGVhbj4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIGEgcm93IGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0YXN5bmMgc2VsZWN0Um93IChodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vblNlbGVjdGVkUm93ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25TZWxlY3RlZFJvdyAocm93SW5kZXgpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEluIHRoZSBmdXR1cmUsIHdlIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSByb3dzIGJlaW5nIHNlbGVjdGVkLiBGb3Igbm93IFxuXHRcdC8vIHRoaXMgd2lsbCBlbnN1cmUgdGhhdCBvbmx5IG9uZSByb3cgaXMgc2VsZWN0ZWQgYXQgYSB0aW1lLlxuXHRcdHtcblx0XHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdFx0bGV0IHJvd3MgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0clwiKTtcblxuXHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCByb3dzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgcm93OiBIVE1MVGFibGVSb3dFbGVtZW50ID0gcm93c1tpSWR4XTtcblxuXHRcdFx0XHRpZiAocm93LmNsYXNzTGlzdC5jb250YWlucyAoXCJ0YWJsZS1wcmltYXJ5XCIpID09PSB0cnVlKVxuXHRcdFx0XHRcdHJvdy5jbGFzc0xpc3QucmVtb3ZlIChcInRhYmxlLXByaW1hcnlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGh0bWxFbGVtZW50LmNsYXNzTGlzdC5hZGQgKFwidGFibGUtcHJpbWFyeVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkID0gcm93SW5kZXg7XG5cblx0XHQvKnRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHQvLyBGaW5kIGFsbCB0aGUgY2hlY2tib3hlcyBpbiB0Ym9keS5cblx0XHRsZXQgY2hlY2tib3hlcyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lIChcImlucHV0XCIpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBjaGVja2JveGVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBjaGVja2JveDogSFRNTElucHV0RWxlbWVudCA9IGNoZWNrYm94ZXNbaUlkeF07XG5cblx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkID09PSB0cnVlKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBkYXRhLWluZGV4IGF0dHJpYnV0ZS5cblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4U3RyOiBzdHJpbmcgPSBjaGVja2JveC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlIChcImRhdGEtaW5kZXhcIik7XG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleDogbnVtYmVyID0gIHBhcnNlSW50IChkYXRhSW5kZXhTdHIpO1xuXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MucHVzaCAoZGF0YUluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0qL1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0ZWQgZGF0YS5cblx0ICovXG5cdGdldFNlbGVjdGVkICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkO1xuXG5cdFx0aWYgKGluZGV4IDwgMClcblx0XHRcdHJldHVybiAobnVsbCk7XG5cblx0XHRyZXR1cm4gKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3RlZCBkYXRhLlxuXHQgKi9cblx0LypnZXRTZWxlY3RlZFJvd3MgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgcm93czogYW55W10gPSBbXTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkUm93c1tpSWR4XTtcblx0XHRcdHJvd3MucHVzaCAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKHJvd3MpO1xuXHR9Ki9cblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhIGZvciBlYWNoIHJvdyB0aGF0IGhhcyBiZWVuIGNoZWNrZWQuXG5cdCAqL1xuXHRnZXRDaGVja2VkUm93cyAoKTogYW55W11cblx0e1xuXHRcdGxldCByb3dzOiBhbnlbXSA9IFtdO1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0Ly8gRmluZCBhbGwgdGhlIGNoZWNrYm94ZXMgaW4gdGJvZHkuXG5cdFx0bGV0IGNoZWNrYm94ZXMgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJpbnB1dFwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgY2hlY2tib3hlcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja2JveGVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZGF0YS1pbmRleCBhdHRyaWJ1dGUuXG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleFN0cjogc3RyaW5nID0gY2hlY2tib3gucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSAoXCJkYXRhLWluZGV4XCIpO1xuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXg6IG51bWJlciA9ICBwYXJzZUludCAoZGF0YUluZGV4U3RyKTtcblxuXHRcdFx0XHRcdHJvd3MucHVzaCAodGhpcy5yb3dFbGVtZW50c1tkYXRhSW5kZXhdLmZpZWxkcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKHJvd3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJvdydzIGRhdGEuXG5cdCAqL1xuXHRnZXRSb3cgKGluZGV4OiBudW1iZXIpOiBhbnlbXVxuXHR7XG5cdFx0cmV0dXJuICh0aGlzLnJvd0VsZW1lbnRzW2luZGV4XS5maWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHJvdyB0byB0aGUgdGFibGUuXG5cdCAqIFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgQSBsaXN0IG9mIHZhbHVlcyB0byBhcHBlbmQuXG5cdCAqL1xuXHRhZGRSb3cgKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSlcblx0e1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5yb3dFbGVtZW50cy5sZW5ndGg7XG5cdFx0bGV0IHJvd1N0ciA9IGA8dHIgb25jbGljayA9IFwidGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5zZWxlY3RSb3cgKHRoaXMsICR7aW5kZXh9KTtcIj5gO1xuXG5cdFx0cm93U3RyICs9IGA8dGQ+PGlucHV0IHR5cGUgPSBcImNoZWNrYm94XCIgLz48L3RkPmA7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuaGVhZGVySW5kaWNpZXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGtleSA9IHRoaXMuaGVhZGVySW5kaWNpZXNbaUlkeF07XG5cdFx0XHRsZXQgdmFsdWUgPSBmaWVsZHNba2V5XTtcblxuXHRcdFx0aWYgKHRoaXMuaGVhZGVyRWxlbWVudHNba2V5XSAhPSBudWxsKVxuXHRcdFx0XHRyb3dTdHIgKz0gYDx0ZCBkYXRhLWluZGV4ID0gXCIke2luZGV4fVwiPiR7dmFsdWV9PC90ZD5gO1xuXHRcdH1cblxuXHRcdHJvd1N0ciArPSBcIjwvdHI+XCI7XG5cblx0XHRsZXQgbmV3T2JqID0gSG90U3RhcS5hZGRIdG1sICh0Ym9keSwgcm93U3RyKTtcblxuXHRcdHRoaXMucm93RWxlbWVudHMucHVzaCAoe1xuXHRcdFx0XHRmaWVsZHM6IGZpZWxkcyxcblx0XHRcdFx0ZWxlbWVudDogKDxIVE1MRWxlbWVudD5uZXdPYmopXG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgbGlzdCBvZiByb3dzLlxuXHQgKi9cblx0YXN5bmMgY2xlYXJSb3dzICgpXG5cdHtcblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdHRib2R5LmlubmVySFRNTCA9IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgbGlzdC5cblx0ICovXG5cdGFzeW5jIHJlZnJlc2hMaXN0ICgpXG5cdHtcblx0XHRsZXQgbGlzdCA9IGF3YWl0IEhvdC5qc29uUmVxdWVzdCAoYCR7SG90LkRhdGEuYmFzZVVybH0vdjEvZGF0YS9saXN0YCwge1xuXHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hXG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuY2xlYXJSb3dzICgpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBsaXN0Lmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBmaWVsZHMgPSBsaXN0W2lJZHhdO1xuXG5cdFx0XHR0aGlzLmFkZFJvdyAoZmllbGRzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdHNldFRpbWVvdXQgKGFzeW5jICgpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVmcmVzaExpc3QgKCk7XG5cdFx0XHR9LCA1MCk7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0cmV0dXJuIChgXG5cdFx0PGRpdiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIj5cblx0XHRcdDxoMj4ke3RoaXMudGl0bGV9PC9oMj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG5cdFx0XHQ8dGFibGUgaWQgPSBcIiR7dGhpcy5odG1sRWxlbWVudHNbMF0uaWR9VGFibGVcIiBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtc21cIj5cblx0XHRcdFx0PHRoZWFkPlxuXHRcdFx0XHRcdDx0ciBob3QtcGxhY2UtaGVyZSA9IFwiaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHQ8dGg+PC90aD5cblx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHQ8L3RoZWFkPlxuXHRcdFx0XHQ8dGJvZHkgaG90LXBsYWNlLWhlcmUgPSBcInJlc3VsdHNcIj5cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGV4dCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIGFzc29jaWF0ZWQgZGF0YWJhc2UgZmllbGQuXG5cdCAqL1xuXHRmaWVsZDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgZmllbGQuIENhbiBiZTpcblx0ICogKiB0ZXh0XG5cdCAqICogZGF0ZVxuXHQgKiBcblx0ICogRGVmYXVsdDogdGV4dFxuXHQgKi9cblx0ZmllbGRfdHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogSWYgc2V0IHRvIDEsIHRoaXMgd2lsbCBub3Qgb3V0cHV0IHRoZSBmaWVsZC5cblx0ICovXG5cdG5vX291dHB1dDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRleHRcIjtcblx0XHR0aGlzLmZpZWxkID0gXCJcIjtcblx0XHR0aGlzLmZpZWxkX3R5cGUgPSBcInRleHRcIjtcblx0XHR0aGlzLm5vX291dHB1dCA9IFwiMFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHQvLyBTZWFyY2ggZm9yIHRoZSBpbnB1dCBib3ggaW4gdGhlIG1vZGFsIHdlIGF0dGFjaGVkIHRvLCB0aGVuIHN0b3JlIHRoZSBcblx0XHQvLyBmb3VuZCBpbnB1dCBib3ggaW50byB0aGUgZmllbGRFbGVtZW50cyBhcnJheS5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZEVsZW1lbnRzW3RoaXMuZmllbGRdID0gaHRtbEVsZW1lbnQucXVlcnlTZWxlY3RvciAoXCJpbnB1dFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMudmFsdWUgIT0gbnVsbClcblx0XHRcdHZhbHVlID0gdGhpcy52YWx1ZTtcblxuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0XHRyZXR1cm4gKGA8ZGl2PjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGUgPSBcImhpZGRlblwiIHZhbHVlID0gXCIke3ZhbHVlfVwiIC8+PC9kaXY+YCk7XG5cblx0XHRyZXR1cm4gKGA8ZGl2PlxuXHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPiR7dGhpcy5pbm5lcn08L2xhYmVsPjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGUgPSBcInRleHRcIiB2YWx1ZSA9IFwiJHt2YWx1ZX1cIiAvPlxuXHRcdDwvZGl2PmApO1xuXHR9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEhvdFN0YXFXZWI7IiwibW9kdWxlLmV4cG9ydHMgPSBib290c3RyYXA7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsImltcG9ydCB7IEFkbWluQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1idXR0b25cIjtcbmltcG9ydCB7IEFkbWluRGFzaGJvYXJkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kYXNoYm9hcmRcIjtcbmltcG9ydCB7IEFkbWluRWRpdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tZWRpdFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGVcIjtcbmltcG9ydCB7IEFkbWluVGFibGVGaWVsZCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGRcIjtcbmltcG9ydCB7IEFkbWluVGFibGVSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRhYmxlLXJvd1wiO1xuaW1wb3J0IHsgQWRtaW5UZXh0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10ZXh0XCI7XG5cbmV4cG9ydCB7XG5cdFx0QWRtaW5CdXR0b24sXG5cdFx0QWRtaW5EYXNoYm9hcmQsXG5cdFx0QWRtaW5FZGl0LFxuXHRcdEFkbWluVGFibGUsXG5cdFx0QWRtaW5UYWJsZUZpZWxkLFxuXHRcdEFkbWluVGFibGVSb3csXG5cdFx0QWRtaW5UZXh0XG5cdH07Il0sIm5hbWVzIjpbIkFkbWluQnV0dG9uIiwiSG90Q29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJjb3B5IiwiYXBpIiwic3VwZXIiLCJ0aGlzIiwidGFnIiwiYnV0dG9uQ2xpY2tlZCIsIm91dHB1dCIsImh0bWxFbGVtZW50cyIsImlkIiwiQWRtaW5EYXNoYm9hcmQiLCJ0aXRsZSIsImJhc2UiLCJvblBvc3RQbGFjZSIsInBhcmVudEh0bWxFbGVtZW50IiwiaHRtbEVsZW1lbnQiLCJIb3QiLCJEYXRhIiwiYmFzZVVybCIsIkFkbWluRWRpdCIsIm9uQWRkQ2xpY2tlZCIsIm9uRWRpdENsaWNrZWQiLCJvblJlbW92ZUNsaWNrZWQiLCJidXR0b25fdGl0bGUiLCJhdHRhY2hlZF9saXN0Iiwic2NoZW1hIiwiZmllbGRFbGVtZW50cyIsIm1vZGFsSWQiLCJtb2RhbCIsIm1vZGFsVHlwZSIsImNsb3NlT25TYXZlIiwic2VsZWN0ZWRGaWVsZHMiLCJhZGRDbGlja2VkIiwia2V5IiwidmFsdWUiLCJNb2RhbCIsImdldEluc3RhbmNlIiwic2hvdyIsImVkaXRDbGlja2VkIiwic2VsZWN0ZWRGaWVsZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJob3RDb21wb25lbnQiLCJnZXRTZWxlY3RlZCIsImZpZWxkRWxlbWVudCIsInJlbW92ZUNsaWNrZWQiLCJjaGVja2VkUm93cyIsImF0dGFjaGVkTGlzdCIsImdldENoZWNrZWRSb3dzIiwiY29uZmlybSIsImpzb25SZXF1ZXN0Iiwid2hlcmVGaWVsZHMiLCJvblNhdmUiLCJ2YWx1ZXMiLCJwYXJlbnROb2RlIiwiZmllbGRfdHlwZSIsImZpZWxkcyIsImxlbmd0aCIsImFsZXJ0IiwidGFibGUiLCJyZWZyZXNoTGlzdCIsImhpZGUiLCIkIiwibmFtZSIsIkVycm9yIiwiaHRtbCIsImRvY3VtZW50U2VsZWN0b3IiLCJBZG1pblRhYmxlRmllbGQiLCJmaWVsZCIsImFkZEhlYWRlckRhdGFPbmx5IiwiaW5uZXIiLCJBZG1pblRhYmxlUm93Iiwicm93RWxlbWVudHMiLCJwdXNoIiwiZWxlbWVudCIsInJvd0h0bWwiLCJpSWR4IiwiZmllbGRPYmoiLCJBZG1pblRhYmxlIiwiaGVhZGVyRWxlbWVudHMiLCJvblNlbGVjdGVkUm93IiwiaGVhZGVySW5kaWNpZXMiLCJzZWxlY3RlZCIsImFkZEhlYWRlciIsInRhYmxlRmllbGRFbGVtZW50IiwiaGVhZGVyIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsInRhYmxlRmllbGQiLCJzZWxlY3RSb3ciLCJyb3dJbmRleCIsInJvd3MiLCJyb3ciLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInJlbW92ZSIsImFkZCIsImluZGV4IiwiY2hlY2tib3hlcyIsImNoZWNrYm94IiwiY2hlY2tlZCIsImRhdGFJbmRleFN0ciIsInBhcmVudEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJkYXRhSW5kZXgiLCJwYXJzZUludCIsImdldFJvdyIsImFkZFJvdyIsInRib2R5Iiwicm93U3RyIiwibmV3T2JqIiwiSG90U3RhcSIsImFkZEh0bWwiLCJjbGVhclJvd3MiLCJpbm5lckhUTUwiLCJsaXN0Iiwic2V0VGltZW91dCIsIkFkbWluVGV4dCIsIm5vX291dHB1dCIsInBsYWNlSGVyZUFycmF5IiwicXVlcnlTZWxlY3RvckFsbCIsInBsYWNlSGVyZSIsInJlbW92ZUNoaWxkIiwicXVlcnlTZWxlY3RvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJIb3RTdGFxV2ViIiwiYm9vdHN0cmFwIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImNhbGwiXSwic291cmNlUm9vdCI6IiJ9