@vendasta/meetings 1.15.0 → 1.15.1

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.
@@ -136,6 +136,23 @@ export class GuestService {
136
136
  return [];
137
137
  }));
138
138
  }
139
+ // listBatchAvailableTimeSlotsForReschedule returns valid chain start times for rescheduling an
140
+ // existing meeting or booking group (id is a meeting_id or BG- group id). Config is resolved from
141
+ // the booked record(s) rather than the current event-type settings.
142
+ listBatchAvailableTimeSlotsForReschedule(req) {
143
+ return this.guestAPIService.listBatchAvailableTimeSlotsForReschedule(req).pipe(map((resp) => {
144
+ if (resp.timeSlots?.length) {
145
+ return resp.timeSlots.map((ts) => TimeSpanFromApi(ts));
146
+ }
147
+ if (resp.isoTimeSlots?.length) {
148
+ return resp.isoTimeSlots.map((iso) => ({
149
+ start: new Date(iso.start),
150
+ end: new Date(iso.end),
151
+ }));
152
+ }
153
+ return [];
154
+ }));
155
+ }
139
156
  bookBatchMeeting(req) {
140
157
  return this.guestAPIService.bookBatchMeeting({
141
158
  ...req,
@@ -155,4 +172,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
155
172
  type: Injectable,
156
173
  args: [{ providedIn: "root" }]
157
174
  }], ctorParameters: function () { return [{ type: i1.MeetingGuestApiService }]; } });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Vlc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lZXRpbmdzX3Nkay9zcmMvbGliL2d1ZXN0L2d1ZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBUUwsc0JBQXNCLEdBa0J2QixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUVmLFdBQVcsRUFJWCxrQkFBa0IsRUFFbEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQXVEeEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsZUFBdUM7UUFBdkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO0lBQUcsQ0FBQztJQUUvRCxjQUFjLENBQUMsR0FNZDtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNsRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUM5QixPQUFPLEVBQWlCLENBQUM7YUFDMUI7WUFDRCxPQUFPLGtCQUFrQixDQUFDO2dCQUN4QixXQUFXLEVBQUUsa0JBQWtCLEVBQUU7b0JBQy9CLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSTtvQkFDbEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNwQixVQUFVLEVBQUUsR0FBRyxDQUFDLFlBQVk7Z0JBQzVCLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDaEMsUUFBUSxFQUFF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QUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDMUIsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQ3ZCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FZaEI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDM0MsR0FBRyxHQUFHO1lBQ04sV0FBVyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQU10QjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELHVCQUF1QixDQUFDLEdBT3ZCO1FBQ0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7O3lHQTlTVSxZQUFZOzZHQUFaLFlBQVksY0FEQyxNQUFNOzJGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgQ2FsZW5kYXJJbnRlcmZhY2UsXG4gIENvbnRhY3QsXG4gIEdldEdyb3VwUmVzcG9uc2UsXG4gIEdldEdyb3VwVjJSZXNwb25zZSxcbiAgR2V0U2VydmljZVYyUmVzcG9uc2UsXG4gIEd1ZXN0SXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlLFxuICBHZXRTZXNzaW9uTWVldGluZ1Jlc3BvbnNlLFxuICBNZWV0aW5nR3Vlc3RBcGlTZXJ2aWNlLFxuICBNZWV0aW5nTG9jYXRpb25UeXBlLFxuICBUZWFtRXZlbnRNZWV0aW5nVHlwZSxcbiAgVGltZVpvbmVJbnRlcmZhY2UsXG4gIENvbnRhY3RJbnRlcmZhY2UsXG4gIEFuc3dlcnNJbnRlcmZhY2UsXG4gIEdldFNlc3Npb25JbnZpdGVlTWVldGluZ0luZm9SZXNwb25zZSxcbiAgR3Vlc3RHZXRCb29rZWRNZWV0aW5nUmVzcG9uc2VWMixcbiAgQm9va2luZ1NvdXJjZSxcbiAgQ2hlY2tGZWF0dXJlRmxhZ1JlcXVlc3QsXG4gIENoZWNrRmVhdHVyZUZsYWdSZXNwb25zZSxcbiAgRmVhdHVyZUZsYWdGaWVsZFR5cGUsXG4gIEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZSxcbiAgQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2UsXG4gIEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZSxcbiAgTGlzdEd1ZXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSxcbiAgUGhvbmVGaWVsZHNJbnRlcmZhY2UsXG4gIExpc3RNZWV0aW5nVHlwZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4uL19pbnRlcm5hbFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAsIG1hcFRvIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuICBhbnN3ZXJzVG9BUEksXG4gIENhbGVuZGFyRnJvbUFwaSxcbiAgSG9zdCxcbiAgSG9zdEZyb21BcGksXG4gIE1lZXRpbmdGb3JtLFxuICBNZWV0aW5nTWV0YWRhdGEsXG4gIE1lZXRpbmdUeXBlLFxuICBNZWV0aW5nVHlwZUZyb21BcGksXG4gIFRpbWVTcGFuLFxuICBUaW1lU3BhbkZyb21BcGksXG59IGZyb20gXCIuLi9zaGFyZWRcIjtcbmltcG9ydCB7IEVudmlyb25tZW50LCBvblByb2R1Y3Rpb25HbG9iYWwgfSBmcm9tIFwiLi4vc2hhcmVkL2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBHZXRTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tIFwiLi4vX2ludGVybmFsL29iamVjdHMvbWVldGluZy1ndWVzdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tNZWV0aW5nUmVzcG9uc2Uge1xuICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgaG9zdElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0TWVldGluZ0NhbGVuZGFySW5mb1JlcXVlc3Qge1xuICBtZWV0aW5nSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRNZWV0aW5nQ2FsZW5kYXJJbmZvUmVzcG9uc2Uge1xuICBnb29nbGVDYWxlbmRhckxpbms6IHN0cmluZztcbiAgb3V0bG9va0NhbGVuZGFyTGluazogc3RyaW5nO1xuICBsaW5rUmVhZHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9va1Nlc3Npb25SZXNwb25zZSB7XG4gIG1lZXRpbmdJZDogc3RyaW5nO1xuICBib29raW5nVXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9va2VkTWVldGluZ0luZm8ge1xuICBzdGFydDogRGF0ZTtcbiAgZW5kOiBEYXRlO1xuICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgbG9jYXRpb246IHN0cmluZztcbiAgbG9jYXRpb25HdWlkZWxpbmU6IHN0cmluZztcbiAgbG9jYXRpb25UeXBlOiBNZWV0aW5nTG9jYXRpb25UeXBlO1xuICBtZWV0aW5nVHlwZTogVGVhbUV2ZW50TWVldGluZ1R5cGU7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNhbGVuZGFySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHdWVzdFNlcnZpY2VJbnRlcmZhY2Uge1xuICBnZXRCb29rZWRNZWV0aW5nSW5mbyhcbiAgICBtZWV0aW5nSWQ6IHN0cmluZyxcbiAgICBhdXRoVG9rZW46IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxCb29rZWRNZWV0aW5nSW5mbz47XG5cbiAgbGlzdE1lZXRpbmdUeXBlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICB0aW1lWm9uZT86IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgc2x1Zz86IHN0cmluZztcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RNZWV0aW5nVHlwZXNSZXNwb25zZT47XG5cbiAgaXNIb3N0Q29uZmlndXJlZChyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBHdWVzdFNlcnZpY2UgaW1wbGVtZW50cyBHdWVzdFNlcnZpY2VJbnRlcmZhY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGd1ZXN0QVBJU2VydmljZTogTWVldGluZ0d1ZXN0QXBpU2VydmljZSkge31cblxuICBnZXRNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBjYWxlbmRhclNsdWc6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZVNsdWc6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHVuaXF1ZVJlcXVlc3RJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UuZ2V0TWVldGluZ1R5cGUocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmICghcmVzcCB8fCAhcmVzcC5tZWV0aW5nVHlwZSkge1xuICAgICAgICAgIHJldHVybiB7fSBhcyBNZWV0aW5nVHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgIGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICAgICAgbWVldGluZ1R5cGVBcGk6IHJlc3AubWVldGluZ1R5cGUsXG4gICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGxpc3RNZWV0aW5nVHlwZXMocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gICAgLy8gZGVwcmVjYXRlZDogdW51c2VkIGZpZWxkLlxuICAgIHRpbWVab25lPzogVGltZVpvbmVJbnRlcmZhY2U7XG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nO1xuXG4gIH0pOiBPYnNlcnZhYmxlPExpc3RNZWV0aW5nVHlwZXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5saXN0TWVldGluZ1R5cGVzKHJlcSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmxlVGltZVNsb3RzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICB0aW1lU3BhbjogVGltZVNwYW47XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8VGltZVNwYW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZVxuICAgICAgLmxpc3RBdmFpbGFibGVUaW1lU2xvdHMocmVxKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcCkgPT5cbiAgICAgICAgICByZXNwLnRpbWVTbG90cyA/IHJlc3AudGltZVNsb3RzLm1hcCgodHMpID0+IFRpbWVTcGFuRnJvbUFwaSh0cykpIDogW10sXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgYm9va01lZXRpbmcocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgbWVldGluZ1R5cGVJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGNvbW1lbnQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IE1lZXRpbmdNZXRhZGF0YTtcbiAgICBhdHRlbmRlZXM6IChPbWl0PFxuICAgICAgQ29udGFjdCxcbiAgICAgIFwiZnJvbVByb3RvXCIgfCBcInRvQXBpSnNvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJ0aW1lWm9uZVwiXG4gICAgPiAmIHsgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlIH0pW107XG4gICAgZm9ybUFuc3dlcnM/OiBNZWV0aW5nRm9ybTtcbiAgICByZWNhcHRjaGFUb2tlbjogc3RyaW5nO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgICBoYXNTbXNDb25zZW50PzogYm9vbGVhbjtcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEJvb2tNZWV0aW5nUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UuYm9va01lZXRpbmcoe1xuICAgICAgLi4ucmVxLFxuICAgICAgYXR0ZW5kZWVzOiByZXEuYXR0ZW5kZWVzLFxuICAgICAgZm9ybUFuc3dlcnM6IGFuc3dlcnNUb0FQSShyZXEuZm9ybUFuc3dlcnMpLFxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsTWVldGluZyhyZXE6IHtcbiAgICBhdXRoVG9rZW46IHN0cmluZztcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBjYW5jZWxsYXRpb25SZWFzb246IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5jYW5jZWxNZWV0aW5nKHJlcSkucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICByZXNjaGVkdWxlTWVldGluZyhyZXE6IHtcbiAgICBhdXRoVG9rZW46IHN0cmluZztcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICB0aW1lWm9uZT86IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLnJlc2NoZWR1bGVNZWV0aW5nKHJlcSkucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICAvLyBnZXRIb3N0IHJldHVybnMgYW4gaW5kaXZpZHVhbCBob3N0IGJ5IHRoZWlyIGhvc3RJZFxuICBnZXRIb3N0KHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxIb3N0PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0SG9zdChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3ApID0+IEhvc3RGcm9tQXBpKHJlc3AuaG9zdCkpKTtcbiAgfVxuXG4gIC8vIGdldENhbGVuZGFyIHJldHVybnMgYSBDYWxlbmRhciwgd2hpY2ggbWF5IHJlcHJlc2VudCBhbiBpbmRpdmlkdWFsIGhvc3QgT1IgYSBncm91cGluZyBvZiBob3N0cyAoSS5lLiwgYSB0ZWFtKVxuICBnZXRDYWxlbmRhcihyZXE6IHsgY2FsZW5kYXJJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPENhbGVuZGFySW50ZXJmYWNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0Q2FsZW5kYXIocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXNwKSA9PiBDYWxlbmRhckZyb21BcGkocmVzcC5jYWxlbmRhcikpKTtcbiAgfVxuXG4gIGdldEJvb2tlZE1lZXRpbmdJbmZvKFxuICAgIG1lZXRpbmdJZDogc3RyaW5nLFxuICAgIGF1dGhUb2tlbjogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPEJvb2tlZE1lZXRpbmdJbmZvPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0R3Vlc3RCb29rZWRNZWV0aW5nKHtcbiAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWQsXG4gICAgICAgIGF1dGhUb2tlbjogYXV0aFRva2VuLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoXG4gICAgICAgICAgKHJlc3ApID0+XG4gICAgICAgICAgICA8Qm9va2VkTWVldGluZ0luZm8+e1xuICAgICAgICAgICAgICBzdGFydDogcmVzcC5zdGFydFRpbWUsXG4gICAgICAgICAgICAgIGVuZDogcmVzcC5lbmRUaW1lLFxuICAgICAgICAgICAgICB0aW1lWm9uZTogcmVzcC50aW1lWm9uZSxcbiAgICAgICAgICAgICAgbWVldGluZ1R5cGVJZDogcmVzcC5tZWV0aW5nVHlwZUlkLFxuICAgICAgICAgICAgICBsb2NhdGlvbjogcmVzcC5sb2NhdGlvbixcbiAgICAgICAgICAgICAgbG9jYXRpb25HdWlkZWxpbmU6IHJlc3AubG9jYXRpb25HdWlkZWxpbmUsXG4gICAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcmVzcC5sb2NhdGlvblR5cGUsXG4gICAgICAgICAgICAgIG1lZXRpbmdUeXBlOiByZXNwLm1lZXRpbmdUeXBlLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogcmVzcC5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgY2FsZW5kYXJJZDogcmVzcC5jYWxlbmRhcklkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gIH1cblxuICBnZXRHdWVzdEJvb2tlZE1lZXRpbmdWMihyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxHdWVzdEdldEJvb2tlZE1lZXRpbmdSZXNwb25zZVYyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldEd1ZXN0Qm9va2VkTWVldGluZ1YyKHJlcSk7XG4gIH1cblxuICBjYW5jZWxCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjYW5jZWxsYXRpb25SZWFzb24/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UuY2FuY2VsQmF0Y2hNZWV0aW5nKHJlcSkucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBpc0hvc3RDb25maWd1cmVkKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlXG4gICAgICAuaXNIb3N0Q29uZmlndXJlZChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3A6IEd1ZXN0SXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlKSA9PiByZXNwLmlzQ29uZmlndXJlZCkpO1xuICB9XG4gIGdldEdyb3VwKHJlcToge1xuICAgIGdyb3VwSWQ6IHN0cmluZztcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgdW5pcXVlUmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldEdyb3VwKHJlcSk7XG4gIH1cbiAgZ2V0R3JvdXBWMihyZXE6IHtcbiAgICBncm91cElkOiBzdHJpbmc7XG4gICAgdW5pcXVlUmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRHcm91cFYyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UuZ2V0R3JvdXBWMihyZXEpO1xuICB9XG4gIGdldFNlcnZpY2UocmVxOiB7XG4gICAgc2VydmljZUlkOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIHVuaXF1ZVJlcXVlc3RJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8R2V0U2VydmljZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldFNlcnZpY2UocmVxKTtcbiAgfVxuXG4gIGdldFNlc3Npb25NZWV0aW5nSW5mbyhyZXE6IHtcbiAgICBzZXNzaW9uTWVldGluZ0lkOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRTZXNzaW9uTWVldGluZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldFNlc3Npb25NZWV0aW5nSW5mbyhyZXEpO1xuICB9XG5cbiAgaW52aXRlZVJlZ2lzdGVyU2Vzc2lvbk1lZXRpbmcocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgYXR0ZW5kZWU6IENvbnRhY3RJbnRlcmZhY2U7XG4gICAgY29tbWVudDogc3RyaW5nO1xuICAgIGZvcm1BbnN3ZXJzOiBBbnN3ZXJzSW50ZXJmYWNlO1xuICAgIHJlY2FwdGNoYVRva2VuOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2VcbiAgICAgIC5pbnZpdGVlUmVnaXN0ZXJTZXNzaW9uTWVldGluZyhyZXEpXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBnZXRTZXNzaW9uSW52aXRlZU1lZXRpbmdJbmZvKHJlcToge1xuICAgIHNlc3Npb25JbnZpdGVlSWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0U2Vzc2lvbkludml0ZWVNZWV0aW5nSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldFNlc3Npb25JbnZpdGVlTWVldGluZ0luZm8ocmVxKTtcbiAgfVxuXG4gIGludml0ZWVEZXJlZ2lzdGVyU2Vzc2lvbk1lZXRpbmcocmVxOiB7XG4gICAgc2Vzc2lvbkludml0ZWVJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlXG4gICAgICAuaW52aXRlZURlcmVnaXN0ZXJTZXNzaW9uTWVldGluZyhyZXEpXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBnZXRNZWV0aW5nQ2FsZW5kYXJJbmZvKFxuICAgIHJlcTogR2V0TWVldGluZ0NhbGVuZGFySW5mb1JlcXVlc3QsXG4gICk6IE9ic2VydmFibGU8R2V0TWVldGluZ0NhbGVuZGFySW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldE1lZXRpbmdDYWxlbmRhckluZm8ocmVxKTtcbiAgfVxuXG4gIGNoZWNrRmVhdHVyZUZsYWcocmVxOiB7XG4gICAgZmllbGRUeXBlOiBGZWF0dXJlRmxhZ0ZpZWxkVHlwZTtcbiAgICBmaWVsZFZhbHVlOiBzdHJpbmc7XG4gICAgZmVhdHVyZUZsYWdLZXk6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8Q2hlY2tGZWF0dXJlRmxhZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmNoZWNrRmVhdHVyZUZsYWcocmVxKTtcbiAgfVxuXG4gIGdldFNlcnZpY2VWMihyZXE6IHtcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPEdldFNlcnZpY2VWMlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldFNlcnZpY2VWMihyZXEpO1xuICB9XG5cbiAgbGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzKHJlcToge1xuICAgIHRhcmdldHM6IEJhdGNoRXZlbnRUeXBlVGFyZ2V0SW50ZXJmYWNlW107XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8VGltZVNwYW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5saXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmIChyZXNwLnRpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3AudGltZVNsb3RzLm1hcCgodHMpID0+IFRpbWVTcGFuRnJvbUFwaSh0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwLmlzb1RpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3AuaXNvVGltZVNsb3RzLm1hcCgoaXNvKSA9PiAoe1xuICAgICAgICAgICAgc3RhcnQ6IG5ldyBEYXRlKGlzby5zdGFydCksXG4gICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGlzby5lbmQpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgYm9va0JhdGNoTWVldGluZyhyZXE6IHtcbiAgICB0YXJnZXRzOiBCYXRjaEJvb2tpbmdUYXJnZXRJbnRlcmZhY2VbXTtcbiAgICBzdGFydDogRGF0ZTtcbiAgICBhdHRlbmRlZXM/OiBDb250YWN0SW50ZXJmYWNlW107XG4gICAgY29tbWVudD86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgZm9ybUFuc3dlcnM/OiBNZWV0aW5nRm9ybTtcbiAgICByZWNhcHRjaGFUb2tlbjogc3RyaW5nO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICAgIGJvb2tpbmdPcmlnaW5JZD86IHN0cmluZztcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5ib29rQmF0Y2hNZWV0aW5nKHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIGZvcm1BbnN3ZXJzOiBhbnN3ZXJzVG9BUEkocmVxLmZvcm1BbnN3ZXJzKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICB0aW1lWm9uZT86IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLnJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxKS5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIGxpc3RHdWVzdEJvb2tlZE1lZXRpbmdzKHJlcToge1xuICAgIHBob25lTnVtYmVyPzogUGhvbmVGaWVsZHNJbnRlcmZhY2U7XG4gICAgZW1haWw/OiBzdHJpbmc7XG4gICAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAgIHRpbWVTcGFuPzogVGltZVNwYW47XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICB1c2VJc29EYXRlcz86IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RHdWVzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UubGlzdEd1ZXN0Qm9va2VkTWVldGluZ3MocmVxKTtcbiAgfVxufVxuIl19
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Vlc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lZXRpbmdzX3Nkay9zcmMvbGliL2d1ZXN0L2d1ZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBUUwsc0JBQXNCLEdBa0J2QixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUVmLFdBQVcsRUFJWCxrQkFBa0IsRUFFbEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQXVEeEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsZUFBdUM7UUFBdkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO0lBQUcsQ0FBQztJQUUvRCxjQUFjLENBQUMsR0FNZDtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNsRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUM5QixPQUFPLEVBQWlCLENBQUM7YUFDMUI7WUFDRCxPQUFPLGtCQUFrQixDQUFDO2dCQUN4QixXQUFXLEVBQUUsa0JBQWtCLEVBQUU7b0JBQy9CLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSTtvQkFDbEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNwQixVQUFVLEVBQUUsR0FBRyxDQUFDLFlBQVk7Z0JBQzVCLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDaEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO2dCQUN0QixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQVNoQjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FNdEI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLHNCQUFzQixDQUFDLEdBQUcsQ0FBQzthQUMzQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDWCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEUsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVcsQ0FBQyxHQWlCWDtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7WUFDdEMsR0FBRyxHQUFHO1lBQ04sU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3hCLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBS2I7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FPakI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsT0FBTyxDQUFDLEdBQXVCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQzthQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCwrR0FBK0c7SUFDL0csV0FBVyxDQUFDLEdBQTJCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLFNBQWlCLEVBQ2pCLFNBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIscUJBQXFCLENBQUM7WUFDckIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQ0QsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLENBQW1CO1lBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQSxDQUNKLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxHQUV2QjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FJbEI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQzthQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBbUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELFFBQVEsQ0FBQyxHQUtSO1FBQ0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBSVY7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxVQUFVLENBQUMsR0FLVjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBR3JCO1FBQ0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxHQU03QjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsNkJBQTZCLENBQUMsR0FBRyxDQUFDO2FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsNEJBQTRCLENBQUMsR0FFNUI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELCtCQUErQixDQUFDLEdBRy9CO1FBQ0MsT0FBTyxJQUFJLENBQUMsZUFBZTthQUN4QiwrQkFBK0IsQ0FBQyxHQUFHLENBQUM7YUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxzQkFBc0IsQ0FDcEIsR0FBa0M7UUFFbEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUloQjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBSVo7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxHQUkzQjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDMUIsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQ3ZCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLGtHQUFrRztJQUNsRyxvRUFBb0U7SUFDcEUsd0NBQXdDLENBQUMsR0FJeEM7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsd0NBQXdDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDckMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0JBQzFCLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2lCQUN2QixDQUFDLENBQUMsQ0FBQzthQUNMO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBWWhCO1FBQ0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQzNDLEdBQUcsR0FBRztZQUNOLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FNdEI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxHQU92QjtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDOzt5R0F0VVUsWUFBWTs2R0FBWixZQUFZLGNBREMsTUFBTTsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIENhbGVuZGFySW50ZXJmYWNlLFxuICBDb250YWN0LFxuICBHZXRHcm91cFJlc3BvbnNlLFxuICBHZXRHcm91cFYyUmVzcG9uc2UsXG4gIEdldFNlcnZpY2VWMlJlc3BvbnNlLFxuICBHdWVzdElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZSxcbiAgR2V0U2Vzc2lvbk1lZXRpbmdSZXNwb25zZSxcbiAgTWVldGluZ0d1ZXN0QXBpU2VydmljZSxcbiAgTWVldGluZ0xvY2F0aW9uVHlwZSxcbiAgVGVhbUV2ZW50TWVldGluZ1R5cGUsXG4gIFRpbWVab25lSW50ZXJmYWNlLFxuICBDb250YWN0SW50ZXJmYWNlLFxuICBBbnN3ZXJzSW50ZXJmYWNlLFxuICBHZXRTZXNzaW9uSW52aXRlZU1lZXRpbmdJbmZvUmVzcG9uc2UsXG4gIEd1ZXN0R2V0Qm9va2VkTWVldGluZ1Jlc3BvbnNlVjIsXG4gIEJvb2tpbmdTb3VyY2UsXG4gIENoZWNrRmVhdHVyZUZsYWdSZXF1ZXN0LFxuICBDaGVja0ZlYXR1cmVGbGFnUmVzcG9uc2UsXG4gIEZlYXR1cmVGbGFnRmllbGRUeXBlLFxuICBCYXRjaEJvb2tpbmdUYXJnZXRJbnRlcmZhY2UsXG4gIEJhdGNoRXZlbnRUeXBlVGFyZ2V0SW50ZXJmYWNlLFxuICBCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UsXG4gIExpc3RHdWVzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2UsXG4gIFBob25lRmllbGRzSW50ZXJmYWNlLFxuICBMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2UsXG59IGZyb20gXCIuLi9faW50ZXJuYWxcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwLCBtYXBUbyB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtcbiAgYW5zd2Vyc1RvQVBJLFxuICBDYWxlbmRhckZyb21BcGksXG4gIEhvc3QsXG4gIEhvc3RGcm9tQXBpLFxuICBNZWV0aW5nRm9ybSxcbiAgTWVldGluZ01ldGFkYXRhLFxuICBNZWV0aW5nVHlwZSxcbiAgTWVldGluZ1R5cGVGcm9tQXBpLFxuICBUaW1lU3BhbixcbiAgVGltZVNwYW5Gcm9tQXBpLFxufSBmcm9tIFwiLi4vc2hhcmVkXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgb25Qcm9kdWN0aW9uR2xvYmFsIH0gZnJvbSBcIi4uL3NoYXJlZC9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgR2V0U2VydmljZVJlc3BvbnNlIH0gZnJvbSBcIi4uL19pbnRlcm5hbC9vYmplY3RzL21lZXRpbmctZ3Vlc3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCb29rTWVldGluZ1Jlc3BvbnNlIHtcbiAgbWVldGluZ0lkOiBzdHJpbmc7XG4gIGhvc3RJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldE1lZXRpbmdDYWxlbmRhckluZm9SZXF1ZXN0IHtcbiAgbWVldGluZ0lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0TWVldGluZ0NhbGVuZGFySW5mb1Jlc3BvbnNlIHtcbiAgZ29vZ2xlQ2FsZW5kYXJMaW5rOiBzdHJpbmc7XG4gIG91dGxvb2tDYWxlbmRhckxpbms6IHN0cmluZztcbiAgbGlua1JlYWR5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tTZXNzaW9uUmVzcG9uc2Uge1xuICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgYm9va2luZ1VybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tlZE1lZXRpbmdJbmZvIHtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gIGxvY2F0aW9uOiBzdHJpbmc7XG4gIGxvY2F0aW9uR3VpZGVsaW5lOiBzdHJpbmc7XG4gIGxvY2F0aW9uVHlwZTogTWVldGluZ0xvY2F0aW9uVHlwZTtcbiAgbWVldGluZ1R5cGU6IFRlYW1FdmVudE1lZXRpbmdUeXBlO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBjYWxlbmRhcklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3Vlc3RTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgZ2V0Qm9va2VkTWVldGluZ0luZm8oXG4gICAgbWVldGluZ0lkOiBzdHJpbmcsXG4gICAgYXV0aFRva2VuOiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8Qm9va2VkTWVldGluZ0luZm8+O1xuXG4gIGxpc3RNZWV0aW5nVHlwZXMocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHNsdWc/OiBzdHJpbmc7XG4gICAgdW5pcXVlUmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2U+O1xuXG4gIGlzSG9zdENvbmZpZ3VyZWQocmVxOiB7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgR3Vlc3RTZXJ2aWNlIGltcGxlbWVudHMgR3Vlc3RTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBndWVzdEFQSVNlcnZpY2U6IE1lZXRpbmdHdWVzdEFwaVNlcnZpY2UpIHt9XG5cbiAgZ2V0TWVldGluZ1R5cGUocmVxOiB7XG4gICAgY2FsZW5kYXJTbHVnOiBzdHJpbmc7XG4gICAgbWVldGluZ1R5cGVTbHVnOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPE1lZXRpbmdUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldE1lZXRpbmdUeXBlKHJlcSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3AgfHwgIXJlc3AubWVldGluZ1R5cGUpIHtcbiAgICAgICAgICByZXR1cm4ge30gYXMgTWVldGluZ1R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1lZXRpbmdUeXBlRnJvbUFwaSh7XG4gICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiByZXNwLm1lZXRpbmdUeXBlLFxuICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgY2FsZW5kYXJTbHVnOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBsaXN0TWVldGluZ1R5cGVzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgdW5pcXVlUmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICAgIC8vIGRlcHJlY2F0ZWQ6IHVudXNlZCBmaWVsZC5cbiAgICB0aW1lWm9uZT86IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcblxuICB9KTogT2JzZXJ2YWJsZTxMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UubGlzdE1lZXRpbmdUeXBlcyhyZXEpO1xuICB9XG5cbiAgbGlzdEF2YWlsYWJsZVRpbWVTbG90cyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPFRpbWVTcGFuW10+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2VcbiAgICAgIC5saXN0QXZhaWxhYmxlVGltZVNsb3RzKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+XG4gICAgICAgICAgcmVzcC50aW1lU2xvdHMgPyByZXNwLnRpbWVTbG90cy5tYXAoKHRzKSA9PiBUaW1lU3BhbkZyb21BcGkodHMpKSA6IFtdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgfVxuXG4gIGJvb2tNZWV0aW5nKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICBjb21tZW50OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiBNZWV0aW5nTWV0YWRhdGE7XG4gICAgYXR0ZW5kZWVzOiAoT21pdDxcbiAgICAgIENvbnRhY3QsXG4gICAgICBcImZyb21Qcm90b1wiIHwgXCJ0b0FwaUpzb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwidGltZVpvbmVcIlxuICAgID4gJiB7IHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZSB9KVtdO1xuICAgIGZvcm1BbnN3ZXJzPzogTWVldGluZ0Zvcm07XG4gICAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZztcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gICAgaGFzU21zQ29uc2VudD86IGJvb2xlYW47XG4gICAgdW5pcXVlUmVxdWVzdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxCb29rTWVldGluZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmJvb2tNZWV0aW5nKHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIGF0dGVuZGVlczogcmVxLmF0dGVuZGVlcyxcbiAgICAgIGZvcm1BbnN3ZXJzOiBhbnN3ZXJzVG9BUEkocmVxLmZvcm1BbnN3ZXJzKSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbE1lZXRpbmcocmVxOiB7XG4gICAgYXV0aFRva2VuOiBzdHJpbmc7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uOiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UuY2FuY2VsTWVldGluZyhyZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgcmVzY2hlZHVsZU1lZXRpbmcocmVxOiB7XG4gICAgYXV0aFRva2VuOiBzdHJpbmc7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5yZXNjaGVkdWxlTWVldGluZyhyZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgLy8gZ2V0SG9zdCByZXR1cm5zIGFuIGluZGl2aWR1YWwgaG9zdCBieSB0aGVpciBob3N0SWRcbiAgZ2V0SG9zdChyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8SG9zdD4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXNwKSA9PiBIb3N0RnJvbUFwaShyZXNwLmhvc3QpKSk7XG4gIH1cblxuICAvLyBnZXRDYWxlbmRhciByZXR1cm5zIGEgQ2FsZW5kYXIsIHdoaWNoIG1heSByZXByZXNlbnQgYW4gaW5kaXZpZHVhbCBob3N0IE9SIGEgZ3JvdXBpbmcgb2YgaG9zdHMgKEkuZS4sIGEgdGVhbSlcbiAgZ2V0Q2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYWxlbmRhckludGVyZmFjZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZVxuICAgICAgLmdldENhbGVuZGFyKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcCkgPT4gQ2FsZW5kYXJGcm9tQXBpKHJlc3AuY2FsZW5kYXIpKSk7XG4gIH1cblxuICBnZXRCb29rZWRNZWV0aW5nSW5mbyhcbiAgICBtZWV0aW5nSWQ6IHN0cmluZyxcbiAgICBhdXRoVG9rZW46IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxCb29rZWRNZWV0aW5nSW5mbz4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZVxuICAgICAgLmdldEd1ZXN0Qm9va2VkTWVldGluZyh7XG4gICAgICAgIG1lZXRpbmdJZDogbWVldGluZ0lkLFxuICAgICAgICBhdXRoVG9rZW46IGF1dGhUb2tlbixcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChyZXNwKSA9PlxuICAgICAgICAgICAgPEJvb2tlZE1lZXRpbmdJbmZvPntcbiAgICAgICAgICAgICAgc3RhcnQ6IHJlc3Auc3RhcnRUaW1lLFxuICAgICAgICAgICAgICBlbmQ6IHJlc3AuZW5kVGltZSxcbiAgICAgICAgICAgICAgdGltZVpvbmU6IHJlc3AudGltZVpvbmUsXG4gICAgICAgICAgICAgIG1lZXRpbmdUeXBlSWQ6IHJlc3AubWVldGluZ1R5cGVJZCxcbiAgICAgICAgICAgICAgbG9jYXRpb246IHJlc3AubG9jYXRpb24sXG4gICAgICAgICAgICAgIGxvY2F0aW9uR3VpZGVsaW5lOiByZXNwLmxvY2F0aW9uR3VpZGVsaW5lLFxuICAgICAgICAgICAgICBsb2NhdGlvblR5cGU6IHJlc3AubG9jYXRpb25UeXBlLFxuICAgICAgICAgICAgICBtZWV0aW5nVHlwZTogcmVzcC5tZWV0aW5nVHlwZSxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHJlc3AuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlc3AuY2FsZW5kYXJJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgZ2V0R3Vlc3RCb29rZWRNZWV0aW5nVjIocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R3Vlc3RHZXRCb29rZWRNZWV0aW5nUmVzcG9uc2VWMj4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRHdWVzdEJvb2tlZE1lZXRpbmdWMihyZXEpO1xuICB9XG5cbiAgY2FuY2VsQmF0Y2hNZWV0aW5nKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmNhbmNlbEJhdGNoTWVldGluZyhyZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgaXNIb3N0Q29uZmlndXJlZChyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZVxuICAgICAgLmlzSG9zdENvbmZpZ3VyZWQocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXNwOiBHdWVzdElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZSkgPT4gcmVzcC5pc0NvbmZpZ3VyZWQpKTtcbiAgfVxuICBnZXRHcm91cChyZXE6IHtcbiAgICBncm91cElkOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIHVuaXF1ZVJlcXVlc3RJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRHcm91cChyZXEpO1xuICB9XG4gIGdldEdyb3VwVjIocmVxOiB7XG4gICAgZ3JvdXBJZDogc3RyaW5nO1xuICAgIHVuaXF1ZVJlcXVlc3RJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8R2V0R3JvdXBWMlJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmdldEdyb3VwVjIocmVxKTtcbiAgfVxuICBnZXRTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2VJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPEdldFNlcnZpY2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRTZXJ2aWNlKHJlcSk7XG4gIH1cblxuICBnZXRTZXNzaW9uTWVldGluZ0luZm8ocmVxOiB7XG4gICAgc2Vzc2lvbk1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0U2Vzc2lvbk1lZXRpbmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRTZXNzaW9uTWVldGluZ0luZm8ocmVxKTtcbiAgfVxuXG4gIGludml0ZWVSZWdpc3RlclNlc3Npb25NZWV0aW5nKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGF0dGVuZGVlOiBDb250YWN0SW50ZXJmYWNlO1xuICAgIGNvbW1lbnQ6IHN0cmluZztcbiAgICBmb3JtQW5zd2VyczogQW5zd2Vyc0ludGVyZmFjZTtcbiAgICByZWNhcHRjaGFUb2tlbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlXG4gICAgICAuaW52aXRlZVJlZ2lzdGVyU2Vzc2lvbk1lZXRpbmcocmVxKVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgZ2V0U2Vzc2lvbkludml0ZWVNZWV0aW5nSW5mbyhyZXE6IHtcbiAgICBzZXNzaW9uSW52aXRlZUlkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEdldFNlc3Npb25JbnZpdGVlTWVldGluZ0luZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRTZXNzaW9uSW52aXRlZU1lZXRpbmdJbmZvKHJlcSk7XG4gIH1cblxuICBpbnZpdGVlRGVyZWdpc3RlclNlc3Npb25NZWV0aW5nKHJlcToge1xuICAgIHNlc3Npb25JbnZpdGVlSWQ6IHN0cmluZztcbiAgICBjYW5jZWxsYXRpb25SZWFzb246IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZVxuICAgICAgLmludml0ZWVEZXJlZ2lzdGVyU2Vzc2lvbk1lZXRpbmcocmVxKVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgZ2V0TWVldGluZ0NhbGVuZGFySW5mbyhcbiAgICByZXE6IEdldE1lZXRpbmdDYWxlbmRhckluZm9SZXF1ZXN0LFxuICApOiBPYnNlcnZhYmxlPEdldE1lZXRpbmdDYWxlbmRhckluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRNZWV0aW5nQ2FsZW5kYXJJbmZvKHJlcSk7XG4gIH1cblxuICBjaGVja0ZlYXR1cmVGbGFnKHJlcToge1xuICAgIGZpZWxkVHlwZTogRmVhdHVyZUZsYWdGaWVsZFR5cGU7XG4gICAgZmllbGRWYWx1ZTogc3RyaW5nO1xuICAgIGZlYXR1cmVGbGFnS2V5OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPENoZWNrRmVhdHVyZUZsYWdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5jaGVja0ZlYXR1cmVGbGFnKHJlcSk7XG4gIH1cblxuICBnZXRTZXJ2aWNlVjIocmVxOiB7XG4gICAgc2VydmljZUlkOiBzdHJpbmc7XG4gICAgdW5pcXVlUmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRTZXJ2aWNlVjJSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5nZXRTZXJ2aWNlVjIocmVxKTtcbiAgfVxuXG4gIGxpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90cyhyZXE6IHtcbiAgICB0YXJnZXRzOiBCYXRjaEV2ZW50VHlwZVRhcmdldEludGVyZmFjZVtdO1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFRpbWVTcGFuW10+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UubGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzKHJlcSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4ge1xuICAgICAgICBpZiAocmVzcC50aW1lU2xvdHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiByZXNwLnRpbWVTbG90cy5tYXAoKHRzKSA9PiBUaW1lU3BhbkZyb21BcGkodHMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcC5pc29UaW1lU2xvdHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiByZXNwLmlzb1RpbWVTbG90cy5tYXAoKGlzbykgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0OiBuZXcgRGF0ZShpc28uc3RhcnQpLFxuICAgICAgICAgICAgZW5kOiBuZXcgRGF0ZShpc28uZW5kKSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGxpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c0ZvclJlc2NoZWR1bGUgcmV0dXJucyB2YWxpZCBjaGFpbiBzdGFydCB0aW1lcyBmb3IgcmVzY2hlZHVsaW5nIGFuXG4gIC8vIGV4aXN0aW5nIG1lZXRpbmcgb3IgYm9va2luZyBncm91cCAoaWQgaXMgYSBtZWV0aW5nX2lkIG9yIEJHLSBncm91cCBpZCkuIENvbmZpZyBpcyByZXNvbHZlZCBmcm9tXG4gIC8vIHRoZSBib29rZWQgcmVjb3JkKHMpIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IGV2ZW50LXR5cGUgc2V0dGluZ3MuXG4gIGxpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c0ZvclJlc2NoZWR1bGUocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aW1lU3BhbjogVGltZVNwYW47XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxUaW1lU3BhbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLmxpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c0ZvclJlc2NoZWR1bGUocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmIChyZXNwLnRpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3AudGltZVNsb3RzLm1hcCgodHMpID0+IFRpbWVTcGFuRnJvbUFwaSh0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwLmlzb1RpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3AuaXNvVGltZVNsb3RzLm1hcCgoaXNvKSA9PiAoe1xuICAgICAgICAgICAgc3RhcnQ6IG5ldyBEYXRlKGlzby5zdGFydCksXG4gICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGlzby5lbmQpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgYm9va0JhdGNoTWVldGluZyhyZXE6IHtcbiAgICB0YXJnZXRzOiBCYXRjaEJvb2tpbmdUYXJnZXRJbnRlcmZhY2VbXTtcbiAgICBzdGFydDogRGF0ZTtcbiAgICBhdHRlbmRlZXM/OiBDb250YWN0SW50ZXJmYWNlW107XG4gICAgY29tbWVudD86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgZm9ybUFuc3dlcnM/OiBNZWV0aW5nRm9ybTtcbiAgICByZWNhcHRjaGFUb2tlbjogc3RyaW5nO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICAgIGJvb2tpbmdPcmlnaW5JZD86IHN0cmluZztcbiAgICB1bmlxdWVSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmd1ZXN0QVBJU2VydmljZS5ib29rQmF0Y2hNZWV0aW5nKHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIGZvcm1BbnN3ZXJzOiBhbnN3ZXJzVG9BUEkocmVxLmZvcm1BbnN3ZXJzKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICB0aW1lWm9uZT86IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3Vlc3RBUElTZXJ2aWNlLnJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxKS5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIGxpc3RHdWVzdEJvb2tlZE1lZXRpbmdzKHJlcToge1xuICAgIHBob25lTnVtYmVyPzogUGhvbmVGaWVsZHNJbnRlcmZhY2U7XG4gICAgZW1haWw/OiBzdHJpbmc7XG4gICAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAgIHRpbWVTcGFuPzogVGltZVNwYW47XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICB1c2VJc29EYXRlcz86IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RHdWVzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ndWVzdEFQSVNlcnZpY2UubGlzdEd1ZXN0Qm9va2VkTWVldGluZ3MocmVxKTtcbiAgfVxufVxuIl19
@@ -411,6 +411,22 @@ export class HostService {
411
411
  return [];
412
412
  }));
413
413
  }
414
+ // hostListBatchAvailableTimeSlotsForReschedule returns valid chain start times for rescheduling
415
+ // an existing meeting or booking group (id is a meeting_id or BG- group id). Config is resolved
416
+ // from the booked record(s) rather than the current event-type settings.
417
+ hostListBatchAvailableTimeSlotsForReschedule(req) {
418
+ return this.hostAPIService
419
+ .hostListBatchAvailableTimeSlotsForReschedule(req)
420
+ .pipe(map((resp) => {
421
+ if (resp.isoTimeSlots?.length) {
422
+ return resp.isoTimeSlots.map((iso) => ({
423
+ start: new Date(iso.start),
424
+ end: new Date(iso.end),
425
+ }));
426
+ }
427
+ return [];
428
+ }));
429
+ }
414
430
  // createDefaultMeetingTypes will create what Meeting Scheduler deems to be the default meeting types.
415
431
  // If the calendar already has meeting types, this is guaranteed to be a no-op.
416
432
  createDefaultMeetingTypes(req) {
@@ -659,4 +675,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
659
675
  type: Injectable,
660
676
  args: [{ providedIn: "root" }]
661
677
  }], ctorParameters: function () { return [{ type: i1.MeetingHostApiService }]; } });
662
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvaG9zdC9ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQXFCTCxnQ0FBZ0MsRUFJaEMscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUduQixTQUFTLEVBRVQsUUFBUSxHQVNULE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFDTCxZQUFZLEVBS1osZUFBZSxFQUVmLFlBQVksRUFFWixZQUFZLEVBQ1osY0FBYyxFQUlkLGNBQWMsRUFHZCxtQkFBbUIsRUFFbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGtDQUFrQyxHQUNuQyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBWSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUt4RSxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixjQUFxQztRQUFyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7SUFBRyxDQUFDO0lBRTdELGtIQUFrSDtJQUNsSCxXQUFXLENBQUMsR0FHWDtRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsV0FBVyxDQUFDO1lBQ1gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lB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SUFDckUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBSXJCO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O3dHQTE4QlUsV0FBVzs0R0FBWCxXQUFXLGNBREUsTUFBTTsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwLCBtYXBUbyB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtcbiAgQXZhaWxhYmlsaXR5UnVsZUxpc3QsXG4gIEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZSxcbiAgQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2UsXG4gIENoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3RSZXNwb25zZSxcbiAgQ29udGFjdEludGVyZmFjZSxcbiAgQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICBDcmVhdGVDYWxlbmRhclJlc3BvbnNlLFxuICBEYXlPZldlZWssXG4gIEdldEdyb3VwUmVzcG9uc2UsXG4gIEdldEhvc3RNZWV0aW5nUmVzcG9uc2UsXG4gIEdldE1lZXRpbmdTdGF0c1Jlc3BvbnNlLFxuICBHZXRTZXJ2aWNlUmVzcG9uc2UsXG4gIEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UsXG4gIEhvc3RCb29rTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UsXG4gIEhvc3RCb29rTWVldGluZ1Jlc3BvbnNlLFxuICBIb3N0TGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzUmVzcG9uc2UsXG4gIElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSxcbiAgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXNwb25zZSxcbiAgSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlLFxuICBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnNJbnRlcmZhY2UsXG4gIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzLFxuICBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2UsXG4gIExpc3RCb29rZWRNZWV0aW5nc1YyUmVzcG9uc2UsXG4gIE1lZXRpbmdIb3N0QXBpU2VydmljZSxcbiAgUGFnZWRSZXF1ZXN0T3B0aW9ucyxcbiAgUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSxcbiAgU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICBUaW1lUmFuZ2UsXG4gIFRpbWVSYW5nZUludGVyZmFjZSxcbiAgVGltZVpvbmUsXG4gIFRpbWVab25lSW50ZXJmYWNlLFxuICBXZWVrZGF5QXZhaWxhYmlsaXR5LFxuICBDb250YWN0LFxuICBFbWFpbHNUb0RlbGV0ZSxcbiAgSG9zdEJvb2tTZXNzaW9uUmVxdWVzdEludGVyZmFjZSxcbiAgTGlzdEF0dGVuZGVlc1Jlc3BvbnNlLFxuICBCb29raW5nU291cmNlLFxuICBMaXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzUmVzcG9uc2UsIExpc3RCb29raW5nVHlwZXNGb3JBSVJlc3BvbnNlLFxufSBmcm9tIFwiLi4vX2ludGVybmFsXCI7XG5cbmltcG9ydCB7IEJvb2tNZWV0aW5nUmVzcG9uc2UsIEJvb2tTZXNzaW9uUmVzcG9uc2UgfSBmcm9tIFwiLi4vZ3Vlc3RcIjtcblxuaW1wb3J0IHtcbiAgYW5zd2Vyc1RvQVBJLFxuICBBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzU2V0LFxuICBBdmFpbGFiaWxpdHlSdWxlLFxuICBCb29rZWRNZWV0aW5nR3JvdXAsXG4gIENhbGVuZGFyLFxuICBDYWxlbmRhckZyb21BcGksXG4gIEVudGl0eUFzc29jaWF0aW9ucyxcbiAgZ2V0RmllbGRNYXNrLFxuICBHcm91cCxcbiAgR3JvdXBGcm9tQXBpLFxuICBHcm91cFR5cGVUb0FQaSxcbiAgSG9zdFVybE1hcCxcbiAgTWVldGluZyxcbiAgTWVldGluZ0Zvcm0sXG4gIG1lZXRpbmdGcm9tQXBpLFxuICBNZWV0aW5nTWV0YWRhdGEsXG4gIE1lZXRpbmdTdGF0cyxcbiAgbWVldGluZ1N0YXRzRnJvbUFwaSxcbiAgTWVldGluZ1R5cGUsXG4gIE1lZXRpbmdUeXBlRnJvbUFwaSxcbiAgTWVldGluZ1R5cGVUb0FwaSxcbiAgUGFnZWRSZXNwb25zZSxcbiAgUHJlZmVyZW5jZXMsXG4gIFByZWZlcmVuY2VzRnJvbUFwaSxcbiAgU2VydmljZSxcbiAgU2VydmljZUZyb21BcGksXG4gIFNlcnZpY2VUeXBlVG9BcGksXG4gIFRpbWVTcGFuLFxuICBUaW1lU3BhbkZyb21BcGksXG59IGZyb20gXCIuLi9zaGFyZWRcIjtcbmltcG9ydCB7XG4gIGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbixcbiAgZ2V0R2VuZXJhbEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbixcbn0gZnJvbSBcIi4vdXJsXCI7XG5pbXBvcnQgeyBIb3N0VXNlciwgaG9zdFVzZXJGcm9tQXBpIH0gZnJvbSBcIi4uL3NoYXJlZC9ob3N0LXVzZXJcIjtcbmltcG9ydCB7IEVudmlyb25tZW50LCBvblByb2R1Y3Rpb25HbG9iYWwgfSBmcm9tIFwiLi4vc2hhcmVkL2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCAqIGFzIGUgZnJvbSBcIi4uL19pbnRlcm5hbC9lbnVtc1wiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSG9zdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGhvc3RBUElTZXJ2aWNlOiBNZWV0aW5nSG9zdEFwaVNlcnZpY2UpIHt9XG5cbiAgLy8gVXNlIGJ1aWxkSG9zdElkIHRvIGdldCBhbiBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCByZXF1ZXN0cy4gU2VlIHZlbmRhc3RhYXBpcyBmb3IgbW9yZSBkZXRhaWxzXG4gIGJ1aWxkSG9zdElkKHJlcToge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQ7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuYnVpbGRIb3N0SWQoe1xuICAgICAgICB1c2VySWQ6IHJlcS51c2VySWQsXG4gICAgICAgIC8vIEdyb3NzIHR5cGVjYXN0IGV4aXN0cyBiZWNhdXNlIEkgd2FudCB0byByZXN0cmljdCB0aGUgcHJvcGVydGllcyBvbiB0aGUgbWFwIChmb3Igbm93KS5cbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczpcbiAgICAgICAgICByZXEuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmhvc3RJZCB8fCBcIlwiKSk7XG4gIH1cblxuICBkb2VzQ2FsZW5kYXJFeGlzdChjYWxlbmRhcklkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZG9lc0NhbGVuZGFyRXhpc3QoeyBjYWxlbmRhcklkZW50aWZpZXI6IGNhbGVuZGFySWRlbnRpZmllciB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwKSA9PiByZXNwLmV4aXN0cykpO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0Q2FsZW5kYXIoeyBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IENhbGVuZGFyRnJvbUFwaShyZXM/LmNhbGVuZGFyKSkpO1xuICB9XG5cbiAgZW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0cyhyZXE6IHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOiBBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzU2V0O1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHMoe1xuICAgICAgICB1c2VySWQ6IHJlcS51c2VySWQsXG4gICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6XG4gICAgICAgICAgcmVxLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgYXMgYW55IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IChyZXMgPyByZXMuY2FsZW5kYXJJZCA6IFwiXCIpKSk7XG4gIH1cblxuICBlbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0KHJlcToge1xuICAgIGV4dGVybmFsSWRzOiBzdHJpbmdbXTtcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3QoeyBleHRlcm5hbElkczogcmVxLmV4dGVybmFsSWRzIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzPy5jYWxlbmRhcklkcyB8fCBbXSkpO1xuICB9XG5cbiAgLypcbiAgICAgY3JlYXRlQ2FsZW5kYXIgY3JlYXRlcyBhIGNhbGVuZGFyIHdoaWNoIG1lZXRpbmcgdHlwZXMgY2FuIGJlIGNyZWF0ZWQgZm9yIGFuZCBldmVudHMgY2FuIGJlIGJvb2tlZCBvblxuICAgICBUaGUgZmllbGRzIG9mIGEgY2FsZW5kYXIgYXJlIGRvY3VtZW50ZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL3ZlbmRhc3RhL3ZlbmRhc3RhYXBpcy9ibG9iL21hc3Rlci9tZWV0aW5ncy92MS9zaGFyZWQucHJvdG9cbiAgICAqL1xuICBjcmVhdGVDYWxlbmRhcihcbiAgICByZXE6IENyZWF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVDYWxlbmRhclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuY3JlYXRlQ2FsZW5kYXIocmVxKTtcbiAgfVxuXG4gIHVwZGF0ZUNhbGVuZGFyU2x1ZyhjYWxlbmRhcklkOiBzdHJpbmcsIG5ld1NsdWc6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2FsZW5kYXIoe1xuICAgICAgICBjYWxlbmRhcklkOiBjYWxlbmRhcklkLFxuICAgICAgICBjYWxlbmRhclVwZGF0ZTogeyBzbHVnOiBuZXdTbHVnIH0sXG4gICAgICAgIGZpZWxkTWFzazogeyBwYXRoczogW1wic2x1Z1wiXSB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgdXBkYXRlQ2FsZW5kYXJIb3N0VXNlcklEcyhcbiAgICBjYWxlbmRhcklkOiBzdHJpbmcsXG4gICAgcmVwbGFjZW1lbnRIb3N0VXNlcklkczogc3RyaW5nW10sXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2FsZW5kYXIoe1xuICAgICAgICBjYWxlbmRhcklkOiBjYWxlbmRhcklkLFxuICAgICAgICBjYWxlbmRhclVwZGF0ZTogeyBob3N0VXNlcklkczogcmVwbGFjZW1lbnRIb3N0VXNlcklkcyB9LFxuICAgICAgICBmaWVsZE1hc2s6IHsgcGF0aHM6IFtcImhvc3RfdXNlcl9pZHNcIl0gfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFycyhyZXE6IHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG4gICAgbWV0YWRhdGE6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICB9KTogT2JzZXJ2YWJsZTx7IFtjYWxlbmRhcklkOiBzdHJpbmddOiBNZWV0aW5nVHlwZVtdIH0+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFycyh7IGNhbGVuZGFySWRzOiByZXEuY2FsZW5kYXJJZHMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGlmICghcmVzPy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKS5yZWR1Y2UoXG4gICAgICAgICAgICAoY2FsZW5kYXJUb01lZXRpbmdUeXBlTWFwLCBjYWxlbmRhcklkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1lZXRpbmdUeXBlcyA9IChcbiAgICAgICAgICAgICAgICByZXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXBbY2FsZW5kYXJJZF0/Lm1lZXRpbmdUeXBlcyB8fCBbXVxuICAgICAgICAgICAgICApLm1hcCgobXQpID0+XG4gICAgICAgICAgICAgICAgTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJJZCxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uY2FsZW5kYXJUb01lZXRpbmdUeXBlTWFwLFxuICAgICAgICAgICAgICAgIFtjYWxlbmRhcklkXTogbWVldGluZ1R5cGVzLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9IGFzIHsgW2NhbGVuZGFySWQ6IHN0cmluZ106IE1lZXRpbmdUeXBlW10gfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvKlxuICAgICBsaXN0TWVldGluZ1R5cGVzIHJldHVybnMgYSBsaXN0IG9mIG1lZXRpbmcgdHlwZXMgZm9yIGEgaG9zdFxuICAgICBAcGFyYW0gaG9zdElkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3RcbiAgICAgQHBhcmFtIG1ldGFkYXRhOiBvcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIG9uIHRoZSBtZWV0aW5nIHR5cGUgYm9va2luZyBsaW5rXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAgICAtIGNhbGVuZGFyU2x1ZyBJUyBOT1QgVVNFRCBUTyBSRVRSSUVWRSBNRUVUSU5HIFRZUEVTLCBPTkxZIFRPIE1BS0UgVEhFIEJPT0tJTkcgVVJMU1xuICAgKi9cbiAgbGlzdE1lZXRpbmdUeXBlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RNZWV0aW5nVHlwZXMocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmICghcmVzcCB8fCAhcmVzcC5tZWV0aW5nVHlwZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3AubWVldGluZ1R5cGVzLm1hcCgobXQpID0+IHtcbiAgICAgICAgICByZXR1cm4gTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEV2ZW50VHlwZUJ5SWQgcmV0dXJucyBhIHNpbmdsZSBtZWV0aW5nIHR5cGUgYnkgSUQuXG4gICAgIEBwYXJhbSBldmVudFR5cGVJZDogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdHlwZVxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgb24gdGhlIG1lZXRpbmcgdHlwZSBib29raW5nIGxpbmtcbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICAgIC0gY2FsZW5kYXJTbHVnIElTIE5PVCBVU0VEIFRPIFJFVFJJRVZFIFRIRSBFVkVOVCBUWVBFLCBPTkxZIFRPIE1BS0UgVEhFIEJPT0tJTkcgVVJMXG4gICAqL1xuICBnZXRFdmVudFR5cGVCeUlkKHJlcToge1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPE1lZXRpbmdUeXBlIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0RXZlbnRUeXBlQnlJZCh7IGV2ZW50VHlwZUlkOiByZXEuZXZlbnRUeXBlSWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3AubWVldGluZ1R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IHJlc3AubWVldGluZ1R5cGUsXG4gICAgICAgICAgICBjYWxlbmRhcklkOiByZXNwLm1lZXRpbmdUeXBlLmNhbGVuZGFySWQgfHwgXCJcIixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRCb29raW5nVXJsIHJldHVybnMgYSBsaW5rIHRoYXQgY2FuIGJlIHVzZWQgdG8gYm9vayBhIG1lZXRpbmcgd2l0aCB0aGlzIGhvc3QuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMgKGkuZS4sIHRlYW0pLlxuICAgICBAcGFyYW0gQGRlcHJlY2F0ZWQgaG9zdElkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3QuXG4gICAgIEBwYXJhbSBtZWV0aW5nVHlwZUlkOiBBbiBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbWVldGluZyB0eXBlLiBEZWZhdWx0OiAzMC1taW51dGVzLlxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICovXG4gIGdldEJvb2tpbmdVcmwocmVxOiB7XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSBjYWxlbmRhcklkIGluc3RlYWQuIGNhbGVuZGFySWQgbm90IHJlcXVpcmVkIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNsaWVudHMuXG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgY2FsZW5kYXJJZD86IHN0cmluZztcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIG1lZXRpbmdUeXBlU2x1ZyBpbnN0ZWFkXG4gICAgbWVldGluZ1R5cGVJZD86IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZVNsdWc/OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBvZihcbiAgICAgIGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbih7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQgfHwgcmVxLmhvc3RJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpID8gRW52aXJvbm1lbnQuUFJPRCA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRHZW5lcmFsQm9va2luZ1VybCByZXR1cm5zIGEgbGluayB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIG1lZXRpbmcgdHlwZSB0byBib29rIHdpdGggdGhlIGdpdmVuIGNhbGVuZGFyLlxuICAgICBAcGFyYW0gY2FsZW5kYXJJZDogQW4gaWRlbnRpZmllciBmb3IgYW4gaW5kaXZpZHVhbCBob3N0IG9yIGdyb3VwaW5nIG9mIGhvc3RzIChpLmUuLCB0ZWFtKS5cbiAgICAgQHBhcmFtIG1ldGFkYXRhOiBvcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIGluIHRoZSB1cmwuXG4gICAgIC0gbWV0YWRhdGEgY2FuIGJlIHVzZWQgdG8gcHJlLWZpbGwgY2VydGFpbiBmb3JtIGZpZWxkcyBhbmQgd2lsbCBiZSBzdG9yZWQgZHVyaW5nIHRoZSBib29raW5nIHByb2Nlc3MuXG4gICAgIC0gbWV0YWRhdGEgY2FuIGJlIG9idGFpbmVkIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBib29raW5nIGV2ZW50LlxuICAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgKi9cbiAgZ2V0R2VuZXJhbEJvb2tpbmdVcmwocmVxOiB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gb2YoXG4gICAgICBnZXRHZW5lcmFsQm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpID8gRW52aXJvbm1lbnQuUFJPRCA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgIGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhcklkLFxuICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICAgZ2V0Qm9va2luZ1VybHNNdWx0aSByZXR1cm5zIGEgbWFwcGluZyBvZiBob3N0cyAtPiBldmVudCB0eXBlcyAtPiBib29raW5nIGxpbmtzLlxuICAgICBAcGFyYW0gY2FsZW5kYXJJZDogQW4gaWRlbnRpZmllciBmb3IgYW4gaW5kaXZpZHVhbCBob3N0IG9yIGdyb3VwaW5nIG9mIGhvc3RzLlxuICAgICBAcGFyYW0gbWVldGluZ1R5cGVTbHVnOiBtZWV0aW5nVHlwZVNsdWdzIGFyZSBwYXNzZWQgaW4gdGhlIGZvcm0ge2hvc3RJZDogW21lZXRpbmdUeXBlU2x1ZzEsIG1lZXRpbmdUeXBlU2x1ZzJdfVxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAqL1xuICBnZXRCb29raW5nVXJsc011bHRpKFxuICAgIHJlcTogeyBbY2FsZW5kYXJJZDogc3RyaW5nXTogc3RyaW5nW10gfSxcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxIb3N0VXJsTWFwPiB7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgT2JqZWN0LmtleXMocmVxKS5yZWR1Y2UoKGhvc3RNYXAsIGNhbGVuZGFySWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5ob3N0TWFwLFxuICAgICAgICAgIFtjYWxlbmRhcklkXTogcmVxW2NhbGVuZGFySWRdLnJlZHVjZShcbiAgICAgICAgICAgIChtZWV0aW5nVHlwZU1hcCwgbWVldGluZ1R5cGVTbHVnKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ubWVldGluZ1R5cGVNYXAsXG4gICAgICAgICAgICAgICAgW21lZXRpbmdUeXBlU2x1Z106IGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbih7XG4gICAgICAgICAgICAgICAgICBjYWxlbmRhcklkLFxuICAgICAgICAgICAgICAgICAgbWVldGluZ1R5cGVTbHVnLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSBhcyB7IFttZWV0aW5nVHlwZUlkOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSwge30gYXMgSG9zdFVybE1hcCksXG4gICAgKTtcbiAgfVxuXG4gIGlzSG9zdENvbmZpZ3VyZWQocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaXNIb3N0Q29uZmlndXJlZChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3A6IElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZSkgPT4gcmVzcCkpO1xuICB9XG5cbiAgc2V0R2VuZXJhbEF2YWlsYWJpbGl0eShyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSB3ZWVrZGF5c0F2YWlsYWJpbGl0eSBpbnN0ZWFkXG4gICAgZGF5cz86IERheU9mV2Vla1tdO1xuICAgIC8vIEBkZXByZWNhdGVkOiB1c2Ugd2Vla2RheXNBdmFpbGFiaWxpdHkgaW5zdGVhZFxuICAgIHRpbWVTbG90PzogVGltZVJhbmdlSW50ZXJmYWNlO1xuICAgIHdlZWtkYXlzQXZhaWxhYmlsaXR5PzogV2Vla2RheUF2YWlsYWJpbGl0eVtdO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIGNvbnN0IGFwaVJlcSA9IHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICB9O1xuICAgIGlmIChyZXEudGltZVNsb3QpIHtcbiAgICAgIGFwaVJlcS50aW1lU2xvdCA9IG5ldyBUaW1lUmFuZ2UocmVxLnRpbWVTbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2Uuc2V0R2VuZXJhbEF2YWlsYWJpbGl0eShhcGlSZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEJvb2tlZE1lZXRpbmdzKHJlcToge1xuICAgIGZpbHRlcnM6IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxQYWdlZFJlc3BvbnNlPE1lZXRpbmc+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5saXN0Qm9va2VkTWVldGluZ3Moe1xuICAgICAgICAuLi5yZXEsXG4gICAgICAgIHBhZ2luZ09wdGlvbnM6IG5ldyBQYWdlZFJlcXVlc3RPcHRpb25zKHtcbiAgICAgICAgICBjdXJzb3I6IHJlcS5jdXJzb3IsXG4gICAgICAgICAgcGFnZVNpemU6IHJlcS5wYWdlU2l6ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcnM6IG5ldyBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVycyhyZXEuZmlsdGVycyksXG4gICAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lZXRpbmdzID0gKHJlc3AubWVldGluZ3MgfHwgW10pLm1hcCgobWVldGluZykgPT5cbiAgICAgICAgICAgIG1lZXRpbmdGcm9tQXBpKG1lZXRpbmcpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYWdlZFJlc3BvbnNlKFxuICAgICAgICAgICAgbWVldGluZ3MsXG4gICAgICAgICAgICByZXNwLnBhZ2luZ01ldGFkYXRhLm5leHRDdXJzb3IsXG4gICAgICAgICAgICByZXNwLnBhZ2luZ01ldGFkYXRhLmhhc01vcmUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsTWVldGluZyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBjYW5jZWxsYXRpb25SZWFzb246IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY2FuY2VsTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICByZXNjaGVkdWxlTWVldGluZyhyZXE6IHsgbWVldGluZ0lkOiBzdHJpbmc7IHN0YXJ0OiBEYXRlOyBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZSB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5yZXNjaGVkdWxlTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmlsaXR5KHJlcToge1xuICAgIGZpbHRlcnM6IExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZTtcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8UGFnZWRSZXNwb25zZTxBdmFpbGFiaWxpdHlSdWxlPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RBdmFpbGFiaWxpdHkocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gKHJlc3BvbnNlLmF2YWlsYWJpbGl0eVJ1bGVzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAubWFwKChhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3N0SWQ6IGEuaG9zdElkIHx8IFwiXCIsXG4gICAgICAgICAgICAgIG1lZXRpbmdUeXBlSWQ6IGEubWVldGluZ1R5cGVJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICBkYXk6IGEuZGF5LFxuICAgICAgICAgICAgICB0aW1lU2xvdDogYS50aW1lU2xvdCxcbiAgICAgICAgICAgICAgdGltZVpvbmU6IGEudGltZVpvbmUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICByZXNwb25zZS5tZXRhZGF0YS5uZXh0Q3Vyc29yLFxuICAgICAgICAgIHJlc3BvbnNlLm1ldGFkYXRhLmhhc01vcmUsXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyogdXBkYXRlUHJlZmVyZW5jZXMgd2lsbCB1cGRhdGUgdGhlIGhvc3QncyBwcmVmZXJlbmNlcy5cbiAgICogSXQgaXMgZ3VhcmFudGVlZCB0byBvbmx5IHVwZGF0ZSB0aGUgZmllbGRzIHByb3ZpZGVkLlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogIHVwZGF0ZVByZWZlcmVuY2VzKHttZWV0aW5nSW50ZWdyYXRpb246IE1lZXRpbmdTb3VyY2UuTUVFVElOR19TT1VSQ0VfR09PR0xFX01FRVR9KVxuICAgKiAgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgcHJlZmVyZW5jZSBtZWV0aW5nSW50ZWdyYXRpb24gdG8gR29vZ2xlIE1lZXQuIEtlZXBpbmcgdGhlIG90aGVyIHByZWZlcmVuY2VzIHRoZSBzYW1lLlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgYSBsaXN0IG9mIGtleXMgdG8gdXBkYXRlIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgIHVwZGF0ZVByZWZlcmVuY2VzKHsuLi5vYmplY3Qgd2l0aCBhbGwgZmllbGRzfSwgWydtZWV0aW5nSW50ZWdyYXRpb24nXSlcbiAgICogICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbWVldGluZ0ludGVncmF0aW9uJyB0byB0aGUgdmFsdWUgaW4gcHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIENhbGxpbmcgd2l0aCBhbiBlbXB0eSBvYmplY3QgYW5kIG5vIGtleXMgaXMgYSBuby1vcCwgb3IgYW4gdW5kZWZpbmVkIG9iamVjdC5cbiAgICogQ2FsbGluZyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIGZpZWxkcyBub3QgaW4gYFByZWZlcmVuY2VzYCBvciB3aXRoIHVwZGF0ZUZpZWxkcyBub3QgbGlua2VkIHRvIHByb3BlcnRpZXMgaW5cbiAgICogYFByZWZlcmVuY2VzYCBpcyBhbiBlcnJvci5cbiAgICovXG4gIHVwZGF0ZVByZWZlcmVuY2VzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIHByZWZlcmVuY2VzOiBQYXJ0aWFsPFByZWZlcmVuY2VzPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgUHJlZmVyZW5jZXMpW107XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLnByZWZlcmVuY2VzLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVIb3N0UHJlZmVyZW5jZXMoe1xuICAgICAgICBob3N0SWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgIHByZWZlcmVuY2VzOiByZXEucHJlZmVyZW5jZXMsXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldFByZWZlcmVuY2VzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxQcmVmZXJlbmNlcz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0SG9zdFByZWZlcmVuY2VzKHtcbiAgICAgICAgaG9zdElkOiByZXEuaG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IFByZWZlcmVuY2VzRnJvbUFwaShyZXNwb25zZS5wcmVmZXJlbmNlcykpKTtcbiAgfVxuXG4gIGdldE1lZXRpbmcobWVldGluZ0lkOiBzdHJpbmcsIGxvY2F0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1lZXRpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RNZWV0aW5nKHtcbiAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWQsXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBHZXRIb3N0TWVldGluZ1Jlc3BvbnNlKSA9PiBtZWV0aW5nRnJvbUFwaShyZXNwLm1lZXRpbmcpKSxcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVNZWV0aW5nTWV0YWRhdGEocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IE1lZXRpbmdNZXRhZGF0YTtcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlTWVldGluZ01ldGFkYXRhKHtcbiAgICAgICAgbWVldGluZ0lkOiByZXEubWVldGluZ0lkLFxuICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgaG9zdEJvb2tNZWV0aW5nKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICBjb21tZW50OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiBNZWV0aW5nTWV0YWRhdGE7XG4gICAgYXR0ZW5kZWVzOiAoT21pdDxcbiAgICAgIENvbnRhY3QsXG4gICAgICBcImZyb21Qcm90b1wiIHwgXCJ0b0FwaUpzb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwidGltZVpvbmVcIlxuICAgID4gJiB7IHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZSB9KVtdO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8Qm9va01lZXRpbmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RCb29rTWVldGluZyh7XG4gICAgICAuLi5yZXEsXG4gICAgICBhdHRlbmRlZXM6IHJlcS5hdHRlbmRlZXMsXG4gICAgfSk7XG4gIH1cblxuICBob3N0Qm9va1Nlc3Npb24oXG4gICAgcmVxOiBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPEJvb2tTZXNzaW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5ob3N0Qm9va1Nlc3Npb24oe1xuICAgICAgLi4ucmVxLFxuICAgIH0pO1xuICB9XG5cbiAgYm9va01lZXRpbmcocmVxOiBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmJvb2tNZWV0aW5nKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2UpID0+IHJlc3AubWVldGluZ0lkKSk7XG4gIH1cblxuICAvLyBsaXN0Qm9va2VkTWVldGluZ3NWMiByZXR1cm5zIGJvb2tpbmdzIGdyb3VwZWQgYnkgYm9va2luZ19ncm91cF9pZC5cbiAgLy8gU3RhbmRhbG9uZSBtZWV0aW5ncyBhcHBlYXIgYXMgYSBzaW5nbGUtZW50cnkgQm9va2VkTWVldGluZ0dyb3VwIHdpdGggYW4gZW1wdHlcbiAgLy8gYm9va2luZ0dyb3VwSWQ7IGJhdGNoIGJvb2tpbmdzIGFwcGVhciBhcyBvbmUgQm9va2VkTWVldGluZ0dyb3VwIHdpdGggTiBzaWJsaW5ncy5cbiAgbGlzdEJvb2tlZE1lZXRpbmdzVjIocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8Qm9va2VkTWVldGluZ0dyb3VwPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAubGlzdEJvb2tlZE1lZXRpbmdzVjIoe1xuICAgICAgICBmaWx0ZXJzOiBuZXcgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMocmVxLmZpbHRlcnMpLFxuICAgICAgICBwYWdpbmdPcHRpb25zOiBuZXcgUGFnZWRSZXF1ZXN0T3B0aW9ucyh7XG4gICAgICAgICAgY3Vyc29yOiByZXEuY3Vyc29yLFxuICAgICAgICAgIHBhZ2VTaXplOiByZXEucGFnZVNpemUsXG4gICAgICAgIH0pLFxuICAgICAgICB0aW1lWm9uZTogbmV3IFRpbWVab25lKHJlcS50aW1lWm9uZSksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogTGlzdEJvb2tlZE1lZXRpbmdzVjJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvb2tpbmdzID0gKHJlc3AuYm9va2luZ3MgfHwgW10pLm1hcCgoYm9va2luZykgPT4gKHtcbiAgICAgICAgICAgIGJvb2tpbmdHcm91cElkOiBib29raW5nLmJvb2tpbmdHcm91cElkIHx8IFwiXCIsXG4gICAgICAgICAgICBtZWV0aW5nczogKGJvb2tpbmcubWVldGluZ3MgfHwgW10pLm1hcCgobWVldGluZykgPT5cbiAgICAgICAgICAgICAgbWVldGluZ0Zyb21BcGkobWVldGluZyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgICBib29raW5ncyxcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBob3N0Qm9va0JhdGNoTWVldGluZyBib29rcyBhIG1lZXRpbmcgb24gdGhlIGhvc3QgY2FsZW5kYXIg4oCUIHNpbmdsZS1zZXJ2aWNlXG4gIC8vIChOPTEgdGFyZ2V0KSBvciBtdWx0aS1zZXJ2aWNlIChOPjEgb3JkZXJlZCB0YXJnZXRzKS4gUmV0dXJucyB0aGUgYm9va2luZ19ncm91cF9pZC5cbiAgaG9zdEJvb2tCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIHRhcmdldHM6IEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZVtdO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGF0dGVuZGVlcz86IENvbnRhY3RJbnRlcmZhY2VbXTtcbiAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBmb3JtQW5zd2Vycz86IE1lZXRpbmdGb3JtO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICAgIGJvb2tpbmdPcmlnaW5JZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0Qm9va0JhdGNoTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgZm9ybUFuc3dlcnM6IGFuc3dlcnNUb0FQSShyZXEuZm9ybUFuc3dlcnMpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UpID0+IHJlc3AuYm9va2luZ0dyb3VwSWQpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGhvc3RSZXNjaGVkdWxlQmF0Y2hNZWV0aW5nIGFjY2VwdHMgZWl0aGVyIGEgc2luZ2xlIG1lZXRpbmdfaWQgb3IgYSBib29raW5nX2dyb3VwX2lkLlxuICAvLyBXaGVuIGEgYm9va2luZ19ncm91cF9pZCBpcyBwYXNzZWQgdGhlIHNlcnZlciByZXNjaGVkdWxlcyBldmVyeSBzaWJsaW5nIGF0b21pY2FsbHksXG4gIC8vIHByZXNlcnZpbmcgcGVyLXNpYmxpbmcgZHVyYXRpb25zIGFuZCBzaGlmdGluZyBhbGwgYnkgdGhlIHNhbWUgZGVsdGEuXG4gIGhvc3RSZXNjaGVkdWxlQmF0Y2hNZWV0aW5nKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgbG9jYXRpb24/OiBzdHJpbmc7XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdFJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxKVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgLy8gaG9zdENhbmNlbEJhdGNoTWVldGluZyBhY2NlcHRzIGVpdGhlciBhIHNpbmdsZSBtZWV0aW5nX2lkIG9yIGEgYm9va2luZ19ncm91cF9pZC5cbiAgLy8gRm9yIHBhcnRpYWwtZ3JvdXAgY2FuY2VsbGF0aW9uIHRoZSBGRSBpc3N1ZXMgTiBwYXJhbGxlbCBjYWxscyBlYWNoIHdpdGggdGhlXG4gIC8vIGluZGl2aWR1YWwgbWVldGluZ19pZC5cbiAgaG9zdENhbmNlbEJhdGNoTWVldGluZyhyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbj86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RDYW5jZWxCYXRjaE1lZXRpbmcocmVxKS5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIC8vIGdldE1lZXRpbmdTdGF0cyByZXR1cm5zIGFnZ3JlZ2F0ZWQgbWVldGluZyBzdGF0aXN0aWNzIGZvciB0aGUgaG9zdCwgYmFja2luZyB0aGVcbiAgLy8gXCJNeSBNZWV0aW5nc1wiIGRhc2hib2FyZCBjYXJkLiB0aW1lU3BhbiBtdXN0IGJlIGV4cHJlc3NlZCBpbiB0aGUgY2FsbGVyJ3MgdGltZSB6b25lO1xuICAvLyB0aW1lWm9uZSBpcyB1c2VkIHRvIGJ1Y2tldCBtZWV0aW5ncyBpbnRvIGRheXMgYW5kIHRvIGFsaWduIHRoZSBjb21wYXJpc29uIHBlcmlvZC5cbiAgZ2V0TWVldGluZ1N0YXRzKHJlcToge1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxNZWV0aW5nU3RhdHM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldE1lZXRpbmdTdGF0cyh7XG4gICAgICAgIHRpbWVTcGFuOiByZXEudGltZVNwYW4sXG4gICAgICAgIHRpbWVab25lOiByZXEudGltZVpvbmUsXG4gICAgICAgIGJ1c2luZXNzSWQ6IHJlcS5idXNpbmVzc0lkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogR2V0TWVldGluZ1N0YXRzUmVzcG9uc2UpID0+IG1lZXRpbmdTdGF0c0Zyb21BcGkocmVzcCkpKTtcbiAgfVxuXG4gIC8vIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMgcmV0dXJucyB2YWxpZCBjaGFpbiBzdGFydCB0aW1lcyBmb3IgYVxuICAvLyBtdWx0aS1zZXJ2aWNlIGhvc3QgYm9va2luZy4gRWFjaCBzbG90IGlzIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbWVldGluZ1xuICAvLyBpbiB0aGUgY2hhaW4uXG4gIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2VbXTtcbiAgICB0aW1lU3BhbjogVGltZVNwYW47XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxUaW1lU3BhbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0TGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwLmlzb1RpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcC5pc29UaW1lU2xvdHMubWFwKChpc28pID0+ICh7XG4gICAgICAgICAgICAgIHN0YXJ0OiBuZXcgRGF0ZShpc28uc3RhcnQpLFxuICAgICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGlzby5lbmQpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMgd2lsbCBjcmVhdGUgd2hhdCBNZWV0aW5nIFNjaGVkdWxlciBkZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBtZWV0aW5nIHR5cGVzLlxuICAvLyBJZiB0aGUgY2FsZW5kYXIgYWxyZWFkeSBoYXMgbWVldGluZyB0eXBlcywgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGEgbm8tb3AuXG4gIGNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMocmVxOiB7IGNhbGVuZGFySWRzOiBzdHJpbmdbXSB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzKHsgY2FsZW5kYXJJZHM6IHJlcS5jYWxlbmRhcklkcyB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBjcmVhdGVNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGU7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIE1lZXRpbmdUeXBlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5tZWV0aW5nVHlwZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlTWVldGluZ1R5cGUoe1xuICAgICAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGVUb0FwaSh7IG1lZXRpbmdUeXBlOiByZXEubWVldGluZ1R5cGUgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIC8qIHVwZGF0ZU1lZXRpbmdUeXBlIHdpbGwgdXBkYXRlIHRoZSBtZWV0aW5nIHR5cGUgZmllbGRzLlxuICAgKiBJdCBpcyBndWFyYW50ZWVkIHRvIG9ubHkgdXBkYXRlIHRoZSBmaWVsZHMgcHJvdmlkZWQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgdXBkYXRlTWVldGluZ1R5cGUoe25hbWU6ICdPbmJvYXJkaW5nJ30pXG4gICAqICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbmFtZScgdG8gJ09uYm9hcmRpbmcnLiBLZWVwaW5nIHRoZSBvdGhlciBmaWVsZHMgdGhlIHNhbWUuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSBhIGxpc3Qgb2Yga2V5cyB0byB1cGRhdGUgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICAgdXBkYXRlTWVldGluZ1R5cGUoey4uLm9iamVjdCB3aXRoIGFsbCBmaWVsZHN9LCBbJ25hbWUnXSlcbiAgICogICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbmFtZScgdG8gdGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAgICpcbiAgICogQ2FsbGluZyB3aXRoIGFuIGVtcHR5IG9iamVjdCBhbmQgbm8ga2V5cyBpcyBhIG5vLW9wLCBvciBhbiB1bmRlZmluZWQgb2JqZWN0LlxuICAgKiBDYWxsaW5nIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgZmllbGRzIG5vdCBpbiBgTWVldGluZ1R5cGVgIG9yIHdpdGggdXBkYXRlRmllbGRzIG5vdCBsaW5rZWQgdG8gcHJvcGVydGllcyBpblxuICAgKiBgTWVldGluZ1R5cGVgIGlzIGFuIGVycm9yLlxuICAgKi9cbiAgdXBkYXRlTWVldGluZ1R5cGUocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZTogUGFydGlhbDxNZWV0aW5nVHlwZT47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIE1lZXRpbmdUeXBlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEubWVldGluZ1R5cGUsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnVwZGF0ZU1lZXRpbmdUeXBlKHtcbiAgICAgICAgaWQ6IHJlcS5pZCxcbiAgICAgICAgbWVldGluZ1R5cGU6IE1lZXRpbmdUeXBlVG9BcGkoeyBtZWV0aW5nVHlwZTogcmVxLm1lZXRpbmdUeXBlIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZU1lZXRpbmdUeXBlKHJlcTogeyBpZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZU1lZXRpbmdUeXBlKHsgaWQ6IHJlcS5pZCB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBnZXRIb3N0c0ZvckNhbGVuZGFyKHJlcTogeyBjYWxlbmRhcklkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8e1xuICAgIGhvc3RVc2VyczogSG9zdFVzZXJbXTtcbiAgICBhdmFpbGFiaWxpdHlSdWxlczogeyBba2V5OiBzdHJpbmddOiBBdmFpbGFiaWxpdHlSdWxlTGlzdCB9O1xuICB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRIb3N0c0ZvckNhbGVuZGFyKHsgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGhvc3RVc2VycyA9IChyZXMuaG9zdFVzZXJzIHx8IFtdKS5tYXAoKGhvc3R1c2VyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaG9zdFVzZXJGcm9tQXBpKGhvc3R1c2VyKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eVJ1bGVzID0gcmVzLmhvc3RVc2VyQXZhaWxhYmlsaXR5UnVsZSB8fCB7fTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0VXNlcnMsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlSdWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBJc0NhbGVuZGFyQ29uZmlndXJlZChcbiAgICByZXE6IElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaXNDYWxlbmRhckNvbmZpZ3VyZWQocmVxKTtcbiAgfVxuXG4gIHNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsKFxuICAgIHJlcTogU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLnNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsKHJlcSk7XG4gIH1cblxuICBjcmVhdGVTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2U6IFNlcnZpY2U7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFNlcnZpY2UpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLnNlcnZpY2UsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNyZWF0ZVNlcnZpY2Uoe1xuICAgICAgICBzZXJ2aWNlOiBTZXJ2aWNlVHlwZVRvQXBpKHsgc2VydmljZTogcmVxLnNlcnZpY2UgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZVNlcnZpY2UocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzZXJ2aWNlOiBQYXJ0aWFsPFNlcnZpY2U+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBTZXJ2aWNlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEuc2VydmljZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlU2VydmljZSh7XG4gICAgICAgIGlkOiByZXEuaWQsXG4gICAgICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlVG9BcGkoeyBzZXJ2aWNlOiByZXEuc2VydmljZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBkZWxldGVTZXJ2aWNlKHJlcTogeyBpZDogc3RyaW5nOyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kZWxldGVTZXJ2aWNlKHsgaWQ6IHJlcS5pZCwgaG9zdElkOiByZXEuaG9zdElkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGxpc3RTZXJ2aWNlcyhyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8U2VydmljZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdFNlcnZpY2VzKHsgaG9zdElkOiByZXEuaG9zdElkIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuc2VydmljZXMubWFwKChzZXJ2aWNlKSA9PlxuICAgICAgICAgIFNlcnZpY2VGcm9tQXBpKHtcbiAgICAgICAgICAgIHNlcnZpY2VBcGk6IHNlcnZpY2UsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVHcm91cChyZXE6IHtcbiAgICBncm91cDogR3JvdXA7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIEdyb3VwKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5ncm91cCxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlR3JvdXAoe1xuICAgICAgICBncm91cDogR3JvdXBUeXBlVG9BUGkoeyBncm91cDogcmVxLmdyb3VwIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmlkKSk7XG4gIH1cblxuICB1cGRhdGVHcm91cChyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGdyb3VwOiBQYXJ0aWFsPEdyb3VwPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgR3JvdXApW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5ncm91cCxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlR3JvdXAoe1xuICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICBncm91cDogR3JvdXBUeXBlVG9BUGkoeyBncm91cDogcmVxLmdyb3VwIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZUdyb3VwKHJlcTogeyBpZDogc3RyaW5nOyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kZWxldGVHcm91cCh7IGlkOiByZXEuaWQsIGhvc3RJZDogcmVxLmhvc3RJZCB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBsaXN0R3JvdXBzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxHcm91cFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdEdyb3Vwcyh7IGhvc3RJZDogcmVxLmhvc3RJZCB9KS5waXBlKFxuICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgaWYgKCFyZXMgfHwgIXJlcy5ncm91cHMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5ncm91cHMubWFwKChncm91cCkgPT5cbiAgICAgICAgICBHcm91cEZyb21BcGkoe1xuICAgICAgICAgICAgZ3JvdXBBcGk6IGdyb3VwLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0R3JvdXAocmVxOiB7XG4gICAgZ3JvdXBJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldEdyb3VwKHJlcSk7XG4gIH1cbiAgZ2V0U2VydmljZShyZXE6IHtcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEdldFNlcnZpY2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldFNlcnZpY2UocmVxKTtcbiAgfVxuXG4gIGNoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3QocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgc2x1Z0lkZW50aWZpZXI6IHN0cmluZztcbiAgICBjYXRlZ29yeTogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jaGVja0dyb3VwT3JTZXJ2aWNlU2x1Z0V4aXN0KHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuZXhpc3RzKSk7XG4gIH1cblxuICBjaGVja0V2ZW50VHlwZVNsdWdFeGlzdChyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgc2x1Z0lkZW50aWZpZXI6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY2hlY2tFdmVudFR5cGVTbHVnRXhpc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5leGlzdHMpKTtcbiAgfVxuXG4gIGdldEVudGl0eUFzc29jaWF0aW9ucyhyZXE6IHtcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxFbnRpdHlBc3NvY2lhdGlvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5nZXRFbnRpdHlBc3NvY2lhdGlvbnMocmVxKTtcbiAgfVxuXG4gIGVuc3VyZVNlc3Npb25FdmVudENhbGVuZGFyc0V4aXN0KHJlcToge1xuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5lbnN1cmVTZXNzaW9uRXZlbnRDYWxlbmRhcnNFeGlzdCh7IGV4dGVybmFsSWQ6IHJlcS5leHRlcm5hbElkIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzPy5jYWxlbmRhcklkIHx8IFwiXCIpKTtcbiAgfVxuXG4gIGhvc3REZWxldGVBdHRlbmRlZXMocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgZW1haWxzVG9EZWxldGU6IEVtYWlsc1RvRGVsZXRlW107XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmhvc3REZWxldGVBdHRlbmRlZXMoe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEF0dGVuZGVlcyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0QXR0ZW5kZWVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0QXR0ZW5kZWVzKHJlcSk7XG4gIH1cblxuICBjYW5jZWxTZXNzaW9uKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jYW5jZWxTZXNzaW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVTZXNzaW9uKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIGlzUmVjdXJyaW5nOiBib29sZWFuO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5yZXNjaGVkdWxlU2Vzc2lvbih7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmxlVGltZXNsb3RzRm9yU2Vzc2lvbihyZXE6IHtcbiAgICBldmVudFR5cGVJZDogc3RyaW5nO1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gICAgdXNlcklkczogc3RyaW5nW107XG4gIH0pOiBPYnNlcnZhYmxlPFRpbWVTcGFuW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmxpc3RBdmFpbGFibGVUaW1lc2xvdHNGb3JTZXNzaW9uKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+XG4gICAgICAgICAgcmVzcC50aW1lU2xvdHMgPyByZXNwLnRpbWVTbG90cy5tYXAoKHRzKSA9PiBUaW1lU3BhbkZyb21BcGkodHMpKSA6IFtdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgfVxuXG4gIGxpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnMocmVxOiB7XG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzKHJlcSk7XG4gIH1cblxuICBsaXN0Qm9va2luZ1R5cGVzRm9yQWkocmVxOiB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZTogZS5Cb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0Qm9va2luZ1R5cGVzRm9yQUlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RCb29raW5nVHlwZXNGb3JBaShyZXEpO1xuICB9XG5cbn1cblxuIl19
678
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvaG9zdC9ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQXFCTCxnQ0FBZ0MsRUFJaEMscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUduQixTQUFTLEVBRVQsUUFBUSxHQVNULE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFDTCxZQUFZLEVBS1osZUFBZSxFQUVmLFlBQVksRUFFWixZQUFZLEVBQ1osY0FBYyxFQUlkLGNBQWMsRUFHZCxtQkFBbUIsRUFFbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGtDQUFrQyxHQUNuQyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBWSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUt4RSxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixjQUFxQztRQUFyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7SUFBRyxDQUFDO0lBRTdELGtIQUFrSDtJQUNsSCxXQUFXLENBQUMsR0FHWDtRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsV0FBVyxDQUFDO1lBQ1gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lB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Q3ZCLGlCQUFpQixDQUFDO1lBQ2pCLEdBQUcsR0FBRztTQUNQLENBQUM7YUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGdDQUFnQyxDQUFDLEdBS2hDO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYzthQUN2QixnQ0FBZ0MsQ0FBQyxHQUFHLENBQUM7YUFDckMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3RFLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCxrQ0FBa0MsQ0FBQyxHQUVsQztRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FJckI7UUFDQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7d0dBaitCVSxXQUFXOzRHQUFYLFdBQVcsY0FERSxNQUFNOzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAsIG1hcFRvIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuICBBdmFpbGFiaWxpdHlSdWxlTGlzdCxcbiAgQmF0Y2hCb29raW5nVGFyZ2V0SW50ZXJmYWNlLFxuICBCYXRjaEV2ZW50VHlwZVRhcmdldEludGVyZmFjZSxcbiAgQ2hlY2tHcm91cE9yU2VydmljZVNsdWdFeGlzdFJlc3BvbnNlLFxuICBDb250YWN0SW50ZXJmYWNlLFxuICBDcmVhdGVDYWxlbmRhclJlcXVlc3RJbnRlcmZhY2UsXG4gIENyZWF0ZUNhbGVuZGFyUmVzcG9uc2UsXG4gIERheU9mV2VlayxcbiAgR2V0R3JvdXBSZXNwb25zZSxcbiAgR2V0SG9zdE1lZXRpbmdSZXNwb25zZSxcbiAgR2V0TWVldGluZ1N0YXRzUmVzcG9uc2UsXG4gIEdldFNlcnZpY2VSZXNwb25zZSxcbiAgSG9zdEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZSxcbiAgSG9zdEJvb2tNZWV0aW5nUmVxdWVzdEludGVyZmFjZSxcbiAgSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2UsXG4gIEhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSxcbiAgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICBJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlLFxuICBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2UsXG4gIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMsXG4gIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlLFxuICBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzVjJSZXNwb25zZSxcbiAgTWVldGluZ0hvc3RBcGlTZXJ2aWNlLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlLFxuICBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gIFRpbWVSYW5nZSxcbiAgVGltZVJhbmdlSW50ZXJmYWNlLFxuICBUaW1lWm9uZSxcbiAgVGltZVpvbmVJbnRlcmZhY2UsXG4gIFdlZWtkYXlBdmFpbGFiaWxpdHksXG4gIENvbnRhY3QsXG4gIEVtYWlsc1RvRGVsZXRlLFxuICBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICBMaXN0QXR0ZW5kZWVzUmVzcG9uc2UsXG4gIEJvb2tpbmdTb3VyY2UsXG4gIExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZSwgTGlzdEJvb2tpbmdUeXBlc0ZvckFJUmVzcG9uc2UsXG59IGZyb20gXCIuLi9faW50ZXJuYWxcIjtcblxuaW1wb3J0IHsgQm9va01lZXRpbmdSZXNwb25zZSwgQm9va1Nlc3Npb25SZXNwb25zZSB9IGZyb20gXCIuLi9ndWVzdFwiO1xuXG5pbXBvcnQge1xuICBhbnN3ZXJzVG9BUEksXG4gIEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQsXG4gIEF2YWlsYWJpbGl0eVJ1bGUsXG4gIEJvb2tlZE1lZXRpbmdHcm91cCxcbiAgQ2FsZW5kYXIsXG4gIENhbGVuZGFyRnJvbUFwaSxcbiAgRW50aXR5QXNzb2NpYXRpb25zLFxuICBnZXRGaWVsZE1hc2ssXG4gIEdyb3VwLFxuICBHcm91cEZyb21BcGksXG4gIEdyb3VwVHlwZVRvQVBpLFxuICBIb3N0VXJsTWFwLFxuICBNZWV0aW5nLFxuICBNZWV0aW5nRm9ybSxcbiAgbWVldGluZ0Zyb21BcGksXG4gIE1lZXRpbmdNZXRhZGF0YSxcbiAgTWVldGluZ1N0YXRzLFxuICBtZWV0aW5nU3RhdHNGcm9tQXBpLFxuICBNZWV0aW5nVHlwZSxcbiAgTWVldGluZ1R5cGVGcm9tQXBpLFxuICBNZWV0aW5nVHlwZVRvQXBpLFxuICBQYWdlZFJlc3BvbnNlLFxuICBQcmVmZXJlbmNlcyxcbiAgUHJlZmVyZW5jZXNGcm9tQXBpLFxuICBTZXJ2aWNlLFxuICBTZXJ2aWNlRnJvbUFwaSxcbiAgU2VydmljZVR5cGVUb0FwaSxcbiAgVGltZVNwYW4sXG4gIFRpbWVTcGFuRnJvbUFwaSxcbn0gZnJvbSBcIi4uL3NoYXJlZFwiO1xuaW1wb3J0IHtcbiAgZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uLFxuICBnZXRHZW5lcmFsQm9va2luZ1VybEltcGxlbWVudGF0aW9uLFxufSBmcm9tIFwiLi91cmxcIjtcbmltcG9ydCB7IEhvc3RVc2VyLCBob3N0VXNlckZyb21BcGkgfSBmcm9tIFwiLi4vc2hhcmVkL2hvc3QtdXNlclwiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIG9uUHJvZHVjdGlvbkdsb2JhbCB9IGZyb20gXCIuLi9zaGFyZWQvZW52aXJvbm1lbnRcIjtcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0ICogYXMgZSBmcm9tIFwiLi4vX2ludGVybmFsL2VudW1zXCI7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBIb3N0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdEFQSVNlcnZpY2U6IE1lZXRpbmdIb3N0QXBpU2VydmljZSkge31cblxuICAvLyBVc2UgYnVpbGRIb3N0SWQgdG8gZ2V0IGFuIGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzLiBTZWUgdmVuZGFzdGFhcGlzIGZvciBtb3JlIGRldGFpbHNcbiAgYnVpbGRIb3N0SWQocmVxOiB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczogQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1NldDtcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5idWlsZEhvc3RJZCh7XG4gICAgICAgIHVzZXJJZDogcmVxLnVzZXJJZCxcbiAgICAgICAgLy8gR3Jvc3MgdHlwZWNhc3QgZXhpc3RzIGJlY2F1c2UgSSB3YW50IHRvIHJlc3RyaWN0IHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBtYXAgKGZvciBub3cpLlxuICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOlxuICAgICAgICAgIHJlcS5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzIGFzIGFueSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaG9zdElkIHx8IFwiXCIpKTtcbiAgfVxuXG4gIGRvZXNDYWxlbmRhckV4aXN0KGNhbGVuZGFySWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kb2VzQ2FsZW5kYXJFeGlzdCh7IGNhbGVuZGFySWRlbnRpZmllcjogY2FsZW5kYXJJZGVudGlmaWVyIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3ApID0+IHJlc3AuZXhpc3RzKSk7XG4gIH1cblxuICBnZXRDYWxlbmRhcihyZXE6IHsgY2FsZW5kYXJJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPENhbGVuZGFyPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRDYWxlbmRhcih7IGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhcklkIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gQ2FsZW5kYXJGcm9tQXBpKHJlcz8uY2FsZW5kYXIpKSk7XG4gIH1cblxuICBlbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzKHJlcToge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQ7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0cyh7XG4gICAgICAgIHVzZXJJZDogcmVxLnVzZXJJZCxcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczpcbiAgICAgICAgICByZXEuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gKHJlcyA/IHJlcy5jYWxlbmRhcklkIDogXCJcIikpKTtcbiAgfVxuXG4gIGVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3QocmVxOiB7XG4gICAgZXh0ZXJuYWxJZHM6IHN0cmluZ1tdO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdCh7IGV4dGVybmFsSWRzOiByZXEuZXh0ZXJuYWxJZHMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXM/LmNhbGVuZGFySWRzIHx8IFtdKSk7XG4gIH1cblxuICAvKlxuICAgICBjcmVhdGVDYWxlbmRhciBjcmVhdGVzIGEgY2FsZW5kYXIgd2hpY2ggbWVldGluZyB0eXBlcyBjYW4gYmUgY3JlYXRlZCBmb3IgYW5kIGV2ZW50cyBjYW4gYmUgYm9va2VkIG9uXG4gICAgIFRoZSBmaWVsZHMgb2YgYSBjYWxlbmRhciBhcmUgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdmVuZGFzdGEvdmVuZGFzdGFhcGlzL2Jsb2IvbWFzdGVyL21lZXRpbmdzL3YxL3NoYXJlZC5wcm90b1xuICAgICovXG4gIGNyZWF0ZUNhbGVuZGFyKFxuICAgIHJlcTogQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPENyZWF0ZUNhbGVuZGFyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5jcmVhdGVDYWxlbmRhcihyZXEpO1xuICB9XG5cbiAgdXBkYXRlQ2FsZW5kYXJTbHVnKGNhbGVuZGFySWQ6IHN0cmluZywgbmV3U2x1Zzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVDYWxlbmRhcih7XG4gICAgICAgIGNhbGVuZGFySWQ6IGNhbGVuZGFySWQsXG4gICAgICAgIGNhbGVuZGFyVXBkYXRlOiB7IHNsdWc6IG5ld1NsdWcgfSxcbiAgICAgICAgZmllbGRNYXNrOiB7IHBhdGhzOiBbXCJzbHVnXCJdIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICB1cGRhdGVDYWxlbmRhckhvc3RVc2VySURzKFxuICAgIGNhbGVuZGFySWQ6IHN0cmluZyxcbiAgICByZXBsYWNlbWVudEhvc3RVc2VySWRzOiBzdHJpbmdbXSxcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVDYWxlbmRhcih7XG4gICAgICAgIGNhbGVuZGFySWQ6IGNhbGVuZGFySWQsXG4gICAgICAgIGNhbGVuZGFyVXBkYXRlOiB7IGhvc3RVc2VySWRzOiByZXBsYWNlbWVudEhvc3RVc2VySWRzIH0sXG4gICAgICAgIGZpZWxkTWFzazogeyBwYXRoczogW1wiaG9zdF91c2VyX2lkc1wiXSB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZ2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzKHJlcToge1xuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXTtcbiAgICBtZXRhZGF0YTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIH0pOiBPYnNlcnZhYmxlPHsgW2NhbGVuZGFySWQ6IHN0cmluZ106IE1lZXRpbmdUeXBlW10gfT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzKHsgY2FsZW5kYXJJZHM6IHJlcS5jYWxlbmRhcklkcyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXM/LmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXApLnJlZHVjZShcbiAgICAgICAgICAgIChjYWxlbmRhclRvTWVldGluZ1R5cGVNYXAsIGNhbGVuZGFySWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWVldGluZ1R5cGVzID0gKFxuICAgICAgICAgICAgICAgIHJlcy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcFtjYWxlbmRhcklkXT8ubWVldGluZ1R5cGVzIHx8IFtdXG4gICAgICAgICAgICAgICkubWFwKChtdCkgPT5cbiAgICAgICAgICAgICAgICBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IG10LFxuICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgICAgICAgICBjYWxlbmRhcklkLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jYWxlbmRhclRvTWVldGluZ1R5cGVNYXAsXG4gICAgICAgICAgICAgICAgW2NhbGVuZGFySWRdOiBtZWV0aW5nVHlwZXMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30gYXMgeyBbY2FsZW5kYXJJZDogc3RyaW5nXTogTWVldGluZ1R5cGVbXSB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGxpc3RNZWV0aW5nVHlwZXMgcmV0dXJucyBhIGxpc3Qgb2YgbWVldGluZyB0eXBlcyBmb3IgYSBob3N0XG4gICAgIEBwYXJhbSBob3N0SWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdFxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgb24gdGhlIG1lZXRpbmcgdHlwZSBib29raW5nIGxpbmtcbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICAgIC0gY2FsZW5kYXJTbHVnIElTIE5PVCBVU0VEIFRPIFJFVFJJRVZFIE1FRVRJTkcgVFlQRVMsIE9OTFkgVE8gTUFLRSBUSEUgQk9PS0lORyBVUkxTXG4gICAqL1xuICBsaXN0TWVldGluZ1R5cGVzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxNZWV0aW5nVHlwZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdE1lZXRpbmdUeXBlcyhyZXEpLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgaWYgKCFyZXNwIHx8ICFyZXNwLm1lZXRpbmdUeXBlcykge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcC5tZWV0aW5nVHlwZXMubWFwKChtdCkgPT4ge1xuICAgICAgICAgIHJldHVybiBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IG10LFxuICAgICAgICAgICAgY2FsZW5kYXJJZDogcmVxLmhvc3RJZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICAgZ2V0RXZlbnRUeXBlQnlJZCByZXR1cm5zIGEgc2luZ2xlIG1lZXRpbmcgdHlwZSBieSBJRC5cbiAgICAgQHBhcmFtIGV2ZW50VHlwZUlkOiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0eXBlXG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBvbiB0aGUgbWVldGluZyB0eXBlIGJvb2tpbmcgbGlua1xuICAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgICAgLSBjYWxlbmRhclNsdWcgSVMgTk9UIFVTRUQgVE8gUkVUUklFVkUgVEhFIEVWRU5UIFRZUEUsIE9OTFkgVE8gTUFLRSBUSEUgQk9PS0lORyBVUkxcbiAgICovXG4gIGdldEV2ZW50VHlwZUJ5SWQocmVxOiB7XG4gICAgZXZlbnRUeXBlSWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGUgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRFdmVudFR5cGVCeUlkKHsgZXZlbnRUeXBlSWQ6IHJlcS5ldmVudFR5cGVJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcCkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcC5tZWV0aW5nVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIE1lZXRpbmdUeXBlRnJvbUFwaSh7XG4gICAgICAgICAgICBtZWV0aW5nVHlwZUFwaTogcmVzcC5tZWV0aW5nVHlwZSxcbiAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlc3AubWVldGluZ1R5cGUuY2FsZW5kYXJJZCB8fCBcIlwiLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgICAgICAgY2FsZW5kYXJTbHVnOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEJvb2tpbmdVcmwgcmV0dXJucyBhIGxpbmsgdGhhdCBjYW4gYmUgdXNlZCB0byBib29rIGEgbWVldGluZyB3aXRoIHRoaXMgaG9zdC5cbiAgICAgQHBhcmFtIGNhbGVuZGFySWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdCBvciBncm91cGluZyBvZiBob3N0cyAoaS5lLiwgdGVhbSkuXG4gICAgIEBwYXJhbSBAZGVwcmVjYXRlZCBob3N0SWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdC5cbiAgICAgQHBhcmFtIG1lZXRpbmdUeXBlSWQ6IEFuIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBtZWV0aW5nIHR5cGUuIERlZmF1bHQ6IDMwLW1pbnV0ZXMuXG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgdXJsLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSB1c2VkIHRvIHByZS1maWxsIGNlcnRhaW4gZm9ybSBmaWVsZHMgYW5kIHdpbGwgYmUgc3RvcmVkIGR1cmluZyB0aGUgYm9va2luZyBwcm9jZXNzLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSBvYnRhaW5lZCBieSBzdWJzY3JpYmluZyB0byB0aGUgYm9va2luZyBldmVudC5cbiAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgKi9cbiAgZ2V0Qm9va2luZ1VybChyZXE6IHtcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIGNhbGVuZGFySWQgaW5zdGVhZC4gY2FsZW5kYXJJZCBub3QgcmVxdWlyZWQgdG8gYXZvaWQgYnJlYWtpbmcgZXhpc3RpbmcgY2xpZW50cy5cbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBjYWxlbmRhcklkPzogc3RyaW5nO1xuICAgIC8vIEBkZXByZWNhdGVkOiB1c2UgbWVldGluZ1R5cGVTbHVnIGluc3RlYWRcbiAgICBtZWV0aW5nVHlwZUlkPzogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlU2x1Zz86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgICBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB8fCByZXEuaG9zdElkLFxuICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKCkgPyBFbnZpcm9ubWVudC5QUk9EIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgY2FsZW5kYXJTbHVnOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEdlbmVyYWxCb29raW5nVXJsIHJldHVybnMgYSBsaW5rIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgbWVldGluZyB0eXBlIHRvIGJvb2sgd2l0aCB0aGUgZ2l2ZW4gY2FsZW5kYXIuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMgKGkuZS4sIHRlYW0pLlxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAqL1xuICBnZXRHZW5lcmFsQm9va2luZ1VybChyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBvZihcbiAgICAgIGdldEdlbmVyYWxCb29raW5nVXJsSW1wbGVtZW50YXRpb24oe1xuICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKCkgPyBFbnZpcm9ubWVudC5QUk9EIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQsXG4gICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRCb29raW5nVXJsc011bHRpIHJldHVybnMgYSBtYXBwaW5nIG9mIGhvc3RzIC0+IGV2ZW50IHR5cGVzIC0+IGJvb2tpbmcgbGlua3MuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMuXG4gICAgIEBwYXJhbSBtZWV0aW5nVHlwZVNsdWc6IG1lZXRpbmdUeXBlU2x1Z3MgYXJlIHBhc3NlZCBpbiB0aGUgZm9ybSB7aG9zdElkOiBbbWVldGluZ1R5cGVTbHVnMSwgbWVldGluZ1R5cGVTbHVnMl19XG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgdXJsLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSB1c2VkIHRvIHByZS1maWxsIGNlcnRhaW4gZm9ybSBmaWVsZHMgYW5kIHdpbGwgYmUgc3RvcmVkIGR1cmluZyB0aGUgYm9va2luZyBwcm9jZXNzLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSBvYnRhaW5lZCBieSBzdWJzY3JpYmluZyB0byB0aGUgYm9va2luZyBldmVudC5cbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICovXG4gIGdldEJvb2tpbmdVcmxzTXVsdGkoXG4gICAgcmVxOiB7IFtjYWxlbmRhcklkOiBzdHJpbmddOiBzdHJpbmdbXSB9LFxuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPEhvc3RVcmxNYXA+IHtcbiAgICByZXR1cm4gb2YoXG4gICAgICBPYmplY3Qua2V5cyhyZXEpLnJlZHVjZSgoaG9zdE1hcCwgY2FsZW5kYXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmhvc3RNYXAsXG4gICAgICAgICAgW2NhbGVuZGFySWRdOiByZXFbY2FsZW5kYXJJZF0ucmVkdWNlKFxuICAgICAgICAgICAgKG1lZXRpbmdUeXBlTWFwLCBtZWV0aW5nVHlwZVNsdWcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5tZWV0aW5nVHlwZU1hcCxcbiAgICAgICAgICAgICAgICBbbWVldGluZ1R5cGVTbHVnXTogZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFySWQsXG4gICAgICAgICAgICAgICAgICBtZWV0aW5nVHlwZVNsdWcsXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJTbHVnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9IGFzIHsgW21lZXRpbmdUeXBlSWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9LCB7fSBhcyBIb3N0VXJsTWFwKSxcbiAgICApO1xuICB9XG5cbiAgaXNIb3N0Q29uZmlndXJlZChyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8SXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5pc0hvc3RDb25maWd1cmVkKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlKSA9PiByZXNwKSk7XG4gIH1cblxuICBzZXRHZW5lcmFsQXZhaWxhYmlsaXR5KHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIHdlZWtkYXlzQXZhaWxhYmlsaXR5IGluc3RlYWRcbiAgICBkYXlzPzogRGF5T2ZXZWVrW107XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSB3ZWVrZGF5c0F2YWlsYWJpbGl0eSBpbnN0ZWFkXG4gICAgdGltZVNsb3Q/OiBUaW1lUmFuZ2VJbnRlcmZhY2U7XG4gICAgd2Vla2RheXNBdmFpbGFiaWxpdHk/OiBXZWVrZGF5QXZhaWxhYmlsaXR5W107XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgY29uc3QgYXBpUmVxID0ge1xuICAgICAgLi4ucmVxLFxuICAgICAgdGltZVpvbmU6IG5ldyBUaW1lWm9uZShyZXEudGltZVpvbmUpLFxuICAgIH07XG4gICAgaWYgKHJlcS50aW1lU2xvdCkge1xuICAgICAgYXBpUmVxLnRpbWVTbG90ID0gbmV3IFRpbWVSYW5nZShyZXEudGltZVNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5zZXRHZW5lcmFsQXZhaWxhYmlsaXR5KGFwaVJlcSkucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0Qm9va2VkTWVldGluZ3MocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8TWVldGluZz4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmxpc3RCb29rZWRNZWV0aW5ncyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgcGFnaW5nT3B0aW9uczogbmV3IFBhZ2VkUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICAgIGN1cnNvcjogcmVxLmN1cnNvcixcbiAgICAgICAgICBwYWdlU2l6ZTogcmVxLnBhZ2VTaXplLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyczogbmV3IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzKHJlcS5maWx0ZXJzKSxcbiAgICAgICAgdGltZVpvbmU6IG5ldyBUaW1lWm9uZShyZXEudGltZVpvbmUpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IExpc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWVldGluZ3MgPSAocmVzcC5tZWV0aW5ncyB8fCBbXSkubWFwKChtZWV0aW5nKSA9PlxuICAgICAgICAgICAgbWVldGluZ0Zyb21BcGkobWVldGluZyksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgICBtZWV0aW5ncyxcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBjYW5jZWxNZWV0aW5nKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jYW5jZWxNZWV0aW5nKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVNZWV0aW5nKHJlcTogeyBtZWV0aW5nSWQ6IHN0cmluZzsgc3RhcnQ6IERhdGU7IGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnJlc2NoZWR1bGVNZWV0aW5nKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIGxpc3RBdmFpbGFiaWxpdHkocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnNJbnRlcmZhY2U7XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxQYWdlZFJlc3BvbnNlPEF2YWlsYWJpbGl0eVJ1bGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdEF2YWlsYWJpbGl0eShyZXEpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSAocmVzcG9uc2UuYXZhaWxhYmlsaXR5UnVsZXMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGhvc3RJZDogYS5ob3N0SWQgfHwgXCJcIixcbiAgICAgICAgICAgICAgbWVldGluZ1R5cGVJZDogYS5tZWV0aW5nVHlwZUlkIHx8IFwiXCIsXG4gICAgICAgICAgICAgIGRheTogYS5kYXksXG4gICAgICAgICAgICAgIHRpbWVTbG90OiBhLnRpbWVTbG90LFxuICAgICAgICAgICAgICB0aW1lWm9uZTogYS50aW1lWm9uZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZWRSZXNwb25zZShcbiAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgIHJlc3BvbnNlLm1ldGFkYXRhLm5leHRDdXJzb3IsXG4gICAgICAgICAgcmVzcG9uc2UubWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKiB1cGRhdGVQcmVmZXJlbmNlcyB3aWxsIHVwZGF0ZSB0aGUgaG9zdCdzIHByZWZlcmVuY2VzLlxuICAgKiBJdCBpcyBndWFyYW50ZWVkIHRvIG9ubHkgdXBkYXRlIHRoZSBmaWVsZHMgcHJvdmlkZWQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgdXBkYXRlUHJlZmVyZW5jZXMoe21lZXRpbmdJbnRlZ3JhdGlvbjogTWVldGluZ1NvdXJjZS5NRUVUSU5HX1NPVVJDRV9HT09HTEVfTUVFVH0pXG4gICAqICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBwcmVmZXJlbmNlIG1lZXRpbmdJbnRlZ3JhdGlvbiB0byBHb29nbGUgTWVldC4gS2VlcGluZyB0aGUgb3RoZXIgcHJlZmVyZW5jZXMgdGhlIHNhbWUuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSBhIGxpc3Qgb2Yga2V5cyB0byB1cGRhdGUgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICAgdXBkYXRlUHJlZmVyZW5jZXMoey4uLm9iamVjdCB3aXRoIGFsbCBmaWVsZHN9LCBbJ21lZXRpbmdJbnRlZ3JhdGlvbiddKVxuICAgKiAgIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICdtZWV0aW5nSW50ZWdyYXRpb24nIHRvIHRoZSB2YWx1ZSBpbiBwcmVmZXJlbmNlcy5cbiAgICpcbiAgICogQ2FsbGluZyB3aXRoIGFuIGVtcHR5IG9iamVjdCBhbmQgbm8ga2V5cyBpcyBhIG5vLW9wLCBvciBhbiB1bmRlZmluZWQgb2JqZWN0LlxuICAgKiBDYWxsaW5nIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgZmllbGRzIG5vdCBpbiBgUHJlZmVyZW5jZXNgIG9yIHdpdGggdXBkYXRlRmllbGRzIG5vdCBsaW5rZWQgdG8gcHJvcGVydGllcyBpblxuICAgKiBgUHJlZmVyZW5jZXNgIGlzIGFuIGVycm9yLlxuICAgKi9cbiAgdXBkYXRlUHJlZmVyZW5jZXMocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgcHJlZmVyZW5jZXM6IFBhcnRpYWw8UHJlZmVyZW5jZXM+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBQcmVmZXJlbmNlcylbXTtcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEucHJlZmVyZW5jZXMsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnVwZGF0ZUhvc3RQcmVmZXJlbmNlcyh7XG4gICAgICAgIGhvc3RJZDogcmVxLmhvc3RJZCxcbiAgICAgICAgcHJlZmVyZW5jZXM6IHJlcS5wcmVmZXJlbmNlcyxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZ2V0UHJlZmVyZW5jZXMocmVxOiB7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPFByZWZlcmVuY2VzPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRIb3N0UHJlZmVyZW5jZXMoe1xuICAgICAgICBob3N0SWQ6IHJlcS5ob3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZSkgPT4gUHJlZmVyZW5jZXNGcm9tQXBpKHJlc3BvbnNlLnByZWZlcmVuY2VzKSkpO1xuICB9XG5cbiAgZ2V0TWVldGluZyhtZWV0aW5nSWQ6IHN0cmluZywgbG9jYXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8TWVldGluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0SG9zdE1lZXRpbmcoe1xuICAgICAgICBtZWV0aW5nSWQ6IG1lZXRpbmdJZCxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEdldEhvc3RNZWV0aW5nUmVzcG9uc2UpID0+IG1lZXRpbmdGcm9tQXBpKHJlc3AubWVldGluZykpLFxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZU1lZXRpbmdNZXRhZGF0YShyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YTogTWVldGluZ01ldGFkYXRhO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVNZWV0aW5nTWV0YWRhdGEoe1xuICAgICAgICBtZWV0aW5nSWQ6IHJlcS5tZWV0aW5nSWQsXG4gICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBob3N0Qm9va01lZXRpbmcocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgbWVldGluZ1R5cGVJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGNvbW1lbnQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IE1lZXRpbmdNZXRhZGF0YTtcbiAgICBhdHRlbmRlZXM6IChPbWl0PFxuICAgICAgQ29udGFjdCxcbiAgICAgIFwiZnJvbVByb3RvXCIgfCBcInRvQXBpSnNvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJ0aW1lWm9uZVwiXG4gICAgPiAmIHsgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlIH0pW107XG4gICAgbG9jYXRpb24/OiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxCb29rTWVldGluZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaG9zdEJvb2tNZWV0aW5nKHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIGF0dGVuZGVlczogcmVxLmF0dGVuZGVlcyxcbiAgICB9KTtcbiAgfVxuXG4gIGhvc3RCb29rU2Vzc2lvbihcbiAgICByZXE6IEhvc3RCb29rU2Vzc2lvblJlcXVlc3RJbnRlcmZhY2UsXG4gICk6IE9ic2VydmFibGU8Qm9va1Nlc3Npb25SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RCb29rU2Vzc2lvbih7XG4gICAgICAuLi5yZXEsXG4gICAgfSk7XG4gIH1cblxuICBib29rTWVldGluZyhyZXE6IEhvc3RCb29rTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuYm9va01lZXRpbmcocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXNwOiBIb3N0Qm9va01lZXRpbmdSZXNwb25zZSkgPT4gcmVzcC5tZWV0aW5nSWQpKTtcbiAgfVxuXG4gIC8vIGxpc3RCb29rZWRNZWV0aW5nc1YyIHJldHVybnMgYm9va2luZ3MgZ3JvdXBlZCBieSBib29raW5nX2dyb3VwX2lkLlxuICAvLyBTdGFuZGFsb25lIG1lZXRpbmdzIGFwcGVhciBhcyBhIHNpbmdsZS1lbnRyeSBCb29rZWRNZWV0aW5nR3JvdXAgd2l0aCBhbiBlbXB0eVxuICAvLyBib29raW5nR3JvdXBJZDsgYmF0Y2ggYm9va2luZ3MgYXBwZWFyIGFzIG9uZSBCb29rZWRNZWV0aW5nR3JvdXAgd2l0aCBOIHNpYmxpbmdzLlxuICBsaXN0Qm9va2VkTWVldGluZ3NWMihyZXE6IHtcbiAgICBmaWx0ZXJzOiBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZTtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8UGFnZWRSZXNwb25zZTxCb29rZWRNZWV0aW5nR3JvdXA+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5saXN0Qm9va2VkTWVldGluZ3NWMih7XG4gICAgICAgIGZpbHRlcnM6IG5ldyBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVycyhyZXEuZmlsdGVycyksXG4gICAgICAgIHBhZ2luZ09wdGlvbnM6IG5ldyBQYWdlZFJlcXVlc3RPcHRpb25zKHtcbiAgICAgICAgICBjdXJzb3I6IHJlcS5jdXJzb3IsXG4gICAgICAgICAgcGFnZVNpemU6IHJlcS5wYWdlU2l6ZSxcbiAgICAgICAgfSksXG4gICAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBMaXN0Qm9va2VkTWVldGluZ3NWMlJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9va2luZ3MgPSAocmVzcC5ib29raW5ncyB8fCBbXSkubWFwKChib29raW5nKSA9PiAoe1xuICAgICAgICAgICAgYm9va2luZ0dyb3VwSWQ6IGJvb2tpbmcuYm9va2luZ0dyb3VwSWQgfHwgXCJcIixcbiAgICAgICAgICAgIG1lZXRpbmdzOiAoYm9va2luZy5tZWV0aW5ncyB8fCBbXSkubWFwKChtZWV0aW5nKSA9PlxuICAgICAgICAgICAgICBtZWV0aW5nRnJvbUFwaShtZWV0aW5nKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJldHVybiBuZXcgUGFnZWRSZXNwb25zZShcbiAgICAgICAgICAgIGJvb2tpbmdzLFxuICAgICAgICAgICAgcmVzcC5wYWdpbmdNZXRhZGF0YS5uZXh0Q3Vyc29yLFxuICAgICAgICAgICAgcmVzcC5wYWdpbmdNZXRhZGF0YS5oYXNNb3JlLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGhvc3RCb29rQmF0Y2hNZWV0aW5nIGJvb2tzIGEgbWVldGluZyBvbiB0aGUgaG9zdCBjYWxlbmRhciDigJQgc2luZ2xlLXNlcnZpY2VcbiAgLy8gKE49MSB0YXJnZXQpIG9yIG11bHRpLXNlcnZpY2UgKE4+MSBvcmRlcmVkIHRhcmdldHMpLiBSZXR1cm5zIHRoZSBib29raW5nX2dyb3VwX2lkLlxuICBob3N0Qm9va0JhdGNoTWVldGluZyhyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogQmF0Y2hCb29raW5nVGFyZ2V0SW50ZXJmYWNlW107XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgYXR0ZW5kZWVzPzogQ29udGFjdEludGVyZmFjZVtdO1xuICAgIGNvbW1lbnQ/OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGZvcm1BbnN3ZXJzPzogTWVldGluZ0Zvcm07XG4gICAgbG9jYXRpb24/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gICAgYm9va2luZ09yaWdpbklkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmhvc3RCb29rQmF0Y2hNZWV0aW5nKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgICBmb3JtQW5zd2VyczogYW5zd2Vyc1RvQVBJKHJlcS5mb3JtQW5zd2VycyksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogSG9zdEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZSkgPT4gcmVzcC5ib29raW5nR3JvdXBJZCksXG4gICAgICApO1xuICB9XG5cbiAgLy8gaG9zdFJlc2NoZWR1bGVCYXRjaE1lZXRpbmcgYWNjZXB0cyBlaXRoZXIgYSBzaW5nbGUgbWVldGluZ19pZCBvciBhIGJvb2tpbmdfZ3JvdXBfaWQuXG4gIC8vIFdoZW4gYSBib29raW5nX2dyb3VwX2lkIGlzIHBhc3NlZCB0aGUgc2VydmVyIHJlc2NoZWR1bGVzIGV2ZXJ5IHNpYmxpbmcgYXRvbWljYWxseSxcbiAgLy8gcHJlc2VydmluZyBwZXItc2libGluZyBkdXJhdGlvbnMgYW5kIHNoaWZ0aW5nIGFsbCBieSB0aGUgc2FtZSBkZWx0YS5cbiAgaG9zdFJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICB0aW1lWm9uZT86IFRpbWVab25lSW50ZXJmYWNlO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0UmVzY2hlZHVsZUJhdGNoTWVldGluZyhyZXEpXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICAvLyBob3N0Q2FuY2VsQmF0Y2hNZWV0aW5nIGFjY2VwdHMgZWl0aGVyIGEgc2luZ2xlIG1lZXRpbmdfaWQgb3IgYSBib29raW5nX2dyb3VwX2lkLlxuICAvLyBGb3IgcGFydGlhbC1ncm91cCBjYW5jZWxsYXRpb24gdGhlIEZFIGlzc3VlcyBOIHBhcmFsbGVsIGNhbGxzIGVhY2ggd2l0aCB0aGVcbiAgLy8gaW5kaXZpZHVhbCBtZWV0aW5nX2lkLlxuICBob3N0Q2FuY2VsQmF0Y2hNZWV0aW5nKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaG9zdENhbmNlbEJhdGNoTWVldGluZyhyZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgLy8gZ2V0TWVldGluZ1N0YXRzIHJldHVybnMgYWdncmVnYXRlZCBtZWV0aW5nIHN0YXRpc3RpY3MgZm9yIHRoZSBob3N0LCBiYWNraW5nIHRoZVxuICAvLyBcIk15IE1lZXRpbmdzXCIgZGFzaGJvYXJkIGNhcmQuIHRpbWVTcGFuIG11c3QgYmUgZXhwcmVzc2VkIGluIHRoZSBjYWxsZXIncyB0aW1lIHpvbmU7XG4gIC8vIHRpbWVab25lIGlzIHVzZWQgdG8gYnVja2V0IG1lZXRpbmdzIGludG8gZGF5cyBhbmQgdG8gYWxpZ24gdGhlIGNvbXBhcmlzb24gcGVyaW9kLlxuICBnZXRNZWV0aW5nU3RhdHMocmVxOiB7XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPE1lZXRpbmdTdGF0cz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0TWVldGluZ1N0YXRzKHtcbiAgICAgICAgdGltZVNwYW46IHJlcS50aW1lU3BhbixcbiAgICAgICAgdGltZVpvbmU6IHJlcS50aW1lWm9uZSxcbiAgICAgICAgYnVzaW5lc3NJZDogcmVxLmJ1c2luZXNzSWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwOiBHZXRNZWV0aW5nU3RhdHNSZXNwb25zZSkgPT4gbWVldGluZ1N0YXRzRnJvbUFwaShyZXNwKSkpO1xuICB9XG5cbiAgLy8gaG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90cyByZXR1cm5zIHZhbGlkIGNoYWluIHN0YXJ0IHRpbWVzIGZvciBhXG4gIC8vIG11bHRpLXNlcnZpY2UgaG9zdCBib29raW5nLiBFYWNoIHNsb3QgaXMgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBtZWV0aW5nXG4gIC8vIGluIHRoZSBjaGFpbi5cbiAgaG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90cyhyZXE6IHtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICB0YXJnZXRzOiBCYXRjaEV2ZW50VHlwZVRhcmdldEludGVyZmFjZVtdO1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFRpbWVTcGFuW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMocmVxKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogSG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3AuaXNvVGltZVNsb3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwLmlzb1RpbWVTbG90cy5tYXAoKGlzbykgPT4gKHtcbiAgICAgICAgICAgICAgc3RhcnQ6IG5ldyBEYXRlKGlzby5zdGFydCksXG4gICAgICAgICAgICAgIGVuZDogbmV3IERhdGUoaXNvLmVuZCksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gaG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c0ZvclJlc2NoZWR1bGUgcmV0dXJucyB2YWxpZCBjaGFpbiBzdGFydCB0aW1lcyBmb3IgcmVzY2hlZHVsaW5nXG4gIC8vIGFuIGV4aXN0aW5nIG1lZXRpbmcgb3IgYm9va2luZyBncm91cCAoaWQgaXMgYSBtZWV0aW5nX2lkIG9yIEJHLSBncm91cCBpZCkuIENvbmZpZyBpcyByZXNvbHZlZFxuICAvLyBmcm9tIHRoZSBib29rZWQgcmVjb3JkKHMpIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IGV2ZW50LXR5cGUgc2V0dGluZ3MuXG4gIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNGb3JSZXNjaGVkdWxlKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8VGltZVNwYW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c0ZvclJlc2NoZWR1bGUocmVxKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogSG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3AuaXNvVGltZVNsb3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwLmlzb1RpbWVTbG90cy5tYXAoKGlzbykgPT4gKHtcbiAgICAgICAgICAgICAgc3RhcnQ6IG5ldyBEYXRlKGlzby5zdGFydCksXG4gICAgICAgICAgICAgIGVuZDogbmV3IERhdGUoaXNvLmVuZCksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gY3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlcyB3aWxsIGNyZWF0ZSB3aGF0IE1lZXRpbmcgU2NoZWR1bGVyIGRlZW1zIHRvIGJlIHRoZSBkZWZhdWx0IG1lZXRpbmcgdHlwZXMuXG4gIC8vIElmIHRoZSBjYWxlbmRhciBhbHJlYWR5IGhhcyBtZWV0aW5nIHR5cGVzLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBuby1vcC5cbiAgY3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlcyhyZXE6IHsgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMoeyBjYWxlbmRhcklkczogcmVxLmNhbGVuZGFySWRzIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGNyZWF0ZU1lZXRpbmdUeXBlKHJlcToge1xuICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZTtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgTWVldGluZ1R5cGUpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLm1lZXRpbmdUeXBlLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVNZWV0aW5nVHlwZSh7XG4gICAgICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZVRvQXBpKHsgbWVldGluZ1R5cGU6IHJlcS5tZWV0aW5nVHlwZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5pZCkpO1xuICB9XG5cbiAgLyogdXBkYXRlTWVldGluZ1R5cGUgd2lsbCB1cGRhdGUgdGhlIG1lZXRpbmcgdHlwZSBmaWVsZHMuXG4gICAqIEl0IGlzIGd1YXJhbnRlZWQgdG8gb25seSB1cGRhdGUgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICB1cGRhdGVNZWV0aW5nVHlwZSh7bmFtZTogJ09uYm9hcmRpbmcnfSlcbiAgICogIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICduYW1lJyB0byAnT25ib2FyZGluZycuIEtlZXBpbmcgdGhlIG90aGVyIGZpZWxkcyB0aGUgc2FtZS5cbiAgICpcbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIGEgbGlzdCBvZiBrZXlzIHRvIHVwZGF0ZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICB1cGRhdGVNZWV0aW5nVHlwZSh7Li4ub2JqZWN0IHdpdGggYWxsIGZpZWxkc30sIFsnbmFtZSddKVxuICAgKiAgIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICduYW1lJyB0byB0aGUgdmFsdWUgcGFzc2VkIGluLlxuICAgKlxuICAgKiBDYWxsaW5nIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFuZCBubyBrZXlzIGlzIGEgbm8tb3AsIG9yIGFuIHVuZGVmaW5lZCBvYmplY3QuXG4gICAqIENhbGxpbmcgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgbm90IGluIGBNZWV0aW5nVHlwZWAgb3Igd2l0aCB1cGRhdGVGaWVsZHMgbm90IGxpbmtlZCB0byBwcm9wZXJ0aWVzIGluXG4gICAqIGBNZWV0aW5nVHlwZWAgaXMgYW4gZXJyb3IuXG4gICAqL1xuICB1cGRhdGVNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlOiBQYXJ0aWFsPE1lZXRpbmdUeXBlPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgTWVldGluZ1R5cGUpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5tZWV0aW5nVHlwZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlTWVldGluZ1R5cGUoe1xuICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGVUb0FwaSh7IG1lZXRpbmdUeXBlOiByZXEubWVldGluZ1R5cGUgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZGVsZXRlTWVldGluZ1R5cGUocmVxOiB7IGlkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZGVsZXRlTWVldGluZ1R5cGUoeyBpZDogcmVxLmlkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldEhvc3RzRm9yQ2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx7XG4gICAgaG9zdFVzZXJzOiBIb3N0VXNlcltdO1xuICAgIGF2YWlsYWJpbGl0eVJ1bGVzOiB7IFtrZXk6IHN0cmluZ106IEF2YWlsYWJpbGl0eVJ1bGVMaXN0IH07XG4gIH0+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RzRm9yQ2FsZW5kYXIoeyBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaG9zdFVzZXJzID0gKHJlcy5ob3N0VXNlcnMgfHwgW10pLm1hcCgoaG9zdHVzZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBob3N0VXNlckZyb21BcGkoaG9zdHVzZXIpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYXZhaWxhYmlsaXR5UnVsZXMgPSByZXMuaG9zdFVzZXJBdmFpbGFiaWxpdHlSdWxlIHx8IHt9O1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RVc2VycyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVJ1bGVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIElzQ2FsZW5kYXJDb25maWd1cmVkKFxuICAgIHJlcTogSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPElzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5pc0NhbGVuZGFyQ29uZmlndXJlZChyZXEpO1xuICB9XG5cbiAgc2VuZE1lZXRpbmdSZXF1ZXN0RW1haWwoXG4gICAgcmVxOiBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2Uuc2VuZE1lZXRpbmdSZXF1ZXN0RW1haWwocmVxKTtcbiAgfVxuXG4gIGNyZWF0ZVNlcnZpY2UocmVxOiB7XG4gICAgc2VydmljZTogU2VydmljZTtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgU2VydmljZSlbXTtcbiAgICBIb3N0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEuc2VydmljZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlU2VydmljZSh7XG4gICAgICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlVG9BcGkoeyBzZXJ2aWNlOiByZXEuc2VydmljZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5pZCkpO1xuICB9XG5cbiAgdXBkYXRlU2VydmljZShyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNlcnZpY2U6IFBhcnRpYWw8U2VydmljZT47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFNlcnZpY2UpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5zZXJ2aWNlLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVTZXJ2aWNlKHtcbiAgICAgICAgaWQ6IHJlcS5pZCxcbiAgICAgICAgc2VydmljZTogU2VydmljZVR5cGVUb0FwaSh7IHNlcnZpY2U6IHJlcS5zZXJ2aWNlIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZVNlcnZpY2UocmVxOiB7IGlkOiBzdHJpbmc7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZVNlcnZpY2UoeyBpZDogcmVxLmlkLCBob3N0SWQ6IHJlcS5ob3N0SWQgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgbGlzdFNlcnZpY2VzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxTZXJ2aWNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0U2VydmljZXMoeyBob3N0SWQ6IHJlcS5ob3N0SWQgfSkucGlwZShcbiAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzIHx8ICFyZXMuc2VydmljZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5zZXJ2aWNlcy5tYXAoKHNlcnZpY2UpID0+XG4gICAgICAgICAgU2VydmljZUZyb21BcGkoe1xuICAgICAgICAgICAgc2VydmljZUFwaTogc2VydmljZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUdyb3VwKHJlcToge1xuICAgIGdyb3VwOiBHcm91cDtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgR3JvdXApW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLmdyb3VwLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVHcm91cCh7XG4gICAgICAgIGdyb3VwOiBHcm91cFR5cGVUb0FQaSh7IGdyb3VwOiByZXEuZ3JvdXAgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZUdyb3VwKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZ3JvdXA6IFBhcnRpYWw8R3JvdXA+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBHcm91cClbXTtcbiAgICBIb3N0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLmdyb3VwLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVHcm91cCh7XG4gICAgICAgIGlkOiByZXEuaWQsXG4gICAgICAgIGdyb3VwOiBHcm91cFR5cGVUb0FQaSh7IGdyb3VwOiByZXEuZ3JvdXAgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZGVsZXRlR3JvdXAocmVxOiB7IGlkOiBzdHJpbmc7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZUdyb3VwKHsgaWQ6IHJlcS5pZCwgaG9zdElkOiByZXEuaG9zdElkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGxpc3RHcm91cHMocmVxOiB7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPEdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0R3JvdXBzKHsgaG9zdElkOiByZXEuaG9zdElkIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLmdyb3Vwcykge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmdyb3Vwcy5tYXAoKGdyb3VwKSA9PlxuICAgICAgICAgIEdyb3VwRnJvbUFwaSh7XG4gICAgICAgICAgICBncm91cEFwaTogZ3JvdXAsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBnZXRHcm91cChyZXE6IHtcbiAgICBncm91cElkOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuZ2V0R3JvdXAocmVxKTtcbiAgfVxuICBnZXRTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2VJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0U2VydmljZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuZ2V0U2VydmljZShyZXEpO1xuICB9XG5cbiAgY2hlY2tHcm91cE9yU2VydmljZVNsdWdFeGlzdChyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBzbHVnSWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5leGlzdHMpKTtcbiAgfVxuXG4gIGNoZWNrRXZlbnRUeXBlU2x1Z0V4aXN0KHJlcToge1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcbiAgICBzbHVnSWRlbnRpZmllcjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jaGVja0V2ZW50VHlwZVNsdWdFeGlzdChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmV4aXN0cykpO1xuICB9XG5cbiAgZ2V0RW50aXR5QXNzb2NpYXRpb25zKHJlcToge1xuICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEVudGl0eUFzc29jaWF0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldEVudGl0eUFzc29jaWF0aW9ucyhyZXEpO1xuICB9XG5cbiAgZW5zdXJlU2Vzc2lvbkV2ZW50Q2FsZW5kYXJzRXhpc3QocmVxOiB7XG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZVNlc3Npb25FdmVudENhbGVuZGFyc0V4aXN0KHsgZXh0ZXJuYWxJZDogcmVxLmV4dGVybmFsSWQgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXM/LmNhbGVuZGFySWQgfHwgXCJcIikpO1xuICB9XG5cbiAgaG9zdERlbGV0ZUF0dGVuZGVlcyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBlbWFpbHNUb0RlbGV0ZTogRW1haWxzVG9EZWxldGVbXTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdERlbGV0ZUF0dGVuZGVlcyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXR0ZW5kZWVzKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnNJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RBdHRlbmRlZXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RBdHRlbmRlZXMocmVxKTtcbiAgfVxuXG4gIGNhbmNlbFNlc3Npb24ocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNhbmNlbFNlc3Npb24oe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgcmVzY2hlZHVsZVNlc3Npb24ocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgaXNSZWN1cnJpbmc6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnJlc2NoZWR1bGVTZXNzaW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIGxpc3RBdmFpbGFibGVUaW1lc2xvdHNGb3JTZXNzaW9uKHJlcToge1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICB1c2VySWRzOiBzdHJpbmdbXTtcbiAgfSk6IE9ic2VydmFibGU8VGltZVNwYW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAubGlzdEF2YWlsYWJsZVRpbWVzbG90c0ZvclNlc3Npb24ocmVxKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcCkgPT5cbiAgICAgICAgICByZXNwLnRpbWVTbG90cyA/IHJlc3AudGltZVNsb3RzLm1hcCgodHMpID0+IFRpbWVTcGFuRnJvbUFwaSh0cykpIDogW10sXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgbGlzdEV2ZW50VHlwZXNGb3JNdWx0aXBsZUNhbGVuZGFycyhyZXE6IHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnMocmVxKTtcbiAgfVxuXG4gIGxpc3RCb29raW5nVHlwZXNGb3JBaShyZXE6IHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBib29raW5nU291cmNlOiBlLkJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RCb29raW5nVHlwZXNGb3JBSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdEJvb2tpbmdUeXBlc0ZvckFpKHJlcSk7XG4gIH1cblxufVxuXG4iXX0=