@huntsman-cancer-institute/navigation 17.0.5 → 17.0.6
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/esm2022/components/brand-nav.component.mjs +2 -2
- package/esm2022/components/search-list/search-list-controller.component.mjs +11 -11
- package/esm2022/components/search-list/search-list.component.mjs +21 -21
- package/esm2022/components/search-tree/search-tree-controller.component.mjs +17 -17
- package/esm2022/components/search-tree/search-tree.component.mjs +3 -3
- package/esm2022/impl/app-footer.component.mjs +7 -7
- package/esm2022/impl/app-header.component.mjs +3 -3
- package/fesm2022/huntsman-cancer-institute-navigation.mjs +57 -57
- package/fesm2022/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1071,7 +1071,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
1071
1071
|
<div class="d-flex scrollable">
|
|
1072
1072
|
<div id="no-results-found"></div>
|
|
1073
1073
|
<div id="search-title" class="d-flex flex-column">
|
|
1074
|
-
<div class="d-flex
|
|
1074
|
+
<div class="d-flex ps-3">
|
|
1075
1075
|
</div>
|
|
1076
1076
|
</div>
|
|
1077
1077
|
<div id="result-list">
|
|
@@ -1179,7 +1179,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
1179
1179
|
</div>
|
|
1180
1180
|
</div>
|
|
1181
1181
|
<!-- Paging footer -->
|
|
1182
|
-
<div *ngIf="paging.pageSize > 0" class="d-flex flex-shrink-0 paging-footer justify-content-between
|
|
1182
|
+
<div *ngIf="paging.pageSize > 0" class="d-flex flex-shrink-0 paging-footer justify-content-between ps-3 pe-3"
|
|
1183
1183
|
style="min-height: 1rem; align-items: center;">
|
|
1184
1184
|
<ng-container *ngIf="!selectedRowGroup">
|
|
1185
1185
|
<div (click)="doPageFirst()" class="d-flex mt-1 mb-1" [class.disabled]="paging.page === 0"><i
|
|
@@ -1198,15 +1198,15 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
1198
1198
|
|
|
1199
1199
|
<!-- Default template for a group -->
|
|
1200
1200
|
<ng-template #defaultGroupTemplate let-rowGroup="rowGroup">
|
|
1201
|
-
<div class="d-flex flex-grow-1
|
|
1202
|
-
<div class="font-weight-bold
|
|
1203
|
-
<ng-container class="d-flex
|
|
1201
|
+
<div class="d-flex flex-grow-1 ps-2" style="align-items: center;">
|
|
1202
|
+
<div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
|
|
1203
|
+
<ng-container class="d-flex me-1" style="align-items: center;">
|
|
1204
1204
|
<div *ngIf="rowGroup.rgExpanded === true; else plusTemplate">
|
|
1205
|
-
<i class="fas fa-minus fa-sm
|
|
1205
|
+
<i class="fas fa-minus fa-sm me-1"></i>
|
|
1206
1206
|
</div>
|
|
1207
1207
|
<ng-template #plusTemplate>
|
|
1208
1208
|
<div>
|
|
1209
|
-
<i class="fas fa-plus fa-sm
|
|
1209
|
+
<i class="fas fa-plus fa-sm me-1"></i>
|
|
1210
1210
|
</div>
|
|
1211
1211
|
</ng-template>
|
|
1212
1212
|
({{rowGroup.rgCount}})
|
|
@@ -1216,11 +1216,11 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
1216
1216
|
|
|
1217
1217
|
<!-- Default template for an individual selected group -->
|
|
1218
1218
|
<ng-template #defaultGroupSelectedTemplate let-rowGroup="rowGroup">
|
|
1219
|
-
<div class="d-flex flex-grow-1
|
|
1220
|
-
<div class="
|
|
1219
|
+
<div class="d-flex flex-grow-1 ps-2" style="align-items: center;">
|
|
1220
|
+
<div class="me-3">
|
|
1221
1221
|
<i class="fas fa-level-up-alt" data-fa-transform="flip-h"></i>
|
|
1222
1222
|
</div>
|
|
1223
|
-
<div class="font-weight-bold
|
|
1223
|
+
<div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
|
|
1224
1224
|
</div>
|
|
1225
1225
|
</ng-template>
|
|
1226
1226
|
`, isInline: true, styles: [".results-count{background-color:var(--greywarm-meddark);color:#fff;font-size:17.3px;padding-left:18px}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-lightest)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i5.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }] }); }
|
|
@@ -1246,7 +1246,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1246
1246
|
<div class="d-flex scrollable">
|
|
1247
1247
|
<div id="no-results-found"></div>
|
|
1248
1248
|
<div id="search-title" class="d-flex flex-column">
|
|
1249
|
-
<div class="d-flex
|
|
1249
|
+
<div class="d-flex ps-3">
|
|
1250
1250
|
</div>
|
|
1251
1251
|
</div>
|
|
1252
1252
|
<div id="result-list">
|
|
@@ -1354,7 +1354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1354
1354
|
</div>
|
|
1355
1355
|
</div>
|
|
1356
1356
|
<!-- Paging footer -->
|
|
1357
|
-
<div *ngIf="paging.pageSize > 0" class="d-flex flex-shrink-0 paging-footer justify-content-between
|
|
1357
|
+
<div *ngIf="paging.pageSize > 0" class="d-flex flex-shrink-0 paging-footer justify-content-between ps-3 pe-3"
|
|
1358
1358
|
style="min-height: 1rem; align-items: center;">
|
|
1359
1359
|
<ng-container *ngIf="!selectedRowGroup">
|
|
1360
1360
|
<div (click)="doPageFirst()" class="d-flex mt-1 mb-1" [class.disabled]="paging.page === 0"><i
|
|
@@ -1373,15 +1373,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1373
1373
|
|
|
1374
1374
|
<!-- Default template for a group -->
|
|
1375
1375
|
<ng-template #defaultGroupTemplate let-rowGroup="rowGroup">
|
|
1376
|
-
<div class="d-flex flex-grow-1
|
|
1377
|
-
<div class="font-weight-bold
|
|
1378
|
-
<ng-container class="d-flex
|
|
1376
|
+
<div class="d-flex flex-grow-1 ps-2" style="align-items: center;">
|
|
1377
|
+
<div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
|
|
1378
|
+
<ng-container class="d-flex me-1" style="align-items: center;">
|
|
1379
1379
|
<div *ngIf="rowGroup.rgExpanded === true; else plusTemplate">
|
|
1380
|
-
<i class="fas fa-minus fa-sm
|
|
1380
|
+
<i class="fas fa-minus fa-sm me-1"></i>
|
|
1381
1381
|
</div>
|
|
1382
1382
|
<ng-template #plusTemplate>
|
|
1383
1383
|
<div>
|
|
1384
|
-
<i class="fas fa-plus fa-sm
|
|
1384
|
+
<i class="fas fa-plus fa-sm me-1"></i>
|
|
1385
1385
|
</div>
|
|
1386
1386
|
</ng-template>
|
|
1387
1387
|
({{rowGroup.rgCount}})
|
|
@@ -1391,11 +1391,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1391
1391
|
|
|
1392
1392
|
<!-- Default template for an individual selected group -->
|
|
1393
1393
|
<ng-template #defaultGroupSelectedTemplate let-rowGroup="rowGroup">
|
|
1394
|
-
<div class="d-flex flex-grow-1
|
|
1395
|
-
<div class="
|
|
1394
|
+
<div class="d-flex flex-grow-1 ps-2" style="align-items: center;">
|
|
1395
|
+
<div class="me-3">
|
|
1396
1396
|
<i class="fas fa-level-up-alt" data-fa-transform="flip-h"></i>
|
|
1397
1397
|
</div>
|
|
1398
|
-
<div class="font-weight-bold
|
|
1398
|
+
<div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
|
|
1399
1399
|
</div>
|
|
1400
1400
|
</ng-template>
|
|
1401
1401
|
`, styles: [".results-count{background-color:var(--greywarm-meddark);color:#fff;font-size:17.3px;padding-left:18px}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-lightest)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"] }]
|
|
@@ -1483,4 +1483,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1483
1483
|
static: false
|
|
1484
1484
|
}]
|
|
1485
1485
|
}] } });
|
|
1486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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RUFBRTt3QkFDekMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQXVKa0QsVUFBVTtzQkFBNUQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQXl6QnRDLCtCQUErQjtzQkFIckMsU0FBUzt1QkFBQywyQkFBMkIsRUFBRTt3QkFDdEMsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxLQUFLO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIGlzRGV2TW9kZSxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2UsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtkZWxheSwgZmluYWxpemV9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge05nYkRyb3Bkb3dufSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7SGNpRGF0YUR0bywgSGNpRmlsdGVyRHRvLCBIY2lHcmlkRHRvLCBIY2lHcm91cGluZ0R0bywgSGNpUGFnaW5nRHRvLCBIY2lTb3J0RHRvfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaGNpLW5nLWdyaWQtZHRvXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSBcIi4uL25hdi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1Jvd0dyb3VwfSBmcm9tIFwiLi9yb3ctZ3JvdXBcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uR2xvYmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24tZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudH0gZnJvbSBcIi4vc2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBjYW4gYmUgZ3JvdXBlZCBvciBub3QgZ3JvdXBlZC4gIFRoZSBkYXRhIGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSBhbiBhcnJheSwgb3IgZnJvbSBhbiBleHRlcm5hbFxyXG4gKiBkYXRhIGNhbGwgdXNpbmcganBhLXNlcnZpY2VzLlxyXG4gKi9cclxuQENvbXBvbmVudFR5cGUoXCJTZWFyY2hMaXN0Q29tcG9uZW50XCIpXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXNlYXJjaC1saXN0XCIsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgYFxyXG4gICAgICAgIC5yZXN1bHRzLWNvdW50IHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdyZXl3YXJtLW1lZGRhcmspO1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNy4zcHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybWF0LWJvdHRvbS1wYWRkaW5nIHtcclxuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddOm50aC1jaGlsZChldmVuKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZS1tZWRpdW0pICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ10ge1xyXG4gICAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXYucm93LXBhcmVudC5hY3RpdmUge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkLWxpZ2h0ZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLnJpLXNpZGViYXItY2VsbCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgYFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCIgW25nQ2xhc3NdPVwieyAnZm9ybWF0LWJvdHRvbS1wYWRkaW5nJzogdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID09PSAnJyB9XCI+XHJcbiAgICAgICAgICB7eyB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzY3JvbGxhYmxlXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcGwtM1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInJlc3VsdC1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbY2xhc3MueS1oaWRkZW5dPVwic2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiIHBhcmVudFNlbGVjdG9yPVwiLnNjcm9sbGFibGVcIiBbaWNvbl09XCJidXN5SWNvblwiPjwvaGNpLWJ1c3k+XHJcbiAgICAgICAgICAgICAgPCEtLSBObyBncm91cGluZyAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nLmZpZWxkcyB8fCBncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggaW5saW5lIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmICFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChyb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIHt7Z3JvdXBDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIHNlcGFyYXRlIGluZGl2aWR1YWwgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JvdXBTZWxlY3RlZFBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1zZWxlY3RlZC1wYXJlbnQgZmxleC1jb2x1bW4ge3tncm91cENsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQoc2VsZWN0ZWRSb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgc2VsZWN0ZWRSb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHNlbGVjdGVkUm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGlkPVwic2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4geS1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFBhZ2luZyBmb290ZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2luZy5wYWdlU2l6ZSA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluay0wIHBhZ2luZy1mb290ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcGwtMyBwci0zXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMXJlbTsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VGaXJzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VQcmV2aW91cygpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPnt7cGFnaW5nLnBhZ2UgKyAxfX0gb2Yge3twYWdpbmcubnVtUGFnZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VOZXh0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTGFzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwbC0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtci1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImQtZmxleCBtci0xXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlOyBlbHNlIHBsdXNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXMgZmEtc20gbXItMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXNUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtc20gbXItMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgKHt7cm93R3JvdXAucmdDb3VudH19KVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYW4gaW5kaXZpZHVhbCBzZWxlY3RlZCBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcGwtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTNcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sZXZlbC11cC1hbHRcIiBkYXRhLWZhLXRyYW5zZm9ybT1cImZsaXAtaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1yLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAvLyBUaGUgZGF0YSB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxyXG4gIHZpZXdEYXRhOiBSb3dHcm91cFtdO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXI6IFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFcIikgYm91bmREYXRhOiBPYmplY3RbXTtcclxuXHJcbiAgLy8gQSBzdWJqZWN0IHRoYXQgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFTdWJqZWN0XCIpIGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JqZWN0W10+O1xyXG5cclxuICAvLyBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGluIGEgSGNpR3JpZER0byBhbmQgcmV0dXJucyBhIEhjaURhdGFEdG8gd2hpY2ggd3JhcHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhQ2FsbFwiKSBleHRlcm5hbERhdGFDYWxsOiAoZHRvOiBIY2lHcmlkRHRvKSA9PiBPYnNlcnZhYmxlPEhjaURhdGFEdG8+O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBzdWJqZWN0cyB3aXRoIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmdTdWJqZWN0czogU3ViamVjdDxib29sZWFuPltdO1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuW10gPSBbZmFsc2VdO1xyXG5cclxuICAvLyBJZiBjbGlja2luZyBhIHJvdyBjaGFuZ2VzIGEgcm91dGUsIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSByb3V0ZSB0byB1c2UuXHJcbiAgQElucHV0KCkgcm91dGU6IChyb3dHcm91cDogYW55LCByb3c6IGFueSkgPT4gYW55W107XHJcblxyXG4gIC8vIEV4cGFuZCB0aGUgc2VsZWN0ZWQgcm93IGdyb3VwIGFzIGl0cyBvd24gc2NyZWVuLCBvciBzaG93IHJvd3MgdW5kZXIgc2VsZWN0ZWQgcm93IGdyb3VwcyBpbiB0aGUgc2FtZSB2aWV3LlxyXG4gIEBJbnB1dCgpIGlubGluZUV4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXRob3V0IGFueSBvdGhlciBtZXRhZGF0YSBmb3Igd2hhdCBhIHJvdyBpcywgcHJvdmlkZSB0aGUgZmllbGQgdG8gYmUgdXNlZCBmb3IgdGhlIGlkLlxyXG4gIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGZpZWxkIHRoYXQgaGFzIHRoZSAoZGVmaW5lZCkgcm93SWQgLS0gd2hhdGV2ZXIgaXQgaXMgdW5kZXIgZGlmZmVyZW50XHJcbiAgLy8gc3RydWN0dXJlczogaWRQYXRpZW50LCBpZE1lZGljYWxFdmVudCBldGNcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IGdyb3VwIHBhcmVudC5cclxuICBASW5wdXQoKSBncm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IHBhcmVudC5cclxuICBASW5wdXQoKSByb3dDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQSB0ZW1wbGF0ZSBmb3IgaG93IHRvIGRpc3BsYXkgcm93IGdyb3VwIGluZm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuICBlLmcuIFwibGFzdE5hbWUsIGZpcnN0TmFtZVwiIGZpZWxkIG5hbWVzIGdldCByZXBsYWNlZCB3aXRoIHZhbHVlcy5cclxuICBASW5wdXQoKSBncm91cERpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnRcclxuICBASW5wdXQoKSBjbG9zZU90aGVyczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRoZSBsaXN0IG9mIGZpZWxkcyB0byBncm91cCBieS5cclxuICBASW5wdXQoKSBncm91cGluZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnQgaWYgd2Ugd2FudCB1c2VycyB0byBiZSBhYmxlIHRvIGNvbnRyb2wgZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgZ3JvdXBCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93IGdyb3VwcyBvciByb3dzIGlmIG5vIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93cyBpbiBhIHNlbGVjdGVkIGdyb3VwLlxyXG4gIEBJbnB1dCgpIGdyb3VwUGFnZVNpemU6IG51bWJlciA9IDUwO1xyXG5cclxuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIG9mIHJvd3MgdG8gY2FjaGUgaW50ZXJuYWxseSBiZWZvcmUgYW4gZXh0ZXJuYWwgY2FsbCBpcyBtYWRlLlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2FjaGVOdW1QYWdlczogbnVtYmVyO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byBhIHBhcmVudCBkcm9wZG93biBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgLy9XaGljaCBpY29uIHRvIHVzZSBmb3IgdGhlIGJ1c3kgc3Bpbm5lclxyXG4gIEBJbnB1dCgpIGJ1c3lJY29uOiBzdHJpbmcgPSBcImhjaSBmYS1jb3JlIGZhLXNwaW5cIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiBubyBvbkdyb3VwQ2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdEdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHtcclxuICAgIGNtcHQuc2V0R3JvdXBFeHBhbmRlZChldmVudCwgcm93R3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQ7XHJcblxyXG4gIC8vIElmIG5vIG9uUm93Q2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdFJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93O1xyXG5cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93OiByb3csXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICBASW5wdXQoKSBvblJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGdyb3VwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwVGVtcGxhdGVcIiwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZWZhdWx0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZVwiLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICAgIHN0YXRpYzogdHJ1ZVxyXG4gIH0pIGRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHNlbGVjdGVkUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cDogUm93R3JvdXA7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgaW5uZXJSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIEdyaWQgRFRPIGluZm8gbmVlZGVkIHRvIGJ1aWxkIGV4dGVybmFsIGRhdGEgcmVxdWVzdHMuXHJcbiAgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgcGFnaW5nOiBIY2lQYWdpbmdEdG8gPSBuZXcgSGNpUGFnaW5nRHRvKDAsIC0xKTtcclxuICBncm91cGluZzogSGNpR3JvdXBpbmdEdG8gPSBuZXcgSGNpR3JvdXBpbmdEdG8oW10pO1xyXG5cclxuICAvL2dsb2JhbFJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICBncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICBwYWdpbmdTdWJqZWN0OiBTdWJqZWN0PEhjaVBhZ2luZ0R0bz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVBhZ2luZ0R0bz4odGhpcy5wYWdpbmcpO1xyXG5cclxuICAvLyBBIGR1bW15IG51bWJlciB0aGF0IGluY3JlbWVudHMgYmFzZWQgb24gc2VsZWN0aW9uIGNoYW5nZXMuICBGb3JjZXMgcm91dGVyTGlua0FjdGl2ZSB0byByZWNoZWNrLlxyXG4gIHJvd1JlZnJlc2g6IG51bWJlciA9IDA7XHJcblxyXG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFzdFNjcm9sbFRvcDogbnVtYmVyID0gLTE7XHJcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gIHNldFNjcm9sbFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgbGFzdEV2ZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldENvbmZpZyh7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGlkIGZvciB0aGUgcm93IGdyb3VwIGJhc2VkIHVwb24gdGhlIGdyb3VwIGtleSBvciBpZiB1bmRlZmluZWQsIHRoZSBmaXJzdCByb3cncyBpZC4gIGUuZy4gXCJyb3ctZ3JvdXAtYm9iLXNtaXRoXCJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dHcm91cElkKHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAocm93R3JvdXAucmdLZXkpIHtcclxuICAgICAgcmV0dXJuIFwicm93LWdyb3VwLVwiICsgcm93R3JvdXAucmdLZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93SWQ6IHN0cmluZyA9IHRoaXMuZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKTtcclxuICAgICAgcmV0dXJuIHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwicm93LWdyb3VwLVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgcm93IGlkLiAgZS5nLiBcInJvdy0xXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3dJZCkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctXCIgKyA8c3RyaW5nPjxhbnk+cm93W3RoaXMucm93SWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwicm93LXVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gaW5pdCwgbGlzdGVuIGZvciBsb2FkaW5nIHN1YmplY3RzIGFuZCBsaXN0ZW4gZm9yIHBhZ2UgY2hhbmdlcy5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLnN1YnNjcmliZSgoYnVzeTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5zdWJzY3JpYmUoKHBhZ2luZzogSGNpUGFnaW5nRHRvKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xyXG4gICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXRzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXSkge1xyXG4gICAgICBsZXQgY2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSA8U2ltcGxlQ2hhbmdlPmNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXTtcclxuICAgICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjaGFuZ2UuY3VycmVudFZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIG9ubHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaXMgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgY2hlY2tJbml0aWFsaXplZCgpIHtcclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICAvL01heSBhcyB3ZWxsIG1ha2UgaXQgc3BpbiB3aGlsZSBwcm9jZXNzaW5nLCBhcyB3ZWxsIGFzIGxvYWRpbmcuIE90aGVyd2lzZSBpdCBsb29rcyBmcm96ZW5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0XHJcbiAgICAgICAgICAucGlwZShkZWxheSgwKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAvL05vdyBkb25lIGxvYWRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcG9uIG5ldyByb3dQYXJlbnQgYmVpbmcgc2V0LCBhZGQgYW55IGNsYXNzZXMgaWYgcm93Q2xhc3MgaXMgZGVmaW5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlMaXN0PEVsZW1lbnRSZWY+fSByb3dQYXJlbnRzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZHJlbihcInJvd1BhcmVudFwiLCB7cmVhZDogRWxlbWVudFJlZn0pIHNldCByb3dQYXJlbnRzKHJvd1BhcmVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPikge1xyXG4gICAgaWYgKHJvd1BhcmVudHMgJiYgdGhpcy5yb3dDbGFzcykge1xyXG4gICAgICByb3dQYXJlbnRzLmZvckVhY2goKGU6IEVsZW1lbnRSZWYpID0+IHtcclxuICAgICAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLnJvd0NsYXNzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBmb3IgKGxldCBjbGFzc05hbWUgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb3dSZWZyZXNoICs9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3N0SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudC5wb3N0SW5pdDogXCIgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nZXRQYXJlbnQoKSkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSA8U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ+dGhpcy5nZXRQYXJlbnQoKS5nZXRDb21wb25lbnRCeVR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50OiB1c2luZyBjb250cm9sbGVyXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuYWRkU2VhcmNoTGlzdCh0aGlzLnRpdGxlKTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5maWx0ZXJzU3ViamVjdC5zdWJzY3JpYmUoKGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNvcnRzU3ViamVjdC5zdWJzY3JpYmUoKHNvcnRzOiBIY2lTb3J0RHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gc29ydHM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmU6IFwiICsgdGhpcy50aXRsZSArIFwiLCBcIiArIHRpdGxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGl0bGUgJiYgdGl0bGUgJiYgdGhpcy50aXRsZSAhPT0gdGl0bGUpIHtcclxuICAgICAgICAgIHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIHJlc2V0IHBhZ2luZyBhbmQgZmlyZXNcclxuICAgKi9cclxuICByZXNldFBhZ2luZygpIHtcclxuICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5yb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGUgPSBjb25maWcucm91dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ0ZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdGaWVsZHMgPSBjb25maWcuZ3JvdXBpbmdGaWVsZHM7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY29uZmlnLmdyb3VwaW5nRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlU2l6ZShjb25maWcucGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cERpc3BsYXkgPSBjb25maWcuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY2xvc2VPdGhlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VPdGhlcnMgPSBjb25maWcuY2xvc2VPdGhlcnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gY29uZmlnLml0ZW1UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGNvbmZpZy5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBjb25maWcuZGF0YVN1YmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCA9IGNvbmZpZy5kYXRhQ2FsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlubGluZUV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFeHBhbmQgPSBjb25maWcuaW5saW5lRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDbGFzcyA9IGNvbmZpZy5ncm91cENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93Q2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93SWQpIHtcclxuICAgICAgICB0aGlzLnJvd0lkID0gY29uZmlnLnJvd0lkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayA9IGNvbmZpZy5vblJvd0NsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBjb25maWcubG9hZGluZ1N1YmplY3RzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBQYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IGNvbmZpZy5ncm91cFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMgPj0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cENhY2hlTnVtUGFnZXMgPSBjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJncm91cENhY2hlTnVtUGFnZXMgbXVzdCBiZSAyIG9yIG1vcmUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlID0gY29uZmlnLm9uR3JvdXBDbG9zZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1c3lJY29uKSB7XHJcbiAgICAgICAgdGhpcy5idXN5SWNvbiA9IGNvbmZpZy5idXN5SWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UmVzdWx0c0NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0c0NvdW50ID0gY29uZmlnLnNob3dSZXN1bHRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub25Hcm91cENsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Hcm91cENsaWNrID0gdGhpcy5kZWZhdWx0R3JvdXBDbGljaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayA9IHRoaXMuZGVmYXVsdFJvd0NsaWNrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiU2VhcmNoTGlzdENvbXBvbmVudDogQW4gaXRlbVRlbXBsYXRlIG11c3QgYmUgcHJvdmlkZWQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBbbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiBhbiBhcnJheSwgY2FsbHMgdGhlIGRhdGEgaWYgZXh0ZXJuYWwgY2FsbC5cclxuICAgKi9cclxuICBzZXREYXRhKGRhdGE/OiBPYmplY3RbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXREYXRhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKHRoaXMuZmlsdGVycywgdGhpcy5zb3J0cywgdGhpcy5wYWdpbmcsIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgYXJyYXkgdGhhdCB0aGUgaW50ZXJmYWNlIHVzZXMgdG8gcmVuZGVyIChyZWdhcmRsZXNzIG9mIHNvdXJjZSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaURhdGFEdG99IGV4dGVybmFsRGF0YVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlRGF0YShleHRlcm5hbERhdGE/OiBIY2lEYXRhRHRvKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdlbmVyYXRlRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhleHRlcm5hbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlcm5hbERhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoZXh0ZXJuYWxEYXRhLmdyaWREdG8ucGFnaW5nLmRhdGFTaXplKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXA7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm93R3JvdXAgPSBuZXcgUm93R3JvdXAodW5kZWZpbmVkLCB0aGlzLmJvdW5kRGF0YVtpXSwgKGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICYmIGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICE9PSBudWxsKSA/IGV4dGVybmFsRGF0YS5kYXRhQ291bnRzW2ldIDogMCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBncm91cGluZ0ZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2dyb3VwaW5nRmllbGRdID0gdGhpcy5ib3VuZERhdGFbaV1bZ3JvdXBpbmdGaWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYW5kIHBvcHVsYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMucG9wdWxhdGVGcm9tQm91bmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoT2JqZWN0LmFzc2lnbih7dHlwZTogXCJub25lXCJ9LCB0aGlzLmxhc3RFdmVudCwge1xyXG4gICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxyXG4gICAgICBuVmlld0RhdGE6IHRoaXMudmlld0RhdGEubGVuZ3RoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgdGhlIGRhdGEgaXMgYW4gYXJyYXkgKG5vdCBleHRlcm5hbCkuXHJcbiAgICovXHJcbiAgcG9wdWxhdGVGcm9tQm91bmREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJwb3B1bGF0ZUZyb21Cb3VuZERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYm91bmREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQm91bmQgRGF0YSBsZW5ndGggZm91bmQgYXMgMFwiKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0TnVtUGFnZXMoMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVwYXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgICBsZXQgcm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGxldCBkb1Jvd0dyb3VwaW5nOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBLZXkgPSAoZ3JvdXBLZXkpID8gZ3JvdXBLZXkgKyBcIjpcIiArIHJvd1tmaWVsZF0gOiByb3dbZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBpbmNsdWRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVycykge1xyXG5cclxuICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0RmllbGQoKS5pbmRleE9mKFwiIG9yIFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgbGV0IGlubmVySW5jbHVkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgZmlsdGVyLmdldEZpZWxkKCkuc3BsaXQoXCIgb3IgXCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gY2hlY2sgcm93W2ZpZWxkXSBpcyBhIG51bWJlciBhbmQgaWYgeWVzLCBza2lwIGFwcGx5aW5nIHRoZSB0b0xvd2VyQ2FzZSgpIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICAgIC8vICogdG8gY292ZXIgdGhlIGhhbmRsaW5nIG9mIHRoZSBzZWFyY2ggYnkgcGVyc29uIGlkIHNjZW5hcmlvIGZyb20gd2l0aGluIHRoZSBxdWljayBzZWFyY2ggZnVuY3Rpb25hbGl0eS5cclxuICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiB0eXBlb2Ygcm93W2ZpZWxkXSA9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSA9PSBmaWx0ZXIuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiBmaWx0ZXIuZ2V0VmFsdWUoKSAmJiAobmV3IERhdGUocm93W2ZpZWxkXSkpLmdldFRpbWUoKSA9PSAobmV3IERhdGUoZmlsdGVyLmdldFZhbHVlKCkpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHJvd1tmaWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci5nZXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlubmVySW5jbHVkZSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIudmFsaWQgfHwgIWZpbHRlci5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGZpbHRlci52YWxpZCB8fCBmaWx0ZXIuZ2V0VmFsdWUoKSkgJiYgKHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2gubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghcm93W2ZpbHRlci5maWVsZF0pIHtcclxuICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpbHRlci5maWVsZF0gaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgIGlmICgobmV3IERhdGUocm93W2ZpbHRlci5maWVsZF0pKS5nZXRUaW1lKCkgIT0gKG5ldyBEYXRlKGZpbHRlci5nZXRWYWx1ZSgpKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpbHRlci5maWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci5nZXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgcHJlcGFyZWREYXRhW3Jvd0dyb3VwTWFwLmdldChncm91cEtleSldLnJnUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd0dyb3VwTWFwLnNldChncm91cEtleSwgcHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cCA9IG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KTtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2ZpZWxkXSA9IHJvd1tmaWVsZF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmVwYXJlZERhdGEucHVzaChuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3RoaXMuZ2xvYmFsUm93R3JvdXBNYXAgPSByb3dHcm91cE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHByZXBhcmVkRGF0YS5zb3J0KChhOiBSb3dHcm91cCwgYjogUm93R3JvdXApID0+IHtcclxuICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCByb3dHcm91cCBvZiBwcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBwcmVwYXJlZERhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkgPiAwKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucGFnaW5nLmdldFBhZ2UoKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCk7IGkgPCBNYXRoLm1pbihwcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHByZXBhcmVkRGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gcHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRHcm91cERpc3BsYXkocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGxldCBkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKHRoaXMuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgIGRpc3BsYXkgPSB0aGlzLmdyb3VwRGlzcGxheTtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheS5yZXBsYWNlKGZpZWxkLCByb3dHcm91cFtmaWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSAoZGlzcGxheSkgPyBkaXNwbGF5ICsgXCIsIFwiICsgcm93R3JvdXBbZmllbGRdIDogcm93R3JvdXBbZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwic2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclwiLCB7XHJcbiAgICByZWFkOiBFbGVtZW50UmVmLFxyXG4gICAgc3RhdGljOiBmYWxzZVxyXG4gIH0pIHNldCBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyU2V0dGVyKHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWYpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgdGhpcy5zZXRTY3JvbGxUb3ApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjaW5uZXJSb3dHcm91cENvbnRhaW5lclwiKSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyICYmIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5jbG9zZXN0KFwiLmdyb3VwLXNlbGVjdGVkLXBhcmVudFwiKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShncm91cFNlbGVjdGVkUGFyZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgICB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcImhlaWdodFwiLCB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciwgXCJtaW4taGVpZ2h0XCIsICh0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMzApICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gY29udHJvbCBkZXNlbGVjdGlvbi5cclxuICAgKi9cclxuICBkZXNlbGVjdEFsbFJvd3MoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdy1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSBncm91cCBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgbGV0IGVzOiBIVE1MRWxlbWVudFtdID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gc2VsZWN0IGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgYWN0aXZhdGVSb3dCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlR3JvdXBCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LWdyb3VwLVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkXHJcbiAgICogQHBhcmFtIHJvd0dyb3VwXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBFeHBhbmRlZEluZGljYXRvcihyb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBcIm1pbnVzXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJwbHVzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RPRG8gOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdXNlcyBhIGN1c3RvbSBncm91cFRlbXBsYXRlXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIFNlYXJjaExpc3RDb21wb25lbnQgdG8gbmF2aWdhdGUgdG8gYSBwYWdlIGFuZCBoaWdobGlnaHQgdGhlIGdpdmVuIGdyb3VwIGl0ZW0sIG9yXHJcbiAgICogdGhlIHJvdyAoaW4tY2FzZSBvZiBub24tZ3JvdXBlZCBsaXN0KVxyXG4gICAqIFRoaXNcclxuICAgKiBAcGFyYW0gZ3JvdXBJZCA6IFRoaXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGdyb3VwLWRpc3BsYXlcclxuICAgKiBAcGFyYW0gcm93SWQgOiBUaGlzIGlzIHRoZSBhY3R1YWwgcm93SWQgZm9yIHRoZSByb3cgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgbmF2aWdhdGVUb1BhZ2VDb250YWluaW5nRWxlbWVudChncm91cElkOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL0ludHJvZHVjaW5nIHRoZSBhZGRpdGlvbmFsIGNoZWNrIGJlbG93IHRvIGFkZHJlc3MgQ0NSVUktMTE2My5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEgfHwgdGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGdyb3VwZWRcclxuICAgIGxldCByb3dHcm91cGVkOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAocm93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWREYXRhU2V0LmZvckVhY2goKHJvd0dyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBncm91cERpc3BsYXkgPSB0aGlzLmdldEdyb3VwRGlzcGxheShyb3dHcm91cCk7XHJcbiAgICAgICAgaWYgKGdyb3VwRGlzcGxheS5pbmNsdWRlcyhncm91cElkKSkge1xyXG4gICAgICAgICAgLy9TZXQgdGhlIHBhZ2UgdG8gdGhlIGluZGV4XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgICAgICBsZXQgcGFnZSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxID49IHBhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICAgICAgICAvL3RoaXMuZGVmYXVsdEdyb3VwQ2xpY2sobnVsbCwgdGhpcywgcm93R3JvdXApO1xyXG4gICAgICAgICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0QWxsUm93cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Um93SWQocm93KSA9PT0gcm93SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc3VsdE1lc3NhZ2UoZGF0YTogT2JqZWN0W10pIHtcclxuICAgIGlmICh0aGlzLnNob3dSZXN1bHRzQ291bnQgJiYgZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gZGF0YS5sZW5ndGggKyBcIiByZXN1bHQocylcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1486
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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RUFBRTt3QkFDekMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQXVKa0QsVUFBVTtzQkFBNUQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQXl6QnRDLCtCQUErQjtzQkFIckMsU0FBUzt1QkFBQywyQkFBMkIsRUFBRTt3QkFDdEMsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxLQUFLO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIGlzRGV2TW9kZSxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2UsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtkZWxheSwgZmluYWxpemV9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge05nYkRyb3Bkb3dufSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7SGNpRGF0YUR0bywgSGNpRmlsdGVyRHRvLCBIY2lHcmlkRHRvLCBIY2lHcm91cGluZ0R0bywgSGNpUGFnaW5nRHRvLCBIY2lTb3J0RHRvfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaGNpLW5nLWdyaWQtZHRvXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSBcIi4uL25hdi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1Jvd0dyb3VwfSBmcm9tIFwiLi9yb3ctZ3JvdXBcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uR2xvYmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24tZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudH0gZnJvbSBcIi4vc2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBjYW4gYmUgZ3JvdXBlZCBvciBub3QgZ3JvdXBlZC4gIFRoZSBkYXRhIGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSBhbiBhcnJheSwgb3IgZnJvbSBhbiBleHRlcm5hbFxyXG4gKiBkYXRhIGNhbGwgdXNpbmcganBhLXNlcnZpY2VzLlxyXG4gKi9cclxuQENvbXBvbmVudFR5cGUoXCJTZWFyY2hMaXN0Q29tcG9uZW50XCIpXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXNlYXJjaC1saXN0XCIsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgYFxyXG4gICAgICAgIC5yZXN1bHRzLWNvdW50IHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdyZXl3YXJtLW1lZGRhcmspO1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNy4zcHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybWF0LWJvdHRvbS1wYWRkaW5nIHtcclxuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddOm50aC1jaGlsZChldmVuKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZS1tZWRpdW0pICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ10ge1xyXG4gICAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXYucm93LXBhcmVudC5hY3RpdmUge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkLWxpZ2h0ZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLnJpLXNpZGViYXItY2VsbCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgYFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCIgW25nQ2xhc3NdPVwieyAnZm9ybWF0LWJvdHRvbS1wYWRkaW5nJzogdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID09PSAnJyB9XCI+XHJcbiAgICAgICAgICB7eyB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzY3JvbGxhYmxlXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcHMtM1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInJlc3VsdC1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbY2xhc3MueS1oaWRkZW5dPVwic2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiIHBhcmVudFNlbGVjdG9yPVwiLnNjcm9sbGFibGVcIiBbaWNvbl09XCJidXN5SWNvblwiPjwvaGNpLWJ1c3k+XHJcbiAgICAgICAgICAgICAgPCEtLSBObyBncm91cGluZyAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nLmZpZWxkcyB8fCBncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggaW5saW5lIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmICFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChyb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIHt7Z3JvdXBDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIHNlcGFyYXRlIGluZGl2aWR1YWwgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JvdXBTZWxlY3RlZFBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1zZWxlY3RlZC1wYXJlbnQgZmxleC1jb2x1bW4ge3tncm91cENsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQoc2VsZWN0ZWRSb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgc2VsZWN0ZWRSb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHNlbGVjdGVkUm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGlkPVwic2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4geS1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFBhZ2luZyBmb290ZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2luZy5wYWdlU2l6ZSA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluay0wIHBhZ2luZy1mb290ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHMtMyBwZS0zXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMXJlbTsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VGaXJzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VQcmV2aW91cygpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPnt7cGFnaW5nLnBhZ2UgKyAxfX0gb2Yge3twYWdpbmcubnVtUGFnZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VOZXh0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTGFzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImQtZmxleCBtZS0xXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlOyBlbHNlIHBsdXNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXNUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgKHt7cm93R3JvdXAucmdDb3VudH19KVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYW4gaW5kaXZpZHVhbCBzZWxlY3RlZCBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sZXZlbC11cC1hbHRcIiBkYXRhLWZhLXRyYW5zZm9ybT1cImZsaXAtaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAvLyBUaGUgZGF0YSB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxyXG4gIHZpZXdEYXRhOiBSb3dHcm91cFtdO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXI6IFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFcIikgYm91bmREYXRhOiBPYmplY3RbXTtcclxuXHJcbiAgLy8gQSBzdWJqZWN0IHRoYXQgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFTdWJqZWN0XCIpIGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JqZWN0W10+O1xyXG5cclxuICAvLyBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGluIGEgSGNpR3JpZER0byBhbmQgcmV0dXJucyBhIEhjaURhdGFEdG8gd2hpY2ggd3JhcHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhQ2FsbFwiKSBleHRlcm5hbERhdGFDYWxsOiAoZHRvOiBIY2lHcmlkRHRvKSA9PiBPYnNlcnZhYmxlPEhjaURhdGFEdG8+O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBzdWJqZWN0cyB3aXRoIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmdTdWJqZWN0czogU3ViamVjdDxib29sZWFuPltdO1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuW10gPSBbZmFsc2VdO1xyXG5cclxuICAvLyBJZiBjbGlja2luZyBhIHJvdyBjaGFuZ2VzIGEgcm91dGUsIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSByb3V0ZSB0byB1c2UuXHJcbiAgQElucHV0KCkgcm91dGU6IChyb3dHcm91cDogYW55LCByb3c6IGFueSkgPT4gYW55W107XHJcblxyXG4gIC8vIEV4cGFuZCB0aGUgc2VsZWN0ZWQgcm93IGdyb3VwIGFzIGl0cyBvd24gc2NyZWVuLCBvciBzaG93IHJvd3MgdW5kZXIgc2VsZWN0ZWQgcm93IGdyb3VwcyBpbiB0aGUgc2FtZSB2aWV3LlxyXG4gIEBJbnB1dCgpIGlubGluZUV4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXRob3V0IGFueSBvdGhlciBtZXRhZGF0YSBmb3Igd2hhdCBhIHJvdyBpcywgcHJvdmlkZSB0aGUgZmllbGQgdG8gYmUgdXNlZCBmb3IgdGhlIGlkLlxyXG4gIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGZpZWxkIHRoYXQgaGFzIHRoZSAoZGVmaW5lZCkgcm93SWQgLS0gd2hhdGV2ZXIgaXQgaXMgdW5kZXIgZGlmZmVyZW50XHJcbiAgLy8gc3RydWN0dXJlczogaWRQYXRpZW50LCBpZE1lZGljYWxFdmVudCBldGNcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IGdyb3VwIHBhcmVudC5cclxuICBASW5wdXQoKSBncm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IHBhcmVudC5cclxuICBASW5wdXQoKSByb3dDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQSB0ZW1wbGF0ZSBmb3IgaG93IHRvIGRpc3BsYXkgcm93IGdyb3VwIGluZm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuICBlLmcuIFwibGFzdE5hbWUsIGZpcnN0TmFtZVwiIGZpZWxkIG5hbWVzIGdldCByZXBsYWNlZCB3aXRoIHZhbHVlcy5cclxuICBASW5wdXQoKSBncm91cERpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnRcclxuICBASW5wdXQoKSBjbG9zZU90aGVyczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRoZSBsaXN0IG9mIGZpZWxkcyB0byBncm91cCBieS5cclxuICBASW5wdXQoKSBncm91cGluZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnQgaWYgd2Ugd2FudCB1c2VycyB0byBiZSBhYmxlIHRvIGNvbnRyb2wgZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgZ3JvdXBCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93IGdyb3VwcyBvciByb3dzIGlmIG5vIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93cyBpbiBhIHNlbGVjdGVkIGdyb3VwLlxyXG4gIEBJbnB1dCgpIGdyb3VwUGFnZVNpemU6IG51bWJlciA9IDUwO1xyXG5cclxuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIG9mIHJvd3MgdG8gY2FjaGUgaW50ZXJuYWxseSBiZWZvcmUgYW4gZXh0ZXJuYWwgY2FsbCBpcyBtYWRlLlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2FjaGVOdW1QYWdlczogbnVtYmVyO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byBhIHBhcmVudCBkcm9wZG93biBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgLy9XaGljaCBpY29uIHRvIHVzZSBmb3IgdGhlIGJ1c3kgc3Bpbm5lclxyXG4gIEBJbnB1dCgpIGJ1c3lJY29uOiBzdHJpbmcgPSBcImhjaSBmYS1jb3JlIGZhLXNwaW5cIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiBubyBvbkdyb3VwQ2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdEdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHtcclxuICAgIGNtcHQuc2V0R3JvdXBFeHBhbmRlZChldmVudCwgcm93R3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQ7XHJcblxyXG4gIC8vIElmIG5vIG9uUm93Q2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdFJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93O1xyXG5cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93OiByb3csXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICBASW5wdXQoKSBvblJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGdyb3VwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwVGVtcGxhdGVcIiwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZWZhdWx0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZVwiLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICAgIHN0YXRpYzogdHJ1ZVxyXG4gIH0pIGRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHNlbGVjdGVkUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cDogUm93R3JvdXA7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgaW5uZXJSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIEdyaWQgRFRPIGluZm8gbmVlZGVkIHRvIGJ1aWxkIGV4dGVybmFsIGRhdGEgcmVxdWVzdHMuXHJcbiAgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgcGFnaW5nOiBIY2lQYWdpbmdEdG8gPSBuZXcgSGNpUGFnaW5nRHRvKDAsIC0xKTtcclxuICBncm91cGluZzogSGNpR3JvdXBpbmdEdG8gPSBuZXcgSGNpR3JvdXBpbmdEdG8oW10pO1xyXG5cclxuICAvL2dsb2JhbFJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICBncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICBwYWdpbmdTdWJqZWN0OiBTdWJqZWN0PEhjaVBhZ2luZ0R0bz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVBhZ2luZ0R0bz4odGhpcy5wYWdpbmcpO1xyXG5cclxuICAvLyBBIGR1bW15IG51bWJlciB0aGF0IGluY3JlbWVudHMgYmFzZWQgb24gc2VsZWN0aW9uIGNoYW5nZXMuICBGb3JjZXMgcm91dGVyTGlua0FjdGl2ZSB0byByZWNoZWNrLlxyXG4gIHJvd1JlZnJlc2g6IG51bWJlciA9IDA7XHJcblxyXG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFzdFNjcm9sbFRvcDogbnVtYmVyID0gLTE7XHJcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gIHNldFNjcm9sbFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgbGFzdEV2ZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldENvbmZpZyh7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGlkIGZvciB0aGUgcm93IGdyb3VwIGJhc2VkIHVwb24gdGhlIGdyb3VwIGtleSBvciBpZiB1bmRlZmluZWQsIHRoZSBmaXJzdCByb3cncyBpZC4gIGUuZy4gXCJyb3ctZ3JvdXAtYm9iLXNtaXRoXCJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dHcm91cElkKHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAocm93R3JvdXAucmdLZXkpIHtcclxuICAgICAgcmV0dXJuIFwicm93LWdyb3VwLVwiICsgcm93R3JvdXAucmdLZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93SWQ6IHN0cmluZyA9IHRoaXMuZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKTtcclxuICAgICAgcmV0dXJuIHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwicm93LWdyb3VwLVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgcm93IGlkLiAgZS5nLiBcInJvdy0xXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3dJZCkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctXCIgKyA8c3RyaW5nPjxhbnk+cm93W3RoaXMucm93SWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwicm93LXVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gaW5pdCwgbGlzdGVuIGZvciBsb2FkaW5nIHN1YmplY3RzIGFuZCBsaXN0ZW4gZm9yIHBhZ2UgY2hhbmdlcy5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLnN1YnNjcmliZSgoYnVzeTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5zdWJzY3JpYmUoKHBhZ2luZzogSGNpUGFnaW5nRHRvKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xyXG4gICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXRzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXSkge1xyXG4gICAgICBsZXQgY2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSA8U2ltcGxlQ2hhbmdlPmNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXTtcclxuICAgICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjaGFuZ2UuY3VycmVudFZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIG9ubHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaXMgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgY2hlY2tJbml0aWFsaXplZCgpIHtcclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICAvL01heSBhcyB3ZWxsIG1ha2UgaXQgc3BpbiB3aGlsZSBwcm9jZXNzaW5nLCBhcyB3ZWxsIGFzIGxvYWRpbmcuIE90aGVyd2lzZSBpdCBsb29rcyBmcm96ZW5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0XHJcbiAgICAgICAgICAucGlwZShkZWxheSgwKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAvL05vdyBkb25lIGxvYWRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcG9uIG5ldyByb3dQYXJlbnQgYmVpbmcgc2V0LCBhZGQgYW55IGNsYXNzZXMgaWYgcm93Q2xhc3MgaXMgZGVmaW5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlMaXN0PEVsZW1lbnRSZWY+fSByb3dQYXJlbnRzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZHJlbihcInJvd1BhcmVudFwiLCB7cmVhZDogRWxlbWVudFJlZn0pIHNldCByb3dQYXJlbnRzKHJvd1BhcmVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPikge1xyXG4gICAgaWYgKHJvd1BhcmVudHMgJiYgdGhpcy5yb3dDbGFzcykge1xyXG4gICAgICByb3dQYXJlbnRzLmZvckVhY2goKGU6IEVsZW1lbnRSZWYpID0+IHtcclxuICAgICAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLnJvd0NsYXNzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBmb3IgKGxldCBjbGFzc05hbWUgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb3dSZWZyZXNoICs9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3N0SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudC5wb3N0SW5pdDogXCIgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nZXRQYXJlbnQoKSkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSA8U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ+dGhpcy5nZXRQYXJlbnQoKS5nZXRDb21wb25lbnRCeVR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50OiB1c2luZyBjb250cm9sbGVyXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuYWRkU2VhcmNoTGlzdCh0aGlzLnRpdGxlKTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5maWx0ZXJzU3ViamVjdC5zdWJzY3JpYmUoKGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNvcnRzU3ViamVjdC5zdWJzY3JpYmUoKHNvcnRzOiBIY2lTb3J0RHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gc29ydHM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmU6IFwiICsgdGhpcy50aXRsZSArIFwiLCBcIiArIHRpdGxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGl0bGUgJiYgdGl0bGUgJiYgdGhpcy50aXRsZSAhPT0gdGl0bGUpIHtcclxuICAgICAgICAgIHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIHJlc2V0IHBhZ2luZyBhbmQgZmlyZXNcclxuICAgKi9cclxuICByZXNldFBhZ2luZygpIHtcclxuICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5yb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGUgPSBjb25maWcucm91dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ0ZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdGaWVsZHMgPSBjb25maWcuZ3JvdXBpbmdGaWVsZHM7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY29uZmlnLmdyb3VwaW5nRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlU2l6ZShjb25maWcucGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cERpc3BsYXkgPSBjb25maWcuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY2xvc2VPdGhlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VPdGhlcnMgPSBjb25maWcuY2xvc2VPdGhlcnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gY29uZmlnLml0ZW1UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGNvbmZpZy5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBjb25maWcuZGF0YVN1YmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCA9IGNvbmZpZy5kYXRhQ2FsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlubGluZUV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFeHBhbmQgPSBjb25maWcuaW5saW5lRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDbGFzcyA9IGNvbmZpZy5ncm91cENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93Q2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93SWQpIHtcclxuICAgICAgICB0aGlzLnJvd0lkID0gY29uZmlnLnJvd0lkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayA9IGNvbmZpZy5vblJvd0NsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBjb25maWcubG9hZGluZ1N1YmplY3RzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBQYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IGNvbmZpZy5ncm91cFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMgPj0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cENhY2hlTnVtUGFnZXMgPSBjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJncm91cENhY2hlTnVtUGFnZXMgbXVzdCBiZSAyIG9yIG1vcmUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlID0gY29uZmlnLm9uR3JvdXBDbG9zZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1c3lJY29uKSB7XHJcbiAgICAgICAgdGhpcy5idXN5SWNvbiA9IGNvbmZpZy5idXN5SWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UmVzdWx0c0NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0c0NvdW50ID0gY29uZmlnLnNob3dSZXN1bHRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub25Hcm91cENsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Hcm91cENsaWNrID0gdGhpcy5kZWZhdWx0R3JvdXBDbGljaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayA9IHRoaXMuZGVmYXVsdFJvd0NsaWNrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiU2VhcmNoTGlzdENvbXBvbmVudDogQW4gaXRlbVRlbXBsYXRlIG11c3QgYmUgcHJvdmlkZWQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBbbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiBhbiBhcnJheSwgY2FsbHMgdGhlIGRhdGEgaWYgZXh0ZXJuYWwgY2FsbC5cclxuICAgKi9cclxuICBzZXREYXRhKGRhdGE/OiBPYmplY3RbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXREYXRhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKHRoaXMuZmlsdGVycywgdGhpcy5zb3J0cywgdGhpcy5wYWdpbmcsIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgYXJyYXkgdGhhdCB0aGUgaW50ZXJmYWNlIHVzZXMgdG8gcmVuZGVyIChyZWdhcmRsZXNzIG9mIHNvdXJjZSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaURhdGFEdG99IGV4dGVybmFsRGF0YVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlRGF0YShleHRlcm5hbERhdGE/OiBIY2lEYXRhRHRvKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdlbmVyYXRlRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhleHRlcm5hbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlcm5hbERhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoZXh0ZXJuYWxEYXRhLmdyaWREdG8ucGFnaW5nLmRhdGFTaXplKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXA7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm93R3JvdXAgPSBuZXcgUm93R3JvdXAodW5kZWZpbmVkLCB0aGlzLmJvdW5kRGF0YVtpXSwgKGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICYmIGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICE9PSBudWxsKSA/IGV4dGVybmFsRGF0YS5kYXRhQ291bnRzW2ldIDogMCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBncm91cGluZ0ZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2dyb3VwaW5nRmllbGRdID0gdGhpcy5ib3VuZERhdGFbaV1bZ3JvdXBpbmdGaWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYW5kIHBvcHVsYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMucG9wdWxhdGVGcm9tQm91bmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoT2JqZWN0LmFzc2lnbih7dHlwZTogXCJub25lXCJ9LCB0aGlzLmxhc3RFdmVudCwge1xyXG4gICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxyXG4gICAgICBuVmlld0RhdGE6IHRoaXMudmlld0RhdGEubGVuZ3RoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgdGhlIGRhdGEgaXMgYW4gYXJyYXkgKG5vdCBleHRlcm5hbCkuXHJcbiAgICovXHJcbiAgcG9wdWxhdGVGcm9tQm91bmREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJwb3B1bGF0ZUZyb21Cb3VuZERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYm91bmREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQm91bmQgRGF0YSBsZW5ndGggZm91bmQgYXMgMFwiKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0TnVtUGFnZXMoMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVwYXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgICBsZXQgcm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGxldCBkb1Jvd0dyb3VwaW5nOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBLZXkgPSAoZ3JvdXBLZXkpID8gZ3JvdXBLZXkgKyBcIjpcIiArIHJvd1tmaWVsZF0gOiByb3dbZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBpbmNsdWRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVycykge1xyXG5cclxuICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0RmllbGQoKS5pbmRleE9mKFwiIG9yIFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgbGV0IGlubmVySW5jbHVkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgZmlsdGVyLmdldEZpZWxkKCkuc3BsaXQoXCIgb3IgXCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gY2hlY2sgcm93W2ZpZWxkXSBpcyBhIG51bWJlciBhbmQgaWYgeWVzLCBza2lwIGFwcGx5aW5nIHRoZSB0b0xvd2VyQ2FzZSgpIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICAgIC8vICogdG8gY292ZXIgdGhlIGhhbmRsaW5nIG9mIHRoZSBzZWFyY2ggYnkgcGVyc29uIGlkIHNjZW5hcmlvIGZyb20gd2l0aGluIHRoZSBxdWljayBzZWFyY2ggZnVuY3Rpb25hbGl0eS5cclxuICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiB0eXBlb2Ygcm93W2ZpZWxkXSA9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSA9PSBmaWx0ZXIuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiBmaWx0ZXIuZ2V0VmFsdWUoKSAmJiAobmV3IERhdGUocm93W2ZpZWxkXSkpLmdldFRpbWUoKSA9PSAobmV3IERhdGUoZmlsdGVyLmdldFZhbHVlKCkpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHJvd1tmaWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci5nZXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlubmVySW5jbHVkZSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIudmFsaWQgfHwgIWZpbHRlci5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGZpbHRlci52YWxpZCB8fCBmaWx0ZXIuZ2V0VmFsdWUoKSkgJiYgKHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2gubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghcm93W2ZpbHRlci5maWVsZF0pIHtcclxuICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpbHRlci5maWVsZF0gaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgIGlmICgobmV3IERhdGUocm93W2ZpbHRlci5maWVsZF0pKS5nZXRUaW1lKCkgIT0gKG5ldyBEYXRlKGZpbHRlci5nZXRWYWx1ZSgpKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpbHRlci5maWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci5nZXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgcHJlcGFyZWREYXRhW3Jvd0dyb3VwTWFwLmdldChncm91cEtleSldLnJnUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd0dyb3VwTWFwLnNldChncm91cEtleSwgcHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cCA9IG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KTtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2ZpZWxkXSA9IHJvd1tmaWVsZF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmVwYXJlZERhdGEucHVzaChuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3RoaXMuZ2xvYmFsUm93R3JvdXBNYXAgPSByb3dHcm91cE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHByZXBhcmVkRGF0YS5zb3J0KChhOiBSb3dHcm91cCwgYjogUm93R3JvdXApID0+IHtcclxuICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCByb3dHcm91cCBvZiBwcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBwcmVwYXJlZERhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkgPiAwKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucGFnaW5nLmdldFBhZ2UoKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCk7IGkgPCBNYXRoLm1pbihwcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHByZXBhcmVkRGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gcHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRHcm91cERpc3BsYXkocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGxldCBkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKHRoaXMuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgIGRpc3BsYXkgPSB0aGlzLmdyb3VwRGlzcGxheTtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheS5yZXBsYWNlKGZpZWxkLCByb3dHcm91cFtmaWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSAoZGlzcGxheSkgPyBkaXNwbGF5ICsgXCIsIFwiICsgcm93R3JvdXBbZmllbGRdIDogcm93R3JvdXBbZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwic2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclwiLCB7XHJcbiAgICByZWFkOiBFbGVtZW50UmVmLFxyXG4gICAgc3RhdGljOiBmYWxzZVxyXG4gIH0pIHNldCBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyU2V0dGVyKHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWYpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgdGhpcy5zZXRTY3JvbGxUb3ApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjaW5uZXJSb3dHcm91cENvbnRhaW5lclwiKSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyICYmIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5jbG9zZXN0KFwiLmdyb3VwLXNlbGVjdGVkLXBhcmVudFwiKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShncm91cFNlbGVjdGVkUGFyZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgICB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcImhlaWdodFwiLCB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciwgXCJtaW4taGVpZ2h0XCIsICh0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMzApICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gY29udHJvbCBkZXNlbGVjdGlvbi5cclxuICAgKi9cclxuICBkZXNlbGVjdEFsbFJvd3MoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdy1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSBncm91cCBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgbGV0IGVzOiBIVE1MRWxlbWVudFtdID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gc2VsZWN0IGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgYWN0aXZhdGVSb3dCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlR3JvdXBCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LWdyb3VwLVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkXHJcbiAgICogQHBhcmFtIHJvd0dyb3VwXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBFeHBhbmRlZEluZGljYXRvcihyb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBcIm1pbnVzXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJwbHVzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RPRG8gOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdXNlcyBhIGN1c3RvbSBncm91cFRlbXBsYXRlXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIFNlYXJjaExpc3RDb21wb25lbnQgdG8gbmF2aWdhdGUgdG8gYSBwYWdlIGFuZCBoaWdobGlnaHQgdGhlIGdpdmVuIGdyb3VwIGl0ZW0sIG9yXHJcbiAgICogdGhlIHJvdyAoaW4tY2FzZSBvZiBub24tZ3JvdXBlZCBsaXN0KVxyXG4gICAqIFRoaXNcclxuICAgKiBAcGFyYW0gZ3JvdXBJZCA6IFRoaXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGdyb3VwLWRpc3BsYXlcclxuICAgKiBAcGFyYW0gcm93SWQgOiBUaGlzIGlzIHRoZSBhY3R1YWwgcm93SWQgZm9yIHRoZSByb3cgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgbmF2aWdhdGVUb1BhZ2VDb250YWluaW5nRWxlbWVudChncm91cElkOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL0ludHJvZHVjaW5nIHRoZSBhZGRpdGlvbmFsIGNoZWNrIGJlbG93IHRvIGFkZHJlc3MgQ0NSVUktMTE2My5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEgfHwgdGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGdyb3VwZWRcclxuICAgIGxldCByb3dHcm91cGVkOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAocm93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWREYXRhU2V0LmZvckVhY2goKHJvd0dyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBncm91cERpc3BsYXkgPSB0aGlzLmdldEdyb3VwRGlzcGxheShyb3dHcm91cCk7XHJcbiAgICAgICAgaWYgKGdyb3VwRGlzcGxheS5pbmNsdWRlcyhncm91cElkKSkge1xyXG4gICAgICAgICAgLy9TZXQgdGhlIHBhZ2UgdG8gdGhlIGluZGV4XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgICAgICBsZXQgcGFnZSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxID49IHBhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICAgICAgICAvL3RoaXMuZGVmYXVsdEdyb3VwQ2xpY2sobnVsbCwgdGhpcywgcm93R3JvdXApO1xyXG4gICAgICAgICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0QWxsUm93cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Um93SWQocm93KSA9PT0gcm93SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc3VsdE1lc3NhZ2UoZGF0YTogT2JqZWN0W10pIHtcclxuICAgIGlmICh0aGlzLnNob3dSZXN1bHRzQ291bnQgJiYgZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gZGF0YS5sZW5ndGggKyBcIiByZXN1bHQocylcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|