@dereekb/dbx-form 9.25.7 → 9.25.9

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.
@@ -44,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
44
44
  `
45
45
  }]
46
46
  }], ctorParameters: function () { return [{ type: i1.DbxCalendarStore }, { type: i2.DbxCalendarScheduleSelectionStore }]; } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLmRheXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uZGF5cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQThFLHVDQUF1QyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUU3USxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7QUFVeEYsTUFBTSxPQUFPLDZDQUE2QztJQWF4RCxZQUFxQixnQkFBa0MsRUFBVyxpQ0FBb0U7UUFBakgscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFXLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBbUM7UUFaN0gsY0FBUyxHQUE4RCxJQUFJLENBQUMsaUNBQWlDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvTCxtQkFBYyxHQUFzRSxDQUFDLEtBQW9ELEVBQUUsRUFBRTtZQUNwSixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLHlDQUF5QyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbkYsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUlPLHVCQUFrQixHQUF3RSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsdUNBQXVDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hILE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUx1SSxDQUFDOzsySUFiL0gsNkNBQTZDOytIQUE3Qyw2Q0FBNkMsaUZBTjlDOzs7O0dBSVQ7NEZBRVUsNkNBQTZDO2tCQVJ6RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQ0FBMkM7b0JBQ3JELFFBQVEsRUFBRTs7OztHQUlUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXNBcmVTZXRzRXF1aXZhbGVudCwgZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzRnJvbUVuYWJsZWREYXlzLCBkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50LCBkYXRlU2NoZWR1bGVEYXlDb2Rlc0Zyb21FbmFibGVkRGF5cywgZW5hYmxlZERheXNGcm9tRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzLCBlbmFibGVkRGF5c0Zyb21EYXRlU2NoZWR1bGVEYXlDb2RlcyB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgSGFuZGxlQWN0aW9uRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBEYnhDYWxlbmRhclN0b3JlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYi9jYWxlbmRhcic7XG5pbXBvcnQgeyBJc01vZGlmaWVkRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNGb3JtVmFsdWUgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5kYXlzLmZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRheXMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtZGF5c1wiIGRieEFjdGlvbiBkYnhBY3Rpb25BdXRvVHJpZ2dlciBkYnhBY3Rpb25FbmZvcmNlTW9kaWZpZWQgW2luc3RhbnRUcmlnZ2VyXT1cInRydWVcIiBbZGJ4QWN0aW9uSGFuZGxlcl09XCJ1cGRhdGVTY2hlZHVsZURheXNcIj5cbiAgICAgIDxkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtZGF5cy1mb3JtIGRieEFjdGlvbkZvcm0gW2RieEZvcm1Tb3VyY2VdPVwidGVtcGxhdGUkXCIgW2RieEFjdGlvbkZvcm1Nb2RpZmllZF09XCJpc0Zvcm1Nb2RpZmllZFwiPjwvZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRheXMtZm9ybT5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNDb21wb25lbnQge1xuICByZWFkb25seSB0ZW1wbGF0ZSQ6IE9ic2VydmFibGU8RGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVEYXlzRm9ybVZhbHVlPiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNjaGVkdWxlRGF5cyQucGlwZShtYXAoZW5hYmxlZERheXNGcm9tRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGlzRm9ybU1vZGlmaWVkOiBJc01vZGlmaWVkRnVuY3Rpb248RGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVEYXlzRm9ybVZhbHVlPiA9ICh2YWx1ZTogRGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVEYXlzRm9ybVZhbHVlKSA9PiB7XG4gICAgY29uc3QgbmV3U2V0VmFsdWUgPSBuZXcgU2V0KGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0Zyb21FbmFibGVkRGF5cyh2YWx1ZSkpO1xuICAgIHJldHVybiB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zY2hlZHVsZURheXMkLnBpcGUoXG4gICAgICBtYXAoKGN1cnJlbnRTZXQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gIWRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KG5ld1NldFZhbHVlLCBjdXJyZW50U2V0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYnhDYWxlbmRhclN0b3JlOiBEYnhDYWxlbmRhclN0b3JlLCByZWFkb25seSBkYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSkge31cblxuICByZWFkb25seSB1cGRhdGVTY2hlZHVsZURheXM6IEhhbmRsZUFjdGlvbkZ1bmN0aW9uPERieFNjaGVkdWxlU2VsZWN0aW9uQ2FsZW5kYXJEYXRlRGF5c0Zvcm1WYWx1ZT4gPSAodmFsdWUpID0+IHtcbiAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRTY2hlZHVsZURheXMobmV3IFNldChkYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXNGcm9tRW5hYmxlZERheXModmFsdWUpKSk7XG4gICAgcmV0dXJuIG9mKHRydWUpO1xuICB9O1xufVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLmRheXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uZGF5cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUosT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7O0FBVXhGLE1BQU0sT0FBTyw2Q0FBNkM7SUFheEQsWUFBcUIsZ0JBQWtDLEVBQVcsaUNBQW9FO1FBQWpILHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVyxzQ0FBaUMsR0FBakMsaUNBQWlDLENBQW1DO1FBWjdILGNBQVMsR0FBOEQsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0wsbUJBQWMsR0FBc0UsQ0FBQyxLQUFvRCxFQUFFLEVBQUU7WUFDcEosTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsdUNBQXVDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM1RSxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxNQUFNLEdBQUcsQ0FBQyx5Q0FBeUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ25GLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUM7UUFJTyx1QkFBa0IsR0FBd0UsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxDQUFDLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUM7SUFMdUksQ0FBQzs7MklBYi9ILDZDQUE2QzsrSEFBN0MsNkNBQTZDLGlGQU45Qzs7OztHQUlUOzRGQUVVLDZDQUE2QztrQkFSekQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkNBQTJDO29CQUNyRCxRQUFRLEVBQUU7Ozs7R0FJVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQsIGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0Zyb21FbmFibGVkRGF5cywgZW5hYmxlZERheXNGcm9tRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzIH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBIYW5kbGVBY3Rpb25GdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IERieENhbGVuZGFyU3RvcmUgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViL2NhbGVuZGFyJztcbmltcG9ydCB7IElzTW9kaWZpZWRGdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieFNjaGVkdWxlU2VsZWN0aW9uQ2FsZW5kYXJEYXRlRGF5c0Zvcm1WYWx1ZSB9IGZyb20gJy4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLmRheXMuZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtZGF5cycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1kYXlzXCIgZGJ4QWN0aW9uIGRieEFjdGlvbkF1dG9UcmlnZ2VyIGRieEFjdGlvbkVuZm9yY2VNb2RpZmllZCBbaW5zdGFudFRyaWdnZXJdPVwidHJ1ZVwiIFtkYnhBY3Rpb25IYW5kbGVyXT1cInVwZGF0ZVNjaGVkdWxlRGF5c1wiPlxuICAgICAgPGRieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1kYXlzLWZvcm0gZGJ4QWN0aW9uRm9ybSBbZGJ4Rm9ybVNvdXJjZV09XCJ0ZW1wbGF0ZSRcIiBbZGJ4QWN0aW9uRm9ybU1vZGlmaWVkXT1cImlzRm9ybU1vZGlmaWVkXCI+PC9kYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtZGF5cy1mb3JtPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERieFNjaGVkdWxlU2VsZWN0aW9uQ2FsZW5kYXJEYXRlRGF5c0NvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHRlbXBsYXRlJDogT2JzZXJ2YWJsZTxEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNGb3JtVmFsdWU+ID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2NoZWR1bGVEYXlzJC5waXBlKG1hcChlbmFibGVkRGF5c0Zyb21EYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXMpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgaXNGb3JtTW9kaWZpZWQ6IElzTW9kaWZpZWRGdW5jdGlvbjxEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNGb3JtVmFsdWU+ID0gKHZhbHVlOiBEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNGb3JtVmFsdWUpID0+IHtcbiAgICBjb25zdCBuZXdTZXRWYWx1ZSA9IG5ldyBTZXQoZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzRnJvbUVuYWJsZWREYXlzKHZhbHVlKSk7XG4gICAgcmV0dXJuIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNjaGVkdWxlRGF5cyQucGlwZShcbiAgICAgIG1hcCgoY3VycmVudFNldCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSAhZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQobmV3U2V0VmFsdWUsIGN1cnJlbnRTZXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGRieENhbGVuZGFyU3RvcmU6IERieENhbGVuZGFyU3RvcmUsIHJlYWRvbmx5IGRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZTogRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlKSB7fVxuXG4gIHJlYWRvbmx5IHVwZGF0ZVNjaGVkdWxlRGF5czogSGFuZGxlQWN0aW9uRnVuY3Rpb248RGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVEYXlzRm9ybVZhbHVlPiA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldFNjaGVkdWxlRGF5cyhuZXcgU2V0KGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0Zyb21FbmFibGVkRGF5cyh2YWx1ZSkpKTtcbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { startWith } from 'rxjs';
2
+ /**
3
+ * Streams a value from the input control at the given path. If no path is specified, streams the value from the control.
4
+ *
5
+ * @param fromControl
6
+ * @param path
7
+ * @returns
8
+ */
9
+ export function streamValueFromControl(fromControl, path) {
10
+ const control = path ? fromControl.get(path) : fromControl;
11
+ return control?.valueChanges.pipe(startWith(control.value));
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5hbmd1bGFyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm0vZm9ybS5hbmd1bGFyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU83Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUksV0FBNEIsRUFBRSxJQUFzQjtJQUM1RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUMzRCxPQUFPLE9BQU8sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEEgRm9ybUdyb3VwL0Fic3RyYWN0Q29udHJvbCBwYXRoIHRvIGEgc3BlY2lmaWMgY29udHJvbC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xQYXRoID0gc3RyaW5nO1xuXG4vKipcbiAqIFN0cmVhbXMgYSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBjb250cm9sIGF0IHRoZSBnaXZlbiBwYXRoLiBJZiBubyBwYXRoIGlzIHNwZWNpZmllZCwgc3RyZWFtcyB0aGUgdmFsdWUgZnJvbSB0aGUgY29udHJvbC5cbiAqXG4gKiBAcGFyYW0gZnJvbUNvbnRyb2xcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtVmFsdWVGcm9tQ29udHJvbDxUPihmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoPzogRm9ybUNvbnRyb2xQYXRoKTogTWF5YmU8T2JzZXJ2YWJsZTxUPj4ge1xuICBjb25zdCBjb250cm9sID0gcGF0aCA/IGZyb21Db250cm9sLmdldChwYXRoKSA6IGZyb21Db250cm9sO1xuICByZXR1cm4gY29udHJvbD8udmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpKTtcbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  export * from './action';
2
2
  export * from './io';
3
+ export * from './form.angular.util';
3
4
  export * from './form.module';
4
5
  export * from './form';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxNQUFNLENBQUM7QUFDckIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2lvJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtJztcbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxNQUFNLENBQUM7QUFDckIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaW8nO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLmFuZ3VsYXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybSc7XG4iXX0=
@@ -1,5 +1,5 @@
1
- import { asArray, filterMaybeValues } from '@dereekb/util';
2
- import { dateFromLogicalDate, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, dateTimeMinuteDecisionFunction, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal } from '@dereekb/date';
1
+ import { asArray, filterMaybeValues, isISO8601DayStringStart } from '@dereekb/util';
2
+ import { dateFromLogicalDate, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, dateTimeMinuteDecisionFunction, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, toJsDayDate, isSameDate } from '@dereekb/date';
3
3
  import { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, combineLatest, Subject, merge, interval, of, combineLatestWith, filter } from 'rxjs';
4
4
  import { ChangeDetectorRef, Component } from '@angular/core';
5
5
  import { FormControl, Validators } from '@angular/forms';
@@ -9,6 +9,7 @@ import { asObservableFromGetter, filterMaybe, skipFirstMaybe, SubscriptionObject
9
9
  import { dateTimePreset } from './datetime';
10
10
  import { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';
11
11
  import { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';
12
+ import { streamValueFromControl } from '../../../../form/form.angular.util';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "./datetime.field.service";
14
15
  import * as i2 from "@angular/common";
@@ -64,6 +65,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
64
65
  this._config = new BehaviorSubject(undefined);
65
66
  this._syncConfigObs = new BehaviorSubject(undefined);
66
67
  this._defaultTimezone = new BehaviorSubject(undefined);
68
+ this._timeDate = new BehaviorSubject(undefined);
67
69
  this._presets = new BehaviorSubject(of([]));
68
70
  this._fullDayControlObs = new BehaviorSubject(undefined);
69
71
  this.fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());
@@ -75,6 +77,22 @@ export class DbxDateTimeFieldComponent extends FieldType {
75
77
  return defaultTimezone ?? guessCurrentTimezone();
76
78
  }), distinctUntilChanged(), shareReplay(1));
77
79
  this.timezoneInstance$ = this.timezone$.pipe(map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)), shareReplay(1));
80
+ this.timeDate$ = this._timeDate.pipe(switchMapMaybeDefault(), switchMap((x) => {
81
+ let obs;
82
+ if (x) {
83
+ // if the string is not a date string, then treat it as a path
84
+ if (typeof x === 'string' && !isISO8601DayStringStart(x)) {
85
+ obs = streamValueFromControl(this.form, x)?.pipe(map((x) => (x ? toJsDayDate(x) : undefined))) ?? of(undefined);
86
+ }
87
+ else {
88
+ obs = of(toJsDayDate(x));
89
+ }
90
+ }
91
+ else {
92
+ obs = of(undefined);
93
+ }
94
+ return obs;
95
+ }), distinctUntilChanged(isSameDateDay), shareReplay(1));
78
96
  this.valueInSystemTimezone$ = this.formControl$.pipe(map((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))), combineLatestWith(this.timezoneInstance$), switchMap(([x, timezoneInstance]) => {
79
97
  return x.pipe(map(dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)));
80
98
  }), throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes
@@ -94,7 +112,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
94
112
  this.showTimeInput$ = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));
95
113
  this.showAddTime$ = this.showTimeInput$.pipe(map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL), shareReplay(1));
96
114
  this.date$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), filterMaybe(), shareReplay(1));
97
- this.timezoneAbbreviation$ = combineLatest([this.date$, this.timezone$]).pipe(map(([date, timezone]) => getTimezoneAbbreviation(timezone, date)), distinctUntilChanged(), shareReplay(1));
115
+ this.timezoneAbbreviation$ = combineLatest([this.date$, this.timezone$, this.timeDate$]).pipe(map(([date, timezone, timeDate]) => getTimezoneAbbreviation(timezone, timeDate ?? date)), distinctUntilChanged(), shareReplay(1));
98
116
  this.dateValue$ = merge(this.date$, this.valueInSystemTimezone$.pipe(skipFirstMaybe())).pipe(map((x) => (x ? startOfDay(x) : null)), distinctUntilChanged(isSameDateDay), shareReplay(1));
99
117
  this.timeInput$ = this._updateTime.pipe(debounceTime(5), map(() => this.timeInputCtrl.value || ''), distinctUntilChanged());
100
118
  this.syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));
@@ -124,10 +142,10 @@ export class DbxDateTimeFieldComponent extends FieldType {
124
142
  // TODO: Get min/max using the DateTimePickerConfiguration too
125
143
  this.dateInputMin$ = this.syncConfigBeforeValue$;
126
144
  this.dateInputMax$ = this.syncConfigAfterValue$;
127
- this.rawDateTime$ = combineLatest([this.dateValue$, this.timeInput$.pipe(startWith(null)), this.fullDay$]).pipe(map(([date, timeString, fullDay]) => {
145
+ this.rawDateTime$ = combineLatest([this.dateValue$, this.timeInput$.pipe(startWith(null)), this.fullDay$, this.timeDate$]).pipe(map(([date, timeString, fullDay, timeDate]) => {
128
146
  let result;
129
- if (!date && this.timeOnly) {
130
- date = new Date();
147
+ if (!date || this.timeOnly) {
148
+ date = timeDate ?? new Date(); // use the time date, or default to the current day
131
149
  }
132
150
  if (date) {
133
151
  if (fullDay) {
@@ -145,7 +163,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
145
163
  useSystemTimezone: true
146
164
  }) ?? date;
147
165
  }
148
- else {
166
+ else if (!this.timeOnly) {
149
167
  result = date;
150
168
  }
151
169
  }
@@ -185,7 +203,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
185
203
  ...config,
186
204
  roundDownToMinute: true
187
205
  });
188
- date = instance.limit(date);
206
+ date = instance.clamp(date);
189
207
  const minutes = stepsOffset * 5;
190
208
  date = addMinutes(date, minutes);
191
209
  }
@@ -241,6 +259,9 @@ export class DbxDateTimeFieldComponent extends FieldType {
241
259
  get timezone() {
242
260
  return this.field.props.timezone;
243
261
  }
262
+ get timeDate() {
263
+ return this.field.props.timeDate;
264
+ }
244
265
  get showTimezone() {
245
266
  return this.field.props.showTimezone ?? true;
246
267
  }
@@ -261,17 +282,35 @@ export class DbxDateTimeFieldComponent extends FieldType {
261
282
  this.formControl.markAsDirty();
262
283
  this.formControl.markAsTouched();
263
284
  });
285
+ let hasSetMidnightFromInput = false;
286
+ /*
264
287
  this._valueSub.subscription = this.timeString$.subscribe((x) => {
265
- // Skip events where the timeInput value is cleared.
266
- if (!this.timeInputCtrl.value && x === '12:00AM') {
288
+ this.setTime(x);
289
+ });
290
+ */
291
+ this._valueSub.subscription = this.valueInSystemTimezone$
292
+ .pipe(map((x) => (x ? isSameDate(x, startOfDay(x)) : false)), distinctUntilChanged(), switchMap((isInputValueAtMidnight) => {
293
+ hasSetMidnightFromInput = false;
294
+ return this.timeString$.pipe(
295
+ // skip(1),
296
+ map((timeString) => [timeString, isInputValueAtMidnight]));
297
+ }))
298
+ .subscribe(([x, isInputValueAtMidnight]) => {
299
+ // Skip events where the timeInput value is cleared, unless the input value is at midnight and we've already processed it being at midnight
300
+ if (!this.timeInputCtrl.value && x === '12:00AM' && (!isInputValueAtMidnight || (isInputValueAtMidnight && hasSetMidnightFromInput))) {
267
301
  return;
268
302
  }
303
+ // update the has set flag
304
+ if (x === '12:00AM' && isInputValueAtMidnight) {
305
+ hasSetMidnightFromInput = true;
306
+ }
269
307
  this.setTime(x);
270
308
  });
271
309
  // Set default timezone if provided.
272
310
  if (this.timezone && !this.dateTimeField.fullDayInUTC) {
273
311
  this._defaultTimezone.next(asObservableFromGetter(this.timezone));
274
312
  }
313
+ this._timeDate.next(asObservableFromGetter(this.timeDate));
275
314
  // Watch for disabled changes so we can propogate them properly.
276
315
  this.formControl.registerOnDisabledChange((disabled) => {
277
316
  if (disabled) {
@@ -321,6 +360,7 @@ export class DbxDateTimeFieldComponent extends FieldType {
321
360
  this._valueSub.destroy();
322
361
  this._config.complete();
323
362
  this._defaultTimezone.complete();
363
+ this._timeDate.complete();
324
364
  this._presets.complete();
325
365
  this._fullDayControlObs.complete();
326
366
  this._offset.complete();
@@ -358,9 +398,11 @@ export class DbxDateTimeFieldComponent extends FieldType {
358
398
  this.setTime(timeString);
359
399
  }
360
400
  setTime(time) {
361
- this.timeInputCtrl.setValue(time);
362
- this._offset.next(0);
363
- this._updateTime.next();
401
+ if (this.timeInputCtrl.value !== time) {
402
+ this.timeInputCtrl.setValue(time);
403
+ this._offset.next(0);
404
+ this._updateTime.next();
405
+ }
364
406
  }
365
407
  keydownOnDateInput(event) {
366
408
  let direction = 0;
@@ -438,4 +480,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
438
480
  type: Component,
439
481
  args: [{ template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n <!-- Additional spacing -->\n <dbx-button-spacer *ngIf=\"!dateOnly\"></dbx-button-spacer>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInput ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\" [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </div>\n </div>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <button class=\"mat-datepicker-button-highlight dbx-button-spacer\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <mat-form-field class=\"dbx-datetime-row-field\" [ngClass]=\"{ 'dbx-datetime-row-field-full-width': hideDatePicker }\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <span matSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <button class=\"mat-datepicker-button-highlight dbx-button-spacer\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput matInput [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <span matSuffix>\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\n</ng-template>\n" }]
440
482
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DbxDateTimeFieldMenuPresetsService }]; } });
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9kYXRldGltZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBOEQsT0FBTyxFQUFFLGlCQUFpQixFQUErRCxNQUFNLGVBQWUsQ0FBQztBQUNwTCxPQUFPLEVBQUUsbUJBQW1CLEVBQXdCLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQzdYLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqTyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQW1CLFdBQVcsRUFBRSxVQUFVLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFF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RUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxhQUFhO0lBQ2YsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFnQjtRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pELENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt1SEE3aEJVLHlCQUF5QjsyR0FBekIseUJBQXlCLDJFQ3RMdEMsMmtJQStFQTs0RkR1R2EseUJBQXlCO2tCQUhyQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF5YmUsIFJlYWRhYmxlVGltZVN0cmluZywgQXJyYXlPclZhbHVlLCBJU084NjAxRGF0ZVN0cmluZywgYXNBcnJheSwgZmlsdGVyTWF5YmVWYWx1ZXMsIERlY2lzaW9uRnVuY3Rpb24sIE1pbGxpc2Vjb25kcywgVGltZXpvbmVTdHJpbmcsIExvZ2ljYWxEYXRlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBkYXRlRnJvbUxvZ2ljYWxEYXRlLCBEYXRlVGltZU1pbnV0ZUNvbmZpZywgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSwgZ3Vlc3NDdXJyZW50VGltZXpvbmUsIHJlYWRhYmxlVGltZVN0cmluZ1RvRGF0ZSwgdG9Mb2NhbFJlYWRhYmxlVGltZVN0cmluZywgdXRjRGF5Rm9yRGF0ZSwgc2FmZVRvSnNEYXRlLCBmaW5kTWluRGF0ZSwgZmluZE1heERhdGUsIGRhdGVUaW1lTWludXRlRGVjaXNpb25GdW5jdGlvbiwgaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcywgZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24sIGlzU2FtZURhdGVEYXksIGRhdGVUaW1lem9uZVV0Y05vcm1hbCwgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgc2hhcmVSZXBsYXksIG1hcCwgc3RhcnRXaXRoLCB0YXAsIGZpcnN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZGVib3VuY2VUaW1lLCB0aHJvdHRsZVRpbWUsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgbWVyZ2UsIGludGVydmFsLCBvZiwgY29tYmluZUxhdGVzdFdpdGgsIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGFkZE1pbnV0ZXMsIHN0YXJ0T2ZEYXksIGFkZERheXMgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBhc09ic2VydmFibGVGcm9tR2V0dGVyLCBmaWx0ZXJNYXliZSwgT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXIsIHNraXBGaXJzdE1heWJlLCBTdWJzY3JpcHRpb25PYmplY3QsIHN3aXRjaE1hcE1heWJlRGVmYXVsdCwgc3dpdGNoTWFwTWF5YmVPYnMgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IERhdGVUaW1lUHJlc2V0LCBEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb24sIGRhdGVUaW1lUHJlc2V0IH0gZnJvbSAnLi9kYXRldGltZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IERieERhdGVUaW1lVmFsdWVNb2RlLCBkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnksIGRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlLCBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeSB9IGZyb20gJy4vZGF0ZS52YWx1ZSc7XG5cbmV4cG9ydCBlbnVtIERieERhdGVUaW1lRmllbGRUaW1lTW9kZSB7XG4gIC8qKlxuICAgKiBUaW1lIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgUkVRVUlSRUQgPSAncmVxdWlyZWQnLFxuICAvKipcbiAgICogVGltZSBpcyBvcHRpb25hbC5cbiAgICovXG4gIE9QVElPTkFMID0gJ29wdGlvbmFsJyxcbiAgLyoqXG4gICAqIFRpbWUgaXMgcGVybWVuYW50bHkgb2ZmLlxuICAgKi9cbiAgTk9ORSA9ICdub25lJ1xufVxuXG5leHBvcnQgdHlwZSBEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24gPSBPbWl0PERhdGVUaW1lTWludXRlQ29uZmlnLCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGUgPSAnYmVmb3JlJyB8ICdhZnRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZCB7XG4gIC8qKlxuICAgKiBGaWVsZCBrZXkvcGF0aCB0byBzeW5jIHdpdGgvYWdhaW5zdC5cbiAgICovXG4gIHN5bmNXaXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdG8gc3luYyBhZ2FpbnN0IHRoZSBvdGhlciBmaWVsZC5cbiAgICovXG4gIHN5bmNUeXBlOiBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIC8qKlxuICAgKiBDdXN0b20gZGF0ZSBsYWJlbC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gRGF0ZVxuICAgKi9cbiAgZGF0ZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdGltZSBsYWJlbC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gVGltZVxuICAgKi9cbiAgdGltZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBkYXRlIGhpbnQgZm9yIFwiQWxsIERheVwiLiBEZWZhdWx0cyB0byBcIkFsbCBEYXlcIi5cbiAgICovXG4gIGFsbERheUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBkYXRlIGhpbnQgZm9yIFwiQXRcIi4gRGVmYXVsdHMgdG8gXCJBdFwiLlxuICAgKi9cbiAgYXRUaW1lTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIERBVEVcbiAgICovXG4gIHZhbHVlTW9kZT86IERieERhdGVUaW1lVmFsdWVNb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZGF0ZSBpcyBoaWRkZW4sIGFuZCBhdXRvbWF0aWNhbGx5IHVzZXMgdG9kYXkvaW5wdXQgZGF0ZS5cbiAgICovXG4gIHRpbWVPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHRpbWUgY2FuIGJlIGFkZGVkL3JlbW92ZWQgb3B0aW9uYWxseS5cbiAgICpcbiAgICogVGhpcyBpcyBpZ25vcmVkIGlmIHRpbWVPbmx5IGlzIHNwZWNpZmllZC5cbiAgICovXG4gIHRpbWVNb2RlPzogRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlO1xuXG4gIC8qKlxuICAgKiBPdGhlciBmb3JtIGNvbnRyb2wgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhIGZ1bGwgZGF5LlxuICAgKlxuICAgKiBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiB0aW1lIGlzIG9wdGlvbmFsLlxuICAgKlxuICAgKiBXaGVuIHRpbWUgaXMgb2ZmLCB0aGUgZmllbGQgaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBmdWxsRGF5RmllbGROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwYXNzIHRoZSBkYXRlIHZhbHVlIGFzIGEgVVRDIGRhdGUsIG9yIGEgZGF0ZSBpbiB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIGZ1bGxEYXlJblVUQz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IG90IGhpZGUgdGhlIGRhdGUgaGludCBpbmZvIGNvbnRlbnQuXG4gICAqXG4gICAqIEZhbHNlIGJ5IGRlZmF1bHRcbiAgICovXG4gIGhpZGVEYXRlSGludD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGhpZGUgdGhlIGRhdGUvY2FsZW5kYXIgcGlja2VyLlxuICAgKi9cbiAgaGlkZURhdGVQaWNrZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHBpY2tlckNvbmZpZz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj47XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIHN5bmNpbmcgd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHMgd2l0aCBhIERhdGUgdmFsdWUuXG4gICAqL1xuICBnZXRTeW5jRmllbGRzT2JzPzogKCkgPT4gT2JzZXJ2YWJsZTxBcnJheU9yVmFsdWU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZD4+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgdGltZXpvbmUuIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwcmVzZXRzIHRvIHNob3cgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcHJlc2V0cz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPjtcblxuICAvLyBNQVJLOiBDb21wYXRcbiAgLyoqXG4gICAqIFVzZWQgZm9yIHJldHVybmluZyB0aGUgY29uZmlndXJhdGlvbiBvYnNlcnZhYmxlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgcGlja2VyQ29uZmlnIGluc3RlYWQuXG4gICAqL1xuICBnZXRDb25maWdPYnM/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRTeW5jUGFyc2VkRmllbGQgZXh0ZW5kcyBQaWNrPERieERhdGVUaW1lRmllbGRTeW5jRmllbGQsICdzeW5jVHlwZSc+IHtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sPE1heWJlPERhdGUgfCBJU084NjAxRGF0ZVN0cmluZz4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3luY0NvbmZpZ1ZhbHVlT2JzKHBhcnNlQ29uZmlnc09iczogT2JzZXJ2YWJsZTxEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW10+LCB0eXBlOiBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGUpOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiB7XG4gIHJldHVybiBwYXJzZUNvbmZpZ3NPYnMucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHguZmluZCgoeSkgPT4geS5zeW5jVHlwZSA9PT0gdHlwZSk7XG4gICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPjtcblxuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2wgfSA9IGNvbmZpZztcbiAgICAgICAgcmVzdWx0ID0gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgoY29udHJvbC52YWx1ZSksXG4gICAgICAgICAgbWFwKCh4KSA9PiBzYWZlVG9Kc0RhdGUoeCkgPz8gbnVsbClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG9mKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbn1cblxuY29uc3QgVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRTogTWlsbGlzZWNvbmRzID0gMTA7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJ2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYnhEYXRlVGltZUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxEYnhEYXRlVGltZUZpZWxkUHJvcHM+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfc3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF92YWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9jb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3N5bmNDb25maWdPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8QXJyYXlPclZhbHVlPERieERhdGVUaW1lRmllbGRTeW5jRmllbGQ+Pj4+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfZGVmYXVsdFRpbWV6b25lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9wcmVzZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPj4ob2YoW10pKTtcblxuICBwcml2YXRlIF9mdWxsRGF5SW5wdXRDdHJsPzogRm9ybUNvbnRyb2w7XG4gIHByaXZhdGUgX2Z1bGxEYXlDb250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8Ym9vbGVhbj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmdWxsRGF5Q29udHJvbCQgPSB0aGlzLl9mdWxsRGF5Q29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHByaXZhdGUgX29mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2xPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlPj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHByaXZhdGUgX3VwZGF0ZVRpbWUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5fZGVmYXVsdFRpbWV6b25lLnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnBpcGUoXG4gICAgbWFwKChkZWZhdWx0VGltZXpvbmUpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltZXpvbmUgPz8gZ3Vlc3NDdXJyZW50VGltZXpvbmUoKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMudGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh0aW1lem9uZSkgPT4gKHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbHVlSW5TeXN0ZW1UaW1lem9uZSQgPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIG1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGg8TWF5YmU8RGF0ZT4+KGNvbnRyb2wudmFsdWUpLCBzaGFyZVJlcGxheSgxKSkpLFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQpLFxuICAgIHN3aXRjaE1hcCgoW3gsIHRpbWV6b25lSW5zdGFuY2VdKSA9PiB7XG4gICAgICByZXR1cm4geC5waXBlKG1hcChkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSk7XG4gICAgfSksXG4gICAgdGhyb3R0bGVUaW1lKDIwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLCAvLyB0aHJvdHRsZSBpbmNvbWluZyB2YWx1ZXMgYW5kIHRpbWV6b25lIGNoYW5nZXNcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHRyaWdnZXIvZGlzcGxheSB2aXN1YWwgdXBkYXRlcyAoc3BlY2lmaWNhbGx5IG9uIHRpbWVEaXN0YW5jZSwgZXRjLikuXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5VmFsdWUkID0gaW50ZXJ2YWwoMTAgKiAxMDAwKS5waXBlKFxuICAgIHN0YXJ0V2l0aCgwKSxcbiAgICBtYXAoKCkgPT4gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgdGFwKCgpID0+IHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCkpLFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZVN0cmluZyQ6IE9ic2VydmFibGU8UmVhZGFibGVUaW1lU3RyaW5nIHwgJyc+ID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcoeCkgOiAnJykpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKG5ldyBEYXRlKCksIHtcbiAgICB2YWxpZGF0b3JzOiBbXVxuICB9KTtcblxuICByZWFkb25seSB0aW1lSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKCcnLCB7XG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucGF0dGVybigvXihub3cpJHxeKFswLTldfCgwWzAtOV0pfCgxWzAtOV0pfCgyWzAtM10pKSg6KT8oWzAtNV1bMC05XSk/KFxccyk/KFthcEFQXVtNbV0pPyhcXFxccykqJC8pXVxuICB9KTtcblxuICBnZXQgZGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0ZUxhYmVsID8/ICdEYXRlJztcbiAgfVxuXG4gIGdldCB0aW1lTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lTGFiZWwgPz8gJ1RpbWUnO1xuICB9XG5cbiAgZ2V0IGFsbERheUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYWxsRGF5TGFiZWwgPz8gJ0FsbCBEYXknO1xuICB9XG5cbiAgZ2V0IGF0VGltZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYXRUaW1lTGFiZWwgPz8gJ0F0JztcbiAgfVxuXG4gIGdldCBkYXRlT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU7XG4gIH1cblxuICBnZXQgZGF0ZVRpbWVGaWVsZCgpOiBEYnhEYXRlVGltZUZpZWxkUHJvcHMge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzO1xuICB9XG5cbiAgZ2V0IHRpbWVPbmx5KCk6IE1heWJlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGltZUZpZWxkLnRpbWVPbmx5O1xuICB9XG5cbiAgZ2V0IHNob3dEYXRlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnRpbWVPbmx5O1xuICB9XG5cbiAgZ2V0IHZhbHVlTW9kZSgpOiBEYnhEYXRlVGltZVZhbHVlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudmFsdWVNb2RlID8/IERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEU7XG4gIH1cblxuICBnZXQgdGltZU1vZGUoKTogRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlIHtcbiAgICBjb25zdCBkYXRlVmFsdWVzT25seSA9IHRoaXMudmFsdWVNb2RlID09PSBEYnhEYXRlVGltZVZhbHVlTW9kZS5EQVlfU1RSSU5HO1xuXG4gICAgaWYgKGRhdGVWYWx1ZXNPbmx5KSB7XG4gICAgICByZXR1cm4gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWVPbmx5ID8gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEIDogdGhpcy5kYXRlVGltZUZpZWxkLnRpbWVNb2RlID8/IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5SRVFVSVJFRDtcbiAgICB9XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaGlkZURhdGVIaW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmhpZGVEYXRlSGludCA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCBoaWRlRGF0ZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5oaWRlRGF0ZVBpY2tlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCB0aW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy50aW1lem9uZTtcbiAgfVxuXG4gIGdldCBzaG93VGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd1RpbWV6b25lID8/IHRydWU7XG4gIH1cblxuICBnZXQgcHJlc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5wcmVzZXRzO1xuICB9XG5cbiAgcmVhZG9ubHkgZnVsbERheSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmZ1bGxEYXlDb250cm9sJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoY29udHJvbC52YWx1ZSkpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2hvd1RpbWVJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmZ1bGxEYXkkLnBpcGUobWFwKCh4KSA9PiAheCAmJiB0aGlzLnRpbWVNb2RlICE9PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORSkpO1xuXG4gIHJlYWRvbmx5IHNob3dBZGRUaW1lJCA9IHRoaXMuc2hvd1RpbWVJbnB1dCQucGlwZShcbiAgICBtYXAoKHgpID0+ICF4ICYmIHRoaXMudGltZU1vZGUgPT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5PUFRJT05BTCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlJCA9IHRoaXMuZGF0ZUlucHV0Q3RybC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5kYXRlSW5wdXRDdHJsLnZhbHVlKSwgZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lQWJicmV2aWF0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0ZSQsIHRoaXMudGltZXpvbmUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lem9uZV0pID0+IGdldFRpbWV6b25lQWJicmV2aWF0aW9uKHRpbWV6b25lLCBkYXRlKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVWYWx1ZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gbWVyZ2UodGhpcy5kYXRlJCwgdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoc2tpcEZpcnN0TWF5YmUoKSkpLnBpcGUoXG4gICAgbWFwKCh4OiBNYXliZTxEYXRlPikgPT4gKHggPyBzdGFydE9mRGF5KHgpIDogbnVsbCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPE1heWJlPERhdGU+Pihpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWVJbnB1dCQ6IE9ic2VydmFibGU8UmVhZGFibGVUaW1lU3RyaW5nPiA9IHRoaXMuX3VwZGF0ZVRpbWUucGlwZShcbiAgICBkZWJvdW5jZVRpbWUoNSksXG4gICAgbWFwKCgpID0+IHRoaXMudGltZUlucHV0Q3RybC52YWx1ZSB8fCAnJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHJlYWRvbmx5IHN5bmNDb25maWdPYnMkID0gdGhpcy5fc3luY0NvbmZpZ09icy5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgcGFyc2VkU3luY0NvbmZpZ3MkOiBPYnNlcnZhYmxlPERieERhdGVUaW1lRmllbGRTeW5jUGFyc2VkRmllbGRbXT4gPSB0aGlzLnN5bmNDb25maWdPYnMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBsZXQgcGFyc2VkOiBEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW107XG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIHBhcnNlZCA9IGZpbHRlck1heWJlVmFsdWVzKFxuICAgICAgICAgIGFzQXJyYXkoeCkubWFwKCh5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh5LnN5bmNXaXRoKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgICAgICAgIC4uLnlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZCA9IFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc3luY0NvbmZpZ0JlZm9yZVZhbHVlJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSBzeW5jQ29uZmlnVmFsdWVPYnModGhpcy5wYXJzZWRTeW5jQ29uZmlncyQsICdiZWZvcmUnKTtcbiAgcmVhZG9ubHkgc3luY0NvbmZpZ0FmdGVyVmFsdWUkOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHN5bmNDb25maWdWYWx1ZU9icyh0aGlzLnBhcnNlZFN5bmNDb25maWdzJCwgJ2FmdGVyJyk7XG5cbiAgLy8gVE9ETzogR2V0IG1pbi9tYXggdXNpbmcgdGhlIERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbiB0b29cblxuICByZWFkb25seSBkYXRlSW5wdXRNaW4kOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHRoaXMuc3luY0NvbmZpZ0JlZm9yZVZhbHVlJDtcbiAgcmVhZG9ubHkgZGF0ZUlucHV0TWF4JDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSB0aGlzLnN5bmNDb25maWdBZnRlclZhbHVlJDtcblxuICByZWFkb25seSByYXdEYXRlVGltZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlVmFsdWUkLCB0aGlzLnRpbWVJbnB1dCQucGlwZShzdGFydFdpdGgobnVsbCkpLCB0aGlzLmZ1bGxEYXkkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lU3RyaW5nLCBmdWxsRGF5XSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZT47XG5cbiAgICAgIGlmICghZGF0ZSAmJiB0aGlzLnRpbWVPbmx5KSB7XG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0ZSkge1xuICAgICAgICBpZiAoZnVsbERheSkge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGVUaW1lRmllbGQuZnVsbERheUluVVRDKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB1dGNEYXlGb3JEYXRlKGRhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBzdGFydE9mRGF5KGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgICAgICAgcmVzdWx0ID1cbiAgICAgICAgICAgIHJlYWRhYmxlVGltZVN0cmluZ1RvRGF0ZSh0aW1lU3RyaW5nLCB7XG4gICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgIHVzZVN5c3RlbVRpbWV6b25lOiB0cnVlXG4gICAgICAgICAgICB9KSA/PyBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jb25maWcucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSksIHRoaXMuZGF0ZUlucHV0TWluJCwgdGhpcy5kYXRlSW5wdXRNYXgkXSkucGlwZShcbiAgICBtYXAoKFt4LCBkYXRlSW5wdXRNaW4sIGRhdGVJbnB1dE1heF0pID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IE1heWJlPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj4gPSB4O1xuXG4gICAgICBpZiAoZGF0ZUlucHV0TWluICE9IG51bGwgfHwgZGF0ZUlucHV0TWF4ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtaW46IGxpbWl0TWluLCBtYXg6IGxpbWl0TWF4IH0gPSB4Py5saW1pdHMgPz8ge307XG4gICAgICAgIGNvbnN0IG1pbiA9IGZpbmRNaW5EYXRlKFtkYXRlSW5wdXRNaW4sIGRhdGVGcm9tTG9naWNhbERhdGUobGltaXRNaW4pXSk7XG4gICAgICAgIGNvbnN0IG1heCA9IGZpbmRNYXhEYXRlKFtkYXRlSW5wdXRNYXgsIGRhdGVGcm9tTG9naWNhbERhdGUobGltaXRNYXgpXSk7XG5cbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAuLi54Py5saW1pdHMsXG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXhcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpY2tlckZpbHRlciQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4+ID0gdGhpcy5jb25maWckLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGVUaW1lTWludXRlRGVjaXNpb25GdW5jdGlvbih4KTtcbiAgICAgICAgcmV0dXJuICh4OiBEYXRlIHwgbnVsbCkgPT4gKHggIT0gbnVsbCA/IGZpbHRlcih4KSA6IHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkZWZhdWx0UGlja2VyRmlsdGVyOiBEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPiA9ICgpID0+IHRydWU7XG5cbiAgcmVhZG9ubHkgdGltZU91dHB1dCQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5yYXdEYXRlVGltZSQsIHRoaXMuX29mZnNldCwgdGhpcy5jb25maWckXSkucGlwZShcbiAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoY3VycmVudCwgbmV4dCkgPT4gY3VycmVudFswXSA9PT0gbmV4dFswXSAmJiBuZXh0WzFdID09PSAwKSxcbiAgICB0YXAoKFssIHN0ZXBzT2Zmc2V0XSkgPT4gKHN0ZXBzT2Zmc2V0ID8gdGhpcy5fb2Zmc2V0Lm5leHQoMCkgOiAwKSksXG4gICAgbWFwKChbZGF0ZSwgc3RlcHNPZmZzZXQsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcm91bmREb3duVG9NaW51dGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0ZSA9IGluc3RhbmNlLmxpbWl0KGRhdGUpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gc3RlcHNPZmZzZXQgKiA1O1xuICAgICAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBtaW51dGVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwcmVzZXRzJDogT2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldFtdPiA9IHRoaXMuX3ByZXNldHMucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZU9icygpLFxuICAgIG1hcCgoeDogRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10pID0+IHgubWFwKGRhdGVUaW1lUHJlc2V0KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWFkb25seSBkYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZTogRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgY29uc3QgaW5wdXRQaWNrZXJDb25maWcgPSB0aGlzLmRhdGVUaW1lRmllbGQuZ2V0Q29uZmlnT2JzIHx8IHRoaXMuZGF0ZVRpbWVGaWVsZC5waWNrZXJDb25maWc7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoaW5wdXRQaWNrZXJDb25maWcgPyBhc09ic2VydmFibGVGcm9tR2V0dGVyKGlucHV0UGlja2VyQ29uZmlnKSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5fc3luY0NvbmZpZ09icy5uZXh0KHRoaXMuZGF0ZVRpbWVGaWVsZC5nZXRTeW5jRmllbGRzT2JzPy4oKSk7XG5cbiAgICB0aGlzLl9zdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAucGlwZShcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy50aW1lem9uZUluc3RhbmNlJC5waXBlKG1hcCgodGltZXpvbmVJbnN0YW5jZSkgPT4gZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSkpLFxuICAgICAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChbY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGltZU91dHB1dCQucGlwZShcbiAgICAgICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FICogMiwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgICAgIHNraXBGaXJzdE1heWJlKCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICAgICAgICAgIG1hcCgoeCkgPT4gdmFsdWVGYWN0b3J5KHgpKSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4gIWRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlKHgsIGN1cnJlbnRWYWx1ZSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl92YWx1ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnRpbWVTdHJpbmckLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgLy8gU2tpcCBldmVudHMgd2hlcmUgdGhlIHRpbWVJbnB1dCB2YWx1ZSBpcyBjbGVhcmVkLlxuICAgICAgaWYgKCF0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgJiYgeCA9PT0gJzEyOjAwQU0nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRUaW1lKHgpO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdGltZXpvbmUgaWYgcHJvdmlkZWQuXG4gICAgaWYgKHRoaXMudGltZXpvbmUgJiYgIXRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRUaW1lem9uZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lem9uZSkpO1xuICAgIH1cblxuICAgIC8vIFdhdGNoIGZvciBkaXNhYmxlZCBjaGFuZ2VzIHNvIHdlIGNhbiBwcm9wb2dhdGUgdGhlbSBwcm9wZXJseS5cbiAgICB0aGlzLmZvcm1Db250cm9sLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSgoZGlzYWJsZWQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEN0cmwuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMudGltZUlucHV0Q3RybC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnRpbWVJbnB1dEN0cmwuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlzRnVsbERheUZpZWxkID0gdGhpcy5kYXRlVGltZUZpZWxkLmZ1bGxEYXlGaWVsZE5hbWU7XG4gICAgbGV0IGZ1bGxEYXlGaWVsZEN0cmw6IE1heWJlPEFic3RyYWN0Q29udHJvbD47XG5cbiAgICBpZiAoaXNGdWxsRGF5RmllbGQpIHtcbiAgICAgIGZ1bGxEYXlGaWVsZEN0cmwgPSB0aGlzLmZvcm0uZ2V0KGlzRnVsbERheUZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoIWZ1bGxEYXlGaWVsZEN0cmwpIHtcbiAgICAgIGNvbnN0IGlzRnVsbERheSA9IHRoaXMudGltZU1vZGUgPT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FO1xuICAgICAgdGhpcy5fZnVsbERheUlucHV0Q3RybCA9IG5ldyBGb3JtQ29udHJvbChpc0Z1bGxEYXkpO1xuXG4gICAgICAvLyBTZXQgdGhlIGNvbnRyb2wgaW4gdGhlIGZvcm0gdG9vIGlmIHRoZSBuYW1lIGlzIGRlZmluZWQuXG4gICAgICBpZiAoaXNGdWxsRGF5RmllbGQpIHtcbiAgICAgICAgKHRoaXMuZm9ybSBhcyBGb3JtR3JvdXApLmFkZENvbnRyb2woaXNGdWxsRGF5RmllbGQsIHRoaXMuX2Z1bGxEYXlJbnB1dEN0cmwpO1xuICAgICAgfVxuXG4gICAgICBmdWxsRGF5RmllbGRDdHJsID0gdGhpcy5fZnVsbERheUlucHV0Q3RybDtcbiAgICB9XG5cbiAgICB0aGlzLl9mdWxsRGF5Q29udHJvbE9icy5uZXh0KGZ1bGxEYXlGaWVsZEN0cmwpO1xuXG4gICAgc3dpdGNoICh0aGlzLnRpbWVNb2RlKSB7XG4gICAgICBjYXNlIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5PUFRJT05BTDpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FOlxuICAgICAgICB0aGlzLnJlbW92ZVRpbWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5SRVFVSVJFRDpcbiAgICAgICAgdGhpcy5hZGRUaW1lKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXNldHMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5wcmVzZXRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dCh0aGlzLmRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlLmNvbmZpZ3VyYXRpb25zJCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3ZhbHVlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jb25maWcuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kZWZhdWx0VGltZXpvbmUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9wcmVzZXRzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZnVsbERheUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vZmZzZXQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zeW5jQ29uZmlnT2JzLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZWxlY3RQcmVzZXQocHJlc2V0OiBEYXRlVGltZVByZXNldCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gcHJlc2V0LnZhbHVlKCk7XG5cbiAgICBpZiAodmFsdWUubG9naWNhbERhdGUpIHtcbiAgICAgIHRoaXMuc2V0TG9naWNhbFRpbWUodmFsdWUubG9naWNhbERhdGUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUudGltZVN0cmluZykge1xuICAgICAgdGhpcy5zZXRUaW1lKHZhbHVlLnRpbWVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVQaWNrZWQoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IGV2ZW50LnZhbHVlO1xuXG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TG9naWNhbFRpbWUodGltZTogTG9naWNhbERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gZGF0ZUZyb21Mb2dpY2FsRGF0ZSh0aW1lKTtcblxuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLnNldFRpbWVGcm9tRGF0ZShkYXRlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRlSW5wdXRWYWx1ZShkYXRlOiBEYXRlKSB7XG4gICAgdGhpcy5kYXRlSW5wdXRDdHJsLnNldFZhbHVlKGRhdGUpO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICB9XG5cbiAgc2V0VGltZUZyb21EYXRlKHRpbWVEYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgdGltZVN0cmluZyA9IHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcodGltZURhdGUpO1xuICAgIHRoaXMuc2V0VGltZSh0aW1lU3RyaW5nKTtcbiAgfVxuXG4gIHNldFRpbWUodGltZTogUmVhZGFibGVUaW1lU3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50aW1lSW5wdXRDdHJsLnNldFZhbHVlKHRpbWUpO1xuICAgIHRoaXMuX29mZnNldC5uZXh0KDApO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICB9XG5cbiAga2V5ZG93bk9uRGF0ZUlucHV0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRpcmVjdGlvbiA9IDA7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGRpcmVjdGlvbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAxO1xuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDM2NTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIG9mZnNldCA9IDMwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDc7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgdGhpcy5kYXRlJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdEYXRlID0gYWRkRGF5cyhkYXRlLCBvZmZzZXQgKiBkaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLnNldERhdGVJbnB1dFZhbHVlKG5ld0RhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAga2V5ZG93bk9uVGltZUlucHV0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRpcmVjdGlvbiA9IDA7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGRpcmVjdGlvbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAxO1xuXG4gICAgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgb2Zmc2V0ID0gMzAwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICBvZmZzZXQgPSA2MDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBvZmZzZXQgPSA1O1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gIT09IDApIHtcbiAgICAgIHRoaXMuX29mZnNldC5uZXh0KHRoaXMuX29mZnNldC52YWx1ZSArIG9mZnNldCAqIGRpcmVjdGlvbik7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c1RpbWUoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG5cbiAgZm9jdXNPdXRUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICB9XG5cbiAgYWRkVGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEZ1bGxEYXkoZmFsc2UpO1xuICB9XG5cbiAgcmVtb3ZlVGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEZ1bGxEYXkodHJ1ZSk7XG4gIH1cblxuICBzZXRGdWxsRGF5KGZ1bGxEYXk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZ1bGxEYXlDb250cm9sJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgeC5zZXRWYWx1ZShmdWxsRGF5KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBNQVJLOiBDb21wYXRcbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbiBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24gPSBEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb247XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLWZpZWxkXCIgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0LnhzPVwiY29sdW1uIHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtZXZlbmx5IHN0cmV0Y2hcIj5cbiAgPCEtLSBEYXRlIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwiZGF0ZU9ubHkgPyAnMTAwJyA6ICc1MCdcIiAqbmdJZj1cInNob3dEYXRlSW5wdXRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUlucHV0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIEFkZGl0aW9uYWwgc3BhY2luZyAtLT5cbiAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXIgKm5nSWY9XCIhZGF0ZU9ubHlcIj48L2RieC1idXR0b24tc3BhY2VyPlxuICA8L2Rpdj5cbiAgPCEtLSBUaW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwic2hvd0RhdGVJbnB1dCA/ICc1MCcgOiAnMTAwJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGltZUlucHV0JCB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZU1lbnVBbmRJbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dBZGRUaW1lJCB8IGFzeW5jXCIgY2xhc3M9XCJhZGQtdGltZS1idXR0b24td3JhcHBlclwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibWF0LWRhdGVwaWNrZXItYnV0dG9uLWhpZ2hsaWdodCBkYngtYnV0dG9uLXNwYWNlciBhZGQtdGltZS1idXR0b25cIiBuZ0NsYXNzLmx0LXNtPVwiYWRkLXRpbWUtYnV0dG9uLWZ1bGxcIiAoY2xpY2spPVwiYWRkVGltZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj50aW1lcjwvbWF0LWljb24+XG4gICAgICAgIEFkZCBUaW1lXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhaGlkZURhdGVIaW50XCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93IGRieC1kYXRldGltZS1oaW50LXJvd1wiIGZ4RmxleD1cIjEwMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYngtaGludFwiIFtuZ1N3aXRjaF09XCJmdWxsRGF5JCB8IGFzeW5jXCI+XG4gICAgICA8c21hbGwgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgPGIgY2xhc3M9XCJkYngtb2tcIj57eyBhbGxEYXlMYWJlbCB9fTwvYj5cbiAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ2Z1bGxEYXRlJyB9fSB7eyB0aW1lem9uZUFiYnJldmlhdGlvbiQgfCBhc3luYyB9fSAoe3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZURpc3RhbmNlIH19KVxuICAgICAgPC9zbWFsbD5cbiAgICAgIDxzbWFsbCAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiPlxuICAgICAgICAgIDxiIGNsYXNzPVwiZGJ4LW9rXCI+e3sgYXRUaW1lTGFiZWwgfX08L2I+XG4gICAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ21lZGl1bScgfX0ge3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX0gKHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IHRpbWVEaXN0YW5jZSB9fSlcbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIERhdGUgSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVJbnB1dFRlbXBsYXRlPlxuICA8YnV0dG9uIGNsYXNzPVwibWF0LWRhdGVwaWNrZXItYnV0dG9uLWhpZ2hsaWdodCBkYngtYnV0dG9uLXNwYWNlclwiICpuZ0lmPVwiIWhpZGVEYXRlUGlja2VyXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJwaWNrZXIub3BlbigpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPG1hdC1pY29uPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctZmllbGRcIiBbbmdDbGFzc109XCJ7ICdkYngtZGF0ZXRpbWUtcm93LWZpZWxkLWZ1bGwtd2lkdGgnOiBoaWRlRGF0ZVBpY2tlciB9XCI+XG4gICAgPG1hdC1sYWJlbD57eyBkYXRlTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgI2RhdGVJbnB1dCBtYXRJbnB1dCBbbWluXT1cImRhdGVJbnB1dE1pbiQgfCBhc3luY1wiIFttYXhdPVwiZGF0ZUlucHV0TWF4JCB8IGFzeW5jXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIChkYXRlQ2hhbmdlKT1cImRhdGVQaWNrZWQoJGV2ZW50KVwiIFt2YWx1ZV09XCJkYXRlVmFsdWUkIHwgYXN5bmNcIiAoa2V5ZG93bik9XCJrZXlkb3duT25EYXRlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8c3BhbiBtYXRTdWZmaXggKm5nSWY9XCIhKHNob3dUaW1lSW5wdXQkIHwgYXN5bmMpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZXpvbmVTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVGltZSBNZW51L0lucHV0IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0aW1lTWVudUFuZElucHV0VGVtcGxhdGU+XG4gIDxidXR0b24gY2xhc3M9XCJtYXQtZGF0ZXBpY2tlci1idXR0b24taGlnaGxpZ2h0IGRieC1idXR0b24tc3BhY2VyXCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0aW1lbWVudVwiIGFyaWEtbGFiZWw9XCJvcGVucyB0aGUgdGltZSBtZW51XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPG1hdC1pY29uPnRpbWVyPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxtYXQtbWVudSAjdGltZW1lbnU9XCJtYXRNZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRpbWVNb2RlID09PSAnb3B0aW9uYWwnXCI+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInJlbW92ZVRpbWUoKVwiPlxuICAgICAgICA8c3Bhbj5SZW1vdmUgVGltZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJlc2V0IG9mIHByZXNldHMkIHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2VsZWN0UHJlc2V0KHByZXNldClcIj57eyBwcmVzZXQubGFiZWwgfCBnZXRWYWx1ZSB9fTwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L21hdC1tZW51PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyB0aW1lTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgI3RpbWVJbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidGltZUlucHV0Q3RybFwiIChmb2N1cyk9XCJmb2N1c1RpbWUoKVwiIChmb2N1c291dCk9XCJmb2N1c091dFRpbWUoKVwiIChrZXlkb3duKT1cImtleWRvd25PblRpbWVJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICA8c3BhbiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZXpvbmVTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVGltZXpvbmUgU3VmZml4IC0tPlxuPG5nLXRlbXBsYXRlICN0aW1lem9uZVN1ZmZpeFRlbXBsYXRlPlxuICA8c3BhbiAqbmdJZj1cInNob3dUaW1lem9uZVwiIGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXRpbWV6b25lIGRieC1mYWludFwiPnt7IHRpbWV6b25lQWJicmV2aWF0aW9uJCB8IGFzeW5jIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9kYXRldGltZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBOEQsT0FBTyxFQUFFLGlCQUFpQixFQUFzSCx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwUSxPQUFPLEVBQUUsbUJBQW1CLEVBQXdCLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQTJDLFdBQVcsRUFBcUIsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25iLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBUSxNQUFNLE1BQU0sQ0FBQztBQUN2TyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQW1CLFdBQVcsRUFBRSxVQUFVLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQTJCLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSyxPQUFPLEVBQStDLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUNBQWlDLEVBQUUsbUNBQW1DLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0osT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRTdGLE1BQU0sQ0FBTixJQUFZLHdCQWFYO0FBYkQsV0FBWSx3QkFBd0I7SUFDbEM7O09BRUc7SUFDSCxpREFBcUIsQ0FBQTtJQUNyQjs7T0FFRztJQUNILGlEQUFxQixDQUFBO0lBQ3JCOztPQUVHO0lBQ0gseUNBQWEsQ0FBQTtBQUNmLENBQUMsRUFiVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBYW5DO0FBc0lELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxlQUE4RCxFQUFFLElBQThCO0lBQy9ILE9BQU8sZUFBZSxDQUFDLElBQUksQ0FDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBK0IsQ0FBQztRQUVwQyxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDM0IsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNoQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FDcEMsQ0FBQztTQUNIO2FBQU07WUFDTCxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSx5QkFBeUIsR0FBaUIsRUFBRSxDQUFDO0FBS25ELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxTQUFpRDtJQW1WOUYsWUFBNkIsS0FBd0IsRUFBbUIsNkJBQWlFO1FBQ3ZJLEtBQUssRUFBRSxDQUFDO1FBRG1CLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQW1CLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBb0M7UUFsVmpJLFNBQUksR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUVyQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQW9ELFNBQVMsQ0FBQyxDQUFDO1FBQzVGLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQTZELFNBQVMsQ0FBQyxDQUFDO1FBRTVHLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUEyQyxTQUFTLENBQUMsQ0FBQztRQUM1RixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQTRDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RGLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBNEMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFHbEYsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQWtDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BGLG9CQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFzQyxTQUFTLENBQUMsQ0FBQztRQUNyRixpQkFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWpDLGNBQVMsR0FBc0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RJLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ3RCLE9BQU8sZUFBZSxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDbkQsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxzQkFBaUIsR0FBcUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2hHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDL0UsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxjQUFTLEdBQTRCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUMvRCxxQkFBcUIsRUFBRSxFQUN2QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNkLElBQUksR0FBNEIsQ0FBQztZQUVqQyxJQUFJLENBQUMsRUFBRTtnQkFDTCw4REFBOEQ7Z0JBQzlELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hELEdBQUcsR0FBRyxzQkFBc0IsQ0FBa0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNsSTtxQkFBTTtvQkFDTCxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQjthQUNGO2lCQUFNO2dCQUNMLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckI7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUNuQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLDJCQUFzQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0RCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBYyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRTtZQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLEVBQ0YsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLGdEQUFnRDtRQUNqSCxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxFQUMvQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVGOztXQUVHO1FBQ00sa0JBQWEsR0FBRyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDL0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUNaLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQ2xDLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFDNUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxnQkFBVyxHQUF3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDbkQsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxrQkFBYSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDbkQsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFFTSxrQkFBYSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVGQUF1RixDQUFDLENBQUM7U0FDMUgsQ0FBQyxDQUFDO1FBNEVNLGFBQVEsR0FBd0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ2hFLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzNFLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sbUJBQWMsR0FBd0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUgsaUJBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDOUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUNyRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLFVBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakgsMEJBQXFCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQ3hGLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sZUFBVSxHQUE0QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZILEdBQUcsQ0FBQyxDQUFDLENBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDbkQsb0JBQW9CLENBQWMsYUFBYSxDQUFDLEVBQ2hELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sZUFBVSxHQUFtQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDekUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFDekMsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztRQUVPLG1CQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRix1QkFBa0IsR0FBa0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ25HLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsSUFBSSxNQUF5QyxDQUFDO1lBRTlDLElBQUksQ0FBQyxFQUFFO2dCQUNMLE1BQU0sR0FBRyxpQkFBaUIsQ0FDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBRTFDLElBQUksT0FBTyxFQUFFO3dCQUNYLE9BQU87NEJBQ0wsT0FBTzs0QkFDUCxHQUFHLENBQUM7eUJBQ0wsQ0FBQztxQkFDSDt5QkFBTTt3QkFDTCxPQUFPLFNBQVMsQ0FBQztxQkFDbEI7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxFQUFFLENBQUM7YUFDYjtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sMkJBQXNCLEdBQTRCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RywwQkFBcUIsR0FBNEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9HLDhEQUE4RDtRQUVyRCxrQkFBYSxHQUE0QixJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDckUsa0JBQWEsR0FBNEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBRXBFLGlCQUFZLEdBQTRCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFKLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLE1BQW1CLENBQUM7WUFFeEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUMxQixJQUFJLEdBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxtREFBbUQ7YUFDbkY7WUFFRCxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLE9BQU8sRUFBRTtvQkFDWCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFO3dCQUNuQyxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUM5Qjt5QkFBTTt3QkFDTCxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUMzQjtpQkFDRjtxQkFBTSxJQUFJLFVBQVUsRUFBRTtvQkFDckIsTUFBTTt3QkFDSix3QkFBd0IsQ0FBQyxVQUFVLEVBQUU7NEJBQ25DLElBQUk7NEJBQ0osaUJBQWlCLEVBQUUsSUFBSTt5QkFDeEIsQ0FBQyxJQUFJLElBQUksQ0FBQztpQkFDZDtxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztpQkFDZjthQUNGO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMseUJBQXlCLENBQUMsRUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxZQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6SCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLE1BQU0sR0FBMEMsQ0FBQyxDQUFDO1lBRXRELElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXZFLE1BQU0sR0FBRztvQkFDUCxHQUFHLENBQUM7b0JBQ0osTUFBTSxFQUFFO3dCQUNOLEdBQUcsQ0FBQyxFQUFFLE1BQU07d0JBQ1osR0FBRzt3QkFDSCxHQUFHO3FCQUNKO2lCQUNGLENBQUM7YUFDSDtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sa0JBQWEsR0FBOEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25GLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsTUFBTSxNQUFNLEdBQUcsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzRDtpQkFBTTtnQkFDTCxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sd0JBQW1CLEdBQWtDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUVoRSxnQkFBVyxHQUE0QixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqSCxZQUFZLENBQUMseUJBQXlCLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDdEYsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDaEYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2xFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQztvQkFDMUMsSUFBSTtvQkFDSixHQUFHLE1BQU07b0JBQ1QsaUJBQWlCLEVBQUUsSUFBSTtpQkFDeEIsQ0FBQyxDQUFDO2dCQUVILElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNsQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMseUJBQXlCLENBQUMsRUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxhQUFRLEdBQWlDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNsRSxpQkFBaUIsRUFBRSxFQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQ2hFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBSUYsQ0FBQztJQXhQRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7UUFFMUUsSUFBSSxjQUFjLEVBQUU7WUFDbEIsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7U0FDdEM7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7U0FDN0g7SUFDSCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFrTEQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQzdGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0I7YUFDakQsSUFBSSxDQUNILGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUksWUFBWSxDQUFDLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQ3RGLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDekMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDMUIsWUFBWSxDQUFDLHlCQUF5QixHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUMxRixjQUFjLEVBQUUsRUFDaEIsb0JBQW9CLENBQUMseUJBQXlCLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUNyRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVwQzs7OztVQUlFO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjthQUN0RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdEQsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtZQUNuQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDMUIsV0FBVztZQUNYLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQXNCLENBQUMsQ0FDL0UsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxFQUFFO1lBQ3pDLDJJQUEySTtZQUMzSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLElBQUksQ0FBQyxzQkFBc0IsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BJLE9BQU87YUFDUjtZQUVELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksc0JBQXNCLEVBQUU7Z0JBQzdDLHVCQUF1QixHQUFHLElBQUksQ0FBQzthQUNoQztZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFTCxvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUU7WUFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNuRTtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTNELGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNsRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2pEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1FBQzNELElBQUksZ0JBQXdDLENBQUM7UUFFN0MsSUFBSSxjQUFjLEVBQUU7WUFDbEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7WUFDbEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXBELDBEQUEwRDtZQUMxRCxJQUFJLGNBQWMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLElBQWtCLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUM3RTtZQUVELGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUvQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckIsS0FBSyx3QkFBd0IsQ0FBQyxRQUFRO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU07WUFDUixLQUFLLHdCQUF3QixDQUFDLFFBQVE7Z0JBQ3BDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixNQUFNO1NBQ1Q7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzFEO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBRVEsV0FBVztRQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQXNCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU3QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDeEM7YUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQW9DO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFekIsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWlCO1FBQzlCLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFVO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFjO1FBQzVCLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUF3QjtRQUM5QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDaEMsS0FBSyxTQUFTO2dCQUNaLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTtTQUNUO1FBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUNkO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDYjthQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN6QixNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7UUFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDaEMsS0FBSyxTQUFTO2dCQUNaLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTtTQUNUO1FBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbEMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUNkO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDYjthQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN6QixNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7UUFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLGFBQWE7SUFDZixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3VIQXRsQlUseUJBQXlCOzJHQUF6Qix5QkFBeUIsMkVDOUx0Qywya0lBK0VBOzRGRCtHYSx5QkFBeUI7a0JBSHJDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXliZSwgUmVhZGFibGVUaW1lU3RyaW5nLCBBcnJheU9yVmFsdWUsIElTTzg2MDFEYXRlU3RyaW5nLCBhc0FycmF5LCBmaWx0ZXJNYXliZVZhbHVlcywgRGVjaXNpb25GdW5jdGlvbiwgTWlsbGlzZWNvbmRzLCBUaW1lem9uZVN0cmluZywgTG9naWNhbERhdGUsIElTTzg2MDFEYXlTdHJpbmcsIERhdGVPckRheVN0cmluZywgaXNJU084NjAxRGF5U3RyaW5nLCBpc0lTTzg2MDFEYXlTdHJpbmdTdGFydCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgZGF0ZUZyb21Mb2dpY2FsRGF0ZSwgRGF0ZVRpbWVNaW51dGVDb25maWcsIERhdGVUaW1lTWludXRlSW5zdGFuY2UsIGd1ZXNzQ3VycmVudFRpbWV6b25lLCByZWFkYWJsZVRpbWVTdHJpbmdUb0RhdGUsIHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcsIHV0Y0RheUZvckRhdGUsIHNhZmVUb0pzRGF0ZSwgZmluZE1pbkRhdGUsIGZpbmRNYXhEYXRlLCBkYXRlVGltZU1pbnV0ZURlY2lzaW9uRnVuY3Rpb24sIGlzU2FtZURhdGVIb3Vyc0FuZE1pbnV0ZXMsIGdldFRpbWV6b25lQWJicmV2aWF0aW9uLCBpc1NhbWVEYXRlRGF5LCBkYXRlVGltZXpvbmVVdGNOb3JtYWwsIERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlLCB0b0pzRGF0ZSwgdG9Kc0RheURhdGUsIGlzU3RhcnRPZkRheUluVVRDLCBpc1NhbWVEYXRlIH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBtYXAsIHN0YXJ0V2l0aCwgdGFwLCBmaXJzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGRlYm91bmNlVGltZSwgdGhyb3R0bGVUaW1lLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIFN1YmplY3QsIG1lcmdlLCBpbnRlcnZhbCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIsIHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBhZGRNaW51dGVzLCBzdGFydE9mRGF5LCBhZGREYXlzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgYXNPYnNlcnZhYmxlRnJvbUdldHRlciwgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlR2V0dGVyLCBza2lwRmlyc3RNYXliZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBzd2l0Y2hNYXBNYXliZURlZmF1bHQsIHN3aXRjaE1hcE1heWJlT2JzIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYXRlVGltZVByZXNldCwgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uLCBkYXRlVGltZVByZXNldCB9IGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSB9IGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZVZhbHVlTW9kZSwgZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5LCBkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xQYXRoLCBzdHJlYW1WYWx1ZUZyb21Db250cm9sIH0gZnJvbSAnLi4vLi4vLi4vLi4vZm9ybS9mb3JtLmFuZ3VsYXIudXRpbCc7XG5cbmV4cG9ydCBlbnVtIERieERhdGVUaW1lRmllbGRUaW1lTW9kZSB7XG4gIC8qKlxuICAgKiBUaW1lIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgUkVRVUlSRUQgPSAncmVxdWlyZWQnLFxuICAvKipcbiAgICogVGltZSBpcyBvcHRpb25hbC5cbiAgICovXG4gIE9QVElPTkFMID0gJ29wdGlvbmFsJyxcbiAgLyoqXG4gICAqIFRpbWUgaXMgcGVybWVuYW50bHkgb2ZmLlxuICAgKi9cbiAgTk9ORSA9ICdub25lJ1xufVxuXG5leHBvcnQgdHlwZSBEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24gPSBPbWl0PERhdGVUaW1lTWludXRlQ29uZmlnLCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGUgPSAnYmVmb3JlJyB8ICdhZnRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZCB7XG4gIC8qKlxuICAgKiBGaWVsZCBrZXkvcGF0aCB0byBzeW5jIHdpdGgvYWdhaW5zdC5cbiAgICovXG4gIHN5bmNXaXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdG8gc3luYyBhZ2FpbnN0IHRoZSBvdGhlciBmaWVsZC5cbiAgICovXG4gIHN5bmNUeXBlOiBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIC8qKlxuICAgKiBDdXN0b20gZGF0ZSBsYWJlbC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gRGF0ZVxuICAgKi9cbiAgZGF0ZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdGltZSBsYWJlbC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gVGltZVxuICAgKi9cbiAgdGltZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBkYXRlIGhpbnQgZm9yIFwiQWxsIERheVwiLiBEZWZhdWx0cyB0byBcIkFsbCBEYXlcIi5cbiAgICovXG4gIGFsbERheUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBkYXRlIGhpbnQgZm9yIFwiQXRcIi4gRGVmYXVsdHMgdG8gXCJBdFwiLlxuICAgKi9cbiAgYXRUaW1lTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIERBVEVcbiAgICovXG4gIHZhbHVlTW9kZT86IERieERhdGVUaW1lVmFsdWVNb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZGF0ZSBpcyBoaWRkZW4sIGFuZCBhdXRvbWF0aWNhbGx5IHVzZXMgdG9kYXkvaW5wdXQgZGF0ZS5cbiAgICovXG4gIHRpbWVPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHRpbWUgY2FuIGJlIGFkZGVkL3JlbW92ZWQgb3B0aW9uYWxseS5cbiAgICpcbiAgICogVGhpcyBpcyBpZ25vcmVkIGlmIHRpbWVPbmx5IGlzIHNwZWNpZmllZC5cbiAgICovXG4gIHRpbWVNb2RlPzogRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlO1xuXG4gIC8qKlxuICAgKiBPdGhlciBmb3JtIGNvbnRyb2wgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhIGZ1bGwgZGF5LlxuICAgKlxuICAgKiBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiB0aW1lIGlzIG9wdGlvbmFsLlxuICAgKlxuICAgKiBXaGVuIHRpbWUgaXMgb2ZmLCB0aGUgZmllbGQgaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBmdWxsRGF5RmllbGROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwYXNzIHRoZSBkYXRlIHZhbHVlIGFzIGEgVVRDIGRhdGUsIG9yIGEgZGF0ZSBpbiB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIGZ1bGxEYXlJblVUQz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IG90IGhpZGUgdGhlIGRhdGUgaGludCBpbmZvIGNvbnRlbnQuXG4gICAqXG4gICAqIEZhbHNlIGJ5IGRlZmF1bHRcbiAgICovXG4gIGhpZGVEYXRlSGludD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGhpZGUgdGhlIGRhdGUvY2FsZW5kYXIgcGlja2VyLlxuICAgKi9cbiAgaGlkZURhdGVQaWNrZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHBpY2tlckNvbmZpZz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj47XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIHN5bmNpbmcgd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHMgd2l0aCBhIERhdGUgdmFsdWUuXG4gICAqL1xuICBnZXRTeW5jRmllbGRzT2JzPzogKCkgPT4gT2JzZXJ2YWJsZTxBcnJheU9yVmFsdWU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZD4+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBUaGUgZGF0ZSB0byBhcHBseSB0aGUgdGltZSB0by5cbiAgICpcbiAgICogVGhlIHRpbWV6b25lIGFiYnJ2aWF0aW9uIHdpbGwgYWxzbyB1c2UgdGhpcyBkYXRlIHdoZW4gdXNpbmcgdGhlIHRpbWUtb25seSBtb2RlLlxuICAgKi9cbiAgdGltZURhdGU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxGb3JtQ29udHJvbFBhdGggfCBEYXRlT3JEYXlTdHJpbmc+Pj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgdGhlIHRpbWV6b25lLiBUcnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcHJlc2V0cyB0byBzaG93IGluIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHByZXNldHM/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT47XG5cbiAgLy8gTUFSSzogQ29tcGF0XG4gIC8qKlxuICAgKiBVc2VkIGZvciByZXR1cm5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2JzZXJ2YWJsZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHBpY2tlckNvbmZpZyBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0Q29uZmlnT2JzPzogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkIGV4dGVuZHMgUGljazxEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkLCAnc3luY1R5cGUnPiB7XG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlIHwgSVNPODYwMURhdGVTdHJpbmc+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNDb25maWdWYWx1ZU9icyhwYXJzZUNvbmZpZ3NPYnM6IE9ic2VydmFibGU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdPiwgdHlwZTogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlKTogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4ge1xuICByZXR1cm4gcGFyc2VDb25maWdzT2JzLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB4LmZpbmQoKHkpID0+IHkuc3luY1R5cGUgPT09IHR5cGUpO1xuICAgICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD47XG5cbiAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBjb250cm9sIH0gPSBjb25maWc7XG4gICAgICAgIHJlc3VsdCA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgIG1hcCgoeCkgPT4gc2FmZVRvSnNEYXRlKHgpID8/IG51bGwpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBvZihudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG59XG5cbmNvbnN0IFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUU6IE1pbGxpc2Vjb25kcyA9IDEwO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdkYXRldGltZS5maWVsZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RGF0ZVRpbWVGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8RGJ4RGF0ZVRpbWVGaWVsZFByb3BzPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfdmFsdWVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfY29uZmlnID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9zeW5jQ29uZmlnT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPEFycmF5T3JWYWx1ZTxEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkPj4+Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX2RlZmF1bHRUaW1lem9uZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfdGltZURhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8RGF0ZU9yRGF5U3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9wcmVzZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPj4ob2YoW10pKTtcblxuICBwcml2YXRlIF9mdWxsRGF5SW5wdXRDdHJsPzogRm9ybUNvbnRyb2w7XG4gIHByaXZhdGUgX2Z1bGxEYXlDb250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8Ym9vbGVhbj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmdWxsRGF5Q29udHJvbCQgPSB0aGlzLl9mdWxsRGF5Q29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHByaXZhdGUgX29mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2xPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlPj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHByaXZhdGUgX3VwZGF0ZVRpbWUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5fZGVmYXVsdFRpbWV6b25lLnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnBpcGUoXG4gICAgbWFwKChkZWZhdWx0VGltZXpvbmUpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltZXpvbmUgPz8gZ3Vlc3NDdXJyZW50VGltZXpvbmUoKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMudGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh0aW1lem9uZSkgPT4gKHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWVEYXRlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSB0aGlzLl90aW1lRGF0ZS5waXBlKFxuICAgIHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj47XG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIC8vIGlmIHRoZSBzdHJpbmcgaXMgbm90IGEgZGF0ZSBzdHJpbmcsIHRoZW4gdHJlYXQgaXQgYXMgYSBwYXRoXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgIWlzSVNPODYwMURheVN0cmluZ1N0YXJ0KHgpKSB7XG4gICAgICAgICAgb2JzID0gc3RyZWFtVmFsdWVGcm9tQ29udHJvbDxEYXRlT3JEYXlTdHJpbmc+KHRoaXMuZm9ybSwgeCk/LnBpcGUobWFwKCh4KSA9PiAoeCA/IHRvSnNEYXlEYXRlKHgpIDogdW5kZWZpbmVkKSkpID8/IG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JzID0gb2YodG9Kc0RheURhdGUoeCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMgPSBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JzO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsdWVJblN5c3RlbVRpbWV6b25lJCA9IHRoaXMuZm9ybUNvbnRyb2wkLnBpcGUoXG4gICAgbWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aDxNYXliZTxEYXRlPj4oY29udHJvbC52YWx1ZSksIHNoYXJlUmVwbGF5KDEpKSksXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy50aW1lem9uZUluc3RhbmNlJCksXG4gICAgc3dpdGNoTWFwKChbeCwgdGltZXpvbmVJbnN0YW5jZV0pID0+IHtcbiAgICAgIHJldHVybiB4LnBpcGUobWFwKGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKTtcbiAgICB9KSxcbiAgICB0aHJvdHRsZVRpbWUoMjAsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksIC8vIHRocm90dGxlIGluY29taW5nIHZhbHVlcyBhbmQgdGltZXpvbmUgY2hhbmdlc1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVIb3Vyc0FuZE1pbnV0ZXMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdHJpZ2dlci9kaXNwbGF5IHZpc3VhbCB1cGRhdGVzIChzcGVjaWZpY2FsbHkgb24gdGltZURpc3RhbmNlLCBldGMuKS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlWYWx1ZSQgPSBpbnRlcnZhbCgxMCAqIDEwMDApLnBpcGUoXG4gICAgc3RhcnRXaXRoKDApLFxuICAgIG1hcCgoKSA9PiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKSksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lU3RyaW5nJDogT2JzZXJ2YWJsZTxSZWFkYWJsZVRpbWVTdHJpbmcgfCAnJz4gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gdG9Mb2NhbFJlYWRhYmxlVGltZVN0cmluZyh4KSA6ICcnKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2wobmV3IERhdGUoKSwge1xuICAgIHZhbGlkYXRvcnM6IFtdXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRpbWVJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKG5vdykkfF4oWzAtOV18KDBbMC05XSl8KDFbMC05XSl8KDJbMC0zXSkpKDopPyhbMC01XVswLTldKT8oXFxzKT8oW2FwQVBdW01tXSk/KFxcXFxzKSokLyldXG4gIH0pO1xuXG4gIGdldCBkYXRlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRlTGFiZWwgPz8gJ0RhdGUnO1xuICB9XG5cbiAgZ2V0IHRpbWVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVMYWJlbCA/PyAnVGltZSc7XG4gIH1cblxuICBnZXQgYWxsRGF5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hbGxEYXlMYWJlbCA/PyAnQWxsIERheSc7XG4gIH1cblxuICBnZXQgYXRUaW1lTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hdFRpbWVMYWJlbCA/PyAnQXQnO1xuICB9XG5cbiAgZ2V0IGRhdGVPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgfVxuXG4gIGdldCBkYXRlVGltZUZpZWxkKCk6IERieERhdGVUaW1lRmllbGRQcm9wcyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgdGltZU9ubHkoKTogTWF5YmU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRmllbGQudGltZU9ubHk7XG4gIH1cblxuICBnZXQgc2hvd0RhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudGltZU9ubHk7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCB0aW1lTW9kZSgpOiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUge1xuICAgIGNvbnN0IGRhdGVWYWx1ZXNPbmx5ID0gdGhpcy52YWx1ZU1vZGUgPT09IERieERhdGVUaW1lVmFsdWVNb2RlLkRBWV9TVFJJTkc7XG5cbiAgICBpZiAoZGF0ZVZhbHVlc09ubHkpIHtcbiAgICAgIHJldHVybiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGltZU9ubHkgPyBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQgOiB0aGlzLmRhdGVUaW1lRmllbGQudGltZU1vZGUgPz8gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBoaWRlRGF0ZUhpbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuaGlkZURhdGVIaW50ID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGhpZGVEYXRlUGlja2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmhpZGVEYXRlUGlja2VyID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHRpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWV6b25lO1xuICB9XG5cbiAgZ2V0IHRpbWVEYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWVEYXRlO1xuICB9XG5cbiAgZ2V0IHNob3dUaW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93VGltZXpvbmUgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBwcmVzZXRzKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnByZXNldHM7XG4gIH1cblxuICByZWFkb25seSBmdWxsRGF5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzaG93VGltZUlucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZnVsbERheSQucGlwZShtYXAoKHgpID0+ICF4ICYmIHRoaXMudGltZU1vZGUgIT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FKSk7XG5cbiAgcmVhZG9ubHkgc2hvd0FkZFRpbWUkID0gdGhpcy5zaG93VGltZUlucHV0JC5waXBlKFxuICAgIG1hcCgoeCkgPT4gIXggJiYgdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk9QVElPTkFMKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGUkID0gdGhpcy5kYXRlSW5wdXRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmRhdGVJbnB1dEN0cmwudmFsdWUpLCBmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVBYmJyZXZpYXRpb24kID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlJCwgdGhpcy50aW1lem9uZSQsIHRoaXMudGltZURhdGUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lem9uZSwgdGltZURhdGVdKSA9PiBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0aW1lem9uZSwgdGltZURhdGUgPz8gZGF0ZSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVmFsdWUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IG1lcmdlKHRoaXMuZGF0ZSQsIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKHNraXBGaXJzdE1heWJlKCkpKS5waXBlKFxuICAgIG1hcCgoeDogTWF5YmU8RGF0ZT4pID0+ICh4ID8gc3RhcnRPZkRheSh4KSA6IG51bGwpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlPj4oaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lSW5wdXQkOiBPYnNlcnZhYmxlPFJlYWRhYmxlVGltZVN0cmluZz4gPSB0aGlzLl91cGRhdGVUaW1lLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDUpLFxuICAgIG1hcCgoKSA9PiB0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgfHwgJycpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBzeW5jQ29uZmlnT2JzJCA9IHRoaXMuX3N5bmNDb25maWdPYnMucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHBhcnNlZFN5bmNDb25maWdzJDogT2JzZXJ2YWJsZTxEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW10+ID0gdGhpcy5zeW5jQ29uZmlnT2JzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdO1xuXG4gICAgICBpZiAoeCkge1xuICAgICAgICBwYXJzZWQgPSBmaWx0ZXJNYXliZVZhbHVlcyhcbiAgICAgICAgICBhc0FycmF5KHgpLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoeS5zeW5jV2l0aCk7XG5cbiAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICAgICAgICAuLi55XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQgPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN5bmNDb25maWdCZWZvcmVWYWx1ZSQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gc3luY0NvbmZpZ1ZhbHVlT2JzKHRoaXMucGFyc2VkU3luY0NvbmZpZ3MkLCAnYmVmb3JlJyk7XG4gIHJlYWRvbmx5IHN5bmNDb25maWdBZnRlclZhbHVlJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSBzeW5jQ29uZmlnVmFsdWVPYnModGhpcy5wYXJzZWRTeW5jQ29uZmlncyQsICdhZnRlcicpO1xuXG4gIC8vIFRPRE86IEdldCBtaW4vbWF4IHVzaW5nIHRoZSBEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24gdG9vXG5cbiAgcmVhZG9ubHkgZGF0ZUlucHV0TWluJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSB0aGlzLnN5bmNDb25maWdCZWZvcmVWYWx1ZSQ7XG4gIHJlYWRvbmx5IGRhdGVJbnB1dE1heCQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gdGhpcy5zeW5jQ29uZmlnQWZ0ZXJWYWx1ZSQ7XG5cbiAgcmVhZG9ubHkgcmF3RGF0ZVRpbWUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0ZVZhbHVlJCwgdGhpcy50aW1lSW5wdXQkLnBpcGUoc3RhcnRXaXRoKG51bGwpKSwgdGhpcy5mdWxsRGF5JCwgdGhpcy50aW1lRGF0ZSRdKS5waXBlKFxuICAgIG1hcCgoW2RhdGUsIHRpbWVTdHJpbmcsIGZ1bGxEYXksIHRpbWVEYXRlXSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZT47XG5cbiAgICAgIGlmICghZGF0ZSB8fCB0aGlzLnRpbWVPbmx5KSB7XG4gICAgICAgIGRhdGUgPSB0aW1lRGF0ZSA/PyBuZXcgRGF0ZSgpOyAvLyB1c2UgdGhlIHRpbWUgZGF0ZSwgb3IgZGVmYXVsdCB0byB0aGUgY3VycmVudCBkYXlcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgaWYgKGZ1bGxEYXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRlVGltZUZpZWxkLmZ1bGxEYXlJblVUQykge1xuICAgICAgICAgICAgcmVzdWx0ID0gdXRjRGF5Rm9yRGF0ZShkYXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gc3RhcnRPZkRheShkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGltZVN0cmluZykge1xuICAgICAgICAgIHJlc3VsdCA9XG4gICAgICAgICAgICByZWFkYWJsZVRpbWVTdHJpbmdUb0RhdGUodGltZVN0cmluZywge1xuICAgICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgICB1c2VTeXN0ZW1UaW1lem9uZTogdHJ1ZVxuICAgICAgICAgICAgfSkgPz8gZGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy50aW1lT25seSkge1xuICAgICAgICAgIHJlc3VsdCA9IGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jb25maWcucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSksIHRoaXMuZGF0ZUlucHV0TWluJCwgdGhpcy5kYXRlSW5wdXRNYXgkXSkucGlwZShcbiAgICBtYXAoKFt4LCBkYXRlSW5wdXRNaW4sIGRhdGVJbnB1dE1heF0pID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IE1heWJlPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj4gPSB4O1xuXG4gICAgICBpZiAoZGF0ZUlucHV0TWluICE9IG51bGwgfHwgZGF0ZUlucHV0TWF4ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtaW46IGxpbWl0TWluLCBtYXg6IGxpbWl0TWF4IH0gPSB4Py5saW1pdHMgPz8ge307XG4gICAgICAgIGNvbnN0IG1pbiA9IGZpbmRNaW5EYXRlKFtkYXRlSW5wdXRNaW4sIGRhdGVGcm9tTG9naWNhbERhdGUobGltaXRNaW4pXSk7XG4gICAgICAgIGNvbnN0IG1heCA9IGZpbmRNYXhEYXRlKFtkYXRlSW5wdXRNYXgsIGRhdGVGcm9tTG9naWNhbERhdGUobGltaXRNYXgpXSk7XG5cbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAuLi54Py5saW1pdHMsXG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXhcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpY2tlckZpbHRlciQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4+ID0gdGhpcy5jb25maWckLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGVUaW1lTWludXRlRGVjaXNpb25GdW5jdGlvbih4KTtcbiAgICAgICAgcmV0dXJuICh4OiBEYXRlIHwgbnVsbCkgPT4gKHggIT0gbnVsbCA/IGZpbHRlcih4KSA6IHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkZWZhdWx0UGlja2VyRmlsdGVyOiBEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPiA9ICgpID0+IHRydWU7XG5cbiAgcmVhZG9ubHkgdGltZU91dHB1dCQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5yYXdEYXRlVGltZSQsIHRoaXMuX29mZnNldCwgdGhpcy5jb25maWckXSkucGlwZShcbiAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoY3VycmVudCwgbmV4dCkgPT4gY3VycmVudFswXSA9PT0gbmV4dFswXSAmJiBuZXh0WzFdID09PSAwKSxcbiAgICB0YXAoKFssIHN0ZXBzT2Zmc2V0XSkgPT4gKHN0ZXBzT2Zmc2V0ID8gdGhpcy5fb2Zmc2V0Lm5leHQoMCkgOiAwKSksXG4gICAgbWFwKChbZGF0ZSwgc3RlcHNPZmZzZXQsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcm91bmREb3duVG9NaW51dGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0ZSA9IGluc3RhbmNlLmNsYW1wKGRhdGUpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gc3RlcHNPZmZzZXQgKiA1O1xuICAgICAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBtaW51dGVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwcmVzZXRzJDogT2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldFtdPiA9IHRoaXMuX3ByZXNldHMucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZU9icygpLFxuICAgIG1hcCgoeDogRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10pID0+IHgubWFwKGRhdGVUaW1lUHJlc2V0KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWFkb25seSBkYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZTogRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgY29uc3QgaW5wdXRQaWNrZXJDb25maWcgPSB0aGlzLmRhdGVUaW1lRmllbGQuZ2V0Q29uZmlnT2JzIHx8IHRoaXMuZGF0ZVRpbWVGaWVsZC5waWNrZXJDb25maWc7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoaW5wdXRQaWNrZXJDb25maWcgPyBhc09ic2VydmFibGVGcm9tR2V0dGVyKGlucHV0UGlja2VyQ29uZmlnKSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5fc3luY0NvbmZpZ09icy5uZXh0KHRoaXMuZGF0ZVRpbWVGaWVsZC5nZXRTeW5jRmllbGRzT2JzPy4oKSk7XG5cbiAgICB0aGlzLl9zdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAucGlwZShcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy50aW1lem9uZUluc3RhbmNlJC5waXBlKG1hcCgodGltZXpvbmVJbnN0YW5jZSkgPT4gZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSkpLFxuICAgICAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChbY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGltZU91dHB1dCQucGlwZShcbiAgICAgICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FICogMiwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgICAgIHNraXBGaXJzdE1heWJlKCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICAgICAgICAgIG1hcCgoeCkgPT4gdmFsdWVGYWN0b3J5KHgpKSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4gIWRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlKHgsIGN1cnJlbnRWYWx1ZSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgfSk7XG5cbiAgICBsZXQgaGFzU2V0TWlkbmlnaHRGcm9tSW5wdXQgPSBmYWxzZTtcblxuICAgIC8qXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy50aW1lU3RyaW5nJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuc2V0VGltZSh4KTtcbiAgICB9KTtcbiAgICAqL1xuXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiAoeCA/IGlzU2FtZURhdGUoeCwgc3RhcnRPZkRheSh4KSkgOiBmYWxzZSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQpID0+IHtcbiAgICAgICAgICBoYXNTZXRNaWRuaWdodEZyb21JbnB1dCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVTdHJpbmckLnBpcGUoXG4gICAgICAgICAgICAvLyBza2lwKDEpLFxuICAgICAgICAgICAgbWFwKCh0aW1lU3RyaW5nKSA9PiBbdGltZVN0cmluZywgaXNJbnB1dFZhbHVlQXRNaWRuaWdodF0gYXMgW3N0cmluZywgYm9vbGVhbl0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFt4LCBpc0lucHV0VmFsdWVBdE1pZG5pZ2h0XSkgPT4ge1xuICAgICAgICAvLyBTa2lwIGV2ZW50cyB3aGVyZSB0aGUgdGltZUlucHV0IHZhbHVlIGlzIGNsZWFyZWQsIHVubGVzcyB0aGUgaW5wdXQgdmFsdWUgaXMgYXQgbWlkbmlnaHQgYW5kIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIGl0IGJlaW5nIGF0IG1pZG5pZ2h0XG4gICAgICAgIGlmICghdGhpcy50aW1lSW5wdXRDdHJsLnZhbHVlICYmIHggPT09ICcxMjowMEFNJyAmJiAoIWlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQgfHwgKGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQgJiYgaGFzU2V0TWlkbmlnaHRGcm9tSW5wdXQpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgaGFzIHNldCBmbGFnXG4gICAgICAgIGlmICh4ID09PSAnMTI6MDBBTScgJiYgaXNJbnB1dFZhbHVlQXRNaWRuaWdodCkge1xuICAgICAgICAgIGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGltZSh4KTtcbiAgICAgIH0pO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdGltZXpvbmUgaWYgcHJvdmlkZWQuXG4gICAgaWYgKHRoaXMudGltZXpvbmUgJiYgIXRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRUaW1lem9uZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lem9uZSkpO1xuICAgIH1cblxuICAgIHRoaXMuX3RpbWVEYXRlLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnRpbWVEYXRlKSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgZGlzYWJsZWQgY2hhbmdlcyBzbyB3ZSBjYW4gcHJvcG9nYXRlIHRoZW0gcHJvcGVybHkuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoKGRpc2FibGVkKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRDdHJsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnRpbWVJbnB1dEN0cmwuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEN0cmwuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy50aW1lSW5wdXRDdHJsLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0Z1bGxEYXlGaWVsZCA9IHRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5RmllbGROYW1lO1xuICAgIGxldCBmdWxsRGF5RmllbGRDdHJsOiBNYXliZTxBYnN0cmFjdENvbnRyb2w+O1xuXG4gICAgaWYgKGlzRnVsbERheUZpZWxkKSB7XG4gICAgICBmdWxsRGF5RmllbGRDdHJsID0gdGhpcy5mb3JtLmdldChpc0Z1bGxEYXlGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKCFmdWxsRGF5RmllbGRDdHJsKSB7XG4gICAgICBjb25zdCBpc0Z1bGxEYXkgPSB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgICAgIHRoaXMuX2Z1bGxEYXlJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woaXNGdWxsRGF5KTtcblxuICAgICAgLy8gU2V0IHRoZSBjb250cm9sIGluIHRoZSBmb3JtIHRvbyBpZiB0aGUgbmFtZSBpcyBkZWZpbmVkLlxuICAgICAgaWYgKGlzRnVsbERheUZpZWxkKSB7XG4gICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5hZGRDb250cm9sKGlzRnVsbERheUZpZWxkLCB0aGlzLl9mdWxsRGF5SW5wdXRDdHJsKTtcbiAgICAgIH1cblxuICAgICAgZnVsbERheUZpZWxkQ3RybCA9IHRoaXMuX2Z1bGxEYXlJbnB1dEN0cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnVsbERheUNvbnRyb2xPYnMubmV4dChmdWxsRGF5RmllbGRDdHJsKTtcblxuICAgIHN3aXRjaCAodGhpcy50aW1lTW9kZSkge1xuICAgICAgY2FzZSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuT1BUSU9OQUw6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTpcbiAgICAgICAgdGhpcy5yZW1vdmVUaW1lKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQ6XG4gICAgICAgIHRoaXMuYWRkVGltZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmVzZXRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMucHJlc2V0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQodGhpcy5kYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZS5jb25maWd1cmF0aW9ucyQpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fc3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl92YWx1ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGVmYXVsdFRpbWV6b25lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdGltZURhdGUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9wcmVzZXRzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZnVsbERheUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vZmZzZXQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zeW5jQ29uZmlnT2JzLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZWxlY3RQcmVzZXQocHJlc2V0OiBEYXRlVGltZVByZXNldCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gcHJlc2V0LnZhbHVlKCk7XG5cbiAgICBpZiAodmFsdWUubG9naWNhbERhdGUpIHtcbiAgICAgIHRoaXMuc2V0TG9naWNhbFRpbWUodmFsdWUubG9naWNhbERhdGUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUudGltZVN0cmluZykge1xuICAgICAgdGhpcy5zZXRUaW1lKHZhbHVlLnRpbWVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVQaWNrZWQoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IGV2ZW50LnZhbHVlO1xuXG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TG9naWNhbFRpbWUodGltZTogTG9naWNhbERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gZGF0ZUZyb21Mb2dpY2FsRGF0ZSh0aW1lKTtcblxuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLnNldFRpbWVGcm9tRGF0ZShkYXRlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRlSW5wdXRWYWx1ZShkYXRlOiBEYXRlKSB7XG4gICAgdGhpcy5kYXRlSW5wdXRDdHJsLnNldFZhbHVlKGRhdGUpO1xuICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICB9XG5cbiAgc2V0VGltZUZyb21EYXRlKHRpbWVEYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgdGltZVN0cmluZyA9IHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcodGltZURhdGUpO1xuICAgIHRoaXMuc2V0VGltZSh0aW1lU3RyaW5nKTtcbiAgfVxuXG4gIHNldFRpbWUodGltZTogUmVhZGFibGVUaW1lU3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZUlucHV0Q3RybC52YWx1ZSAhPT0gdGltZSkge1xuICAgICAgdGhpcy50aW1lSW5wdXRDdHJsLnNldFZhbHVlKHRpbWUpO1xuICAgICAgdGhpcy5fb2Zmc2V0Lm5leHQoMCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duT25EYXRlSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDE7XG5cbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgb2Zmc2V0ID0gMzY1O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgb2Zmc2V0ID0gMzA7XG4gICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgb2Zmc2V0ID0gNztcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB0aGlzLmRhdGUkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkYXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBhZGREYXlzKGRhdGUsIG9mZnNldCAqIGRpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUobmV3RGF0ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duT25UaW1lSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDE7XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBvZmZzZXQgPSAzMDA7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDYwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDU7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgdGhpcy5fb2Zmc2V0Lm5leHQodGhpcy5fb2Zmc2V0LnZhbHVlICsgb2Zmc2V0ICogZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzVGltZSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICBmb2N1c091dFRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gIH1cblxuICBhZGRUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheShmYWxzZSk7XG4gIH1cblxuICByZW1vdmVUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheSh0cnVlKTtcbiAgfVxuXG4gIHNldEZ1bGxEYXkoZnVsbERheTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB4LnNldFZhbHVlKGZ1bGxEYXkpO1xuICAgIH0pO1xuICB9XG59XG5cbi8vIE1BUks6IENvbXBhdFxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgRGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uIGluc3RlYWQuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbiA9IERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbjtcbiIsIjxkaXYgY2xhc3M9XCJkYngtZGF0ZXRpbWUtZmllbGRcIiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXQueHM9XCJjb2x1bW4gd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1ldmVubHkgc3RyZXRjaFwiPlxuICA8IS0tIERhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93XCIgZnhGbGV4Lmx0LXNtPVwiMTAwXCIgW2Z4RmxleF09XCJkYXRlT25seSA/ICcxMDAnIDogJzUwJ1wiICpuZ0lmPVwic2hvd0RhdGVJbnB1dFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlSW5wdXRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gQWRkaXRpb25hbCBzcGFjaW5nIC0tPlxuICAgIDxkYngtYnV0dG9uLXNwYWNlciAqbmdJZj1cIiFkYXRlT25seVwiPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gIDwvZGl2PlxuICA8IS0tIFRpbWUgLS0+XG4gIDxkaXYgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93XCIgZnhGbGV4Lmx0LXNtPVwiMTAwXCIgW2Z4RmxleF09XCJzaG93RGF0ZUlucHV0ID8gJzUwJyA6ICcxMDAnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUaW1lSW5wdXQkIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lTWVudUFuZElucHV0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZFRpbWUkIHwgYXN5bmNcIiBjbGFzcz1cImFkZC10aW1lLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJtYXQtZGF0ZXBpY2tlci1idXR0b24taGlnaGxpZ2h0IGRieC1idXR0b24tc3BhY2VyIGFkZC10aW1lLWJ1dHRvblwiIG5nQ2xhc3MubHQtc209XCJhZGQtdGltZS1idXR0b24tZnVsbFwiIChjbGljayk9XCJhZGRUaW1lKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnRpbWVyPC9tYXQtaWNvbj5cbiAgICAgICAgQWRkIFRpbWVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIiFoaWRlRGF0ZUhpbnRcIiBjbGFzcz1cImRieC1kYXRldGltZS1yb3cgZGJ4LWRhdGV0aW1lLWhpbnQtcm93XCIgZnhGbGV4PVwiMTAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImRieC1oaW50XCIgW25nU3dpdGNoXT1cImZ1bGxEYXkkIHwgYXN5bmNcIj5cbiAgICAgIDxzbWFsbCAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgICA8YiBjbGFzcz1cImRieC1va1wiPnt7IGFsbERheUxhYmVsIH19PC9iPlxuICAgICAgICB7eyBkaXNwbGF5VmFsdWUkIHwgYXN5bmMgfCBkYXRlOiAnZnVsbERhdGUnIH19IHt7IHRpbWV6b25lQWJicmV2aWF0aW9uJCB8IGFzeW5jIH19ICh7eyBkaXNwbGF5VmFsdWUkIHwgYXN5bmMgfCBkYXRlRGlzdGFuY2UgfX0pXG4gICAgICA8L3NtYWxsPlxuICAgICAgPHNtYWxsICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPGIgY2xhc3M9XCJkYngtb2tcIj57eyBhdFRpbWVMYWJlbCB9fTwvYj5cbiAgICAgICAgICB7eyBkaXNwbGF5VmFsdWUkIHwgYXN5bmMgfCBkYXRlOiAnbWVkaXVtJyB9fSB7eyB0aW1lem9uZUFiYnJldmlhdGlvbiQgfCBhc3luYyB9fSAoe3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgdGltZURpc3RhbmNlIH19KVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gRGF0ZSBJbnB1dCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZUlucHV0VGVtcGxhdGU+XG4gIDxidXR0b24gY2xhc3M9XCJtYXQtZGF0ZXBpY2tlci1idXR0b24taGlnaGxpZ2h0IGRieC1idXR0b24tc3BhY2VyXCIgKm5nSWY9XCIhaGlkZURhdGVQaWNrZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8bWF0LWljb24+Y2FsZW5kYXJfdG9kYXk8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvdy1maWVsZFwiIFtuZ0NsYXNzXT1cInsgJ2RieC1kYXRldGltZS1yb3ctZmllbGQtZnVsbC13aWR0aCc6IGhpZGVEYXRlUGlja2VyIH1cIj5cbiAgICA8bWF0LWxhYmVsPnt7IGRhdGVMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjZGF0ZUlucHV0IG1hdElucHV0IFttaW5dPVwiZGF0ZUlucHV0TWluJCB8IGFzeW5jXCIgW21heF09XCJkYXRlSW5wdXRNYXgkIHwgYXN5bmNcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCIocGlja2VyRmlsdGVyJCB8IGFzeW5jKSB8fCBkZWZhdWx0UGlja2VyRmlsdGVyXCIgKGRhdGVDaGFuZ2UpPVwiZGF0ZVBpY2tlZCgkZXZlbnQpXCIgW3ZhbHVlXT1cImRhdGVWYWx1ZSQgfCBhc3luY1wiIChrZXlkb3duKT1cImtleWRvd25PbkRhdGVJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgIDxzcGFuIG1hdFN1ZmZpeCAqbmdJZj1cIiEoc2hvd1RpbWVJbnB1dCQgfCBhc3luYylcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lIE1lbnUvSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3RpbWVNZW51QW5kSW5wdXRUZW1wbGF0ZT5cbiAgPGJ1dHRvbiBjbGFzcz1cIm1hdC1kYXRlcGlja2VyLWJ1dHRvbi1oaWdobGlnaHQgZGJ4LWJ1dHRvbi1zcGFjZXJcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRpbWVtZW51XCIgYXJpYS1sYWJlbD1cIm9wZW5zIHRoZSB0aW1lIG1lbnVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8bWF0LWljb24+dGltZXI8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPG1hdC1tZW51ICN0aW1lbWVudT1cIm1hdE1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGltZU1vZGUgPT09ICdvcHRpb25hbCdcIj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlVGltZSgpXCI+XG4gICAgICAgIDxzcGFuPlJlbW92ZSBUaW1lPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcmVzZXQgb2YgcHJlc2V0cyQgfCBhc3luY1wiPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzZWxlY3RQcmVzZXQocHJlc2V0KVwiPnt7IHByZXNldC5sYWJlbCB8IGdldFZhbHVlIH19PC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LW1lbnU+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctZmllbGRcIj5cbiAgICA8bWF0LWxhYmVsPnt7IHRpbWVMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjdGltZUlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ0aW1lSW5wdXRDdHJsXCIgKGZvY3VzKT1cImZvY3VzVGltZSgpXCIgKGZvY3Vzb3V0KT1cImZvY3VzT3V0VGltZSgpXCIgKGtleWRvd24pPVwia2V5ZG93bk9uVGltZUlucHV0KCRldmVudClcIiAvPlxuICAgIDxzcGFuIG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lem9uZSBTdWZmaXggLS0+XG48bmctdGVtcGxhdGUgI3RpbWV6b25lU3VmZml4VGVtcGxhdGU+XG4gIDxzcGFuICpuZ0lmPVwic2hvd1RpbWV6b25lXCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtdGltZXpvbmUgZGJ4LWZhaW50XCI+e3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19