@annalib/anna-core 16.0.4 → 16.0.5

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.
@@ -303,4 +303,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
303
303
  }], closeTooltip: [{
304
304
  type: Output
305
305
  }] } });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLHlFQUF5RSxDQUFDO0FBQ2pJLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSx5REFBeUQsQ0FBQzs7Ozs7Ozs7QUFRakcsTUFBTSxPQUFPLGtDQUFrQztJQStCN0MsWUFDUyx5QkFBb0QsRUFDbkQsZUFBZ0MsRUFDakMsaUJBQW9DO1FBRnBDLDhCQUF5QixHQUF6Qix5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Q0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OytIQW5VVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyxzVkNoQi9DLGdtREE0Qk07MkZEWk8sa0NBQWtDO2tCQUw5QyxTQUFTOytCQUNFLHlDQUF5Qzs4S0FLMUMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1zb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLCBOZ2JEYXRlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU29ydFR5cGUsIFNvcnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyByYWRpb0J1dHRvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtdG9vbHRpcC5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwO1xyXG4gIEBJbnB1dCgpIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xyXG5cclxuICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNvcnRpbmdBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VUb29sdGlwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpc0ZpbHRlckNoYW5nZWQ6IGJvb2xlYW47XHJcbiAgdGVtcFNvcnRPcmRlcjogU29ydFR5cGUgPSBudWxsO1xyXG4gIGlzU29ydENoYW5nZWQ6IGJvb2xlYW47XHJcbiAgZGlzYWJsZVNlbGVjdEFsbDogYm9vbGVhbjtcclxuICBkaXNhYmxlQ2xlYXJBbGw6IGJvb2xlYW47XHJcbiAgc2VhcmNoSXRlbTogc3RyaW5nO1xyXG4gIHNob3dTb3J0Q29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZUNhbGVuZGFyQXBwbHlCdG46IGJvb2xlYW47XHJcbiAgc2VsZWN0ZWRMYWJlbDogc3RyaW5nO1xyXG4gIHNob3dGaWx0ZXJDb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGFydDogbnVtYmVyID0gMDtcclxuICBlbmQ6IG51bWJlciA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gIGRpc2FibGVDb2x1bW5DbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuICBjYWxlbmRhck1pbkVuYWJsZWREYXRlOiBOZ2JEYXRlVHlwZTtcclxuICBjYWxlbmRhck1heEVuYWJsZWREYXRlOiBOZ2JEYXRlVHlwZTtcclxuICBzZWxlY3RlZE1pbkRhdGU6IE5nYkRhdGVUeXBlO1xyXG4gIHNlbGVjdGVkTWF4RGF0ZTogTmdiRGF0ZVR5cGU7XHJcbiAgY2FsZW5kYXJTZWxlY3Rpb246IGFueSA9IHsgZnJvbURhdGU6IG51bGwsIHRvRGF0ZTogbnVsbCB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgIHB1YmxpYyBhbm5hRmlsdGVyU2VydmljZTogQW5uYUZpbHRlclNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKHRoaXMuZmlsdGVyVGFiT2JqZWN0c1swXSk7XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oYWN0aXZlVGFiOiByYWRpb0J1dHRvbk1vZGVsKSB7XHJcbiAgICBsZXQgaGVhZGVyID0gYWN0aXZlVGFiLmtleTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGFjdGl2ZVRhYi5sYWJlbDtcclxuICAgIHRoaXMuc2VhcmNoSXRlbSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zaG93U29ydENvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc1NvcnRSZXF1aXJlZDtcclxuICAgIHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc0ZpbHRlclJlcXVpcmVkO1xyXG4gICAgdGhpcy50ZW1wU29ydE9yZGVyID0gbnVsbDtcclxuICAgIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU29ydENoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPSBoZWFkZXI7XHJcbiAgICB0aGlzLmRpc2FibGVBY3RpdmVGaWx0ZXJDbGVhckJ1dHRvbigpO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoaGVhZGVyKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVBY3RpdmVGaWx0ZXJDbGVhckJ1dHRvbigpIHtcclxuICAgIGxldCBzZWxlY3RlZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgbGV0IGlzU29ydFByZXNlbnQgPSAodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zaXplID4gMCAmJiBjdXJyZW50Q29sdW1uU29ydEZpbHRlciAhPSBTb3J0VHlwZUVudW0uREVGQVVMVCk7XHJcblxyXG4gICAgdGhpcy5kaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG4gPSBzZWxlY3RlZEZpbHRlclNldC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSB8fCBpc1NvcnRQcmVzZW50ID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSAmJlxyXG4gICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID8gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgOiBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuICAgIHJldHVybiBjdXJyZW50Q29sdW1uU29ydEZpbHRlcjtcclxuICB9XHJcblxyXG5cclxuICBjcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShoZWFkZXI6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnRuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYWxlbmRhckRhdGEoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U29ydENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnRuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXRDYWxlbmRhckRhdGEoKSB7XHJcbiAgICBjb25zdCBwYXJzaW5nRm9ybWF0ID0gXCJNTS9ERC9ZWVlZXCI7XHJcbiAgICBsZXQgbWluTWF4RGF0ZSA9IHRoaXMuY3JlYXRlUmFuZ2VGb3JUaGVEYXRlRmlsdGVyKCk7XHJcbiAgICB0aGlzLnNlbGVjdFJhbmdlRm9yVGhlRGF0ZUZpbHRlcihtaW5NYXhEYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJhbmdlRm9yVGhlRGF0ZUZpbHRlcigpIHtcclxuICAgIGxldCBvcHRpb25EYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgbGV0IG1pbk1heERhdGU7XHJcbiAgICAvL1doZW4geW91IHdhbnQgdG8gdXNlIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBjb21iaW5lZCBhcyBzaW5nbGUgY29sdW1uIHRoZW4gdXNlIFBlcmlvZC5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBtaW5NYXhEYXRlID0gdGhpcy5jcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pbk1heERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUob3B0aW9uRGF0YSwgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWluTWF4RGF0ZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVN0YXJ0RW5kRGF0ZVJhbmdlKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgbWluU3RhcnREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIFwic3RhcnREYXRlXCIpO1xyXG4gICAgbGV0IG1heEVuZERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUob3B0aW9uRGF0YSwgXCJlbmREYXRlXCIpO1xyXG4gICAgcmV0dXJuIFttaW5TdGFydERhdGVbMF0sIG1heEVuZERhdGVbMV1dO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UmFuZ2VGb3JUaGVEYXRlRmlsdGVyKG1pbk1heERhdGU6IGFueVtdLCBwYXJzaW5nRm9ybWF0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgdGhpcy5jYWxlbmRhck1heEVuYWJsZWREYXRlID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVsxXSwgcGFyc2luZ0Zvcm1hdCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZERhdGVPYmogPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZERhdGVPYmouZnJvbURhdGUuaXNBZnRlcihtaW5NYXhEYXRlWzBdKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5EYXRlID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2VsZWN0ZWREYXRlT2JqLnRvRGF0ZS5pc0FmdGVyKG1pbk1heERhdGVbMV0pKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1heERhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShtaW5NYXhEYXRlWzFdLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHNlbGVjdGVkRGF0ZU9iai50b0RhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWluRGF0ZSA9IGNsb25lRGVlcCh0aGlzLmNhbGVuZGFyTWluRW5hYmxlZERhdGUpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWF4RGF0ZSA9IGNsb25lRGVlcCh0aGlzLmNhbGVuZGFyTWF4RW5hYmxlZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24uZnJvbURhdGUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZE1pbkRhdGUpO1xyXG4gICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbi50b0RhdGUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZE1heERhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlEYXRlRmlsdGVyKCkge1xyXG4gICAgdGhpcy5hcHBseURhdGVGaWx0ZXJPbkRhdGEoKTtcclxuICAgIHRoaXMuYXBwbHlTb3J0aW5nT25GaWx0ZXJlZERhdGEoKTtcclxuICAgIHRoaXMuZW1pdERhdGEoKTtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS51cGRhdGVTdGF0ZU9mQWxsVGhlS2V5cyh0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW5kZXgoKSB7XHJcbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQ7XHJcbiAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gIH1cclxuXHJcbiAgcmVzZXRJbmRleCgpIHtcclxuICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICB9XHJcblxyXG4gIHNldEluaXRpYWxSb3dzRm9yVGFibGUoKSB7XHJcbiAgICB0aGlzLnJlc2V0SW5kZXgoKTtcclxuICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U29ydGluZ09uRmlsdGVyZWREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU29ydE1hcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTb3J0TWFwKCkge1xyXG4gICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIHRoaXMudGVtcFNvcnRPcmRlcik7XHJcbiAgICAvLyB0aGlzLmFwcGx5U29ydGluZyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoKSB7XHJcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmVudHJpZXMoKSkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gXCJBU0NcIikge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gY2xvbmVEZWVwKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZSh0cnVlLCB0aGlzLnRhYmxlRGF0YSwga2V5KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJERVNDXCIpIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoZmFsc2UsIHRoaXMudGFibGVEYXRhLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlTb3J0aW5nKGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wU29ydE9yZGVyID09IFwiQVNDXCIpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIHRoaXMudGFibGVEYXRhLCBrZXkpKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50ZW1wU29ydE9yZGVyID09IFwiREVTQ1wiKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gY2xvbmVEZWVwKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgdGhpcy50YWJsZURhdGEsIGtleSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRlbXBTb3J0T3JkZXIgPT0gXCJERUZBVUxUXCIpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uubm9Tb3J0aW5nQXBwbGllZERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQgJiYgdGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGVtcFNvcnRPcmRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJbkRhdGVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2FsZW5kYXJEYXRlQ2hhbmdlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gZXZlbnQ7XHJcbiAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQ2FsZW5kYXJBcHBseUJ1dHRvbigpIHtcclxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgJiYgdGhpcy5zaG93U29ydENvbXBvbmVudCkge1xyXG4gICAgICBsZXQgaXNGaWx0ZXJDaGFuZ2VkID0gdGhpcy5jaGVja0lmRGF0ZVRvb2x0aXBJc0ZpbHRlcmVkKCk7XHJcbiAgICAgIGxldCBpc1NvcnRDaGFuZ2VkID0gdGhpcy5jaGVja0lmU29ydGluZ0NoYW5nZWQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQ2FsZW5kYXJBcHBseUJ0biA9ICEodGhpcy5jYWxlbmRhclNlbGVjdGlvbi5mcm9tRGF0ZSAmJiB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uLnRvRGF0ZSkgfHwgKCFpc1NvcnRDaGFuZ2VkICYmICFpc0ZpbHRlckNoYW5nZWQpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlQ2FsZW5kYXJBcHBseUJ0biA9ICEodGhpcy5jYWxlbmRhclNlbGVjdGlvbi5mcm9tRGF0ZSAmJiB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uLnRvRGF0ZSkgfHwgIXRoaXMuY2hlY2tJZkRhdGVUb29sdGlwSXNGaWx0ZXJlZCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUNhbGVuZGFyQXBwbHlCdG4gPSAhdGhpcy5jaGVja0lmU29ydGluZ0NoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZTb3J0aW5nQ2hhbmdlZCgpIHtcclxuICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdGhpcy50ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGhpcy50ZW1wU29ydE9yZGVyICE9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTb3J0Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZEYXRlVG9vbHRpcElzRmlsdGVyZWQoKSB7XHJcbiAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZSA9IGNsb25lRGVlcCh0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgIGxldCBwcmV2aW91c1NlbGVjdGVkRGF0ZTogeyBmcm9tRGF0ZTogYW55LCB0b0RhdGU6IGFueSB9ID0geyBmcm9tRGF0ZTogbnVsbCwgdG9EYXRlOiBudWxsIH07XHJcblxyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0ZWREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcigpO1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50U2VsZWN0ZWREYXRlLmZyb21EYXRlICYmIGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlKSB7XHJcbiAgICAgIGxldCBmcm9tRGF0ZSA9IHsgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZS55ZWFyLCBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZS5tb250aCwgZGF5OiBjdXJyZW50U2VsZWN0ZWREYXRlLmZyb21EYXRlLmRheSB9O1xyXG4gICAgICBsZXQgdG9EYXRlID0geyB5ZWFyOiBjdXJyZW50U2VsZWN0ZWREYXRlLnRvRGF0ZS55ZWFyLCBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUubW9udGgsIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUuZGF5IH07XHJcblxyXG4gICAgICBpZiAoaXNFcXVhbCh0aGlzLmNhbGVuZGFyTWluRW5hYmxlZERhdGUsIGZyb21EYXRlKSAmJiBpc0VxdWFsKHRoaXMuY2FsZW5kYXJNYXhFbmFibGVkRGF0ZSwgdG9EYXRlKSAmJiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlLmZyb21EYXRlID0gZGF5anModGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZSkpO1xyXG4gICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlID0gZGF5anModGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9ICFpc0VxdWFsKHByZXZpb3VzU2VsZWN0ZWREYXRlLCBjdXJyZW50U2VsZWN0ZWREYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcigpIHtcclxuICAgIGxldCBtaW5NYXhEYXRlO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBsZXQgbWluU3RhcnREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXR1cm5NaW5BbmRNYXhEYXRlKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcInN0YXJ0RGF0ZVwiKTtcclxuICAgICAgbGV0IG1heEVuZERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiZW5kRGF0ZVwiKTtcclxuICAgICAgbWluTWF4RGF0ZSA9IFttaW5TdGFydERhdGVbMF0sIG1heEVuZERhdGVbMV1dO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG1pbk1heERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUodGhpcy5jbG9uZWRUYWJsZURhdGEsIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0ZWREYXRlID0geyBmcm9tRGF0ZTogbWluTWF4RGF0ZVswXSwgdG9EYXRlOiBtaW5NYXhEYXRlWzFdIH07XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvLCBzZWxlY3RlZERhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlEYXRlRmlsdGVyT25EYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZWxlY3Rpb247XHJcblxyXG4gICAgICBsZXQgZnJvbURhdGUgPSB7IHllYXI6IGN1cnJlbnRTZWxlY3RlZERhdGUuZnJvbURhdGUueWVhciwgbW9udGg6IGN1cnJlbnRTZWxlY3RlZERhdGUuZnJvbURhdGUubW9udGgsIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZS5kYXkgfTtcclxuICAgICAgbGV0IHRvRGF0ZSA9IHsgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUueWVhciwgbW9udGg6IGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlLm1vbnRoLCBkYXk6IGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlLmRheSB9O1xyXG5cclxuICAgICAgaWYgKGlzRXF1YWwodGhpcy5jYWxlbmRhck1pbkVuYWJsZWREYXRlLCBmcm9tRGF0ZSkgJiYgaXNFcXVhbCh0aGlzLmNhbGVuZGFyTWF4RW5hYmxlZERhdGUsIHRvRGF0ZSkgJiYgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZSA9IGRheWpzKHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGUuZnJvbURhdGUpKTtcclxuICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlLnRvRGF0ZSA9IGRheWpzKHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgY3VycmVudFNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIGN1cnJlbnRTZWxlY3RlZERhdGUpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gY2xvbmVEZWVwKHRoaXMudGFibGVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyQ29sdW1uRmlsdGVyKCkge1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcigpO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hRmlsdGVyU2VydmljZS5maWx0ZXJEYXRhKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcIlwiKSk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5ub1NvcnRpbmdBcHBsaWVkRGF0YSA9IHRoaXMudGFibGVEYXRhO1xyXG4gICAgdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZCgpO1xyXG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICB9XHJcblxyXG4gIHN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZShldmVudDogU29ydFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFNvcnRPcmRlciA9IGV2ZW50O1xyXG4gICAgdGhpcy5kaXNhYmxlQ2FsZW5kYXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCIgKm5nSWY9XCJmaWx0ZXJUYWJPYmplY3RzPy5sZW5ndGggPiAxXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlclRhYk9iamVjdHNcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImZpbHRlci10YWJcIiBbdGl0bGVdPVwiZGF0YS5sYWJlbFwiIChjbGljayk9XCJwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oZGF0YSlcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gZGF0YS5rZXl9XCIgKm5nSWY9XCJmaWx0ZXJUYWJPYmplY3RzLmxlbmd0aCA+IDBcIj57e1xyXG4gICAgICAgICAgICBkYXRhLmxhYmVsIH19PC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGFubmEtY29yZS1zb3J0LWxpYiAqbmdJZj1cInNob3dTb3J0Q29tcG9uZW50XCIgW25nQ2xhc3NdPVwieyduby1ib3R0b20tYm9yZGVyJzogIXNob3dGaWx0ZXJDb21wb25lbnR9XCJcclxuICAgIChzb3J0T3B0aW9uQ2xpY2tlZCk9XCJzdG9yZVNvcnRUeXBlSW5UZW1wVmFyaWFibGUoJGV2ZW50KVwiXHJcbiAgICBbc29ydE9iamVjdEtleV09XCJhbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvXCI+PC9hbm5hLWNvcmUtc29ydC1saWI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpbHRlckNvbXBvbmVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbHVtbi1jbGVhci1hbGxcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuXCIgKGNsaWNrKT1cImNsZWFyQ29sdW1uRmlsdGVyKClcIj5cclxuICAgICAgICAgICAgQ2xlYXIgZmlsdGVyXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGFubmEtY29yZS1jYWxlbmRhci1maWx0ZXItbGliIFttaW5EYXRlXT1cImNhbGVuZGFyTWluRW5hYmxlZERhdGVcIiBbbWF4RGF0ZV09XCJjYWxlbmRhck1heEVuYWJsZWREYXRlXCJcclxuICAgICAgICAgICAgW3NlbGVjdGVkRnJvbURhdGVdPVwic2VsZWN0ZWRNaW5EYXRlXCIgW3NlbGVjdGVkVG9EYXRlXT1cInNlbGVjdGVkTWF4RGF0ZVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZERhdGUpPVwiY2FsZW5kYXJEYXRlQ2hhbmdlZCgkZXZlbnQpXCIgW2xhYmVsXT1cInNlbGVjdGVkTGFiZWxcIj5cclxuICAgICAgICA8L2FubmEtY29yZS1jYWxlbmRhci1maWx0ZXItbGliPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbEluRGF0ZUZpbHRlcigpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5RGF0ZUZpbHRlcigpXCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZUNhbGVuZGFyQXBwbHlCdG4gfVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVDYWxlbmRhckFwcGx5QnRuXCI+QXBwbHk8L2J1dHRvbj5cclxuPC9kaXY+Il19
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLHlFQUF5RSxDQUFDO0FBQ2pJLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSx5REFBeUQsQ0FBQzs7Ozs7Ozs7QUFRakcsTUFBTSxPQUFPLGtDQUFrQztJQWdDN0MsWUFDUyx5QkFBb0QsRUFDbkQsZUFBZ0MsRUFDakMsaUJBQW9DO1FBRnBDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDbkQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFoQ3BDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFJbEIseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc1QyxrQkFBYSxHQUFhLElBQUksQ0FBQztRQUsvQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFHbkMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsUUFBRyxHQUFXLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN0Qyw2QkFBd0IsR0FBWSxJQUFJLENBQUM7UUFPekMsc0JBQWlCLEdBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUtULENBQUM7SUFFbEQsUUFBUTtRQUNOLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsdUNBQXVDLENBQUMsU0FBMkI7UUFDakUsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUM5QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDhCQUE4QjtRQUM1QixJQUFJLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVFLElBQUksdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7UUFDeEUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLHVCQUF1QixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvSixJQUFJLENBQUMsd0JBQXdCLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlILENBQUM7SUFFRCxrQ0FBa0M7UUFDaEMsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztZQUNsSixJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pGLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNuRyxPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7SUFHRCx1QkFBdUIsQ0FBQyxNQUFjO1FBQ3BDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztTQUNyQztJQUNILENBQUM7SUFHRCxlQUFlO1FBQ2IsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ25DLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkcsSUFBSSxVQUFVLENBQUM7UUFDZix1RkFBdUY7UUFDdkYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxJQUFJLFFBQVEsRUFBRTtZQUNwRCxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZEO2FBQU07WUFDTCxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDM0c7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsVUFBaUI7UUFDdkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELDJCQUEyQixDQUFDLFVBQWlCLEVBQUUsYUFBcUI7UUFDbEUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUcsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFNUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN2RixJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUUxRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ2pIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUN0RztZQUVELElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUN0RztpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQy9HO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN0QjtpQkFDSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1NBQ0Y7YUFDSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDN0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25HLDJEQUEyRDtJQUM3RCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2RSxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsMENBQTBDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN4SDtpQkFBTSxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsMENBQTBDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN6SDtTQUNGO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQ0FBMEMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3hIO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLDBDQUEwQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDekg7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN2RTtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN0RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUMxRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM1STthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztTQUM1STthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlEO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLHVCQUF1QixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSx1QkFBdUIsQ0FBQztRQUNqRyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELDRCQUE0QjtRQUMxQixJQUFJLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1RCxJQUFJLG9CQUFvQixHQUFtQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRTVGLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdkYsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFM0csSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDckYsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7YUFDeEM7U0FFRjthQUNJLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3pGLG9CQUFvQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN6RzthQUNJO1lBQ0gsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDdkMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3pHO1FBRUQsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLElBQUksbUJBQW1CLENBQUMsTUFBTSxFQUFFO1lBQzlELElBQUksUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3SSxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFckksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN0TCxtQkFBbUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDeEc7aUJBQ0k7Z0JBQ0gsbUJBQW1CLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDMUgsbUJBQW1CLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUN2SDtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztTQUM1RTtRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBR0QsK0JBQStCO1FBQzdCLElBQUksVUFBVSxDQUFDO1FBRWYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxJQUFJLFFBQVEsRUFBRTtZQUNwRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNqRyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RixVQUFVLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0M7YUFDSTtZQUNILFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckg7UUFDRCxJQUFJLFlBQVksR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BELElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBRWpELElBQUksUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3SSxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFckksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN0TCxtQkFBbUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDeEc7aUJBQU07Z0JBQ0wsbUJBQW1CLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDMUgsbUJBQW1CLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUN2SDtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxLQUFlO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OytIQXBVVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyxzVkNoQi9DLGdtREE0Qk07MkZEWk8sa0NBQWtDO2tCQUw5QyxTQUFTOytCQUNFLHlDQUF5Qzs4S0FLMUMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0ksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1zb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLCBOZ2JEYXRlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU29ydFR5cGUsIFNvcnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyByYWRpb0J1dHRvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtdG9vbHRpcC5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwO1xyXG4gIEBJbnB1dCgpIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xyXG4gIFxyXG5cclxuICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNvcnRpbmdBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VUb29sdGlwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpc0ZpbHRlckNoYW5nZWQ6IGJvb2xlYW47XHJcbiAgdGVtcFNvcnRPcmRlcjogU29ydFR5cGUgPSBudWxsO1xyXG4gIGlzU29ydENoYW5nZWQ6IGJvb2xlYW47XHJcbiAgZGlzYWJsZVNlbGVjdEFsbDogYm9vbGVhbjtcclxuICBkaXNhYmxlQ2xlYXJBbGw6IGJvb2xlYW47XHJcbiAgc2VhcmNoSXRlbTogc3RyaW5nO1xyXG4gIHNob3dTb3J0Q29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZUNhbGVuZGFyQXBwbHlCdG46IGJvb2xlYW47XHJcbiAgc2VsZWN0ZWRMYWJlbDogc3RyaW5nO1xyXG4gIHNob3dGaWx0ZXJDb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGFydDogbnVtYmVyID0gMDtcclxuICBlbmQ6IG51bWJlciA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gIGRpc2FibGVDb2x1bW5DbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuICBjYWxlbmRhck1pbkVuYWJsZWREYXRlOiBOZ2JEYXRlVHlwZTtcclxuICBjYWxlbmRhck1heEVuYWJsZWREYXRlOiBOZ2JEYXRlVHlwZTtcclxuICBzZWxlY3RlZE1pbkRhdGU6IE5nYkRhdGVUeXBlO1xyXG4gIHNlbGVjdGVkTWF4RGF0ZTogTmdiRGF0ZVR5cGU7XHJcbiAgY2FsZW5kYXJTZWxlY3Rpb246IGFueSA9IHsgZnJvbURhdGU6IG51bGwsIHRvRGF0ZTogbnVsbCB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgIHB1YmxpYyBhbm5hRmlsdGVyU2VydmljZTogQW5uYUZpbHRlclNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKHRoaXMuZmlsdGVyVGFiT2JqZWN0c1swXSk7XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oYWN0aXZlVGFiOiByYWRpb0J1dHRvbk1vZGVsKSB7XHJcbiAgICBsZXQgaGVhZGVyID0gYWN0aXZlVGFiLmtleTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGFjdGl2ZVRhYi5sYWJlbDtcclxuICAgIHRoaXMuc2VhcmNoSXRlbSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zaG93U29ydENvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc1NvcnRSZXF1aXJlZDtcclxuICAgIHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc0ZpbHRlclJlcXVpcmVkO1xyXG4gICAgdGhpcy50ZW1wU29ydE9yZGVyID0gbnVsbDtcclxuICAgIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU29ydENoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPSBoZWFkZXI7XHJcbiAgICB0aGlzLmRpc2FibGVBY3RpdmVGaWx0ZXJDbGVhckJ1dHRvbigpO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoaGVhZGVyKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVBY3RpdmVGaWx0ZXJDbGVhckJ1dHRvbigpIHtcclxuICAgIGxldCBzZWxlY3RlZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgbGV0IGlzU29ydFByZXNlbnQgPSAodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zaXplID4gMCAmJiBjdXJyZW50Q29sdW1uU29ydEZpbHRlciAhPSBTb3J0VHlwZUVudW0uREVGQVVMVCk7XHJcblxyXG4gICAgdGhpcy5kaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG4gPSBzZWxlY3RlZEZpbHRlclNldC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSB8fCBpc1NvcnRQcmVzZW50ID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSAmJlxyXG4gICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID8gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgOiBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuICAgIHJldHVybiBjdXJyZW50Q29sdW1uU29ydEZpbHRlcjtcclxuICB9XHJcblxyXG5cclxuICBjcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShoZWFkZXI6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnRuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYWxlbmRhckRhdGEoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U29ydENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnRuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXRDYWxlbmRhckRhdGEoKSB7XHJcbiAgICBjb25zdCBwYXJzaW5nRm9ybWF0ID0gXCJNTS9ERC9ZWVlZXCI7XHJcbiAgICBsZXQgbWluTWF4RGF0ZSA9IHRoaXMuY3JlYXRlUmFuZ2VGb3JUaGVEYXRlRmlsdGVyKCk7XHJcbiAgICB0aGlzLnNlbGVjdFJhbmdlRm9yVGhlRGF0ZUZpbHRlcihtaW5NYXhEYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJhbmdlRm9yVGhlRGF0ZUZpbHRlcigpIHtcclxuICAgIGxldCBvcHRpb25EYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgbGV0IG1pbk1heERhdGU7XHJcbiAgICAvL1doZW4geW91IHdhbnQgdG8gdXNlIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBjb21iaW5lZCBhcyBzaW5nbGUgY29sdW1uIHRoZW4gdXNlIFBlcmlvZC5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBtaW5NYXhEYXRlID0gdGhpcy5jcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pbk1heERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUob3B0aW9uRGF0YSwgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWluTWF4RGF0ZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVN0YXJ0RW5kRGF0ZVJhbmdlKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgbWluU3RhcnREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIFwic3RhcnREYXRlXCIpO1xyXG4gICAgbGV0IG1heEVuZERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUob3B0aW9uRGF0YSwgXCJlbmREYXRlXCIpO1xyXG4gICAgcmV0dXJuIFttaW5TdGFydERhdGVbMF0sIG1heEVuZERhdGVbMV1dO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UmFuZ2VGb3JUaGVEYXRlRmlsdGVyKG1pbk1heERhdGU6IGFueVtdLCBwYXJzaW5nRm9ybWF0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgdGhpcy5jYWxlbmRhck1heEVuYWJsZWREYXRlID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVsxXSwgcGFyc2luZ0Zvcm1hdCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZERhdGVPYmogPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZERhdGVPYmouZnJvbURhdGUuaXNBZnRlcihtaW5NYXhEYXRlWzBdKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5EYXRlID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2VsZWN0ZWREYXRlT2JqLnRvRGF0ZS5pc0FmdGVyKG1pbk1heERhdGVbMV0pKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1heERhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShtaW5NYXhEYXRlWzFdLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHNlbGVjdGVkRGF0ZU9iai50b0RhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWluRGF0ZSA9IGNsb25lRGVlcCh0aGlzLmNhbGVuZGFyTWluRW5hYmxlZERhdGUpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWF4RGF0ZSA9IGNsb25lRGVlcCh0aGlzLmNhbGVuZGFyTWF4RW5hYmxlZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24uZnJvbURhdGUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZE1pbkRhdGUpO1xyXG4gICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbi50b0RhdGUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZE1heERhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlEYXRlRmlsdGVyKCkge1xyXG4gICAgdGhpcy5hcHBseURhdGVGaWx0ZXJPbkRhdGEoKTtcclxuICAgIHRoaXMuYXBwbHlTb3J0aW5nT25GaWx0ZXJlZERhdGEoKTtcclxuICAgIHRoaXMuZW1pdERhdGEoKTtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS51cGRhdGVTdGF0ZU9mQWxsVGhlS2V5cyh0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW5kZXgoKSB7XHJcbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQ7XHJcbiAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gIH1cclxuXHJcbiAgcmVzZXRJbmRleCgpIHtcclxuICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICB9XHJcblxyXG4gIHNldEluaXRpYWxSb3dzRm9yVGFibGUoKSB7XHJcbiAgICB0aGlzLnJlc2V0SW5kZXgoKTtcclxuICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U29ydGluZ09uRmlsdGVyZWREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU29ydE1hcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTb3J0TWFwKCkge1xyXG4gICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIHRoaXMudGVtcFNvcnRPcmRlcik7XHJcbiAgICAvLyB0aGlzLmFwcGx5U29ydGluZyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoKSB7XHJcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmVudHJpZXMoKSkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gXCJBU0NcIikge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gY2xvbmVEZWVwKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZSh0cnVlLCB0aGlzLnRhYmxlRGF0YSwga2V5KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJERVNDXCIpIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoZmFsc2UsIHRoaXMudGFibGVEYXRhLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlTb3J0aW5nKGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wU29ydE9yZGVyID09IFwiQVNDXCIpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIHRoaXMudGFibGVEYXRhLCBrZXkpKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50ZW1wU29ydE9yZGVyID09IFwiREVTQ1wiKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gY2xvbmVEZWVwKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgdGhpcy50YWJsZURhdGEsIGtleSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRlbXBTb3J0T3JkZXIgPT0gXCJERUZBVUxUXCIpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uubm9Tb3J0aW5nQXBwbGllZERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQgJiYgdGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGVtcFNvcnRPcmRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJbkRhdGVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2FsZW5kYXJEYXRlQ2hhbmdlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gZXZlbnQ7XHJcbiAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQ2FsZW5kYXJBcHBseUJ1dHRvbigpIHtcclxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgJiYgdGhpcy5zaG93U29ydENvbXBvbmVudCkge1xyXG4gICAgICBsZXQgaXNGaWx0ZXJDaGFuZ2VkID0gdGhpcy5jaGVja0lmRGF0ZVRvb2x0aXBJc0ZpbHRlcmVkKCk7XHJcbiAgICAgIGxldCBpc1NvcnRDaGFuZ2VkID0gdGhpcy5jaGVja0lmU29ydGluZ0NoYW5nZWQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQ2FsZW5kYXJBcHBseUJ0biA9ICEodGhpcy5jYWxlbmRhclNlbGVjdGlvbi5mcm9tRGF0ZSAmJiB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uLnRvRGF0ZSkgfHwgKCFpc1NvcnRDaGFuZ2VkICYmICFpc0ZpbHRlckNoYW5nZWQpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlQ2FsZW5kYXJBcHBseUJ0biA9ICEodGhpcy5jYWxlbmRhclNlbGVjdGlvbi5mcm9tRGF0ZSAmJiB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uLnRvRGF0ZSkgfHwgIXRoaXMuY2hlY2tJZkRhdGVUb29sdGlwSXNGaWx0ZXJlZCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUNhbGVuZGFyQXBwbHlCdG4gPSAhdGhpcy5jaGVja0lmU29ydGluZ0NoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZTb3J0aW5nQ2hhbmdlZCgpIHtcclxuICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdGhpcy50ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGhpcy50ZW1wU29ydE9yZGVyICE9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTb3J0Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZEYXRlVG9vbHRpcElzRmlsdGVyZWQoKSB7XHJcbiAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZSA9IGNsb25lRGVlcCh0aGlzLmNhbGVuZGFyU2VsZWN0aW9uKTtcclxuICAgIGxldCBwcmV2aW91c1NlbGVjdGVkRGF0ZTogeyBmcm9tRGF0ZTogYW55LCB0b0RhdGU6IGFueSB9ID0geyBmcm9tRGF0ZTogbnVsbCwgdG9EYXRlOiBudWxsIH07XHJcblxyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0ZWREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcigpO1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50U2VsZWN0ZWREYXRlLmZyb21EYXRlICYmIGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlKSB7XHJcbiAgICAgIGxldCBmcm9tRGF0ZSA9IHsgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZS55ZWFyLCBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZS5tb250aCwgZGF5OiBjdXJyZW50U2VsZWN0ZWREYXRlLmZyb21EYXRlLmRheSB9O1xyXG4gICAgICBsZXQgdG9EYXRlID0geyB5ZWFyOiBjdXJyZW50U2VsZWN0ZWREYXRlLnRvRGF0ZS55ZWFyLCBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUubW9udGgsIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUuZGF5IH07XHJcblxyXG4gICAgICBpZiAoaXNFcXVhbCh0aGlzLmNhbGVuZGFyTWluRW5hYmxlZERhdGUsIGZyb21EYXRlKSAmJiBpc0VxdWFsKHRoaXMuY2FsZW5kYXJNYXhFbmFibGVkRGF0ZSwgdG9EYXRlKSAmJiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlLmZyb21EYXRlID0gZGF5anModGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZSkpO1xyXG4gICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlID0gZGF5anModGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9ICFpc0VxdWFsKHByZXZpb3VzU2VsZWN0ZWREYXRlLCBjdXJyZW50U2VsZWN0ZWREYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcigpIHtcclxuICAgIGxldCBtaW5NYXhEYXRlO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBsZXQgbWluU3RhcnREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXR1cm5NaW5BbmRNYXhEYXRlKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcInN0YXJ0RGF0ZVwiKTtcclxuICAgICAgbGV0IG1heEVuZERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiZW5kRGF0ZVwiKTtcclxuICAgICAgbWluTWF4RGF0ZSA9IFttaW5TdGFydERhdGVbMF0sIG1heEVuZERhdGVbMV1dO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG1pbk1heERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUodGhpcy5jbG9uZWRUYWJsZURhdGEsIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0ZWREYXRlID0geyBmcm9tRGF0ZTogbWluTWF4RGF0ZVswXSwgdG9EYXRlOiBtaW5NYXhEYXRlWzFdIH07XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvLCBzZWxlY3RlZERhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlEYXRlRmlsdGVyT25EYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZWxlY3Rpb247XHJcblxyXG4gICAgICBsZXQgZnJvbURhdGUgPSB7IHllYXI6IGN1cnJlbnRTZWxlY3RlZERhdGUuZnJvbURhdGUueWVhciwgbW9udGg6IGN1cnJlbnRTZWxlY3RlZERhdGUuZnJvbURhdGUubW9udGgsIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZS5kYXkgfTtcclxuICAgICAgbGV0IHRvRGF0ZSA9IHsgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZS50b0RhdGUueWVhciwgbW9udGg6IGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlLm1vbnRoLCBkYXk6IGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlLmRheSB9O1xyXG5cclxuICAgICAgaWYgKGlzRXF1YWwodGhpcy5jYWxlbmRhck1pbkVuYWJsZWREYXRlLCBmcm9tRGF0ZSkgJiYgaXNFcXVhbCh0aGlzLmNhbGVuZGFyTWF4RW5hYmxlZERhdGUsIHRvRGF0ZSkgJiYgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VycmVudFNlbGVjdGVkRGF0ZS5mcm9tRGF0ZSA9IGRheWpzKHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGUuZnJvbURhdGUpKTtcclxuICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlLnRvRGF0ZSA9IGRheWpzKHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGUudG9EYXRlKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgY3VycmVudFNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIGN1cnJlbnRTZWxlY3RlZERhdGUpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gY2xvbmVEZWVwKHRoaXMudGFibGVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyQ29sdW1uRmlsdGVyKCkge1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcigpO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hRmlsdGVyU2VydmljZS5maWx0ZXJEYXRhKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcIlwiKSk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5ub1NvcnRpbmdBcHBsaWVkRGF0YSA9IHRoaXMudGFibGVEYXRhO1xyXG4gICAgdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZCgpO1xyXG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICB9XHJcblxyXG4gIHN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZShldmVudDogU29ydFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFNvcnRPcmRlciA9IGV2ZW50O1xyXG4gICAgdGhpcy5kaXNhYmxlQ2FsZW5kYXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCIgKm5nSWY9XCJmaWx0ZXJUYWJPYmplY3RzPy5sZW5ndGggPiAxXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlclRhYk9iamVjdHNcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImZpbHRlci10YWJcIiBbdGl0bGVdPVwiZGF0YS5sYWJlbFwiIChjbGljayk9XCJwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oZGF0YSlcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gZGF0YS5rZXl9XCIgKm5nSWY9XCJmaWx0ZXJUYWJPYmplY3RzLmxlbmd0aCA+IDBcIj57e1xyXG4gICAgICAgICAgICBkYXRhLmxhYmVsIH19PC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGFubmEtY29yZS1zb3J0LWxpYiAqbmdJZj1cInNob3dTb3J0Q29tcG9uZW50XCIgW25nQ2xhc3NdPVwieyduby1ib3R0b20tYm9yZGVyJzogIXNob3dGaWx0ZXJDb21wb25lbnR9XCJcclxuICAgIChzb3J0T3B0aW9uQ2xpY2tlZCk9XCJzdG9yZVNvcnRUeXBlSW5UZW1wVmFyaWFibGUoJGV2ZW50KVwiXHJcbiAgICBbc29ydE9iamVjdEtleV09XCJhbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvXCI+PC9hbm5hLWNvcmUtc29ydC1saWI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpbHRlckNvbXBvbmVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbHVtbi1jbGVhci1hbGxcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuXCIgKGNsaWNrKT1cImNsZWFyQ29sdW1uRmlsdGVyKClcIj5cclxuICAgICAgICAgICAgQ2xlYXIgZmlsdGVyXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGFubmEtY29yZS1jYWxlbmRhci1maWx0ZXItbGliIFttaW5EYXRlXT1cImNhbGVuZGFyTWluRW5hYmxlZERhdGVcIiBbbWF4RGF0ZV09XCJjYWxlbmRhck1heEVuYWJsZWREYXRlXCJcclxuICAgICAgICAgICAgW3NlbGVjdGVkRnJvbURhdGVdPVwic2VsZWN0ZWRNaW5EYXRlXCIgW3NlbGVjdGVkVG9EYXRlXT1cInNlbGVjdGVkTWF4RGF0ZVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZERhdGUpPVwiY2FsZW5kYXJEYXRlQ2hhbmdlZCgkZXZlbnQpXCIgW2xhYmVsXT1cInNlbGVjdGVkTGFiZWxcIj5cclxuICAgICAgICA8L2FubmEtY29yZS1jYWxlbmRhci1maWx0ZXItbGliPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbEluRGF0ZUZpbHRlcigpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5RGF0ZUZpbHRlcigpXCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZUNhbGVuZGFyQXBwbHlCdG4gfVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVDYWxlbmRhckFwcGx5QnRuXCI+QXBwbHk8L2J1dHRvbj5cclxuPC9kaXY+Il19
@@ -547,4 +547,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
547
547
  }], closeTooltip: [{
548
548
  type: Output
549
549
  }] } });
550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUVBQXlFLENBQUM7Ozs7Ozs7OztBQVFwSCxNQUFNLE9BQU8sNkJBQTZCO0lBMkN4QyxZQUNVLGVBQWdDLEVBQ2pDLHlCQUFvRCxFQUVwRCxpQkFBb0M7UUFIbkMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLDhCQUF5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RyxDQUFDO0lBRUQsMkJBQTJCLENBQUMsS0FBZTtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzswSEFsb0JVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLG9YQ2pCMUMsbWlOQW9ITTsyRkRuR08sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG1DQUFtQzs4S0FLcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIG1hcCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuXHJcbmltcG9ydCB7IHJhZGlvQnV0dG9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsJztcclxuaW1wb3J0IHsgU29ydFR5cGUsIFNvcnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElHdEdlbmVyYWxDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1ub24tZWRpdGFibGUtZ3QtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDb2x1bW5UaW1lRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwO1xyXG4gIEBJbnB1dCgpIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGd0R2VuZXJhbENvbmZpZzogSUd0R2VuZXJhbENvbmZpZztcclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlckFwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzb3J0aW5nQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlVG9vbHRpcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgaXNGaWx0ZXJDaGFuZ2VkOiBib29sZWFuO1xyXG4gIHRlbXBTb3J0T3JkZXI6IFNvcnRUeXBlID0gbnVsbDtcclxuICBpc1NvcnRDaGFuZ2VkOiBib29sZWFuO1xyXG4gIGRpc2FibGVTZWxlY3RBbGw6IGJvb2xlYW47XHJcbiAgZGlzYWJsZUNsZWFyQWxsOiBib29sZWFuO1xyXG4gIHNlYXJjaEl0ZW06IHN0cmluZztcclxuICBzaG93U29ydENvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkTGFiZWw6IHN0cmluZztcclxuICBzaG93RmlsdGVyQ29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3RhcnQ6IG51bWJlciA9IDA7XHJcbiAgZW5kOiBudW1iZXIgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICBkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzdGFydFRpbWVIb3VyRXJyOiBib29sZWFuO1xyXG4gIHN0YXJ0VGltZU1pbkVycjogYm9vbGVhbjtcclxuICBlbmRUaW1lSG91ckVycjogYm9vbGVhbjtcclxuICBlbmRUaW1lTWluRXJyOiBib29sZWFuO1xyXG4gIHNlbGVjdGVkRnJvbVRpbWU6IGFueVtdO1xyXG4gIHNlbGVjdGVkVG9UaW1lOiBhbnlbXTtcclxuICBjbG9uZWRTZWxlY3RlZEZyb21UaW1lOiBhbnk7XHJcbiAgY2xvbmVkU2VsZWN0ZWRUb1RpbWU6IGFueTtcclxuICBkaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuOiBib29sZWFuO1xyXG4gIHRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICB0b3RhbFJvd0NvbHVtbnM6IHN0cmluZ1tdID0gbnVsbDtcclxuICBzaG93TXVsdGlUaW1lQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgc2hvd1plcm9UaW1lQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgc2hvd0VudGVyVGltZUNoZWNrYm94OiBib29sZWFuO1xyXG4gIG11bHRpVGltZUNoZWNrYm94Q2hlY2tlZDogYm9vbGVhbjtcclxuICB6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZDogYm9vbGVhbjtcclxuICBlbnRlclRpbWVDaGVja2JveENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgYmluZFZhbHVlRnVuY0NhbGxlZDogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcblxyXG4gICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8odGhpcy5maWx0ZXJUYWJPYmplY3RzWzBdKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhhY3RpdmVUYWI6IHJhZGlvQnV0dG9uTW9kZWwpIHtcclxuICAgIGxldCBoZWFkZXIgPSBhY3RpdmVUYWIua2V5O1xyXG4gICAgdGhpcy5zZWxlY3RlZExhYmVsID0gYWN0aXZlVGFiLmxhYmVsO1xyXG4gICAgdGhpcy5zZWFyY2hJdGVtID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNob3dTb3J0Q29tcG9uZW50ID0gYWN0aXZlVGFiLmlzU29ydFJlcXVpcmVkO1xyXG4gICAgdGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ID0gYWN0aXZlVGFiLmlzRmlsdGVyUmVxdWlyZWQ7XHJcbiAgICB0aGlzLnRlbXBTb3J0T3JkZXIgPSBudWxsO1xyXG4gICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9IGhlYWRlcjtcclxuICAgIHRoaXMuZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShoZWFkZXIpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCkge1xyXG4gICAgbGV0IHNlbGVjdGVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgbGV0IGlzU29ydFByZXNlbnQgPSAodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zaXplID4gMCAmJiBjdXJyZW50Q29sdW1uU29ydEZpbHRlciAhPSBTb3J0VHlwZUVudW0uREVGQVVMVCk7XHJcblxyXG4gICAgdGhpcy5kaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG4gPSBzZWxlY3RlZEZpbHRlclNldC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSB8fCBpc1NvcnRQcmVzZW50ID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSAmJlxyXG4gICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID8gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgOiBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuICAgIHJldHVybiBjdXJyZW50Q29sdW1uU29ydEZpbHRlcjtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZpbHRlclRvb2x0aXBEYXRhKGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zaG93RmlsdGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0VGltZUZpbHRlckRhdGEoaGVhZGVyKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRpbWVGaWx0ZXJEYXRhKGhlYWRlcjogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zdGFydFRpbWVIb3VyRXJyID0gdGhpcy5zdGFydFRpbWVNaW5FcnIgPSB0aGlzLmVuZFRpbWVIb3VyRXJyID0gdGhpcy5lbmRUaW1lTWluRXJyID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGhlYWRlcik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRnJvbVRpbWUgIT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VsZWN0ZWRUb1RpbWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnModGhpcy5zZWxlY3RlZEZyb21UaW1lLCB0cnVlKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnModGhpcy5zZWxlY3RlZFRvVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLmNsb25lZFNlbGVjdGVkRnJvbVRpbWUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgdGhpcy5jbG9uZWRTZWxlY3RlZFRvVGltZSA9IGNsb25lRGVlcCh0aGlzLnNlbGVjdGVkVG9UaW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5ndEdlbmVyYWxDb25maWcgJiYgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSBcIlJBVElOR1wiKXtcclxuICAgICAgdGhpcy5zZXRUaW1lRmlsdGVyRGF0YUZvclJhdGluZ1BhZ2VDb21wb25lbnQoaGVhZGVyKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnNldFRpbWVGaWx0ZXJEYXRhRm9yQ29tcG9uZW50c090aGVyVGhhblJhdGluZ3NQYWdlKGhlYWRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbHRlcihcclxuICAgICAgKG4pID0+ICFbXCJcIiwgXCItXCIsIG51bGwsIFwiMFwiLCBcIjxtdWx0aT5cIl0uaW5jbHVkZXMobltrZXldKSk7XHJcblxyXG4gICAgbGV0IHRpbWVBcnIgPSBtYXAoZGF0YSwga2V5KTtcclxuICAgIHRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ3RHZW5lcmFsQ29uZmlnICYmIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJSQVRJTkdcIikge1xyXG4gICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvclJhdGluZ1BhZ2VUaW1lRmlsdGVyKGtleSk7XHJcbiAgfWVsc2Uge1xyXG4gICAgICBsZXQgaW5jbHVkZU11bHRpID1cclxuICAgICAgICB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gPT0gXCI8bXVsdGk+XCIpICE9XHJcbiAgICAgICAgLTE7XHJcbiAgICAgIGxldCBpbmNsdWRlWmVybyA9XHJcbiAgICAgICAgdGhpcy5jbG9uZWRUYWJsZURhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldID09IFwiMFwiKSAhPSAtMTtcclxuICAgICAgbGV0IGluY2x1ZGVUaW1lUmFuZ2UgPVxyXG4gICAgICAgIHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgIChvYmopID0+IG9ialtrZXldICE9IFwiMFwiICYmIG9ialtrZXldICE9IFwiPG11bHRpPlwiXHJcbiAgICAgICAgKSAhPSAtMTtcclxuXHJcbiAgICAgIGxldCBmcm9tVGltZSA9IHRpbWVBcnJbMF0uc3BsaXQoXCI6XCIpO1xyXG4gICAgICBsZXQgdG9UaW1lID0gdGltZUFyclt0aW1lQXJyLmxlbmd0aCAtIDFdLnNwbGl0KFwiOlwiKTtcclxuICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICBmcm9tVGltZTogZnJvbVRpbWVbMF0gKyBcIjpcIiArIGZyb21UaW1lWzFdICsgXCI6MDBcIixcclxuICAgICAgICB0b1RpbWU6IHRvVGltZVswXSArIFwiOlwiICsgdG9UaW1lWzFdICsgXCI6MDBcIixcclxuICAgICAgICBpbmNsdWRlTXVsdGk6IGluY2x1ZGVNdWx0aSxcclxuICAgICAgICBpbmNsdWRlWmVybzogaW5jbHVkZVplcm8sXHJcbiAgICAgICAgaW5jbHVkZVRpbWVSYW5nZTogaW5jbHVkZVRpbWVSYW5nZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgb2JqKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEluaXRpYWxWYWx1ZU1hcEZvclJhdGluZ1BhZ2VUaW1lRmlsdGVyKGtleTogc3RyaW5nKXtcclxuICAgIGxldCBpbmNsdWRlTXVsdGkgPVxyXG4gICAgICAgICAgICAgIHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikgIT1cclxuICAgICAgICAgICAgICAtMTtcclxuICAgICAgICAgIGxldCBpbmNsdWRlWmVybyA9XHJcbiAgICAgICAgICAgICAgdGhpcy5jbG9uZWRUYWJsZURhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldWzBdID09IFwiMFwiKSAhPSAtMTtcclxuICAgICAgICAgIGxldCBpbmNsdWRlVGltZVJhbmdlID1cclxuICAgICAgICAgICAgICB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmopID0+IG9ialtrZXldWzBdICE9IFwiMFwiICYmIG9ialtrZXldWzBdICE9IFwiPG11bHRpPlwiXHJcbiAgICAgICAgICAgICAgKSAhPSAtMTtcclxuICBcclxuICAgICAgICAgIGxldCBzdGFydFRpbWVBcnIgPSBtYXAodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwic3RhcnRUaW1lXCIpO1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWVBcnIgPSBtYXAodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiZW5kVGltZVwiKTtcclxuICBcclxuICAgICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgICBlbmRUaW1lQXJyLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgIGZyb21UaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgICAgdG9UaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICAgIGluY2x1ZGVNdWx0aTogaW5jbHVkZU11bHRpLFxyXG4gICAgICAgICAgICAgIGluY2x1ZGVaZXJvOiBpbmNsdWRlWmVybyxcclxuICAgICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlOiBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7IFxyXG4gICAgICB9XHJcblxyXG4gIC8vTmVlZCB0byBjaGFuZ2UgdGhpcyBtZXRob2RcclxuICBzZXRUaW1lRmlsdGVyRGF0YUZvckNvbXBvbmVudHNPdGhlclRoYW5SYXRpbmdzUGFnZShoZWFkZXI6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0VudGVyVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgbGV0IG9wdGlvbnNEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgbGV0IHNlbGVjdGVkT2JqO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICBzZWxlY3RlZE9iaiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnNEYXRhLmZpbmRJbmRleChvYmogPT4gb2JqW2hlYWRlcl0gPT0gXCIwXCIpICE9IC0xKSB7XHJcbiAgICAgIHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRPYmouaW5jbHVkZVplcm9UaW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAob3B0aW9uc0RhdGEuZmluZEluZGV4KG9iaiA9PiBvYmpbaGVhZGVyXSA9PSBcIjxtdWx0aT5cIikgIT0gLTEpIHtcclxuICAgICAgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVNdWx0aTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggfHwgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3gpIHtcclxuICAgICAgdGhpcy5zaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zRGF0YS5maW5kSW5kZXgob2JqID0+IG9ialtoZWFkZXJdICE9IFwiPG11bHRpPlwiICYmIG9ialtoZWFkZXJdICE9IFwiMFwiKSAhPSAtMSkge1xyXG4gICAgICB0aGlzLmVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUaW1lRmlsdGVyRGF0YUZvclJhdGluZ1BhZ2VDb21wb25lbnQoaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2hvd011bHRpVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3daZXJvVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFbnRlclRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgdGhpcy5tdWx0aVRpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuemVyb1RpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG9wdGlvbnNEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgbGV0IHNlbGVjdGVkT2JqO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICBzZWxlY3RlZE9iaiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnNEYXRhLmZpbmRJbmRleChvYmogPT4gb2JqW2hlYWRlcl1bMF0gPT0gXCIwXCIpICE9IC0xKSB7XHJcbiAgICAgIHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRPYmouaW5jbHVkZVplcm9UaW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAob3B0aW9uc0RhdGEuZmluZEluZGV4KG9iaiA9PiBvYmpbaGVhZGVyXVswXSA9PSBcIjxtdWx0aT5cIikgIT0gLTEpIHtcclxuICAgICAgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVNdWx0aTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggfHwgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3gpIHtcclxuICAgICAgdGhpcy5zaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zRGF0YS5maW5kSW5kZXgob2JqID0+IG9ialtoZWFkZXJdWzBdICE9IFwiPG11bHRpPlwiICYmIG9ialtoZWFkZXJdWzBdICE9IFwiMFwiKSAhPSAtMSkge1xyXG4gICAgICB0aGlzLmVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPclVuc2VsZWN0TXVsdGlUaW1lQ2hlY2tib3goKSB7XHJcbiAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9ICF0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZDtcclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3JVbnNlbGVjdFplcm9UaW1lQ2hlY2tib3goKSB7XHJcbiAgICB0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gIXRoaXMuemVyb1RpbWVDaGVja2JveENoZWNrZWQ7XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RFbnRlclRpbWVDaGVja2JveCgpIHtcclxuICAgIHRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gIXRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkO1xyXG4gICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmVGltZVRvb2x0aXBJc0ZpbHRlcmVkKCkge1xyXG4gICAgbGV0IGN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXI6IHsgZnJvbVRpbWU6IHN0cmluZywgdG9UaW1lOiBzdHJpbmcsIGluY2x1ZGVNdWx0aTogYm9vbGVhbiwgaW5jbHVkZVplcm86IGJvb2xlYW4sIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW4gfSA9IHtcclxuICAgICAgZnJvbVRpbWU6IG51bGwsXHJcbiAgICAgIHRvVGltZTogbnVsbCxcclxuICAgICAgaW5jbHVkZU11bHRpOiBmYWxzZSxcclxuICAgICAgaW5jbHVkZVplcm86IGZhbHNlLFxyXG4gICAgICBpbmNsdWRlVGltZVJhbmdlOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcm9tVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzBdICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMV0gKyBcIiBcIiArIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVsyXSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGxldCBmcm9tVGltZTI0SHJGb3JtYXQgPSBmcm9tVGltZTI0SHJGb3JtYXRBcnJbMF0gKyBcIjpcIiArIGZyb21UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjAwXCI7XHJcblxyXG4gICAgbGV0IHRvVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsyXSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0ID0gdG9UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgdG9UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjAwXCI7XHJcblxyXG4gICAgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlciA9IHtcclxuICAgICAgZnJvbVRpbWU6IGZyb21UaW1lMjRIckZvcm1hdCwgdG9UaW1lOiB0b1RpbWUyNEhyRm9ybWF0LCBpbmNsdWRlTXVsdGk6IHRoaXMubXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkLFxyXG4gICAgICBpbmNsdWRlWmVybzogdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCwgaW5jbHVkZVRpbWVSYW5nZTogdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWRcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSAhaXNFcXVhbChwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciwgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcik7XHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgIGxldCBpc0ZpbHRlckNoYW5nZWQgPSB0aGlzLmNoZWNrSWZUaW1lVG9vbHRpcElzRmlsdGVyZWQoKTtcclxuICAgICAgbGV0IGlzU29ydENoYW5nZWQgPSB0aGlzLmNoZWNrSWZTb3J0aW5nQ2hhbmdlZCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdG4gPSAhdGhpcy52YWxpZGF0ZVRpbWVGaWx0ZXJJbnB1dCgpIHx8ICghaXNTb3J0Q2hhbmdlZCAmJiAhaXNGaWx0ZXJDaGFuZ2VkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdG4gPSAhdGhpcy52YWxpZGF0ZVRpbWVGaWx0ZXJJbnB1dCgpIHx8ICF0aGlzLmNoZWNrSWZUaW1lVG9vbHRpcElzRmlsdGVyZWQoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuID0gIXRoaXMuY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCkge1xyXG4gICAgbGV0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5nZXRDb2x1bW5Tb3J0U3RhdGVGb3JTZWxlY3RlZFJhZGlvKCk7XHJcblxyXG4gICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdGhpcy50ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGhpcy50ZW1wU29ydE9yZGVyICE9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTb3J0Q2hhbmdlZDtcclxuICB9XHJcblxyXG5cclxuICB2YWxpZGF0ZVRpbWVGaWx0ZXJJbnB1dCgpIHtcclxuICAgIGlmICh0aGlzLnN0YXJ0VGltZUhvdXJFcnIgfHwgdGhpcy5zdGFydFRpbWVNaW5FcnIgfHwgdGhpcy5lbmRUaW1lSG91ckVyciB8fCB0aGlzLmVuZFRpbWVNaW5FcnIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgodGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggJiYgIXRoaXMubXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkKSAmJlxyXG4gICAgICAodGhpcy5zaG93WmVyb1RpbWVDaGVja2JveCAmJiAhdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCkgJiZcclxuICAgICAgKHRoaXMuc2hvd0VudGVyVGltZUNoZWNrYm94ICYmICF0aGlzLmVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0aW1lRm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG5cclxuICAgIGxldCBzdGFydFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzFdICsgXCIgXCIgKyB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgc3RhcnRUaW1lMjRIckZvcm1hdCA9IHN0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMF0gKyBcIjpcIiArIHN0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG4gICAgbGV0IGVuZFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMF0gKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMV0gKyBcIiBcIiArIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgZW5kVGltZTI0SHJGb3JtYXQgPSBlbmRUaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgZW5kVGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG5cclxuICAgIHJldHVybiAhKGRheWpzKHN0YXJ0VGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpLmlzQWZ0ZXIoZGF5anMoZW5kVGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpKSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGFwcGx5VGltZUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmFwcGx5VGltZUZpbHRlck9uRGF0YSgpO1xyXG4gICAgdGhpcy5hcHBseVNvcnRpbmdPbkZpbHRlcmVkRGF0YSgpO1xyXG4gICAgdGhpcy5lbWl0RGF0YSgpO1xyXG4gICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBlbWl0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCAmJiB0aGlzLmlzU29ydENoYW5nZWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc29ydGluZ0FwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50ZW1wU29ydE9yZGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUluZGV4KCkge1xyXG4gICAgdGhpcy5zdGFydCA9IHRoaXMuZW5kO1xyXG4gICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICB9XHJcblxyXG4gIHJlc2V0SW5kZXgoKSB7XHJcbiAgICB0aGlzLnN0YXJ0ID0gMDtcclxuICAgIHRoaXMuZW5kID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsUm93c0ZvclRhYmxlKCkge1xyXG4gICAgdGhpcy5yZXNldEluZGV4KCk7XHJcbiAgICB0aGlzLnVwZGF0ZUluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVNvcnRpbmcoa2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnRlbXBTb3J0T3JkZXIgPT0gXCJBU0NcIikge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UodHJ1ZSwgdGhpcy50YWJsZURhdGEsIGtleSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRlbXBTb3J0T3JkZXIgPT0gXCJERVNDXCIpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKGZhbHNlLCB0aGlzLnRhYmxlRGF0YSwga2V5KSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGVtcFNvcnRPcmRlciA9PSBcIkRFRkFVTFRcIikge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFTb3J0U2VydmljZS5ub1NvcnRpbmdBcHBsaWVkRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTdGFydFRpbWVIb3VyKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLnN0YXJ0VGltZUhvdXJFcnIpIHtcclxuICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgIHRoaXMuaW5jcmVtZW50SG91cih0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVjcmVtZW50SG91cih0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lSG91ckNoYW5nZSh0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMF0udG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VFbmRUaW1lSG91cihpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICghdGhpcy5lbmRUaW1lSG91ckVycikge1xyXG4gICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRIb3VyKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVjcmVtZW50SG91cih0aGlzLnNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVuZFRpbWVIb3VyQ2hhbmdlKHRoaXMuc2VsZWN0ZWRUb1RpbWVbMF0udG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VFbmRUaW1lTWludXRlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLmVuZFRpbWVNaW5FcnIpIHtcclxuICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgIHRoaXMuaW5jcmVtZW50TWludXRlKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVjcmVtZW50TWludXRlKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW5kVGltZU1pbkNoYW5nZSh0aGlzLnNlbGVjdGVkVG9UaW1lWzFdLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlU3RhcnRUaW1lTWludXRlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLnN0YXJ0VGltZU1pbkVycikge1xyXG4gICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRNaW51dGUodGhpcy5zZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRlY3JlbWVudE1pbnV0ZSh0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lTWluQ2hhbmdlKHRoaXMuc2VsZWN0ZWRGcm9tVGltZVsxXS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0VGltZUhvdXJDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwubGVuZ3RoID09IDAgfHwgISsodmFsKSB8fCAxID4gcGFyc2VJbnQodmFsKSB8fCBwYXJzZUludCh2YWwpID4gMTIpIHtcclxuICAgICAgdGhpcy5zdGFydFRpbWVIb3VyRXJyID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZUhvdXJFcnIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRUaW1lTWluQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsLmxlbmd0aCAhPSAyIHx8ICghKyh2YWwpICYmIHZhbCAhPSBcIjAwXCIpIHx8IDAgPiBwYXJzZUludCh2YWwpIHx8IHBhcnNlSW50KHZhbCkgPiA1OSkge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZU1pbkVyciA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZU1pbkVyciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBlbmRUaW1lSG91ckNoYW5nZSh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbC5sZW5ndGggPT0gMCB8fCAhKyh2YWwpIHx8IDEgPiBwYXJzZUludCh2YWwpIHx8IHBhcnNlSW50KHZhbCkgPiAxMikge1xyXG4gICAgICB0aGlzLmVuZFRpbWVIb3VyRXJyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kVGltZUhvdXJFcnIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgZW5kVGltZU1pbkNoYW5nZSh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbC5sZW5ndGggIT0gMiB8fCAoISsodmFsKSAmJiB2YWwgIT0gXCIwMFwiKSB8fCAwID4gcGFyc2VJbnQodmFsKSB8fCBwYXJzZUludCh2YWwpID4gNTkpIHtcclxuICAgICAgdGhpcy5lbmRUaW1lTWluRXJyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kVGltZU1pbkVyciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaW5jcmVtZW50SG91cihhcnI6IGFueVtdKSB7XHJcbiAgICBpZiAoYXJyWzBdID09IFwiXCIpIHtcclxuICAgICAgYXJyWzBdID0gMTtcclxuICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdKSA8IDEyKSB7XHJcbiAgICAgIGFyclswXSA9IHBhcnNlSW50KGFyclswXSkgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJyWzBdID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlY3JlbWVudEhvdXIoYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyclswXSA9PSBcIlwiKSB7XHJcbiAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZUludChhcnJbMF0pID4gMSkge1xyXG4gICAgICBhcnJbMF0gPSBwYXJzZUludChhcnJbMF0pIC0gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5jcmVtZW50TWludXRlKGFycjogYW55W10pIHtcclxuICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgIGxldCBtaW4gPSBwYXJzZUludChhcnJbMV0pXHJcbiAgICBpZiAobWluIDw9IDE0KSB7XHJcbiAgICAgIGFyclsxXSA9IFwiMTVcIjtcclxuICAgIH0gZWxzZSBpZiAobWluID49IDE1ICYmIG1pbiA8PSAyOSkge1xyXG4gICAgICBhcnJbMV0gPSBcIjMwXCI7XHJcbiAgICB9IGVsc2UgaWYgKG1pbiA+PSAzMCAmJiBtaW4gPD0gNDQpIHtcclxuICAgICAgYXJyWzFdID0gXCI0NVwiO1xyXG4gICAgfSBlbHNlIGlmIChtaW4gPj0gNDUpIHtcclxuICAgICAgYXJyWzFdID0gXCIwMFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVjcmVtZW50TWludXRlKGFycjogYW55KSB7XHJcbiAgICBsZXQgbWluID0gcGFyc2VJbnQoYXJyWzFdKTtcclxuICAgIGlmIChtaW4gPiAwICYmIG1pbiA8PSAxNSkge1xyXG4gICAgICBhcnJbMV0gPSBcIjAwXCI7XHJcbiAgICB9IGVsc2UgaWYgKG1pbiA+PSAxNiAmJiBtaW4gPD0gMzApIHtcclxuICAgICAgYXJyWzFdID0gXCIxNVwiO1xyXG4gICAgfSBlbHNlIGlmIChtaW4gPj0gMzEgJiYgbWluIDw9IDQ1KSB7XHJcbiAgICAgIGFyclsxXSA9IFwiMzBcIjtcclxuICAgIH0gZWxzZSBpZiAobWluID4gNDUgfHwgbWluID09IDApIHtcclxuICAgICAgYXJyWzFdID0gXCI0NVwiO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNvcnRNYXAoKSB7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuc2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbywgdGhpcy50ZW1wU29ydE9yZGVyKTtcclxuICAgIC8vIHRoaXMuYXBwbHlTb3J0aW5nKHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmU29ydGluZ0lzQXBwbGllZCgpIHtcclxuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZW50cmllcygpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBcIkFTQ1wiKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIHRoaXMudGFibGVEYXRhLCBrZXkpKTtcclxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIkRFU0NcIikge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gY2xvbmVEZWVwKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgdGhpcy50YWJsZURhdGEsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVNvcnRpbmdPbkZpbHRlcmVkRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgIGlmICh0aGlzLmlzU29ydENoYW5nZWQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRNYXAoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlUaW1lRmlsdGVyT25EYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICBsZXQgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcjogeyBmcm9tVGltZTogc3RyaW5nLCB0b1RpbWU6IHN0cmluZywgaW5jbHVkZU11bHRpOiBib29sZWFuLCBpbmNsdWRlWmVybzogYm9vbGVhbiwgaW5jbHVkZVRpbWVSYW5nZTogYm9vbGVhbiB9ID0ge1xyXG4gICAgICAgIGZyb21UaW1lOiBudWxsLFxyXG4gICAgICAgIHRvVGltZTogbnVsbCxcclxuICAgICAgICBpbmNsdWRlTXVsdGk6IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVaZXJvOiBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlVGltZVJhbmdlOiBmYWxzZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCBmcm9tVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMF0gKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzJdLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgbGV0IGZyb21UaW1lMjRIckZvcm1hdCA9IGZyb21UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgZnJvbVRpbWUyNEhyRm9ybWF0QXJyWzFdICsgXCI6MDBcIjtcclxuXHJcbiAgICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsyXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0ID0gdG9UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgdG9UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjU5XCI7XHJcblxyXG4gICAgICBjdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyID0ge1xyXG4gICAgICAgIGZyb21UaW1lOiBmcm9tVGltZTI0SHJGb3JtYXQsIHRvVGltZTogdG9UaW1lMjRIckZvcm1hdCwgaW5jbHVkZU11bHRpOiB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCxcclxuICAgICAgICBpbmNsdWRlWmVybzogdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCwgaW5jbHVkZVRpbWVSYW5nZTogdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCBpc0ZpbHRlcmVkID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcik7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIGN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXIpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcblxyXG4gICAgICBpZiAoIWlzRmlsdGVyZWQpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5ub1NvcnRpbmdBcHBsaWVkRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRhYmxlRGF0YSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VUaW1lRmlsdGVyKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZyb21UaW1lID0gY2xvbmVEZWVwKHRoaXMuY2xvbmVkU2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gY2xvbmVEZWVwKHRoaXMuY2xvbmVkU2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJDb2x1bW5GaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKCk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmZpbHRlckRhdGEodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiXCIpKTtcclxuICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gdGhpcy50YWJsZURhdGE7XHJcbiAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS51cGRhdGVTdGF0ZU9mVGhlQ3VycmVudEZpbHRlclRhYih0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RvcmVTb3J0VHlwZUluVGVtcFZhcmlhYmxlKGV2ZW50OiBTb3J0VHlwZSkge1xyXG4gICAgdGhpcy50ZW1wU29ydE9yZGVyID0gZXZlbnQ7XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyYWRpby1jb250YWluZXJcIiAqbmdJZj1cImZpbHRlclRhYk9iamVjdHM/Lmxlbmd0aCA+IDFcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmlsdGVyVGFiT2JqZWN0c1wiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiZmlsdGVyLXRhYlwiIFt0aXRsZV09XCJkYXRhLmxhYmVsXCIgKGNsaWNrKT1cInBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhkYXRhKVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9PSBkYXRhLmtleX1cIiAqbmdJZj1cImZpbHRlclRhYk9iamVjdHMubGVuZ3RoID4gMFwiPnt7XHJcbiAgICAgICAgICAgIGRhdGEubGFiZWwgfX08L3A+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48YW5uYS1jb3JlLXNvcnQtbGliICpuZ0lmPVwic2hvd1NvcnRDb21wb25lbnRcIiBbbmdDbGFzc109XCJ7J25vLWJvdHRvbS1ib3JkZXInOiAhc2hvd0ZpbHRlckNvbXBvbmVudH1cIlxyXG4gICAgKHNvcnRPcHRpb25DbGlja2VkKT1cInN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZSgkZXZlbnQpXCJcclxuICAgIFtzb3J0T2JqZWN0S2V5XT1cImFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW9cIj48L2FubmEtY29yZS1zb3J0LWxpYj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RmlsdGVyQ29tcG9uZW50XCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY29sdW1uLWNsZWFyLWFsbFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG5cIiAoY2xpY2spPVwiY2xlYXJDb2x1bW5GaWx0ZXIoKVwiPkNsZWFyXHJcbiAgICAgICAgZmlsdGVyPC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1maWx0ZXItY2hlY2tib3hlc1wiXHJcbiAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWc/LmNvbXBvbmVudCA9PSAnU1BPVERFVEFJTFMnIHx8IGd0R2VuZXJhbENvbmZpZz8uY29tcG9uZW50ID09ICdFWENMVURFSU5WRU5UT1JZUE9QVVAnIHx8IGd0R2VuZXJhbENvbmZpZz8uY29tcG9uZW50ID09ICdSQVRJTkcnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cInBhZGRpbmc6IDAuNXJlbSAwIDAuNXJlbSAwLjVyZW1cIiAqbmdJZj1cInNob3dNdWx0aVRpbWVDaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPclVuc2VsZWN0TXVsdGlUaW1lQ2hlY2tib3goKVwiPlxyXG4gICAgICAgICAgICAgICAgY2hlY2tfYm94XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdE11bHRpVGltZUNoZWNrYm94KClcIj5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMnB4XCI+SW5jbHVkZSBNdWx0aTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMC41cmVtIDAgMC41cmVtIDAuNXJlbVwiICpuZ0lmPVwic2hvd1plcm9UaW1lQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPclVuc2VsZWN0WmVyb1RpbWVDaGVja2JveCgpXCI+XHJcbiAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9yVW5zZWxlY3RaZXJvVGltZUNoZWNrYm94KClcIj5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMnB4XCI+SW5jbHVkZSBaZXJvPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtXCIgKm5nSWY9XCJzaG93RW50ZXJUaW1lQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbnRlclRpbWVDaGVja2JveENoZWNrZWRcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdEVudGVyVGltZUNoZWNrYm94KClcIj5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWVudGVyVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9yVW5zZWxlY3RFbnRlclRpbWVDaGVja2JveCgpXCI+XHJcbiAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJweFwiPkVudGVyIHRpbWUgcmFuZ2U8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWxhYmVsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxsYWJlbD5Gcm9tPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIG51bWJlcklucHV0XCIgW25nQ2xhc3NdPVwieydlcnJvci1ib3JkZXInOiBzdGFydFRpbWVIb3VyRXJyfVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGcm9tVGltZVswXVwiIHR5cGU9XCJ0ZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwic3RhcnRUaW1lSG91ckNoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VTdGFydFRpbWVIb3VyKHRydWUpXCI+PC9pPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktbWVudS1kb3duIGRvd253YXJkXCIgKGNsaWNrKT1cImNoYW5nZVN0YXJ0VGltZUhvdXIoZmFsc2UpXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+Ojwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbnVtYmVySW5wdXRcIiBbbmdDbGFzc109XCJ7J2Vycm9yLWJvcmRlcic6IHN0YXJ0VGltZU1pbkVycn1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRnJvbVRpbWVbMV1cIiB0eXBlPVwidGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cInN0YXJ0VGltZU1pbkNoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VTdGFydFRpbWVNaW51dGUodHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd24gZG93bndhcmRcIiAoY2xpY2spPVwiY2hhbmdlU3RhcnRUaW1lTWludXRlKGZhbHNlKVwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZyb21UaW1lWzJdXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJBTVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkFNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIlBNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+UE08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtbGFiZWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGxhYmVsPlRvPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIG51bWJlcklucHV0XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRvVGltZVswXVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZXJyb3ItYm9yZGVyJzogZW5kVGltZUhvdXJFcnJ9XCIgKG5nTW9kZWxDaGFuZ2UpPVwiZW5kVGltZUhvdXJDaGFuZ2UoJGV2ZW50KVwiIHR5cGU9XCJ0ZXh0XCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VFbmRUaW1lSG91cih0cnVlKVwiPjwvaT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93biBkb3dud2FyZFwiIChjbGljayk9XCJjaGFuZ2VFbmRUaW1lSG91cihmYWxzZSlcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj46PC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBudW1iZXJJbnB1dFwiIFtuZ0NsYXNzXT1cInsnZXJyb3ItYm9yZGVyJzogZW5kVGltZU1pbkVycn1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVG9UaW1lWzFdXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZW5kVGltZU1pbkNoYW5nZSgkZXZlbnQpXCIgdHlwZT1cInRleHRcIiAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLW1lbnUtdXAgdXB3YXJkXCIgKGNsaWNrKT1cImNoYW5nZUVuZFRpbWVNaW51dGUodHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd24gZG93bndhcmRcIiAoY2xpY2spPVwiY2hhbmdlRW5kVGltZU1pbnV0ZShmYWxzZSlcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUb1RpbWVbMl1cIiAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIkFNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QU08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiUE1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QTTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VUaW1lRmlsdGVyKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuIH1cIiAoY2xpY2spPVwiYXBwbHlUaW1lRmlsdGVycygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0blwiPlxyXG4gICAgICAgIEFwcGx5XHJcbiAgICA8L2J1dHRvbj5cclxuPC9kaXY+Il19
550
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIvYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUVBQXlFLENBQUM7Ozs7Ozs7OztBQVFwSCxNQUFNLE9BQU8sNkJBQTZCO0lBNEN4QyxZQUNVLGVBQWdDLEVBQ2pDLHlCQUFvRCxFQUVwRCxpQkFBb0M7UUFIbkMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLDhCQUF5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RyxDQUFDO0lBRUQsMkJBQTJCLENBQUMsS0FBZTtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzswSEFub0JVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLG9YQ2pCMUMsbWlOQW9ITTsyRkRuR08sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG1DQUFtQzs4S0FLcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIG1hcCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuXHJcbmltcG9ydCB7IHJhZGlvQnV0dG9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsJztcclxuaW1wb3J0IHsgU29ydFR5cGUsIFNvcnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElHdEdlbmVyYWxDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1ub24tZWRpdGFibGUtZ3QtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYW5uYS1jb2x1bW4tdGltZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDb2x1bW5UaW1lRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwO1xyXG4gIEBJbnB1dCgpIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGd0R2VuZXJhbENvbmZpZzogSUd0R2VuZXJhbENvbmZpZztcclxuICBcclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlckFwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzb3J0aW5nQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlVG9vbHRpcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgaXNGaWx0ZXJDaGFuZ2VkOiBib29sZWFuO1xyXG4gIHRlbXBTb3J0T3JkZXI6IFNvcnRUeXBlID0gbnVsbDtcclxuICBpc1NvcnRDaGFuZ2VkOiBib29sZWFuO1xyXG4gIGRpc2FibGVTZWxlY3RBbGw6IGJvb2xlYW47XHJcbiAgZGlzYWJsZUNsZWFyQWxsOiBib29sZWFuO1xyXG4gIHNlYXJjaEl0ZW06IHN0cmluZztcclxuICBzaG93U29ydENvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkTGFiZWw6IHN0cmluZztcclxuICBzaG93RmlsdGVyQ29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3RhcnQ6IG51bWJlciA9IDA7XHJcbiAgZW5kOiBudW1iZXIgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICBkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzdGFydFRpbWVIb3VyRXJyOiBib29sZWFuO1xyXG4gIHN0YXJ0VGltZU1pbkVycjogYm9vbGVhbjtcclxuICBlbmRUaW1lSG91ckVycjogYm9vbGVhbjtcclxuICBlbmRUaW1lTWluRXJyOiBib29sZWFuO1xyXG4gIHNlbGVjdGVkRnJvbVRpbWU6IGFueVtdO1xyXG4gIHNlbGVjdGVkVG9UaW1lOiBhbnlbXTtcclxuICBjbG9uZWRTZWxlY3RlZEZyb21UaW1lOiBhbnk7XHJcbiAgY2xvbmVkU2VsZWN0ZWRUb1RpbWU6IGFueTtcclxuICBkaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuOiBib29sZWFuO1xyXG4gIHRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICB0b3RhbFJvd0NvbHVtbnM6IHN0cmluZ1tdID0gbnVsbDtcclxuICBzaG93TXVsdGlUaW1lQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgc2hvd1plcm9UaW1lQ2hlY2tib3g6IGJvb2xlYW47XHJcbiAgc2hvd0VudGVyVGltZUNoZWNrYm94OiBib29sZWFuO1xyXG4gIG11bHRpVGltZUNoZWNrYm94Q2hlY2tlZDogYm9vbGVhbjtcclxuICB6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZDogYm9vbGVhbjtcclxuICBlbnRlclRpbWVDaGVja2JveENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgYmluZFZhbHVlRnVuY0NhbGxlZDogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcblxyXG4gICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8odGhpcy5maWx0ZXJUYWJPYmplY3RzWzBdKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhhY3RpdmVUYWI6IHJhZGlvQnV0dG9uTW9kZWwpIHtcclxuICAgIGxldCBoZWFkZXIgPSBhY3RpdmVUYWIua2V5O1xyXG4gICAgdGhpcy5zZWxlY3RlZExhYmVsID0gYWN0aXZlVGFiLmxhYmVsO1xyXG4gICAgdGhpcy5zZWFyY2hJdGVtID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNob3dTb3J0Q29tcG9uZW50ID0gYWN0aXZlVGFiLmlzU29ydFJlcXVpcmVkO1xyXG4gICAgdGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ID0gYWN0aXZlVGFiLmlzRmlsdGVyUmVxdWlyZWQ7XHJcbiAgICB0aGlzLnRlbXBTb3J0T3JkZXIgPSBudWxsO1xyXG4gICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9IGhlYWRlcjtcclxuICAgIHRoaXMuZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShoZWFkZXIpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCkge1xyXG4gICAgbGV0IHNlbGVjdGVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgbGV0IGlzU29ydFByZXNlbnQgPSAodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zaXplID4gMCAmJiBjdXJyZW50Q29sdW1uU29ydEZpbHRlciAhPSBTb3J0VHlwZUVudW0uREVGQVVMVCk7XHJcblxyXG4gICAgdGhpcy5kaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG4gPSBzZWxlY3RlZEZpbHRlclNldC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSB8fCBpc1NvcnRQcmVzZW50ID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlICYmIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSAmJlxyXG4gICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID8gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgOiBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuICAgIHJldHVybiBjdXJyZW50Q29sdW1uU29ydEZpbHRlcjtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZpbHRlclRvb2x0aXBEYXRhKGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zaG93RmlsdGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0VGltZUZpbHRlckRhdGEoaGVhZGVyKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRpbWVGaWx0ZXJEYXRhKGhlYWRlcjogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zdGFydFRpbWVIb3VyRXJyID0gdGhpcy5zdGFydFRpbWVNaW5FcnIgPSB0aGlzLmVuZFRpbWVIb3VyRXJyID0gdGhpcy5lbmRUaW1lTWluRXJyID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGhlYWRlcik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRnJvbVRpbWUgIT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VsZWN0ZWRUb1RpbWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnModGhpcy5zZWxlY3RlZEZyb21UaW1lLCB0cnVlKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnModGhpcy5zZWxlY3RlZFRvVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLmNsb25lZFNlbGVjdGVkRnJvbVRpbWUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgdGhpcy5jbG9uZWRTZWxlY3RlZFRvVGltZSA9IGNsb25lRGVlcCh0aGlzLnNlbGVjdGVkVG9UaW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5ndEdlbmVyYWxDb25maWcgJiYgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSBcIlJBVElOR1wiKXtcclxuICAgICAgdGhpcy5zZXRUaW1lRmlsdGVyRGF0YUZvclJhdGluZ1BhZ2VDb21wb25lbnQoaGVhZGVyKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnNldFRpbWVGaWx0ZXJEYXRhRm9yQ29tcG9uZW50c090aGVyVGhhblJhdGluZ3NQYWdlKGhlYWRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbHRlcihcclxuICAgICAgKG4pID0+ICFbXCJcIiwgXCItXCIsIG51bGwsIFwiMFwiLCBcIjxtdWx0aT5cIl0uaW5jbHVkZXMobltrZXldKSk7XHJcblxyXG4gICAgbGV0IHRpbWVBcnIgPSBtYXAoZGF0YSwga2V5KTtcclxuICAgIHRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ3RHZW5lcmFsQ29uZmlnICYmIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJSQVRJTkdcIikge1xyXG4gICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvclJhdGluZ1BhZ2VUaW1lRmlsdGVyKGtleSk7XHJcbiAgfWVsc2Uge1xyXG4gICAgICBsZXQgaW5jbHVkZU11bHRpID1cclxuICAgICAgICB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gPT0gXCI8bXVsdGk+XCIpICE9XHJcbiAgICAgICAgLTE7XHJcbiAgICAgIGxldCBpbmNsdWRlWmVybyA9XHJcbiAgICAgICAgdGhpcy5jbG9uZWRUYWJsZURhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldID09IFwiMFwiKSAhPSAtMTtcclxuICAgICAgbGV0IGluY2x1ZGVUaW1lUmFuZ2UgPVxyXG4gICAgICAgIHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgIChvYmopID0+IG9ialtrZXldICE9IFwiMFwiICYmIG9ialtrZXldICE9IFwiPG11bHRpPlwiXHJcbiAgICAgICAgKSAhPSAtMTtcclxuXHJcbiAgICAgIGxldCBmcm9tVGltZSA9IHRpbWVBcnJbMF0uc3BsaXQoXCI6XCIpO1xyXG4gICAgICBsZXQgdG9UaW1lID0gdGltZUFyclt0aW1lQXJyLmxlbmd0aCAtIDFdLnNwbGl0KFwiOlwiKTtcclxuICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICBmcm9tVGltZTogZnJvbVRpbWVbMF0gKyBcIjpcIiArIGZyb21UaW1lWzFdICsgXCI6MDBcIixcclxuICAgICAgICB0b1RpbWU6IHRvVGltZVswXSArIFwiOlwiICsgdG9UaW1lWzFdICsgXCI6MDBcIixcclxuICAgICAgICBpbmNsdWRlTXVsdGk6IGluY2x1ZGVNdWx0aSxcclxuICAgICAgICBpbmNsdWRlWmVybzogaW5jbHVkZVplcm8sXHJcbiAgICAgICAgaW5jbHVkZVRpbWVSYW5nZTogaW5jbHVkZVRpbWVSYW5nZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgb2JqKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEluaXRpYWxWYWx1ZU1hcEZvclJhdGluZ1BhZ2VUaW1lRmlsdGVyKGtleTogc3RyaW5nKXtcclxuICAgIGxldCBpbmNsdWRlTXVsdGkgPVxyXG4gICAgICAgICAgICAgIHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikgIT1cclxuICAgICAgICAgICAgICAtMTtcclxuICAgICAgICAgIGxldCBpbmNsdWRlWmVybyA9XHJcbiAgICAgICAgICAgICAgdGhpcy5jbG9uZWRUYWJsZURhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldWzBdID09IFwiMFwiKSAhPSAtMTtcclxuICAgICAgICAgIGxldCBpbmNsdWRlVGltZVJhbmdlID1cclxuICAgICAgICAgICAgICB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmopID0+IG9ialtrZXldWzBdICE9IFwiMFwiICYmIG9ialtrZXldWzBdICE9IFwiPG11bHRpPlwiXHJcbiAgICAgICAgICAgICAgKSAhPSAtMTtcclxuICBcclxuICAgICAgICAgIGxldCBzdGFydFRpbWVBcnIgPSBtYXAodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwic3RhcnRUaW1lXCIpO1xyXG4gICAgICAgICAgbGV0IGVuZFRpbWVBcnIgPSBtYXAodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiZW5kVGltZVwiKTtcclxuICBcclxuICAgICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgICBlbmRUaW1lQXJyLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgIGZyb21UaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgICAgdG9UaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICAgIGluY2x1ZGVNdWx0aTogaW5jbHVkZU11bHRpLFxyXG4gICAgICAgICAgICAgIGluY2x1ZGVaZXJvOiBpbmNsdWRlWmVybyxcclxuICAgICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlOiBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7IFxyXG4gICAgICB9XHJcblxyXG4gIC8vTmVlZCB0byBjaGFuZ2UgdGhpcyBtZXRob2RcclxuICBzZXRUaW1lRmlsdGVyRGF0YUZvckNvbXBvbmVudHNPdGhlclRoYW5SYXRpbmdzUGFnZShoZWFkZXI6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0VudGVyVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgbGV0IG9wdGlvbnNEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgbGV0IHNlbGVjdGVkT2JqO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICBzZWxlY3RlZE9iaiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnNEYXRhLmZpbmRJbmRleChvYmogPT4gb2JqW2hlYWRlcl0gPT0gXCIwXCIpICE9IC0xKSB7XHJcbiAgICAgIHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRPYmouaW5jbHVkZVplcm9UaW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAob3B0aW9uc0RhdGEuZmluZEluZGV4KG9iaiA9PiBvYmpbaGVhZGVyXSA9PSBcIjxtdWx0aT5cIikgIT0gLTEpIHtcclxuICAgICAgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVNdWx0aTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggfHwgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3gpIHtcclxuICAgICAgdGhpcy5zaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zRGF0YS5maW5kSW5kZXgob2JqID0+IG9ialtoZWFkZXJdICE9IFwiPG11bHRpPlwiICYmIG9ialtoZWFkZXJdICE9IFwiMFwiKSAhPSAtMSkge1xyXG4gICAgICB0aGlzLmVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUaW1lRmlsdGVyRGF0YUZvclJhdGluZ1BhZ2VDb21wb25lbnQoaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2hvd011bHRpVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3daZXJvVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFbnRlclRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgdGhpcy5tdWx0aVRpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuemVyb1RpbWVDaGVja2JveENoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG9wdGlvbnNEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgbGV0IHNlbGVjdGVkT2JqO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICBzZWxlY3RlZE9iaiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnNEYXRhLmZpbmRJbmRleChvYmogPT4gb2JqW2hlYWRlcl1bMF0gPT0gXCIwXCIpICE9IC0xKSB7XHJcbiAgICAgIHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRPYmouaW5jbHVkZVplcm9UaW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAob3B0aW9uc0RhdGEuZmluZEluZGV4KG9iaiA9PiBvYmpbaGVhZGVyXVswXSA9PSBcIjxtdWx0aT5cIikgIT0gLTEpIHtcclxuICAgICAgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVNdWx0aTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1plcm9UaW1lQ2hlY2tib3ggfHwgdGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3gpIHtcclxuICAgICAgdGhpcy5zaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zRGF0YS5maW5kSW5kZXgob2JqID0+IG9ialtoZWFkZXJdWzBdICE9IFwiPG11bHRpPlwiICYmIG9ialtoZWFkZXJdWzBdICE9IFwiMFwiKSAhPSAtMSkge1xyXG4gICAgICB0aGlzLmVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkT2JqLmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPclVuc2VsZWN0TXVsdGlUaW1lQ2hlY2tib3goKSB7XHJcbiAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9ICF0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZDtcclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3JVbnNlbGVjdFplcm9UaW1lQ2hlY2tib3goKSB7XHJcbiAgICB0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gIXRoaXMuemVyb1RpbWVDaGVja2JveENoZWNrZWQ7XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RFbnRlclRpbWVDaGVja2JveCgpIHtcclxuICAgIHRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gIXRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkO1xyXG4gICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmVGltZVRvb2x0aXBJc0ZpbHRlcmVkKCkge1xyXG4gICAgbGV0IGN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXI6IHsgZnJvbVRpbWU6IHN0cmluZywgdG9UaW1lOiBzdHJpbmcsIGluY2x1ZGVNdWx0aTogYm9vbGVhbiwgaW5jbHVkZVplcm86IGJvb2xlYW4sIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW4gfSA9IHtcclxuICAgICAgZnJvbVRpbWU6IG51bGwsXHJcbiAgICAgIHRvVGltZTogbnVsbCxcclxuICAgICAgaW5jbHVkZU11bHRpOiBmYWxzZSxcclxuICAgICAgaW5jbHVkZVplcm86IGZhbHNlLFxyXG4gICAgICBpbmNsdWRlVGltZVJhbmdlOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRUaW1lRmlsdGVyO1xyXG5cclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmcm9tVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzBdICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMV0gKyBcIiBcIiArIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVsyXSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGxldCBmcm9tVGltZTI0SHJGb3JtYXQgPSBmcm9tVGltZTI0SHJGb3JtYXRBcnJbMF0gKyBcIjpcIiArIGZyb21UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjAwXCI7XHJcblxyXG4gICAgbGV0IHRvVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsyXSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0ID0gdG9UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgdG9UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjAwXCI7XHJcblxyXG4gICAgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlciA9IHtcclxuICAgICAgZnJvbVRpbWU6IGZyb21UaW1lMjRIckZvcm1hdCwgdG9UaW1lOiB0b1RpbWUyNEhyRm9ybWF0LCBpbmNsdWRlTXVsdGk6IHRoaXMubXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkLFxyXG4gICAgICBpbmNsdWRlWmVybzogdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCwgaW5jbHVkZVRpbWVSYW5nZTogdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWRcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSAhaXNFcXVhbChwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciwgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcik7XHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgIGxldCBpc0ZpbHRlckNoYW5nZWQgPSB0aGlzLmNoZWNrSWZUaW1lVG9vbHRpcElzRmlsdGVyZWQoKTtcclxuICAgICAgbGV0IGlzU29ydENoYW5nZWQgPSB0aGlzLmNoZWNrSWZTb3J0aW5nQ2hhbmdlZCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdG4gPSAhdGhpcy52YWxpZGF0ZVRpbWVGaWx0ZXJJbnB1dCgpIHx8ICghaXNTb3J0Q2hhbmdlZCAmJiAhaXNGaWx0ZXJDaGFuZ2VkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdG4gPSAhdGhpcy52YWxpZGF0ZVRpbWVGaWx0ZXJJbnB1dCgpIHx8ICF0aGlzLmNoZWNrSWZUaW1lVG9vbHRpcElzRmlsdGVyZWQoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuID0gIXRoaXMuY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCkge1xyXG4gICAgbGV0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5nZXRDb2x1bW5Tb3J0U3RhdGVGb3JTZWxlY3RlZFJhZGlvKCk7XHJcblxyXG4gICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdGhpcy50ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGhpcy50ZW1wU29ydE9yZGVyICE9IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTb3J0Q2hhbmdlZDtcclxuICB9XHJcblxyXG5cclxuICB2YWxpZGF0ZVRpbWVGaWx0ZXJJbnB1dCgpIHtcclxuICAgIGlmICh0aGlzLnN0YXJ0VGltZUhvdXJFcnIgfHwgdGhpcy5zdGFydFRpbWVNaW5FcnIgfHwgdGhpcy5lbmRUaW1lSG91ckVyciB8fCB0aGlzLmVuZFRpbWVNaW5FcnIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgodGhpcy5zaG93TXVsdGlUaW1lQ2hlY2tib3ggJiYgIXRoaXMubXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkKSAmJlxyXG4gICAgICAodGhpcy5zaG93WmVyb1RpbWVDaGVja2JveCAmJiAhdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCkgJiZcclxuICAgICAgKHRoaXMuc2hvd0VudGVyVGltZUNoZWNrYm94ICYmICF0aGlzLmVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0aW1lRm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG5cclxuICAgIGxldCBzdGFydFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzFdICsgXCIgXCIgKyB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgc3RhcnRUaW1lMjRIckZvcm1hdCA9IHN0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMF0gKyBcIjpcIiArIHN0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG4gICAgbGV0IGVuZFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMF0gKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMV0gKyBcIiBcIiArIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgZW5kVGltZTI0SHJGb3JtYXQgPSBlbmRUaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgZW5kVGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG5cclxuICAgIHJldHVybiAhKGRheWpzKHN0YXJ0VGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpLmlzQWZ0ZXIoZGF5anMoZW5kVGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpKSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGFwcGx5VGltZUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmFwcGx5VGltZUZpbHRlck9uRGF0YSgpO1xyXG4gICAgdGhpcy5hcHBseVNvcnRpbmdPbkZpbHRlcmVkRGF0YSgpO1xyXG4gICAgdGhpcy5lbWl0RGF0YSgpO1xyXG4gICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBlbWl0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCAmJiB0aGlzLmlzU29ydENoYW5nZWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc29ydGluZ0FwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50ZW1wU29ydE9yZGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUluZGV4KCkge1xyXG4gICAgdGhpcy5zdGFydCA9IHRoaXMuZW5kO1xyXG4gICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICB9XHJcblxyXG4gIHJlc2V0SW5kZXgoKSB7XHJcbiAgICB0aGlzLnN0YXJ0ID0gMDtcclxuICAgIHRoaXMuZW5kID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsUm93c0ZvclRhYmxlKCkge1xyXG4gICAgdGhpcy5yZXNldEluZGV4KCk7XHJcbiAgICB0aGlzLnVwZGF0ZUluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVNvcnRpbmcoa2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnRlbXBTb3J0T3JkZXIgPT0gXCJBU0NcIikge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UodHJ1ZSwgdGhpcy50YWJsZURhdGEsIGtleSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRlbXBTb3J0T3JkZXIgPT0gXCJERVNDXCIpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKGZhbHNlLCB0aGlzLnRhYmxlRGF0YSwga2V5KSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGVtcFNvcnRPcmRlciA9PSBcIkRFRkFVTFRcIikge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFTb3J0U2VydmljZS5ub1NvcnRpbmdBcHBsaWVkRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTdGFydFRpbWVIb3VyKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLnN0YXJ0VGltZUhvdXJFcnIpIHtcclxuICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgIHRoaXMuaW5jcmVtZW50SG91cih0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVjcmVtZW50SG91cih0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lSG91ckNoYW5nZSh0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMF0udG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VFbmRUaW1lSG91cihpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICghdGhpcy5lbmRUaW1lSG91ckVycikge1xyXG4gICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRIb3VyKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVjcmVtZW50SG91cih0aGlzLnNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVuZFRpbWVIb3VyQ2hhbmdlKHRoaXMuc2VsZWN0ZWRUb1RpbWVbMF0udG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VFbmRUaW1lTWludXRlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLmVuZFRpbWVNaW5FcnIpIHtcclxuICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgIHRoaXMuaW5jcmVtZW50TWludXRlKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVjcmVtZW50TWludXRlKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW5kVGltZU1pbkNoYW5nZSh0aGlzLnNlbGVjdGVkVG9UaW1lWzFdLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlU3RhcnRUaW1lTWludXRlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLnN0YXJ0VGltZU1pbkVycikge1xyXG4gICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRNaW51dGUodGhpcy5zZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRlY3JlbWVudE1pbnV0ZSh0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lTWluQ2hhbmdlKHRoaXMuc2VsZWN0ZWRGcm9tVGltZVsxXS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0VGltZUhvdXJDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwubGVuZ3RoID09IDAgfHwgISsodmFsKSB8fCAxID4gcGFyc2VJbnQodmFsKSB8fCBwYXJzZUludCh2YWwpID4gMTIpIHtcclxuICAgICAgdGhpcy5zdGFydFRpbWVIb3VyRXJyID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZUhvdXJFcnIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRUaW1lTWluQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsLmxlbmd0aCAhPSAyIHx8ICghKyh2YWwpICYmIHZhbCAhPSBcIjAwXCIpIHx8IDAgPiBwYXJzZUludCh2YWwpIHx8IHBhcnNlSW50KHZhbCkgPiA1OSkge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZU1pbkVyciA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZU1pbkVyciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBlbmRUaW1lSG91ckNoYW5nZSh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbC5sZW5ndGggPT0gMCB8fCAhKyh2YWwpIHx8IDEgPiBwYXJzZUludCh2YWwpIHx8IHBhcnNlSW50KHZhbCkgPiAxMikge1xyXG4gICAgICB0aGlzLmVuZFRpbWVIb3VyRXJyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kVGltZUhvdXJFcnIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgZW5kVGltZU1pbkNoYW5nZSh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbC5sZW5ndGggIT0gMiB8fCAoISsodmFsKSAmJiB2YWwgIT0gXCIwMFwiKSB8fCAwID4gcGFyc2VJbnQodmFsKSB8fCBwYXJzZUludCh2YWwpID4gNTkpIHtcclxuICAgICAgdGhpcy5lbmRUaW1lTWluRXJyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kVGltZU1pbkVyciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaW5jcmVtZW50SG91cihhcnI6IGFueVtdKSB7XHJcbiAgICBpZiAoYXJyWzBdID09IFwiXCIpIHtcclxuICAgICAgYXJyWzBdID0gMTtcclxuICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdKSA8IDEyKSB7XHJcbiAgICAgIGFyclswXSA9IHBhcnNlSW50KGFyclswXSkgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJyWzBdID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlY3JlbWVudEhvdXIoYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyclswXSA9PSBcIlwiKSB7XHJcbiAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZUludChhcnJbMF0pID4gMSkge1xyXG4gICAgICBhcnJbMF0gPSBwYXJzZUludChhcnJbMF0pIC0gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5jcmVtZW50TWludXRlKGFycjogYW55W10pIHtcclxuICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgIGxldCBtaW4gPSBwYXJzZUludChhcnJbMV0pXHJcbiAgICBpZiAobWluIDw9IDE0KSB7XHJcbiAgICAgIGFyclsxXSA9IFwiMTVcIjtcclxuICAgIH0gZWxzZSBpZiAobWluID49IDE1ICYmIG1pbiA8PSAyOSkge1xyXG4gICAgICBhcnJbMV0gPSBcIjMwXCI7XHJcbiAgICB9IGVsc2UgaWYgKG1pbiA+PSAzMCAmJiBtaW4gPD0gNDQpIHtcclxuICAgICAgYXJyWzFdID0gXCI0NVwiO1xyXG4gICAgfSBlbHNlIGlmIChtaW4gPj0gNDUpIHtcclxuICAgICAgYXJyWzFdID0gXCIwMFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVjcmVtZW50TWludXRlKGFycjogYW55KSB7XHJcbiAgICBsZXQgbWluID0gcGFyc2VJbnQoYXJyWzFdKTtcclxuICAgIGlmIChtaW4gPiAwICYmIG1pbiA8PSAxNSkge1xyXG4gICAgICBhcnJbMV0gPSBcIjAwXCI7XHJcbiAgICB9IGVsc2UgaWYgKG1pbiA+PSAxNiAmJiBtaW4gPD0gMzApIHtcclxuICAgICAgYXJyWzFdID0gXCIxNVwiO1xyXG4gICAgfSBlbHNlIGlmIChtaW4gPj0gMzEgJiYgbWluIDw9IDQ1KSB7XHJcbiAgICAgIGFyclsxXSA9IFwiMzBcIjtcclxuICAgIH0gZWxzZSBpZiAobWluID4gNDUgfHwgbWluID09IDApIHtcclxuICAgICAgYXJyWzFdID0gXCI0NVwiO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNvcnRNYXAoKSB7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuc2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbywgdGhpcy50ZW1wU29ydE9yZGVyKTtcclxuICAgIC8vIHRoaXMuYXBwbHlTb3J0aW5nKHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmU29ydGluZ0lzQXBwbGllZCgpIHtcclxuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuZW50cmllcygpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBcIkFTQ1wiKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBjbG9uZURlZXAodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIHRoaXMudGFibGVEYXRhLCBrZXkpKTtcclxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIkRFU0NcIikge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gY2xvbmVEZWVwKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgdGhpcy50YWJsZURhdGEsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVNvcnRpbmdPbkZpbHRlcmVkRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgIGlmICh0aGlzLmlzU29ydENoYW5nZWQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRNYXAoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5jaGVja0lmU29ydGluZ0lzQXBwbGllZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlUaW1lRmlsdGVyT25EYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICBsZXQgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcjogeyBmcm9tVGltZTogc3RyaW5nLCB0b1RpbWU6IHN0cmluZywgaW5jbHVkZU11bHRpOiBib29sZWFuLCBpbmNsdWRlWmVybzogYm9vbGVhbiwgaW5jbHVkZVRpbWVSYW5nZTogYm9vbGVhbiB9ID0ge1xyXG4gICAgICAgIGZyb21UaW1lOiBudWxsLFxyXG4gICAgICAgIHRvVGltZTogbnVsbCxcclxuICAgICAgICBpbmNsdWRlTXVsdGk6IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVaZXJvOiBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlVGltZVJhbmdlOiBmYWxzZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCBmcm9tVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMF0gKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzJdLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgbGV0IGZyb21UaW1lMjRIckZvcm1hdCA9IGZyb21UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgZnJvbVRpbWUyNEhyRm9ybWF0QXJyWzFdICsgXCI6MDBcIjtcclxuXHJcbiAgICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsyXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0ID0gdG9UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgdG9UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjU5XCI7XHJcblxyXG4gICAgICBjdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyID0ge1xyXG4gICAgICAgIGZyb21UaW1lOiBmcm9tVGltZTI0SHJGb3JtYXQsIHRvVGltZTogdG9UaW1lMjRIckZvcm1hdCwgaW5jbHVkZU11bHRpOiB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCxcclxuICAgICAgICBpbmNsdWRlWmVybzogdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCwgaW5jbHVkZVRpbWVSYW5nZTogdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCBpc0ZpbHRlcmVkID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlcik7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIGN1cnJlbnRTZWxlY3RlZFRpbWVGaWx0ZXIpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcblxyXG4gICAgICBpZiAoIWlzRmlsdGVyZWQpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5ub1NvcnRpbmdBcHBsaWVkRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRhYmxlRGF0YSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VUaW1lRmlsdGVyKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZyb21UaW1lID0gY2xvbmVEZWVwKHRoaXMuY2xvbmVkU2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gY2xvbmVEZWVwKHRoaXMuY2xvbmVkU2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJDb2x1bW5GaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKCk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmZpbHRlckRhdGEodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiXCIpKTtcclxuICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gdGhpcy50YWJsZURhdGE7XHJcbiAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS51cGRhdGVTdGF0ZU9mVGhlQ3VycmVudEZpbHRlclRhYih0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RvcmVTb3J0VHlwZUluVGVtcFZhcmlhYmxlKGV2ZW50OiBTb3J0VHlwZSkge1xyXG4gICAgdGhpcy50ZW1wU29ydE9yZGVyID0gZXZlbnQ7XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyYWRpby1jb250YWluZXJcIiAqbmdJZj1cImZpbHRlclRhYk9iamVjdHM/Lmxlbmd0aCA+IDFcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmlsdGVyVGFiT2JqZWN0c1wiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiZmlsdGVyLXRhYlwiIFt0aXRsZV09XCJkYXRhLmxhYmVsXCIgKGNsaWNrKT1cInBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhkYXRhKVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9PSBkYXRhLmtleX1cIiAqbmdJZj1cImZpbHRlclRhYk9iamVjdHMubGVuZ3RoID4gMFwiPnt7XHJcbiAgICAgICAgICAgIGRhdGEubGFiZWwgfX08L3A+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48YW5uYS1jb3JlLXNvcnQtbGliICpuZ0lmPVwic2hvd1NvcnRDb21wb25lbnRcIiBbbmdDbGFzc109XCJ7J25vLWJvdHRvbS1ib3JkZXInOiAhc2hvd0ZpbHRlckNvbXBvbmVudH1cIlxyXG4gICAgKHNvcnRPcHRpb25DbGlja2VkKT1cInN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZSgkZXZlbnQpXCJcclxuICAgIFtzb3J0T2JqZWN0S2V5XT1cImFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW9cIj48L2FubmEtY29yZS1zb3J0LWxpYj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RmlsdGVyQ29tcG9uZW50XCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY29sdW1uLWNsZWFyLWFsbFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG5cIiAoY2xpY2spPVwiY2xlYXJDb2x1bW5GaWx0ZXIoKVwiPkNsZWFyXHJcbiAgICAgICAgZmlsdGVyPC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1maWx0ZXItY2hlY2tib3hlc1wiXHJcbiAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWc/LmNvbXBvbmVudCA9PSAnU1BPVERFVEFJTFMnIHx8IGd0R2VuZXJhbENvbmZpZz8uY29tcG9uZW50ID09ICdFWENMVURFSU5WRU5UT1JZUE9QVVAnIHx8IGd0R2VuZXJhbENvbmZpZz8uY29tcG9uZW50ID09ICdSQVRJTkcnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cInBhZGRpbmc6IDAuNXJlbSAwIDAuNXJlbSAwLjVyZW1cIiAqbmdJZj1cInNob3dNdWx0aVRpbWVDaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPclVuc2VsZWN0TXVsdGlUaW1lQ2hlY2tib3goKVwiPlxyXG4gICAgICAgICAgICAgICAgY2hlY2tfYm94XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdE11bHRpVGltZUNoZWNrYm94KClcIj5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMnB4XCI+SW5jbHVkZSBNdWx0aTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMC41cmVtIDAgMC41cmVtIDAuNXJlbVwiICpuZ0lmPVwic2hvd1plcm9UaW1lQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPclVuc2VsZWN0WmVyb1RpbWVDaGVja2JveCgpXCI+XHJcbiAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9yVW5zZWxlY3RaZXJvVGltZUNoZWNrYm94KClcIj5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMnB4XCI+SW5jbHVkZSBaZXJvPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtXCIgKm5nSWY9XCJzaG93RW50ZXJUaW1lQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbnRlclRpbWVDaGVja2JveENoZWNrZWRcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdEVudGVyVGltZUNoZWNrYm94KClcIj5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWVudGVyVGltZUNoZWNrYm94Q2hlY2tlZFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9yVW5zZWxlY3RFbnRlclRpbWVDaGVja2JveCgpXCI+XHJcbiAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJweFwiPkVudGVyIHRpbWUgcmFuZ2U8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWxhYmVsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxsYWJlbD5Gcm9tPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIG51bWJlcklucHV0XCIgW25nQ2xhc3NdPVwieydlcnJvci1ib3JkZXInOiBzdGFydFRpbWVIb3VyRXJyfVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGcm9tVGltZVswXVwiIHR5cGU9XCJ0ZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwic3RhcnRUaW1lSG91ckNoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VTdGFydFRpbWVIb3VyKHRydWUpXCI+PC9pPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktbWVudS1kb3duIGRvd253YXJkXCIgKGNsaWNrKT1cImNoYW5nZVN0YXJ0VGltZUhvdXIoZmFsc2UpXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+Ojwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbnVtYmVySW5wdXRcIiBbbmdDbGFzc109XCJ7J2Vycm9yLWJvcmRlcic6IHN0YXJ0VGltZU1pbkVycn1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRnJvbVRpbWVbMV1cIiB0eXBlPVwidGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cInN0YXJ0VGltZU1pbkNoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VTdGFydFRpbWVNaW51dGUodHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd24gZG93bndhcmRcIiAoY2xpY2spPVwiY2hhbmdlU3RhcnRUaW1lTWludXRlKGZhbHNlKVwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZyb21UaW1lWzJdXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJBTVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkFNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIlBNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+UE08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtbGFiZWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGxhYmVsPlRvPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIG51bWJlcklucHV0XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRvVGltZVswXVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZXJyb3ItYm9yZGVyJzogZW5kVGltZUhvdXJFcnJ9XCIgKG5nTW9kZWxDaGFuZ2UpPVwiZW5kVGltZUhvdXJDaGFuZ2UoJGV2ZW50KVwiIHR5cGU9XCJ0ZXh0XCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VFbmRUaW1lSG91cih0cnVlKVwiPjwvaT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93biBkb3dud2FyZFwiIChjbGljayk9XCJjaGFuZ2VFbmRUaW1lSG91cihmYWxzZSlcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj46PC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBudW1iZXJJbnB1dFwiIFtuZ0NsYXNzXT1cInsnZXJyb3ItYm9yZGVyJzogZW5kVGltZU1pbkVycn1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVG9UaW1lWzFdXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZW5kVGltZU1pbkNoYW5nZSgkZXZlbnQpXCIgdHlwZT1cInRleHRcIiAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLW1lbnUtdXAgdXB3YXJkXCIgKGNsaWNrKT1cImNoYW5nZUVuZFRpbWVNaW51dGUodHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd24gZG93bndhcmRcIiAoY2xpY2spPVwiY2hhbmdlRW5kVGltZU1pbnV0ZShmYWxzZSlcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUb1RpbWVbMl1cIiAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIkFNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QU08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiUE1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QTTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VUaW1lRmlsdGVyKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuIH1cIiAoY2xpY2spPVwiYXBwbHlUaW1lRmlsdGVycygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0blwiPlxyXG4gICAgICAgIEFwcGx5XHJcbiAgICA8L2J1dHRvbj5cclxuPC9kaXY+Il19