carbon-components-angular 5.43.0 → 5.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/documentation/classes/TableModel.html +290 -76
- package/docs/documentation/components/Pagination.html +22 -16
- package/docs/documentation/components/Table.html +182 -136
- package/docs/documentation/components/TableHead.html +231 -44
- package/docs/documentation/components/TableHeadExpand.html +359 -6
- package/docs/documentation/coverage.html +10 -10
- package/docs/documentation/interfaces/PaginationTranslations.html +8 -2
- package/docs/documentation/js/search/search_index.js +2 -2
- package/docs/documentation/modules/ComboBoxModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ComboBoxModule.html +4 -4
- package/docs/documentation/modules/ContentSwitcherModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ContentSwitcherModule.html +4 -4
- package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +37 -41
- package/docs/documentation/modules/DatePickerInputModule.html +37 -41
- package/docs/documentation/modules/DatePickerModule/dependencies.svg +38 -38
- package/docs/documentation/modules/DatePickerModule.html +38 -38
- package/docs/documentation/modules/GridModule/dependencies.svg +60 -60
- package/docs/documentation/modules/GridModule.html +60 -60
- package/docs/documentation/modules/LoadingModule/dependencies.svg +4 -4
- package/docs/documentation/modules/LoadingModule.html +4 -4
- package/docs/documentation/modules/NFormsModule/dependencies.svg +4 -4
- package/docs/documentation/modules/NFormsModule.html +4 -4
- package/docs/documentation/modules/NumberModule/dependencies.svg +4 -4
- package/docs/documentation/modules/NumberModule.html +4 -4
- package/docs/documentation/modules/ProgressIndicatorModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ProgressIndicatorModule.html +4 -4
- package/docs/documentation/modules/RadioModule/dependencies.svg +4 -4
- package/docs/documentation/modules/RadioModule.html +4 -4
- package/docs/documentation/modules/SelectModule/dependencies.svg +58 -58
- package/docs/documentation/modules/SelectModule.html +58 -58
- package/docs/documentation/modules/SliderModule/dependencies.svg +4 -4
- package/docs/documentation/modules/SliderModule.html +4 -4
- package/docs/documentation/modules/TableModule/dependencies.svg +216 -216
- package/docs/documentation/modules/TableModule.html +216 -216
- package/docs/documentation/modules/TabsModule/dependencies.svg +69 -69
- package/docs/documentation/modules/TabsModule.html +69 -69
- package/docs/documentation/modules/ThemeModule/dependencies.svg +14 -14
- package/docs/documentation/modules/ThemeModule.html +14 -14
- package/docs/documentation/modules/TilesModule/dependencies.svg +101 -101
- package/docs/documentation/modules/TilesModule.html +101 -101
- package/docs/documentation/modules/TimePickerModule/dependencies.svg +4 -4
- package/docs/documentation/modules/TimePickerModule.html +4 -4
- package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +30 -30
- package/docs/documentation/modules/TimePickerSelectModule.html +30 -30
- package/docs/documentation/modules/ToggleModule/dependencies.svg +19 -19
- package/docs/documentation/modules/ToggleModule.html +19 -19
- package/docs/documentation/modules/ToggletipModule/dependencies.svg +37 -37
- package/docs/documentation/modules/ToggletipModule.html +37 -37
- package/docs/documentation/modules/TooltipModule/dependencies.svg +4 -4
- package/docs/documentation/modules/TooltipModule.html +4 -4
- package/docs/documentation/modules/TreeviewModule/dependencies.svg +36 -36
- package/docs/documentation/modules/TreeviewModule.html +36 -36
- package/docs/documentation.json +732 -416
- package/docs/storybook/5868.37cc7ea3.iframe.bundle.js +1 -0
- package/docs/storybook/8341.2bf88948.iframe.bundle.js +1 -0
- package/docs/storybook/9115.1d90f93b.iframe.bundle.js +1 -0
- package/docs/storybook/iframe.html +2 -2
- package/docs/storybook/main.40b82efc.iframe.bundle.js +1 -0
- package/docs/storybook/project.json +1 -1
- package/docs/storybook/{runtime~main.4c0184d4.iframe.bundle.js → runtime~main.d3e52413.iframe.bundle.js} +1 -1
- package/docs/storybook/table-table-stories.6669e4b6.iframe.bundle.js +1 -0
- package/esm2020/i18n/en.mjs +2 -1
- package/esm2020/pagination/pagination.component.mjs +9 -3
- package/esm2020/table/head/table-head-expand.component.mjs +50 -9
- package/esm2020/table/head/table-head.component.mjs +38 -5
- package/esm2020/table/table-model.class.mjs +34 -1
- package/esm2020/table/table.component.mjs +15 -3
- package/fesm2015/carbon-components-angular-i18n.mjs +1 -0
- package/fesm2015/carbon-components-angular-i18n.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-pagination.mjs +8 -2
- package/fesm2015/carbon-components-angular-pagination.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-table.mjs +137 -21
- package/fesm2015/carbon-components-angular-table.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-i18n.mjs +1 -0
- package/fesm2020/carbon-components-angular-i18n.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-pagination.mjs +8 -2
- package/fesm2020/carbon-components-angular-pagination.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-table.mjs +137 -21
- package/fesm2020/carbon-components-angular-table.mjs.map +1 -1
- package/i18n/en.d.ts +1 -0
- package/i18n/i18n.service.d.ts +4 -1
- package/package.json +1 -1
- package/table/head/table-head-expand.component.d.ts +12 -1
- package/table/head/table-head.component.d.ts +15 -1
- package/table/table-model.class.d.ts +14 -0
- package/table/table.component.d.ts +5 -1
- package/docs/storybook/5868.53c4195a.iframe.bundle.js +0 -1
- package/docs/storybook/8341.a544f9e9.iframe.bundle.js +0 -1
- package/docs/storybook/9115.b37cce0a.iframe.bundle.js +0 -1
- package/docs/storybook/main.fa8e9d39.iframe.bundle.js +0 -1
- package/docs/storybook/table-table-stories.c19aca64.iframe.bundle.js +0 -1
|
@@ -24,6 +24,7 @@ export class TableHead {
|
|
|
24
24
|
this.selectAllCheckbox = false;
|
|
25
25
|
this.skeleton = false;
|
|
26
26
|
this.stickyHeader = false;
|
|
27
|
+
this.showExpandAllToggle = false;
|
|
27
28
|
/**
|
|
28
29
|
* Setting sortable to false will disable all headers including headers which are sortable. Is is
|
|
29
30
|
* possible to set the sortable state on the header item to disable/enable sorting for only some headers.
|
|
@@ -45,6 +46,18 @@ export class TableHead {
|
|
|
45
46
|
* @param model
|
|
46
47
|
*/
|
|
47
48
|
this.deselectAll = new EventEmitter();
|
|
49
|
+
/**
|
|
50
|
+
* Emits if all rows are expanded.
|
|
51
|
+
*
|
|
52
|
+
* @param model
|
|
53
|
+
*/
|
|
54
|
+
this.expandAllRows = new EventEmitter();
|
|
55
|
+
/**
|
|
56
|
+
* Emits if all rows are collapsed.
|
|
57
|
+
*
|
|
58
|
+
* @param model
|
|
59
|
+
*/
|
|
60
|
+
this.collapseAllRows = new EventEmitter();
|
|
48
61
|
this.scrollbarWidth = 0;
|
|
49
62
|
this._checkboxHeaderLabel = this.i18n.getOverridable("TABLE.CHECKBOX_HEADER");
|
|
50
63
|
this._sortDescendingLabel = this.i18n.getOverridable("TABLE.SORT_DESCENDING");
|
|
@@ -88,6 +101,14 @@ export class TableHead {
|
|
|
88
101
|
this.deselectAll.emit(this.model);
|
|
89
102
|
}
|
|
90
103
|
}
|
|
104
|
+
onExpandAllRowsChange(expand) {
|
|
105
|
+
if (expand) {
|
|
106
|
+
this.expandAllRows.emit(this.model);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.collapseAllRows.emit(this.model);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
91
112
|
getCheckboxHeaderLabel() {
|
|
92
113
|
return this._checkboxHeaderLabel.subject;
|
|
93
114
|
}
|
|
@@ -102,15 +123,18 @@ export class TableHead {
|
|
|
102
123
|
}
|
|
103
124
|
}
|
|
104
125
|
TableHead.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableHead, deps: [{ token: i1.I18n }], target: i0.ɵɵFactoryTarget.Component });
|
|
105
|
-
TableHead.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableHead, selector: "[cdsTableHead], [ibmTableHead]", inputs: { model: "model", showSelectionColumn: "showSelectionColumn", enableSingleSelect: "enableSingleSelect", selectAllCheckboxSomeSelected: "selectAllCheckboxSomeSelected", selectAllCheckbox: "selectAllCheckbox", skeleton: "skeleton", stickyHeader: "stickyHeader", sortable: "sortable", checkboxHeaderLabel: "checkboxHeaderLabel", sortDescendingLabel: "sortDescendingLabel", sortAscendingLabel: "sortAscendingLabel", filterTitle: "filterTitle" }, outputs: { sort: "sort", selectAll: "selectAll", deselectAll: "deselectAll" }, ngImport: i0, template: `
|
|
126
|
+
TableHead.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableHead, selector: "[cdsTableHead], [ibmTableHead]", inputs: { model: "model", showSelectionColumn: "showSelectionColumn", enableSingleSelect: "enableSingleSelect", selectAllCheckboxSomeSelected: "selectAllCheckboxSomeSelected", selectAllCheckbox: "selectAllCheckbox", skeleton: "skeleton", stickyHeader: "stickyHeader", showExpandAllToggle: "showExpandAllToggle", sortable: "sortable", checkboxHeaderLabel: "checkboxHeaderLabel", sortDescendingLabel: "sortDescendingLabel", sortAscendingLabel: "sortAscendingLabel", filterTitle: "filterTitle" }, outputs: { sort: "sort", selectAll: "selectAll", deselectAll: "deselectAll", expandAllRows: "expandAllRows", collapseAllRows: "collapseAllRows" }, ngImport: i0, template: `
|
|
106
127
|
<ng-container *ngIf="model">
|
|
107
128
|
<tr>
|
|
108
129
|
<th
|
|
109
130
|
cdsTableHeadExpand
|
|
110
131
|
*ngIf="model.hasExpandableRows()"
|
|
111
132
|
scope="col"
|
|
133
|
+
[showExpandAllToggle]="showExpandAllToggle"
|
|
112
134
|
[ngClass]="{'cds--table-expand-v2': stickyHeader}"
|
|
113
|
-
[id]="model.getId('expand')"
|
|
135
|
+
[id]="model.getId('expand')"
|
|
136
|
+
[expanded]="model.expandableRowsCount() === model.expandedRowsCount()"
|
|
137
|
+
(expandedChange)="onExpandAllRowsChange($event)">
|
|
114
138
|
</th>
|
|
115
139
|
<th
|
|
116
140
|
*ngIf="!skeleton && showSelectionColumn && enableSingleSelect"
|
|
@@ -158,7 +182,7 @@ TableHead.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14
|
|
|
158
182
|
</tr>
|
|
159
183
|
</ng-container>
|
|
160
184
|
<ng-content></ng-content>
|
|
161
|
-
`, isInline: true, styles: [".cds--table-expand-v2{padding-left:2.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.TableHeadCell, selector: "[cdsTableHeadCell], [ibmTableHeadCell]", inputs: ["column", "skeleton", "sortable", "sortDescendingLabel", "sortAscendingLabel", "filterTitle"], outputs: ["sort"] }, { kind: "component", type: i4.TableHeadCheckbox, selector: "[cdsTableHeadCheckbox], [ibmTableHeadCheckbox]", inputs: ["checked", "indeterminate", "skeleton", "name", "ariaLabel"], outputs: ["change"] }, { kind: "component", type: i5.TableHeadExpand, selector: "[cdsTableHeadExpand], [ibmTableHeadExpand]" }] });
|
|
185
|
+
`, isInline: true, styles: [".cds--table-expand-v2{padding-left:2.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.TableHeadCell, selector: "[cdsTableHeadCell], [ibmTableHeadCell]", inputs: ["column", "skeleton", "sortable", "sortDescendingLabel", "sortAscendingLabel", "filterTitle"], outputs: ["sort"] }, { kind: "component", type: i4.TableHeadCheckbox, selector: "[cdsTableHeadCheckbox], [ibmTableHeadCheckbox]", inputs: ["checked", "indeterminate", "skeleton", "name", "ariaLabel"], outputs: ["change"] }, { kind: "component", type: i5.TableHeadExpand, selector: "[cdsTableHeadExpand], [ibmTableHeadExpand]", inputs: ["showExpandAllToggle", "expanded"], outputs: ["expandedChange"] }] });
|
|
162
186
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableHead, decorators: [{
|
|
163
187
|
type: Component,
|
|
164
188
|
args: [{ selector: "[cdsTableHead], [ibmTableHead]", template: `
|
|
@@ -168,8 +192,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
168
192
|
cdsTableHeadExpand
|
|
169
193
|
*ngIf="model.hasExpandableRows()"
|
|
170
194
|
scope="col"
|
|
195
|
+
[showExpandAllToggle]="showExpandAllToggle"
|
|
171
196
|
[ngClass]="{'cds--table-expand-v2': stickyHeader}"
|
|
172
|
-
[id]="model.getId('expand')"
|
|
197
|
+
[id]="model.getId('expand')"
|
|
198
|
+
[expanded]="model.expandableRowsCount() === model.expandedRowsCount()"
|
|
199
|
+
(expandedChange)="onExpandAllRowsChange($event)">
|
|
173
200
|
</th>
|
|
174
201
|
<th
|
|
175
202
|
*ngIf="!skeleton && showSelectionColumn && enableSingleSelect"
|
|
@@ -232,6 +259,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
232
259
|
type: Input
|
|
233
260
|
}], stickyHeader: [{
|
|
234
261
|
type: Input
|
|
262
|
+
}], showExpandAllToggle: [{
|
|
263
|
+
type: Input
|
|
235
264
|
}], sortable: [{
|
|
236
265
|
type: Input
|
|
237
266
|
}], checkboxHeaderLabel: [{
|
|
@@ -248,5 +277,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
248
277
|
type: Output
|
|
249
278
|
}], deselectAll: [{
|
|
250
279
|
type: Output
|
|
280
|
+
}], expandAllRows: [{
|
|
281
|
+
type: Output
|
|
282
|
+
}], collapseAllRows: [{
|
|
283
|
+
type: Output
|
|
251
284
|
}] } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGFibGUvaGVhZC90YWJsZS1oZWFkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7O0FBS3BFOzs7Ozs7OztHQVFHO0FBbUVILE1BQU0sT0FBTyxTQUFTO0lBaUZyQixZQUFzQixJQUFVO1FBQVYsU0FBSSxHQUFKLElBQUksQ0FBTTtRQTlFdkIsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUzQixrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFFdEMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFOUI7OztXQUdHO1FBQ00sYUFBUSxHQUFHLElBQUksQ0FBQztRQXNDekI7O1dBRUc7UUFDTyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM1Qzs7OztXQUlHO1FBQ08sY0FBUyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFDckQ7Ozs7V0FJRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUVoRCxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUVoQix5QkFBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3pFLHlCQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekUsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxj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Z0JBVUYsV0FBVztzQkFEZCxLQUFLO2dCQVlJLElBQUk7c0JBQWIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQU1HLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0QWZ0ZXJWaWV3SW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSBcIi4uL3RhYmxlLW1vZGVsLmNsYXNzXCI7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJXaWR0aCB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3V0aWxzXCI7XG5pbXBvcnQgeyBJMThuLCBPdmVycmlkYWJsZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVGFibGVSb3dTaXplIH0gZnJvbSBcIi4uL3RhYmxlLnR5cGVzXCI7XG5cbi8qKlxuICogQSBzdWJjb21wb25lbnQgdGhhdCBjcmVhdGVzIHRoZSB0aGVhZCBvZiB0aGUgdGFibGVcbiAqXG4gKiAjIyBCYXNpYyB1c2FnZVxuICpcbiAqIGBgYGh0bWxcbiAqIFx0PHRoZWFkIGNkc1RhYmxlSGVhZCBbbW9kZWxdPVwibW9kZWxcIj48L3RoZWFkPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG5cdHNlbGVjdG9yOiBcIltjZHNUYWJsZUhlYWRdLCBbaWJtVGFibGVIZWFkXVwiLFxuXHR0ZW1wbGF0ZTogYFxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWxcIj5cblx0XHQ8dHI+XG5cdFx0XHQ8dGhcblx0XHRcdFx0Y2RzVGFibGVIZWFkRXhwYW5kXG5cdFx0XHRcdCpuZ0lmPVwibW9kZWwuaGFzRXhwYW5kYWJsZVJvd3MoKVwiXG5cdFx0XHRcdHNjb3BlPVwiY29sXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXRhYmxlLWV4cGFuZC12Mic6IHN0aWNreUhlYWRlcn1cIlxuXHRcdFx0XHRbaWRdPVwibW9kZWwuZ2V0SWQoJ2V4cGFuZCcpXCI+XG5cdFx0XHQ8L3RoPlxuXHRcdFx0PHRoXG5cdFx0XHRcdCpuZ0lmPVwiIXNrZWxldG9uICYmIHNob3dTZWxlY3Rpb25Db2x1bW4gJiYgZW5hYmxlU2luZ2xlU2VsZWN0XCJcblx0XHRcdFx0c2NvcGU9XCJjb2xcIlxuXHRcdFx0XHRbaWRdPVwibW9kZWwuZ2V0SWQoJ3NlbGVjdCcpXCI+XG5cdFx0XHRcdDwhLS0gYWRkIHdpZHRoIDA7IHNpbmNlIHRoZSBjYXJib24gc3R5bGVzIGRvbid0IHNlZW0gdG8gY29uc3RyYWluIHRoaXMgaGVhZGVycyB3aWR0aCAtLT5cblx0XHRcdDwvdGg+XG5cdFx0XHQ8dGhcblx0XHRcdFx0Y2RzVGFibGVIZWFkQ2hlY2tib3hcblx0XHRcdFx0Km5nSWY9XCIhc2tlbGV0b24gJiYgc2hvd1NlbGVjdGlvbkNvbHVtbiAmJiAhZW5hYmxlU2luZ2xlU2VsZWN0XCJcblx0XHRcdFx0c2NvcGU9XCJjb2xcIlxuXHRcdFx0XHRbY2hlY2tlZF09XCJzZWxlY3RBbGxDaGVja2JveFwiXG5cdFx0XHRcdFtpbmRldGVybWluYXRlXT1cInNlbGVjdEFsbENoZWNrYm94U29tZVNlbGVjdGVkXCJcblx0XHRcdFx0W2FyaWFMYWJlbF09XCJnZXRDaGVja2JveEhlYWRlckxhYmVsKClcIlxuXHRcdFx0XHRbc2tlbGV0b25dPVwic2tlbGV0b25cIlxuXHRcdFx0XHRbbmFtZV09XCJtb2RlbC5nZXRIZWFkZXJJZCgnc2VsZWN0JylcIlxuXHRcdFx0XHQoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hlY2tib3hDaGFuZ2UoKVwiXG5cdFx0XHRcdFtpZF09XCJtb2RlbC5nZXRJZCgnc2VsZWN0JylcIj5cblx0XHRcdDwvdGg+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbW9kZWwuaGVhZGVyOyBsZXQgaSA9IGluZGV4XCI+XG5cdFx0XHRcdDx0aFxuXHRcdFx0XHRcdCpuZ0lmPVwiY29sdW1uICYmIGNvbHVtbi52aXNpYmxlXCJcblx0XHRcdFx0XHRbbmdTdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuXHRcdFx0XHRcdGNkc1RhYmxlSGVhZENlbGxcblx0XHRcdFx0XHRzY29wZT1cImNvbFwiXG5cdFx0XHRcdFx0W2NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIlxuXHRcdFx0XHRcdFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiXG5cdFx0XHRcdFx0W3NrZWxldG9uXT1cInNrZWxldG9uXCJcblx0XHRcdFx0XHRbaWRdPVwibW9kZWwuZ2V0SWQoaSlcIlxuXHRcdFx0XHRcdFtjb2x1bW5dPVwiY29sdW1uXCJcblx0XHRcdFx0XHRbZmlsdGVyVGl0bGVdPVwiZ2V0RmlsdGVyVGl0bGUoKVwiXG5cdFx0XHRcdFx0W2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sU3BhblwiXG5cdFx0XHRcdFx0W2F0dHIucm93c3Bhbl09XCJjb2x1bW4ucm93U3BhblwiXG5cdFx0XHRcdFx0KHNvcnQpPVwic29ydC5lbWl0KGkpXCI+XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDx0aCAqbmdJZj1cIiFza2VsZXRvbiAmJiBzdGlja3lIZWFkZXIgJiYgc2Nyb2xsYmFyV2lkdGhcIlxuXHRcdFx0XHRzY29wZT1cImNvbFwiXG5cdFx0XHRcdFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBzY3JvbGxiYXJXaWR0aCArICdweCcsICdwYWRkaW5nJzogMCwgJ2JvcmRlcic6IDB9XCI+XG5cdFx0XHRcdDwhLS1cblx0XHRcdFx0XHRTY3JvbGxiYXIgcHVzaGVzIGJvZHkgdG8gdGhlIGxlZnQgc28gdGhpcyBoZWFkZXIgY29sdW1uIGlzIGFkZGVkIHRvIHB1c2hcblx0XHRcdFx0XHR0aGUgdGl0bGUgYmFyIHRoZSBzYW1lIGFtb3VudCBhbmQga2VlcCB0aGUgaGVhZGVyIGFuZCBib2R5IGNvbHVtbnMgYWxpZ25lZC5cblx0XHRcdFx0LS0+XG5cdFx0XHQ8L3RoPlxuXHRcdDwvdHI+XG5cdDwvbmctY29udGFpbmVyPlxuXHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdGAsXG5cdHN0eWxlczogW2Bcblx0XHQuY2RzLS10YWJsZS1leHBhbmQtdjIge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAyLjVyZW07XG5cdFx0fVxuXHRgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUhlYWQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblx0QElucHV0KCkgbW9kZWw6IFRhYmxlTW9kZWw7XG5cblx0QElucHV0KCkgc2hvd1NlbGVjdGlvbkNvbHVtbiA9IHRydWU7XG5cblx0QElucHV0KCkgZW5hYmxlU2luZ2xlU2VsZWN0ID0gZmFsc2U7XG5cblx0QElucHV0KCkgc2VsZWN0QWxsQ2hlY2tib3hTb21lU2VsZWN0ZWQgPSBmYWxzZTtcblxuXHRASW5wdXQoKSBzZWxlY3RBbGxDaGVja2JveCA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cblx0QElucHV0KCkgc3RpY2t5SGVhZGVyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldHRpbmcgc29ydGFibGUgdG8gZmFsc2Ugd2lsbCBkaXNhYmxlIGFsbCBoZWFkZXJzIGluY2x1ZGluZyBoZWFkZXJzIHdoaWNoIGFyZSBzb3J0YWJsZS4gSXMgaXNcblx0ICogcG9zc2libGUgdG8gc2V0IHRoZSBzb3J0YWJsZSBzdGF0ZSBvbiB0aGUgaGVhZGVyIGl0ZW0gdG8gZGlzYWJsZS9lbmFibGUgc29ydGluZyBmb3Igb25seSBzb21lIGhlYWRlcnMuXG5cdCAqL1xuXHRASW5wdXQoKSBzb3J0YWJsZSA9IHRydWU7XG5cblx0QElucHV0KClcblx0c2V0IGNoZWNrYm94SGVhZGVyTGFiZWwodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2NoZWNrYm94SGVhZGVyTGFiZWwub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNoZWNrYm94SGVhZGVyTGFiZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoZWNrYm94SGVhZGVyTGFiZWwudmFsdWU7XG5cdH1cblxuXHRASW5wdXQoKVxuXHRzZXQgc29ydERlc2NlbmRpbmdMYWJlbCh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fc29ydERlc2NlbmRpbmdMYWJlbC5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgc29ydERlc2NlbmRpbmdMYWJlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc29ydERlc2NlbmRpbmdMYWJlbC52YWx1ZTtcblx0fVxuXG5cdEBJbnB1dCgpXG5cdHNldCBzb3J0QXNjZW5kaW5nTGFiZWwodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX3NvcnRBc2NlbmRpbmdMYWJlbC5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgc29ydEFzY2VuZGluZ0xhYmVsKCkge1xuXHRcdHJldHVybiB0aGlzLl9zb3J0QXNjZW5kaW5nTGFiZWwudmFsdWU7XG5cdH1cblxuXHRASW5wdXQoKVxuXHRzZXQgZmlsdGVyVGl0bGUodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2ZpbHRlclRpdGxlLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBmaWx0ZXJUaXRsZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZmlsdGVyVGl0bGUudmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgYW4gaW5kZXggb2YgdGhlIGNvbHVtbiB0aGF0IHdhbnRzIHRvIGJlIHNvcnRlZC5cblx0ICovXG5cdEBPdXRwdXQoKSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cdC8qKlxuXHQgKiBFbWl0cyBpZiBhbGwgcm93cyBhcmUgc2VsZWN0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBtb2RlbFxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdEFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVNb2RlbD4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGlmIGFsbCByb3dzIGFyZSBkZXNlbGVjdGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gbW9kZWxcblx0ICovXG5cdEBPdXRwdXQoKSBkZXNlbGVjdEFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVNb2RlbD4oKTtcblxuXHRwdWJsaWMgc2Nyb2xsYmFyV2lkdGggPSAwO1xuXG5cdHByb3RlY3RlZCBfY2hlY2tib3hIZWFkZXJMYWJlbCA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIlRBQkxFLkNIRUNLQk9YX0hFQURFUlwiKTtcblx0cHJvdGVjdGVkIF9zb3J0RGVzY2VuZGluZ0xhYmVsID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiVEFCTEUuU09SVF9ERVNDRU5ESU5HXCIpO1xuXHRwcm90ZWN0ZWQgX3NvcnRBc2NlbmRpbmdMYWJlbCA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIlRBQkxFLlNPUlRfQVNDRU5ESU5HXCIpO1xuXHRwcm90ZWN0ZWQgX2ZpbHRlclRpdGxlID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiVEFCTEUuRklMVEVSXCIpO1xuXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpMThuOiBJMThuKSB7fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuc2Nyb2xsYmFyV2lkdGggPSBnZXRTY3JvbGxiYXJXaWR0aCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25TZWxlY3RBbGxDaGVja2JveENoYW5nZSgpIHtcblx0XHRpZiAoIXRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggJiYgIXRoaXMuc2VsZWN0QWxsQ2hlY2tib3hTb21lU2VsZWN0ZWQpIHtcblx0XHRcdHRoaXMuc2VsZWN0QWxsLmVtaXQodGhpcy5tb2RlbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZGVzZWxlY3RBbGwuZW1pdCh0aGlzLm1vZGVsKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDaGVja2JveEhlYWRlckxhYmVsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoZWNrYm94SGVhZGVyTGFiZWwuc3ViamVjdDtcblx0fVxuXG5cdGdldFNvcnREZXNjZW5kaW5nTGFiZWwoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5fc29ydERlc2NlbmRpbmdMYWJlbC5zdWJqZWN0O1xuXHR9XG5cblx0Z2V0U29ydEFzY2VuZGluZ0xhYmVsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvcnRBc2NlbmRpbmdMYWJlbC5zdWJqZWN0O1xuXHR9XG5cblx0Z2V0RmlsdGVyVGl0bGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5fZmlsdGVyVGl0bGUuc3ViamVjdDtcblx0fVxufVxuIl19
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGFibGUvaGVhZC90YWJsZS1oZWFkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7O0FBS3BFOzs7Ozs7OztHQVFHO0FBc0VILE1BQU0sT0FBTyxTQUFTO0lBK0ZyQixZQUFzQixJQUFVO1FBQVYsU0FBSSxHQUFKLElBQUksQ0FBTTtRQTVGdkIsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUzQixrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFFdEMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRXJDOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFzQ3pCOztXQUVHO1FBQ08sU0FBSSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUM7Ozs7V0FJRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQ3JEOzs7O1dBSUc7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFDdkQ7Ozs7V0FJRztRQUNPLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUN6RDs7OztXQUlHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRXBELG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLHlCQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkRUOzJGQVFRLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFVRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBVUYsa0JBQWtCO3NCQURyQixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFZSSxJQUFJO3NCQUFiLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFNRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLGFBQWE7c0JBQXRCLE1BQU07Z0JBTUcsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRBZnRlclZpZXdJbml0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tIFwiLi4vdGFibGUtbW9kZWwuY2xhc3NcIjtcbmltcG9ydCB7IGdldFNjcm9sbGJhcldpZHRoIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcbmltcG9ydCB7IEkxOG4sIE92ZXJyaWRhYmxlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBUYWJsZVJvd1NpemUgfSBmcm9tIFwiLi4vdGFibGUudHlwZXNcIjtcblxuLyoqXG4gKiBBIHN1YmNvbXBvbmVudCB0aGF0IGNyZWF0ZXMgdGhlIHRoZWFkIG9mIHRoZSB0YWJsZVxuICpcbiAqICMjIEJhc2ljIHVzYWdlXG4gKlxuICogYGBgaHRtbFxuICogXHQ8dGhlYWQgY2RzVGFibGVIZWFkIFttb2RlbF09XCJtb2RlbFwiPjwvdGhlYWQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3Jcblx0c2VsZWN0b3I6IFwiW2Nkc1RhYmxlSGVhZF0sIFtpYm1UYWJsZUhlYWRdXCIsXG5cdHRlbXBsYXRlOiBgXG5cdDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbFwiPlxuXHRcdDx0cj5cblx0XHRcdDx0aFxuXHRcdFx0XHRjZHNUYWJsZUhlYWRFeHBhbmRcblx0XHRcdFx0Km5nSWY9XCJtb2RlbC5oYXNFeHBhbmRhYmxlUm93cygpXCJcblx0XHRcdFx0c2NvcGU9XCJjb2xcIlxuXHRcdFx0XHRbc2hvd0V4cGFuZEFsbFRvZ2dsZV09XCJzaG93RXhwYW5kQWxsVG9nZ2xlXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXRhYmxlLWV4cGFuZC12Mic6IHN0aWNreUhlYWRlcn1cIlxuXHRcdFx0XHRbaWRdPVwibW9kZWwuZ2V0SWQoJ2V4cGFuZCcpXCJcblx0XHRcdFx0W2V4cGFuZGVkXT1cIm1vZGVsLmV4cGFuZGFibGVSb3dzQ291bnQoKSA9PT0gbW9kZWwuZXhwYW5kZWRSb3dzQ291bnQoKVwiXG5cdFx0XHRcdChleHBhbmRlZENoYW5nZSk9XCJvbkV4cGFuZEFsbFJvd3NDaGFuZ2UoJGV2ZW50KVwiPlxuXHRcdFx0PC90aD5cblx0XHRcdDx0aFxuXHRcdFx0XHQqbmdJZj1cIiFza2VsZXRvbiAmJiBzaG93U2VsZWN0aW9uQ29sdW1uICYmIGVuYWJsZVNpbmdsZVNlbGVjdFwiXG5cdFx0XHRcdHNjb3BlPVwiY29sXCJcblx0XHRcdFx0W2lkXT1cIm1vZGVsLmdldElkKCdzZWxlY3QnKVwiPlxuXHRcdFx0XHQ8IS0tIGFkZCB3aWR0aCAwOyBzaW5jZSB0aGUgY2FyYm9uIHN0eWxlcyBkb24ndCBzZWVtIHRvIGNvbnN0cmFpbiB0aGlzIGhlYWRlcnMgd2lkdGggLS0+XG5cdFx0XHQ8L3RoPlxuXHRcdFx0PHRoXG5cdFx0XHRcdGNkc1RhYmxlSGVhZENoZWNrYm94XG5cdFx0XHRcdCpuZ0lmPVwiIXNrZWxldG9uICYmIHNob3dTZWxlY3Rpb25Db2x1bW4gJiYgIWVuYWJsZVNpbmdsZVNlbGVjdFwiXG5cdFx0XHRcdHNjb3BlPVwiY29sXCJcblx0XHRcdFx0W2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tib3hcIlxuXHRcdFx0XHRbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RBbGxDaGVja2JveFNvbWVTZWxlY3RlZFwiXG5cdFx0XHRcdFthcmlhTGFiZWxdPVwiZ2V0Q2hlY2tib3hIZWFkZXJMYWJlbCgpXCJcblx0XHRcdFx0W3NrZWxldG9uXT1cInNrZWxldG9uXCJcblx0XHRcdFx0W25hbWVdPVwibW9kZWwuZ2V0SGVhZGVySWQoJ3NlbGVjdCcpXCJcblx0XHRcdFx0KGNoYW5nZSk9XCJvblNlbGVjdEFsbENoZWNrYm94Q2hhbmdlKClcIlxuXHRcdFx0XHRbaWRdPVwibW9kZWwuZ2V0SWQoJ3NlbGVjdCcpXCI+XG5cdFx0XHQ8L3RoPlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG1vZGVsLmhlYWRlcjsgbGV0IGkgPSBpbmRleFwiPlxuXHRcdFx0XHQ8dGhcblx0XHRcdFx0XHQqbmdJZj1cImNvbHVtbiAmJiBjb2x1bW4udmlzaWJsZVwiXG5cdFx0XHRcdFx0W25nU3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcblx0XHRcdFx0XHRjZHNUYWJsZUhlYWRDZWxsXG5cdFx0XHRcdFx0c2NvcGU9XCJjb2xcIlxuXHRcdFx0XHRcdFtjbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCJcblx0XHRcdFx0XHRbc29ydGFibGVdPVwic29ydGFibGVcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0W2lkXT1cIm1vZGVsLmdldElkKGkpXCJcblx0XHRcdFx0XHRbY29sdW1uXT1cImNvbHVtblwiXG5cdFx0XHRcdFx0W2ZpbHRlclRpdGxlXT1cImdldEZpbHRlclRpdGxlKClcIlxuXHRcdFx0XHRcdFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbFNwYW5cIlxuXHRcdFx0XHRcdFthdHRyLnJvd3NwYW5dPVwiY29sdW1uLnJvd1NwYW5cIlxuXHRcdFx0XHRcdChzb3J0KT1cInNvcnQuZW1pdChpKVwiPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8dGggKm5nSWY9XCIhc2tlbGV0b24gJiYgc3RpY2t5SGVhZGVyICYmIHNjcm9sbGJhcldpZHRoXCJcblx0XHRcdFx0c2NvcGU9XCJjb2xcIlxuXHRcdFx0XHRbbmdTdHlsZV09XCJ7J3dpZHRoJzogc2Nyb2xsYmFyV2lkdGggKyAncHgnLCAncGFkZGluZyc6IDAsICdib3JkZXInOiAwfVwiPlxuXHRcdFx0XHQ8IS0tXG5cdFx0XHRcdFx0U2Nyb2xsYmFyIHB1c2hlcyBib2R5IHRvIHRoZSBsZWZ0IHNvIHRoaXMgaGVhZGVyIGNvbHVtbiBpcyBhZGRlZCB0byBwdXNoXG5cdFx0XHRcdFx0dGhlIHRpdGxlIGJhciB0aGUgc2FtZSBhbW91bnQgYW5kIGtlZXAgdGhlIGhlYWRlciBhbmQgYm9keSBjb2x1bW5zIGFsaWduZWQuXG5cdFx0XHRcdC0tPlxuXHRcdFx0PC90aD5cblx0XHQ8L3RyPlxuXHQ8L25nLWNvbnRhaW5lcj5cblx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRgLFxuXHRzdHlsZXM6IFtgXG5cdFx0LmNkcy0tdGFibGUtZXhwYW5kLXYyIHtcblx0XHRcdHBhZGRpbmctbGVmdDogMi41cmVtO1xuXHRcdH1cblx0YF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVIZWFkIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cdEBJbnB1dCgpIG1vZGVsOiBUYWJsZU1vZGVsO1xuXG5cdEBJbnB1dCgpIHNob3dTZWxlY3Rpb25Db2x1bW4gPSB0cnVlO1xuXG5cdEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdCA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHNlbGVjdEFsbENoZWNrYm94U29tZVNlbGVjdGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgc2VsZWN0QWxsQ2hlY2tib3ggPSBmYWxzZTtcblxuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHN0aWNreUhlYWRlciA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHNob3dFeHBhbmRBbGxUb2dnbGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0dGluZyBzb3J0YWJsZSB0byBmYWxzZSB3aWxsIGRpc2FibGUgYWxsIGhlYWRlcnMgaW5jbHVkaW5nIGhlYWRlcnMgd2hpY2ggYXJlIHNvcnRhYmxlLiBJcyBpc1xuXHQgKiBwb3NzaWJsZSB0byBzZXQgdGhlIHNvcnRhYmxlIHN0YXRlIG9uIHRoZSBoZWFkZXIgaXRlbSB0byBkaXNhYmxlL2VuYWJsZSBzb3J0aW5nIGZvciBvbmx5IHNvbWUgaGVhZGVycy5cblx0ICovXG5cdEBJbnB1dCgpIHNvcnRhYmxlID0gdHJ1ZTtcblxuXHRASW5wdXQoKVxuXHRzZXQgY2hlY2tib3hIZWFkZXJMYWJlbCh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fY2hlY2tib3hIZWFkZXJMYWJlbC5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgY2hlY2tib3hIZWFkZXJMYWJlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hlY2tib3hIZWFkZXJMYWJlbC52YWx1ZTtcblx0fVxuXG5cdEBJbnB1dCgpXG5cdHNldCBzb3J0RGVzY2VuZGluZ0xhYmVsKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9zb3J0RGVzY2VuZGluZ0xhYmVsLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBzb3J0RGVzY2VuZGluZ0xhYmVsKCkge1xuXHRcdHJldHVybiB0aGlzLl9zb3J0RGVzY2VuZGluZ0xhYmVsLnZhbHVlO1xuXHR9XG5cblx0QElucHV0KClcblx0c2V0IHNvcnRBc2NlbmRpbmdMYWJlbCh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fc29ydEFzY2VuZGluZ0xhYmVsLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBzb3J0QXNjZW5kaW5nTGFiZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvcnRBc2NlbmRpbmdMYWJlbC52YWx1ZTtcblx0fVxuXG5cdEBJbnB1dCgpXG5cdHNldCBmaWx0ZXJUaXRsZSh2YWx1ZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG5cdFx0dGhpcy5fZmlsdGVyVGl0bGUub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGZpbHRlclRpdGxlKCkge1xuXHRcdHJldHVybiB0aGlzLl9maWx0ZXJUaXRsZS52YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0cyBhbiBpbmRleCBvZiB0aGUgY29sdW1uIHRoYXQgd2FudHMgdG8gYmUgc29ydGVkLlxuXHQgKi9cblx0QE91dHB1dCgpIHNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGlmIGFsbCByb3dzIGFyZSBzZWxlY3RlZC5cblx0ICpcblx0ICogQHBhcmFtIG1vZGVsXG5cdCAqL1xuXHRAT3V0cHV0KCkgc2VsZWN0QWxsID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZU1vZGVsPigpO1xuXHQvKipcblx0ICogRW1pdHMgaWYgYWxsIHJvd3MgYXJlIGRlc2VsZWN0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBtb2RlbFxuXHQgKi9cblx0QE91dHB1dCgpIGRlc2VsZWN0QWxsID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZU1vZGVsPigpO1xuXHQvKipcblx0ICogRW1pdHMgaWYgYWxsIHJvd3MgYXJlIGV4cGFuZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gbW9kZWxcblx0ICovXG5cdEBPdXRwdXQoKSBleHBhbmRBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZU1vZGVsPigpO1xuXHQvKipcblx0ICogRW1pdHMgaWYgYWxsIHJvd3MgYXJlIGNvbGxhcHNlZC5cblx0ICpcblx0ICogQHBhcmFtIG1vZGVsXG5cdCAqL1xuXHRAT3V0cHV0KCkgY29sbGFwc2VBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZU1vZGVsPigpO1xuXG5cdHB1YmxpYyBzY3JvbGxiYXJXaWR0aCA9IDA7XG5cblx0cHJvdGVjdGVkIF9jaGVja2JveEhlYWRlckxhYmVsID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiVEFCTEUuQ0hFQ0tCT1hfSEVBREVSXCIpO1xuXHRwcm90ZWN0ZWQgX3NvcnREZXNjZW5kaW5nTGFiZWwgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJUQUJMRS5TT1JUX0RFU0NFTkRJTkdcIik7XG5cdHByb3RlY3RlZCBfc29ydEFzY2VuZGluZ0xhYmVsID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiVEFCTEUuU09SVF9BU0NFTkRJTkdcIik7XG5cdHByb3RlY3RlZCBfZmlsdGVyVGl0bGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJUQUJMRS5GSUxURVJcIik7XG5cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGkxOG46IEkxOG4pIHt9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5zY3JvbGxiYXJXaWR0aCA9IGdldFNjcm9sbGJhcldpZHRoKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRvblNlbGVjdEFsbENoZWNrYm94Q2hhbmdlKCkge1xuXHRcdGlmICghdGhpcy5zZWxlY3RBbGxDaGVja2JveCAmJiAhdGhpcy5zZWxlY3RBbGxDaGVja2JveFNvbWVTZWxlY3RlZCkge1xuXHRcdFx0dGhpcy5zZWxlY3RBbGwuZW1pdCh0aGlzLm1vZGVsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5kZXNlbGVjdEFsbC5lbWl0KHRoaXMubW9kZWwpO1xuXHRcdH1cblx0fVxuXG5cdG9uRXhwYW5kQWxsUm93c0NoYW5nZShleHBhbmQ6IGJvb2xlYW4pIHtcblx0XHRpZiAoZXhwYW5kKSB7XG5cdFx0XHR0aGlzLmV4cGFuZEFsbFJvd3MuZW1pdCh0aGlzLm1vZGVsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb2xsYXBzZUFsbFJvd3MuZW1pdCh0aGlzLm1vZGVsKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDaGVja2JveEhlYWRlckxhYmVsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoZWNrYm94SGVhZGVyTGFiZWwuc3ViamVjdDtcblx0fVxuXG5cdGdldFNvcnREZXNjZW5kaW5nTGFiZWwoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5fc29ydERlc2NlbmRpbmdMYWJlbC5zdWJqZWN0O1xuXHR9XG5cblx0Z2V0U29ydEFzY2VuZGluZ0xhYmVsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvcnRBc2NlbmRpbmdMYWJlbC5zdWJqZWN0O1xuXHR9XG5cblx0Z2V0RmlsdGVyVGl0bGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5fZmlsdGVyVGl0bGUuc3ViamVjdDtcblx0fVxufVxuIl19
|
|
@@ -24,6 +24,8 @@ export class TableModel {
|
|
|
24
24
|
this.dataChange = new EventEmitter();
|
|
25
25
|
this.rowsSelectedChange = new EventEmitter();
|
|
26
26
|
this.rowsExpandedChange = new EventEmitter();
|
|
27
|
+
this.rowsExpandedAllChange = new EventEmitter();
|
|
28
|
+
this.rowsCollapsedAllChange = new EventEmitter();
|
|
27
29
|
/**
|
|
28
30
|
* Gets emitted when `selectAll` is called. Emits false if all rows are deselected and true if
|
|
29
31
|
* all rows are selected.
|
|
@@ -343,6 +345,17 @@ export class TableModel {
|
|
|
343
345
|
hasExpandableRows() {
|
|
344
346
|
return this.data.some(data => data.some(d => d && d.expandedData)); // checking for some in 2D array
|
|
345
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* Number of rows that can be expanded.
|
|
350
|
+
*
|
|
351
|
+
* @returns number
|
|
352
|
+
*/
|
|
353
|
+
expandableRowsCount() {
|
|
354
|
+
return this.data.reduce((counter, _, index) => {
|
|
355
|
+
counter = (this.isRowExpandable(index)) ? counter + 1 : counter;
|
|
356
|
+
return counter;
|
|
357
|
+
}, 0);
|
|
358
|
+
}
|
|
346
359
|
isRowExpandable(index) {
|
|
347
360
|
return this.data[index].some(d => d && d.expandedData);
|
|
348
361
|
}
|
|
@@ -608,6 +621,26 @@ export class TableModel {
|
|
|
608
621
|
this.rowsExpanded[index] = value;
|
|
609
622
|
this.rowsExpandedChange.emit(index);
|
|
610
623
|
}
|
|
624
|
+
/**
|
|
625
|
+
* Expands / collapses all rows
|
|
626
|
+
*
|
|
627
|
+
* @param value expanded state of the rows. `true` is expanded and `false` is collapsed
|
|
628
|
+
*/
|
|
629
|
+
expandAllRows(value = true) {
|
|
630
|
+
if (this.data.length > 0) {
|
|
631
|
+
for (let i = 0; i < this.data.length; i++) {
|
|
632
|
+
if (this.isRowExpandable(i)) {
|
|
633
|
+
this.rowsExpanded[i] = value;
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
if (value) {
|
|
637
|
+
this.rowsExpandedAllChange.emit();
|
|
638
|
+
}
|
|
639
|
+
else {
|
|
640
|
+
this.rowsCollapsedAllChange.emit();
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
611
644
|
/**
|
|
612
645
|
* Gets the true index of a row based on it's relative position.
|
|
613
646
|
* Like in Python, positive numbers start from the top and
|
|
@@ -651,4 +684,4 @@ export class TableModel {
|
|
|
651
684
|
* The number of models instantiated, used for (among other things) unique id generation
|
|
652
685
|
*/
|
|
653
686
|
TableModel.COUNT = 0;
|
|
654
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvdGFibGUtbW9kZWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQXNLdEI7UUE3SEEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hEOzs7V0FHRztRQUNILG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVl6Qzs7V0FFRztRQUNILGlCQUFZLEdBQWMsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBQ0gsaUJBQVksR0FBYyxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDSCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQjs7Ozs7OztXQU9HO1FBQ0gsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFFM0I7Ozs7OztXQU1HO1FBQ0gsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNILFdBQU0sR0FBc0IsRUFBRSxDQUFDO1FBRS9COztXQUVHO1FBQ0gsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEI7O1dBRUc7UUFDSCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhCOztXQUVHO1FBQ0gsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkOztXQUVHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FB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LENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUI7SUFDRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3QkFBd0I7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ2pEO0lBQ0YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLEtBQWE7UUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFLLEdBQUcsSUFBSTtRQUNwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTztTQUNQO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QjtTQUNEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBYTtRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBYSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFLLEdBQUcsSUFBSTtRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxZQUFZLENBQUMsS0FBYTtRQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGVBQWUsQ0FBQyxLQUFhO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sU0FBUyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ2hELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNsQixPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbEI7YUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDNUM7YUFBTTtZQUNOLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDN0M7SUFDRixDQUFDOztBQTVzQkQ7O0dBRUc7QUFDYyxnQkFBSyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25Nb2RlbCB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3BhZ2luYXRpb25cIjtcbmltcG9ydCB7IFRhYmxlSGVhZGVySXRlbSB9IGZyb20gXCIuL3RhYmxlLWhlYWRlci1pdGVtLmNsYXNzXCI7XG5pbXBvcnQgeyBUYWJsZUl0ZW0gfSBmcm9tIFwiLi90YWJsZS1pdGVtLmNsYXNzXCI7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gXCIuL3RhYmxlLXJvdy5jbGFzc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCB0eXBlIEhlYWRlclR5cGUgPSBudW1iZXIgfCBcInNlbGVjdFwiIHwgXCJleHBhbmRcIjtcblxuLyoqXG4gKiBUYWJsZU1vZGVsIHJlcHJlc2VudHMgYSBkYXRhIG1vZGVsIGZvciB0d28tZGltZW5zaW9uYWwgZGF0YS4gSXQncyB1c2VkIGZvciBhbGwgdGhpbmdzIHRhYmxlXG4gKiAodGFibGUgY29tcG9uZW50LCB0YWJsZSB0b29sYmFyLCBwYWdpbmF0aW9uLCBldGMpXG4gKlxuICogVGFibGVNb2RlbCBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBkYXRhIGludGVncml0eSB2ZXJ5IHdlbGwgaWYgeW91IHVzZSB0aGUgcHJvdmlkZWQgaGVscGVyXG4gKiBmdW5jdGlvbnMgZm9yIG1vZGlmeWluZyByb3dzIGFuZCBjb2x1bW5zIGFuZCBhc3NpZ25pbmcgaGVhZGVyIGFuZCBkYXRhIGluIHRoYXQgb3JkZXIuXG4gKlxuICogSXQgYWxzbyBwcm92aWRlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBkYXRhIHNvIHlvdSBjYW4gcmVhZCBhbmQgbW9kaWZ5IGl0LlxuICogSWYgeW91IGNoYW5nZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIChieSBkaXJlY3RseSBwdXNoaW5nIGludG8gdGhlIGFycmF5cyBvciBvdGhlcndpc2UpLFxuICoga2VlcCBpbiBtaW5kIHRvIGtlZXAgdGhlIGRhdGEgc3RydWN0dXJlIGludGFjdC5cbiAqXG4gKiBIZWFkZXIgbGVuZ3RoIGFuZCBsZW5ndGggb2YgZXZlcnkgbGluZSBpbiB0aGUgZGF0YSBzaG91bGQgYmUgZXF1YWwuXG4gKlxuICogSWYgdGhleSBhcmUgbm90IGNvbnNpc3RlbnQsIHVuZXhwZWN0ZWQgdGhpbmdzIHdpbGwgaGFwcGVuLlxuICpcbiAqIFVzZSB0aGUgcHJvdmlkZWQgZnVuY3Rpb25zIHdoZW4gaW4gZG91YnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGVsIGltcGxlbWVudHMgUGFnaW5hdGlvbk1vZGVsIHtcblx0LyoqXG5cdCAqIFRoZSBudW1iZXIgb2YgbW9kZWxzIGluc3RhbnRpYXRlZCwgdXNlZCBmb3IgKGFtb25nIG90aGVyIHRoaW5ncykgdW5pcXVlIGlkIGdlbmVyYXRpb25cblx0ICovXG5cdHByb3RlY3RlZCBzdGF0aWMgQ09VTlQgPSAwO1xuXG5cdC8qKlxuXHQgKiBTZXRzIGRhdGEgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBNYWtlIHN1cmUgYWxsIHJvd3MgYXJlIHRoZSBzYW1lIGxlbmd0aCB0byBrZWVwIHRoZSBjb2x1bW4gY291bnQgYWNjdXJhdGUuXG5cdCAqL1xuXHRzZXQgZGF0YShuZXdEYXRhOiBUYWJsZUl0ZW1bXVtdKSB7XG5cdFx0aWYgKCFuZXdEYXRhIHx8IChBcnJheS5pc0FycmF5KG5ld0RhdGEpICYmIG5ld0RhdGEubGVuZ3RoID09PSAwKSkge1xuXHRcdFx0bmV3RGF0YSA9IFtbXV07XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGF0YSA9IG5ld0RhdGE7XG5cblx0XHQvLyBpbml0IHJvd3NTZWxlY3RlZFxuXHRcdHRoaXMucm93c1NlbGVjdGVkID0gbmV3IEFycmF5PGJvb2xlYW4+KHRoaXMuX2RhdGEubGVuZ3RoKS5maWxsKGZhbHNlKTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZCA9IG5ldyBBcnJheTxib29sZWFuPih0aGlzLl9kYXRhLmxlbmd0aCkuZmlsbChmYWxzZSk7XG5cdFx0Ly8gaW5pdCByb3dzIGluZGljZXNcblx0XHR0aGlzLnJvd3NJbmRpY2VzID0gWy4uLkFycmF5KHRoaXMuX2RhdGEubGVuZ3RoKS5rZXlzKCldO1xuXHRcdC8vIGluaXQgcm93c0NvbnRleHRcblx0XHR0aGlzLnJvd3NDb250ZXh0ID0gbmV3IEFycmF5PHN0cmluZz4odGhpcy5fZGF0YS5sZW5ndGgpO1xuXG5cdFx0Ly8gaW5pdCByb3dzQ2xhc3Ncblx0XHR0aGlzLnJvd3NDbGFzcyA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX2RhdGEubGVuZ3RoKTtcblxuXHRcdC8vIG9ubHkgY3JlYXRlIGEgZnJlc2ggaGVhZGVyIGlmIG5lY2Vzc2FyeSAoaGVhZGVyIGRvZXNuJ3QgZXhpc3Qgb3IgZGlmZmVycyBpbiBsZW5ndGgpXG5cdFx0aWYgKHRoaXMuaGVhZGVyID09IG51bGwgfHwgKHRoaXMuaGVhZGVyLmxlbmd0aCAhPT0gdGhpcy5fZGF0YVswXS5sZW5ndGggJiYgdGhpcy5fZGF0YVswXS5sZW5ndGggPiAwKSkge1xuXHRcdFx0bGV0IGhlYWRlciA9IG5ldyBBcnJheTxUYWJsZUhlYWRlckl0ZW0+KCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGFbMF0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHRkYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRyb3dzU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblx0cm93c0V4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cdC8qKlxuXHQgKiBHZXRzIGVtaXR0ZWQgd2hlbiBgc2VsZWN0QWxsYCBpcyBjYWxsZWQuIEVtaXRzIGZhbHNlIGlmIGFsbCByb3dzIGFyZSBkZXNlbGVjdGVkIGFuZCB0cnVlIGlmXG5cdCAqIGFsbCByb3dzIGFyZSBzZWxlY3RlZC5cblx0ICovXG5cdHNlbGVjdEFsbENoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZ1bGwgZGF0YS5cblx0ICpcblx0ICogWW91IGNhbiB1c2UgaXQgdG8gYWx0ZXIgaW5kaXZpZHVhbCBgVGFibGVJdGVtYHMgYnV0IGlmIHlvdSBuZWVkIHRvIGNoYW5nZVxuXHQgKiB0YWJsZSBzdHJ1Y3R1cmUsIHVzZSBgYWRkUm93KClgIGFuZC9vciBgYWRkQ29sdW1uKClgXG5cdCAqL1xuXHRnZXQgZGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBzZWxlY3Rpb24gc3RhdGUgb2Ygcm93cyBpbiB0aGUgdGFibGUuXG5cdCAqL1xuXHRyb3dzU2VsZWN0ZWQ6IGJvb2xlYW5bXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBleHBhbmRlZCBzdGF0ZSBvZiByb3dzIGluIHRoZSB0YWJsZS5cblx0ICovXG5cdHJvd3NFeHBhbmRlZDogYm9vbGVhbltdID0gW107XG5cblx0LyoqXG5cdCAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGluaXRpYWwgaW5kZXggb2Ygcm93cyBpbiB0aGUgdGFibGVcblx0ICovXG5cdHJvd3NJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBvZiB0aGUgcm93LlxuXHQgKlxuXHQgKiBJdCBhZmZlY3RzIHN0eWxpbmcgb2YgdGhlIHJvdyB0byByZWZsZWN0IHRoZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBzdHJpbmcgY2FuIGJlIG9uZSBvZiBgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiIHwgXCJlcnJvclwiIHwgXCJcImAgYW5kIGl0J3Ncblx0ICogZW1wdHkgb3IgdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0ICovXG5cdHJvd3NDb250ZXh0OiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBjbGFzcyBuYW1lKHMpIG9mIHRoZSByb3cuXG5cdCAqXG5cdCAqIEl0IGFmZmVjdHMgc3R5bGluZyBvZiB0aGUgcm93IHRvIHJlZmxlY3QgdGhlIGFwcGVuZGVkIGNsYXNzIG5hbWUocykuXG5cdCAqXG5cdCAqIEl0J3MgZW1wdHkgb3IgdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0ICovXG5cdHJvd3NDbGFzczogc3RyaW5nW10gPSBbXTtcblxuXHQvKipcblx0ICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhlYWRlciBjZWxscyBvZiB0aGUgdGFibGUuXG5cdCAqL1xuXHRoZWFkZXI6IFRhYmxlSGVhZGVySXRlbVtdID0gW107XG5cblx0LyoqXG5cdCAqIFRyYWNrcyB0aGUgY3VycmVudCBwYWdlLlxuXHQgKi9cblx0Y3VycmVudFBhZ2UgPSAxO1xuXG5cdC8qKlxuXHQgKiBMZW5ndGggb2YgcGFnZS5cblx0ICovXG5cdHBhZ2VMZW5ndGggPSAxMDtcblxuXHQvKipcblx0ICogU2V0IHRvIHRydWUgd2hlbiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gbG9hZCBpbiB0aGUgdGFibGVcblx0ICovXG5cdGlzRW5kID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byB0cnVlIHdoZW4gbGF6eSBsb2FkaW5nIHRvIHNob3cgbG9hZGluZyBpbmRpY2F0b3Jcblx0ICovXG5cdGlzTG9hZGluZyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBBYnNvbHV0ZSB0b3RhbCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgdGFibGUuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX3RvdGFsRGF0YUxlbmd0aDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBNYW51YWxseSBzZXQgZGF0YSBsZW5ndGggaW4gY2FzZSB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndFxuXHQgKiBjb3JyZWN0bHkgcmVmbGVjdCBhbGwgdGhlIGRhdGEgdGhhdCB0YWJsZSBpcyB0byBkaXNwbGF5LlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBwYWdlcyBvZiBkYXRhIHRoYXQgdGFibGUgd2lsbCBkaXNwbGF5XG5cdCAqIGJ1dCB5b3UncmUgbG9hZGluZyBvbmUgYXQgYSB0aW1lLlxuXHQgKlxuXHQgKiBTZXQgdG8gYG51bGxgIHRvIHJlc2V0IHRvIGRlZmF1bHQgYmVoYXZpb3IuXG5cdCAqL1xuXHRzZXQgdG90YWxEYXRhTGVuZ3RoKGxlbmd0aDogbnVtYmVyKSB7XG5cdFx0Ly8gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhIHBhcmFtZXRlciB3ZSBuZWVkIHRvIHNldCB0byBudWxsIHRvIGF2b2lkIGhhdmluZyB1bmRlZmluZWQgIT0gbnVsbFxuXHRcdHRoaXMuX3RvdGFsRGF0YUxlbmd0aCA9IGlzTmFOKGxlbmd0aCkgPyBudWxsIDogbGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRoYXQgdGFibGUgaGFzIGFjY2VzcyB0bywgb3IgdGhlIGFtb3VudCBtYW51YWxseSBzZXRcblx0ICovXG5cdGdldCB0b3RhbERhdGFMZW5ndGgoKSB7XG5cdFx0Ly8gaWYgbWFudWFsbHkgc2V0IGRhdGEgbGVuZ3RoXG5cdFx0aWYgKHRoaXMuX3RvdGFsRGF0YUxlbmd0aCAhPT0gbnVsbCAmJiB0aGlzLl90b3RhbERhdGFMZW5ndGggPj0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RvdGFsRGF0YUxlbmd0aDtcblx0XHR9XG5cblx0XHQvLyBpZiBlbXB0eSBkYXRhc2V0XG5cdFx0aWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID09PSAxICYmIHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgaW4gYGRhdGFgXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX2RhdGE6IFRhYmxlSXRlbVtdW10gPSBbW11dO1xuXG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIG1vZGVscyBpbnN0YW50aWF0ZWQsIHRoaXMgaXMgdG8gbWFrZSBzdXJlIGVhY2ggdGFibGUgaGFzIGEgZGlmZmVyZW50XG5cdCAqIG1vZGVsIGNvdW50IGZvciB1bmlxdWUgaWQgZ2VuZXJhdGlvbi5cblx0ICovXG5cdHByb3RlY3RlZCB0YWJsZU1vZGVsQ291bnQgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGFibGVNb2RlbENvdW50ID0gVGFibGVNb2RlbC5DT1VOVCsrO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gaWQgZm9yIHRoZSBnaXZlbiBjb2x1bW5cblx0ICpcblx0ICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIHRvIGdlbmVyYXRlIGFuIGlkIGZvclxuXHQgKiBAcGFyYW0gcm93IHRoZSByb3cgb2YgdGhlIGhlYWRlciB0byBnZW5lcmF0ZSBhbiBpZCBmb3Jcblx0ICovXG5cdGdldElkKGNvbHVtbjogSGVhZGVyVHlwZSwgcm93ID0gMCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGB0YWJsZS1oZWFkZXItJHtyb3d9LSR7Y29sdW1ufS0ke3RoaXMudGFibGVNb2RlbENvdW50fWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGhlYWRlci4gVXNlZCB0byBsaW5rIHRoZSBjZWxscyB3aXRoIGhlYWRlcnMgKG9yIGhlYWRlcnMgd2l0aCBoZWFkZXJzKVxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gdG8gc3RhcnQgZ2V0dGluZyBoZWFkZXJzIGZvclxuXHQgKiBAcGFyYW0gY29sU3BhbiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gZ2V0IGhlYWRlcnMgZm9yIChkZWZhdWx0cyB0byAxKVxuXHQgKi9cblx0Z2V0SGVhZGVySWQoY29sdW1uOiBIZWFkZXJUeXBlLCBjb2xTcGFuID0gMSk6IHN0cmluZyB7XG5cdFx0aWYgKGNvbHVtbiA9PT0gXCJzZWxlY3RcIiB8fCBjb2x1bW4gPT09IFwiZXhwYW5kXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldElkKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0bGV0IGlkcyA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSBjb2x1bW47IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRpZiAodGhpcy5oZWFkZXJbaV0pIHtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBjb2xTcGFuOyBqKyspIHtcblx0XHRcdFx0XHRpZHMucHVzaCh0aGlzLmdldElkKGkgKyBqKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlkcy5qb2luKFwiIFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBjbG9zZXN0IGhlYWRlciBieSB0cnlpbmcgdGhlIGBjb2x1bW5gIGFuZCB0aGVuIHdvcmtpbmcgaXRzIHdheSB0byB0aGUgbGVmdFxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSB0YXJnZXQgY29sdW1uXG5cdCAqL1xuXHRnZXRIZWFkZXIoY29sdW1uOiBudW1iZXIpOiBUYWJsZUhlYWRlckl0ZW0ge1xuXHRcdGlmICghdGhpcy5oZWFkZXIpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSBjb2x1bW47IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBoZWFkZXJDZWxsID0gdGhpcy5oZWFkZXJbaV07XG5cdFx0XHRpZiAoaGVhZGVyQ2VsbCkge1xuXHRcdFx0XHRyZXR1cm4gaGVhZGVyQ2VsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGhvdyBtYW55IHJvd3MgaXMgY3VycmVudGx5IHNlbGVjdGVkXG5cdCAqL1xuXHRzZWxlY3RlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0aWYgKHRoaXMucm93c1NlbGVjdGVkKSB7XG5cdFx0XHR0aGlzLnJvd3NTZWxlY3RlZC5mb3JFYWNoKHJvd1NlbGVjdGVkID0+IHtcblx0XHRcdFx0aWYgKHJvd1NlbGVjdGVkKSB7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGhvdyBtYW55IHJvd3MgaXMgY3VycmVudGx5IGV4cGFuZGVkXG5cdCAqL1xuXHRleHBhbmRlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0aWYgKHRoaXMucm93c0V4cGFuZGVkKSB7XG5cdFx0XHR0aGlzLnJvd3NFeHBhbmRlZC5mb3JFYWNoKHJvd0V4cGFuZGVkID0+IHtcblx0XHRcdFx0aWYgKHJvd0V4cGFuZGVkKSB7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGBpbmRleGB0aCByb3cgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdHJvdyhpbmRleDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuXHRcdHJldHVybiB0aGlzLmRhdGFbdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgcm93IHRvIHRoZSBgaW5kZXhgdGggcm93IG9yIGFwcGVuZHMgdG8gdGFibGUgaWYgaW5kZXggbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBJZiByb3cgaXMgc2hvcnRlciB0aGFuIG90aGVyIHJvd3Mgb3Igbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHBhZGRlZCB3aXRoXG5cdCAqIGVtcHR5IGBUYWJsZUl0ZW1gIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBJZiByb3cgaXMgbG9uZ2VyIHRoYW4gb3RoZXIgcm93cywgb3RoZXJzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gbWF0Y2ggc28gbm8gZGF0YSBpcyBsb3N0LlxuXHQgKlxuXHQgKiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgdGFibGUgd2l0aCBubyBwYXJhbWV0ZXJzLCBpdCBjcmVhdGVzIGEgMXgxIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gW3Jvd11cblx0ICogQHBhcmFtIFtpbmRleF1cblx0ICovXG5cdGFkZFJvdyhyb3c/OiBUYWJsZUl0ZW1bXSwgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvLyBpZiB0YWJsZSBlbXB0eSBjcmVhdGUgdGFibGUgd2l0aCByb3dcblx0XHRpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdGxldCBuZXdEYXRhID0gbmV3IEFycmF5PEFycmF5PFRhYmxlSXRlbT4+KCk7XG5cdFx0XHRuZXdEYXRhLnB1c2gocm93ID8gcm93IDogW25ldyBUYWJsZUl0ZW0oKV0pOyAgLy8gcm93IG9yIG9uZSBlbXB0eSBvbmUgY29sdW1uIHJvd1xuXHRcdFx0dGhpcy5kYXRhID0gbmV3RGF0YTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByZWFsUm93ID0gcm93O1xuXHRcdGNvbnN0IGNvbHVtbkNvdW50ID0gdGhpcy5kYXRhWzBdLmxlbmd0aDtcblxuXHRcdGlmIChyb3cgPT0gbnVsbCkge1xuXHRcdFx0cmVhbFJvdyA9IG5ldyBBcnJheTxUYWJsZUl0ZW0+KCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspIHtcblx0XHRcdFx0cmVhbFJvdy5wdXNoKG5ldyBUYWJsZUl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlYWxSb3cubGVuZ3RoIDwgY29sdW1uQ291bnQpIHtcblx0XHRcdC8vIGV4dGVuZCB0aGUgbGVuZ3RoIG9mIHJlYWxSb3dcblx0XHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5Db3VudCAtIHJlYWxSb3cubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmZXJlbmNlOyBpKyspIHtcblx0XHRcdFx0cmVhbFJvdy5wdXNoKG5ldyBUYWJsZUl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChyZWFsUm93Lmxlbmd0aCA+IGNvbHVtbkNvdW50KSB7XG5cdFx0XHQvLyBleHRlbmQgdGhlIGxlbmd0aCBvZiBoZWFkZXJcblx0XHRcdGxldCBkaWZmZXJlbmNlID0gcmVhbFJvdy5sZW5ndGggLSB0aGlzLmhlYWRlci5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGRpZmZlcmVuY2U7IGorKykge1xuXHRcdFx0XHR0aGlzLmhlYWRlci5wdXNoKG5ldyBUYWJsZUhlYWRlckl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBleHRlbmQgdGhlIGxlbmd0aCBvZiBldmVyeSBvdGhlciByb3dcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxldCBjdXJyZW50Um93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0XHRkaWZmZXJlbmNlID0gcmVhbFJvdy5sZW5ndGggLSBjdXJyZW50Um93Lmxlbmd0aDtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBkaWZmZXJlbmNlOyBqKyspIHtcblx0XHRcdFx0XHRjdXJyZW50Um93LnB1c2gobmV3IFRhYmxlSXRlbSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpbmRleCA9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmRhdGEucHVzaChyZWFsUm93KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NTZWxlY3RlZCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NTZWxlY3RlZC5wdXNoKGZhbHNlKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NFeHBhbmRlZCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NFeHBhbmRlZC5wdXNoKGZhbHNlKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NDb250ZXh0IHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0NvbnRleHQucHVzaCh1bmRlZmluZWQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0NsYXNzIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0NsYXNzLnB1c2godW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NJbmRpY2VzIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0luZGljZXMucHVzaCh0aGlzLmRhdGEubGVuZ3RoIC0gMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdFx0dGhpcy5kYXRhLnNwbGljZShyaSwgMCwgcmVhbFJvdyk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzU2VsZWN0ZWQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzU2VsZWN0ZWQuc3BsaWNlKHJpLCAwLCBmYWxzZSk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzRXhwYW5kZWQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzRXhwYW5kZWQuc3BsaWNlKHJpLCAwLCBmYWxzZSk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzQ29udGV4dCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShyaSwgMCwgdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NDbGFzcyBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NDbGFzcy5zcGxpY2UocmksIDAsIHVuZGVmaW5lZCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzSW5kaWNlcyBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NJbmRpY2VzLnNwbGljZShyaSwgMCwgdGhpcy5kYXRhLmxlbmd0aCAtIDEpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggcm93LlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZVJvdyhpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcnJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdHRoaXMuZGF0YS5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NTZWxlY3RlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShycmksIDEpO1xuXHRcdHRoaXMucm93c0NsYXNzLnNwbGljZShycmksIDEpO1xuXG5cdFx0Y29uc3Qgcm93SW5kZXggPSB0aGlzLnJvd3NJbmRpY2VzW3JyaV07XG5cdFx0dGhpcy5yb3dzSW5kaWNlcy5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NJbmRpY2VzID0gdGhpcy5yb3dzSW5kaWNlcy5tYXAoKHZhbHVlKSA9PiAodmFsdWUgPiByb3dJbmRleCkgPyAtLXZhbHVlIDogdmFsdWUpO1xuXG5cdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcblx0fVxuXG5cdGhhc0V4cGFuZGFibGVSb3dzKCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuc29tZShkYXRhID0+IGRhdGEuc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpKTsgLy8gY2hlY2tpbmcgZm9yIHNvbWUgaW4gMkQgYXJyYXlcblx0fVxuXG5cdGlzUm93RXhwYW5kYWJsZShpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YVtpbmRleF0uc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpO1xuXHR9XG5cblx0aXNSb3dFeHBhbmRlZChpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMucm93c0V4cGFuZGVkW2luZGV4XTtcblx0fVxuXG5cdGdldFJvd0NvbnRleHQoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnJvd3NDb250ZXh0W2luZGV4XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGBpbmRleGB0aCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGNvbHVtbihpbmRleDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuXHRcdGxldCBjb2x1bW4gPSBuZXcgQXJyYXk8VGFibGVJdGVtPigpO1xuXHRcdGNvbnN0IHJpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXHRcdGNvbnN0IHJjID0gdGhpcy5kYXRhLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmM7IGkrKykge1xuXHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0Y29sdW1uLnB1c2gocm93W3JpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSBgaW5kZXhgdGggY29sdW1uIG9yIGFwcGVuZHMgdG8gdGFibGUgaWYgaW5kZXggbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBJZiBjb2x1bW4gaXMgc2hvcnRlciB0aGFuIG90aGVyIGNvbHVtbnMgb3Igbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHBhZGRlZCB3aXRoXG5cdCAqIGVtcHR5IGBUYWJsZUl0ZW1gIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBJZiBjb2x1bW4gaXMgbG9uZ2VyIHRoYW4gb3RoZXIgY29sdW1ucywgb3RoZXJzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gbWF0Y2ggc28gbm8gZGF0YSBpcyBsb3N0LlxuXHQgKlxuXHQgKiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgdGFibGUgd2l0aCBubyBwYXJhbWV0ZXJzLCBpdCBjcmVhdGVzIGEgMXgxIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gW2NvbHVtbl1cblx0ICogQHBhcmFtIFtpbmRleF1cblx0ICovXG5cdGFkZENvbHVtbihjb2x1bW4/OiBUYWJsZUl0ZW1bXSwgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvLyBpZiB0YWJsZSBlbXB0eSBjcmVhdGUgdGFibGUgd2l0aCByb3dcblx0XHRpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdGxldCBuZXdEYXRhID0gbmV3IEFycmF5PEFycmF5PFRhYmxlSXRlbT4+KCk7XG5cdFx0XHRpZiAoY29sdW1uID09IG51bGwpIHtcblx0XHRcdFx0bmV3RGF0YS5wdXNoKFtuZXcgVGFibGVJdGVtKCldKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGV0IGl0ZW0gPSBjb2x1bW5baV07XG5cdFx0XHRcdFx0bmV3RGF0YS5wdXNoKFtpdGVtXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGF0YSA9IG5ld0RhdGE7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcmMgPSB0aGlzLmRhdGEubGVuZ3RoOyAgLy8gcm93IGNvdW50XG5cdFx0bGV0IGNpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXG5cdFx0Ly8gYXBwZW5kIG1pc3Npbmcgcm93c1xuXHRcdGZvciAobGV0IGkgPSAwOyBjb2x1bW4gIT0gbnVsbCAmJiBpIDwgY29sdW1uLmxlbmd0aCAtIHJjOyBpKyspIHtcblx0XHRcdHRoaXMuYWRkUm93KCk7XG5cdFx0fVxuXHRcdHJjID0gdGhpcy5kYXRhLmxlbmd0aDtcblx0XHRpZiAoaW5kZXggPT0gbnVsbCkge1xuXHRcdFx0Ly8gYXBwZW5kIHRvIGVuZFxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYzsgaSsrKSB7XG5cdFx0XHRcdGxldCByb3cgPSB0aGlzLmRhdGFbaV07XG5cdFx0XHRcdHJvdy5wdXNoKGNvbHVtbiA9PSBudWxsIHx8IGNvbHVtbltpXSA9PSBudWxsID8gbmV3IFRhYmxlSXRlbSgpIDogY29sdW1uW2ldKTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IGJ5IHVzZXJcblx0XHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPCB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuaGVhZGVyLnB1c2gobmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGluZGV4ID49IHRoaXMuZGF0YVswXS5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gaWYgdHJ5aW5nIHRvIGFwcGVuZFxuXHRcdFx0XHRjaSsrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5zZXJ0XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJjOyBpKyspIHtcblx0XHRcdFx0bGV0IHJvdyA9IHRoaXMuZGF0YVtpXTtcblx0XHRcdFx0cm93LnNwbGljZShjaSwgMCwgY29sdW1uID09IG51bGwgfHwgY29sdW1uW2ldID09IG51bGwgPyBuZXcgVGFibGVJdGVtKCkgOiBjb2x1bW5baV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIGhlYWRlciBpZiBub3QgYWxyZWFkeSBzZXQgYnkgdXNlclxuXHRcdFx0aWYgKHRoaXMuaGVhZGVyLmxlbmd0aCA8IHRoaXMuZGF0YVswXS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5oZWFkZXIuc3BsaWNlKGNpLCAwLCBuZXcgVGFibGVIZWFkZXJJdGVtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggY29sdW1uLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZUNvbHVtbihpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcmNpID0gdGhpcy5yZWFsQ29sdW1uSW5kZXgoaW5kZXgpO1xuXHRcdGNvbnN0IHJvd0NvdW50ID0gdGhpcy5kYXRhLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcblx0XHRcdHRoaXMuZGF0YVtpXS5zcGxpY2UocmNpLCAxKTtcblx0XHR9XG5cdFx0Ly8gdXBkYXRlIGhlYWRlciBpZiBub3QgYWxyZWFkeSBzZXQgYnkgdXNlclxuXHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPiB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmhlYWRlci5zcGxpY2UocmNpLCAxKTtcblx0XHR9XG5cblx0XHR0aGlzLmRhdGFDaGFuZ2UuZW1pdCgpO1xuXHR9XG5cblx0bW92ZUNvbHVtbihpbmRleEZyb206IG51bWJlciwgaW5kZXhUbzogbnVtYmVyKSB7XG5cdFx0Y29uc3QgaGVhZGVyRnJvbSA9IHRoaXMuaGVhZGVyW2luZGV4RnJvbV07XG5cblx0XHR0aGlzLmFkZENvbHVtbih0aGlzLmNvbHVtbihpbmRleEZyb20pLCBpbmRleFRvKTtcblx0XHR0aGlzLmRlbGV0ZUNvbHVtbihpbmRleEZyb20gKyAoaW5kZXhUbyA8IGluZGV4RnJvbSA/IDEgOiAwKSk7XG5cblx0XHR0aGlzLmhlYWRlcltpbmRleFRvICsgKGluZGV4VG8gPiBpbmRleEZyb20gPyAtMSA6IDApXSA9IGhlYWRlckZyb207XG5cdH1cblxuXHQvKipcblx0ICogY3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc29ydCBzdGF0ZXNcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRjeWNsZVNvcnRTdGF0ZShpbmRleDogbnVtYmVyKSB7XG5cdFx0Ly8gbm8gc29ydCBwcm92aWRlZCBzbyBkbyB0aGUgc2ltcGxlIHNvcnRcblx0XHRzd2l0Y2ggKHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uKSB7XG5cdFx0XHRjYXNlIFwiQVNDRU5ESU5HXCI6XG5cdFx0XHRcdHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID0gXCJERVNDRU5ESU5HXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRFU0NFTkRJTkdcIjpcblx0XHRcdFx0dGhpcy5oZWFkZXJbaW5kZXhdLnNvcnREaXJlY3Rpb24gPSBcIk5PTkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmhlYWRlcltpbmRleF0uc29ydERpcmVjdGlvbiA9IFwiQVNDRU5ESU5HXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTb3J0cyB0aGUgZGF0YSBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgbW9kZWwgYmFzZWQgb24gYGNvbXBhcmUoKWBcblx0ICpcblx0ICogRGlyZWN0aW9uIGlzIHNldCBieSBgYXNjZW5kaW5nYCBhbmQgYGRlc2NlbmRpbmdgIHByb3BlcnRpZXMgb2YgYFRhYmxlSGVhZGVySXRlbWBcblx0ICogaW4gYGluZGV4YHRoIGNvbHVtbi5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4IFRoZSBjb2x1bW4gYmFzZWQgb24gd2hpY2ggaXQncyBzb3J0aW5nXG5cdCAqL1xuXHRzb3J0KGluZGV4OiBudW1iZXIpIHtcblx0XHR0aGlzLnB1c2hSb3dTdGF0ZVRvTW9kZWxEYXRhKCk7XG5cdFx0Y29uc3QgaGVhZGVyU29ydGVkID0gdGhpcy5oZWFkZXJbaW5kZXhdLnNvcnRlZDtcblx0XHQvLyBXZSBvbmx5IGFsbG93IHNvcnRpbmcgYnkgYSBzaW5nbGUgY29sdW1uLCBzbyByZXNldCBzb3J0IHN0YXRlIGZvciBhbGwgY29sdW1ucyBiZWZvcmUgc3BlY2lmeWluZyBuZXcgc29ydCBzdGF0ZVxuXHRcdHRoaXMuaGVhZGVyLmZvckVhY2goY29sdW1uID0+IGNvbHVtbi5zb3J0ZWQgPSBmYWxzZSk7XG5cdFx0aWYgKHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID09PSBcIk5PTkVcIiAmJiBoZWFkZXJTb3J0ZWQpIHtcblx0XHRcdC8vIFJlc3RvcmUgaW5pdGlhbCBvcmRlciBvZiByb3dzXG5cdFx0XHRjb25zdCBvbGREYXRhID0gdGhpcy5fZGF0YTtcblx0XHRcdHRoaXMuX2RhdGEgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCByaSA9IHRoaXMucm93c0luZGljZXNbaV07XG5cdFx0XHRcdHRoaXMuX2RhdGFbcmldID0gb2xkRGF0YVtpXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVzY2VuZGluZyA9IHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID09PSBcIkRFU0NFTkRJTkdcIiA/IC0xIDogMTtcblx0XHRcdHRoaXMuZGF0YS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkZXNjZW5kaW5nICogdGhpcy5oZWFkZXJbaW5kZXhdLmNvbXBhcmUoYVtpbmRleF0sIGJbaW5kZXhdKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5oZWFkZXJbaW5kZXhdLnNvcnRlZCA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMucG9wUm93U3RhdGVGcm9tTW9kZWxEYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBgcm93c1NlbGVjdGVkYCBhbmQgYHJvd3NFeHBhbmRlZGAgaW5mbyB0byBtb2RlbCBkYXRhLlxuXHQgKlxuXHQgKiBXaGVuIHNvcnRpbmcgcm93cywgZG8gdGhpcyBmaXJzdCBzbyBpbmZvcm1hdGlvbiBhYm91dCByb3cgc2VsZWN0aW9uXG5cdCAqIGdldHMgc29ydGVkIHdpdGggdGhlIG90aGVyIHJvdyBpbmZvLlxuXHQgKlxuXHQgKiBDYWxsIGBwb3BSb3dTZWxlY3Rpb25Gcm9tTW9kZWxEYXRhKClgIGFmdGVyIHNvcnRpbmcgdG8gbWFrZSBldmVyeXRoaW5nXG5cdCAqIHJpZ2h0IHdpdGggdGhlIHdvcmxkIGFnYWluLlxuXHQgKi9cblx0cHVzaFJvd1N0YXRlVG9Nb2RlbERhdGEoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHJvd1NlbGVjdGVkTWFyayA9IG5ldyBUYWJsZUl0ZW0oKTtcblx0XHRcdHJvd1NlbGVjdGVkTWFyay5kYXRhID0gdGhpcy5yb3dzU2VsZWN0ZWRbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dTZWxlY3RlZE1hcmspO1xuXG5cdFx0XHRjb25zdCByb3dFeHBhbmRlZE1hcmsgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dFeHBhbmRlZE1hcmsuZGF0YSA9IHRoaXMucm93c0V4cGFuZGVkW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93RXhwYW5kZWRNYXJrKTtcblxuXHRcdFx0Y29uc3Qgcm93Q29udGV4dCA9IG5ldyBUYWJsZUl0ZW0oKTtcblx0XHRcdHJvd0NvbnRleHQuZGF0YSA9IHRoaXMucm93c0NvbnRleHRbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dDb250ZXh0KTtcblxuXHRcdFx0Y29uc3Qgcm93Q2xhc3MgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dDbGFzcy5kYXRhID0gdGhpcy5yb3dzQ2xhc3NbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dDbGFzcyk7XG5cblx0XHRcdGNvbnN0IHJvd0luZGV4ID0gbmV3IFRhYmxlSXRlbSgpO1xuXHRcdFx0cm93SW5kZXguZGF0YSA9IHRoaXMucm93c0luZGljZXNbaV07XG5cdFx0XHR0aGlzLmRhdGFbaV0ucHVzaChyb3dJbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3RvcmVzIGByb3dzU2VsZWN0ZWRgIGZyb20gZGF0YSBwdXNoZWQgYnkgYHB1c2hSb3dTZWxlY3Rpb25Ub01vZGVsRGF0YSgpYFxuXHQgKlxuXHQgKiBDYWxsIGFmdGVyIHNvcnRpbmcgZGF0YSAoaWYgeW91IHByZXZpb3VzbHkgcHVzaGVkIHRvIG1haW50YWluIHNlbGVjdGlvbiBvcmRlcilcblx0ICogdG8gbWFrZSBldmVyeXRoaW5nIHJpZ2h0IHdpdGggdGhlIHdvcmxkIGFnYWluLlxuXHQgKi9cblx0cG9wUm93U3RhdGVGcm9tTW9kZWxEYXRhKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnJvd3NJbmRpY2VzW2ldID0gdGhpcy5kYXRhW2ldLnBvcCgpLmRhdGE7XG5cdFx0XHR0aGlzLnJvd3NDbGFzc1tpXSA9IHRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzQ29udGV4dFtpXSA9IHRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzRXhwYW5kZWRbaV0gPSAhIXRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzU2VsZWN0ZWRbaV0gPSAhIXRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgcm93IGlzIGZpbHRlcmVkIG91dC5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqIEByZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBmaWx0ZXJzIGluIGhlYWRlciBmaWx0ZXJzIG91dCB0aGUgYGluZGV4YHRoIHJvd1xuXHQgKi9cblx0aXNSb3dGaWx0ZXJlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVhbEluZGV4ID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdHJldHVybiB0aGlzLmhlYWRlci5zb21lKChpdGVtLCBpKSA9PiBpdGVtICYmIGl0ZW0uZmlsdGVyKHRoaXMucm93KHJlYWxJbmRleClbaV0pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3QvZGVzZWxlY3QgYGluZGV4YHRoIHJvdyBiYXNlZCBvbiB2YWx1ZVxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHJvdyB0byBzZWxlY3Rcblx0ICogQHBhcmFtIHZhbHVlIHN0YXRlIHRvIHNldCB0aGUgcm93IHRvLiBEZWZhdWx0cyB0byBgdHJ1ZWBcblx0ICovXG5cdHNlbGVjdFJvdyhpbmRleDogbnVtYmVyLCB2YWx1ZSA9IHRydWUpIHtcblx0XHRpZiAodGhpcy5pc1Jvd0Rpc2FibGVkKGluZGV4KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJvd3NTZWxlY3RlZFtpbmRleF0gPSB2YWx1ZTtcblx0XHR0aGlzLnJvd3NTZWxlY3RlZENoYW5nZS5lbWl0KGluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3RzIG9yIGRlc2VsZWN0cyBhbGwgcm93cyBpbiB0aGUgbW9kZWxcblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIHN0YXRlIHRvIHNldCBhbGwgcm93cyB0by4gRGVmYXVsdHMgdG8gYHRydWVgXG5cdCAqL1xuXHRzZWxlY3RBbGwodmFsdWUgPSB0cnVlKSB7XG5cdFx0aWYgKHRoaXMuZGF0YS5sZW5ndGggPj0gMSAmJiB0aGlzLmRhdGFbMF0ubGVuZ3RoID49IDEpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzU2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RSb3coaSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNlbGVjdEFsbENoYW5nZS5uZXh0KHZhbHVlKTtcblx0fVxuXG5cdGlzUm93U2VsZWN0ZWQoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnJvd3NTZWxlY3RlZFtpbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHJvdyBpcyBkaXNhYmxlZCBvciBub3QuXG5cdCAqL1xuXHRpc1Jvd0Rpc2FibGVkKGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCByb3cgPSB0aGlzLmRhdGFbaW5kZXhdIGFzIFRhYmxlUm93O1xuXHRcdHJldHVybiAhIXJvdy5kaXNhYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBhbmRzL0NvbGxhcHNlcyBgaW5kZXhgdGggcm93IGJhc2VkIG9uIHZhbHVlXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgcm93IHRvIGV4cGFuZCBvciBjb2xsYXBzZVxuXHQgKiBAcGFyYW0gdmFsdWUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIHJvdy4gYHRydWVgIGlzIGV4cGFuZGVkIGFuZCBgZmFsc2VgIGlzIGNvbGxhcHNlZFxuXHQgKi9cblx0ZXhwYW5kUm93KGluZGV4OiBudW1iZXIsIHZhbHVlID0gdHJ1ZSkge1xuXHRcdHRoaXMucm93c0V4cGFuZGVkW2luZGV4XSA9IHZhbHVlO1xuXHRcdHRoaXMucm93c0V4cGFuZGVkQ2hhbmdlLmVtaXQoaW5kZXgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRydWUgaW5kZXggb2YgYSByb3cgYmFzZWQgb24gaXQncyByZWxhdGl2ZSBwb3NpdGlvbi5cblx0ICogTGlrZSBpbiBQeXRob24sIHBvc2l0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgdG9wIGFuZFxuXHQgKiBuZWdhdGl2ZSBudW1iZXJzIHN0YXJ0IGZyb20gdGhlIGJvdHRvbS5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhbFJvd0luZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLnJlYWxJbmRleChpbmRleCwgdGhpcy5kYXRhLmxlbmd0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHJ1ZSBpbmRleCBvZiBhIGNvbHVtbiBiYXNlZCBvbiBpdCdzIHJlbGF0aXZlIHBvc2l0aW9uLlxuXHQgKiBMaWtlIGluIFB5dGhvbiwgcG9zaXRpdmUgbnVtYmVycyBzdGFydCBmcm9tIHRoZSB0b3AgYW5kXG5cdCAqIG5lZ2F0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgYm90dG9tLlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdHByb3RlY3RlZCByZWFsQ29sdW1uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMucmVhbEluZGV4KGluZGV4LCB0aGlzLmRhdGFbMF0ubGVuZ3RoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmljIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcmVhbCBpbmRleCBvZiBzb21ldGhpbmcuXG5cdCAqIFVzZWQgYnkgYHJlYWxSb3dJbmRleCgpYCBhbmQgYHJlYWxDb2x1bW5JbmRleCgpYFxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGxlbmd0aFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWxJbmRleChpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0aWYgKGluZGV4ID09IG51bGwpIHtcblx0XHRcdHJldHVybiBsZW5ndGggLSAxO1xuXHRcdH0gZWxzZSBpZiAoaW5kZXggPj0gMCkge1xuXHRcdFx0cmV0dXJuIGluZGV4ID49IGxlbmd0aCA/IGxlbmd0aCAtIDEgOiBpbmRleDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIC1pbmRleCA+PSBsZW5ndGggPyAwIDogbGVuZ3RoICsgaW5kZXg7XG5cdFx0fVxuXHR9XG59XG4iXX0=
|
|
687
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvdGFibGUtbW9kZWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQXdLdEI7UUEvSEEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0MsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1Qzs7O1dBR0c7UUFDSCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFZekM7O1dBRUc7UUFDSCxpQkFBWSxHQUFjLEVBQUUsQ0FBQztRQUU3Qjs7V0FFRztRQUNILGlCQUFZLEdBQWMsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFFM0I7Ozs7Ozs7V0FPRztRQUNILGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBRTNCOzs7Ozs7V0FNRztRQUNILGNBQVMsR0FBYSxFQUFFLENBQUM7UUFFekI7O1dBRUc7UUFDSCxXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUUvQjs7V0FFRztRQUNILGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhCOztXQUVHO1FBQ0gsZUFBVSxHQUFHLEVBQUUs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UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sZUFBZSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sZUFBZSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sVUFBVSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlCLE1BQU0sUUFBUSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTVCLE1BQU0sUUFBUSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFD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LEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDbEIsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO2FBQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQzVDO2FBQU07WUFDTixPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQzdDO0lBQ0YsQ0FBQzs7QUEvdUJEOztHQUVHO0FBQ2MsZ0JBQUssR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uTW9kZWwgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9wYWdpbmF0aW9uXCI7XG5pbXBvcnQgeyBUYWJsZUhlYWRlckl0ZW0gfSBmcm9tIFwiLi90YWJsZS1oZWFkZXItaXRlbS5jbGFzc1wiO1xuaW1wb3J0IHsgVGFibGVJdGVtIH0gZnJvbSBcIi4vdGFibGUtaXRlbS5jbGFzc1wiO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tIFwiLi90YWJsZS1yb3cuY2xhc3NcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgdHlwZSBIZWFkZXJUeXBlID0gbnVtYmVyIHwgXCJzZWxlY3RcIiB8IFwiZXhwYW5kXCI7XG5cbi8qKlxuICogVGFibGVNb2RlbCByZXByZXNlbnRzIGEgZGF0YSBtb2RlbCBmb3IgdHdvLWRpbWVuc2lvbmFsIGRhdGEuIEl0J3MgdXNlZCBmb3IgYWxsIHRoaW5ncyB0YWJsZVxuICogKHRhYmxlIGNvbXBvbmVudCwgdGFibGUgdG9vbGJhciwgcGFnaW5hdGlvbiwgZXRjKVxuICpcbiAqIFRhYmxlTW9kZWwgbWFuYWdlcyBpdHMgaW50ZXJuYWwgZGF0YSBpbnRlZ3JpdHkgdmVyeSB3ZWxsIGlmIHlvdSB1c2UgdGhlIHByb3ZpZGVkIGhlbHBlclxuICogZnVuY3Rpb25zIGZvciBtb2RpZnlpbmcgcm93cyBhbmQgY29sdW1ucyBhbmQgYXNzaWduaW5nIGhlYWRlciBhbmQgZGF0YSBpbiB0aGF0IG9yZGVyLlxuICpcbiAqIEl0IGFsc28gcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgZGF0YSBzbyB5b3UgY2FuIHJlYWQgYW5kIG1vZGlmeSBpdC5cbiAqIElmIHlvdSBjaGFuZ2UgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSAoYnkgZGlyZWN0bHkgcHVzaGluZyBpbnRvIHRoZSBhcnJheXMgb3Igb3RoZXJ3aXNlKSxcbiAqIGtlZXAgaW4gbWluZCB0byBrZWVwIHRoZSBkYXRhIHN0cnVjdHVyZSBpbnRhY3QuXG4gKlxuICogSGVhZGVyIGxlbmd0aCBhbmQgbGVuZ3RoIG9mIGV2ZXJ5IGxpbmUgaW4gdGhlIGRhdGEgc2hvdWxkIGJlIGVxdWFsLlxuICpcbiAqIElmIHRoZXkgYXJlIG5vdCBjb25zaXN0ZW50LCB1bmV4cGVjdGVkIHRoaW5ncyB3aWxsIGhhcHBlbi5cbiAqXG4gKiBVc2UgdGhlIHByb3ZpZGVkIGZ1bmN0aW9ucyB3aGVuIGluIGRvdWJ0LlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVNb2RlbCBpbXBsZW1lbnRzIFBhZ2luYXRpb25Nb2RlbCB7XG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIG1vZGVscyBpbnN0YW50aWF0ZWQsIHVzZWQgZm9yIChhbW9uZyBvdGhlciB0aGluZ3MpIHVuaXF1ZSBpZCBnZW5lcmF0aW9uXG5cdCAqL1xuXHRwcm90ZWN0ZWQgc3RhdGljIENPVU5UID0gMDtcblxuXHQvKipcblx0ICogU2V0cyBkYXRhIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogTWFrZSBzdXJlIGFsbCByb3dzIGFyZSB0aGUgc2FtZSBsZW5ndGggdG8ga2VlcCB0aGUgY29sdW1uIGNvdW50IGFjY3VyYXRlLlxuXHQgKi9cblx0c2V0IGRhdGEobmV3RGF0YTogVGFibGVJdGVtW11bXSkge1xuXHRcdGlmICghbmV3RGF0YSB8fCAoQXJyYXkuaXNBcnJheShuZXdEYXRhKSAmJiBuZXdEYXRhLmxlbmd0aCA9PT0gMCkpIHtcblx0XHRcdG5ld0RhdGEgPSBbW11dO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RhdGEgPSBuZXdEYXRhO1xuXG5cdFx0Ly8gaW5pdCByb3dzU2VsZWN0ZWRcblx0XHR0aGlzLnJvd3NTZWxlY3RlZCA9IG5ldyBBcnJheTxib29sZWFuPih0aGlzLl9kYXRhLmxlbmd0aCkuZmlsbChmYWxzZSk7XG5cdFx0dGhpcy5yb3dzRXhwYW5kZWQgPSBuZXcgQXJyYXk8Ym9vbGVhbj4odGhpcy5fZGF0YS5sZW5ndGgpLmZpbGwoZmFsc2UpO1xuXHRcdC8vIGluaXQgcm93cyBpbmRpY2VzXG5cdFx0dGhpcy5yb3dzSW5kaWNlcyA9IFsuLi5BcnJheSh0aGlzLl9kYXRhLmxlbmd0aCkua2V5cygpXTtcblx0XHQvLyBpbml0IHJvd3NDb250ZXh0XG5cdFx0dGhpcy5yb3dzQ29udGV4dCA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX2RhdGEubGVuZ3RoKTtcblxuXHRcdC8vIGluaXQgcm93c0NsYXNzXG5cdFx0dGhpcy5yb3dzQ2xhc3MgPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl9kYXRhLmxlbmd0aCk7XG5cblx0XHQvLyBvbmx5IGNyZWF0ZSBhIGZyZXNoIGhlYWRlciBpZiBuZWNlc3NhcnkgKGhlYWRlciBkb2Vzbid0IGV4aXN0IG9yIGRpZmZlcnMgaW4gbGVuZ3RoKVxuXHRcdGlmICh0aGlzLmhlYWRlciA9PSBudWxsIHx8ICh0aGlzLmhlYWRlci5sZW5ndGggIT09IHRoaXMuX2RhdGFbMF0ubGVuZ3RoICYmIHRoaXMuX2RhdGFbMF0ubGVuZ3RoID4gMCkpIHtcblx0XHRcdGxldCBoZWFkZXIgPSBuZXcgQXJyYXk8VGFibGVIZWFkZXJJdGVtPigpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhWzBdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGhlYWRlci5wdXNoKG5ldyBUYWJsZUhlYWRlckl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmhlYWRlciA9IGhlYWRlcjtcblx0XHR9XG5cblx0XHR0aGlzLmRhdGFDaGFuZ2UuZW1pdCgpO1xuXHR9XG5cblx0ZGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0cm93c1NlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cdHJvd3NFeHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXHRyb3dzRXhwYW5kZWRBbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdHJvd3NDb2xsYXBzZWRBbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdC8qKlxuXHQgKiBHZXRzIGVtaXR0ZWQgd2hlbiBgc2VsZWN0QWxsYCBpcyBjYWxsZWQuIEVtaXRzIGZhbHNlIGlmIGFsbCByb3dzIGFyZSBkZXNlbGVjdGVkIGFuZCB0cnVlIGlmXG5cdCAqIGFsbCByb3dzIGFyZSBzZWxlY3RlZC5cblx0ICovXG5cdHNlbGVjdEFsbENoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZ1bGwgZGF0YS5cblx0ICpcblx0ICogWW91IGNhbiB1c2UgaXQgdG8gYWx0ZXIgaW5kaXZpZHVhbCBgVGFibGVJdGVtYHMgYnV0IGlmIHlvdSBuZWVkIHRvIGNoYW5nZVxuXHQgKiB0YWJsZSBzdHJ1Y3R1cmUsIHVzZSBgYWRkUm93KClgIGFuZC9vciBgYWRkQ29sdW1uKClgXG5cdCAqL1xuXHRnZXQgZGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBzZWxlY3Rpb24gc3RhdGUgb2Ygcm93cyBpbiB0aGUgdGFibGUuXG5cdCAqL1xuXHRyb3dzU2VsZWN0ZWQ6IGJvb2xlYW5bXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBleHBhbmRlZCBzdGF0ZSBvZiByb3dzIGluIHRoZSB0YWJsZS5cblx0ICovXG5cdHJvd3NFeHBhbmRlZDogYm9vbGVhbltdID0gW107XG5cblx0LyoqXG5cdCAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGluaXRpYWwgaW5kZXggb2Ygcm93cyBpbiB0aGUgdGFibGVcblx0ICovXG5cdHJvd3NJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBvZiB0aGUgcm93LlxuXHQgKlxuXHQgKiBJdCBhZmZlY3RzIHN0eWxpbmcgb2YgdGhlIHJvdyB0byByZWZsZWN0IHRoZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBzdHJpbmcgY2FuIGJlIG9uZSBvZiBgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiIHwgXCJlcnJvclwiIHwgXCJcImAgYW5kIGl0J3Ncblx0ICogZW1wdHkgb3IgdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0ICovXG5cdHJvd3NDb250ZXh0OiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb250YWlucyBjbGFzcyBuYW1lKHMpIG9mIHRoZSByb3cuXG5cdCAqXG5cdCAqIEl0IGFmZmVjdHMgc3R5bGluZyBvZiB0aGUgcm93IHRvIHJlZmxlY3QgdGhlIGFwcGVuZGVkIGNsYXNzIG5hbWUocykuXG5cdCAqXG5cdCAqIEl0J3MgZW1wdHkgb3IgdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0ICovXG5cdHJvd3NDbGFzczogc3RyaW5nW10gPSBbXTtcblxuXHQvKipcblx0ICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhlYWRlciBjZWxscyBvZiB0aGUgdGFibGUuXG5cdCAqL1xuXHRoZWFkZXI6IFRhYmxlSGVhZGVySXRlbVtdID0gW107XG5cblx0LyoqXG5cdCAqIFRyYWNrcyB0aGUgY3VycmVudCBwYWdlLlxuXHQgKi9cblx0Y3VycmVudFBhZ2UgPSAxO1xuXG5cdC8qKlxuXHQgKiBMZW5ndGggb2YgcGFnZS5cblx0ICovXG5cdHBhZ2VMZW5ndGggPSAxMDtcblxuXHQvKipcblx0ICogU2V0IHRvIHRydWUgd2hlbiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gbG9hZCBpbiB0aGUgdGFibGVcblx0ICovXG5cdGlzRW5kID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byB0cnVlIHdoZW4gbGF6eSBsb2FkaW5nIHRvIHNob3cgbG9hZGluZyBpbmRpY2F0b3Jcblx0ICovXG5cdGlzTG9hZGluZyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBBYnNvbHV0ZSB0b3RhbCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgdGFibGUuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX3RvdGFsRGF0YUxlbmd0aDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBNYW51YWxseSBzZXQgZGF0YSBsZW5ndGggaW4gY2FzZSB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndFxuXHQgKiBjb3JyZWN0bHkgcmVmbGVjdCBhbGwgdGhlIGRhdGEgdGhhdCB0YWJsZSBpcyB0byBkaXNwbGF5LlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBwYWdlcyBvZiBkYXRhIHRoYXQgdGFibGUgd2lsbCBkaXNwbGF5XG5cdCAqIGJ1dCB5b3UncmUgbG9hZGluZyBvbmUgYXQgYSB0aW1lLlxuXHQgKlxuXHQgKiBTZXQgdG8gYG51bGxgIHRvIHJlc2V0IHRvIGRlZmF1bHQgYmVoYXZpb3IuXG5cdCAqL1xuXHRzZXQgdG90YWxEYXRhTGVuZ3RoKGxlbmd0aDogbnVtYmVyKSB7XG5cdFx0Ly8gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhIHBhcmFtZXRlciB3ZSBuZWVkIHRvIHNldCB0byBudWxsIHRvIGF2b2lkIGhhdmluZyB1bmRlZmluZWQgIT0gbnVsbFxuXHRcdHRoaXMuX3RvdGFsRGF0YUxlbmd0aCA9IGlzTmFOKGxlbmd0aCkgPyBudWxsIDogbGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRoYXQgdGFibGUgaGFzIGFjY2VzcyB0bywgb3IgdGhlIGFtb3VudCBtYW51YWxseSBzZXRcblx0ICovXG5cdGdldCB0b3RhbERhdGFMZW5ndGgoKSB7XG5cdFx0Ly8gaWYgbWFudWFsbHkgc2V0IGRhdGEgbGVuZ3RoXG5cdFx0aWYgKHRoaXMuX3RvdGFsRGF0YUxlbmd0aCAhPT0gbnVsbCAmJiB0aGlzLl90b3RhbERhdGFMZW5ndGggPj0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RvdGFsRGF0YUxlbmd0aDtcblx0XHR9XG5cblx0XHQvLyBpZiBlbXB0eSBkYXRhc2V0XG5cdFx0aWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID09PSAxICYmIHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgaW4gYGRhdGFgXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX2RhdGE6IFRhYmxlSXRlbVtdW10gPSBbW11dO1xuXG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIG1vZGVscyBpbnN0YW50aWF0ZWQsIHRoaXMgaXMgdG8gbWFrZSBzdXJlIGVhY2ggdGFibGUgaGFzIGEgZGlmZmVyZW50XG5cdCAqIG1vZGVsIGNvdW50IGZvciB1bmlxdWUgaWQgZ2VuZXJhdGlvbi5cblx0ICovXG5cdHByb3RlY3RlZCB0YWJsZU1vZGVsQ291bnQgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGFibGVNb2RlbENvdW50ID0gVGFibGVNb2RlbC5DT1VOVCsrO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gaWQgZm9yIHRoZSBnaXZlbiBjb2x1bW5cblx0ICpcblx0ICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIHRvIGdlbmVyYXRlIGFuIGlkIGZvclxuXHQgKiBAcGFyYW0gcm93IHRoZSByb3cgb2YgdGhlIGhlYWRlciB0byBnZW5lcmF0ZSBhbiBpZCBmb3Jcblx0ICovXG5cdGdldElkKGNvbHVtbjogSGVhZGVyVHlwZSwgcm93ID0gMCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGB0YWJsZS1oZWFkZXItJHtyb3d9LSR7Y29sdW1ufS0ke3RoaXMudGFibGVNb2RlbENvdW50fWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGhlYWRlci4gVXNlZCB0byBsaW5rIHRoZSBjZWxscyB3aXRoIGhlYWRlcnMgKG9yIGhlYWRlcnMgd2l0aCBoZWFkZXJzKVxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gdG8gc3RhcnQgZ2V0dGluZyBoZWFkZXJzIGZvclxuXHQgKiBAcGFyYW0gY29sU3BhbiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gZ2V0IGhlYWRlcnMgZm9yIChkZWZhdWx0cyB0byAxKVxuXHQgKi9cblx0Z2V0SGVhZGVySWQoY29sdW1uOiBIZWFkZXJUeXBlLCBjb2xTcGFuID0gMSk6IHN0cmluZyB7XG5cdFx0aWYgKGNvbHVtbiA9PT0gXCJzZWxlY3RcIiB8fCBjb2x1bW4gPT09IFwiZXhwYW5kXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldElkKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0bGV0IGlkcyA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSBjb2x1bW47IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRpZiAodGhpcy5oZWFkZXJbaV0pIHtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBjb2xTcGFuOyBqKyspIHtcblx0XHRcdFx0XHRpZHMucHVzaCh0aGlzLmdldElkKGkgKyBqKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlkcy5qb2luKFwiIFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBjbG9zZXN0IGhlYWRlciBieSB0cnlpbmcgdGhlIGBjb2x1bW5gIGFuZCB0aGVuIHdvcmtpbmcgaXRzIHdheSB0byB0aGUgbGVmdFxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uIHRoZSB0YXJnZXQgY29sdW1uXG5cdCAqL1xuXHRnZXRIZWFkZXIoY29sdW1uOiBudW1iZXIpOiBUYWJsZUhlYWRlckl0ZW0ge1xuXHRcdGlmICghdGhpcy5oZWFkZXIpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSBjb2x1bW47IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBoZWFkZXJDZWxsID0gdGhpcy5oZWFkZXJbaV07XG5cdFx0XHRpZiAoaGVhZGVyQ2VsbCkge1xuXHRcdFx0XHRyZXR1cm4gaGVhZGVyQ2VsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGhvdyBtYW55IHJvd3MgaXMgY3VycmVudGx5IHNlbGVjdGVkXG5cdCAqL1xuXHRzZWxlY3RlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0aWYgKHRoaXMucm93c1NlbGVjdGVkKSB7XG5cdFx0XHR0aGlzLnJvd3NTZWxlY3RlZC5mb3JFYWNoKHJvd1NlbGVjdGVkID0+IHtcblx0XHRcdFx0aWYgKHJvd1NlbGVjdGVkKSB7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGhvdyBtYW55IHJvd3MgaXMgY3VycmVudGx5IGV4cGFuZGVkXG5cdCAqL1xuXHRleHBhbmRlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0aWYgKHRoaXMucm93c0V4cGFuZGVkKSB7XG5cdFx0XHR0aGlzLnJvd3NFeHBhbmRlZC5mb3JFYWNoKHJvd0V4cGFuZGVkID0+IHtcblx0XHRcdFx0aWYgKHJvd0V4cGFuZGVkKSB7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGBpbmRleGB0aCByb3cgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdHJvdyhpbmRleDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuXHRcdHJldHVybiB0aGlzLmRhdGFbdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgcm93IHRvIHRoZSBgaW5kZXhgdGggcm93IG9yIGFwcGVuZHMgdG8gdGFibGUgaWYgaW5kZXggbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBJZiByb3cgaXMgc2hvcnRlciB0aGFuIG90aGVyIHJvd3Mgb3Igbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIHBhZGRlZCB3aXRoXG5cdCAqIGVtcHR5IGBUYWJsZUl0ZW1gIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBJZiByb3cgaXMgbG9uZ2VyIHRoYW4gb3RoZXIgcm93cywgb3RoZXJzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gbWF0Y2ggc28gbm8gZGF0YSBpcyBsb3N0LlxuXHQgKlxuXHQgKiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgdGFibGUgd2l0aCBubyBwYXJhbWV0ZXJzLCBpdCBjcmVhdGVzIGEgMXgxIHRhYmxlLlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gW3Jvd11cblx0ICogQHBhcmFtIFtpbmRleF1cblx0ICovXG5cdGFkZFJvdyhyb3c/OiBUYWJsZUl0ZW1bXSwgaW5kZXg/OiBudW1iZXIpIHtcblx0XHQvLyBpZiB0YWJsZSBlbXB0eSBjcmVhdGUgdGFibGUgd2l0aCByb3dcblx0XHRpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuZGF0YVswXS5sZW5ndGggPT09IDApIHtcblx0XHRcdGxldCBuZXdEYXRhID0gbmV3IEFycmF5PEFycmF5PFRhYmxlSXRlbT4+KCk7XG5cdFx0XHRuZXdEYXRhLnB1c2gocm93ID8gcm93IDogW25ldyBUYWJsZUl0ZW0oKV0pOyAgLy8gcm93IG9yIG9uZSBlbXB0eSBvbmUgY29sdW1uIHJvd1xuXHRcdFx0dGhpcy5kYXRhID0gbmV3RGF0YTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByZWFsUm93ID0gcm93O1xuXHRcdGNvbnN0IGNvbHVtbkNvdW50ID0gdGhpcy5kYXRhWzBdLmxlbmd0aDtcblxuXHRcdGlmIChyb3cgPT0gbnVsbCkge1xuXHRcdFx0cmVhbFJvdyA9IG5ldyBBcnJheTxUYWJsZUl0ZW0+KCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspIHtcblx0XHRcdFx0cmVhbFJvdy5wdXNoKG5ldyBUYWJsZUl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlYWxSb3cubGVuZ3RoIDwgY29sdW1uQ291bnQpIHtcblx0XHRcdC8vIGV4dGVuZCB0aGUgbGVuZ3RoIG9mIHJlYWxSb3dcblx0XHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5Db3VudCAtIHJlYWxSb3cubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmZXJlbmNlOyBpKyspIHtcblx0XHRcdFx0cmVhbFJvdy5wdXNoKG5ldyBUYWJsZUl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChyZWFsUm93Lmxlbmd0aCA+IGNvbHVtbkNvdW50KSB7XG5cdFx0XHQvLyBleHRlbmQgdGhlIGxlbmd0aCBvZiBoZWFkZXJcblx0XHRcdGxldCBkaWZmZXJlbmNlID0gcmVhbFJvdy5sZW5ndGggLSB0aGlzLmhlYWRlci5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGRpZmZlcmVuY2U7IGorKykge1xuXHRcdFx0XHR0aGlzLmhlYWRlci5wdXNoKG5ldyBUYWJsZUhlYWRlckl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBleHRlbmQgdGhlIGxlbmd0aCBvZiBldmVyeSBvdGhlciByb3dcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxldCBjdXJyZW50Um93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0XHRkaWZmZXJlbmNlID0gcmVhbFJvdy5sZW5ndGggLSBjdXJyZW50Um93Lmxlbmd0aDtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBkaWZmZXJlbmNlOyBqKyspIHtcblx0XHRcdFx0XHRjdXJyZW50Um93LnB1c2gobmV3IFRhYmxlSXRlbSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpbmRleCA9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmRhdGEucHVzaChyZWFsUm93KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NTZWxlY3RlZCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NTZWxlY3RlZC5wdXNoKGZhbHNlKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NFeHBhbmRlZCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NFeHBhbmRlZC5wdXNoKGZhbHNlKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NDb250ZXh0IHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0NvbnRleHQucHVzaCh1bmRlZmluZWQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcm93c0NsYXNzIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0NsYXNzLnB1c2godW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NJbmRpY2VzIHByb3BlcnR5IGZvciBsZW5ndGhcblx0XHRcdHRoaXMucm93c0luZGljZXMucHVzaCh0aGlzLmRhdGEubGVuZ3RoIC0gMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdFx0dGhpcy5kYXRhLnNwbGljZShyaSwgMCwgcmVhbFJvdyk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzU2VsZWN0ZWQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzU2VsZWN0ZWQuc3BsaWNlKHJpLCAwLCBmYWxzZSk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzRXhwYW5kZWQgcHJvcGVydHkgZm9yIGxlbmd0aFxuXHRcdFx0dGhpcy5yb3dzRXhwYW5kZWQuc3BsaWNlKHJpLCAwLCBmYWxzZSk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzQ29udGV4dCBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShyaSwgMCwgdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJvd3NDbGFzcyBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NDbGFzcy5zcGxpY2UocmksIDAsIHVuZGVmaW5lZCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByb3dzSW5kaWNlcyBwcm9wZXJ0eSBmb3IgbGVuZ3RoXG5cdFx0XHR0aGlzLnJvd3NJbmRpY2VzLnNwbGljZShyaSwgMCwgdGhpcy5kYXRhLmxlbmd0aCAtIDEpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBgaW5kZXhgdGggcm93LlxuXHQgKlxuXHQgKiBOZWdhdGl2ZSBpbmRleCBzdGFydHMgZnJvbSB0aGUgZW5kLiAtMSBiZWluZyB0aGUgbGFzdCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdGRlbGV0ZVJvdyhpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgcnJpID0gdGhpcy5yZWFsUm93SW5kZXgoaW5kZXgpO1xuXHRcdHRoaXMuZGF0YS5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NTZWxlY3RlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZC5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NDb250ZXh0LnNwbGljZShycmksIDEpO1xuXHRcdHRoaXMucm93c0NsYXNzLnNwbGljZShycmksIDEpO1xuXG5cdFx0Y29uc3Qgcm93SW5kZXggPSB0aGlzLnJvd3NJbmRpY2VzW3JyaV07XG5cdFx0dGhpcy5yb3dzSW5kaWNlcy5zcGxpY2UocnJpLCAxKTtcblx0XHR0aGlzLnJvd3NJbmRpY2VzID0gdGhpcy5yb3dzSW5kaWNlcy5tYXAoKHZhbHVlKSA9PiAodmFsdWUgPiByb3dJbmRleCkgPyAtLXZhbHVlIDogdmFsdWUpO1xuXG5cdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcblx0fVxuXG5cdGhhc0V4cGFuZGFibGVSb3dzKCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuc29tZShkYXRhID0+IGRhdGEuc29tZShkID0+IGQgJiYgZC5leHBhbmRlZERhdGEpKTsgLy8gY2hlY2tpbmcgZm9yIHNvbWUgaW4gMkQgYXJyYXlcblx0fVxuXG5cdC8qKlxuXHQgKiBOdW1iZXIgb2Ygcm93cyB0aGF0IGNhbiBiZSBleHBhbmRlZC5cblx0ICpcblx0ICogQHJldHVybnMgbnVtYmVyXG5cdCAqL1xuXHRleHBhbmRhYmxlUm93c0NvdW50KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEucmVkdWNlKChjb3VudGVyLCBfLCBpbmRleCkgPT4ge1xuXHRcdFx0Y291bnRlciA9ICh0aGlzLmlzUm93RXhwYW5kYWJsZShpbmRleCkpID8gY291bnRlciArIDEgOiBjb3VudGVyO1xuXHRcdFx0cmV0dXJuIGNvdW50ZXI7XG5cdFx0fSwgMCk7XG5cdH1cblxuXHRpc1Jvd0V4cGFuZGFibGUoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLmRhdGFbaW5kZXhdLnNvbWUoZCA9PiBkICYmIGQuZXhwYW5kZWREYXRhKTtcblx0fVxuXG5cdGlzUm93RXhwYW5kZWQoaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnJvd3NFeHBhbmRlZFtpbmRleF07XG5cdH1cblxuXHRnZXRSb3dDb250ZXh0KGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3dzQ29udGV4dFtpbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBgaW5kZXhgdGggY29sdW1uIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogTmVnYXRpdmUgaW5kZXggc3RhcnRzIGZyb20gdGhlIGVuZC4gLTEgYmVpbmcgdGhlIGxhc3QgZWxlbWVudC5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRjb2x1bW4oaW5kZXg6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcblx0XHRsZXQgY29sdW1uID0gbmV3IEFycmF5PFRhYmxlSXRlbT4oKTtcblx0XHRjb25zdCByaSA9IHRoaXMucmVhbENvbHVtbkluZGV4KGluZGV4KTtcblx0XHRjb25zdCByYyA9IHRoaXMuZGF0YS5sZW5ndGg7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJjOyBpKyspIHtcblx0XHRcdGNvbnN0IHJvdyA9IHRoaXMuZGF0YVtpXTtcblx0XHRcdGNvbHVtbi5wdXNoKHJvd1tyaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW47XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGNvbHVtbiB0byB0aGUgYGluZGV4YHRoIGNvbHVtbiBvciBhcHBlbmRzIHRvIHRhYmxlIGlmIGluZGV4IG5vdCBwcm92aWRlZC5cblx0ICpcblx0ICogSWYgY29sdW1uIGlzIHNob3J0ZXIgdGhhbiBvdGhlciBjb2x1bW5zIG9yIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBwYWRkZWQgd2l0aFxuXHQgKiBlbXB0eSBgVGFibGVJdGVtYCBlbGVtZW50cy5cblx0ICpcblx0ICogSWYgY29sdW1uIGlzIGxvbmdlciB0aGFuIG90aGVyIGNvbHVtbnMsIG90aGVycyB3aWxsIGJlIGV4dGVuZGVkIHRvIG1hdGNoIHNvIG5vIGRhdGEgaXMgbG9zdC5cblx0ICpcblx0ICogSWYgY2FsbGVkIG9uIGFuIGVtcHR5IHRhYmxlIHdpdGggbm8gcGFyYW1ldGVycywgaXQgY3JlYXRlcyBhIDF4MSB0YWJsZS5cblx0ICpcblx0ICogTmVnYXRpdmUgaW5kZXggc3RhcnRzIGZyb20gdGhlIGVuZC4gLTEgYmVpbmcgdGhlIGxhc3QgZWxlbWVudC5cblx0ICpcblx0ICogQHBhcmFtIFtjb2x1bW5dXG5cdCAqIEBwYXJhbSBbaW5kZXhdXG5cdCAqL1xuXHRhZGRDb2x1bW4oY29sdW1uPzogVGFibGVJdGVtW10sIGluZGV4PzogbnVtYmVyKSB7XG5cdFx0Ly8gaWYgdGFibGUgZW1wdHkgY3JlYXRlIHRhYmxlIHdpdGggcm93XG5cdFx0aWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmRhdGFbMF0ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRsZXQgbmV3RGF0YSA9IG5ldyBBcnJheTxBcnJheTxUYWJsZUl0ZW0+PigpO1xuXHRcdFx0aWYgKGNvbHVtbiA9PSBudWxsKSB7XG5cdFx0XHRcdG5ld0RhdGEucHVzaChbbmV3IFRhYmxlSXRlbSgpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxldCBpdGVtID0gY29sdW1uW2ldO1xuXHRcdFx0XHRcdG5ld0RhdGEucHVzaChbaXRlbV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRhdGEgPSBuZXdEYXRhO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHJjID0gdGhpcy5kYXRhLmxlbmd0aDsgIC8vIHJvdyBjb3VudFxuXHRcdGxldCBjaSA9IHRoaXMucmVhbENvbHVtbkluZGV4KGluZGV4KTtcblxuXHRcdC8vIGFwcGVuZCBtaXNzaW5nIHJvd3Ncblx0XHRmb3IgKGxldCBpID0gMDsgY29sdW1uICE9IG51bGwgJiYgaSA8IGNvbHVtbi5sZW5ndGggLSByYzsgaSsrKSB7XG5cdFx0XHR0aGlzLmFkZFJvdygpO1xuXHRcdH1cblx0XHRyYyA9IHRoaXMuZGF0YS5sZW5ndGg7XG5cdFx0aWYgKGluZGV4ID09IG51bGwpIHtcblx0XHRcdC8vIGFwcGVuZCB0byBlbmRcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmM7IGkrKykge1xuXHRcdFx0XHRsZXQgcm93ID0gdGhpcy5kYXRhW2ldO1xuXHRcdFx0XHRyb3cucHVzaChjb2x1bW4gPT0gbnVsbCB8fCBjb2x1bW5baV0gPT0gbnVsbCA/IG5ldyBUYWJsZUl0ZW0oKSA6IGNvbHVtbltpXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgaGVhZGVyIGlmIG5vdCBhbHJlYWR5IHNldCBieSB1c2VyXG5cdFx0XHRpZiAodGhpcy5oZWFkZXIubGVuZ3RoIDwgdGhpcy5kYXRhWzBdLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLmhlYWRlci5wdXNoKG5ldyBUYWJsZUhlYWRlckl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpbmRleCA+PSB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGlmIHRyeWluZyB0byBhcHBlbmRcblx0XHRcdFx0Y2krKztcblx0XHRcdH1cblx0XHRcdC8vIGluc2VydFxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYzsgaSsrKSB7XG5cdFx0XHRcdGxldCByb3cgPSB0aGlzLmRhdGFbaV07XG5cdFx0XHRcdHJvdy5zcGxpY2UoY2ksIDAsIGNvbHVtbiA9PSBudWxsIHx8IGNvbHVtbltpXSA9PSBudWxsID8gbmV3IFRhYmxlSXRlbSgpIDogY29sdW1uW2ldKTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IGJ5IHVzZXJcblx0XHRcdGlmICh0aGlzLmhlYWRlci5sZW5ndGggPCB0aGlzLmRhdGFbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuaGVhZGVyLnNwbGljZShjaSwgMCwgbmV3IFRhYmxlSGVhZGVySXRlbSgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFDaGFuZ2UuZW1pdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYGluZGV4YHRoIGNvbHVtbi5cblx0ICpcblx0ICogTmVnYXRpdmUgaW5kZXggc3RhcnRzIGZyb20gdGhlIGVuZC4gLTEgYmVpbmcgdGhlIGxhc3QgZWxlbWVudC5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRkZWxldGVDb2x1bW4oaW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IHJjaSA9IHRoaXMucmVhbENvbHVtbkluZGV4KGluZGV4KTtcblx0XHRjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YS5sZW5ndGg7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG5cdFx0XHR0aGlzLmRhdGFbaV0uc3BsaWNlKHJjaSwgMSk7XG5cdFx0fVxuXHRcdC8vIHVwZGF0ZSBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IGJ5IHVzZXJcblx0XHRpZiAodGhpcy5oZWFkZXIubGVuZ3RoID4gdGhpcy5kYXRhWzBdLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5oZWFkZXIuc3BsaWNlKHJjaSwgMSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcblx0fVxuXG5cdG1vdmVDb2x1bW4oaW5kZXhGcm9tOiBudW1iZXIsIGluZGV4VG86IG51bWJlcikge1xuXHRcdGNvbnN0IGhlYWRlckZyb20gPSB0aGlzLmhlYWRlcltpbmRleEZyb21dO1xuXG5cdFx0dGhpcy5hZGRDb2x1bW4odGhpcy5jb2x1bW4oaW5kZXhGcm9tKSwgaW5kZXhUbyk7XG5cdFx0dGhpcy5kZWxldGVDb2x1bW4oaW5kZXhGcm9tICsgKGluZGV4VG8gPCBpbmRleEZyb20gPyAxIDogMCkpO1xuXG5cdFx0dGhpcy5oZWFkZXJbaW5kZXhUbyArIChpbmRleFRvID4gaW5kZXhGcm9tID8gLTEgOiAwKV0gPSBoZWFkZXJGcm9tO1xuXHR9XG5cblx0LyoqXG5cdCAqIGN5Y2xlIHRocm91Z2ggdGhlIHRocmVlIHNvcnQgc3RhdGVzXG5cdCAqIEBwYXJhbSBpbmRleFxuXHQgKi9cblx0Y3ljbGVTb3J0U3RhdGUoaW5kZXg6IG51bWJlcikge1xuXHRcdC8vIG5vIHNvcnQgcHJvdmlkZWQgc28gZG8gdGhlIHNpbXBsZSBzb3J0XG5cdFx0c3dpdGNoICh0aGlzLmhlYWRlcltpbmRleF0uc29ydERpcmVjdGlvbikge1xuXHRcdFx0Y2FzZSBcIkFTQ0VORElOR1wiOlxuXHRcdFx0XHR0aGlzLmhlYWRlcltpbmRleF0uc29ydERpcmVjdGlvbiA9IFwiREVTQ0VORElOR1wiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJERVNDRU5ESU5HXCI6XG5cdFx0XHRcdHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0RGlyZWN0aW9uID0gXCJOT05FXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5oZWFkZXJbaW5kZXhdLnNvcnREaXJlY3Rpb24gPSBcIkFTQ0VORElOR1wiO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU29ydHMgdGhlIGRhdGEgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIG1vZGVsIGJhc2VkIG9uIGBjb21wYXJlKClgXG5cdCAqXG5cdCAqIERpcmVjdGlvbiBpcyBzZXQgYnkgYGFzY2VuZGluZ2AgYW5kIGBkZXNjZW5kaW5nYCBwcm9wZXJ0aWVzIG9mIGBUYWJsZUhlYWRlckl0ZW1gXG5cdCAqIGluIGBpbmRleGB0aCBjb2x1bW4uXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgY29sdW1uIGJhc2VkIG9uIHdoaWNoIGl0J3Mgc29ydGluZ1xuXHQgKi9cblx0c29ydChpbmRleDogbnVtYmVyKSB7XG5cdFx0dGhpcy5wdXNoUm93U3RhdGVUb01vZGVsRGF0YSgpO1xuXHRcdGNvbnN0IGhlYWRlclNvcnRlZCA9IHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0ZWQ7XG5cdFx0Ly8gV2Ugb25seSBhbGxvdyBzb3J0aW5nIGJ5IGEgc2luZ2xlIGNvbHVtbiwgc28gcmVzZXQgc29ydCBzdGF0ZSBmb3IgYWxsIGNvbHVtbnMgYmVmb3JlIHNwZWNpZnlpbmcgbmV3IHNvcnQgc3RhdGVcblx0XHR0aGlzLmhlYWRlci5mb3JFYWNoKGNvbHVtbiA9PiBjb2x1bW4uc29ydGVkID0gZmFsc2UpO1xuXHRcdGlmICh0aGlzLmhlYWRlcltpbmRleF0uc29ydERpcmVjdGlvbiA9PT0gXCJOT05FXCIgJiYgaGVhZGVyU29ydGVkKSB7XG5cdFx0XHQvLyBSZXN0b3JlIGluaXRpYWwgb3JkZXIgb2Ygcm93c1xuXHRcdFx0Y29uc3Qgb2xkRGF0YSA9IHRoaXMuX2RhdGE7XG5cdFx0XHR0aGlzLl9kYXRhID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93c0luZGljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgcmkgPSB0aGlzLnJvd3NJbmRpY2VzW2ldO1xuXHRcdFx0XHR0aGlzLl9kYXRhW3JpXSA9IG9sZERhdGFbaV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRlc2NlbmRpbmcgPSB0aGlzLmhlYWRlcltpbmRleF0uc29ydERpcmVjdGlvbiA9PT0gXCJERVNDRU5ESU5HXCIgPyAtMSA6IDE7XG5cdFx0XHR0aGlzLmRhdGEuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGVzY2VuZGluZyAqIHRoaXMuaGVhZGVyW2luZGV4XS5jb21wYXJlKGFbaW5kZXhdLCBiW2luZGV4XSk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuaGVhZGVyW2luZGV4XS5zb3J0ZWQgPSB0cnVlO1xuXHRcdH1cblx0XHR0aGlzLnBvcFJvd1N0YXRlRnJvbU1vZGVsRGF0YSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZHMgYHJvd3NTZWxlY3RlZGAgYW5kIGByb3dzRXhwYW5kZWRgIGluZm8gdG8gbW9kZWwgZGF0YS5cblx0ICpcblx0ICogV2hlbiBzb3J0aW5nIHJvd3MsIGRvIHRoaXMgZmlyc3Qgc28gaW5mb3JtYXRpb24gYWJvdXQgcm93IHNlbGVjdGlvblxuXHQgKiBnZXRzIHNvcnRlZCB3aXRoIHRoZSBvdGhlciByb3cgaW5mby5cblx0ICpcblx0ICogQ2FsbCBgcG9wUm93U2VsZWN0aW9uRnJvbU1vZGVsRGF0YSgpYCBhZnRlciBzb3J0aW5nIHRvIG1ha2UgZXZlcnl0aGluZ1xuXHQgKiByaWdodCB3aXRoIHRoZSB3b3JsZCBhZ2Fpbi5cblx0ICovXG5cdHB1c2hSb3dTdGF0ZVRvTW9kZWxEYXRhKCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCByb3dTZWxlY3RlZE1hcmsgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dTZWxlY3RlZE1hcmsuZGF0YSA9IHRoaXMucm93c1NlbGVjdGVkW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93U2VsZWN0ZWRNYXJrKTtcblxuXHRcdFx0Y29uc3Qgcm93RXhwYW5kZWRNYXJrID0gbmV3IFRhYmxlSXRlbSgpO1xuXHRcdFx0cm93RXhwYW5kZWRNYXJrLmRhdGEgPSB0aGlzLnJvd3NFeHBhbmRlZFtpXTtcblx0XHRcdHRoaXMuZGF0YVtpXS5wdXNoKHJvd0V4cGFuZGVkTWFyayk7XG5cblx0XHRcdGNvbnN0IHJvd0NvbnRleHQgPSBuZXcgVGFibGVJdGVtKCk7XG5cdFx0XHRyb3dDb250ZXh0LmRhdGEgPSB0aGlzLnJvd3NDb250ZXh0W2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93Q29udGV4dCk7XG5cblx0XHRcdGNvbnN0IHJvd0NsYXNzID0gbmV3IFRhYmxlSXRlbSgpO1xuXHRcdFx0cm93Q2xhc3MuZGF0YSA9IHRoaXMucm93c0NsYXNzW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93Q2xhc3MpO1xuXG5cdFx0XHRjb25zdCByb3dJbmRleCA9IG5ldyBUYWJsZUl0ZW0oKTtcblx0XHRcdHJvd0luZGV4LmRhdGEgPSB0aGlzLnJvd3NJbmRpY2VzW2ldO1xuXHRcdFx0dGhpcy5kYXRhW2ldLnB1c2gocm93SW5kZXgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXN0b3JlcyBgcm93c1NlbGVjdGVkYCBmcm9tIGRhdGEgcHVzaGVkIGJ5IGBwdXNoUm93U2VsZWN0aW9uVG9Nb2RlbERhdGEoKWBcblx0ICpcblx0ICogQ2FsbCBhZnRlciBzb3J0aW5nIGRhdGEgKGlmIHlvdSBwcmV2aW91c2x5IHB1c2hlZCB0byBtYWludGFpbiBzZWxlY3Rpb24gb3JkZXIpXG5cdCAqIHRvIG1ha2UgZXZlcnl0aGluZyByaWdodCB3aXRoIHRoZSB3b3JsZCBhZ2Fpbi5cblx0ICovXG5cdHBvcFJvd1N0YXRlRnJvbU1vZGVsRGF0YSgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5yb3dzSW5kaWNlc1tpXSA9IHRoaXMuZGF0YVtpXS5wb3AoKS5kYXRhO1xuXHRcdFx0dGhpcy5yb3dzQ2xhc3NbaV0gPSB0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHRcdHRoaXMucm93c0NvbnRleHRbaV0gPSB0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHRcdHRoaXMucm93c0V4cGFuZGVkW2ldID0gISF0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHRcdHRoaXMucm93c1NlbGVjdGVkW2ldID0gISF0aGlzLmRhdGFbaV0ucG9wKCkuZGF0YTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHJvdyBpcyBmaWx0ZXJlZCBvdXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleFxuXHQgKiBAcmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgZmlsdGVycyBpbiBoZWFkZXIgZmlsdGVycyBvdXQgdGhlIGBpbmRleGB0aCByb3dcblx0ICovXG5cdGlzUm93RmlsdGVyZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlYWxJbmRleCA9IHRoaXMucmVhbFJvd0luZGV4KGluZGV4KTtcblx0XHRyZXR1cm4gdGhpcy5oZWFkZXIuc29tZSgoaXRlbSwgaSkgPT4gaXRlbSAmJiBpdGVtLmZpbHRlcih0aGlzLnJvdyhyZWFsSW5kZXgpW2ldKSk7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0L2Rlc2VsZWN0IGBpbmRleGB0aCByb3cgYmFzZWQgb24gdmFsdWVcblx0ICpcblx0ICogQHBhcmFtIGluZGV4IGluZGV4IG9mIHRoZSByb3cgdG8gc2VsZWN0XG5cdCAqIEBwYXJhbSB2YWx1ZSBzdGF0ZSB0byBzZXQgdGhlIHJvdyB0by4gRGVmYXVsdHMgdG8gYHRydWVgXG5cdCAqL1xuXHRzZWxlY3RSb3coaW5kZXg6IG51bWJlciwgdmFsdWUgPSB0cnVlKSB7XG5cdFx0aWYgKHRoaXMuaXNSb3dEaXNhYmxlZChpbmRleCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yb3dzU2VsZWN0ZWRbaW5kZXhdID0gdmFsdWU7XG5cdFx0dGhpcy5yb3dzU2VsZWN0ZWRDaGFuZ2UuZW1pdChpbmRleCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0cyBvciBkZXNlbGVjdHMgYWxsIHJvd3MgaW4gdGhlIG1vZGVsXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBzdGF0ZSB0byBzZXQgYWxsIHJvd3MgdG8uIERlZmF1bHRzIHRvIGB0cnVlYFxuXHQgKi9cblx0c2VsZWN0QWxsKHZhbHVlID0gdHJ1ZSkge1xuXHRcdGlmICh0aGlzLmRhdGEubGVuZ3RoID49IDEgJiYgdGhpcy5kYXRhWzBdLmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93c1NlbGVjdGVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0Um93KGksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5zZWxlY3RBbGxDaGFuZ2UubmV4dCh2YWx1ZSk7XG5cdH1cblxuXHRpc1Jvd1NlbGVjdGVkKGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3dzU2VsZWN0ZWRbaW5kZXhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiByb3cgaXMgZGlzYWJsZWQgb3Igbm90LlxuXHQgKi9cblx0aXNSb3dEaXNhYmxlZChpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5kYXRhW2luZGV4XSBhcyBUYWJsZVJvdztcblx0XHRyZXR1cm4gISFyb3cuZGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRXhwYW5kcy9Db2xsYXBzZXMgYGluZGV4YHRoIHJvdyBiYXNlZCBvbiB2YWx1ZVxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHJvdyB0byBleHBhbmQgb3IgY29sbGFwc2Vcblx0ICogQHBhcmFtIHZhbHVlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSByb3cuIGB0cnVlYCBpcyBleHBhbmRlZCBhbmQgYGZhbHNlYCBpcyBjb2xsYXBzZWRcblx0ICovXG5cdGV4cGFuZFJvdyhpbmRleDogbnVtYmVyLCB2YWx1ZSA9IHRydWUpIHtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZFtpbmRleF0gPSB2YWx1ZTtcblx0XHR0aGlzLnJvd3NFeHBhbmRlZENoYW5nZS5lbWl0KGluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBhbmRzIC8gY29sbGFwc2VzIGFsbCByb3dzXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBleHBhbmRlZCBzdGF0ZSBvZiB0aGUgcm93cy4gYHRydWVgIGlzIGV4cGFuZGVkIGFuZCBgZmFsc2VgIGlzIGNvbGxhcHNlZFxuXHQgKi9cblx0ZXhwYW5kQWxsUm93cyh2YWx1ZSA9IHRydWUpIHtcblx0XHRpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmlzUm93RXhwYW5kYWJsZShpKSkge1xuXHRcdFx0XHRcdHRoaXMucm93c0V4cGFuZGVkW2ldID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMucm93c0V4cGFuZGVkQWxsQ2hhbmdlLmVtaXQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucm93c0NvbGxhcHNlZEFsbENoYW5nZS5lbWl0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRydWUgaW5kZXggb2YgYSByb3cgYmFzZWQgb24gaXQncyByZWxhdGl2ZSBwb3NpdGlvbi5cblx0ICogTGlrZSBpbiBQeXRob24sIHBvc2l0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgdG9wIGFuZFxuXHQgKiBuZWdhdGl2ZSBudW1iZXJzIHN0YXJ0IGZyb20gdGhlIGJvdHRvbS5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhbFJvd0luZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLnJlYWxJbmRleChpbmRleCwgdGhpcy5kYXRhLmxlbmd0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHJ1ZSBpbmRleCBvZiBhIGNvbHVtbiBiYXNlZCBvbiBpdCdzIHJlbGF0aXZlIHBvc2l0aW9uLlxuXHQgKiBMaWtlIGluIFB5dGhvbiwgcG9zaXRpdmUgbnVtYmVycyBzdGFydCBmcm9tIHRoZSB0b3AgYW5kXG5cdCAqIG5lZ2F0aXZlIG51bWJlcnMgc3RhcnQgZnJvbSB0aGUgYm90dG9tLlxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICovXG5cdHByb3RlY3RlZCByZWFsQ29sdW1uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMucmVhbEluZGV4KGluZGV4LCB0aGlzLmRhdGFbMF0ubGVuZ3RoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmljIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcmVhbCBpbmRleCBvZiBzb21ldGhpbmcuXG5cdCAqIFVzZWQgYnkgYHJlYWxSb3dJbmRleCgpYCBhbmQgYHJlYWxDb2x1bW5JbmRleCgpYFxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGxlbmd0aFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWxJbmRleChpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0aWYgKGluZGV4ID09IG51bGwpIHtcblx0XHRcdHJldHVybiBsZW5ndGggLSAxO1xuXHRcdH0gZWxzZSBpZiAoaW5kZXggPj0gMCkge1xuXHRcdFx0cmV0dXJuIGluZGV4ID49IGxlbmd0aCA/IGxlbmd0aCAtIDEgOiBpbmRleDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIC1pbmRleCA+PSBsZW5ndGggPyAwIDogbGVuZ3RoICsgaW5kZXg7XG5cdFx0fVxuXHR9XG59XG4iXX0=
|