@colijnit/homedecorator 255.1.4 → 255.1.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/app/core/enum/message-type.enum.d.ts +3 -1
- package/app/core/interface/message-with-payload.interface.d.ts +6 -0
- package/app/core/model/homedecorator-settings-options.d.ts +2 -0
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
- package/app/core/service/homedecorator-connector.service.d.ts +5 -4
- package/app/core/service/homedecorator-settings.service.d.ts +2 -1
- package/app/core/service/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
- package/app/plugins/core3d/service/scene.service.d.ts +1 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
- package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
- package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
- package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
- package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
- package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
- package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
- package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
- package/assets/icons/dash-button.svg +7 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/retry-button.svg +7 -0
- package/bundles/colijnit-homedecorator.umd.js +822 -601
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/message-type.enum.js +3 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
- package/esm2015/app/core/service/3dm-api.js +4 -4
- package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
- package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
- package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
- package/esm2015/app/core/service/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +26 -19
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/factory.js +3 -2
- package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
- package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
- package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
- package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
- package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
- package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
- package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
- package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
- package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
- package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
- package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +1656 -1322
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
|
@@ -338,7 +338,6 @@ export class SceneEventService {
|
|
|
338
338
|
const distance = this._camera.position.distanceTo(point);
|
|
339
339
|
this._hudService.exploreFloorHover(this._mousePosition, point, distance);
|
|
340
340
|
if (!this._mouseMoved) {
|
|
341
|
-
yield this._hudService.confirmExplore();
|
|
342
341
|
yield this._cameraService.controls.animateMoveTo(point);
|
|
343
342
|
this._updateExplorePoint();
|
|
344
343
|
}
|
|
@@ -834,12 +833,20 @@ export class SceneEventService {
|
|
|
834
833
|
}
|
|
835
834
|
}
|
|
836
835
|
_addToItemGroup(object, prevSelectedObject) {
|
|
837
|
-
|
|
838
|
-
if (
|
|
839
|
-
|
|
840
|
-
|
|
836
|
+
let isIntersectWithGroupMember;
|
|
837
|
+
if (object && object.parent !== null) {
|
|
838
|
+
isIntersectWithGroupMember = object instanceof ItemGroup || object.parent instanceof ItemGroup;
|
|
839
|
+
}
|
|
840
|
+
else {
|
|
841
|
+
isIntersectWithGroupMember = object instanceof ItemGroup;
|
|
842
|
+
}
|
|
843
|
+
if (object && object.configuring !== null) {
|
|
844
|
+
if (!isIntersectWithGroupMember && !object.configuring && this._canGroupItems(object, prevSelectedObject)) {
|
|
845
|
+
if (prevSelectedObject) {
|
|
846
|
+
this._itemGroupService.addIfNotExist(prevSelectedObject);
|
|
847
|
+
}
|
|
848
|
+
this._itemGroupService.addOrRemoveIfExist(object);
|
|
841
849
|
}
|
|
842
|
-
this._itemGroupService.addOrRemoveIfExist(object);
|
|
843
850
|
}
|
|
844
851
|
}
|
|
845
852
|
_canGroupFloorItem(item) {
|
|
@@ -997,4 +1004,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
997
1004
|
providedIn: 'root'
|
|
998
1005
|
}]
|
|
999
1006
|
}], ctorParameters: function () { return [{ type: i1.HudService }, { type: i2.MessageBusService }, { type: i3.SceneService }, { type: i4.DragAndDropService }, { type: i5.RotationService }, { type: i6.CameraService }, { type: i7.RoomService }, { type: i8.FloorService }, { type: i9.IntersectionService }, { type: i10.ViewModeService }, { type: i11.ItemGroupService }, { type: i12.ItemService }, { type: i13.HomedecoratorAppService }, { type: i14.HomedecoratorAppEventService }]; } });
|
|
1000
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2Uvc2NlbmUtZXZlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUF1QyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUkxRCxPQUFPLEVBQWEsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBVy9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNJLE9BQU8s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LElBQVU7UUFDOUQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLFlBQVksU0FBUyxFQUFFO1lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDM0I7YUFBTTtZQUNMLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBd0I7UUFDakQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLFlBQVksU0FBUyxFQUFFO1lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNMLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7OytHQWhpQ1UsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge0NhbWVyYSwgSW50ZXJzZWN0aW9uLCBNZXNoLCBPYmplY3QzRCwgVmVjdG9yMiwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1NjZW5lRXZlbnRTdGF0ZX0gZnJvbSAnLi4vbW9kZWwvc2NlbmUtZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi9odWQuc2VydmljZSc7XHJcbmltcG9ydCB7RHJhZ0FuZERyb3BTZXJ2aWNlfSBmcm9tICcuL2RyYWctYW5kLWRyb3Auc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtmcm9tRXZlbnR9IGZyb20gJ3J4anMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGVsYXksIGZpbHRlciwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7b2Z9IGZyb20gJ3J4anMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZic7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Um90YXRpb25TZXJ2aWNlfSBmcm9tICcuL3JvdGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yU2VydmljZX0gZnJvbSAnLi9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJbnRlcnNlY3Rpb25TZXJ2aWNlfSBmcm9tICcuL2ludGVyc2VjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwU2VydmljZX0gZnJvbSAnLi9pdGVtLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtSZWxhdGl2ZVBvc2l0aW9uVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvcmVsYXRpdmUtcG9zaXRpb24udXRpbHMnO1xyXG5pbXBvcnQge0N1c3RvbVdhbGxGbG9vckl0ZW19IGZyb20gJy4uL2l0ZW1zL2N1c3RvbS13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW1Hcm91cH0gZnJvbSAnLi4vaXRlbXMvaXRlbS1ncm91cCc7XHJcbmltcG9ydCB7aXNGbG9vckRlY29yYXRpb24sIGlzRmxvb3JUeXBlLCBpc0Z1cm5pdHVyZVR5cGUsIGlzSW5XYWxsVHlwZSwgaXNPbkZsb29yVHlwZSwgaXNXYWxsRmxvb3JUeXBlLCBpc1dhbGxUeXBlfSBmcm9tICcuLi9pdGVtcy9mYWN0b3J5JztcclxuaW1wb3J0IHtJbldhbGxJdGVtLCBXYWxsSXRlbX0gZnJvbSAnLi4vaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtDdXN0b21NZXNofSBmcm9tICcuLi9pdGVtcy9jdXN0b20tb2JqZWN0cyc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2NlbmVFdmVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcnNlY3RPZmZzZXRGb3JXYWxscyA9IDIwO1xyXG4gIHB1YmxpYyByZWFkb25seSBsb25nVG91Y2hEdXJhdGlvbiA9IDYwMDtcclxuXHJcbiAgcHVibGljIHJvdGF0ZU5vRHJhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9lbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIF9jb250cm9sczogYW55O1xyXG4gIHByaXZhdGUgX2NhbWVyYTogQ2FtZXJhO1xyXG5cclxuICBwcml2YXRlIF9tb3VzZVBvc2l0aW9uOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKTtcclxuICBwcml2YXRlIF9vbGRNb3VzZVBvc2l0aW9uOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgcHJpdmF0ZSBfcm90YXRpb25TdGFydFBvaW50OiBWZWN0b3IzID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfaW50ZXJzZWN0ZWRPYmplY3Q6IEl0ZW07XHJcbiAgcHJpdmF0ZSBfaW50ZXJzZWN0ZWRNZXNoOiBDdXN0b21NZXNoIHwgTWVzaDtcclxuICBwcml2YXRlIF9tb3VzZW92ZXJPYmplY3Q6IEl0ZW07XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRPYmplY3Q6IGFueTtcclxuICBwcml2YXRlIF9wcmV2U2VsZWN0ZWRPYmplY3Q6IGFueTtcclxuICBwcml2YXRlIF9kZWZhdWx0Q3Vyc29yU3R5bGUgPSAncG9pbnRlcic7XHJcbiAgcHJpdmF0ZSBfZXhwbG9yZVByZXNzZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbkRyYWdPdmVyID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX21vdXNlRG93biA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX21vdXNlTW92ZWQgPSBmYWxzZTsgLy8gaGFzIG1vdXNlIG1vdmVkIHNpbmNlIGRvd24gY2xpY2tcclxuXHJcbiAgcHJpdmF0ZSBfcm90YXRlTW91c2VPdmVyID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZ3JvdXBpbmdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3N0YXRlID0gU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQ7XHJcblxyXG4gIHByaXZhdGUgX2ludGVyc2VjdGVkV2FsbDogSW50ZXJzZWN0aW9uO1xyXG4gIHByaXZhdGUgX2ludGVyc2VjdGVkRmxvb3I6IEludGVyc2VjdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9jYW1lcmFNb3ZlU3ViOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHByaXZhdGUgX2RlYm91bmNlZFNhdmVTdGF0ZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwcml2YXRlIF90b3VjaFN0YXJ0OiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuICBwcml2YXRlIF90b3VjaEVuZDogT2JzZXJ2YWJsZTxFdmVudD47XHJcbiAgcHJpdmF0ZSBfdG91Y2hDYW5jZWw6IE9ic2VydmFibGU8RXZlbnQ+O1xyXG4gIHByaXZhdGUgX3RvdWNoTW92ZTogT2JzZXJ2YWJsZTxFdmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfaHVkU2VydmljZTogSHVkU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXNTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHJhZ0FuZERyb3BTZXJ2aWNlOiBEcmFnQW5kRHJvcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb3RhdGlvblNlcnZpY2U6IFJvdGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ludGVyc2VjdGlvblNlcnZpY2U6IEludGVyc2VjdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92aWV3TW9kZVNlcnZpY2U6IFZpZXdNb2RlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1Hcm91cFNlcnZpY2U6IEl0ZW1Hcm91cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5fZWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHRoaXMuX2NvbnRyb2xzID0gdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scztcclxuICAgIHRoaXMuX2NhbWVyYSA9IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhO1xyXG5cclxuICAgIHRoaXMuX3RvdWNoU3RhcnQgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ3RvdWNoc3RhcnQnKTtcclxuICAgIHRoaXMuX3RvdWNoRW5kID0gZnJvbUV2ZW50KGVsZW1lbnQsICd0b3VjaGVuZCcpO1xyXG4gICAgdGhpcy5fdG91Y2hDYW5jZWwgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ3RvdWNoY2FuY2VsJyk7XHJcbiAgICB0aGlzLl90b3VjaE1vdmUgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ3RvdWNobW92ZScpO1xyXG5cclxuICAgIGZyb21FdmVudChlbGVtZW50LCAnbW91c2Vkb3duJylcclxuICAgICAgLnBpcGUoZmlsdGVyKChldmVudDogTW91c2VFdmVudCkgPT4gZXZlbnQuYnV0dG9uID09PSAwKSlcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLl9sZWZ0TW91c2VEb3duRXZlbnQoZXZlbnQpKTtcclxuICAgIGZyb21FdmVudChlbGVtZW50LCAnbW91c2V1cCcpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHRoaXMuX21vdXNlVXBFdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB0aGlzLl9tb3VzZU1vdmVFdmVudChldmVudCkpO1xyXG4gICAgdGhpcy5fdG91Y2hTdGFydC5zdWJzY3JpYmUoKGV2ZW50OiBUb3VjaEV2ZW50KSA9PiB0aGlzLl90b3VjaFN0YXJ0RXZlbnQoZXZlbnQpKTtcclxuICAgIHRoaXMuX3RvdWNoRW5kLnN1YnNjcmliZSgoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHRoaXMuX3RvdWNoRW5kRXZlbnQoZXZlbnQpKTtcclxuICAgIHRoaXMuX3RvdWNoQ2FuY2VsLnN1YnNjcmliZSgoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHRoaXMuX3RvdWNoRW5kRXZlbnQoZXZlbnQpKTtcclxuICAgIHRoaXMuX3RvdWNoTW92ZS5zdWJzY3JpYmUoKGV2ZW50OiBUb3VjaEV2ZW50KSA9PiB0aGlzLl90b3VjaE1vdmVFdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9rZXlEb3duRXZlbnQoZXZlbnQpKTtcclxuICAgIGZyb21FdmVudChlbGVtZW50LCAnZHJhZ2VudGVyJykuc3Vic2NyaWJlKChldmVudDogRHJhZ0V2ZW50KSA9PiB0aGlzLl9kcmFnRW50ZXJFdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdkcmFnZXhpdCcpLnN1YnNjcmliZSgoZXZlbnQ6IERyYWdFdmVudCkgPT4gdGhpcy5fZHJhZ0V4aXRFdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdkcmFnb3ZlcicpLnN1YnNjcmliZSgoZXZlbnQ6IERyYWdFdmVudCkgPT4gdGhpcy5fZHJhZ092ZXJFdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdkcm9wJykuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuX29uRHJvcChldmVudCkpO1xyXG5cclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlNldERyYWcsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBJdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSxcclxuICAgICAgICAgICAgdHlwZTogZGF0YS5tZXRhZGF0YS5pdGVtVHlwZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkSXRlbSA9IGRhdGE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywgKHt4LCB5LCB6fSkgPT5cclxuICAgICAgICB0aGlzLnN0YXJ0RHJhZ2dpbmcoeCwgeSwgeikpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuRXhpdERyYWcsICgpID0+IHRoaXMuX2RyYWdFeGl0RXZlbnQoZXZlbnQpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlBsYWNlT25Ub3VjaCwgKCkgPT4gdGhpcy5faW5pdFBsYWNlT25Ub3VjaFJlcXVlc3QoKSksXHJcbiAgICAgIHRoaXMuX2RlYm91bmNlZFNhdmVTdGF0ZS5waXBlKGRlYm91bmNlVGltZSg4MDApKS5zdWJzY3JpYmUoKGFjdGlvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246IGAzRCAke2FjdGlvbn1gfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9kZWJvdW5jZWRTYXZlU3RhdGUucGlwZShkZWJvdW5jZVRpbWUoMjAwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZUxhYmVsTWVhc3VyZW1lbnRzKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl92aWV3TW9kZVNlcnZpY2Uudmlld01vZGVDaGFuZ2VkLnN1YnNjcmliZShtb2RlID0+IHRoaXMuc2V0RXhwbG9yZU1vZGUobW9kZSA9PT0gVmlld01vZGUuV2Fsa1Rocm91Z2gpKSxcclxuICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5vYmplY3RBZGRlZC5zdWJzY3JpYmUoKG9iamVjdCkgPT4gdGhpcy5zZXRTZWxlY3RlZE9iamVjdChvYmplY3QpKSxcclxuICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5ncm91cGVkLnN1YnNjcmliZSgob2JqZWN0KSA9PiB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KG9iamVjdCkpLFxyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnVuZ3JvdXBlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRTZWxlY3RlZE9iamVjdChudWxsKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtUmVtb3ZlZCwgKCkgPT4gdGhpcy5zZXRTZWxlY3RlZE9iamVjdChudWxsKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydEdyb3VwT2JqZWN0LCAoKSA9PiB0aGlzLl9zZXRHcm91cGluZ01vZGUodHJ1ZSkpXHJcbiAgICApO1xyXG5cclxuICB9XHJcbiAgcHVibGljIHNldEV4cGxvcmVNb2RlKG9uID0gdHJ1ZSkge1xyXG4gICAgaWYgKG9uKSB7XHJcbiAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5FWFBMT1JFKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTZWxlY3RlZE9iamVjdChvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXAsIG1lc2g/OiBNZXNoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEICYmIG9iamVjdCkge1xyXG4gICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZE9iamVjdCAhPSBudWxsICYmIHRoaXMuX3NlbGVjdGVkT2JqZWN0ICE9PSBvYmplY3QpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRPYmplY3Quc2V0VW5zZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iamVjdCkge1xyXG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSXRlbUdyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0T2JqZWN0KG9iamVjdCk7XHJcbiAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5zZWxlY3RlZEdyb3VwID0gb2JqZWN0O1xyXG4gICAgICB9IGVsc2UgaWYgKG9iamVjdC5wYXJlbnQgaW5zdGFuY2VvZiBJdGVtR3JvdXApIHtcclxuICAgICAgICB0aGlzLl9zZXRTZWxlY3RPYmplY3Qob2JqZWN0LnBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5zZWxlY3RlZEdyb3VwID0gb2JqZWN0LnBhcmVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZXRTZWxlY3RPYmplY3Qob2JqZWN0LCBtZXNoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRPYmplY3Quc2V0VW5zZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSXRlbVVuc2VsZWN0ZWQsIHRoaXMuX3NlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZE9iamVjdCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcHJldlNlbGVjdGVkT2JqZWN0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9tYXJrU2NlbmVUb1VwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0RHJhZ2dpbmcoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGRyYWdnZWREYXRhID0gdGhpcy5fZ2V0RHJhZ2dlZERhdGEoKTtcclxuICAgIGlmICghdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWRTdGF0dXMuYWxsb3dlZE5ldyB8fCAhZHJhZ2dlZERhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLkRORCk7XHJcbiAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5kcmFnRW50ZXIoKTtcclxuICAgIGNvbnN0IHZlYzM6IFZlY3RvcjMgPSB6ID8gbmV3IFZlY3RvcjMoeCwgeSwgeikgOiB0aGlzLmludGVyc2VjdGluZ1ZlYzMobmV3IFZlY3RvcjIoeCwgeSkpO1xyXG4gICAgaWYgKHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkSXRlbSkge1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5vYmplY3RMb2FkZWQoKTtcclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLnVwZGF0ZURyYWdnZWRQb3NpdGlvbih2ZWMzKTtcclxuICAgIH0gZWxzZSBpZiAoaXNGdXJuaXR1cmVUeXBlKGRyYWdnZWREYXRhLnR5cGUpIHx8IGlzV2FsbFR5cGUoZHJhZ2dlZERhdGEudHlwZSkpIHtcclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdNb2RlbCh2ZWMzLCB0aGlzLl9mbG9vckludGVyc2VjdGlvbih0aGlzLl9zY2VuZVNlcnZpY2UucG9zaXRpb25JblNjZW5lVG9TY3JlZW4odmVjMykpKTtcclxuICAgIH0gZWxzZSBpZiAoaXNGbG9vckRlY29yYXRpb24oZHJhZ2dlZERhdGEudHlwZSkpIHtcclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdGbG9vckRlY29yYXRpb24odGhpcy5fZmxvb3JJbnRlcnNlY3Rpb24odGhpcy5fc2NlbmVTZXJ2aWNlLnBvc2l0aW9uSW5TY2VuZVRvU2NyZWVuKHZlYzMpKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW50ZXJzZWN0aW5nVmVjMyh2ZWMyOiBWZWN0b3IyLCBpbnRlcnNlY3Rpb24/OiBJbnRlcnNlY3Rpb24pOiBWZWN0b3IzIHtcclxuICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGdJbnRlcnNlY3Rpb25zID0gdGhpcy5fZ3JvdW5kSW50ZXJzZWN0aW9ucyh2ZWMyKTtcclxuICAgICAgcmV0dXJuIGdJbnRlcnNlY3Rpb25zICYmIGdJbnRlcnNlY3Rpb25zWzBdICYmIGdJbnRlcnNlY3Rpb25zWzBdLnBvaW50O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGludGVyc2VjdGlvbi5wb2ludDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzUm90YXRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUgPT09IFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORyAmJiAoIXRoaXMuX2FwcFNlcnZpY2Uuc2t1IHx8IHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSA9PT0gVmlld01vZGUuSW5QaG90b1ZpZXcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfa2V5RG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLl9jYW5jZWxEcmFnRHJvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhZ0VudGVyRXZlbnQoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IG1vdXNlUG9zOiBWZWN0b3IyID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpO1xyXG4gICAgdGhpcy5zdGFydERyYWdnaW5nKG1vdXNlUG9zLngsIG1vdXNlUG9zLnkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhZ0V4aXRFdmVudChldmVudCkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IHRoaXMuX2dldERyYWdnZWREYXRhKCk7XHJcbiAgICBpZiAoZHJhZ2dlZERhdGEpIHtcclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmZpbmlzaERyYWdnaW5nKCk7XHJcbiAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYWdPdmVyRXZlbnQoZXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFNjZW5lRXZlbnRTdGF0ZS5ETkQgfHwgdGhpcy5faW5EcmFnT3Zlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faW5EcmFnT3ZlciA9IHRydWU7XHJcbiAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5kcmFnT3ZlcigpO1xyXG4gICAgY29uc3QgY2FudmFzOiBIVE1MRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICBjb25zdCBtb3VzZVBvczogVmVjdG9yMiA9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcclxuICAgIHRoaXMuX21vdXNlUG9zaXRpb24uc2V0KG1vdXNlUG9zLnggLSAoY2FudmFzID8gY2FudmFzLm9mZnNldExlZnQgOiAwKSwgbW91c2VQb3MueSAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0VG9wIDogMCkpO1xyXG5cclxuICAgIGNvbnN0IGRyYWdnZWREYXRhID0gdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWREYXRhO1xyXG5cclxuICAgIGxldCBpbnRlcnNlY3Rpb246IEludGVyc2VjdGlvbiA9IHRoaXMuX3dhbGxJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICBjb25zdCBpbnRlcnNlY3RlZEZsb29yOiBJbnRlcnNlY3Rpb24gPSB0aGlzLl9mbG9vckludGVyc2VjdGlvbih0aGlzLl9tb3VzZVBvc2l0aW9uKTtcclxuXHJcbiAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuaW50ZXJzZWN0ZWRXYWxsID0gaW50ZXJzZWN0aW9uO1xyXG4gICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmludGVyc2VjdGVkRmxvb3IgPSBpbnRlcnNlY3RlZEZsb29yO1xyXG4gICAgdGhpcy5faW50ZXJzZWN0ZWRXYWxsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5faW50ZXJzZWN0ZWRGbG9vciA9IHVuZGVmaW5lZDtcclxuICAgIGlmIChpc1dhbGxUeXBlKGRyYWdnZWREYXRhLnR5cGUpIHx8IChpc1dhbGxGbG9vclR5cGUoZHJhZ2dlZERhdGEudHlwZSkgJiYgaW50ZXJzZWN0aW9uKSkge1xyXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5faW50ZXJzZWN0ZWRXYWxsID0gaW50ZXJzZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb24gJiYgIWlzRnVybml0dXJlVHlwZShkcmFnZ2VkRGF0YS50eXBlKSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2VwdERyb3AoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzRmxvb3JUeXBlKGRyYWdnZWREYXRhLnR5cGUpIHx8IGlzRmxvb3JEZWNvcmF0aW9uKGRyYWdnZWREYXRhLnR5cGUpIHx8IChpc1dhbGxGbG9vclR5cGUoZHJhZ2dlZERhdGEudHlwZSkgJiYgaW50ZXJzZWN0ZWRGbG9vcikpIHtcclxuICAgICAgdGhpcy5faW50ZXJzZWN0ZWRGbG9vciA9IGludGVyc2VjdGlvbiA9IHRoaXMuX2Zsb29ySW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xyXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZXJzZWN0ZWRQb2ludDogVmVjdG9yMyA9IHRoaXMuaW50ZXJzZWN0aW5nVmVjMyh0aGlzLl9tb3VzZVBvc2l0aW9uLCBpbnRlcnNlY3Rpb24pO1xyXG5cclxuICAgIGlmIChpbnRlcnNlY3RlZFBvaW50KSB7XHJcbiAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS51cGRhdGVEcmFnZ2VkUG9zaXRpb24oaW50ZXJzZWN0ZWRQb2ludCk7XHJcbiAgICAgIHRoaXMuX2FjY2VwdERyb3AoZXZlbnQpO1xyXG4gICAgICB0aGlzLl9tYXJrU2NlbmVUb1VwZGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5EcmFnT3ZlciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb25Ecm9wKGV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSBTY2VuZUV2ZW50U3RhdGUuRE5EKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNhbnZhczogSFRNTEVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xyXG4gICAgY29uc3QgbW91c2VQb3M6IFZlY3RvcjIgPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50TW91c2VQb3NpdGlvbihldmVudCk7XHJcbiAgICB0aGlzLl9tb3VzZVBvc2l0aW9uLnNldChtb3VzZVBvcy54IC0gKGNhbnZhcyA/IGNhbnZhcy5vZmZzZXRMZWZ0IDogMCksIG1vdXNlUG9zLnkgLSAoY2FudmFzID8gY2FudmFzLm9mZnNldFRvcCA6IDApKTtcclxuXHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkRGF0YTtcclxuICAgIGxldCBwb3NpdGlvbjogVmVjdG9yMyA9IG51bGw7XHJcbiAgICBsZXQgaW50ZXJzZWN0aW9uOiBJbnRlcnNlY3Rpb24gPSBudWxsO1xyXG5cclxuICAgIGlmIChpc1dhbGxUeXBlKGRyYWdnZWREYXRhLnR5cGUpIHx8IChpc1dhbGxGbG9vclR5cGUoZHJhZ2dlZERhdGEudHlwZSkgJiYgdGhpcy5faW50ZXJzZWN0ZWRXYWxsKSkge1xyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuX2ludGVyc2VjdGVkV2FsbCAmJiB0aGlzLl9pbnRlcnNlY3RlZFdhbGwucG9pbnQ7XHJcbiAgICAgIGludGVyc2VjdGlvbiA9IHRoaXMuX2ludGVyc2VjdGVkV2FsbDtcclxuICAgIH0gZWxzZSBpZiAoaXNGbG9vclR5cGUoZHJhZ2dlZERhdGEudHlwZSkgfHwgaXNGbG9vckRlY29yYXRpb24oZHJhZ2dlZERhdGEudHlwZSkgfHwgKGlzV2FsbEZsb29yVHlwZShkcmFnZ2VkRGF0YS50eXBlKSAmJiB0aGlzLl9pbnRlcnNlY3RlZEZsb29yKSkge1xyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuX2ludGVyc2VjdGVkRmxvb3IgJiYgdGhpcy5faW50ZXJzZWN0ZWRGbG9vci5wb2ludDtcclxuICAgICAgaW50ZXJzZWN0aW9uID0gdGhpcy5faW50ZXJzZWN0ZWRGbG9vcjtcclxuICAgIH1cclxuICAgIGlmIChwb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBpbnRlcnNlY3RlZFBvaW50OiBWZWN0b3IzID0gdGhpcy5pbnRlcnNlY3RpbmdWZWMzKHRoaXMuX21vdXNlUG9zaXRpb24sIGludGVyc2VjdGlvbik7XHJcbiAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkUGxhY2VkKGludGVyc2VjdGVkUG9pbnQsIGludGVyc2VjdGlvbik7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnaXRlbSBhZGRlZCd9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2NhbmNlbERyYWdEcm9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5pc09iamVjdExvYWRlZCkge1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5tYXJrVG9DbGVhblVwKCk7XHJcbiAgICAgIHRoaXMuX3JlbGVhc2VTdGF0ZShkcmFnZ2VkRGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9yZWxlYXNlU3RhdGUoZHJhZ2dlZERhdGEpO1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZmluaXNoRHJhZ2dpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbmNlbERyYWdEcm9wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWRTdGF0dXMuZHJhZ0NhbmNlbGVkKCk7XHJcbiAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZmluaXNoRHJhZ2dpbmcoKTtcclxuICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkZpbmlzaGVkSU9uZUZ1cm5pdHVyZUJ1aWxkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX21vdXNlVXBFdmVudChldmVudD86IE1vdXNlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX21vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU2NlbmVFdmVudFN0YXRlLkRORCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fb25Ecm9wKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HOlxyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lOR0NPTk5FQ1RPUjpcclxuICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZE9iamVjdCkge1xyXG4gICAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmNsaWNrUmVsZWFzZWQoKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRPYmplY3QuZW5kRHJhZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkc6XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuY2xpY2tSZWxlYXNlZCgpO1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdpdGVtIHJvdGF0ZWQnfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQ6XHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZE9iamVjdCAmJiAhdGhpcy5fbW91c2VNb3ZlZCkge1xyXG4gICAgICAgICAgdGhpcy5fY2hlY2tXYWxsc0FuZEZsb29ycyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRDpcclxuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkT2JqZWN0ICYmICF0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9jaGVja1dhbGxzQW5kRmxvb3JzKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0ID09IG51bGwgJiYgIXRoaXMuX21vdXNlTW92ZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkVYUExPUkU6XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVFeHBsb3JlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9uYXZpZ2F0ZUV4cGxvcmUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9vdmVycmlkZURlZmF1bHRDdXJzb3JTdHlsZSgncG9pbnRlcicpO1xyXG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLl9wb2ludE9uRmxvb3IodGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICBpZiAocG9pbnQpIHtcclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLl9jYW1lcmEucG9zaXRpb24uZGlzdGFuY2VUbyhwb2ludCk7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UuZXhwbG9yZUZsb29ySG92ZXIodGhpcy5fbW91c2VQb3NpdGlvbiwgcG9pbnQsIGRpc3RhbmNlKTtcclxuICAgICAgaWYgKCF0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faHVkU2VydmljZS5jb25maXJtRXhwbG9yZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NhbWVyYVNlcnZpY2UuY29udHJvbHMuYW5pbWF0ZU1vdmVUbyhwb2ludCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRXhwbG9yZVBvaW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRQbGFjZU9uVG91Y2hSZXF1ZXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkU3RhdHVzLmFsbG93ZWROZXcgJiYgdGhpcy5fZ2V0RHJhZ2dlZERhdGEoKSkge1xyXG4gICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuRE5EKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3RvdWNoRW5kRXZlbnQoZXZlbnQ6IFRvdWNoRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9pc01vdXNlRXZlbnRBbGxvd2VkKGV2ZW50KSkge1xyXG4gICAgICB0aGlzLl9tb3VzZURvd24gPSBmYWxzZTtcclxuICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQ6XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX21vdXNlTW92ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJzZWN0aW9ucygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlc2V0T2JqZWN0c1RvR3JvdXAoKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LCB0aGlzLl9pbnRlcnNlY3RlZE1lc2gpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2FkZFRvSXRlbUdyb3VwKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkc6XHJcbiAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmNsaWNrUmVsZWFzZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORzpcclxuICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmNsaWNrUmVsZWFzZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdpdGVtIHJvdGF0ZWQnfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5FWFBMT1JFOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlRXhwbG9yZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RvdWNoTW92ZUV2ZW50KGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IFNjZW5lRXZlbnRTdGF0ZS5ETkQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2RyYWdPdmVyRXZlbnQuYmluZCh0aGlzKShldmVudCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faXNNb3VzZUV2ZW50QWxsb3dlZChldmVudCkpIHtcclxuICAgICAgdGhpcy5fc2V0TW91c2VQb3NpdGlvbkZyb21Ub3VjaEV2ZW50KGV2ZW50KTtcclxuXHJcbiAgICAgIHRoaXMuX21vdXNlTW92ZWQgPSB0cnVlO1xyXG4gICAgICBpZiAoIXRoaXMuX21vdXNlRG93bikge1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUludGVyc2VjdGlvbnMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQ6XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVNb3VzZW92ZXIoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgICAgdGhpcy5fdXBkYXRlTW91c2VvdmVyKCk7XHJcbiAgICAgICAgICB0aGlzLl9odWRTZXJ2aWNlLmNhbWVyYVJvdGF0aW9uKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lORzpcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORzpcclxuICAgICAgICAgIHRoaXMuX2NsaWNrRHJhZ2dlZCgpO1xyXG4gICAgICAgICAgdGhpcy5fbWFya1NjZW5lVG9VcGRhdGUoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhckludGVyc2VjdGVkT2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW50ZXJzZWN0ZWRNZXNoID0gbnVsbDtcclxuICAgIHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RvZ2dsZVJvdGF0aW9uSHVkSW50ZXJzZWN0aW9uKG9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faHVkU2VydmljZS5pc01vdXNlT3ZlcigpICE9PSBvbikge1xyXG4gICAgICB0aGlzLl9yb3RhdGVNb3VzZU92ZXIgPSBvbjtcclxuICAgICAgdGhpcy5faHVkU2VydmljZS5zZXRNb3VzZU92ZXIob24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlSW50ZXJzZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGludGVyc2VjdHMgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKFxyXG4gICAgICB0aGlzLl9tb3VzZVBvc2l0aW9uLFxyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5nZXRPYmplY3RQbGFuZXMoKSxcclxuICAgICAge29ubHlWaXNpYmxlOiB0cnVlLCBpbmNsdWRlRmxvb3JzOiBmYWxzZX1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgd2FsbEludGVyc2VjdCA9IHRoaXMuX3dhbGxJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcblxyXG4gICAgLy8gb2JqZWN0IGludGVyc2VjdGlvbiBpcyBwcmlvcml0aXplZFxyXG4gICAgaWYgKGludGVyc2VjdHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAoKHdhbGxJbnRlcnNlY3QgJiYgd2FsbEludGVyc2VjdC5kaXN0YW5jZSArIHRoaXMuaW50ZXJzZWN0T2Zmc2V0Rm9yV2FsbHMgPiBpbnRlcnNlY3RzWzBdLmRpc3RhbmNlKSB8fCAhd2FsbEludGVyc2VjdCkpIHtcclxuICAgICAgdGhpcy5fdG9nZ2xlUm90YXRpb25IdWRJbnRlcnNlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB0aGlzLl9zZXRJbnRlcnNlY3RlZE9iamVjdChpbnRlcnNlY3RzWzBdLm9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9jbGVhckludGVyc2VjdGVkT2JqZWN0KCk7XHJcbiAgICAgIGNvbnN0IHNuYXBwZXJBcmVhID0gdGhpcy5faHVkU2VydmljZS5nZXRSb3RhdGlvblNuYXBwZXJBcmVhKCk7XHJcbiAgICAgIGlmIChzbmFwcGVyQXJlYSA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIGludGVyc2VjdHMgd2l0aCBjb25maWd1cmFibGUgZmxvb3JcclxuICAgICAgICBjb25zdCBmbG9vckludGVyc2VjdHMgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKFxyXG4gICAgICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbixcclxuICAgICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmdldE9iamVjdFBsYW5lcygpLFxyXG4gICAgICAgICAge29ubHlWaXNpYmxlOiB0cnVlLCBpbmNsdWRlRmxvb3I6IHRydWUsIG9ubHlDb25maWd1cmFibGVGbG9vcnM6IHRydWV9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmxvb3JJbnRlcnNlY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuX3RvZ2dsZVJvdGF0aW9uSHVkSW50ZXJzZWN0aW9uKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3NldEludGVyc2VjdGVkT2JqZWN0KGZsb29ySW50ZXJzZWN0c1swXS5vYmplY3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBodWRJbnRlcnNlY3RzID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyhcclxuICAgICAgICB0aGlzLl9tb3VzZVBvc2l0aW9uLFxyXG4gICAgICAgIFtzbmFwcGVyQXJlYV0sXHJcbiAgICAgICAge3JlY3Vyc2l2ZTogdHJ1ZX1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGh1ZEludGVyc2VjdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZVJvdGF0aW9uSHVkSW50ZXJzZWN0aW9uKHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZVJvdGF0aW9uSHVkSW50ZXJzZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcmV0dXJucyB0aGUgZmlyc3QgaW50ZXJzZWN0aW9uIG9iamVjdFxyXG4gIHByaXZhdGUgX2l0ZW1JbnRlcnNlY3Rpb24odmVjMiwgaXRlbSk6IGFueSB7XHJcbiAgICBsZXQgaW50ZXJzZWN0aW9ucyA9IG51bGw7XHJcbiAgICBpZiAoIWl0ZW0ubWV0YWRhdGEpIHtcclxuICAgICAgaW50ZXJzZWN0aW9ucyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnModmVjMiwgW2l0ZW1dLCB7ZmlsdGVyQnlOb3JtYWxzOiB0cnVlfSk7XHJcbiAgICB9IGVsc2UgaWYgKGlzV2FsbEZsb29yVHlwZShpdGVtLm1ldGFkYXRhLml0ZW1UeXBlKSkge1xyXG4gICAgICBpbnRlcnNlY3Rpb25zID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyh2ZWMyLCB0aGlzLl9yb29tU2VydmljZS53YWxsRWRnZVBsYW5lcygpLCB7ZmlsdGVyQnlOb3JtYWxzOiB0cnVlfSk7XHJcbiAgICAgIGlmICghaW50ZXJzZWN0aW9ucyB8fCBpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGludGVyc2VjdGlvbnMgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKHZlYzIsIFt0aGlzLl9mbG9vclNlcnZpY2UuZ3JvdW5kUGxhbmVdLCB7fSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNXYWxsVHlwZShpdGVtLm1ldGFkYXRhLml0ZW1UeXBlKSkge1xyXG4gICAgICBpbnRlcnNlY3Rpb25zID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyh2ZWMyLCB0aGlzLl9yb29tU2VydmljZS53YWxsRWRnZVBsYW5lcygpLCB7ZmlsdGVyQnlOb3JtYWxzOiB0cnVlfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbnRlcnNlY3Rpb25zID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyh2ZWMyLCBbdGhpcy5fZmxvb3JTZXJ2aWNlLmdyb3VuZFBsYW5lXSwge30pO1xyXG4gICAgfVxyXG4gICAgaWYgKGludGVyc2VjdGlvbnMgJiYgaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBpbnRlcnNlY3Rpb25zWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmaWx0ZXIgYnkgbm9ybWFscyB3aWxsIG9ubHkgcmV0dXJuIG9iamVjdHMgZmFjaW5nIHRoZSBjYW1lcmFcclxuICBwcml2YXRlIF9nZXRJbnRlcnNlY3Rpb25zKG1vdXNlUG9zOiBWZWN0b3IyLCBvYmplY3RzOiBPYmplY3QzRFtdLCBvcHRpb25zPyk6IEludGVyc2VjdGlvbltdIHtcclxuICAgIGNvbnN0IG1vdXNlVmVjdG9yID0gdGhpcy5fbW91c2VUb1ZlYzMobW91c2VQb3MpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludGVyc2VjdGlvblNlcnZpY2UuZ2V0SW50ZXJzZWN0aW9ucyhtb3VzZVZlY3Rvciwgb2JqZWN0cywgb3B0aW9ucyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NldE1vdXNlUG9zaXRpb25Gcm9tVG91Y2hFdmVudChldmVudDogVG91Y2hFdmVudCkge1xyXG4gICAgY29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgaWYgKHRvdWNoKSB7XHJcbiAgICAgIGNvbnN0IGNhbnZhczogYW55ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICB0aGlzLl9tb3VzZVBvc2l0aW9uLnNldCh0b3VjaC5wYWdlWCAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0TGVmdCA6IDApLCB0b3VjaC5wYWdlWSAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0VG9wIDogMCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdG91Y2hTdGFydEV2ZW50KGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNNb3VzZUV2ZW50QWxsb3dlZChldmVudCkpIHtcclxuXHJcbiAgICAgIGNvbnN0IGxvbmdUb3VjaCA9IG9mKDEpXHJcbiAgICAgICAgLnBpcGUoZGVsYXkodGhpcy5sb25nVG91Y2hEdXJhdGlvbikpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3RvdWNoU3RhcnQpKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl90b3VjaEVuZCkpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3RvdWNoQ2FuY2VsKSk7XHJcbiAgICAgIGxvbmdUb3VjaC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUludGVyc2VjdGlvbnMoKTtcclxuICAgICAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QgJiYgIXRoaXMuX21vdXNlTW92ZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2FkZFRvSXRlbUdyb3VwKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LCB0aGlzLl9wcmV2U2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9tb3VzZU1vdmVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX21vdXNlRG93biA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLl9zZXRNb3VzZVBvc2l0aW9uRnJvbVRvdWNoRXZlbnQoZXZlbnQpO1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQ6XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnNlY3Rpb25zKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcm90YXRlTW91c2VPdmVyIHx8IHRoaXMucm90YXRlTm9EcmFnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbnRlcnNlY3Rpb246IGFueSA9IHRoaXMuX2l0ZW1JbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbiwgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUludGVyc2VjdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uU3RhcnRQb2ludCA9IGl0ZW1JbnRlcnNlY3Rpb24ucG9pbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJldlNlbGVjdGVkT2JqZWN0ID0gdGhpcy5fc2VsZWN0ZWRPYmplY3Q7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5faW50ZXJzZWN0ZWRPYmplY3QuZml4ZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5ETkQ6XHJcbiAgICAgICAgICB0aGlzLl9vbkRyb3AoZXZlbnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xlZnRNb3VzZURvd25FdmVudChldmVudD8pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc01vdXNlRXZlbnRBbGxvd2VkKGV2ZW50KSkge1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjYW52YXM6IEhUTUxFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcclxuICAgICAgY29uc3QgbW91c2VQb3M6IFZlY3RvcjIgPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50TW91c2VQb3NpdGlvbihldmVudCk7XHJcbiAgICAgIHRoaXMuX29sZE1vdXNlUG9zaXRpb24uc2V0KG1vdXNlUG9zLnggLSAoY2FudmFzID8gY2FudmFzLm9mZnNldExlZnQgOiAwKSwgbW91c2VQb3MueSAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0VG9wIDogMCkpO1xyXG5cclxuICAgICAgdGhpcy5fbW91c2VNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9tb3VzZURvd24gPSB0cnVlO1xyXG5cclxuICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX3JvdGF0ZU1vdXNlT3Zlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkcpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbnRlcnNlY3Rpb246IGFueSA9IHRoaXMuX2l0ZW1JbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbiwgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgICAgICAgIGlmIChpdGVtSW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblN0YXJ0UG9pbnQgPSBpdGVtSW50ZXJzZWN0aW9uLnBvaW50O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRNZXNoICYmIHRoaXMuX2ludGVyc2VjdGVkTWVzaC5uYW1lICYmIHRoaXMuX2ludGVyc2VjdGVkTWVzaC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY18nKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lOR0NPTk5FQ1RPUik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ3JvdXBpbmdNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFRvSXRlbUdyb3VwKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LCB0aGlzLl9zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlc2V0T2JqZWN0c1RvR3JvdXAoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE9iamVjdCh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCwgdGhpcy5faW50ZXJzZWN0ZWRNZXNoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkVG9JdGVtR3JvdXAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QsIHRoaXMuX3NlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRlcnNlY3RlZE9iamVjdC5maXhlZCAmJiAhdGhpcy5yb3RhdGVOb0RyYWcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lORyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEOlxyXG4gICAgICAgICAgY29uc3QgZmxvb3IgPSB0aGlzLl9mbG9vckludGVyc2VjdGlvbih0aGlzLl9tb3VzZVBvc2l0aW9uKTtcclxuICAgICAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgICAgICBpZiAoZmxvb3Iub2JqZWN0LnBhcmVudCAmJiBmbG9vci5vYmplY3QucGFyZW50IGluc3RhbmNlb2YgSXRlbSAmJiBmbG9vci5vYmplY3QucGFyZW50LmNvbmZpZ3VyYWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NldEludGVyc2VjdGVkT2JqZWN0KGZsb29yLm9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlc2V0T2JqZWN0c1RvR3JvdXAoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE9iamVjdCh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCwgdGhpcy5faW50ZXJzZWN0ZWRNZXNoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRlcnNlY3RlZE9iamVjdC5maXhlZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0ZU5vRHJhZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUludGVyc2VjdGlvbjogYW55ID0gdGhpcy5faXRlbUludGVyc2VjdGlvbih0aGlzLl9tb3VzZVBvc2l0aW9uLCB0aGlzLl9zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUludGVyc2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblN0YXJ0UG9pbnQgPSBpdGVtSW50ZXJzZWN0aW9uLnBvaW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlJPVEFUSU5HKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdmVycmlkZURlZmF1bHRDdXJzb3JTdHlsZShzdHlsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZWZhdWx0Q3Vyc29yU3R5bGUgPSBzdHlsZTtcclxuICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKHRoaXMuX2RlZmF1bHRDdXJzb3JTdHlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRHcm91cGluZ01vZGUoZW5hYmxlR3JvdXBpbmc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2dyb3VwaW5nTW9kZSA9IGVuYWJsZUdyb3VwaW5nO1xyXG4gICAgdGhpcy5fYWRkVG9JdGVtR3JvdXAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QsIHRoaXMuX3ByZXZTZWxlY3RlZE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXREcmFnZ2VkRGF0YSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkRGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrUHJlc3NlZCh2ZWMyPzogVmVjdG9yMik6IHZvaWQge1xyXG4gICAgY29uc3QgdmVjID0gdmVjMiB8fCB0aGlzLl9tb3VzZVBvc2l0aW9uO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMuX2l0ZW1JbnRlcnNlY3Rpb24odmVjLCB0aGlzLl9zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZEl0ZW0gPSB0aGlzLl9zZWxlY3RlZE9iamVjdDtcclxuICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0RHJhZ09mZnNldChpbnRlcnNlY3Rpb24ucG9pbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja0Nvbm5lY3RvclByZXNzZWQodmVjMj86IFZlY3RvcjIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZlYyA9IHZlYzIgfHwgdGhpcy5fbW91c2VQb3NpdGlvbjtcclxuICAgIGlmICh0aGlzLl9pbnRlcnNlY3RlZE1lc2gpIHtcclxuICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnModmVjLCBbdGhpcy5faW50ZXJzZWN0ZWRNZXNoLCB0aGlzLl9mbG9vclNlcnZpY2UuZ3JvdW5kUGxhbmVdKTtcclxuICAgICAgaWYgKGludGVyc2VjdGlvbnMgJiYgaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAxICYmIGludGVyc2VjdGlvbnMuZmluZChpID0+IGkub2JqZWN0Lm5hbWUgPT09IHRoaXMuX2ludGVyc2VjdGVkTWVzaC5uYW1lKSkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VuZFBsYW5lID0gaW50ZXJzZWN0aW9ucy5maW5kKGkgPT4gaS5vYmplY3QubmFtZSA9PT0gJ2dyb3VuZC1wbGFuZScpO1xyXG4gICAgICAgIGlmIChncm91bmRQbGFuZSkge1xyXG4gICAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLnNldERyYWdPZmZzZXQoZ3JvdW5kUGxhbmUucG9pbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRHJhZ2dlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZE9iamVjdCAmJiAhdGhpcy5fc2VsZWN0ZWRPYmplY3QubG9ja2VkKSB7XHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMuX2l0ZW1JbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbiwgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzUm90YXRpbmcoKSkge1xyXG4gICAgICAgICAgdGhpcy5fcm90YXRpb25TdGFydFBvaW50ID1cclxuICAgICAgICAgICAgdGhpcy5fcm90YXRpb25TZXJ2aWNlLnJvdGF0ZSh0aGlzLl9zZWxlY3RlZE9iamVjdCwgdGhpcy5fcm90YXRpb25TdGFydFBvaW50LCBpbnRlcnNlY3Rpb24ucG9pbnQsICF0aGlzLnJvdGF0ZU5vRHJhZyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5jbGlja0RyYWdnZWQoaW50ZXJzZWN0aW9uKTtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQ2xpY2tEcmFnZ2VkKTtcclxuICAgICAgICAgIHRoaXMuX2RlYm91bmNlZFNhdmVTdGF0ZS5uZXh0KCdpdGVtIGRyYWdnZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhZ0Nvbm5lY3RvcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZE9iamVjdCAmJiAhdGhpcy5fc2VsZWN0ZWRPYmplY3QubG9ja2VkKSB7XHJcbiAgICAgIC8vIGNvbnN0IGludGVyc2VjdGlvbnMgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKHRoaXMuX21vdXNlUG9zaXRpb24sIFt0aGlzLl9mbG9vclNlcnZpY2UuZ3JvdW5kUGxhbmVdLCB7fSk7XHJcbiAgICAgIC8vIGlmIChpbnRlcnNlY3Rpb25zICYmIGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdDb25uZWN0b3IodGhpcy5faW50ZXJzZWN0ZWRNZXNoLCBpbnRlcnNlY3Rpb25zWzBdLnBvaW50KTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ0Nvbm5lY3Rvcih0aGlzLl9pbnRlcnNlY3RlZE1lc2gsIHRoaXMuX21vdXNlVG9WZWMzKHRoaXMuX21vdXNlUG9zaXRpb24pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrV2FsbHNBbmRGbG9vcnMoZXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQgJiYgdGhpcy5fbW91c2VvdmVyT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuX3dhbGxJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICAgIGlmICh3YWxsKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZSA9IHdhbGwub2JqZWN0LnVzZXJEYXRhLmVkZ2U7XHJcbiAgICAgICAgdGhpcy5fcm9vbVNlcnZpY2Uuc2VsZWN0V2FsbChldmVudCwgZWRnZS53YWxsLCBlZGdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZsb29yID0gdGhpcy5fZmxvb3JJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSBmbG9vci5vYmplY3QudXNlckRhdGEucm9vbTtcclxuICAgICAgICB0aGlzLl9yb29tU2VydmljZS5zZWxlY3RGbG9vcihldmVudCwgcm9vbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF93YWxsSW50ZXJzZWN0aW9uKHZlYzI6IFZlY3RvcjIpOiBJbnRlcnNlY3Rpb24ge1xyXG4gICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IHRoaXMuX3dhbGxJbnRlcnNlY3Rpb25zKHZlYzIpO1xyXG4gICAgaWYgKGludGVyc2VjdGlvbnMgJiYgaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBpbnRlcnNlY3Rpb25zWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF93YWxsSW50ZXJzZWN0aW9ucyh2ZWMyOiBWZWN0b3IyKTogSW50ZXJzZWN0aW9uW10ge1xyXG4gICAgY29uc3Qgd2FsbEVkZ2VQbGFuZXMgPSB0aGlzLl9yb29tU2VydmljZS53YWxsRWRnZVBsYW5lcygpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEludGVyc2VjdGlvbnMoXHJcbiAgICAgIHZlYzIsIHdhbGxFZGdlUGxhbmVzLCB7ZmlsdGVyQnlOb3JtYWxzOiB0cnVlfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lZGdlSW50ZXJzZWN0aW9ucyh2ZWMyOiBWZWN0b3IyKTogSW50ZXJzZWN0aW9uW10ge1xyXG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLl9yb29tU2VydmljZS5mbG9vclBsYW5lcygpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEludGVyc2VjdGlvbnMoXHJcbiAgICAgIHZlYzIsIGVkZ2VzLCB7ZmlsdGVyQnlOb3JtYWxzOiB0cnVlfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9ncm91bmRJbnRlcnNlY3Rpb25zKHZlYzI6IFZlY3RvcjIpOiBJbnRlcnNlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyh2ZWMyLCBbdGhpcy5fZmxvb3JTZXJ2aWNlLmdyb3VuZFBsYW5lXSwge2ZpbHRlckJ5Tm9ybWFsczogdHJ1ZX0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfd2FsbEVkZ2VJbnRlcnNlY3RlZChpbnRlcnNlY3RlZFdhbGxzOiBJbnRlcnNlY3Rpb25bXSwgaW50ZXJzZWN0ZWRFZGdlczogSW50ZXJzZWN0aW9uW10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHdhbGxzID0gaW50ZXJzZWN0ZWRFZGdlcy5tYXAoKGk6IEludGVyc2VjdGlvbikgPT4gaS5vYmplY3QudXNlckRhdGEud2FsbCk7XHJcbiAgICBjb25zdCBmaWx0ZXJlZFdhbGxzID0gaW50ZXJzZWN0ZWRXYWxscy5maWx0ZXIoKGludGVyc2VjdGVkV2FsbDogSW50ZXJzZWN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGwgPSBpbnRlcnNlY3RlZFdhbGwub2JqZWN0LnVzZXJEYXRhLmVkZ2UgJiYgaW50ZXJzZWN0ZWRXYWxsLm9iamVjdC51c2VyRGF0YS5lZGdlLndhbGw7XHJcbiAgICAgIHJldHVybiB3YWxscy5pbmRleE9mKHdhbGwpICE9PSAtMTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkV2FsbHMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zsb29ySW50ZXJzZWN0aW9uKHZlYzI6IFZlY3RvcjIpOiBJbnRlcnNlY3Rpb24ge1xyXG4gICAgY29uc3QgZmxvb3JQbGFuZXMgPSB0aGlzLl9yb29tU2VydmljZS5mbG9vclBsYW5lcygpO1xyXG4gICAgY29uc3QgZmxvb3JJbnRlcnNlY3RzID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyhcclxuICAgICAgdmVjMiwgZmxvb3JQbGFuZXMsIHtmaWx0ZXJCeU5vcm1hbHM6IGZhbHNlLCBpbmNsdWRlRmxvb3JzOiB0cnVlfSk7XHJcbiAgICBpZiAoZmxvb3JJbnRlcnNlY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIGZsb29ySW50ZXJzZWN0c1swXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcG9pbnRPbkZsb29yKHZlYzI6IFZlY3RvcjIpOiBWZWN0b3IzIHtcclxuICAgIGlmICh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCAmJlxyXG4gICAgICAhKGlzT25GbG9vclR5cGUodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QudXNlckRhdGEuaXRlbVR5cGUpIHx8IGlzSW5XYWxsVHlwZSh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdC51c2VyRGF0YS5pdGVtVHlwZSkpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50ZXJzZWN0ZWRGbG9vciA9IHRoaXMuX2Zsb29ySW50ZXJzZWN0aW9uKHZlYzIpO1xyXG4gICAgaWYgKCFpbnRlcnNlY3RlZEZsb29yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVyc2VjdGVkV2FsbHMgPSB0aGlzLl93YWxsSW50ZXJzZWN0aW9ucyh2ZWMyKTtcclxuICAgIGlmICghaW50ZXJzZWN0ZWRXYWxscy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGludGVyc2VjdGVkRmxvb3IucG9pbnQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRlcnNlY3RlZEVkZ2VzID0gdGhpcy5fZWRnZUludGVyc2VjdGlvbnModmVjMik7XHJcbiAgICBpZiAodGhpcy5fd2FsbEVkZ2VJbnRlcnNlY3RlZChpbnRlcnNlY3RlZFdhbGxzLCBpbnRlcnNlY3RlZEVkZ2VzKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBpbnRlcnNlY3RlZEZsb29yLnBvaW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3VzZUV2ZW50QWxsb3dlZChldmVudD86IEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZXZlbnQgPyAoZXZlbnQudGFyZ2V0ICYmIChldmVudC50YXJnZXQgYXMgRWxlbWVudCkubm9kZU5hbWUgPT09ICdDQU5WQVMnKSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tb3VzZU1vdmVFdmVudChldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU2NlbmVFdmVudFN0YXRlLkRORCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZHJhZ092ZXJFdmVudC5iaW5kKHRoaXMpKGV2ZW50KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pc01vdXNlRXZlbnRBbGxvd2VkKGV2ZW50KSkge1xyXG4gICAgICBjb25zdCBtb3VzZVBvczogVmVjdG9yMiA9IGV2ZW50ID8gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpIDogdGhpcy5fbW91c2VQb3NpdGlvbjtcclxuICAgICAgbGV0IGNhbnZhczogSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY2FudmFzID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tb3VzZVBvc2l0aW9uLnNldChtb3VzZVBvcy54IC0gKGNhbnZhcyA/IGNhbnZhcy5vZmZzZXRMZWZ0IDogMCksIG1vdXNlUG9zLnkgLSAoY2FudmFzID8gY2FudmFzLm9mZnNldFRvcCA6IDApKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9vbGRNb3VzZVBvc2l0aW9uLnggIT09IG1vdXNlUG9zLnggJiYgdGhpcy5fb2xkTW91c2VQb3NpdGlvbi55ICE9PSBtb3VzZVBvcy55KSB7XHJcbiAgICAgICAgdGhpcy5fbW91c2VNb3ZlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5fbW91c2VEb3duKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJzZWN0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5pbnRlcnNlY3RlZFdhbGwgPSB0aGlzLl93YWxsSW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG4gICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5pbnRlcnNlY3RlZEZsb29yID0gdGhpcy5fZmxvb3JJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnJvdGF0ZU5vRHJhZykge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRDpcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZU1vdXNlb3ZlcigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQ6XHJcbiAgICAgICAgICBpZiAodGhpcy5fbW91c2VEb3duICYmIHRoaXMuX21vdXNlTW92ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faHVkU2VydmljZS5jYW1lcmFSb3RhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fdXBkYXRlTW91c2VvdmVyKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5FWFBMT1JFOlxyXG4gICAgICAgICAgdGhpcy5faHVkU2VydmljZS5zdG9wRXhwbG9yZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX21vdXNlRG93bikge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JTdHlsZSgnbW92ZScpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXhwbG9yZVByZXNzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9tb3VzZW92ZXJPYmplY3QpIHtcclxuICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFeHBsb3JlUG9pbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkc6XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkc6XHJcbiAgICAgICAgICB0aGlzLl9jbGlja0RyYWdnZWQoKTtcclxuICAgICAgICAgIHRoaXMuX21hcmtTY2VuZVRvVXBkYXRlKCk7XHJcbiAgICAgICAgICB0aGlzLl9ldmVudFNlcnZpY2Uub2JqZWN0TW92aW5nT3JSb3RhdGluZy5uZXh0KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lOR0NPTk5FQ1RPUjpcclxuICAgICAgICAgIHRoaXMuX2RyYWdDb25uZWN0b3IoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVFeHBsb3JlUG9pbnQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuX3BvaW50T25GbG9vcih0aGlzLl9tb3VzZVBvc2l0aW9uKTtcclxuICAgIGlmIChwb2ludCkge1xyXG4gICAgICB0aGlzLl9zZXRDdXJzb3JTdHlsZSgncG9pbnRlcicpO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2NhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKHBvaW50KTtcclxuICAgICAgdGhpcy5faHVkU2VydmljZS5leHBsb3JlRmxvb3JIb3Zlcih0aGlzLl9tb3VzZVBvc2l0aW9uLCBwb2ludCwgZGlzdGFuY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2V0Q3Vyc29yU3R5bGUoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnN0b3BFeHBsb3JlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVFeHBsb3JlSW5kaWNhdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faHVkU2VydmljZS5zdG9wRXhwbG9yZSgpO1xyXG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLl9wb2ludE9uRmxvb3IodGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICBpZiAocG9pbnQpIHtcclxuICAgICAgdGhpcy5fc2V0Q3Vyc29yU3R5bGUoJ3BvaW50ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKCdjcm9zc2hhaXInKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjY2VwdERyb3AoZXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpIHtcclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWxlYXNlU3RhdGUoZHJhZ2dlZERhdGEpOiB2b2lkIHtcclxuICAgIGlmIChkcmFnZ2VkRGF0YSAmJiBkcmFnZ2VkRGF0YS5pc0NvcHkpIHtcclxuICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZFRvSXRlbUdyb3VwKG9iamVjdDogSXRlbSwgcHJldlNlbGVjdGVkT2JqZWN0PzogYW55KSB7XHJcbiAgICBjb25zdCBpc0ludGVyc2VjdFdpdGhHcm91cE1lbWJlciA9IG9iamVjdCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCB8fCBvYmplY3QucGFyZW50IGluc3RhbmNlb2YgSXRlbUdyb3VwO1xyXG4gICAgaWYgKCFpc0ludGVyc2VjdFdpdGhHcm91cE1lbWJlciAmJiAhb2JqZWN0LmNvbmZpZ3VyaW5nICYmIHRoaXMuX2Nhbkdyb3VwSXRlbXMob2JqZWN0LCBwcmV2U2VsZWN0ZWRPYmplY3QpKSB7XHJcbiAgICAgIGlmIChwcmV2U2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLmFkZElmTm90RXhpc3QocHJldlNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLmFkZE9yUmVtb3ZlSWZFeGlzdChvYmplY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FuR3JvdXBGbG9vckl0ZW0oaXRlbTogSXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEoaXRlbSBpbnN0YW5jZW9mIFdhbGxJdGVtKSB8fCAoaXRlbSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxGbG9vckl0ZW0gJiYgIShpdGVtIGFzIEN1c3RvbVdhbGxGbG9vckl0ZW0pLmN1cnJlbnRXYWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nhbkdyb3VwV2FsbEl0ZW0oaXRlbTogSXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgoaXRlbSBpbnN0YW5jZW9mIFdhbGxJdGVtICYmICEoaXRlbSBpbnN0YW5jZW9mIEluV2FsbEl0ZW0pKSB8fFxyXG4gICAgICAoaXRlbSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxGbG9vckl0ZW0gJiYgKGl0ZW0gYXMgQ3VzdG9tV2FsbEZsb29ySXRlbSkuY3VycmVudFdhbGwgIT09IHVuZGVmaW5lZCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FuR3JvdXBJdGVtcyhuZXdJdGVtOiBJdGVtLCBwcmV2aW91c0l0ZW06IEl0ZW0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jYW5Hcm91cFdhbGxJdGVtKG5ld0l0ZW0pICYmIHRoaXMuX2Nhbkdyb3VwV2FsbEl0ZW0ocHJldmlvdXNJdGVtKSAmJlxyXG4gICAgICAobmV3SXRlbSBhcyBXYWxsSXRlbSkuY3VycmVudFdhbGwgPT09IChwcmV2aW91c0l0ZW0gYXMgV2FsbEl0ZW0pLmN1cnJlbnRXYWxsIHx8XHJcbiAgICAgIHRoaXMuX2Nhbkdyb3VwRmxvb3JJdGVtKG5ld0l0ZW0pICYmIHRoaXMuX2Nhbkdyb3VwRmxvb3JJdGVtKHByZXZpb3VzSXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zd2l0Y2hTdGF0ZShuZXdTdGF0ZTogU2NlbmVFdmVudFN0YXRlKTogdm9pZCB7XHJcbiAgICBpZiAobmV3U3RhdGUgIT09IHRoaXMuX3N0YXRlKSB7XHJcbiAgICAgIHRoaXMuX29uRXhpdCh0aGlzLl9zdGF0ZSk7XHJcbiAgICAgIHRoaXMuX29uRW50cnkobmV3U3RhdGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgIHRoaXMuX2h1ZFNlcnZpY2Uuc2V0Um90YXRpbmcodGhpcy5faXNSb3RhdGluZygpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uRW50cnkob25TdGF0ZTogU2NlbmVFdmVudFN0YXRlKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKG9uU3RhdGUpIHtcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRDpcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KG51bGwpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRDpcclxuICAgICAgICB0aGlzLl9jb250cm9scy5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkc6XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuZW5hYmxlZCA9IHRoaXMuX2FwcFNlcnZpY2Uuc2t1O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lORzpcclxuICAgICAgICB0aGlzLl9zZXRDdXJzb3JTdHlsZSgnbW92ZScpO1xyXG4gICAgICAgIHRoaXMuX2NsaWNrUHJlc3NlZCgpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkdDT05ORUNUT1I6XHJcbiAgICAgICAgdGhpcy5fY2xpY2tDb25uZWN0b3JQcmVzc2VkKCk7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5FWFBMT1JFOlxyXG4gICAgICAgIHRoaXMuX292ZXJyaWRlRGVmYXVsdEN1cnNvclN0eWxlKCdwb2ludGVyJyk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE9iamVjdChudWxsKTtcclxuICAgICAgICB0aGlzLl9jYW1lcmFNb3ZlU3ViID0gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUV4cGxvcmVJbmRpY2F0b3IoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vbkV4aXQob25TdGF0ZTogU2NlbmVFdmVudFN0YXRlKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKG9uU3RhdGUpIHtcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRDpcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HOlxyXG4gICAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKHRoaXMuX2RlZmF1bHRDdXJzb3JTdHlsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlJPVEFUSU5HOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5FWFBMT1JFOlxyXG4gICAgICAgIHRoaXMuX292ZXJyaWRlRGVmYXVsdEN1cnNvclN0eWxlKCdhdXRvJyk7XHJcbiAgICAgICAgdGhpcy5faHVkU2VydmljZS5zdG9wRXhwbG9yZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLl9jYW1lcmFNb3ZlU3ViKSB7XHJcbiAgICAgICAgICB0aGlzLl9jYW1lcmFNb3ZlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0SW50ZXJzZWN0ZWRPYmplY3QobWVzaDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbnRlcnNlY3RlZE1lc2ggPSBtZXNoO1xyXG4gICAgaWYgKHR5cGVvZiBtZXNoWydnZXRSb290J10gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy5faW50ZXJzZWN0ZWRPYmplY3QgPSBtZXNoLmdldFJvb3QoKTtcclxuICAgIH0gZWxzZSBpZiAobWVzaC5wYXJlbnQpIHtcclxuICAgICAgdGhpcy5fc2V0SW50ZXJzZWN0ZWRPYmplY3QobWVzaC5wYXJlbnQgYXMgSXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZXZlcnRlZCBjaGFuZ2VzIGZyb20gSU9ORS0zMTM5OVxyXG4gIHByaXZhdGUgX21vdXNlVG9WZWMzKHZlYzI6IFZlY3RvcjIpOiBWZWN0b3IzIHtcclxuICAgIGNvbnN0IHJlbmRlcmVyRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XHJcbiAgICBjb25zdCBtUG9zaXRpb24gPSBuZXcgVmVjdG9yMihcclxuICAgICAgKHZlYzIueCAvIHJlbmRlcmVyRWxlbWVudC5jbGllbnRXaWR0aCkgKiAyIC0gMSxcclxuICAgICAgLSh2ZWMyLnkgLyByZW5kZXJlckVsZW1lbnQuY2xpZW50SGVpZ2h0KSAqIDIgKyAxXHJcbiAgICApO1xyXG4gICAgY29uc3QgdmVjdG9yID0gbmV3IFZlY3RvcjMobVBvc2l0aW9uLngsIG1Qb3NpdGlvbi55LCAwLjUpO1xyXG4gICAgdmVjdG9yLnVucHJvamVjdCh0aGlzLl9jYW1lcmEpO1xyXG4gICAgcmV0dXJuIHZlY3RvcjtcclxuXHJcbiAgICAvLyBjb25zdCByZW5kZXJlckVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xyXG4gICAgLy8gY29uc3QgbVBvc2l0aW9uID0gbmV3IFZlY3RvcjIoXHJcbiAgICAvLyAgICh2ZWMyLnggLyByZW5kZXJlckVsZW1lbnQuY2xpZW50V2lkdGgpICogMiAtIDEsXHJcbiAgICAvLyAgIC0odmVjMi55IC8gcmVuZGVyZXJFbGVtZW50LmNsaWVudEhlaWdodCkgKiAyICsgMVxyXG4gICAgLy8gKTtcclxuICAgIC8vIGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IzKG1Qb3NpdGlvbi54LCBtUG9zaXRpb24ueSwgMC41KTtcclxuICAgIC8vIHZlY3Rvci51bnByb2plY3QodGhpcy5fY2FtZXJhKTtcclxuICAgIC8vIHJldHVybiB2ZWN0b3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRTZWxlY3RPYmplY3Qob2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwLCBtZXNoPzogTWVzaCk6IHZvaWQge1xyXG4gICAgb2JqZWN0LnNldFNlbGVjdGVkKG1lc2gsIHRoaXMuX21vdXNlVG9WZWMzKHRoaXMuX21vdXNlUG9zaXRpb24pKTtcclxuICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5JdGVtU2VsZWN0ZWQsIG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVNb3VzZW92ZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5fbW91c2VvdmVyT2JqZWN0ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fbW91c2VvdmVyT2JqZWN0ICE9PSB0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCkge1xyXG4gICAgICAgICAgdGhpcy5fc2V0T2JqZWN0TW91c2VPZmYodGhpcy5fbW91c2VvdmVyT2JqZWN0KTtcclxuICAgICAgICAgIHRoaXMuX21vdXNlb3Zlck9iamVjdCA9IHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0O1xyXG4gICAgICAgICAgdGhpcy5fc2V0T2JqZWN0TW91c2VPdmVyKHRoaXMuX21vdXNlb3Zlck9iamVjdCwgdGhpcy5faW50ZXJzZWN0ZWRNZXNoKTtcclxuICAgICAgICAgIHRoaXMuX21hcmtTY2VuZVRvVXBkYXRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcsIG1vdXNlb3ZlciBhbHJlYWR5IHNldFxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9tb3VzZW92ZXJPYmplY3QgPSB0aGlzLl9pbnRlcnNlY3RlZE9iamVjdDtcclxuICAgICAgICB0aGlzLl9zZXRPYmplY3RNb3VzZU92ZXIodGhpcy5fbW91c2VvdmVyT2JqZWN0LCB0aGlzLl9pbnRlcnNlY3RlZE1lc2gpO1xyXG4gICAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKCdwb2ludGVyJyk7XHJcbiAgICAgICAgdGhpcy5fbWFya1NjZW5lVG9VcGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9tb3VzZW92ZXJPYmplY3QgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZXRPYmplY3RNb3VzZU9mZih0aGlzLl9tb3VzZW92ZXJPYmplY3QpO1xyXG4gICAgICB0aGlzLl9zZXRDdXJzb3JTdHlsZSh0aGlzLl9kZWZhdWx0Q3Vyc29yU3R5bGUpO1xyXG4gICAgICB0aGlzLl9tb3VzZW92ZXJPYmplY3QgPSBudWxsO1xyXG4gICAgICB0aGlzLl9tYXJrU2NlbmVUb1VwZGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0T2JqZWN0TW91c2VPdmVyKG9iamVjdDogSXRlbUdyb3VwIHwgSXRlbSwgbWVzaDogTWVzaCk6IHZvaWQge1xyXG4gICAgaWYgKG9iamVjdC5wYXJlbnQgJiYgb2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICBvYmplY3QucGFyZW50Lm1vdXNlT3ZlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JqZWN0Lm1vdXNlT3ZlcihtZXNoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE9iamVjdE1vdXNlT2ZmKG9iamVjdDogSXRlbUdyb3VwIHwgSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKG9iamVjdC5wYXJlbnQgJiYgb2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICBvYmplY3QucGFyZW50Lm1vdXNlT2ZmKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3QubW91c2VPZmYoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcmtTY2VuZVRvVXBkYXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEN1cnNvclN0eWxlKHN0eWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuY3Vyc29yID0gc3R5bGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1007
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2Uvc2NlbmUtZXZlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUF1QyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUkxRCxPQUFPLEVBQWEsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBVy9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNJLE9BQU8s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QUMsbUJBQW1CLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQXdCLEVBQUUsSUFBVTtRQUM5RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sWUFBWSxTQUFTLEVBQUU7WUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ0wsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUF3QjtRQUNqRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sWUFBWSxTQUFTLEVBQUU7WUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQzs7K0dBdGlDVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi4vaXRlbXMvaXRlbSc7XHJcbmltcG9ydCB7Q2FtZXJhLCBJbnRlcnNlY3Rpb24sIE1lc2gsIE9iamVjdDNELCBWZWN0b3IyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U2NlbmVFdmVudFN0YXRlfSBmcm9tICcuLi9tb2RlbC9zY2VuZS1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtIdWRTZXJ2aWNlfSBmcm9tICcuL2h1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtEcmFnQW5kRHJvcFNlcnZpY2V9IGZyb20gJy4vZHJhZy1hbmQtZHJvcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2Zyb21FdmVudH0gZnJvbSAncnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkZWxheSwgZmlsdGVyLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtvZn0gZnJvbSAncnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL29mJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb3RhdGlvblNlcnZpY2V9IGZyb20gJy4vcm90YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ludGVyc2VjdGlvblNlcnZpY2V9IGZyb20gJy4vaW50ZXJzZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ZpZXctbW9kZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtR3JvdXBTZXJ2aWNlfSBmcm9tICcuL2l0ZW0tZ3JvdXAuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4vaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aXZlUG9zaXRpb25VdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscyc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vaXRlbXMvY3VzdG9tLXdhbGwtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwfSBmcm9tICcuLi9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtpc0Zsb29yRGVjb3JhdGlvbiwgaXNGbG9vclR5cGUsIGlzRnVybml0dXJlVHlwZSwgaXNJbldhbGxUeXBlLCBpc09uRmxvb3JUeXBlLCBpc1dhbGxGbG9vclR5cGUsIGlzV2FsbFR5cGV9IGZyb20gJy4uL2l0ZW1zL2ZhY3RvcnknO1xyXG5pbXBvcnQge0luV2FsbEl0ZW0sIFdhbGxJdGVtfSBmcm9tICcuLi9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge0N1c3RvbU1lc2h9IGZyb20gJy4uL2l0ZW1zL2N1c3RvbS1vYmplY3RzJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY2VuZUV2ZW50U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGludGVyc2VjdE9mZnNldEZvcldhbGxzID0gMjA7XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvbmdUb3VjaER1cmF0aW9uID0gNjAwO1xyXG5cclxuICBwdWJsaWMgcm90YXRlTm9EcmFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIHByaXZhdGUgX2NvbnRyb2xzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBDYW1lcmE7XHJcblxyXG4gIHByaXZhdGUgX21vdXNlUG9zaXRpb246IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gIHByaXZhdGUgX29sZE1vdXNlUG9zaXRpb246IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICBwcml2YXRlIF9yb3RhdGlvblN0YXJ0UG9pbnQ6IFZlY3RvcjMgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9pbnRlcnNlY3RlZE9iamVjdDogSXRlbTtcclxuICBwcml2YXRlIF9pbnRlcnNlY3RlZE1lc2g6IEN1c3RvbU1lc2ggfCBNZXNoO1xyXG4gIHByaXZhdGUgX21vdXNlb3Zlck9iamVjdDogSXRlbTtcclxuICBwcml2YXRlIF9zZWxlY3RlZE9iamVjdDogYW55O1xyXG4gIHByaXZhdGUgX3ByZXZTZWxlY3RlZE9iamVjdDogYW55O1xyXG4gIHByaXZhdGUgX2RlZmF1bHRDdXJzb3JTdHlsZSA9ICdwb2ludGVyJztcclxuICBwcml2YXRlIF9leHBsb3JlUHJlc3NlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2luRHJhZ092ZXIgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfbW91c2VEb3duID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbW91c2VNb3ZlZCA9IGZhbHNlOyAvLyBoYXMgbW91c2UgbW92ZWQgc2luY2UgZG93biBjbGlja1xyXG5cclxuICBwcml2YXRlIF9yb3RhdGVNb3VzZU92ZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIF9ncm91cGluZ01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfc3RhdGUgPSBTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRDtcclxuXHJcbiAgcHJpdmF0ZSBfaW50ZXJzZWN0ZWRXYWxsOiBJbnRlcnNlY3Rpb247XHJcbiAgcHJpdmF0ZSBfaW50ZXJzZWN0ZWRGbG9vcjogSW50ZXJzZWN0aW9uO1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2NhbWVyYU1vdmVTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBfZGVib3VuY2VkU2F2ZVN0YXRlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgX3RvdWNoU3RhcnQ6IE9ic2VydmFibGU8RXZlbnQ+O1xyXG4gIHByaXZhdGUgX3RvdWNoRW5kOiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuICBwcml2YXRlIF90b3VjaENhbmNlbDogT2JzZXJ2YWJsZTxFdmVudD47XHJcbiAgcHJpdmF0ZSBfdG91Y2hNb3ZlOiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9odWRTZXJ2aWNlOiBIdWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1c1NlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kcmFnQW5kRHJvcFNlcnZpY2U6IERyYWdBbmREcm9wU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdGF0aW9uU2VydmljZTogUm90YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Jvb21TZXJ2aWNlOiBSb29tU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yU2VydmljZTogRmxvb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW50ZXJzZWN0aW9uU2VydmljZTogSW50ZXJzZWN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbUdyb3VwU2VydmljZTogSXRlbUdyb3VwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLl9lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgdGhpcy5fY29udHJvbHMgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNvbnRyb2xzO1xyXG4gICAgdGhpcy5fY2FtZXJhID0gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmE7XHJcblxyXG4gICAgdGhpcy5fdG91Y2hTdGFydCA9IGZyb21FdmVudChlbGVtZW50LCAndG91Y2hzdGFydCcpO1xyXG4gICAgdGhpcy5fdG91Y2hFbmQgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ3RvdWNoZW5kJyk7XHJcbiAgICB0aGlzLl90b3VjaENhbmNlbCA9IGZyb21FdmVudChlbGVtZW50LCAndG91Y2hjYW5jZWwnKTtcclxuICAgIHRoaXMuX3RvdWNoTW92ZSA9IGZyb21FdmVudChlbGVtZW50LCAndG91Y2htb3ZlJyk7XHJcblxyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdtb3VzZWRvd24nKVxyXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBldmVudC5idXR0b24gPT09IDApKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuX2xlZnRNb3VzZURvd25FdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdtb3VzZXVwJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4gdGhpcy5fbW91c2VVcEV2ZW50KGV2ZW50KSk7XHJcbiAgICBmcm9tRXZlbnQoZWxlbWVudCwgJ21vdXNlbW92ZScpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHRoaXMuX21vdXNlTW92ZUV2ZW50KGV2ZW50KSk7XHJcbiAgICB0aGlzLl90b3VjaFN0YXJ0LnN1YnNjcmliZSgoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHRoaXMuX3RvdWNoU3RhcnRFdmVudChldmVudCkpO1xyXG4gICAgdGhpcy5fdG91Y2hFbmQuc3Vic2NyaWJlKChldmVudDogVG91Y2hFdmVudCkgPT4gdGhpcy5fdG91Y2hFbmRFdmVudChldmVudCkpO1xyXG4gICAgdGhpcy5fdG91Y2hDYW5jZWwuc3Vic2NyaWJlKChldmVudDogVG91Y2hFdmVudCkgPT4gdGhpcy5fdG91Y2hFbmRFdmVudChldmVudCkpO1xyXG4gICAgdGhpcy5fdG91Y2hNb3ZlLnN1YnNjcmliZSgoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHRoaXMuX3RvdWNoTW92ZUV2ZW50KGV2ZW50KSk7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2tleURvd25FdmVudChldmVudCkpO1xyXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdkcmFnZW50ZXInKS5zdWJzY3JpYmUoKGV2ZW50OiBEcmFnRXZlbnQpID0+IHRoaXMuX2RyYWdFbnRlckV2ZW50KGV2ZW50KSk7XHJcbiAgICBmcm9tRXZlbnQoZWxlbWVudCwgJ2RyYWdleGl0Jykuc3Vic2NyaWJlKChldmVudDogRHJhZ0V2ZW50KSA9PiB0aGlzLl9kcmFnRXhpdEV2ZW50KGV2ZW50KSk7XHJcbiAgICBmcm9tRXZlbnQoZWxlbWVudCwgJ2RyYWdvdmVyJykuc3Vic2NyaWJlKChldmVudDogRHJhZ0V2ZW50KSA9PiB0aGlzLl9kcmFnT3ZlckV2ZW50KGV2ZW50KSk7XHJcbiAgICBmcm9tRXZlbnQoZWxlbWVudCwgJ2Ryb3AnKS5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5fb25Ecm9wKGV2ZW50KSk7XHJcblxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2V0RHJhZywgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkRGF0YSA9IHtcclxuICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxyXG4gICAgICAgICAgICB0eXBlOiBkYXRhLm1ldGFkYXRhLml0ZW1UeXBlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWRJdGVtID0gZGF0YTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWREYXRhID0gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCAoe3gsIHksIHp9KSA9PlxyXG4gICAgICAgIHRoaXMuc3RhcnREcmFnZ2luZyh4LCB5LCB6KSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5FeGl0RHJhZywgKCkgPT4gdGhpcy5fZHJhZ0V4aXRFdmVudChldmVudCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUGxhY2VPblRvdWNoLCAoKSA9PiB0aGlzLl9pbml0UGxhY2VPblRvdWNoUmVxdWVzdCgpKSxcclxuICAgICAgdGhpcy5fZGVib3VuY2VkU2F2ZVN0YXRlLnBpcGUoZGVib3VuY2VUaW1lKDgwMCkpLnN1YnNjcmliZSgoYWN0aW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogYDNEICR7YWN0aW9ufWB9KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2RlYm91bmNlZFNhdmVTdGF0ZS5waXBlKGRlYm91bmNlVGltZSgyMDApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlTGFiZWxNZWFzdXJlbWVudHMoKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZUNoYW5nZWQuc3Vic2NyaWJlKG1vZGUgPT4gdGhpcy5zZXRFeHBsb3JlTW9kZShtb2RlID09PSBWaWV3TW9kZS5XYWxrVGhyb3VnaCkpLFxyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLm9iamVjdEFkZGVkLnN1YnNjcmliZSgob2JqZWN0KSA9PiB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KG9iamVjdCkpLFxyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLmdyb3VwZWQuc3Vic2NyaWJlKChvYmplY3QpID0+IHRoaXMuc2V0U2VsZWN0ZWRPYmplY3Qob2JqZWN0KSksXHJcbiAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UudW5ncm91cGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KG51bGwpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkl0ZW1SZW1vdmVkLCAoKSA9PiB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KG51bGwpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBPYmplY3QsICgpID0+IHRoaXMuX3NldEdyb3VwaW5nTW9kZSh0cnVlKSlcclxuICAgICk7XHJcblxyXG4gIH1cclxuICBwdWJsaWMgc2V0RXhwbG9yZU1vZGUob24gPSB0cnVlKSB7XHJcbiAgICBpZiAob24pIHtcclxuICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLkVYUExPUkUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGVkT2JqZWN0KG9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cCwgbWVzaD86IE1lc2gpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQgJiYgb2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0ICE9IG51bGwgJiYgdGhpcy5fc2VsZWN0ZWRPYmplY3QgIT09IG9iamVjdCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZE9iamVjdC5zZXRVbnNlbGVjdGVkKCk7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqZWN0KSB7XHJcbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJdGVtR3JvdXApIHtcclxuICAgICAgICB0aGlzLl9zZXRTZWxlY3RPYmplY3Qob2JqZWN0KTtcclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnNlbGVjdGVkR3JvdXAgPSBvYmplY3Q7XHJcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICAgIHRoaXMuX3NldFNlbGVjdE9iamVjdChvYmplY3QucGFyZW50KTtcclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnNlbGVjdGVkR3JvdXAgPSBvYmplY3QucGFyZW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NldFNlbGVjdE9iamVjdChvYmplY3QsIG1lc2gpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZE9iamVjdC5zZXRVbnNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wcmV2U2VsZWN0ZWRPYmplY3QgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX21hcmtTY2VuZVRvVXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnREcmFnZ2luZyh4OiBudW1iZXIsIHk6IG51bWJlciwgej86IG51bWJlcikge1xyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB0aGlzLl9nZXREcmFnZ2VkRGF0YSgpO1xyXG4gICAgaWYgKCF0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5hbGxvd2VkTmV3IHx8ICFkcmFnZ2VkRGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuRE5EKTtcclxuICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkU3RhdHVzLmRyYWdFbnRlcigpO1xyXG4gICAgY29uc3QgdmVjMzogVmVjdG9yMyA9IHogPyBuZXcgVmVjdG9yMyh4LCB5LCB6KSA6IHRoaXMuaW50ZXJzZWN0aW5nVmVjMyhuZXcgVmVjdG9yMih4LCB5KSk7XHJcbiAgICBpZiAodGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWRJdGVtKSB7XHJcbiAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkU3RhdHVzLm9iamVjdExvYWRlZCgpO1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UudXBkYXRlRHJhZ2dlZFBvc2l0aW9uKHZlYzMpO1xyXG4gICAgfSBlbHNlIGlmIChpc0Z1cm5pdHVyZVR5cGUoZHJhZ2dlZERhdGEudHlwZSkgfHwgaXNXYWxsVHlwZShkcmFnZ2VkRGF0YS50eXBlKSkge1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ01vZGVsKHZlYzMsIHRoaXMuX2Zsb29ySW50ZXJzZWN0aW9uKHRoaXMuX3NjZW5lU2VydmljZS5wb3NpdGlvbkluU2NlbmVUb1NjcmVlbih2ZWMzKSkpO1xyXG4gICAgfSBlbHNlIGlmIChpc0Zsb29yRGVjb3JhdGlvbihkcmFnZ2VkRGF0YS50eXBlKSkge1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ0Zsb29yRGVjb3JhdGlvbih0aGlzLl9mbG9vckludGVyc2VjdGlvbih0aGlzLl9zY2VuZVNlcnZpY2UucG9zaXRpb25JblNjZW5lVG9TY3JlZW4odmVjMykpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbnRlcnNlY3RpbmdWZWMzKHZlYzI6IFZlY3RvcjIsIGludGVyc2VjdGlvbj86IEludGVyc2VjdGlvbik6IFZlY3RvcjMge1xyXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgY29uc3QgZ0ludGVyc2VjdGlvbnMgPSB0aGlzLl9ncm91bmRJbnRlcnNlY3Rpb25zKHZlYzIpO1xyXG4gICAgICByZXR1cm4gZ0ludGVyc2VjdGlvbnMgJiYgZ0ludGVyc2VjdGlvbnNbMF0gJiYgZ0ludGVyc2VjdGlvbnNbMF0ucG9pbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW50ZXJzZWN0aW9uLnBvaW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNSb3RhdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gU2NlbmVFdmVudFN0YXRlLlJPVEFUSU5HICYmICghdGhpcy5fYXBwU2VydmljZS5za3UgfHwgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlID09PSBWaWV3TW9kZS5JblBob3RvVmlldyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9rZXlEb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMuX2NhbmNlbERyYWdEcm9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmFnRW50ZXJFdmVudChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgbW91c2VQb3M6IFZlY3RvcjIgPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50TW91c2VQb3NpdGlvbihldmVudCk7XHJcbiAgICB0aGlzLnN0YXJ0RHJhZ2dpbmcobW91c2VQb3MueCwgbW91c2VQb3MueSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmFnRXhpdEV2ZW50KGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRyYWdnZWREYXRhID0gdGhpcy5fZ2V0RHJhZ2dlZERhdGEoKTtcclxuICAgIGlmIChkcmFnZ2VkRGF0YSkge1xyXG4gICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZmluaXNoRHJhZ2dpbmcoKTtcclxuICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhZ092ZXJFdmVudChldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU2NlbmVFdmVudFN0YXRlLkRORCB8fCB0aGlzLl9pbkRyYWdPdmVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pbkRyYWdPdmVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkU3RhdHVzLmRyYWdPdmVyKCk7XHJcbiAgICBjb25zdCBjYW52YXM6IEhUTUxFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcclxuICAgIGNvbnN0IG1vdXNlUG9zOiBWZWN0b3IyID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpO1xyXG4gICAgdGhpcy5fbW91c2VQb3NpdGlvbi5zZXQobW91c2VQb3MueCAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0TGVmdCA6IDApLCBtb3VzZVBvcy55IC0gKGNhbnZhcyA/IGNhbnZhcy5vZmZzZXRUb3AgOiAwKSk7XHJcblxyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZERhdGE7XHJcblxyXG4gICAgbGV0IGludGVyc2VjdGlvbjogSW50ZXJzZWN0aW9uID0gdGhpcy5fd2FsbEludGVyc2VjdGlvbih0aGlzLl9tb3VzZVBvc2l0aW9uKTtcclxuICAgIGNvbnN0IGludGVyc2VjdGVkRmxvb3I6IEludGVyc2VjdGlvbiA9IHRoaXMuX2Zsb29ySW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG5cclxuICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5pbnRlcnNlY3RlZFdhbGwgPSBpbnRlcnNlY3Rpb247XHJcbiAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuaW50ZXJzZWN0ZWRGbG9vciA9IGludGVyc2VjdGVkRmxvb3I7XHJcbiAgICB0aGlzLl9pbnRlcnNlY3RlZFdhbGwgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9pbnRlcnNlY3RlZEZsb29yID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGlzV2FsbFR5cGUoZHJhZ2dlZERhdGEudHlwZSkgfHwgKGlzV2FsbEZsb29yVHlwZShkcmFnZ2VkRGF0YS50eXBlKSAmJiBpbnRlcnNlY3Rpb24pKSB7XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLl9pbnRlcnNlY3RlZFdhbGwgPSBpbnRlcnNlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGludGVyc2VjdGlvbiAmJiAhaXNGdXJuaXR1cmVUeXBlKGRyYWdnZWREYXRhLnR5cGUpKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXB0RHJvcChldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNGbG9vclR5cGUoZHJhZ2dlZERhdGEudHlwZSkgfHwgaXNGbG9vckRlY29yYXRpb24oZHJhZ2dlZERhdGEudHlwZSkgfHwgKGlzV2FsbEZsb29yVHlwZShkcmFnZ2VkRGF0YS50eXBlKSAmJiBpbnRlcnNlY3RlZEZsb29yKSkge1xyXG4gICAgICB0aGlzLl9pbnRlcnNlY3RlZEZsb29yID0gaW50ZXJzZWN0aW9uID0gdGhpcy5fZmxvb3JJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XHJcbiAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRlcnNlY3RlZFBvaW50OiBWZWN0b3IzID0gdGhpcy5pbnRlcnNlY3RpbmdWZWMzKHRoaXMuX21vdXNlUG9zaXRpb24sIGludGVyc2VjdGlvbik7XHJcblxyXG4gICAgaWYgKGludGVyc2VjdGVkUG9pbnQpIHtcclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLnVwZGF0ZURyYWdnZWRQb3NpdGlvbihpbnRlcnNlY3RlZFBvaW50KTtcclxuICAgICAgdGhpcy5fYWNjZXB0RHJvcChldmVudCk7XHJcbiAgICAgIHRoaXMuX21hcmtTY2VuZVRvVXBkYXRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbkRyYWdPdmVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vbkRyb3AoZXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFNjZW5lRXZlbnRTdGF0ZS5ETkQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FudmFzOiBIVE1MRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICBjb25zdCBtb3VzZVBvczogVmVjdG9yMiA9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcclxuICAgIHRoaXMuX21vdXNlUG9zaXRpb24uc2V0KG1vdXNlUG9zLnggLSAoY2FudmFzID8gY2FudmFzLm9mZnNldExlZnQgOiAwKSwgbW91c2VQb3MueSAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0VG9wIDogMCkpO1xyXG5cclxuICAgIGNvbnN0IGRyYWdnZWREYXRhID0gdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWREYXRhO1xyXG4gICAgbGV0IHBvc2l0aW9uOiBWZWN0b3IzID0gbnVsbDtcclxuICAgIGxldCBpbnRlcnNlY3Rpb246IEludGVyc2VjdGlvbiA9IG51bGw7XHJcblxyXG4gICAgaWYgKGlzV2FsbFR5cGUoZHJhZ2dlZERhdGEudHlwZSkgfHwgKGlzV2FsbEZsb29yVHlwZShkcmFnZ2VkRGF0YS50eXBlKSAmJiB0aGlzLl9pbnRlcnNlY3RlZFdhbGwpKSB7XHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5faW50ZXJzZWN0ZWRXYWxsICYmIHRoaXMuX2ludGVyc2VjdGVkV2FsbC5wb2ludDtcclxuICAgICAgaW50ZXJzZWN0aW9uID0gdGhpcy5faW50ZXJzZWN0ZWRXYWxsO1xyXG4gICAgfSBlbHNlIGlmIChpc0Zsb29yVHlwZShkcmFnZ2VkRGF0YS50eXBlKSB8fCBpc0Zsb29yRGVjb3JhdGlvbihkcmFnZ2VkRGF0YS50eXBlKSB8fCAoaXNXYWxsRmxvb3JUeXBlKGRyYWdnZWREYXRhLnR5cGUpICYmIHRoaXMuX2ludGVyc2VjdGVkRmxvb3IpKSB7XHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5faW50ZXJzZWN0ZWRGbG9vciAmJiB0aGlzLl9pbnRlcnNlY3RlZEZsb29yLnBvaW50O1xyXG4gICAgICBpbnRlcnNlY3Rpb24gPSB0aGlzLl9pbnRlcnNlY3RlZEZsb29yO1xyXG4gICAgfVxyXG4gICAgaWYgKHBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGVkUG9pbnQ6IFZlY3RvcjMgPSB0aGlzLmludGVyc2VjdGluZ1ZlYzModGhpcy5fbW91c2VQb3NpdGlvbiwgaW50ZXJzZWN0aW9uKTtcclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWRQbGFjZWQoaW50ZXJzZWN0ZWRQb2ludCwgaW50ZXJzZWN0aW9uKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdpdGVtIGFkZGVkJ30pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fY2FuY2VsRHJhZ0Ryb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkU3RhdHVzLmlzT2JqZWN0TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnZ2VkU3RhdHVzLm1hcmtUb0NsZWFuVXAoKTtcclxuICAgICAgdGhpcy5fcmVsZWFzZVN0YXRlKGRyYWdnZWREYXRhKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlbGVhc2VTdGF0ZShkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5maW5pc2hEcmFnZ2luZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FuY2VsRHJhZ0Ryb3AoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5kcmFnQ2FuY2VsZWQoKTtcclxuICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5maW5pc2hEcmFnZ2luZygpO1xyXG4gICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEKTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuRmluaXNoZWRJT25lRnVybml0dXJlQnVpbGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbW91c2VVcEV2ZW50KGV2ZW50PzogTW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fbW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBTY2VuZUV2ZW50U3RhdGUuRE5EKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9vbkRyb3AoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkc6XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HQ09OTkVDVE9SOlxyXG4gICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuY2xpY2tSZWxlYXNlZCgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgSXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZE9iamVjdC5lbmREcmFnKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORzpcclxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5jbGlja1JlbGVhc2VkKCk7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ2l0ZW0gcm90YXRlZCd9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRDpcclxuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkT2JqZWN0ICYmICF0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9jaGVja1dhbGxzQW5kRmxvb3JzKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRPYmplY3QgJiYgIXRoaXMuX21vdXNlTW92ZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2NoZWNrV2FsbHNBbmRGbG9vcnMoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QgPT0gbnVsbCAmJiAhdGhpcy5fbW91c2VNb3ZlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRVhQTE9SRTpcclxuICAgICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZUV4cGxvcmUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlRXhwbG9yZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX292ZXJyaWRlRGVmYXVsdEN1cnNvclN0eWxlKCdwb2ludGVyJyk7XHJcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuX3BvaW50T25GbG9vcih0aGlzLl9tb3VzZVBvc2l0aW9uKTtcclxuICAgIGlmIChwb2ludCkge1xyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2NhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKHBvaW50KTtcclxuICAgICAgdGhpcy5faHVkU2VydmljZS5leHBsb3JlRmxvb3JIb3Zlcih0aGlzLl9tb3VzZVBvc2l0aW9uLCBwb2ludCwgZGlzdGFuY2UpO1xyXG4gICAgICBpZiAoIXRoaXMuX21vdXNlTW92ZWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNvbnRyb2xzLmFuaW1hdGVNb3ZlVG8ocG9pbnQpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUV4cGxvcmVQb2ludCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UGxhY2VPblRvdWNoUmVxdWVzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZFN0YXR1cy5hbGxvd2VkTmV3ICYmIHRoaXMuX2dldERyYWdnZWREYXRhKCkpIHtcclxuICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLkRORCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF90b3VjaEVuZEV2ZW50KGV2ZW50OiBUb3VjaEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5faXNNb3VzZUV2ZW50QWxsb3dlZChldmVudCkpIHtcclxuICAgICAgdGhpcy5fbW91c2VEb3duID0gZmFsc2U7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRDpcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUludGVyc2VjdGlvbnMoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZXNldE9iamVjdHNUb0dyb3VwKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE9iamVjdCh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCwgdGhpcy5faW50ZXJzZWN0ZWRNZXNoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9hZGRUb0l0ZW1Hcm91cCh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5jbGlja1JlbGVhc2VkKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkc6XHJcbiAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuU0VMRUNURUQpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5jbGlja1JlbGVhc2VkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnaXRlbSByb3RhdGVkJ30pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRVhQTE9SRTpcclxuICAgICAgICAgIGlmICghdGhpcy5fbW91c2VNb3ZlZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZUV4cGxvcmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b3VjaE1vdmVFdmVudChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBTY2VuZUV2ZW50U3RhdGUuRE5EKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kcmFnT3ZlckV2ZW50LmJpbmQodGhpcykoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2lzTW91c2VFdmVudEFsbG93ZWQoZXZlbnQpKSB7XHJcbiAgICAgIHRoaXMuX3NldE1vdXNlUG9zaXRpb25Gcm9tVG91Y2hFdmVudChldmVudCk7XHJcblxyXG4gICAgICB0aGlzLl9tb3VzZU1vdmVkID0gdHJ1ZTtcclxuICAgICAgaWYgKCF0aGlzLl9tb3VzZURvd24pIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnNlY3Rpb25zKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEOlxyXG4gICAgICAgICAgdGhpcy5fdXBkYXRlTW91c2VvdmVyKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRDpcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZU1vdXNlb3ZlcigpO1xyXG4gICAgICAgICAgdGhpcy5faHVkU2VydmljZS5jYW1lcmFSb3RhdGlvbigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkc6XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkc6XHJcbiAgICAgICAgICB0aGlzLl9jbGlja0RyYWdnZWQoKTtcclxuICAgICAgICAgIHRoaXMuX21hcmtTY2VuZVRvVXBkYXRlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJJbnRlcnNlY3RlZE9iamVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ludGVyc2VjdGVkTWVzaCA9IG51bGw7XHJcbiAgICB0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2dnbGVSb3RhdGlvbkh1ZEludGVyc2VjdGlvbihvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2h1ZFNlcnZpY2UuaXNNb3VzZU92ZXIoKSAhPT0gb24pIHtcclxuICAgICAgdGhpcy5fcm90YXRlTW91c2VPdmVyID0gb247XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2Uuc2V0TW91c2VPdmVyKG9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUludGVyc2VjdGlvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnRlcnNlY3RzID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyhcclxuICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbixcclxuICAgICAgdGhpcy5faXRlbVNlcnZpY2UuZ2V0T2JqZWN0UGxhbmVzKCksXHJcbiAgICAgIHtvbmx5VmlzaWJsZTogdHJ1ZSwgaW5jbHVkZUZsb29yczogZmFsc2V9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHdhbGxJbnRlcnNlY3QgPSB0aGlzLl93YWxsSW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG5cclxuICAgIC8vIG9iamVjdCBpbnRlcnNlY3Rpb24gaXMgcHJpb3JpdGl6ZWRcclxuICAgIGlmIChpbnRlcnNlY3RzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKCh3YWxsSW50ZXJzZWN0ICYmIHdhbGxJbnRlcnNlY3QuZGlzdGFuY2UgKyB0aGlzLmludGVyc2VjdE9mZnNldEZvcldhbGxzID4gaW50ZXJzZWN0c1swXS5kaXN0YW5jZSkgfHwgIXdhbGxJbnRlcnNlY3QpKSB7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZVJvdGF0aW9uSHVkSW50ZXJzZWN0aW9uKGZhbHNlKTtcclxuICAgICAgdGhpcy5fc2V0SW50ZXJzZWN0ZWRPYmplY3QoaW50ZXJzZWN0c1swXS5vYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fY2xlYXJJbnRlcnNlY3RlZE9iamVjdCgpO1xyXG4gICAgICBjb25zdCBzbmFwcGVyQXJlYSA9IHRoaXMuX2h1ZFNlcnZpY2UuZ2V0Um90YXRpb25TbmFwcGVyQXJlYSgpO1xyXG4gICAgICBpZiAoc25hcHBlckFyZWEgPT09IG51bGwpIHtcclxuICAgICAgICAvLyBjaGVjayBpZiBpbnRlcnNlY3RzIHdpdGggY29uZmlndXJhYmxlIGZsb29yXHJcbiAgICAgICAgY29uc3QgZmxvb3JJbnRlcnNlY3RzID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyhcclxuICAgICAgICAgIHRoaXMuX21vdXNlUG9zaXRpb24sXHJcbiAgICAgICAgICB0aGlzLl9pdGVtU2VydmljZS5nZXRPYmplY3RQbGFuZXMoKSxcclxuICAgICAgICAgIHtvbmx5VmlzaWJsZTogdHJ1ZSwgaW5jbHVkZUZsb29yOiB0cnVlLCBvbmx5Q29uZmlndXJhYmxlRmxvb3JzOiB0cnVlfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZsb29ySW50ZXJzZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLl90b2dnbGVSb3RhdGlvbkh1ZEludGVyc2VjdGlvbihmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl9zZXRJbnRlcnNlY3RlZE9iamVjdChmbG9vckludGVyc2VjdHNbMF0ub2JqZWN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaHVkSW50ZXJzZWN0cyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnMoXHJcbiAgICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbixcclxuICAgICAgICBbc25hcHBlckFyZWFdLFxyXG4gICAgICAgIHtyZWN1cnNpdmU6IHRydWV9XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChodWRJbnRlcnNlY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl90b2dnbGVSb3RhdGlvbkh1ZEludGVyc2VjdGlvbih0cnVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl90b2dnbGVSb3RhdGlvbkh1ZEludGVyc2VjdGlvbihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHJldHVybnMgdGhlIGZpcnN0IGludGVyc2VjdGlvbiBvYmplY3RcclxuICBwcml2YXRlIF9pdGVtSW50ZXJzZWN0aW9uKHZlYzIsIGl0ZW0pOiBhbnkge1xyXG4gICAgbGV0IGludGVyc2VjdGlvbnMgPSBudWxsO1xyXG4gICAgaWYgKCFpdGVtLm1ldGFkYXRhKSB7XHJcbiAgICAgIGludGVyc2VjdGlvbnMgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKHZlYzIsIFtpdGVtXSwge2ZpbHRlckJ5Tm9ybWFsczogdHJ1ZX0pO1xyXG4gICAgfSBlbHNlIGlmIChpc1dhbGxGbG9vclR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkpIHtcclxuICAgICAgaW50ZXJzZWN0aW9ucyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnModmVjMiwgdGhpcy5fcm9vbVNlcnZpY2Uud2FsbEVkZ2VQbGFuZXMoKSwge2ZpbHRlckJ5Tm9ybWFsczogdHJ1ZX0pO1xyXG4gICAgICBpZiAoIWludGVyc2VjdGlvbnMgfHwgaW50ZXJzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBpbnRlcnNlY3Rpb25zID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyh2ZWMyLCBbdGhpcy5fZmxvb3JTZXJ2aWNlLmdyb3VuZFBsYW5lXSwge30pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzV2FsbFR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkpIHtcclxuICAgICAgaW50ZXJzZWN0aW9ucyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnModmVjMiwgdGhpcy5fcm9vbVNlcnZpY2Uud2FsbEVkZ2VQbGFuZXMoKSwge2ZpbHRlckJ5Tm9ybWFsczogdHJ1ZX0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW50ZXJzZWN0aW9ucyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnModmVjMiwgW3RoaXMuX2Zsb29yU2VydmljZS5ncm91bmRQbGFuZV0sIHt9KTtcclxuICAgIH1cclxuICAgIGlmIChpbnRlcnNlY3Rpb25zICYmIGludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gaW50ZXJzZWN0aW9uc1swXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZmlsdGVyIGJ5IG5vcm1hbHMgd2lsbCBvbmx5IHJldHVybiBvYmplY3RzIGZhY2luZyB0aGUgY2FtZXJhXHJcbiAgcHJpdmF0ZSBfZ2V0SW50ZXJzZWN0aW9ucyhtb3VzZVBvczogVmVjdG9yMiwgb2JqZWN0czogT2JqZWN0M0RbXSwgb3B0aW9ucz8pOiBJbnRlcnNlY3Rpb25bXSB7XHJcbiAgICBjb25zdCBtb3VzZVZlY3RvciA9IHRoaXMuX21vdXNlVG9WZWMzKG1vdXNlUG9zKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcnNlY3Rpb25TZXJ2aWNlLmdldEludGVyc2VjdGlvbnMobW91c2VWZWN0b3IsIG9iamVjdHMsIG9wdGlvbnMpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXRNb3VzZVBvc2l0aW9uRnJvbVRvdWNoRXZlbnQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcclxuICAgIGNvbnN0IHRvdWNoID0gZXZlbnQudG91Y2hlc1swXTtcclxuICAgIGlmICh0b3VjaCkge1xyXG4gICAgICBjb25zdCBjYW52YXM6IGFueSA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbi5zZXQodG91Y2gucGFnZVggLSAoY2FudmFzID8gY2FudmFzLm9mZnNldExlZnQgOiAwKSwgdG91Y2gucGFnZVkgLSAoY2FudmFzID8gY2FudmFzLm9mZnNldFRvcCA6IDApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RvdWNoU3RhcnRFdmVudChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzTW91c2VFdmVudEFsbG93ZWQoZXZlbnQpKSB7XHJcblxyXG4gICAgICBjb25zdCBsb25nVG91Y2ggPSBvZigxKVxyXG4gICAgICAgIC5waXBlKGRlbGF5KHRoaXMubG9uZ1RvdWNoRHVyYXRpb24pKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl90b3VjaFN0YXJ0KSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdG91Y2hFbmQpKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl90b3VjaENhbmNlbCkpO1xyXG4gICAgICBsb25nVG91Y2guc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnNlY3Rpb25zKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0ICYmICF0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9hZGRUb0l0ZW1Hcm91cCh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCwgdGhpcy5fcHJldlNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5fbW91c2VNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9tb3VzZURvd24gPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5fc2V0TW91c2VQb3NpdGlvbkZyb21Ub3VjaEV2ZW50KGV2ZW50KTtcclxuICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJzZWN0aW9ucygpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3JvdGF0ZU1vdXNlT3ZlciB8fCB0aGlzLnJvdGF0ZU5vRHJhZykge1xyXG4gICAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkcpO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtSW50ZXJzZWN0aW9uOiBhbnkgPSB0aGlzLl9pdGVtSW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24sIHRoaXMuX3NlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1JbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblN0YXJ0UG9pbnQgPSBpdGVtSW50ZXJzZWN0aW9uLnBvaW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZTZWxlY3RlZE9iamVjdCA9IHRoaXMuX3NlbGVjdGVkT2JqZWN0O1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LmZpeGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRE5EOlxyXG4gICAgICAgICAgdGhpcy5fb25Ecm9wKGV2ZW50KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sZWZ0TW91c2VEb3duRXZlbnQoZXZlbnQ/KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNNb3VzZUV2ZW50QWxsb3dlZChldmVudCkpIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY2FudmFzOiBIVE1MRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgIGNvbnN0IG1vdXNlUG9zOiBWZWN0b3IyID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpO1xyXG4gICAgICB0aGlzLl9vbGRNb3VzZVBvc2l0aW9uLnNldChtb3VzZVBvcy54IC0gKGNhbnZhcyA/IGNhbnZhcy5vZmZzZXRMZWZ0IDogMCksIG1vdXNlUG9zLnkgLSAoY2FudmFzID8gY2FudmFzLm9mZnNldFRvcCA6IDApKTtcclxuXHJcbiAgICAgIHRoaXMuX21vdXNlTW92ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fbW91c2VEb3duID0gdHJ1ZTtcclxuXHJcbiAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRDpcclxuICAgICAgICAgIGlmICh0aGlzLl9yb3RhdGVNb3VzZU92ZXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3dpdGNoU3RhdGUoU2NlbmVFdmVudFN0YXRlLlJPVEFUSU5HKTtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtSW50ZXJzZWN0aW9uOiBhbnkgPSB0aGlzLl9pdGVtSW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24sIHRoaXMuX3NlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgICAgICAgICBpZiAoaXRlbUludGVyc2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRpb25TdGFydFBvaW50ID0gaXRlbUludGVyc2VjdGlvbi5wb2ludDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVyc2VjdGVkTWVzaCAmJiB0aGlzLl9pbnRlcnNlY3RlZE1lc2gubmFtZSAmJiB0aGlzLl9pbnRlcnNlY3RlZE1lc2gubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJykpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkdDT05ORUNUT1IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghZXZlbnQuY3RybEtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dyb3VwaW5nTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUb0l0ZW1Hcm91cCh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCwgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZXNldE9iamVjdHNUb0dyb3VwKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPYmplY3QodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QsIHRoaXMuX2ludGVyc2VjdGVkTWVzaCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFRvSXRlbUdyb3VwKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LCB0aGlzLl9zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5faW50ZXJzZWN0ZWRPYmplY3QuZml4ZWQgJiYgIXRoaXMucm90YXRlTm9EcmFnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRDpcclxuICAgICAgICAgIGNvbnN0IGZsb29yID0gdGhpcy5fZmxvb3JJbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAoZmxvb3IpIHtcclxuICAgICAgICAgICAgaWYgKGZsb29yLm9iamVjdC5wYXJlbnQgJiYgZmxvb3Iub2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIEl0ZW0gJiYgZmxvb3Iub2JqZWN0LnBhcmVudC5jb25maWd1cmFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zZXRJbnRlcnNlY3RlZE9iamVjdChmbG9vci5vYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZXNldE9iamVjdHNUb0dyb3VwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPYmplY3QodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QsIHRoaXMuX2ludGVyc2VjdGVkTWVzaCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5faW50ZXJzZWN0ZWRPYmplY3QuZml4ZWQpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5yb3RhdGVOb0RyYWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbnRlcnNlY3Rpb246IGFueSA9IHRoaXMuX2l0ZW1JbnRlcnNlY3Rpb24odGhpcy5fbW91c2VQb3NpdGlvbiwgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1JbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRpb25TdGFydFBvaW50ID0gaXRlbUludGVyc2VjdGlvbi5wb2ludDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lORyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcnJpZGVEZWZhdWx0Q3Vyc29yU3R5bGUoc3R5bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVmYXVsdEN1cnNvclN0eWxlID0gc3R5bGU7XHJcbiAgICB0aGlzLl9zZXRDdXJzb3JTdHlsZSh0aGlzLl9kZWZhdWx0Q3Vyc29yU3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0R3JvdXBpbmdNb2RlKGVuYWJsZUdyb3VwaW5nOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ncm91cGluZ01vZGUgPSBlbmFibGVHcm91cGluZztcclxuICAgIHRoaXMuX2FkZFRvSXRlbUdyb3VwKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LCB0aGlzLl9wcmV2U2VsZWN0ZWRPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0RHJhZ2dlZERhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZ2dlZERhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja1ByZXNzZWQodmVjMj86IFZlY3RvcjIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZlYyA9IHZlYzIgfHwgdGhpcy5fbW91c2VQb3NpdGlvbjtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZE9iamVjdCkge1xyXG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLl9pdGVtSW50ZXJzZWN0aW9uKHZlYywgdGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdnZWRJdGVtID0gdGhpcy5fc2VsZWN0ZWRPYmplY3Q7XHJcbiAgICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLnNldERyYWdPZmZzZXQoaW50ZXJzZWN0aW9uLnBvaW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xpY2tDb25uZWN0b3JQcmVzc2VkKHZlYzI/OiBWZWN0b3IyKTogdm9pZCB7XHJcbiAgICBjb25zdCB2ZWMgPSB2ZWMyIHx8IHRoaXMuX21vdXNlUG9zaXRpb247XHJcbiAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRNZXNoKSB7XHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbnMgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKHZlYywgW3RoaXMuX2ludGVyc2VjdGVkTWVzaCwgdGhpcy5fZmxvb3JTZXJ2aWNlLmdyb3VuZFBsYW5lXSk7XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb25zICYmIGludGVyc2VjdGlvbnMubGVuZ3RoID4gMSAmJiBpbnRlcnNlY3Rpb25zLmZpbmQoaSA9PiBpLm9iamVjdC5uYW1lID09PSB0aGlzLl9pbnRlcnNlY3RlZE1lc2gubmFtZSkpIHtcclxuICAgICAgICBjb25zdCBncm91bmRQbGFuZSA9IGludGVyc2VjdGlvbnMuZmluZChpID0+IGkub2JqZWN0Lm5hbWUgPT09ICdncm91bmQtcGxhbmUnKTtcclxuICAgICAgICBpZiAoZ3JvdW5kUGxhbmUpIHtcclxuICAgICAgICAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5zZXREcmFnT2Zmc2V0KGdyb3VuZFBsYW5lLnBvaW50LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja0RyYWdnZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QgJiYgIXRoaXMuX3NlbGVjdGVkT2JqZWN0LmxvY2tlZCkge1xyXG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLl9pdGVtSW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24sIHRoaXMuX3NlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgaWYgKGludGVyc2VjdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc1JvdGF0aW5nKCkpIHtcclxuICAgICAgICAgIHRoaXMuX3JvdGF0aW9uU3RhcnRQb2ludCA9XHJcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uU2VydmljZS5yb3RhdGUodGhpcy5fc2VsZWN0ZWRPYmplY3QsIHRoaXMuX3JvdGF0aW9uU3RhcnRQb2ludCwgaW50ZXJzZWN0aW9uLnBvaW50LCAhdGhpcy5yb3RhdGVOb0RyYWcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuY2xpY2tEcmFnZ2VkKGludGVyc2VjdGlvbik7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNsaWNrRHJhZ2dlZCk7XHJcbiAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRTYXZlU3RhdGUubmV4dCgnaXRlbSBkcmFnZ2VkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYWdDb25uZWN0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRPYmplY3QgJiYgIXRoaXMuX3NlbGVjdGVkT2JqZWN0LmxvY2tlZCkge1xyXG4gICAgICAvLyBjb25zdCBpbnRlcnNlY3Rpb25zID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyh0aGlzLl9tb3VzZVBvc2l0aW9uLCBbdGhpcy5fZmxvb3JTZXJ2aWNlLmdyb3VuZFBsYW5lXSwge30pO1xyXG4gICAgICAvLyBpZiAoaW50ZXJzZWN0aW9ucyAmJiBpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAvLyAgIHRoaXMuX2RyYWdBbmREcm9wU2VydmljZS5kcmFnQ29ubmVjdG9yKHRoaXMuX2ludGVyc2VjdGVkTWVzaCwgaW50ZXJzZWN0aW9uc1swXS5wb2ludCk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5fZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdDb25uZWN0b3IodGhpcy5faW50ZXJzZWN0ZWRNZXNoLCB0aGlzLl9tb3VzZVRvVmVjMyh0aGlzLl9tb3VzZVBvc2l0aW9uKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja1dhbGxzQW5kRmxvb3JzKGV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEICYmIHRoaXMuX21vdXNlb3Zlck9iamVjdCA9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLl93YWxsSW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG4gICAgICBpZiAod2FsbCkge1xyXG4gICAgICAgIGNvbnN0IGVkZ2UgPSB3YWxsLm9iamVjdC51c2VyRGF0YS5lZGdlO1xyXG4gICAgICAgIHRoaXMuX3Jvb21TZXJ2aWNlLnNlbGVjdFdhbGwoZXZlbnQsIGVkZ2Uud2FsbCwgZWRnZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmbG9vciA9IHRoaXMuX2Zsb29ySW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG4gICAgICBpZiAoZmxvb3IpIHtcclxuICAgICAgICBjb25zdCByb29tID0gZmxvb3Iub2JqZWN0LnVzZXJEYXRhLnJvb207XHJcbiAgICAgICAgdGhpcy5fcm9vbVNlcnZpY2Uuc2VsZWN0Rmxvb3IoZXZlbnQsIHJvb20pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfd2FsbEludGVyc2VjdGlvbih2ZWMyOiBWZWN0b3IyKTogSW50ZXJzZWN0aW9uIHtcclxuICAgIGNvbnN0IGludGVyc2VjdGlvbnMgPSB0aGlzLl93YWxsSW50ZXJzZWN0aW9ucyh2ZWMyKTtcclxuICAgIGlmIChpbnRlcnNlY3Rpb25zICYmIGludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gaW50ZXJzZWN0aW9uc1swXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfd2FsbEludGVyc2VjdGlvbnModmVjMjogVmVjdG9yMik6IEludGVyc2VjdGlvbltdIHtcclxuICAgIGNvbnN0IHdhbGxFZGdlUGxhbmVzID0gdGhpcy5fcm9vbVNlcnZpY2Uud2FsbEVkZ2VQbGFuZXMoKTtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKFxyXG4gICAgICB2ZWMyLCB3YWxsRWRnZVBsYW5lcywge2ZpbHRlckJ5Tm9ybWFsczogdHJ1ZX0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZWRnZUludGVyc2VjdGlvbnModmVjMjogVmVjdG9yMik6IEludGVyc2VjdGlvbltdIHtcclxuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5fcm9vbVNlcnZpY2UuZmxvb3JQbGFuZXMoKTtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJbnRlcnNlY3Rpb25zKFxyXG4gICAgICB2ZWMyLCBlZGdlcywge2ZpbHRlckJ5Tm9ybWFsczogdHJ1ZX0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ3JvdW5kSW50ZXJzZWN0aW9ucyh2ZWMyOiBWZWN0b3IyKTogSW50ZXJzZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEludGVyc2VjdGlvbnModmVjMiwgW3RoaXMuX2Zsb29yU2VydmljZS5ncm91bmRQbGFuZV0sIHtmaWx0ZXJCeU5vcm1hbHM6IHRydWV9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3dhbGxFZGdlSW50ZXJzZWN0ZWQoaW50ZXJzZWN0ZWRXYWxsczogSW50ZXJzZWN0aW9uW10sIGludGVyc2VjdGVkRWRnZXM6IEludGVyc2VjdGlvbltdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB3YWxscyA9IGludGVyc2VjdGVkRWRnZXMubWFwKChpOiBJbnRlcnNlY3Rpb24pID0+IGkub2JqZWN0LnVzZXJEYXRhLndhbGwpO1xyXG4gICAgY29uc3QgZmlsdGVyZWRXYWxscyA9IGludGVyc2VjdGVkV2FsbHMuZmlsdGVyKChpbnRlcnNlY3RlZFdhbGw6IEludGVyc2VjdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsID0gaW50ZXJzZWN0ZWRXYWxsLm9iamVjdC51c2VyRGF0YS5lZGdlICYmIGludGVyc2VjdGVkV2FsbC5vYmplY3QudXNlckRhdGEuZWRnZS53YWxsO1xyXG4gICAgICByZXR1cm4gd2FsbHMuaW5kZXhPZih3YWxsKSAhPT0gLTE7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZFdhbGxzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mbG9vckludGVyc2VjdGlvbih2ZWMyOiBWZWN0b3IyKTogSW50ZXJzZWN0aW9uIHtcclxuICAgIGNvbnN0IGZsb29yUGxhbmVzID0gdGhpcy5fcm9vbVNlcnZpY2UuZmxvb3JQbGFuZXMoKTtcclxuICAgIGNvbnN0IGZsb29ySW50ZXJzZWN0cyA9IHRoaXMuX2dldEludGVyc2VjdGlvbnMoXHJcbiAgICAgIHZlYzIsIGZsb29yUGxhbmVzLCB7ZmlsdGVyQnlOb3JtYWxzOiBmYWxzZSwgaW5jbHVkZUZsb29yczogdHJ1ZX0pO1xyXG4gICAgaWYgKGZsb29ySW50ZXJzZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBmbG9vckludGVyc2VjdHNbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BvaW50T25GbG9vcih2ZWMyOiBWZWN0b3IyKTogVmVjdG9yMyB7XHJcbiAgICBpZiAodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QgJiZcclxuICAgICAgIShpc09uRmxvb3JUeXBlKHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0LnVzZXJEYXRhLml0ZW1UeXBlKSB8fCBpc0luV2FsbFR5cGUodGhpcy5faW50ZXJzZWN0ZWRPYmplY3QudXNlckRhdGEuaXRlbVR5cGUpKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGludGVyc2VjdGVkRmxvb3IgPSB0aGlzLl9mbG9vckludGVyc2VjdGlvbih2ZWMyKTtcclxuICAgIGlmICghaW50ZXJzZWN0ZWRGbG9vcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRlcnNlY3RlZFdhbGxzID0gdGhpcy5fd2FsbEludGVyc2VjdGlvbnModmVjMik7XHJcbiAgICBpZiAoIWludGVyc2VjdGVkV2FsbHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBpbnRlcnNlY3RlZEZsb29yLnBvaW50O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50ZXJzZWN0ZWRFZGdlcyA9IHRoaXMuX2VkZ2VJbnRlcnNlY3Rpb25zKHZlYzIpO1xyXG4gICAgaWYgKHRoaXMuX3dhbGxFZGdlSW50ZXJzZWN0ZWQoaW50ZXJzZWN0ZWRXYWxscywgaW50ZXJzZWN0ZWRFZGdlcykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW50ZXJzZWN0ZWRGbG9vci5wb2ludDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzTW91c2VFdmVudEFsbG93ZWQoZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGV2ZW50ID8gKGV2ZW50LnRhcmdldCAmJiAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLm5vZGVOYW1lID09PSAnQ0FOVkFTJykgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbW91c2VNb3ZlRXZlbnQoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IFNjZW5lRXZlbnRTdGF0ZS5ETkQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2RyYWdPdmVyRXZlbnQuYmluZCh0aGlzKShldmVudCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faXNNb3VzZUV2ZW50QWxsb3dlZChldmVudCkpIHtcclxuICAgICAgY29uc3QgbW91c2VQb3M6IFZlY3RvcjIgPSBldmVudCA/IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KSA6IHRoaXMuX21vdXNlUG9zaXRpb247XHJcbiAgICAgIGxldCBjYW52YXM6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGNhbnZhcyA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbi5zZXQobW91c2VQb3MueCAtIChjYW52YXMgPyBjYW52YXMub2Zmc2V0TGVmdCA6IDApLCBtb3VzZVBvcy55IC0gKGNhbnZhcyA/IGNhbnZhcy5vZmZzZXRUb3AgOiAwKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5fb2xkTW91c2VQb3NpdGlvbi54ICE9PSBtb3VzZVBvcy54ICYmIHRoaXMuX29sZE1vdXNlUG9zaXRpb24ueSAhPT0gbW91c2VQb3MueSkge1xyXG4gICAgICAgIHRoaXMuX21vdXNlTW92ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuX21vdXNlRG93bikge1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUludGVyc2VjdGlvbnMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuaW50ZXJzZWN0ZWRXYWxsID0gdGhpcy5fd2FsbEludGVyc2VjdGlvbih0aGlzLl9tb3VzZVBvc2l0aW9uKTtcclxuICAgICAgICB0aGlzLl9kcmFnQW5kRHJvcFNlcnZpY2UuaW50ZXJzZWN0ZWRGbG9vciA9IHRoaXMuX2Zsb29ySW50ZXJzZWN0aW9uKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5yb3RhdGVOb0RyYWcpIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlVOU0VMRUNURUQ6XHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVNb3VzZW92ZXIoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX21vdXNlRG93biAmJiB0aGlzLl9tb3VzZU1vdmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2h1ZFNlcnZpY2UuY2FtZXJhUm90YXRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZU1vdXNlb3ZlcigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRVhQTE9SRTpcclxuICAgICAgICAgIHRoaXMuX2h1ZFNlcnZpY2Uuc3RvcEV4cGxvcmUoKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9tb3VzZURvd24pIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0Q3Vyc29yU3R5bGUoJ21vdmUnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4cGxvcmVQcmVzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fbW91c2VvdmVyT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRXhwbG9yZVBvaW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HOlxyXG4gICAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlJPVEFUSU5HOlxyXG4gICAgICAgICAgdGhpcy5fY2xpY2tEcmFnZ2VkKCk7XHJcbiAgICAgICAgICB0aGlzLl9tYXJrU2NlbmVUb1VwZGF0ZSgpO1xyXG4gICAgICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLm9iamVjdE1vdmluZ09yUm90YXRpbmcubmV4dCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkdDT05ORUNUT1I6XHJcbiAgICAgICAgICB0aGlzLl9kcmFnQ29ubmVjdG9yKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRXhwbG9yZVBvaW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLl9wb2ludE9uRmxvb3IodGhpcy5fbW91c2VQb3NpdGlvbik7XHJcbiAgICBpZiAocG9pbnQpIHtcclxuICAgICAgdGhpcy5fc2V0Q3Vyc29yU3R5bGUoJ3BvaW50ZXInKTtcclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLl9jYW1lcmEucG9zaXRpb24uZGlzdGFuY2VUbyhwb2ludCk7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UuZXhwbG9yZUZsb29ySG92ZXIodGhpcy5fbW91c2VQb3NpdGlvbiwgcG9pbnQsIGRpc3RhbmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKCdjcm9zc2hhaXInKTtcclxuICAgICAgdGhpcy5faHVkU2VydmljZS5zdG9wRXhwbG9yZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRXhwbG9yZUluZGljYXRvcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2h1ZFNlcnZpY2Uuc3RvcEV4cGxvcmUoKTtcclxuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5fcG9pbnRPbkZsb29yKHRoaXMuX21vdXNlUG9zaXRpb24pO1xyXG4gICAgaWYgKHBvaW50KSB7XHJcbiAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKCdwb2ludGVyJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZXRDdXJzb3JTdHlsZSgnY3Jvc3NoYWlyJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hY2NlcHREcm9wKGV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0KSB7XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVsZWFzZVN0YXRlKGRyYWdnZWREYXRhKTogdm9pZCB7XHJcbiAgICBpZiAoZHJhZ2dlZERhdGEgJiYgZHJhZ2dlZERhdGEuaXNDb3B5KSB7XHJcbiAgICAgIHRoaXMuX3N3aXRjaFN0YXRlKFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zd2l0Y2hTdGF0ZShTY2VuZUV2ZW50U3RhdGUuVU5TRUxFQ1RFRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRUb0l0ZW1Hcm91cChvYmplY3Q6IEl0ZW0sIHByZXZTZWxlY3RlZE9iamVjdD86IGFueSkge1xyXG4gICAgbGV0IGlzSW50ZXJzZWN0V2l0aEdyb3VwTWVtYmVyOiBib29sZWFuO1xyXG4gICAgaWYgKG9iamVjdCAmJiBvYmplY3QucGFyZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGlzSW50ZXJzZWN0V2l0aEdyb3VwTWVtYmVyID0gb2JqZWN0IGluc3RhbmNlb2YgSXRlbUdyb3VwIHx8IG9iamVjdC5wYXJlbnQgaW5zdGFuY2VvZiBJdGVtR3JvdXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc0ludGVyc2VjdFdpdGhHcm91cE1lbWJlciA9IG9iamVjdCBpbnN0YW5jZW9mIEl0ZW1Hcm91cDtcclxuICAgIH1cclxuICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LmNvbmZpZ3VyaW5nICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICghaXNJbnRlcnNlY3RXaXRoR3JvdXBNZW1iZXIgJiYgIW9iamVjdC5jb25maWd1cmluZyAmJiB0aGlzLl9jYW5Hcm91cEl0ZW1zKG9iamVjdCwgcHJldlNlbGVjdGVkT2JqZWN0KSkge1xyXG4gICAgICAgIGlmIChwcmV2U2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UuYWRkSWZOb3RFeGlzdChwcmV2U2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLmFkZE9yUmVtb3ZlSWZFeGlzdChvYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYW5Hcm91cEZsb29ySXRlbShpdGVtOiBJdGVtKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0pIHx8IChpdGVtIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSAmJiAhKGl0ZW0gYXMgQ3VzdG9tV2FsbEZsb29ySXRlbSkuY3VycmVudFdhbGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FuR3JvdXBXYWxsSXRlbShpdGVtOiBJdGVtKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKChpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0gJiYgIShpdGVtIGluc3RhbmNlb2YgSW5XYWxsSXRlbSkpIHx8XHJcbiAgICAgIChpdGVtIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSAmJiAoaXRlbSBhcyBDdXN0b21XYWxsRmxvb3JJdGVtKS5jdXJyZW50V2FsbCAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYW5Hcm91cEl0ZW1zKG5ld0l0ZW06IEl0ZW0sIHByZXZpb3VzSXRlbTogSXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nhbkdyb3VwV2FsbEl0ZW0obmV3SXRlbSkgJiYgdGhpcy5fY2FuR3JvdXBXYWxsSXRlbShwcmV2aW91c0l0ZW0pICYmXHJcbiAgICAgIChuZXdJdGVtIGFzIFdhbGxJdGVtKS5jdXJyZW50V2FsbCA9PT0gKHByZXZpb3VzSXRlbSBhcyBXYWxsSXRlbSkuY3VycmVudFdhbGwgfHxcclxuICAgICAgdGhpcy5fY2FuR3JvdXBGbG9vckl0ZW0obmV3SXRlbSkgJiYgdGhpcy5fY2FuR3JvdXBGbG9vckl0ZW0ocHJldmlvdXNJdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N3aXRjaFN0YXRlKG5ld1N0YXRlOiBTY2VuZUV2ZW50U3RhdGUpOiB2b2lkIHtcclxuICAgIGlmIChuZXdTdGF0ZSAhPT0gdGhpcy5fc3RhdGUpIHtcclxuICAgICAgdGhpcy5fb25FeGl0KHRoaXMuX3N0YXRlKTtcclxuICAgICAgdGhpcy5fb25FbnRyeShuZXdTdGF0ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zdGF0ZSA9IG5ld1N0YXRlO1xyXG4gICAgdGhpcy5faHVkU2VydmljZS5zZXRSb3RhdGluZyh0aGlzLl9pc1JvdGF0aW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25FbnRyeShvblN0YXRlOiBTY2VuZUV2ZW50U3RhdGUpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAob25TdGF0ZSkge1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEOlxyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPYmplY3QobnVsbCk7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLlNFTEVDVEVEOlxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5ST1RBVElORzpcclxuICAgICAgICB0aGlzLl9jb250cm9scy5lbmFibGVkID0gdGhpcy5fYXBwU2VydmljZS5za3U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkRSQUdHSU5HOlxyXG4gICAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKCdtb3ZlJyk7XHJcbiAgICAgICAgdGhpcy5fY2xpY2tQcmVzc2VkKCk7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5EUkFHR0lOR0NPTk5FQ1RPUjpcclxuICAgICAgICB0aGlzLl9jbGlja0Nvbm5lY3RvclByZXNzZWQoKTtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkVYUExPUkU6XHJcbiAgICAgICAgdGhpcy5fb3ZlcnJpZGVEZWZhdWx0Q3Vyc29yU3R5bGUoJ3BvaW50ZXInKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkT2JqZWN0KG51bGwpO1xyXG4gICAgICAgIHRoaXMuX2NhbWVyYU1vdmVTdWIgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlRXhwbG9yZUluZGljYXRvcigpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uRXhpdChvblN0YXRlOiBTY2VuZUV2ZW50U3RhdGUpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAob25TdGF0ZSkge1xyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5VTlNFTEVDVEVEOlxyXG4gICAgICBjYXNlIFNjZW5lRXZlbnRTdGF0ZS5TRUxFQ1RFRDpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuRFJBR0dJTkc6XHJcbiAgICAgICAgdGhpcy5fc2V0Q3Vyc29yU3R5bGUodGhpcy5fZGVmYXVsdEN1cnNvclN0eWxlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTY2VuZUV2ZW50U3RhdGUuUk9UQVRJTkc6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU2NlbmVFdmVudFN0YXRlLkVYUExPUkU6XHJcbiAgICAgICAgdGhpcy5fb3ZlcnJpZGVEZWZhdWx0Q3Vyc29yU3R5bGUoJ2F1dG8nKTtcclxuICAgICAgICB0aGlzLl9odWRTZXJ2aWNlLnN0b3BFeHBsb3JlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbWVyYU1vdmVTdWIpIHtcclxuICAgICAgICAgIHRoaXMuX2NhbWVyYU1vdmVTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRJbnRlcnNlY3RlZE9iamVjdChtZXNoOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ludGVyc2VjdGVkTWVzaCA9IG1lc2g7XHJcbiAgICBpZiAodHlwZW9mIG1lc2hbJ2dldFJvb3QnXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCA9IG1lc2guZ2V0Um9vdCgpO1xyXG4gICAgfSBlbHNlIGlmIChtZXNoLnBhcmVudCkge1xyXG4gICAgICB0aGlzLl9zZXRJbnRlcnNlY3RlZE9iamVjdChtZXNoLnBhcmVudCBhcyBJdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFJldmVydGVkIGNoYW5nZXMgZnJvbSBJT05FLTMxMzk5XHJcbiAgcHJpdmF0ZSBfbW91c2VUb1ZlYzModmVjMjogVmVjdG9yMik6IFZlY3RvcjMge1xyXG4gICAgY29uc3QgcmVuZGVyZXJFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcclxuICAgIGNvbnN0IG1Qb3NpdGlvbiA9IG5ldyBWZWN0b3IyKFxyXG4gICAgICAodmVjMi54IC8gcmVuZGVyZXJFbGVtZW50LmNsaWVudFdpZHRoKSAqIDIgLSAxLFxyXG4gICAgICAtKHZlYzIueSAvIHJlbmRlcmVyRWxlbWVudC5jbGllbnRIZWlnaHQpICogMiArIDFcclxuICAgICk7XHJcbiAgICBjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMyhtUG9zaXRpb24ueCwgbVBvc2l0aW9uLnksIDAuNSk7XHJcbiAgICB2ZWN0b3IudW5wcm9qZWN0KHRoaXMuX2NhbWVyYSk7XHJcbiAgICByZXR1cm4gdmVjdG9yO1xyXG5cclxuICAgIC8vIGNvbnN0IHJlbmRlcmVyRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XHJcbiAgICAvLyBjb25zdCBtUG9zaXRpb24gPSBuZXcgVmVjdG9yMihcclxuICAgIC8vICAgKHZlYzIueCAvIHJlbmRlcmVyRWxlbWVudC5jbGllbnRXaWR0aCkgKiAyIC0gMSxcclxuICAgIC8vICAgLSh2ZWMyLnkgLyByZW5kZXJlckVsZW1lbnQuY2xpZW50SGVpZ2h0KSAqIDIgKyAxXHJcbiAgICAvLyApO1xyXG4gICAgLy8gY29uc3QgdmVjdG9yID0gbmV3IFZlY3RvcjMobVBvc2l0aW9uLngsIG1Qb3NpdGlvbi55LCAwLjUpO1xyXG4gICAgLy8gdmVjdG9yLnVucHJvamVjdCh0aGlzLl9jYW1lcmEpO1xyXG4gICAgLy8gcmV0dXJuIHZlY3RvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFNlbGVjdE9iamVjdChvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXAsIG1lc2g/OiBNZXNoKTogdm9pZCB7XHJcbiAgICBvYmplY3Quc2V0U2VsZWN0ZWQobWVzaCwgdGhpcy5fbW91c2VUb1ZlYzModGhpcy5fbW91c2VQb3NpdGlvbikpO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRPYmplY3QgPSBvYmplY3Q7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkl0ZW1TZWxlY3RlZCwgb2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU1vdXNlb3ZlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlcnNlY3RlZE9iamVjdCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9tb3VzZW92ZXJPYmplY3QgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9tb3VzZW92ZXJPYmplY3QgIT09IHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRPYmplY3RNb3VzZU9mZih0aGlzLl9tb3VzZW92ZXJPYmplY3QpO1xyXG4gICAgICAgICAgdGhpcy5fbW91c2VvdmVyT2JqZWN0ID0gdGhpcy5faW50ZXJzZWN0ZWRPYmplY3Q7XHJcbiAgICAgICAgICB0aGlzLl9zZXRPYmplY3RNb3VzZU92ZXIodGhpcy5fbW91c2VvdmVyT2JqZWN0LCB0aGlzLl9pbnRlcnNlY3RlZE1lc2gpO1xyXG4gICAgICAgICAgdGhpcy5fbWFya1NjZW5lVG9VcGRhdGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gZG8gbm90aGluZywgbW91c2VvdmVyIGFscmVhZHkgc2V0XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX21vdXNlb3Zlck9iamVjdCA9IHRoaXMuX2ludGVyc2VjdGVkT2JqZWN0O1xyXG4gICAgICAgIHRoaXMuX3NldE9iamVjdE1vdXNlT3Zlcih0aGlzLl9tb3VzZW92ZXJPYmplY3QsIHRoaXMuX2ludGVyc2VjdGVkTWVzaCk7XHJcbiAgICAgICAgdGhpcy5fc2V0Q3Vyc29yU3R5bGUoJ3BvaW50ZXInKTtcclxuICAgICAgICB0aGlzLl9tYXJrU2NlbmVUb1VwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21vdXNlb3Zlck9iamVjdCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3NldE9iamVjdE1vdXNlT2ZmKHRoaXMuX21vdXNlb3Zlck9iamVjdCk7XHJcbiAgICAgIHRoaXMuX3NldEN1cnNvclN0eWxlKHRoaXMuX2RlZmF1bHRDdXJzb3JTdHlsZSk7XHJcbiAgICAgIHRoaXMuX21vdXNlb3Zlck9iamVjdCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX21hcmtTY2VuZVRvVXBkYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRPYmplY3RNb3VzZU92ZXIob2JqZWN0OiBJdGVtR3JvdXAgfCBJdGVtLCBtZXNoOiBNZXNoKTogdm9pZCB7XHJcbiAgICBpZiAob2JqZWN0LnBhcmVudCAmJiBvYmplY3QucGFyZW50IGluc3RhbmNlb2YgSXRlbUdyb3VwKSB7XHJcbiAgICAgIG9iamVjdC5wYXJlbnQubW91c2VPdmVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3QubW91c2VPdmVyKG1lc2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0T2JqZWN0TW91c2VPZmYob2JqZWN0OiBJdGVtR3JvdXAgfCBJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAob2JqZWN0LnBhcmVudCAmJiBvYmplY3QucGFyZW50IGluc3RhbmNlb2YgSXRlbUdyb3VwKSB7XHJcbiAgICAgIG9iamVjdC5wYXJlbnQubW91c2VPZmYoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iamVjdC5tb3VzZU9mZigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWFya1NjZW5lVG9VcGRhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0Q3Vyc29yU3R5bGUoc3R5bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5jdXJzb3IgPSBzdHlsZTtcclxuICB9XHJcbn1cclxuIl19
|