raain-app 1.6.33 → 1.6.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -7
- package/esm2020/profile.service.mjs +4 -1
- package/esm2020/raain-details/raain-details.component.mjs +1 -1
- package/esm2020/tools/CompareManager.mjs +14 -4
- package/fesm2015/raain-app.mjs +16 -3
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +16 -3
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.6.33] - 2026-02-26
|
|
11
|
+
|
|
10
12
|
### Fixed
|
|
11
13
|
|
|
12
14
|
- `% Computations` dataset was always empty in dynamic chart (data dropped during API response merge)
|
|
@@ -19,7 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
19
21
|
|
|
20
22
|
### Fixed
|
|
21
23
|
|
|
22
|
-
- Cumulative Summary title now shows full selected period (e.g. 12:00-14:00) instead of first computation date (e.g. 13:
|
|
24
|
+
- Cumulative Summary title now shows full selected period (e.g. 12:00-14:00) instead of first computation date (e.g. 13:
|
|
25
|
+
00-14:00)
|
|
23
26
|
|
|
24
27
|
## [1.6.30] - 2026-02-24
|
|
25
28
|
|
|
@@ -36,12 +39,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
36
39
|
|
|
37
40
|
## [1.6.27] - 2026-01-22
|
|
38
41
|
|
|
39
|
-
## [1.6.26] - 2026-01-22
|
|
40
|
-
|
|
41
|
-
## [1.6.24] - 2026-01-19
|
|
42
|
-
|
|
43
|
-
## [1.6.23] - 2026-01-19
|
|
44
|
-
|
|
45
42
|
### Added
|
|
46
43
|
|
|
47
44
|
- New `CumulativeSelectorComponent` for selecting and creating cumulative periods
|
|
@@ -509,6 +509,9 @@ export class ProfileService {
|
|
|
509
509
|
}
|
|
510
510
|
return null;
|
|
511
511
|
}
|
|
512
|
+
// Fetch per-frequency quality for an on-demand cumulative
|
|
513
|
+
// timeStepInMinutes = gauge frequency filter (e.g. 6 for 6min gauges, 30 for 30min gauges)
|
|
514
|
+
// provider = gauge provider filter (e.g. 'Raain')
|
|
512
515
|
async getRainCumulativeCumulativesCompare(rainNode, rainComputationCumulativeId, provider = 'Raain', timeStepInMinutes = 5) {
|
|
513
516
|
const params = {
|
|
514
517
|
provider,
|
|
@@ -762,4 +765,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
762
765
|
providedIn: 'root',
|
|
763
766
|
}]
|
|
764
767
|
}], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
|
|
765
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUF1Q1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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YXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgQnVpbGRRdWVyeVN0cmluZyxcbiAgICBFdmVudE5vZGUsXG4gICAgR2F1Z2VNZWFzdXJlLFxuICAgIEdhdWdlTm9kZSxcbiAgICBMYXRMbmcsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVxdWVzdCxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlcXVlc3RCb2R5LFxuICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlc3BvbnNlLFxuICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc1VwZGF0ZVJlcXVlc3RCb2R5LFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZXNSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzRGV0YWlsZWRSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRPbmVUaW1lZnJhbWVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm9ncmVzc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVRlYW1zRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpVGVhbXNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFkYXJOb2RlLFxuICAgIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICAgIFRlYW1Ob2RlLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZHlGb3JTeW5jOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHVibGljIGFzVGVhbUlkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgaXNEZW1vOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCByb2xlczogQXJyYXk8c3RyaW5nPjtcbiAgICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgICBwcm90ZWN0ZWQgZmlkalN0b3JhZ2U6IEZpZGpTdG9yYWdlO1xuICAgIHByb3RlY3RlZCBoYXZlVHJ5VG9SZWNvbm5lY3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgIHByb3RlY3RlZCBmaWRqU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcpO1xuICAgICAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tYXNUZWFtSWQnKTtcbiAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlID0gbmV3IEZpZGpTdG9yYWdlKHN0b3JhZ2UpO1xuICAgICAgICB0aGlzLmlzRGVtb01vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEZW1vO1xuICAgIH1cblxuICAgIHNldCBpc0RlbW9Nb2RlKG1vZGUpIHtcbiAgICAgICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgICAgIHRoaXMuZmlkalN0b3JhZ2Uuc2V0RGVtb01vZGUodGhpcy5pc0RlbW8pO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0VXJsRm9yQVBJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tdXJsRm9yQVBJJyk7XG4gICAgfVxuXG4gICAgc2V0IGRlZmF1bHRVcmxGb3JBUEkodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tdXJsRm9yQVBJJywgdXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub2RlRGF0YSA9IGF3YWl0IHRoaXMuZmlkalN0b3JhZ2UuZ2V0UmVmcmVzaGVkTm9kZUNvcHkodGhpcy5maWRqU2VydmljZSk7XG4gICAgICAgICAgICB0aGlzLnNldFJvbGVzKGF3YWl0IHRoaXMuZmlkalNlcnZpY2UuZ2V0Um9sZXMoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0RW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYWlsID8/IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgc2V0RW1haWwoZW1haWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9nb3V0KGZpZGpLZXk6IHN0cmluZywgZmlkalByb2Q6IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gdGhpcy5zdG9yYWdlLnJlbW92ZSgncmFhaW4tZW1haWwnKTtcblxuICAgICAgICBpZiAoIWZpZGpLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dpbkluRGVtb01vZGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaW5pdEZpZGogY2F0Y2ggcGI6ICcsIGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkYXRhOiBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXROb3RpZmljYXRpb25zKHJhaW5JZDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0eXBlIE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zID0gUGFydGlhbDxSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3Q+O1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBOb3RpZmljYXRpb25zRmluZFBhcmFtcyA9IHtyYWluOiByYWluSWR9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zPihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAoKG4pID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RXZlbnROb2RlW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlUZWFtc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAge3RlYW1zOiBSZXR1cm5UeXBlPFRlYW1Ob2RlWyd0b0pTT04nXT5bXX1cbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICAgICAgICAgIHRlYW1zLnB1c2gobmV3IFRlYW1Ob2RlKHRlYW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWFtcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRUZWFtKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlUZWFtc0ZpbmRPbmVSZXNwb25zZT4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHRlYW1JZCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZWFtTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gUmFkYXJzID09PVxuXG4gICAgYXN5bmMgZ2V0UmFkYXJzKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICAgICAgY29uc3QgcmFkYXJzID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaVJhZGFyc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBwdXRSYWRhcihyYWRhck5vZGU6IFJhZGFyTm9kZSk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFJhYWluQXBpUmFkYXJzVXBkYXRlUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBuYW1lOiByYWRhck5vZGUubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBSZXR1cm5UeXBlPFJhZGFyTm9kZVsndG9KU09OJ10+XG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoUmFkYXJOb2RlLlRZUEUpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChuZXcgUmFkYXJOb2RlKHJhZGFyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbG9uZWx5UmFkYXJzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBiZWdpbjogRGF0ZSxcbiAgICAgICAgZW5kOiBEYXRlLFxuICAgICAgICBmb3JjZWQgPSBmYWxzZSxcbiAgICAgICAgcHJvdmlkZXIgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlcyA9IDEwLFxuICAgICAgICB3aW5kb3dJbk1pbnV0ZXMgPSAwXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RpbWVmcmFtZUN1bXVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBTdHJpbmcodGltZVN0ZXBJbk1pbnV0ZXMpLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbj8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGVuZD8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcy53aW5kb3dJbk1pbnV0ZXMgPSBTdHJpbmcod2luZG93SW5NaW51dGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZUN1bXVsYXRpdmUpO1xuICAgICAgICAgICAgcmFpbk5vZGUubmFtZSArPSAnLnJhZGFyLnRpbWVmcmFtZUN1bXVsYXRpdmUnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhaW5zID09PVxuXG4gICAgYXN5bmMgZ2V0UmFpbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHt9O1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpUmFpbnNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIHJhbmdlOiBvcHRpb25zLnJhbmdlLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9uczogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueS5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50UmFpbnkgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFEucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFEgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9ucy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50Q29tcHV0YXRpb25zID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnksXG4gICAgICAgICAgICAgICAgcGVyY2VudFEsXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9ucyxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q291bnRzSG91cihcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtwZXJpb2RCZWdpbjogRGF0ZX1cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgcGVyY2VudEltYWdlczogWFlUeXBlW107XG4gICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdO1xuICAgICAgICByYWlueUNvdW50OiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIHJhbmdlOiAnaG91cicsXG4gICAgICAgICAgICAgICAgYmVnaW46IG9wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudENvbXB1dGF0aW9ucyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueUNvdW50LnB1c2gobmV3IFhZVHlwZShjLnJhaW55Q291bnQgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcmFpbnlTdW0ucHVzaChuZXcgWFlUeXBlKGMucmFpbnlTdW0gPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCA9IHtmb3JtYXQ6ICdjYXJ0ZXNpYW4tbWFwJ307XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9PyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2N1bXVsYXRpdmUvJHtjdW11bGF0aXZlSG91cnN9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ3VtdWxhdGl2ZUNvbXBhcmUoXG4gICAgICAgIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogYCR7cmFpbk5vZGUuaWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfS9jb21wYXJlc2AsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcXVhbGl0eUpzb24gPSByZXNwb25zZS5kYXRhLnF1YWxpdGllc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShxdWFsaXR5SnNvbik7XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgU3BlZWRNYXRyaXhDb250YWluZXIuQ3JlYXRlRnJvbUpzb24oXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gNVxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uUXVhbGl0eT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgIEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmVzUmVxdWVzdD4ocGFyYW1zKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmVzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5Ob2RlLmlkfS9jdW11bGF0aXZlcy8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0vY29tcGFyZXM/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1YWxpdHlKc29uID0gcmVzcG9uc2UuZGF0YS5xdWFsaXRpZXNbMF07XG4gICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkocXVhbGl0eUpzb24pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPVxuICAgICAgICAgICAgICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLkNyZWF0ZUZyb21Kc29uKFxuICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Qcm9ncmVzcyhyYWluSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvcHJvZ3Jlc3MnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc1Byb2dyZXNzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyByZXR1cm4gcmVzcG9uc2UuZGF0YS5pblByb2dyZXNzO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuaW5RdWV1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEluZGljYXRvcnMocmFpbklkOiBzdHJpbmcpOiBQcm9taXNlPFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVzcG9uc2U+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGN1bXVsYXRpdmU6ICd0cnVlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9pbmRpY2F0b3JzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpbmRpY2F0b3JzOiBbXX07XG4gICAgfVxuXG4gICAgLy8gR0VUIC9yYWlucy86cmFpbklkL2N1bXVsYXRpdmVzIC0gTGlzdCBhdmFpbGFibGUgY3VtdWxhdGl2ZSBwZXJpb2RzXG4gICAgLy8gV2l0aCBkZXRhaWxlZD10cnVlLCByZXR1cm5zIGluZGl2aWR1YWwgY3VtdWxhdGl2ZXMgaW5zdGVhZCBvZiBhZ2dyZWdhdGVkIHBlcmlvZHNcbiAgICBhc3luYyBnZXRDdW11bGF0aXZlUGVyaW9kcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGZpbHRlcnM/OiB7XG4gICAgICAgICAgICB3aW5kb3dJbk1pbnV0ZXM/OiBudW1iZXI7XG4gICAgICAgICAgICBwcm92aWRlcj86IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVhZHk/OiBib29sZWFuO1xuICAgICAgICAgICAgZm9yY2VkPzogYm9vbGVhbjtcbiAgICAgICAgICAgIGRldGFpbGVkPzogYm9vbGVhbjtcbiAgICAgICAgICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luPzogc3RyaW5nO1xuICAgICAgICAgICAgcGVyaW9kRW5kPzogc3RyaW5nO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVzcG9uc2UgfCBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNEZXRhaWxlZFJlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXF1ZXN0ID0ge307XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ud2luZG93SW5NaW51dGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMud2luZG93SW5NaW51dGVzID0gZmlsdGVycy53aW5kb3dJbk1pbnV0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHJvdmlkZXIgPSBmaWx0ZXJzLnByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmlzUmVhZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5pc1JlYWR5ID0gZmlsdGVycy5pc1JlYWR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmZvcmNlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9IGZpbHRlcnMuZm9yY2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmRldGFpbGVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmRldGFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5wYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucGFnZSA9IGZpbHRlcnMucGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmxpbWl0ID0gZmlsdGVycy5saW1pdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5wZXJpb2RCZWdpbikge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wZXJpb2RCZWdpbiA9IGZpbHRlcnMucGVyaW9kQmVnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucGVyaW9kRW5kKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnBlcmlvZEVuZCA9IGZpbHRlcnMucGVyaW9kRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVycz8uZGV0YWlsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0RldGFpbGVkUmVzcG9uc2VcbiAgICAgICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwZXJpb2RzOiBbXSwgdG90YWw6IDB9O1xuICAgIH1cblxuICAgIC8vIFBPU1QgL3JhaW5zLzpyYWluSWQvY3VtdWxhdGl2ZXMgLSBUcmlnZ2VyIGN1bXVsYXRpdmUgY29tcHV0YXRpb25cbiAgICBhc3luYyBjcmVhdGVDdW11bGF0aXZlUGVyaW9kKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogRGF0ZTtcbiAgICAgICAgICAgIHBlcmlvZEVuZDogRGF0ZTtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25mTmFtZT86IHN0cmluZztcbiAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzPzogbnVtYmVyO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNDcmVhdGVSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keTogUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICBwZXJpb2RCZWdpbjogcGFyYW1zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyaW9kRW5kOiBwYXJhbXMucGVyaW9kRW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgICAgICAgICBjb25mTmFtZTogcGFyYW1zLmNvbmZOYW1lIHx8ICdhZG1pbicsXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHBhcmFtcy50aW1lU3RlcEluTWludXRlcyB8fCA1LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IEdhdWdlcyA9PT1cblxuICAgIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGFyb3VuZExhdExuZzogTGF0TG5nLFxuICAgICAgICBwYWdlQ291bnQgPSAxXG4gICAgKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgYXJvdW5kTGF0TG5nOiBgJHthcm91bmRMYXRMbmcubGF0fSwke2Fyb3VuZExhdExuZy5sbmd9YCxcbiAgICAgICAgICAgIHJhaW5JZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIGJhc2VQYXJhbXMudGVhbUlkID0gdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdhdWdlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8PSBwYWdlQ291bnQ7IGNvdW50KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0ID0gey4uLmJhc2VQYXJhbXMsIHBhZ2U6IGNvdW50fTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgcmVzcC5kYXRhLmdhdWdlcykge1xuICAgICAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBiZWdpbjogYmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVuZDogZW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgIFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVzcG9uc2VcbiAgICAgICAgPih7XG4gICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQgKyAnL21lYXN1cmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UHJvdmlkZXJzKFxuICAgICAgICByYWluSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8e3Byb3ZpZGVyczogc3RyaW5nW107IHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXJbXX0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9wcm92aWRlcnMnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiByZXNwb25zZS5kYXRhLnByb3ZpZGVycyB8fCBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogcmVzcG9uc2UuZGF0YS50aW1lU3RlcEluTWludXRlcyB8fCBbNSwgMTAsIDE1LCAzMCwgNjBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ2V0UHJvdmlkZXJzIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtdLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBbNSwgMTAsIDE1LCAzMCwgNjBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRlQ29tcG9uZW50cyhcbiAgICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgICAgYzoge1xuICAgICAgICAgICAgeWVhcj86IG51bWJlcjtcbiAgICAgICAgICAgIG1vbnRoPzogbnVtYmVyO1xuICAgICAgICAgICAgZGF5PzogbnVtYmVyO1xuICAgICAgICAgICAgaG91cj86IG51bWJlcjtcbiAgICAgICAgICAgIG1pbnV0ZT86IG51bWJlcjtcbiAgICAgICAgfVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRhdGVUb1Nob3cgPSBuZXcgRGF0ZShkYXRlKTtcblxuICAgICAgICBpZiAoYy55ZWFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRnVsbFllYXIoYy55ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5tb250aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ01vbnRoKGMubW9udGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5kYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENEYXRlKGMuZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5ob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDSG91cnMoYy5ob3VyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5taW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNaW51dGVzKGMubWludXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG4gICAgfVxufVxuIl19
|
|
768
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUF1Q1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgQnVpbGRRdWVyeVN0cmluZyxcbiAgICBFdmVudE5vZGUsXG4gICAgR2F1Z2VNZWFzdXJlLFxuICAgIEdhdWdlTm9kZSxcbiAgICBMYXRMbmcsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVxdWVzdCxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlcXVlc3RCb2R5LFxuICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlc3BvbnNlLFxuICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc1VwZGF0ZVJlcXVlc3RCb2R5LFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZXNSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzRGV0YWlsZWRSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRPbmVUaW1lZnJhbWVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm9ncmVzc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVRlYW1zRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpVGVhbXNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFkYXJOb2RlLFxuICAgIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICAgIFRlYW1Ob2RlLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZHlGb3JTeW5jOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHVibGljIGFzVGVhbUlkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgaXNEZW1vOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCByb2xlczogQXJyYXk8c3RyaW5nPjtcbiAgICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgICBwcm90ZWN0ZWQgZmlkalN0b3JhZ2U6IEZpZGpTdG9yYWdlO1xuICAgIHByb3RlY3RlZCBoYXZlVHJ5VG9SZWNvbm5lY3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgIHByb3RlY3RlZCBmaWRqU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcpO1xuICAgICAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tYXNUZWFtSWQnKTtcbiAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlID0gbmV3IEZpZGpTdG9yYWdlKHN0b3JhZ2UpO1xuICAgICAgICB0aGlzLmlzRGVtb01vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEZW1vO1xuICAgIH1cblxuICAgIHNldCBpc0RlbW9Nb2RlKG1vZGUpIHtcbiAgICAgICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgICAgIHRoaXMuZmlkalN0b3JhZ2Uuc2V0RGVtb01vZGUodGhpcy5pc0RlbW8pO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0VXJsRm9yQVBJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tdXJsRm9yQVBJJyk7XG4gICAgfVxuXG4gICAgc2V0IGRlZmF1bHRVcmxGb3JBUEkodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tdXJsRm9yQVBJJywgdXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub2RlRGF0YSA9IGF3YWl0IHRoaXMuZmlkalN0b3JhZ2UuZ2V0UmVmcmVzaGVkTm9kZUNvcHkodGhpcy5maWRqU2VydmljZSk7XG4gICAgICAgICAgICB0aGlzLnNldFJvbGVzKGF3YWl0IHRoaXMuZmlkalNlcnZpY2UuZ2V0Um9sZXMoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0RW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYWlsID8/IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgc2V0RW1haWwoZW1haWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9nb3V0KGZpZGpLZXk6IHN0cmluZywgZmlkalByb2Q6IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gdGhpcy5zdG9yYWdlLnJlbW92ZSgncmFhaW4tZW1haWwnKTtcblxuICAgICAgICBpZiAoIWZpZGpLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dpbkluRGVtb01vZGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaW5pdEZpZGogY2F0Y2ggcGI6ICcsIGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkYXRhOiBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXROb3RpZmljYXRpb25zKHJhaW5JZDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0eXBlIE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zID0gUGFydGlhbDxSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3Q+O1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBOb3RpZmljYXRpb25zRmluZFBhcmFtcyA9IHtyYWluOiByYWluSWR9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zPihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAoKG4pID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RXZlbnROb2RlW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlUZWFtc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAge3RlYW1zOiBSZXR1cm5UeXBlPFRlYW1Ob2RlWyd0b0pTT04nXT5bXX1cbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICAgICAgICAgIHRlYW1zLnB1c2gobmV3IFRlYW1Ob2RlKHRlYW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWFtcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRUZWFtKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlUZWFtc0ZpbmRPbmVSZXNwb25zZT4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHRlYW1JZCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZWFtTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gUmFkYXJzID09PVxuXG4gICAgYXN5bmMgZ2V0UmFkYXJzKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICAgICAgY29uc3QgcmFkYXJzID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaVJhZGFyc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBwdXRSYWRhcihyYWRhck5vZGU6IFJhZGFyTm9kZSk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFJhYWluQXBpUmFkYXJzVXBkYXRlUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBuYW1lOiByYWRhck5vZGUubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBSZXR1cm5UeXBlPFJhZGFyTm9kZVsndG9KU09OJ10+XG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoUmFkYXJOb2RlLlRZUEUpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChuZXcgUmFkYXJOb2RlKHJhZGFyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbG9uZWx5UmFkYXJzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBiZWdpbjogRGF0ZSxcbiAgICAgICAgZW5kOiBEYXRlLFxuICAgICAgICBmb3JjZWQgPSBmYWxzZSxcbiAgICAgICAgcHJvdmlkZXIgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlcyA9IDEwLFxuICAgICAgICB3aW5kb3dJbk1pbnV0ZXMgPSAwXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RpbWVmcmFtZUN1bXVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBTdHJpbmcodGltZVN0ZXBJbk1pbnV0ZXMpLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbj8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGVuZD8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcy53aW5kb3dJbk1pbnV0ZXMgPSBTdHJpbmcod2luZG93SW5NaW51dGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZUN1bXVsYXRpdmUpO1xuICAgICAgICAgICAgcmFpbk5vZGUubmFtZSArPSAnLnJhZGFyLnRpbWVmcmFtZUN1bXVsYXRpdmUnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhaW5zID09PVxuXG4gICAgYXN5bmMgZ2V0UmFpbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHt9O1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpUmFpbnNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIHJhbmdlOiBvcHRpb25zLnJhbmdlLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9uczogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueS5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50UmFpbnkgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFEucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFEgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9ucy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50Q29tcHV0YXRpb25zID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnksXG4gICAgICAgICAgICAgICAgcGVyY2VudFEsXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9ucyxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q291bnRzSG91cihcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtwZXJpb2RCZWdpbjogRGF0ZX1cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgcGVyY2VudEltYWdlczogWFlUeXBlW107XG4gICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdO1xuICAgICAgICByYWlueUNvdW50OiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIHJhbmdlOiAnaG91cicsXG4gICAgICAgICAgICAgICAgYmVnaW46IG9wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudENvbXB1dGF0aW9ucyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueUNvdW50LnB1c2gobmV3IFhZVHlwZShjLnJhaW55Q291bnQgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcmFpbnlTdW0ucHVzaChuZXcgWFlUeXBlKGMucmFpbnlTdW0gPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCA9IHtmb3JtYXQ6ICdjYXJ0ZXNpYW4tbWFwJ307XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9PyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2N1bXVsYXRpdmUvJHtjdW11bGF0aXZlSG91cnN9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ3VtdWxhdGl2ZUNvbXBhcmUoXG4gICAgICAgIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogYCR7cmFpbk5vZGUuaWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfS9jb21wYXJlc2AsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcXVhbGl0eUpzb24gPSByZXNwb25zZS5kYXRhLnF1YWxpdGllc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShxdWFsaXR5SnNvbik7XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgU3BlZWRNYXRyaXhDb250YWluZXIuQ3JlYXRlRnJvbUpzb24oXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggcGVyLWZyZXF1ZW5jeSBxdWFsaXR5IGZvciBhbiBvbi1kZW1hbmQgY3VtdWxhdGl2ZVxuICAgIC8vIHRpbWVTdGVwSW5NaW51dGVzID0gZ2F1Z2UgZnJlcXVlbmN5IGZpbHRlciAoZS5nLiA2IGZvciA2bWluIGdhdWdlcywgMzAgZm9yIDMwbWluIGdhdWdlcylcbiAgICAvLyBwcm92aWRlciA9IGdhdWdlIHByb3ZpZGVyIGZpbHRlciAoZS5nLiAnUmFhaW4nKVxuICAgIGFzeW5jIGdldFJhaW5DdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlKFxuICAgICAgICByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogc3RyaW5nID0gJ1JhYWluJyxcbiAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IG51bWJlciA9IDVcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZXNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9XG4gICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBgJHtyYWluTm9kZS5pZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2NvbXBhcmVzPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBxdWFsaXR5SnNvbiA9IHJlc3BvbnNlLmRhdGEucXVhbGl0aWVzWzBdO1xuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5ldyBSYWluQ29tcHV0YXRpb25RdWFsaXR5KHF1YWxpdHlKc29uKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID1cbiAgICAgICAgICAgICAgICBTcGVlZE1hdHJpeENvbnRhaW5lci5DcmVhdGVGcm9tSnNvbihcbiAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluUHJvZ3Jlc3MocmFpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL3Byb2dyZXNzJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNQcm9ncmVzc1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcmV0dXJuIHJlc3BvbnNlLmRhdGEuaW5Qcm9ncmVzcztcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmluUXVldWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbmRpY2F0b3JzKHJhaW5JZDogc3RyaW5nKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICBjdW11bGF0aXZlOiAndHJ1ZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvaW5kaWNhdG9ycycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7aW5kaWNhdG9yczogW119O1xuICAgIH1cblxuICAgIC8vIEdFVCAvcmFpbnMvOnJhaW5JZC9jdW11bGF0aXZlcyAtIExpc3QgYXZhaWxhYmxlIGN1bXVsYXRpdmUgcGVyaW9kc1xuICAgIC8vIFdpdGggZGV0YWlsZWQ9dHJ1ZSwgcmV0dXJucyBpbmRpdmlkdWFsIGN1bXVsYXRpdmVzIGluc3RlYWQgb2YgYWdncmVnYXRlZCBwZXJpb2RzXG4gICAgYXN5bmMgZ2V0Q3VtdWxhdGl2ZVBlcmlvZHMoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBmaWx0ZXJzPzoge1xuICAgICAgICAgICAgd2luZG93SW5NaW51dGVzPzogbnVtYmVyO1xuICAgICAgICAgICAgcHJvdmlkZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICBpc1JlYWR5PzogYm9vbGVhbjtcbiAgICAgICAgICAgIGZvcmNlZD86IGJvb2xlYW47XG4gICAgICAgICAgICBkZXRhaWxlZD86IGJvb2xlYW47XG4gICAgICAgICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbj86IHN0cmluZztcbiAgICAgICAgICAgIHBlcmlvZEVuZD86IHN0cmluZztcbiAgICAgICAgfVxuICAgICk6IFByb21pc2U8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlc3BvbnNlIHwgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzRGV0YWlsZWRSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVxdWVzdCA9IHt9O1xuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LndpbmRvd0luTWludXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLndpbmRvd0luTWludXRlcyA9IGZpbHRlcnMud2luZG93SW5NaW51dGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LnByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnByb3ZpZGVyID0gZmlsdGVycy5wcm92aWRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5pc1JlYWR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuaXNSZWFkeSA9IGZpbHRlcnMuaXNSZWFkeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5mb3JjZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5mb3JjZWQgPSBmaWx0ZXJzLmZvcmNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5kZXRhaWxlZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5kZXRhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucGFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnBhZ2UgPSBmaWx0ZXJzLnBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ubGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9IGZpbHRlcnMubGltaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucGVyaW9kQmVnaW4pIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucGVyaW9kQmVnaW4gPSBmaWx0ZXJzLnBlcmlvZEJlZ2luO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LnBlcmlvZEVuZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wZXJpb2RFbmQgPSBmaWx0ZXJzLnBlcmlvZEVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVxdWVzdD4ocGFyYW1zKTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmRldGFpbGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNEZXRhaWxlZFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jdW11bGF0aXZlcycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jdW11bGF0aXZlcycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7cGVyaW9kczogW10sIHRvdGFsOiAwfTtcbiAgICB9XG5cbiAgICAvLyBQT1NUIC9yYWlucy86cmFpbklkL2N1bXVsYXRpdmVzIC0gVHJpZ2dlciBjdW11bGF0aXZlIGNvbXB1dGF0aW9uXG4gICAgYXN5bmMgY3JlYXRlQ3VtdWxhdGl2ZVBlcmlvZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgcGVyaW9kQmVnaW46IERhdGU7XG4gICAgICAgICAgICBwZXJpb2RFbmQ6IERhdGU7XG4gICAgICAgICAgICBwcm92aWRlcjogc3RyaW5nO1xuICAgICAgICAgICAgY29uZk5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcz86IG51bWJlcjtcbiAgICAgICAgfVxuICAgICk6IFByb21pc2U8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVzcG9uc2U+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgcGVyaW9kQmVnaW46IHBhcmFtcy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcmlvZEVuZDogcGFyYW1zLnBlcmlvZEVuZC50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgY29uZk5hbWU6IHBhcmFtcy5jb25mTmFtZSB8fCAnYWRtaW4nLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBwYXJhbXMudGltZVN0ZXBJbk1pbnV0ZXMgfHwgNSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNDcmVhdGVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jdW11bGF0aXZlcycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBHYXVnZXMgPT09XG5cbiAgICBhc3luYyBnZXRHYXVnZShnYXVnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEdhdWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlHYXVnZXNGaW5kT25lUmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEdhdWdlTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZXMoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBhcm91bmRMYXRMbmc6IExhdExuZyxcbiAgICAgICAgcGFnZUNvdW50ID0gMVxuICAgICk6IFByb21pc2U8QXJyYXk8R2F1Z2VOb2RlRmlsdGVyPj4ge1xuICAgICAgICBjb25zdCBiYXNlUGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGFyb3VuZExhdExuZzogYCR7YXJvdW5kTGF0TG5nLmxhdH0sJHthcm91bmRMYXRMbmcubG5nfWAsXG4gICAgICAgICAgICByYWluSWQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFzVGVhbUlkKSB7XG4gICAgICAgICAgICBiYXNlUGFyYW1zLnRlYW1JZCA9IHRoaXMuYXNUZWFtSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnYXVnZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPD0gcGFnZUNvdW50OyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHsuLi5iYXNlUGFyYW1zLCBwYWdlOiBjb3VudH07XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgICAgICBSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VzLnB1c2gobmV3IEdhdWdlTm9kZUZpbHRlcihnYXVnZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnYXVnZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0R2F1Z2VNZWFzdXJlcyhnYXVnZUlkOiBzdHJpbmcsIGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUpOiBQcm9taXNlPEdhdWdlTWVhc3VyZVtdPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgYmVnaW46IGJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBlbmQ6IGVuZC50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1Jlc3BvbnNlXG4gICAgICAgID4oe1xuICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkICsgJy9tZWFzdXJlcycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VNZWFzdXJlczogR2F1Z2VNZWFzdXJlW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZU1lYXN1cmUgb2YgcmVzcC5kYXRhLmdhdWdlTWVhc3VyZXMpIHtcbiAgICAgICAgICAgIGdhdWdlTWVhc3VyZXMucHVzaChuZXcgR2F1Z2VNZWFzdXJlKGdhdWdlTWVhc3VyZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnYXVnZU1lYXN1cmVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFByb3ZpZGVycyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHtwcm92aWRlcnM6IHN0cmluZ1tdOyB0aW1lU3RlcEluTWludXRlczogbnVtYmVyW119PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zUHJvdmlkZXJzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvcHJvdmlkZXJzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogcmVzcG9uc2UuZGF0YS5wcm92aWRlcnMgfHwgW10sXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHJlc3BvbnNlLmRhdGEudGltZVN0ZXBJbk1pbnV0ZXMgfHwgWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFByb3ZpZGVycyBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0Um9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZUNvbXBvbmVudHMoXG4gICAgICAgIGRhdGU6IERhdGUsXG4gICAgICAgIGM6IHtcbiAgICAgICAgICAgIHllYXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtb250aD86IG51bWJlcjtcbiAgICAgICAgICAgIGRheT86IG51bWJlcjtcbiAgICAgICAgICAgIGhvdXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtaW51dGU/OiBudW1iZXI7XG4gICAgICAgIH1cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRlVG9TaG93ID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICAgICAgaWYgKGMueWVhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0Z1bGxZZWFyKGMueWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubW9udGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNb250aChjLm1vbnRoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuZGF5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRGF0ZShjLmRheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0hvdXJzKGMuaG91cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDTWludXRlcyhjLm1pbnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICAgIH1cbn1cbiJdfQ==
|