basesite-shared-grid-lib 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/grid-library.component.mjs +1 -1
- package/esm2020/lib/helpers/oDataProvider.mjs +4 -4
- package/fesm2015/basesite-shared-grid-lib.mjs +4 -3
- package/fesm2015/basesite-shared-grid-lib.mjs.map +1 -1
- package/fesm2020/basesite-shared-grid-lib.mjs +3 -3
- package/fesm2020/basesite-shared-grid-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/basesite-shared-grid-lib-1.2.3.tgz +0 -0
|
@@ -299,4 +299,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
299
299
|
type: ViewChild,
|
|
300
300
|
args: [AgGridAngular]
|
|
301
301
|
}] } });
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saWJyYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2dyaWQtbGlicmFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBV2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7O0FBa0NwRixNQUFNLE9BQU8sb0JBQW9CO0lBeUIvQixZQUNVLFdBQStCLEVBQy9CLFFBQWtCO1FBRGxCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBdkJuQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsVUFBVSxDQUFDO1FBRy9CLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUdqRCxnQkFBZ0I7UUFDTixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFPN0MscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixpQkFBWSxHQUFpQixZQUFZLENBQUM7UUFDMUMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFZekIsa0JBQWEsR0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFBRSxJQUFJO1lBQ1osZ0JBQWdCLEVBQUUsYUFBYTtTQUNo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QUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNoRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ3JCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7aUhBNU9VLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHlhQWVwQixhQUFhLGdEQTdDZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJUOzJGQUdVLG9CQUFvQjtrQkFoQ2hDLFNBQVM7K0JBQ0UsOEJBQThCLFlBQzlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQ7Z0lBS1EsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFHbUIsTUFBTTtzQkFBL0IsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQ29sRGVmLFxuICBHZXRSb3dJZEZ1bmMsXG4gIEdldFJvd0lkUGFyYW1zLFxuICBHcmlkUmVhZHlFdmVudCxcbiAgUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtcyxcbiAgUm93TW9kZWxUeXBlLFxuICBWYWx1ZUZvcm1hdHRlclBhcmFtcyxcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgR3JpZExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWxpYnJhcnkuc2VydmljZSc7XG5pbXBvcnQgeyBPZGF0YVNlcnZlclNpZGVQcm92aWRlciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBCdXR0b25SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vcmVuZGVyZXIvYnV0dG9uLXJlbmRlcmVyL2J1dHRvbi1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tVG9vbHRpcCB9IGZyb20gJy4vcmVuZGVyZXIvdG9vbHRpcC1yZW5kZXJlci9jdXN0b20tdG9vbHRpcC1yZW5kZXJlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1iYXNlc2l0ZS1zaGFyZWQtZ3JpZC1saWInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxhZy1ncmlkLWFuZ3VsYXJcbiAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0Ojk4LjJ2aFwiXG4gICAgICBjbGFzcz1cImFnLXRoZW1lLWJhbGhhbVwiXG4gICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcbiAgICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxuICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICBbcm93U2VsZWN0aW9uXT1cInJvd1NlbGVjdGlvblwiXG4gICAgICBbYW5pbWF0ZVJvd3NdPVwidHJ1ZVwiXG4gICAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuICAgICAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiXG4gICAgICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cImdyaWRQYWdlU2l6ZVwiXG4gICAgICBbcGFnaW5hdGlvbk51bWJlckZvcm1hdHRlcl09XCJwYWdpbmF0aW9uTnVtYmVyRm9ybWF0dGVyXCJcbiAgICAgIChtb2RlbFVwZGF0ZWQpPVwib25Nb2RlbFVwZGF0ZWQoKVwiXG4gICAgICBbdG9vbHRpcFNob3dEZWxheV09XCJ0b29sdGlwU2hvd0RlbGF5XCJcbiAgICAgIFt0b29sdGlwSGlkZURlbGF5XT1cInRvb2x0aXBIaWRlRGVsYXlcIlxuICAgICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICAgICAgW2NhY2hlQmxvY2tTaXplXT1cImNhY2hlQmxvY2tTaXplXCJcbiAgICAgIFttYXhDb25jdXJyZW50RGF0YXNvdXJjZVJlcXVlc3RzXT1cIjFcIlxuICAgICAgW2Jsb2NrTG9hZERlYm91bmNlTWlsbGlzXT1cIjEwMFwiXG4gICAgICAoY29sdW1uVmlzaWJsZSk9XCJvblNhdmVHcmlkQ29sdW1uU3RhdGUoJGV2ZW50KVwiXG4gICAgICAoY29sdW1uUGlubmVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcbiAgICAgIChjb2x1bW5SZXNpemVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcbiAgICAgIChjb2x1bW5Nb3ZlZCk9XCJvblNhdmVHcmlkQ29sdW1uU3RhdGUoJGV2ZW50KVwiXG4gICAgICAoc29ydENoYW5nZWQpPVwib25Tb3J0Q2hhbmdlZEV2ZW50KClcIlxuICAgID5cbiAgICA8L2FnLWdyaWQtYW5ndWxhcj5cbiAgYCxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZExpYnJhcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvL2lucHV0IHBhcmFtc1xuICBASW5wdXQoKSBjb2x1bW5EZWZzOiBhbnk7XG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDIwO1xuICBASW5wdXQoKSByb3dTZWxlY3Rpb246IGFueSA9ICdtdWx0aXBsZSc7XG4gIEBJbnB1dCgpIGdyaWRJZDogYW55O1xuICBASW5wdXQoKSBsb2dnZWRJblVzZXI6IGFueTtcbiAgQElucHV0KCkgZW5hYmxlU2VydmVyU2lkZVBhZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXJ2ZXJEYXRhVXJsITogc3RyaW5nO1xuICBASW5wdXQoKSBlbnZpcm9ubWVudCE6c3RyaW5nO1xuICAvL2V2ZW50IGVtaXR0ZXJzXG4gIEBPdXRwdXQoKSBidG5DbGlja0hhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvL3ZpZXdDaGlsZHNcbiAgQFZpZXdDaGlsZChBZ0dyaWRBbmd1bGFyKSBhZ0dyaWQhOiBBZ0dyaWRBbmd1bGFyO1xuXG4gIC8vcGFyYW10ZXJzXG4gIGdyaWRDb2x1bW5TdGF0ZTogYW55O1xuICBwdWJsaWMgdG9vbHRpcFNob3dEZWxheSA9IDA7XG4gIHB1YmxpYyB0b29sdGlwSGlkZURlbGF5ID0gMjAwMDtcbiAgcHVibGljIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuICBwdWJsaWMgY2FjaGVCbG9ja1NpemU6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBncmlkUGFnZVNpemU6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZExpYnJhcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIFxuICB9XG5cbiAgb25Tb3J0Q2hhbmdlZEV2ZW50KCkge1xuICAgIHRoaXMuZ3JpZENvbHVtblN0YXRlID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmdldENvbHVtblN0YXRlKCk7XG4gIH1cbiAgcHVibGljIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgdG9vbHRpcENvbXBvbmVudDogQ3VzdG9tVG9vbHRpcCxcbiAgfTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdyaWRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5jYWNoZUJsb2NrU2l6ZSA9IHRoaXMucGFnZVNpemU7ICAgXG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRCYXNlVXJsKHRoaXMuZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuZ2V0R3JpZFN0YXRlKCk7XG4gICAgdGhpcy5nZXRDb2xEZWYoKTtcbiAgICBpZiAodGhpcy5lbmFibGVTZXJ2ZXJTaWRlUGFnaW5nID09IHRydWUpIHtcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xuICAgICAgdGhpcy5yb3dEYXRhID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwYWdpbmF0aW9uTnVtYmVyRm9ybWF0dGVyOiAoXG4gICAgcGFyYW1zOiBQYWdpbmF0aW9uTnVtYmVyRm9ybWF0dGVyUGFyYW1zXG4gICkgPT4gc3RyaW5nID0gKHBhcmFtczogUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtcykgPT4ge1xuICAgIHJldHVybiAnWycgKyBwYXJhbXMudmFsdWUudG9Mb2NhbGVTdHJpbmcoKSArICddJztcbiAgfTtcblxuICBvbk1vZGVsVXBkYXRlZCgpIHtcbiAgICB0aGlzLnNldEdyaWRTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0Q29sRGVmKCkge1xuICAgIGlmICh0aGlzLmdyaWRJZCAmJiB0aGlzLmxvZ2dlZEluVXNlcikge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5nZXRDb2xEZWYodGhpcy5ncmlkSWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PTEpe1xuICAgICAgICBsZXQgY29sZGVmOiBDb2xEZWZbXSA9IHJlc3BvbnNlLmxpc3QubWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMuaXNCdXR0b24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBmaWVsZDogcmVzLmZpZWxkLFxuICAgICAgICAgICAgICBoZWFkZXJOYW1lOiByZXMudGl0bGUsXG4gICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGlkZTogIXJlcy52aXNpYmxlLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdG9vbHRpcEZpZWxkOiByZXMuZmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmNvbFZhbHVlRm9ybWF0dGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIGZpbHRlcmFibGU6IHJlcy5maWx0ZXJhYmxlLFxuICAgICAgICAgICAgICBmaWx0ZXI6XG4gICAgICAgICAgICAgICAgcmVzLmNvbHVtblR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgID8gJ2FnVGV4dENvbHVtbkZpbHRlcidcbiAgICAgICAgICAgICAgICAgIDogcmVzLmNvbHVtblR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgID8gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJ1xuICAgICAgICAgICAgICAgICAgOiAnYWdEYXRlQ29sdW1uRmlsdGVyJyxcbiAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY29tcGFyYXRvcjogKFxuICAgICAgICAgICAgICAgICAgZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodDogYW55LFxuICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlOiBhbnlcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBc1N0cmluZyA9IGNlbGxWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGVBc1N0cmluZyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb2x1bW5UeXBlID09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsRGF0ZSA9IG5ldyBEYXRlKGRhdGVBc1N0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsRGF0ZSA8IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2VsbERhdGUgPiBmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBmaWVsZDogcmVzLmZpZWxkLFxuICAgICAgICAgICAgICBoZWFkZXJOYW1lOiByZXMudGl0bGUsXG4gICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBoaWRlOiAhcmVzLnZpc2libGUsXG4gICAgICAgICAgICAgIHN1cHByZXNzRmlsdGVyOiB0cnVlLFxuICAgICAgICAgICAgICBzdXBwcmVzc1NvcnRpbmc6IHRydWUsXG4gICAgICAgICAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcbiAgICAgICAgICAgICAgdG9vbHRpcEZpZWxkOiByZXMuZmllbGQsXG4gICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogQnV0dG9uUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMub25CdG5DbGljay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIGxhYmVsOiByZXMubGFiZWwsXG4gICAgICAgICAgICAgICAgaWNvbjogcmVzLmljb24sXG4gICAgICAgICAgICAgICAgYnV0dG9uTmFtZTogcmVzLmJ1dHRvbk5hbWUsXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogcmVzLnRvb2x0aXAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbHVlR2V0dGVyOiAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLnRvb2x0aXAgfHwgcmVzLnRpdGxlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtaW5XaWR0aDogNDAsXG4gICAgICAgICAgICAgIGNlbGxDbGFzczogJ2FjdGlvbi1idXR0b24nLFxuICAgICAgICAgICAgICBwaW5uZWQ6ICdsZWZ0JyxcbiAgICAgICAgICAgICAgbG9ja1Bpbm5lZDogdHJ1ZSAgICAgICAgICAgICBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29sdW1uRGVmcz1jb2xkZWY7XG4gICAgICAgIHRoaXMuYWdHcmlkLmdyaWRPcHRpb25zPy5hcGk/LnNldENvbHVtbkRlZnMoY29sZGVmKTtcbiAgICAgICAgdGhpcy5nZXRHcmlkU3RhdGUoKTtcbiAgICB9ZWxzZXtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb2xEZWYgUmVhZCBFcnJvcj0+XCIscmVzcG9uc2UubWVzc2FnZSlcbiAgICB9fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdQbGVhc2UgcGFzcyB2YWxpZCBHcmlkSWQgYW5kIGxvZ2dlZEluIHVzZXIgSWQnKTtcbiAgICB9XG4gIH1cblxuICBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSB7ICAgIFxuICAgIHRoaXMuZ3JpZFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICBpZiAodGhpcy5lbmFibGVTZXJ2ZXJTaWRlUGFnaW5nID09IHRydWUpIHtcbiAgICAgIHBhcmFtcy5hcGkuc2V0U2VydmVyU2lkZURhdGFzb3VyY2UoXG4gICAgICAgIG5ldyBPZGF0YVNlcnZlclNpZGVQcm92aWRlcih7XG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICBjYWxsQXBpOiAob3B0aW9ucykgPT5cbiAgICAgICAgICAgIGZldGNoKGAke3RoaXMuc2VydmVyRGF0YVVybH0ke3RoaXMuc2VydmVyRGF0YVVybC5pbmRleE9mKCc/Jyk+PTA/KG9wdGlvbnMuaW5kZXhPZignPycpPj0wP29wdGlvbnMucmVwbGFjZSgnPycsJyYnKTpvcHRpb25zKTpvcHRpb25zfWAsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0R3JpZFN0YXRlKCkge1xuICAgIGlmICh0aGlzLmdyaWRDb2x1bW5TdGF0ZSkgeyAgICAgIFxuICAgICAgdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmFwcGx5Q29sdW1uU3RhdGUoe1xuICAgICAgICBzdGF0ZTogdGhpcy5ncmlkQ29sdW1uU3RhdGUsXG4gICAgICAgIGFwcGx5T3JkZXI6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbHVtbnMgPSB0aGlzLmFnR3JpZC5jb2x1bW5BcGkuZ2V0Q29sdW1ucygpO1xuICAgICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAxMCkge1xuICAgICAgICB0aGlzLmFnR3JpZC5jb2x1bW5BcGkuYXV0b1NpemVBbGxDb2x1bW5zKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFnR3JpZC5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEdyaWRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5ncmlkSWQgJiYgdGhpcy5sb2dnZWRJblVzZXIpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2VcbiAgICAgICAgLmdldEdyaWRTdGF0ZSh0aGlzLmdyaWRJZCwgdGhpcy5sb2dnZWRJblVzZXIpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzPT0xKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRDb2x1bW5TdGF0ZSA9IEpTT04ucGFyc2UocmVzcG9uc2Uub2JqZWN0LmdyaWRDb25maWcpO1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkU3RhdGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIGxvYWRpbmcgZ3JpZCBzdGF0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG4gXG5cbiAgb25CdG5DbGljayhlOiBhbnkpIHtcbiAgICB0aGlzLmJ0bkNsaWNrSGFuZGxlci5lbWl0KGUucm93RGF0YSk7XG4gIH1cblxuICBvblNhdmVHcmlkQ29sdW1uU3RhdGUoZXZlbnQ6IGFueSkge1xuICAgIGxldCBjb2x1bW5TdGF0ZSA9IHRoaXMuYWdHcmlkLmNvbHVtbkFwaT8uZ2V0Q29sdW1uU3RhdGUoKTtcbiAgICBsZXQgY29sdW1uRGF0YSA9IHtcbiAgICAgIGdyaWRDb25maWc6IEpTT04uc3RyaW5naWZ5KGNvbHVtblN0YXRlKSxcbiAgICAgIHVpR3JpZElkOiB0aGlzLmdyaWRJZCxcbiAgICAgIHVzZXJJZDogdGhpcy5sb2dnZWRJblVzZXIsXG4gICAgfTtcbiAgICBpZiAoZXZlbnQuZmluaXNoZWQgPT0gdHJ1ZSB8fCBldmVudC50eXBlID09PSAnY29sdW1uUGlubmVkJykge1xuICAgICAgdGhpcy5ncmlkQ29sdW1uU3RhdGUgPSBjb2x1bW5TdGF0ZTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2F2ZUNvbHVtbkNvbmZpZyhjb2x1bW5EYXRhKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7ICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRHcmlkU3RhdGUoKTtcbiAgICAgICAgaWYgKHJlcy5zdGF0dXM9PTApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igd2hpbGUgc2F2aW5nIGNvbHVtbiBjb25maWd1cmF0aW9uOicsIHJlcy5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Um93QnlJZDogR2V0Um93SWRGdW5jID0gKHBhcmFtczogR2V0Um93SWRQYXJhbXMpID0+IHtcbiAgICB2YXIgZGF0YSA9IHBhcmFtcy5kYXRhO1xuICAgIHJldHVybiBkYXRhLmlkID8/IDA7XG4gIH07XG5cbiAgY29sVmFsdWVGb3JtYXR0ZXIocGFyYW1zOiBWYWx1ZUZvcm1hdHRlclBhcmFtcykge1xuICAgIGlmIChpc05hTigrcGFyYW1zLnZhbHVlKSkge1xuICAgICAgdmFyIGRhdGVXcmFwcGVyID0gbmV3IERhdGUocGFyYW1zLnZhbHVlKTtcbiAgICAgIGxldCBpc1ZhbGlkRGF0ZSA9ICFpc05hTihkYXRlV3JhcHBlci5nZXREYXRlKCkpO1xuICAgICAgaWYgKGlzVmFsaWREYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShwYXJhbXMudmFsdWUsICdNTS1kZC15eXl5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyYW1zLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLnZhbHVlO1xuICB9XG59XG4iXX0=
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saWJyYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2dyaWQtbGlicmFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBV2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7O0FBa0NwRixNQUFNLE9BQU8sb0JBQW9CO0lBeUIvQixZQUNVLFdBQStCLEVBQy9CLFFBQWtCO1FBRGxCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBdkJuQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsVUFBVSxDQUFDO1FBRy9CLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUdqRCxnQkFBZ0I7UUFDTixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFPN0MscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixpQkFBWSxHQUFpQixZQUFZLENBQUM7UUFDMUMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFhekIsa0JBQWEsR0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFBRSxJQUFJO1lBQ1osZ0JBQWdCLEVBQUUsYUFBYTtTQUNoQyxDQUFDO1FBZ0JLLDhCQUF5QixHQUVsQixDQUFDLE1BQXVDLEVBQUUsRUFBRTtZQUN4RCxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNuRCxDQUFDLENBQUM7UUFpS0YsZUFBVSxHQUFpQixDQUFDLE1BQXNCLEVBQUUsRUFBRTtZQUNwRCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO0lBbE1GLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBUUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztTQUNsQztJQUNILENBQUM7SUFRRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNsRSxJQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUUsQ0FBQyxFQUFDO29CQUN0QixJQUFJLE1BQU0sR0FBYSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNwRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFOzRCQUMxQixPQUFPO2dDQUNMLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQ0FDaEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dDQUNyQixTQUFTLEVBQUUsSUFBSTtnQ0FDZixJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTztnQ0FDbEIsUUFBUSxFQUFFLElBQUk7Z0NBQ2QsWUFBWSxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dDQUN2QixjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ2pELFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtnQ0FDMUIsTUFBTSxFQUNKLEdBQUcsQ0FBQyxVQUFVLElBQUksUUFBUTtvQ0FDeEIsQ0FBQyxDQUFDLG9CQUFvQjtvQ0FDdEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksUUFBUTt3Q0FDNUIsQ0FBQyxDQUFDLHNCQUFzQjt3Q0FDeEIsQ0FBQyxDQUFDLG9CQUFvQjtnQ0FDMUIsWUFBWSxFQUFFO29DQUNaLFVBQVUsRUFBRSxDQUNWLHlCQUE4QixFQUM5QixTQUFjLEVBQ2QsRUFBRTt3Q0FDRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUM7d0NBRS9CLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTs0Q0FDeEIsT0FBTyxDQUFDLENBQUM7eUNBQ1Y7d0NBQ0QsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTs0Q0FDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7NENBQ3hDLElBQUksUUFBUSxHQUFHLHlCQUF5QixFQUFFO2dEQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDOzZDQUNYO2lEQUFNLElBQUksUUFBUSxHQUFHLHlCQUF5QixFQUFFO2dEQUMvQyxPQUFPLENBQUMsQ0FBQzs2Q0FDVjt5Q0FDRjt3Q0FDRCxPQUFPLENBQUMsQ0FBQztvQ0FDWCxDQUFDO2lDQUNGOzZCQUNGLENBQUM7eUJBQ0g7NkJBQU07NEJBQ0wsT0FBTztnQ0FDTCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0NBQ2hCLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSztnQ0FDckIsU0FBUyxFQUFFLElBQUk7Z0NBQ2YsUUFBUSxFQUFFLEtBQUs7Z0NBQ2YsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU87Z0NBQ2xCLGNBQWMsRUFBRSxJQUFJO2dDQUNwQixlQUFlLEVBQUUsSUFBSTtnQ0FDckIsWUFBWSxFQUFFLElBQUk7Z0NBQ2xCLFlBQVksRUFBRSxHQUFHLENBQUMsS0FBSztnQ0FDdkIsWUFBWSxFQUFFLHVCQUF1QjtnQ0FDckMsa0JBQWtCLEVBQUU7b0NBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0NBQ25DLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztvQ0FDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29DQUNkLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtvQ0FDMUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2lDQUNyQjtnQ0FDRCxXQUFXLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtvQ0FDM0IsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0NBQ2xDLENBQUM7Z0NBQ0QsUUFBUSxFQUFFLEVBQUU7Z0NBQ1osU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLE1BQU0sRUFBRSxNQUFNO2dDQUNkLFVBQVUsRUFBRSxJQUFJOzZCQUNqQixDQUFDO3lCQUNIO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxVQUFVLEdBQUMsTUFBTSxDQUFDO29CQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQ3ZCO3FCQUFJO29CQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2lCQUN0RDtZQUFBLENBQUMsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBc0I7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksRUFBRTtZQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUNoQyxJQUFJLHVCQUF1QixDQUFDO2dCQUMxQiwyQkFBMkIsRUFBRSxLQUFLO2dCQUNsQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNuQixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQSxDQUFDLENBQUEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxDQUFBLENBQUMsQ0FBQSxPQUFPLEVBQUUsRUFBRTtvQkFDckksT0FBTyxFQUFFO3dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7d0JBQ2xDLE1BQU0sRUFBRSxrQkFBa0I7cUJBQzNCO2lCQUNGLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN6QyxDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZTtnQkFDM0IsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzVDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDcEM7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFdBQVc7aUJBQ2IsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBRSxDQUFDLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQ3JCO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztpQkFDL0M7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUdELFVBQVUsQ0FBQyxDQUFNO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFVO1FBQzlCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzFELElBQUksVUFBVSxHQUFHO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDMUIsQ0FBQztRQUNGLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsQ0FBQyxFQUFFO29CQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEU7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQU9ELGlCQUFpQixDQUFDLE1BQTRCO1FBQzVDLElBQUksS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNoRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ3JCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7aUhBN09VLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHlhQWVwQixhQUFhLGdEQTdDZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJUOzJGQUdVLG9CQUFvQjtrQkFoQ2hDLFNBQVM7K0JBQ0UsOEJBQThCLFlBQzlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQ7Z0lBS1EsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFHbUIsTUFBTTtzQkFBL0IsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQ29sRGVmLFxuICBHZXRSb3dJZEZ1bmMsXG4gIEdldFJvd0lkUGFyYW1zLFxuICBHcmlkUmVhZHlFdmVudCxcbiAgUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtcyxcbiAgUm93TW9kZWxUeXBlLFxuICBWYWx1ZUZvcm1hdHRlclBhcmFtcyxcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgR3JpZExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWxpYnJhcnkuc2VydmljZSc7XG5pbXBvcnQgeyBPZGF0YVNlcnZlclNpZGVQcm92aWRlciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBCdXR0b25SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vcmVuZGVyZXIvYnV0dG9uLXJlbmRlcmVyL2J1dHRvbi1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tVG9vbHRpcCB9IGZyb20gJy4vcmVuZGVyZXIvdG9vbHRpcC1yZW5kZXJlci9jdXN0b20tdG9vbHRpcC1yZW5kZXJlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1iYXNlc2l0ZS1zaGFyZWQtZ3JpZC1saWInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxhZy1ncmlkLWFuZ3VsYXJcbiAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0Ojk4LjJ2aFwiXG4gICAgICBjbGFzcz1cImFnLXRoZW1lLWJhbGhhbVwiXG4gICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcbiAgICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxuICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICBbcm93U2VsZWN0aW9uXT1cInJvd1NlbGVjdGlvblwiXG4gICAgICBbYW5pbWF0ZVJvd3NdPVwidHJ1ZVwiXG4gICAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuICAgICAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiXG4gICAgICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cImdyaWRQYWdlU2l6ZVwiXG4gICAgICBbcGFnaW5hdGlvbk51bWJlckZvcm1hdHRlcl09XCJwYWdpbmF0aW9uTnVtYmVyRm9ybWF0dGVyXCJcbiAgICAgIChtb2RlbFVwZGF0ZWQpPVwib25Nb2RlbFVwZGF0ZWQoKVwiXG4gICAgICBbdG9vbHRpcFNob3dEZWxheV09XCJ0b29sdGlwU2hvd0RlbGF5XCJcbiAgICAgIFt0b29sdGlwSGlkZURlbGF5XT1cInRvb2x0aXBIaWRlRGVsYXlcIlxuICAgICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICAgICAgW2NhY2hlQmxvY2tTaXplXT1cImNhY2hlQmxvY2tTaXplXCJcbiAgICAgIFttYXhDb25jdXJyZW50RGF0YXNvdXJjZVJlcXVlc3RzXT1cIjFcIlxuICAgICAgW2Jsb2NrTG9hZERlYm91bmNlTWlsbGlzXT1cIjEwMFwiXG4gICAgICAoY29sdW1uVmlzaWJsZSk9XCJvblNhdmVHcmlkQ29sdW1uU3RhdGUoJGV2ZW50KVwiXG4gICAgICAoY29sdW1uUGlubmVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcbiAgICAgIChjb2x1bW5SZXNpemVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcbiAgICAgIChjb2x1bW5Nb3ZlZCk9XCJvblNhdmVHcmlkQ29sdW1uU3RhdGUoJGV2ZW50KVwiXG4gICAgICAoc29ydENoYW5nZWQpPVwib25Tb3J0Q2hhbmdlZEV2ZW50KClcIlxuICAgID5cbiAgICA8L2FnLWdyaWQtYW5ndWxhcj5cbiAgYCxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZExpYnJhcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvL2lucHV0IHBhcmFtc1xuICBASW5wdXQoKSBjb2x1bW5EZWZzOiBhbnk7XG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDIwO1xuICBASW5wdXQoKSByb3dTZWxlY3Rpb246IGFueSA9ICdtdWx0aXBsZSc7XG4gIEBJbnB1dCgpIGdyaWRJZDogYW55O1xuICBASW5wdXQoKSBsb2dnZWRJblVzZXI6IGFueTtcbiAgQElucHV0KCkgZW5hYmxlU2VydmVyU2lkZVBhZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXJ2ZXJEYXRhVXJsITogc3RyaW5nO1xuICBASW5wdXQoKSBlbnZpcm9ubWVudCE6c3RyaW5nO1xuICAvL2V2ZW50IGVtaXR0ZXJzXG4gIEBPdXRwdXQoKSBidG5DbGlja0hhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvL3ZpZXdDaGlsZHNcbiAgQFZpZXdDaGlsZChBZ0dyaWRBbmd1bGFyKSBhZ0dyaWQhOiBBZ0dyaWRBbmd1bGFyO1xuXG4gIC8vcGFyYW10ZXJzXG4gIGdyaWRDb2x1bW5TdGF0ZTogYW55O1xuICBwdWJsaWMgdG9vbHRpcFNob3dEZWxheSA9IDA7XG4gIHB1YmxpYyB0b29sdGlwSGlkZURlbGF5ID0gMjAwMDtcbiAgcHVibGljIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuICBwdWJsaWMgY2FjaGVCbG9ja1NpemU6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBncmlkUGFnZVNpemU6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZExpYnJhcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIFxuICB9XG5cbiAgb25Tb3J0Q2hhbmdlZEV2ZW50KCkge1xuICAgIHRoaXMuZ3JpZENvbHVtblN0YXRlID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmdldENvbHVtblN0YXRlKCk7XG4gIH1cbiAgXG4gIHB1YmxpYyBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XG4gICAgc29ydGFibGU6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIHRvb2x0aXBDb21wb25lbnQ6IEN1c3RvbVRvb2x0aXAsXG4gIH07XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ncmlkUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgIHRoaXMuY2FjaGVCbG9ja1NpemUgPSB0aGlzLnBhZ2VTaXplOyAgIFxuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0QmFzZVVybCh0aGlzLmVudmlyb25tZW50KTtcbiAgICB0aGlzLmdldEdyaWRTdGF0ZSgpO1xuICAgIHRoaXMuZ2V0Q29sRGVmKCk7XG4gICAgaWYgKHRoaXMuZW5hYmxlU2VydmVyU2lkZVBhZ2luZyA9PSB0cnVlKSB7XG4gICAgICB0aGlzLnJvd01vZGVsVHlwZSA9ICdzZXJ2ZXJTaWRlJztcbiAgICAgIHRoaXMucm93RGF0YSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd01vZGVsVHlwZSA9ICdjbGllbnRTaWRlJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcGFnaW5hdGlvbk51bWJlckZvcm1hdHRlcjogKFxuICAgIHBhcmFtczogUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtc1xuICApID0+IHN0cmluZyA9IChwYXJhbXM6IFBhZ2luYXRpb25OdW1iZXJGb3JtYXR0ZXJQYXJhbXMpID0+IHtcbiAgICByZXR1cm4gJ1snICsgcGFyYW1zLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgKyAnXSc7XG4gIH07XG5cbiAgb25Nb2RlbFVwZGF0ZWQoKSB7XG4gICAgdGhpcy5zZXRHcmlkU3RhdGUoKTtcbiAgfVxuXG4gIGdldENvbERlZigpIHtcbiAgICBpZiAodGhpcy5ncmlkSWQgJiYgdGhpcy5sb2dnZWRJblVzZXIpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuZ2V0Q29sRGVmKHRoaXMuZ3JpZElkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT0xKXtcbiAgICAgICAgbGV0IGNvbGRlZjogQ29sRGVmW10gPSByZXNwb25zZS5saXN0Lm1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmlzQnV0dG9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZmllbGQ6IHJlcy5maWVsZCxcbiAgICAgICAgICAgICAgaGVhZGVyTmFtZTogcmVzLnRpdGxlLFxuICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGhpZGU6ICFyZXMudmlzaWJsZSxcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHRvb2x0aXBGaWVsZDogcmVzLmZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jb2xWYWx1ZUZvcm1hdHRlci5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICBmaWx0ZXJhYmxlOiByZXMuZmlsdGVyYWJsZSxcbiAgICAgICAgICAgICAgZmlsdGVyOlxuICAgICAgICAgICAgICAgIHJlcy5jb2x1bW5UeXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICA/ICdhZ1RleHRDb2x1bW5GaWx0ZXInXG4gICAgICAgICAgICAgICAgICA6IHJlcy5jb2x1bW5UeXBlID09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICA/ICdhZ051bWJlckNvbHVtbkZpbHRlcidcbiAgICAgICAgICAgICAgICAgIDogJ2FnRGF0ZUNvbHVtbkZpbHRlcicsXG4gICAgICAgICAgICAgIGZpbHRlclBhcmFtczoge1xuICAgICAgICAgICAgICAgIGNvbXBhcmF0b3I6IChcbiAgICAgICAgICAgICAgICAgIGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQ6IGFueSxcbiAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZTogYW55XG4gICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQXNTdHJpbmcgPSBjZWxsVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkYXRlQXNTdHJpbmcgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChyZXMuY29sdW1uVHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbERhdGUgPSBuZXcgRGF0ZShkYXRlQXNTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbERhdGUgPCBmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGxEYXRlID4gZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZmllbGQ6IHJlcy5maWVsZCxcbiAgICAgICAgICAgICAgaGVhZGVyTmFtZTogcmVzLnRpdGxlLFxuICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgaGlkZTogIXJlcy52aXNpYmxlLFxuICAgICAgICAgICAgICBzdXBwcmVzc0ZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VwcHJlc3NTb3J0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICBzdXBwcmVzc01lbnU6IHRydWUsXG4gICAgICAgICAgICAgIHRvb2x0aXBGaWVsZDogcmVzLmZpZWxkLFxuICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IEJ1dHRvblJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQnRuQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogcmVzLmxhYmVsLFxuICAgICAgICAgICAgICAgIGljb246IHJlcy5pY29uLFxuICAgICAgICAgICAgICAgIGJ1dHRvbk5hbWU6IHJlcy5idXR0b25OYW1lLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHJlcy50b29sdGlwLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWx1ZUdldHRlcjogKHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy50b29sdGlwIHx8IHJlcy50aXRsZTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDQwLFxuICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICdhY3Rpb24tYnV0dG9uJyxcbiAgICAgICAgICAgICAgcGlubmVkOiAnbGVmdCcsXG4gICAgICAgICAgICAgIGxvY2tQaW5uZWQ6IHRydWUgICAgICAgICAgICAgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbkRlZnM9Y29sZGVmO1xuICAgICAgICB0aGlzLmFnR3JpZC5ncmlkT3B0aW9ucz8uYXBpPy5zZXRDb2x1bW5EZWZzKGNvbGRlZik7XG4gICAgICAgIHRoaXMuZ2V0R3JpZFN0YXRlKCk7XG4gICAgfWVsc2V7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ29sRGVmIFJlYWQgRXJyb3I9PlwiLHJlc3BvbnNlLm1lc3NhZ2UpXG4gICAgfX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnUGxlYXNlIHBhc3MgdmFsaWQgR3JpZElkIGFuZCBsb2dnZWRJbiB1c2VyIElkJyk7XG4gICAgfVxuICB9XG5cbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCkgeyAgICBcbiAgICB0aGlzLmdyaWRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgaWYgKHRoaXMuZW5hYmxlU2VydmVyU2lkZVBhZ2luZyA9PSB0cnVlKSB7XG4gICAgICBwYXJhbXMuYXBpLnNldFNlcnZlclNpZGVEYXRhc291cmNlKFxuICAgICAgICBuZXcgT2RhdGFTZXJ2ZXJTaWRlUHJvdmlkZXIoe1xuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgY2FsbEFwaTogKG9wdGlvbnMpID0+XG4gICAgICAgICAgICBmZXRjaChgJHt0aGlzLnNlcnZlckRhdGFVcmx9JHt0aGlzLnNlcnZlckRhdGFVcmwuaW5kZXhPZignPycpPj0wPyhvcHRpb25zLmluZGV4T2YoJz8nKT49MD9vcHRpb25zLnJlcGxhY2UoJz8nLCcmJyk6b3B0aW9ucyk6b3B0aW9uc31gLCB7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNldEdyaWRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5ncmlkQ29sdW1uU3RhdGUpIHsgICAgICBcbiAgICAgIHRoaXMuYWdHcmlkLmNvbHVtbkFwaS5hcHBseUNvbHVtblN0YXRlKHtcbiAgICAgICAgc3RhdGU6IHRoaXMuZ3JpZENvbHVtblN0YXRlLFxuICAgICAgICBhcHBseU9yZGVyOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmdldENvbHVtbnMoKTtcbiAgICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMTApIHtcbiAgICAgICAgdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmF1dG9TaXplQWxsQ29sdW1ucygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZ0dyaWQuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRHcmlkU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuZ3JpZElkICYmIHRoaXMubG9nZ2VkSW5Vc2VyKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgIC5nZXRHcmlkU3RhdGUodGhpcy5ncmlkSWQsIHRoaXMubG9nZ2VkSW5Vc2VyKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cz09MSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkQ29sdW1uU3RhdGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLm9iamVjdC5ncmlkQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZFN0YXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGlsZSBsb2FkaW5nIGdyaWQgc3RhdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuIFxuXG4gIG9uQnRuQ2xpY2soZTogYW55KSB7XG4gICAgdGhpcy5idG5DbGlja0hhbmRsZXIuZW1pdChlLnJvd0RhdGEpO1xuICB9XG5cbiAgb25TYXZlR3JpZENvbHVtblN0YXRlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgY29sdW1uU3RhdGUgPSB0aGlzLmFnR3JpZC5jb2x1bW5BcGk/LmdldENvbHVtblN0YXRlKCk7XG4gICAgbGV0IGNvbHVtbkRhdGEgPSB7XG4gICAgICBncmlkQ29uZmlnOiBKU09OLnN0cmluZ2lmeShjb2x1bW5TdGF0ZSksXG4gICAgICB1aUdyaWRJZDogdGhpcy5ncmlkSWQsXG4gICAgICB1c2VySWQ6IHRoaXMubG9nZ2VkSW5Vc2VyLFxuICAgIH07XG4gICAgaWYgKGV2ZW50LmZpbmlzaGVkID09IHRydWUgfHwgZXZlbnQudHlwZSA9PT0gJ2NvbHVtblBpbm5lZCcpIHtcbiAgICAgIHRoaXMuZ3JpZENvbHVtblN0YXRlID0gY29sdW1uU3RhdGU7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNhdmVDb2x1bW5Db25maWcoY29sdW1uRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4geyAgICAgICAgXG4gICAgICAgIHRoaXMuc2V0R3JpZFN0YXRlKCk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzPT0wKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIHNhdmluZyBjb2x1bW4gY29uZmlndXJhdGlvbjonLCByZXMubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFJvd0J5SWQ6IEdldFJvd0lkRnVuYyA9IChwYXJhbXM6IEdldFJvd0lkUGFyYW1zKSA9PiB7XG4gICAgdmFyIGRhdGEgPSBwYXJhbXMuZGF0YTtcbiAgICByZXR1cm4gZGF0YS5pZCA/PyAwO1xuICB9O1xuXG4gIGNvbFZhbHVlRm9ybWF0dGVyKHBhcmFtczogVmFsdWVGb3JtYXR0ZXJQYXJhbXMpIHtcbiAgICBpZiAoaXNOYU4oK3BhcmFtcy52YWx1ZSkpIHtcbiAgICAgIHZhciBkYXRlV3JhcHBlciA9IG5ldyBEYXRlKHBhcmFtcy52YWx1ZSk7XG4gICAgICBsZXQgaXNWYWxpZERhdGUgPSAhaXNOYU4oZGF0ZVdyYXBwZXIuZ2V0RGF0ZSgpKTtcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocGFyYW1zLnZhbHVlLCAnTU0tZGQteXl5eScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcy52YWx1ZTtcbiAgfVxufVxuIl19
|
|
@@ -76,7 +76,7 @@ export class OdataProvider {
|
|
|
76
76
|
*/
|
|
77
77
|
this.toQuery = (options) => {
|
|
78
78
|
let path = [];
|
|
79
|
-
if (options
|
|
79
|
+
if (options) {
|
|
80
80
|
path.push('$count=true');
|
|
81
81
|
}
|
|
82
82
|
if (options.skip) {
|
|
@@ -668,9 +668,9 @@ export class OdataProvider {
|
|
|
668
668
|
const values = me.getOdataResult(x);
|
|
669
669
|
if (!pivotActive) {
|
|
670
670
|
if (!options.apply) {
|
|
671
|
-
me.setResult(params, isServerMode, values, x['@odata.count'] || x[0]
|
|
671
|
+
me.setResult(params, isServerMode, values, x['@odata.count'] || x[0]?.totalCount);
|
|
672
672
|
if (this.afterLoadData) {
|
|
673
|
-
this.afterLoadData(options, values, x['@odata.count'] || x[0]
|
|
673
|
+
this.afterLoadData(options, values, x['@odata.count'] || x[0]?.totalCount);
|
|
674
674
|
}
|
|
675
675
|
}
|
|
676
676
|
else {
|
|
@@ -766,4 +766,4 @@ export class OdataServerSideProvider extends OdataProvider {
|
|
|
766
766
|
super.getRows(params);
|
|
767
767
|
}
|
|
768
768
|
}
|
|
769
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0RhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2hlbHBlcnMvb0RhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQXNHcEMsTUFBTSxPQUFPLGFBQWE7SUFnR3hCLFlBQVksT0FBNkI7UUEzRnpDOzs7V0FHRztRQUNILHdCQUFtQixHQUFXLFlBQVksQ0FBQTtRQUMxQzs7O1dBR0c7UUFDSCxnQ0FBMkIsR0FBWSxLQUFLLENBQUE7UUE0RzVDLGtDQUFrQztRQUNsQyw0QkFBdUIsR0FBRyxHQUFzQixFQUFFO1lBQ2hELElBQUksTUFBVSxDQUFBO1lBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sR0FBRyxNQUFNLENBQUE7WUFDakIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2xCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTTthQUNQLENBQUE7UUFDSCxDQUFDLENBQUE7UUFDRCw0QkFBNEI7UUFDNUIsa0JBQWEsR0FBTztZQUNsQixVQUFVO1lBQ1YsTUFBTSxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBVSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sTUFBTSxFQUFFO1lBQ3RFLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRTtZQUN4RSxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxNQUFNLEVBQUU7WUFDeEUsZUFBZSxF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SSxJQUFJLENBQUMseUJBQXlCLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO3lCQUNqRDt3QkFDRCxJQUFJLEVBQUUsR0FBSSxNQUFjLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFBO3dCQUN4RCxJQUFJLEVBQUUsRUFBRTs0QkFDTixDQUFDOzRCQUFDLE1BQWMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQzlDLGdCQUFnQixDQUNqQixDQUFBO3lCQUNGOzZCQUFNOzRCQUNMLENBQUM7NEJBQUMsTUFBYyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO3lCQUNqRTtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7YUFDM0I7UUFDSCxDQUFDLENBQ0YsQ0FBQTtJQUNILENBQUM7Q0E2TEY7QUFFRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQUNwQyxPQUFPLENBQUMsTUFBZ0M7UUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2QixDQUFDO0NBQ0Y7QUFDRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsYUFBYTtJQUN4QyxPQUFPLENBQUMsTUFBZ0M7UUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgSUdldFJvd3NQYXJhbXMsXHJcbiAgICBDb2xEZWYsXHJcbiAgICBDb2xHcm91cERlZixcclxuICAgIENvbHVtblZPLFxyXG4gICAgSVNlcnZlclNpZGVHZXRSb3dzUmVxdWVzdCxcclxuICAgIElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyxcclxuICB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5J1xyXG4gIFxyXG4gIGltcG9ydCB7XHJcbiAgICBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCxcclxuICAgIE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgT2RhdGFRdWVyeU9wdGlvbnMsXHJcbiAgICBQaXZvdFJlc3VsdERhdCxcclxuICB9IGZyb20gJy4vdHlwZXMnXHJcbiAgXHJcbiAgaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4vdXRpbHMnXHJcbiAgZXhwb3J0IGRlY2xhcmUgY2xhc3MgT2RhdGFQcm92aWRlck9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBmb3IgY2FsbCBvZGF0YSBhcGlcclxuICAgICAqL1xyXG4gICAgY2FsbEFwaTogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PlxyXG4gICAgLyoqXHJcbiAgICAgKiBOYW1lIG9mIGZpZWxkIGNvbnRhaW4gY291bnQgb2YgcmVjb3JkIHJlc3VsdHMgaW4gZ3JvdXBpbmcgb2RhdGEgcXVlcnlcclxuICAgICAqIEBkZWZhdWx0IGNoaWxkQ291bnRcclxuICAgICAqL1xyXG4gICAgZ3JvdXBDb3VudEZpZWxkTmFtZT86IHN0cmluZ1xyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgaW4gb2RhdGEgYnVpbGQgcXVlcnlcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcj86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZm9yIGV4dGVuZCBvZGF0YSBxdWVyeSBvcHRpb25zIGZvciBpbXBsZW1lbnQgdXNlciBsb2dpY1xyXG4gICAgICovXHJcbiAgICBiZWZvcmVSZXF1ZXN0PzogKFxyXG4gICAgICBvcHRpb25zOiBPZGF0YVF1ZXJ5T3B0aW9ucyxcclxuICAgICAgcHJvdmlkZXI6IE9kYXRhUHJvdmlkZXIsXHJcbiAgICAgIHJlcXVlc3Q6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUmVxdWVzdFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgICAvKipcclxuICAgICogQ2FsbGJhY2sgZm9yIHBpdm90IG9yIGdyb3VwIGZvciBhcGxseSBjb2x1bW4gYWctZ3JpZCBzZXR0aW5nc1xyXG4gICAgKiBAZXhhbXBsZVxyXG4gICAgKiA8cHJlPjxjb2RlPlxyXG4gICAgKiBiZWZvcmVTZXRTZWNvbmRhcnlDb2x1bW5zID0gc2Vjb25kYXJ5Q29sdW1ucyA9PiB7XHJcbiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICBjb25zdCBjb2wgPSBzZWNvbmRhcnlDb2x1bW5zW2ldXHJcbiAgICAgICBpZiAoY29sLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMoY29sLmNoaWxkcmVuKVxyXG4gICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgLy9BcGxseSBuZXcgc2V0dGluZyBmb3IgZ3JvdXAgZHluY2FtaWMgY3JlYXRlZCBjb2x1bW5cclxuICAgICAgICAgLy8gY29sLmNlbGxDbGFzc1J1bGVzID0gXHJcbiAgICAgICAgIC8vIGNvbC52YWx1ZUZvcm1hdHRlciA9IFxyXG4gICAgICAgfVxyXG4gICAgIH1cclxuICAgfVxyXG4gICAgKiA8L3ByZT48L2NvZGU+XHJcbiAgICAqL1xyXG4gICAgYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucz86IChcclxuICAgICAgc2Vjb25kYXJ5Q29sRGVmczogKENvbERlZiB8IENvbEdyb3VwRGVmKVtdXHJcbiAgICApID0+IHZvaWRcclxuICAgIC8qKlxyXG4gICAgKiBDYWxsYmFjayBpbnZva2VkIGFmdGVyIGxvYWQgZGF0YVxyXG4gICAgKiBAcGFyYW0gb3B0aW9ucyBvZGF0YSBwcm92aWRlciBvcHRpb25zXHJcbiAgICAqIEBwYXJhbSByb3dEYXRhIGRhdGEgZm9yIGFnLWdyaWRcclxuICAgICogQHBhcmFtIHRvdGFsQ291bnQgdG90YWwgY291bnQgcmVjb3Jkc1xyXG4gICAgKiBcclxuICAgICogQGV4YW1wbGVcclxuICAgICogPHByZT48Y29kZT5cclxuICAgICAgICAgYWZ0ZXJMb2FkRGF0YSA9IChvcHRpb25zLCByb3dEYXRhLCB0b3RhbENvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICBpZiAob3B0aW9ucy5za2lwID09PSAwICYmIHJvd0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgZ3JpZEFwaS5jb2x1bW5Db250cm9sbGVyLmF1dG9TaXplQWxsQ29sdW1ucygpXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICogPC9jb2RlPjwvcHJlPlxyXG4gICAgKi9cclxuICAgIGFmdGVyTG9hZERhdGE/OiAoXHJcbiAgICAgIG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgICByb3dEYXRhOiBhbnlbXSxcclxuICAgICAgdG90YWxDb3VudDogbnVtYmVyXHJcbiAgICApID0+IHZvaWRcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZm9yIGNhdGNoIGVycm9yXHJcbiAgICAgKi9cclxuICAgIHNldEVycm9yPzogKFxyXG4gICAgICBlcnJvcjogYW55LFxyXG4gICAgICBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zXHJcbiAgICApID0+IHZvaWRcclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBjb2x1bW5zIGJ5IGlkL2ZpZWxkIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgYnVpbGQgb2RhdGEgcXVlcnlcclxuICAgICAqL1xyXG4gICAgY2FzZVNlbnNpdGl2ZUNvbHVtbnM/OiBzdHJpbmdbXVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgZm9yIHNwZWNpZmllZCBjb2x1bW4gY3VzdG9tIGZpbHRlciBpbXBsZW1lbnRhdGlvblxyXG4gICAgICogPHByZT48Y29kZT5cclxuICAgICAgICAgY3VzdG9tRmlsdGVyczoge1xyXG4gICAgICAgICAgICAgXCJjdXN0b21lclwiOiAoY29sTmFtZSxjb2wsaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyLHByb3ZpZGVyKSA9PntcclxuICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLm9kYXRhT3BlcmF0b3IuaW4oXHJcbiAgICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgICAgY29sLnZhbHVlc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICovXHJcbiAgICBjdXN0b21GaWx0ZXJzPzoge1xyXG4gICAgICBbaW5kZXg6IHN0cmluZ106IChcclxuICAgICAgICBjb2xOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgY29sOiBhbnksXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuLFxyXG4gICAgICAgIHByb3ZpZGVyOiBPZGF0YVByb3ZpZGVyXHJcbiAgICAgICkgPT4gc3RyaW5nXHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGRlY2xhcmUgaW50ZXJmYWNlIENhbmNlbGFibGVQcm9taXNlIHtcclxuICAgIHByb21pc2U6IFByb21pc2U8YW55PlxyXG4gICAgY2FuY2VsOiAoKSA9PiB2b2lkXHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBPZGF0YVByb3ZpZGVyIGltcGxlbWVudHMgT2RhdGFQcm92aWRlck9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBmb3IgY2FsbCBvZGF0YSBhcGlcclxuICAgICAqL1xyXG4gICAgY2FsbEFwaSE6IChxdWVyeTogc3RyaW5nKSA9PiBQcm9taXNlPGFueT5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiBmaWVsZCBjb250YWluIGNvdW50IG9mIHJlY29yZCByZXN1bHRzIGluIGdyb3VwaW5nIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKiBAZGVmYXVsdCBjaGlsZENvdW50XHJcbiAgICAgKi9cclxuICAgIGdyb3VwQ291bnRGaWVsZE5hbWU6IHN0cmluZyA9ICdjaGlsZENvdW50J1xyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgaW4gb2RhdGEgYnVpbGQgcXVlcnlcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZvciBleHRlbmQgb2RhdGEgcXVlcnkgb3B0aW9ucyBmb3IgaW1wbGVtZW50IHVzZXIgbG9naWNcclxuICAgICAqL1xyXG4gICAgYmVmb3JlUmVxdWVzdDogKChcclxuICAgICAgICBvcHRpb25zOiBPZGF0YVF1ZXJ5T3B0aW9ucyxcclxuICAgICAgICBwcm92aWRlcjogT2RhdGFQcm92aWRlcixcclxuICAgICAgICByZXF1ZXN0OiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1JlcXVlc3RcclxuICAgICkgPT4gdm9pZCkgfCB1bmRlZmluZWRcclxuICAgIC8qKlxyXG4gICAgICAqIENhbGxiYWNrIGZvciBwaXZvdCBvciBncm91cCBmb3IgYXBsbHkgY29sdW1uIGFnLWdyaWQgc2V0dGluZ3NcclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICogYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyA9IHNlY29uZGFyeUNvbHVtbnMgPT4ge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgIGNvbnN0IGNvbCA9IHNlY29uZGFyeUNvbHVtbnNbaV1cclxuICAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMoY29sLmNoaWxkcmVuKVxyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgIC8vQXBsbHkgbmV3IHNldHRpbmcgZm9yIGdyb3VwIGR5bmNhbWljIGNyZWF0ZWQgY29sdW1uXHJcbiAgICAgICAgICAgLy8gY29sLmNlbGxDbGFzc1J1bGVzID0gXHJcbiAgICAgICAgICAgLy8gY29sLnZhbHVlRm9ybWF0dGVyID0gXHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgICogPC9wcmU+PC9jb2RlPlxyXG4gICAgICAqL1xyXG4gICAgYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1uczogKChcclxuICAgICAgICBzZWNvbmRhcnlDb2xEZWZzOiAoQ29sRGVmIHwgQ29sR3JvdXBEZWYpW11cclxuICAgICkgPT4gdm9pZCkgfCB1bmRlZmluZWRcclxuICAgIC8qKlxyXG4gICAgICAqIENhbGxiYWNrIGludm9rZWQgYWZ0ZXIgbG9hZCBkYXRhXHJcbiAgICAgICogQHBhcmFtIG9wdGlvbnMgb2RhdGEgcHJvdmlkZXIgb3B0aW9uc1xyXG4gICAgICAqIEBwYXJhbSByb3dEYXRhIGRhdGEgZm9yIGFnLWdyaWRcclxuICAgICAgKiBAcGFyYW0gdG90YWxDb3VudCB0b3RhbCBjb3VudCByZWNvcmRzXHJcbiAgICAgICogXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKiA8cHJlPjxjb2RlPlxyXG4gICAgICAgICAgIGFmdGVyTG9hZERhdGEgPSAob3B0aW9ucywgcm93RGF0YSwgdG90YWxDb3VudCkgPT4ge1xyXG4gICAgICAgICAgICAgICBpZiAob3B0aW9ucy5za2lwID09PSAwICYmIHJvd0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICBncmlkQXBpLmNvbHVtbkNvbnRyb2xsZXIuYXV0b1NpemVBbGxDb2x1bW5zKClcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH1cclxuICAgICAgKiA8L2NvZGU+PC9wcmU+XHJcbiAgICAgICovXHJcbiAgICBhZnRlckxvYWREYXRhOiAoKFxyXG4gICAgICAgIG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgICAgIHJvd0RhdGE6IGFueVtdLFxyXG4gICAgICAgIHRvdGFsQ291bnQ6IG51bWJlclxyXG4gICAgKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBmb3IgY2F0Y2ggZXJyb3JcclxuICAgICAqL1xyXG4gICAgc2V0RXJyb3I6ICgoXHJcbiAgICAgICAgZXJyb3I6IGFueSxcclxuICAgICAgICBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zXHJcbiAgICApID0+IHZvaWQpIHwgdW5kZWZpbmVkXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2YgY29sdW1ucyBieSBpZC9maWVsZCBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIGJ1aWxkIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIGNhc2VTZW5zaXRpdmVDb2x1bW5zPzogc3RyaW5nW11cclxuICAgIC8qKlxyXG4gICAgICogVXNlIGZvciBzcGVjaWZpZWQgY29sdW1uIGN1c3RvbSBmaWx0ZXIgaW1wbGVtZW50YXRpb25cclxuICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGN1c3RvbUZpbHRlcnM6IHtcclxuICAgICAgICAgICAgIFwiY3VzdG9tZXJcIjogKGNvbE5hbWUsY29sLGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcixwcm92aWRlcikgPT57XHJcbiAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5vZGF0YU9wZXJhdG9yLmluKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbC52YWx1ZXNcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAqL1xyXG4gICAgY3VzdG9tRmlsdGVycz86IHtcclxuICAgICAgW2luZGV4OiBzdHJpbmddOiAoXHJcbiAgICAgICAgY29sTmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGNvbDogYW55LFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhbixcclxuICAgICAgICBwcm92aWRlcjogT2RhdGFQcm92aWRlclxyXG4gICAgICApID0+IHN0cmluZ1xyXG4gICAgfVxyXG4gICAgY2FuY2VsUHJvbWljZTogQ2FuY2VsYWJsZVByb21pc2VcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9kYXRhUHJvdmlkZXJPcHRpb25zKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XHJcbiAgICAgIGlmICh0aGlzLmNhbGxBcGkgPT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbEFwaSBtdXN0IGJlIHNwZWNpZmllZCcpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGxBcGkgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxBcGkgbXVzdCBiZSBhIGZ1bmN0aW9uJylcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5iZWZvcmVSZXF1ZXN0ICE9IG51bGwgJiZcclxuICAgICAgICB0eXBlb2YgdGhpcy5iZWZvcmVSZXF1ZXN0ICE9PSAnZnVuY3Rpb24nXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYmVmb3JlUmVxdWVzdCBtdXN0IGJlIGEgZnVuY3Rpb24nKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEgIT0gbnVsbCAmJlxyXG4gICAgICAgIHR5cGVvZiB0aGlzLmFmdGVyTG9hZERhdGEgIT09ICdmdW5jdGlvbidcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZnRlckxvYWREYXRhIG11c3QgYmUgYSBmdW5jdGlvbicpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2V0RXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zZXRFcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0RXJyb3IgbXVzdCBiZSBhIGZ1bmN0aW9uJylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhbmNlbFByb21pY2UgPSB0aGlzLmNyZWF0ZUNhbmNlbGFibGVQcm9taXNlKClcclxuICAgIH1cclxuICBcclxuICAgIC8qKkNyZWF0b3IgYSBjYW5jZWxhYmxlIFByb21pc2UgKi9cclxuICAgIGNyZWF0ZUNhbmNlbGFibGVQcm9taXNlID0gKCk6IENhbmNlbGFibGVQcm9taXNlID0+IHtcclxuICAgICAgbGV0IGNhbmNlbDphbnlcclxuICAgICAgY29uc3QgcHIgPSBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY2FuY2VsID0gcmVqZWN0XHJcbiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHByb21pc2U6IHByLFxyXG4gICAgICAgIGNhbmNlbCxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqT2RhdGEgcXVlcnkgb3BlcmF0aW9ucyAqL1xyXG4gICAgb2RhdGFPcGVyYXRvcjphbnkgPSB7XHJcbiAgICAgIC8vIExvZ2ljYWxcclxuICAgICAgZXF1YWxzOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gZXEgJHt2YWx1ZTF9YCxcclxuICAgICAgbm90RXF1YWw6IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCR7Y29sfSBuZSAke3ZhbHVlMX1gLFxyXG4gICAgICBsZXNzVGhhbjogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PiBgJHtjb2x9IGx0ICR7dmFsdWUxfWAsXHJcbiAgICAgIGxlc3NUaGFuT3JFcXVhbDogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke2NvbH0gbGUgJHt2YWx1ZTF9YCxcclxuICAgICAgZ3JlYXRlclRoYW46IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCR7Y29sfSBndCAke3ZhbHVlMX1gLFxyXG4gICAgICBncmVhdGVyVGhhbk9yRXF1YWw6IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT5cclxuICAgICAgICBgJHtjb2x9IGdlICR7dmFsdWUxfWAsXHJcbiAgICAgIGluUmFuZ2U6IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcsIHZhbHVlMjogYW55KTogc3RyaW5nID0+XHJcbiAgICAgICAgYCgke2NvbH0gZ2UgJHt2YWx1ZTF9IGFuZCAke2NvbH0gbGUgJHt2YWx1ZTJ9KWAsXHJcbiAgICAgIC8vIFN0cmluZ1xyXG4gICAgICBlcXVhbHNTdHI6IChcclxuICAgICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICAgKTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgICBjb2wsXHJcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICApfSBlcSAke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX1gLFxyXG4gICAgICBub3RFcXVhbFN0cjogKFxyXG4gICAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgICApOiBzdHJpbmcgPT5cclxuICAgICAgICBgJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICAgICl9IG5lICR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfWAsXHJcbiAgICAgIGNvbnRhaW5zOiAoXHJcbiAgICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICAgICk6IHN0cmluZyA9PlxyXG4gICAgICAgIGBjb250YWlucygke3RoaXMuaWZUb2xvd2VyQ29sKFxyXG4gICAgICAgICAgY29sLFxyXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICAgKX0sJHt0aGlzLmlmVG9sb3dlcih2YWx1ZTEsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9KWAsXHJcbiAgICAgIG5vdENvbnRhaW5zOiAoXHJcbiAgICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICAgICk6IHN0cmluZyA9PlxyXG4gICAgICAgIGBjb250YWlucygke3RoaXMuaWZUb2xvd2VyQ29sKFxyXG4gICAgICAgICAgY29sLFxyXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICAgKX0sJHt0aGlzLmlmVG9sb3dlcih2YWx1ZTEsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9KSBlcSBmYWxzZWAsXHJcbiAgICAgIHN0YXJ0c1dpdGg6IChcclxuICAgICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICAgKTogc3RyaW5nID0+XHJcbiAgICAgICAgYHN0YXJ0c3dpdGgoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSkgIGVxIHRydWVgLFxyXG4gICAgICBlbmRzV2l0aDogKFxyXG4gICAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgICApOiBzdHJpbmcgPT5cclxuICAgICAgICBgZW5kc3dpdGgoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSkgIGVxIHRydWVgLFxyXG4gICAgICBpblN0cjogKFxyXG4gICAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlczogc3RyaW5nW10sXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICAgICk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke3RoaXMuaWZUb2xvd2VyQ29sKGNvbCwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0gaW4gKCR7dmFsdWVzXHJcbiAgICAgICAgICAubWFwKFxyXG4gICAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgICBgJyR7dGhpcy5pZlRvbG93ZXIodGhpcy5lbmNvZGUoeCksIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9J2BcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5qb2luKCl9KWAsXHJcbiAgICAgIGluOiAoY29sOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pID0+XHJcbiAgICAgICAgYCR7Y29sfSBpbiAoJHt2YWx1ZXMubWFwKCh4KSA9PiBgJHt0aGlzLmVuY29kZSh4KX1gKS5qb2luKCl9KWAsXHJcbiAgICAgIG5vdEluOiAoY29sOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pID0+XHJcbiAgICAgICAgYG5vdCAoJHtjb2x9IGluICgke3ZhbHVlcy5tYXAoKHgpID0+IGAke3h9YCkuam9pbigpfSkpYCxcclxuICAgICAgLy8gRGF0ZVxyXG4gICAgICB0cnVuYzogKGNvbDogc3RyaW5nKTogc3RyaW5nID0+IGBkYXRlKCR7Y29sfSlgLFxyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSB0b2xvd2VyIGZvciBjb2x1bW4gaW4gb2RhdGEgc3ludGF4XHJcbiAgICAgKiBAcGFyYW0gY29sIGNvbHVtbiBuYW1lXHJcbiAgICAgKiBAcGFyYW0gaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyIG5lZWQgYXBwbHkgdG9sb3dlclxyXG4gICAgICovXHJcbiAgICBpZlRvbG93ZXJDb2wgPSAoY29sOiBzdHJpbmcsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhbik6IHN0cmluZyA9PlxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgPyBjb2wgOiBgdG9sb3dlcigke2NvbH0pYFxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB2YWx1ZVxyXG4gICAgICogQHBhcmFtIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciAgbmVlZCBhcHBseSB0b2xvd2VyXHJcbiAgICAgKi9cclxuICAgIGlmVG9sb3dlciA9ICh2YWx1ZTogc3RyaW5nLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4pOiBzdHJpbmcgPT5cclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyID8gdmFsdWUgOiB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZVxyXG4gICAgLyoqXHJcbiAgICAgKiBPZGF0YSBhZ2dyZWdhdGlvbiBvcGVyYXRpb25zXHJcbiAgICAgKi9cclxuICAgIG9kYXRhQWdncmVnYXRpb246YW55ID0ge1xyXG4gICAgICAvLyBMb2dpY2FsXHJcbiAgICAgIHN1bTogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7Y29sfSB3aXRoIHN1bSBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgICAgIG1pbjogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7Y29sfSB3aXRoIG1pbiBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgICAgIG1heDogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7Y29sfSB3aXRoIG1heCBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgICAgIGF2ZzogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7Y29sfSB3aXRoIGF2ZXJhZ2UgYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgICBjb3VudDogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgICAgYCRjb3VudCBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9kYXRhIHF1ZXJ5IGJ1aWxkZXJcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIHBhcmFtZXRlciBmb3Igb2RhdGEgcXVlcnlcclxuICAgICAqL1xyXG4gICAgdG9RdWVyeSA9IChvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCk6IHN0cmluZyA9PiB7XHJcbiAgICAgIGxldCBwYXRoOiBzdHJpbmdbXSA9IFtdXHJcbiAgICAgIGlmIChvcHRpb25zLmNvdW50KSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKCckY291bnQ9dHJ1ZScpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMuc2tpcCkge1xyXG4gICAgICAgIHBhdGgucHVzaChgJHNraXA9JHtvcHRpb25zLnNraXB9YClcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy50b3ApIHtcclxuICAgICAgICBwYXRoLnB1c2goYCR0b3A9JHtvcHRpb25zLnRvcH1gKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnNvcnQgJiYgb3B0aW9ucy5zb3J0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXRoLnB1c2goJyRvcmRlcmJ5PScgKyBvcHRpb25zLnNvcnQuam9pbignLCcpKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLmZpbHRlciAmJiBvcHRpb25zLmZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKCckZmlsdGVyPScgKyBvcHRpb25zLmZpbHRlci5qb2luKCcgYW5kICcpKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLmFwcGx5ICYmIG9wdGlvbnMuYXBwbHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHBhdGgucHVzaCgnJGFwcGx5PScgKyBvcHRpb25zLmFwcGx5LmpvaW4oJy8nKSlcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5leHBhbmQgJiYgb3B0aW9ucy5leHBhbmQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHBhdGgucHVzaCgnJGV4cGFuZD0nICsgb3B0aW9ucy5leHBhbmQuam9pbignLCcpKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBvcHRpb25zLnNlbGVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKCckc2VsZWN0PScgKyBvcHRpb25zLnNlbGVjdC5qb2luKCcsJykpXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHF1ZXJ5OiBzdHJpbmcgPSAnJ1xyXG4gICAgICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcXVlcnkgPSAnPycgKyBwYXRoLmpvaW4oJyYnKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBxdWVyeVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgcXVvdGVzIGZvciBzdHJpbmcgdmFsdWVcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgdmFsdWVcclxuICAgICAqL1xyXG4gICAgZW5jb2RlID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT5cclxuICAgICAgdGhpcy5pc1N0clZhbCh2YWx1ZSkgPyByZXBsYWNlQWxsKHZhbHVlLCBcIidcIiwgXCInJ1wiKSA6IHZhbHVlXHJcbiAgICAvKipcclxuICAgICAqIENvbmN0YXQgdG8gZGF0ZSBhIHRpbWUgZm9yIGNyZWF0ZSBkYXRldGltZSBmb3JtYXQgZm9yIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgZGF0ZSBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgdG9EYXRlVGltZSA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUodmFsdWUpXHJcbiAgICAgIGlmIChpc05hTihkdC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbFxyXG4gICAgICBjb25zdCBkdDEgPSBuZXcgRGF0ZShcclxuICAgICAgICBEYXRlLlVUQyhkdC5nZXRGdWxsWWVhcigpLCBkdC5nZXRNb250aCgpLCBkdC5nZXREYXRlKCkpXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuIGR0MS50b0lTT1N0cmluZygpXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sTmFtZSBjb2x1bW5OYW1lXHJcbiAgICAgKiBAcmV0dXJucyBpcyBDYXNlU2Vuc2l0aXZlIGZvciBjb2x1bW5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRJc05lZWRDYXNlU2Vuc2l0aXZlID0gKGNvbE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyICYmXHJcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlQ29sdW1ucyAmJlxyXG4gICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZUNvbHVtbnMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXNlU2Vuc2l0aXZlQ29sdW1ucy5pbmRleE9mKGNvbE5hbWUpID49IDBcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5pc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhZy1ncmlkIGNvbHVtbiBmaWx0ZXIgdG8gb2RhdGEgcXVlcnlcclxuICAgICAqIEBwYXJhbSBjb2xOYW1lIGNvbHVtbk5hbWVcclxuICAgICAqIEBwYXJhbSBjb2wgYWctZ3JpZCBjb2x1bW5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPZGF0YSA9IChjb2xOYW1lOiBzdHJpbmcsIGNvbDogYW55KTogc3RyaW5nID0+IHtcclxuICAgICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgIGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciA9IG1lLmdldElzTmVlZENhc2VTZW5zaXRpdmUoY29sTmFtZSlcclxuICAgICAgY29uc3QgY3VzdG9tRmlsdGVyID0gbWUuY3VzdG9tRmlsdGVycyAmJiBtZS5jdXN0b21GaWx0ZXJzW2NvbE5hbWVdXHJcbiAgICAgIGNvbE5hbWUgPSByZXBsYWNlQWxsKGNvbE5hbWUsICcuJywgJy8nKVxyXG4gICAgICBjb2xOYW1lID0gbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sTmFtZSlcclxuICAgICAgaWYgKGN1c3RvbUZpbHRlcikge1xyXG4gICAgICAgIHJldHVybiBjdXN0b21GaWx0ZXIoY29sTmFtZSwgY29sLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIsIG1lKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN3aXRjaCAoY29sLmZpbHRlclR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgIHJldHVybiBtZS5vZGF0YU9wZXJhdG9yW2NvbC50eXBlXShjb2xOYW1lLCBjb2wuZmlsdGVyLCBjb2wuZmlsdGVyVG8pXHJcbiAgICAgICAgICBjYXNlICd0ZXh0Jzoge1xyXG4gICAgICAgICAgICBsZXQgb3BlcmF0b3JOYW1lID0gY29sLnR5cGVcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gbWUuZW5jb2RlKGNvbC5maWx0ZXIpXHJcbiAgICAgICAgICAgIC8vIGxldCBmaWx0ZXJUbyA9IG1lLmVuY29kZShjb2wuZmlsdGVyVG8pO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKG9wZXJhdG9yTmFtZSA9PT0gJ2VxdWFscycgfHwgb3BlcmF0b3JOYW1lID09PSAnbm90RXF1YWwnKSAmJlxyXG4gICAgICAgICAgICAgICFpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgb3BlcmF0b3JOYW1lICs9ICdTdHInXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1lLm9kYXRhT3BlcmF0b3Jbb3BlcmF0b3JOYW1lXShcclxuICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgIGAnJHtmaWx0ZXJ9J2AsXHJcbiAgICAgICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgY29sLmRhdGVGcm9tICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICBtZS50b0RhdGVUaW1lKGNvbC5kYXRlRnJvbSkgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgIChjb2wuZGF0ZVRvID09IG51bGwgfHxcclxuICAgICAgICAgICAgICAgIChjb2wuZGF0ZVRvICE9IG51bGwgJiYgbWUudG9EYXRlVGltZShjb2wuZGF0ZVRvKSAhPSBudWxsKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1lLm9kYXRhT3BlcmF0b3JbY29sLnR5cGVdKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGAke21lLnRvRGF0ZVRpbWUoY29sLmRhdGVGcm9tKX1gLFxyXG4gICAgICAgICAgICAgICAgYCR7bWUudG9EYXRlVGltZShjb2wuZGF0ZVRvKX1gXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICdzZXQnOlxyXG4gICAgICAgICAgICByZXR1cm4gY29sLnZhbHVlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgPyBtZS5vZGF0YU9wZXJhdG9yLmluU3RyKFxyXG4gICAgICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgICAgICBjb2wudmFsdWVzLFxyXG4gICAgICAgICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogRXh0cmFjdCB2YWx1ZSBmcm9tIHJlY29yZCBieSBwYXRoIHRvIGZpZWxkXHJcbiAgICAgKiBAcGFyYW0gZmllbGQgcGF0aCB0byBjb2x1bW4gdmFsdWVcclxuICAgICAqIEBwYXJhbSBvYmogIHJlY29yZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFZhbHVlKGZpZWxkOiBzdHJpbmcsIG9iajogYW55KTogYW55IHtcclxuICAgICAgY29uc3QgcGF0aHMgPSBmaWVsZC5zcGxpdCgnLicpXHJcbiAgICAgIGlmIChwYXRocy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gb2JqW2ZpZWxkXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwYXRocy5yZWR1Y2UoKG9iamVjdCwgcGF0aCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChvYmplY3QgfHwge30pW3BhdGhdIC8vIE9saXZlciBTdGVlbGUncyBwYXR0ZXJuXHJcbiAgICAgICAgfSwgb2JqKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIENhY2x1bGF0ZSBwaXZvdCBkYXRhIGZvciBhZy1ncmlkIGZyb20gb2RhdGFcclxuICAgICAqIEBwYXJhbSBwaXZvdENvbHMgcGl2b3QgY29sdW1uc1xyXG4gICAgICogQHBhcmFtIHJvd0dyb3VwQ29scyByb3cgZ3JvdXAgY29sdW1uc1xyXG4gICAgICogQHBhcmFtIHZhbHVlQ29scyB2YWx1ZSBjb2x1bW5zXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBvZGF0YSByZXN1bHRcclxuICAgICAqIEBwYXJhbSBjb3VudEZpZWxkIGNvdW50IGZpZWxkIG5hbWVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRQaXZvdCA9IChcclxuICAgICAgcGl2b3RDb2xzOiBDb2x1bW5WT1tdLFxyXG4gICAgICByb3dHcm91cENvbHM6IENvbHVtblZPW10sXHJcbiAgICAgIHZhbHVlQ29sczogQ29sdW1uVk9bXSxcclxuICAgICAgZGF0YTogYW55W10sXHJcbiAgICAgIGNvdW50RmllbGQ6IHN0cmluZ1xyXG4gICAgKTogUGl2b3RSZXN1bHREYXQgPT4ge1xyXG4gICAgICAvLyBhc3N1bWUgMSBwaXZvdCBjb2wgYW5kIDEgdmFsdWUgY29sIGZvciB0aGlzIGV4YW1wbGVcclxuICAgICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgIGNvbnN0IHBpdm90RGF0YTogYW55W10gPSBbXVxyXG4gICAgICBjb25zdCBhZ2dDb2xzTGlzdDogYW55W10gPSBbXVxyXG4gIFxyXG4gICAgICBjb25zdCBjb2xLZXlFeGlzdHNNYXA6IGFueSA9IHt9XHJcbiAgXHJcbiAgICAgIGNvbnN0IHNlY29uZGFyeUNvbERlZnM6IGFueVtdID0gW11cclxuICAgICAgY29uc3Qgc2Vjb25kYXJ5Q29sRGVmc01hcDphbnkgPSB7fVxyXG4gIFxyXG4gICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICB2YXIgcGl2b3RWYWx1ZXM6IHN0cmluZ1tdID0gW11cclxuICAgICAgICBwaXZvdENvbHMuZm9yRWFjaChmdW5jdGlvbiAocGl2b3RDb2wpIHtcclxuICAgICAgICAgIHZhciBwaXZvdEZpZWxkID0gcGl2b3RDb2wuaWRcclxuICAgICAgICAgIHZhciBwaXZvdFZhbHVlID0gbWUuZ2V0VmFsdWUocGl2b3RGaWVsZCwgaXRlbSlcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGl2b3RWYWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBwaXZvdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgcGl2b3RWYWx1ZS50b1N0cmluZ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHBpdm90VmFsdWVzLnB1c2gocGl2b3RWYWx1ZS50b1N0cmluZygpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcGl2b3RWYWx1ZXMucHVzaCgnLScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgICAvLyB2YXIgcGl2b3RWYWx1ZSA9IGl0ZW1bcGl2b3RGaWVsZF0udG9TdHJpbmcoKTtcclxuICAgICAgICB2YXIgcGl2b3RJdGVtOmFueSA9IHt9XHJcbiAgXHJcbiAgICAgICAgdmFsdWVDb2xzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlQ29sKSB7XHJcbiAgICAgICAgICB2YXIgdmFsRmllbGQgPSB2YWx1ZUNvbC5pZFxyXG4gICAgICAgICAgdmFyIGNvbEtleSA9IGNyZWF0ZUNvbEtleShwaXZvdFZhbHVlcywgdmFsRmllbGQpXHJcbiAgXHJcbiAgICAgICAgICB2YXIgdmFsdWUgPSBtZS5nZXRWYWx1ZSh2YWxGaWVsZCwgaXRlbSlcclxuICAgICAgICAgIHBpdm90SXRlbVtjb2xLZXldID0gdmFsdWVcclxuICBcclxuICAgICAgICAgIGlmICghY29sS2V5RXhpc3RzTWFwW2NvbEtleV0pIHtcclxuICAgICAgICAgICAgYWRkTmV3QWdnQ29sKGNvbEtleSwgdmFsdWVDb2wpXHJcbiAgICAgICAgICAgIGFkZE5ld1NlY29uZGFyeUNvbERlZihjb2xLZXksIHBpdm90VmFsdWVzLCB2YWx1ZUNvbClcclxuICAgICAgICAgICAgY29sS2V5RXhpc3RzTWFwW2NvbEtleV0gPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAoY291bnRGaWVsZCkge1xyXG4gICAgICAgICAgcGl2b3RJdGVtW2NvdW50RmllbGRdID0gbWUuZ2V0VmFsdWUoY291bnRGaWVsZCwgaXRlbSlcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgcm93R3JvdXBDb2xzLmZvckVhY2goZnVuY3Rpb24gKHJvd0dyb3VwQ29sKSB7XHJcbiAgICAgICAgICB2YXIgcm93R3JvdXBGaWVsZCA9IHJvd0dyb3VwQ29sLmlkLnNwbGl0KCcuJylbMF1cclxuICAgICAgICAgIHBpdm90SXRlbVtyb3dHcm91cEZpZWxkXSA9IGl0ZW1bcm93R3JvdXBGaWVsZF1cclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgICAgIHBpdm90RGF0YS5wdXNoKHBpdm90SXRlbSlcclxuICAgICAgfSlcclxuICBcclxuICAgICAgZnVuY3Rpb24gYWRkTmV3QWdnQ29sKGNvbEtleTogc3RyaW5nLCB2YWx1ZUNvbDogQ29sdW1uVk8pOiB2b2lkIHtcclxuICAgICAgICB2YXIgbmV3Q29sID0ge1xyXG4gICAgICAgICAgaWQ6IGNvbEtleSxcclxuICAgICAgICAgIGZpZWxkOiBjb2xLZXksXHJcbiAgICAgICAgICBhZ2dGdW5jOiB2YWx1ZUNvbC5hZ2dGdW5jLFxyXG4gICAgICAgIH1cclxuICAgICAgICBhZ2dDb2xzTGlzdC5wdXNoKG5ld0NvbClcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBmdW5jdGlvbiBhZGROZXdTZWNvbmRhcnlDb2xEZWYoY29sS2V5OmFueSwgcGl2b3RWYWx1ZXM6YW55LCB2YWx1ZUNvbDphbnkpIHtcclxuICAgICAgICB2YXIgcGFyZW50R3JvdXA6IGFueSA9IG51bGxcclxuICBcclxuICAgICAgICB2YXIga2V5UGFydHM6IGFueSA9IFtdXHJcbiAgXHJcbiAgICAgICAgcGl2b3RWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAocGl2b3RWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgICBrZXlQYXJ0cy5wdXNoKHBpdm90VmFsdWUpXHJcbiAgICAgICAgICB2YXIgY29sS2V5ID0gY3JlYXRlQ29sS2V5KGtleVBhcnRzKVxyXG4gICAgICAgICAgdmFyIGdyb3VwQ29sRGVmOiBhbnkgPSBzZWNvbmRhcnlDb2xEZWZzTWFwW2NvbEtleV1cclxuICAgICAgICAgIGlmICghZ3JvdXBDb2xEZWYpIHtcclxuICAgICAgICAgICAgZ3JvdXBDb2xEZWYgPSB7XHJcbiAgICAgICAgICAgICAgZ3JvdXBJZDogY29sS2V5LFxyXG4gICAgICAgICAgICAgIGhlYWRlck5hbWU6IHBpdm90VmFsdWUsXHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbERlZnNNYXBbY29sS2V5XSA9IGdyb3VwQ29sRGVmXHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRHcm91cCkge1xyXG4gICAgICAgICAgICAgIHBhcmVudEdyb3VwLmNoaWxkcmVuLnB1c2goZ3JvdXBDb2xEZWYpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmcy5wdXNoKGdyb3VwQ29sRGVmKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwYXJlbnRHcm91cCA9IGdyb3VwQ29sRGVmXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgICBwYXJlbnRHcm91cC5jaGlsZHJlbi5wdXNoKHtcclxuICAgICAgICAgIGNvbElkOiBjb2xLZXksXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiB2YWx1ZUNvbC5hZ2dGdW5jICsgJygnICsgdmFsdWVDb2wuZGlzcGxheU5hbWUgKyAnKScsXHJcbiAgICAgICAgICBmaWVsZDogY29sS2V5LFxyXG4gICAgICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxyXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgZnVuY3Rpb24gY3JlYXRlQ29sS2V5KHBpdm90VmFsdWVzOiBzdHJpbmdbXSwgdmFsdWVGaWVsZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBpdm90VmFsdWVzLmpvaW4oJ3wnKVxyXG4gICAgICAgIGlmICh2YWx1ZUZpZWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJlc3VsdCArPSAnfCcgKyB2YWx1ZUZpZWxkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCA9IHJlcGxhY2VBbGwocmVzdWx0LCAnLicsICcqJylcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhOiBwaXZvdERhdGEsXHJcbiAgICAgICAgYWdnQ29sczogYWdnQ29sc0xpc3QsXHJcbiAgICAgICAgc2Vjb25kYXJ5Q29sRGVmczogc2Vjb25kYXJ5Q29sRGVmcyxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gcm93R3JvdXBDb2xzIHJvdyBncm91cCBjb2x1bW5zXHJcbiAgICAgKiBAcGFyYW0gZ3JvdXBLZXlzIHdoYXQgZ3JvdXBzIHRoZSB1c2VyIGlzIHZpZXdpbmdcclxuICAgICAqIEBwYXJhbSBjb3VudEZpZWxkIGNvdW50IGZpZWxkIG5hbWVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBidWlsZEdyb3Vwc0Zyb21EYXRhID0gKFxyXG4gICAgICByb3dEYXRhOiBhbnlbXSxcclxuICAgICAgcm93R3JvdXBDb2xzOiBDb2x1bW5WT1tdLFxyXG4gICAgICBncm91cEtleXM6IHN0cmluZ1tdLFxyXG4gICAgICBjb3VudEZpZWxkOiBzdHJpbmdcclxuICAgICk6IGFueVtdID0+IHtcclxuICAgICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgIGxldCByb3dHcm91cENvbCA9IHJvd0dyb3VwQ29sc1tncm91cEtleXMubGVuZ3RoXVxyXG4gICAgICBsZXQgZmllbGQgPSByb3dHcm91cENvbC5pZFxyXG4gICAgICBsZXQgbWFwcGVkUm93RGF0YSA9IG1lLmdyb3VwQnkocm93RGF0YSwgZmllbGQpXHJcbiAgICAgIGxldCBncm91cHM6IGFueSA9IFtdXHJcbiAgXHJcbiAgICAgIG1lLml0ZXJhdGVPYmplY3QobWFwcGVkUm93RGF0YSwgZnVuY3Rpb24gKGtleSwgcm93RGF0YSkge1xyXG4gICAgICAgIHZhciBncm91cEl0ZW0gPSBtZS5hZ2dyZWdhdGVMaXN0KHJvd0RhdGEsIGNvdW50RmllbGQpXHJcbiAgICAgICAgZ3JvdXBJdGVtW2ZpZWxkXSA9IGtleVxyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwSXRlbSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIGdyb3Vwc1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBwcm9wZXJ0eSBvZiBvYmplY3RcclxuICAgICAqIEBwYXJhbSBvYmplY3Qgb2JqZWN0IGNvbnRhaW5lZCBvZGF0YSBncm91cGVkIHJlc3VsdFxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uIGRvIHNvbXRoaW5nXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXRlcmF0ZU9iamVjdCA9IChcclxuICAgICAgb2JqZWN0OiBhbnksXHJcbiAgICAgIGNhbGxiYWNrOiAoa2V5OiBzdHJpbmcsIHJvd0RhdGE6IGFueVtdKSA9PiB2b2lkXHJcbiAgICApOiB2b2lkID0+IHtcclxuICAgICAgaWYgKCFvYmplY3QpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxyXG4gICAgICAgIGNhbGxiYWNrKGtleSwgdmFsdWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogUHJlcGVhcmUgZ3JvdXBlZCBkYXRhXHJcbiAgICAgKiBAcGFyYW0gcm93RGF0YSBhcnJheSBvZGF0YSByZXN1bHRcclxuICAgICAqIEBwYXJhbSBmaWVsZCBncm91cGluZyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdyb3VwQnkgPSAocm93RGF0YTogYW55W10sIGZpZWxkOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICB2YXIgcmVzdWx0OmFueSA9IHt9XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICByb3dEYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICB2YXIga2V5ID0gbWUuZ2V0VmFsdWUoZmllbGQsIGl0ZW0pXHJcbiAgICAgICAgdmFyIGxpc3RGb3JUaGlzS2V5ID0gcmVzdWx0W2tleV1cclxuICAgICAgICBpZiAoIWxpc3RGb3JUaGlzS2V5KSB7XHJcbiAgICAgICAgICBsaXN0Rm9yVGhpc0tleSA9IFtdXHJcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGxpc3RGb3JUaGlzS2V5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3RGb3JUaGlzS2V5LnB1c2goaXRlbSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdG90YWwgY291bnQgcmVjb3JkcyBpbiBncm91cFxyXG4gICAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0IGRhdGFcclxuICAgICAqIEBwYXJhbSBjb3VudEZpZWxkIGZpZWxkIGNvbnRhaW5lZCBjb3VudCBvZiBhbGwgcmVjb3Jkc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFnZ3JlZ2F0ZUxpc3QgPSAocm93RGF0YTogYW55W10sIGNvdW50RmllbGQ6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgIHZhciByZXN1bHQ6YW55ID0ge31cclxuICAgICAgcm93RGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICBpZiAoY291bnRGaWVsZCAmJiByb3dbY291bnRGaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgdG90YWxDb3VudCA9IChyZXN1bHRbY291bnRGaWVsZF0gfHwgMCkgKyAocm93W2NvdW50RmllbGRdIHx8IDApXHJcbiAgICAgICAgICBkZWxldGUgcm93W2NvdW50RmllbGRdXHJcbiAgICAgICAgICByZXN1bHRbY291bnRGaWVsZF0gPSB0b3RhbENvdW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24ocmVzdWx0LCByb3cpXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICAgKiBDYWxjdWxhdGUgZGlzdGluY3QgdmFsdWVzIGZvciBpbnB1dCBmaWVsZCBmcm9tIE9kYXRhIGFwaVxyXG4gICAgICAgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIG9mIHRoZSByb3cgdG8gZ2V0IHRoZSBjZWxscyBkYXRhIGZyb20gXHJcbiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gZm9yIHJldHVybiBkaXN0aW5jdCB2YWx1ZXMgZm9yIGlucHV0IGZpZWxkXHJcbiAgICAgICAqIEBwYXJhbSBiZWZvcmVSZXF1ZXN0IFRoZSBmdW5jdGlvbiBmb3IgY3VzdG9taXplIHJlcXVlc3RcclxuICAgICAgICogQGV4YW1wbGUgXHJcbiAgICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAqICBjb25zdCBzZXRGaWx0ZXJWYWx1ZXNGdW5jUGFyYW1zID0gcGFyYW1zID0+IHtcclxuICAgICAgICogICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgICAqICAgIGNvbnN0IGNvbCA9IHBhcmFtcy5jb2xEZWYuZmllbGRcclxuICAgICAgICogICAgY29uc3Qgc3RvcmVOYW1lID0gbWUuZ2V0U3RvcmVOYW1lKGNvbClcclxuICAgICAgICogICAgY29uc3QgY2FsbGJhY2sgPSBkYXRhID0+IHtcclxuICAgICAgICogICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgKiAgICAgICAgbWUuc2V0U3RhdGUoeyBbc3RvcmVOYW1lXTogZGF0YSB9KVxyXG4gICAgICAgKiAgICAgICAgcGFyYW1zLnN1Y2Nlc3MoZGF0YSlcclxuICAgICAgICogICAgICB9XHJcbiAgICAgICAqICAgIH1cclxuICAgICAgICogICAgb2RhdGFQcm92aWRlckluc3RhbmNlLmdldEZpbHRlclZhbHVlc1BhcmFtcyhwYXJhbXMuY29sRGVmLmZpZWxkLCBjYWxsYmFjaylcclxuICAgICAgICogIH1cclxuICAgICAgICogXHJcbiAgICAgICAqIC8vLy4uLi5cclxuICAgICAgICogICAgICA8QWdHcmlkQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ9XCJwcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lPXsnUFJPRFVDVCd9XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyPVwiYWdTZXRDb2x1bW5GaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJvd0dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlUGl2b3RcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVSb3dHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcz17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBzZXRGaWx0ZXJWYWx1ZXNGdW5jUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Um93c0FjdGlvbjogJ2tlZXAnXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXJQYXJhbXM9e3tjYXNlU2Vuc2l0aXZlOiB0cnVlfX1cclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICogPC9jb2RlPjwvcHJlPlxyXG4gICAgICAgKi9cclxuICAgIGdldEZpbHRlclZhbHVlc1BhcmFtcyA9IChcclxuICAgICAgZmllbGQ6IHN0cmluZyxcclxuICAgICAgY2FsbGJhY2s6IChkYXRhOiBhbnlbXSkgPT4gdm9pZCxcclxuICAgICAgYmVmb3JlUmVxdWVzdDogKG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRGdWxsKSA9PiB2b2lkIHwgdW5kZWZpbmVkXHJcbiAgICApOiB2b2lkID0+IHtcclxuICAgICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRGdWxsID0ge1xyXG4gICAgICAgIGFwcGx5OiBbYGdyb3VwYnkoKCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoZmllbGQpfSkpYF0sXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgICBiZWZvcmVSZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgIH1cclxuICAgICAgbWUuY2FsbEFwaShtZS50b1F1ZXJ5KG9wdGlvbnMpKS50aGVuKCh4KSA9PiB7XHJcbiAgICAgICAgaWYgKHgpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZXMgPSBtZS5nZXRPZGF0YVJlc3VsdCh4KVxyXG4gICAgICAgICAgY2FsbGJhY2sodmFsdWVzLm1hcCgoeTphbnkpID0+IHlbZmllbGRdKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIERldGVjdCBpcyBzdHJpbmcgdmFsdWVcclxuICAgICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBpc1N0clZhbCA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXHJcbiAgICAvKipcclxuICAgICAqIEV4dGFydGMgdmFsdWVzIGZyb20gb2RhdGEgcmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldE9kYXRhUmVzdWx0ID0gKHJlc3BvbnNlOiBhbnkpOiBhbnkgPT5cclxuICAgICAgQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IHJlc3BvbnNlLnZhbHVlXHJcbiAgICAvKipcclxuICAgICAqIEVuZG9jaW5nIGNvbHVtbiBuYW1lIHRvIG9kYXRhIG5vdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0gY29sTmFtZSBjb2x1bW4gbmFtZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFdyYXBDb2x1bW5OYW1lID0gKGNvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PlxyXG4gICAgICBjb2xOYW1lID8gcmVwbGFjZUFsbChjb2xOYW1lLCAnLicsICcvJykgOiAnJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBncmlkIGNhbGxzIHRoaXMgdG8gZ2V0IHJvd3MgZm9yIElTZXJ2ZXJTaWRlRGF0YXNvdXJjZVxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gICAgICogZ3JpZCBjYWxscyB0aGlzIHRvIGdldCByb3dzIGltcGxlbWVudFxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRSb3dzKHBhcmFtczogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpOiB2b2lkIHtcclxuICAgICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgIGNvbnN0IGNoaWxkQ291bnQgPSBtZS5ncm91cENvdW50RmllbGROYW1lXHJcbiAgICAgIGNvbnN0IGlzU2VydmVyTW9kZSA9ICdyZXF1ZXN0JyBpbiBwYXJhbXNcclxuICAgICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICAgID8gKHBhcmFtcyBhcyBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpLnJlcXVlc3RcclxuICAgICAgICA6IChwYXJhbXMgYXMgSUdldFJvd3NQYXJhbXMpXHJcbiAgICAgIGNvbnN0IHJlcXVlc3RTcnYgPSByZXF1ZXN0IGFzIElTZXJ2ZXJTaWRlR2V0Um93c1JlcXVlc3RcclxuICBcclxuICAgICAgY29uc3QgcGl2b3RBY3RpdmUgPSAhaXNTZXJ2ZXJNb2RlXHJcbiAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgIDogcmVxdWVzdFNydi5waXZvdE1vZGUgJiZcclxuICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RDb2xzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgIHJlcXVlc3RTcnYudmFsdWVDb2xzLmxlbmd0aCA+IDBcclxuICBcclxuICAgICAgaWYgKCFwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgIGxldCBmbiA9IChwYXJhbXMgYXMgYW55KS5jb2x1bW5BcGkuc2V0UGl2b3RSZXN1bHRDb2x1bW5zXHJcbiAgICAgICAgaWYgKGZuICE9IG51bGwpIHtcclxuICAgICAgICAgIC8vIGlmICgocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLmlzUGl2b3RNb2RlKCkpIHtcclxuICAgICAgICAgIDsocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFBpdm90UmVzdWx0Q29sdW1ucyhbXSlcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgOyhwYXJhbXMgYXMgYW55KS5jb2x1bW5BcGkuc2V0U2Vjb25kYXJ5Q29sdW1ucyhbXSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IG1lLmdldE9kYXRhT3B0aW9ucyhwYXJhbXMpXHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gbWUudG9RdWVyeShvcHRpb25zKVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgb3B0aW9ucy5za2lwID09PSAwICYmXHJcbiAgICAgICAgKCFpc1NlcnZlck1vZGUgfHxcclxuICAgICAgICAgIChpc1NlcnZlck1vZGUgJiZcclxuICAgICAgICAgICAgKHBhcmFtcyBhcyBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpLnBhcmVudE5vZGUubGV2ZWwgPT09IC0xKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgbWUuY2FuY2VsUHJvbWljZS5jYW5jZWwoKVxyXG4gICAgICAgIG1lLmNhbmNlbFByb21pY2UgPSBtZS5jcmVhdGVDYW5jZWxhYmxlUHJvbWlzZSgpXHJcbiAgICAgIH1cclxuICAgICAgUHJvbWlzZS5yYWNlKFttZS5jYW5jZWxQcm9taWNlLnByb21pc2UsIG1lLmNhbGxBcGkocXVlcnkpXSkudGhlbihcclxuICAgICAgICBhc3luYyAoeCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF4KSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5mYWlsQ2FsbGJhY2soKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbWUuZ2V0T2RhdGFSZXN1bHQoeClcclxuICAgICAgICAgICAgaWYgKCFwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgIGlmICghb3B0aW9ucy5hcHBseSkge1xyXG4gICAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCB2YWx1ZXMsIHhbJ0BvZGF0YS5jb3VudCddIHx8IHhbMF0udG90YWxDb3VudClcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyTG9hZERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckxvYWREYXRhKG9wdGlvbnMsIHZhbHVlcywgeFsnQG9kYXRhLmNvdW50J10gfHwgeFswXS50b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY291bnQgPSB2YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IG9wdGlvbnMudG9wICYmIG9wdGlvbnMuc2tpcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBJZiByZWNlaXZlZCBncm91cGVkIGNvdW50IG9mIHZhbHVlIGxhcmdlIHRoYW4gcmVxdWVzdGVkIHRoZW4gcmVxdWVzdCB0b3RhbCBjb3VudCBvZiB2YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgbWUuY2FsbEFwaShxdWVyeSArICcvYWdncmVnYXRlKCRjb3VudCBhcyBjb3VudCknKS50aGVuKCh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBtZS5nZXRPZGF0YVJlc3VsdCh5KVswXS5jb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgdmFsdWVzLCBjb3VudClcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXAgIT0gbnVsbCAmJiBvcHRpb25zLnNraXAgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCB2YWx1ZXMsIGNvdW50KVxyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5hZnRlckxvYWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckxvYWREYXRhKG9wdGlvbnMsIHZhbHVlcywgY291bnQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSBtZS5nZXRPZGF0YVJlc3VsdCh4KVxyXG4gICAgICAgICAgICAgIC8vIENoZWNrIGNvdW50XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcm93RGF0YS5sZW5ndGggPT09IG9wdGlvbnMudG9wICYmXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNraXAgPT09IDAgJiZcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVvZiA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWVvZikge1xyXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnNraXAgKz0gb3B0aW9ucy50b3AgfHwgMFxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBzdWJRdWVyeSA9IG1lLnRvUXVlcnkob3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Um93RGF0YSA9IGF3YWl0IG1lLmNhbGxBcGkoc3ViUXVlcnkpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmV3Um93RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mYWlsQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVvZiA9IG5ld1Jvd0RhdGEubGVuZ3RoICE9PSBvcHRpb25zLnRvcFxyXG4gICAgICAgICAgICAgICAgICByb3dEYXRhID0gcm93RGF0YS5jb25jYXQobmV3Um93RGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgcGl2b3RSZXN1bHQgPSBtZS5nZXRQaXZvdChcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RDb2xzLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnZhbHVlQ29scyxcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEsXHJcbiAgICAgICAgICAgICAgICBjaGlsZENvdW50XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJvd0RhdGEgPSBwaXZvdFJlc3VsdC5kYXRhXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJ5Q29sRGVmcyA9IHBpdm90UmVzdWx0LnNlY29uZGFyeUNvbERlZnNcclxuICAgICAgICAgICAgICByb3dEYXRhID0gbWUuYnVpbGRHcm91cHNGcm9tRGF0YShcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRDb3VudFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBjb25zdCB0b3RhbENvdW50ID1cclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICA/IHJvd0RhdGEubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgIDogcm93RGF0YS5sZW5ndGggPT09IG9wdGlvbnMudG9wXHJcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICA6IHJvd0RhdGEubGVuZ3RoXHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRvdGFsQ291bnQgPiAob3B0aW9ucy50b3AgfHwgMCkpIHtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnN0IHNlcnZlclNpZGVCbG9jayA9IChwYXJhbXMgYXMgYW55KS5wYXJlbnROb2RlLnJvd01vZGVsXHJcbiAgICAgICAgICAgICAgLy8gICAgIC5yb3dOb2RlQmxvY2tMb2FkZXIuYmxvY2tzWzBdO1xyXG4gICAgICAgICAgICAgIC8vICAgc2VydmVyU2lkZUJsb2NrLnJvd05vZGVDYWNoZVBhcmFtcy5ibG9ja1NpemUgPSB0b3RhbENvdW50O1xyXG4gICAgICAgICAgICAgIC8vICAgc2VydmVyU2lkZUJsb2NrLmVuZFJvdyA9IHNlcnZlclNpZGVCbG9jay5zdGFydFJvdyArIHRvdGFsQ291bnQ7XHJcbiAgICAgICAgICAgICAgLy8gICBzZXJ2ZXJTaWRlQmxvY2suY3JlYXRlUm93Tm9kZXMoKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCByb3dEYXRhLCB0b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyTG9hZERhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJMb2FkRGF0YShvcHRpb25zLCByb3dEYXRhLCB0b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVxdWVzdFNydi5ncm91cEtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVTZXRTZWNvbmRhcnlDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyhzZWNvbmRhcnlDb2xEZWZzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGZuID0gKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnNcclxuICAgICAgICAgICAgICAgIGlmIChmbikge1xyXG4gICAgICAgICAgICAgICAgICA7KHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmc1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA7KHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRTZWNvbmRhcnlDb2x1bW5zKHNlY29uZGFyeUNvbERlZnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBtZS5zZXRSZXN1bHQocGFyYW1zLCBpc1NlcnZlck1vZGUsIFtdLCAwKVxyXG4gICAgICAgICAgaWYgKHRoaXMuc2V0RXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIsIHBhcmFtcylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHJlc3VsdFxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gaXNTZXJ2ZXJNb2RlIGRldGVjdCB0eXBlIG9mIHBhcmFtc1xyXG4gICAgICogQHBhcmFtIHJvd3NUaGlzQmxvY2sgZGF0YSBvZiB0aGUgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHJvd0NvdW50IGNvdW50IG9mIHRvdGFsIHJlc3VsdFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldFJlc3VsdCA9IChcclxuICAgICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyxcclxuICAgICAgaXNTZXJ2ZXJNb2RlOiBib29sZWFuLFxyXG4gICAgICByb3dzVGhpc0Jsb2NrOiBhbnlbXSxcclxuICAgICAgcm93Q291bnQ/OiBudW1iZXJcclxuICAgICk6IHZvaWQgPT4ge1xyXG4gICAgICBpZiAoaXNTZXJ2ZXJNb2RlKSB7XHJcbiAgICAgICAgOyhwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5zdWNjZXNzKHtcclxuICAgICAgICAgIHJvd0RhdGE6IHJvd3NUaGlzQmxvY2ssXHJcbiAgICAgICAgICByb3dDb3VudDogcm93Q291bnQsXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICA7KHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcykuc3VjY2Vzc0NhbGxiYWNrKHJvd3NUaGlzQmxvY2ssIHJvd0NvdW50KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIG9kYXRhIG9wdGlvbnMgZm9yIGJ1aWxkIHF1ZXJ5IGZyb20gYWctZ3JpZCByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgZ2V0T2RhdGFPcHRpb25zID0gKFxyXG4gICAgICBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zXHJcbiAgICApOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCA9PiB7XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBjb25zdCBvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCA9IHt9XHJcbiAgICAgIGNvbnN0IGlzU2VydmVyTW9kZSA9ICdyZXF1ZXN0JyBpbiBwYXJhbXNcclxuICAgICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICAgID8gKHBhcmFtcyBhcyBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpLnJlcXVlc3RcclxuICAgICAgICA6IChwYXJhbXMgYXMgSUdldFJvd3NQYXJhbXMpXHJcbiAgICAgIGNvbnN0IGNoaWxkQ291bnQgPSBtZS5ncm91cENvdW50RmllbGROYW1lXHJcbiAgICAgIGlmICh0aGlzLmJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLmJlZm9yZVJlcXVlc3Qob3B0aW9ucywgdGhpcywgcmVxdWVzdClcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVxdWVzdC5zb3J0TW9kZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNvcnQgPSBvcHRpb25zLnNvcnQgfHwgW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBjb2wgPSByZXF1ZXN0LnNvcnRNb2RlbFtpXVxyXG4gICAgICAgICAgbGV0IGNvbE5hbWUgPSBtZS5nZXRXcmFwQ29sdW1uTmFtZShjb2wuY29sSWQpXHJcbiAgICAgICAgICBpZiAoY29sLnNvcnQgIT09ICdhc2MnKSB7XHJcbiAgICAgICAgICAgIGNvbE5hbWUgKz0gJyBkZXNjJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc29ydC5wdXNoKGNvbE5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMuc29ydCA9IHNvcnRcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlciB8fCBbXVxyXG4gICAgICBmb3IgKGNvbnN0IGNvbE5hbWUgaW4gcmVxdWVzdC5maWx0ZXJNb2RlbCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmZpbHRlck1vZGVsLmhhc093blByb3BlcnR5KGNvbE5hbWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBjb2wgPSByZXF1ZXN0LmZpbHRlck1vZGVsW2NvbE5hbWVdXHJcbiAgICAgICAgICBsZXQgY29sRmlsdGVyID0gJydcclxuICAgICAgICAgIGlmICghY29sLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbEZpbHRlciA9IG1lLmdldEZpbHRlck9kYXRhKGNvbE5hbWUsIGNvbClcclxuICAgICAgICAgICAgaWYgKGNvbEZpbHRlcikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5wdXNoKGNvbEZpbHRlcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IG1lLmdldEZpbHRlck9kYXRhKGNvbE5hbWUsIGNvbC5jb25kaXRpb24xKVxyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24yID0gbWUuZ2V0RmlsdGVyT2RhdGEoY29sTmFtZSwgY29sLmNvbmRpdGlvbjIpXHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24xICYmIGNvbmRpdGlvbjIpIHtcclxuICAgICAgICAgICAgICBjb2xGaWx0ZXIgPSBgKCR7Y29uZGl0aW9uMX0gJHtjb2wub3BlcmF0b3IudG9Mb3dlckNhc2UoKX0gJHtjb25kaXRpb24yfSlgXHJcbiAgICAgICAgICAgICAgZmlsdGVyLnB1c2goY29sRmlsdGVyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCBwaXZvdEFjdGl2ZSA9IGZhbHNlXHJcbiAgXHJcbiAgICAgIGNvbnN0IGFwcGx5ID0gb3B0aW9ucy5hcHBseSB8fCBbXVxyXG4gICAgICBpZiAoaXNTZXJ2ZXJNb2RlKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFNydiA9IHJlcXVlc3QgYXMgSVNlcnZlclNpZGVHZXRSb3dzUmVxdWVzdFxyXG4gICAgICAgIHBpdm90QWN0aXZlID1cclxuICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RNb2RlICYmXHJcbiAgICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICByZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGggPiAwXHJcbiAgICAgICAgaWYgKHJlcXVlc3RTcnYucm93R3JvdXBDb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlckdyb3VwQnk6IHN0cmluZ1tdID0gW11cclxuICAgICAgICAgIGlmIChyZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGggPCByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy8gSWYgcmVxdWVzdCBvbmx5IGdyb3Vwc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWUgPSByZXF1ZXN0U3J2Lmdyb3VwS2V5c1tpZHhdXHJcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29sc1tpZHhdLmZpZWxkXHJcbiAgICAgICAgICAgICAgKX0gZXEgJHtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKSArXHJcbiAgICAgICAgICAgICAgICBtZS5lbmNvZGUoY29sVmFsdWUpICtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKVxyXG4gICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICAgZmlsdGVyR3JvdXBCeS5wdXNoKGNvbmRpdGlvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZmlsdGVyR3JvdXBCeS5sZW5ndGggPiAwIHx8IGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVycyBtdXN0IGJ5IGZpcnN0XHJcbiAgICAgICAgICAgICAgYXBwbHkucHVzaChgZmlsdGVyKCR7ZmlsdGVyR3JvdXBCeS5jb25jYXQoZmlsdGVyKS5qb2luKCcgYW5kICcpfSlgKVxyXG4gICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZTogc3RyaW5nW10gPSBbXVxyXG4gICAgICAgICAgICBpZiAoY2hpbGRDb3VudCkge1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZS5wdXNoKG1lLm9kYXRhQWdncmVnYXRpb24uY291bnQoY2hpbGRDb3VudCkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTcnYudmFsdWVDb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZSA9IHJlcXVlc3RTcnYudmFsdWVDb2xzW2lkeF1cclxuICAgICAgICAgICAgICAgIGNvbFZhbHVlLmFnZ0Z1bmMgJiZcclxuICAgICAgICAgICAgICAgICAgYWdncmVnYXRlLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgbWUub2RhdGFBZ2dyZWdhdGlvbltjb2xWYWx1ZS5hZ2dGdW5jXShcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmdldFdyYXBDb2x1bW5OYW1lKGNvbFZhbHVlLmZpZWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZ3JvdXBzID0gW1xyXG4gICAgICAgICAgICAgIG1lLmdldFdyYXBDb2x1bW5OYW1lKFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHNbcmVxdWVzdFNydi5ncm91cEtleXMubGVuZ3RoXS5maWVsZFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMuc29ydCB8fCBbXVxyXG4gICAgICAgICAgICBjb25zdCBzb3J0Q29sT25seSA9IHNvcnQubWFwKCh4KSA9PiB4LnNwbGl0KCcgJylbMF0pXHJcbiAgICAgICAgICAgIGlmIChwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgIGdyb3VwcyA9IGdyb3Vwcy5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5tYXAoKHgpID0+IG1lLmdldFdyYXBDb2x1bW5OYW1lKHguZmllbGQpKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBncm91cHMuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRDb2xPbmx5LmluZGV4T2YoeCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNvcnQucHVzaCh4KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0ID0gc29ydFxyXG4gICAgICAgICAgICBhcHBseS5wdXNoKFxyXG4gICAgICAgICAgICAgIGBncm91cGJ5KCgke2dyb3Vwcy5qb2luKCcsJyl9KSR7XHJcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGUubGVuZ3RoID4gMCA/IGAsYWdncmVnYXRlKCR7YWdncmVnYXRlLmpvaW4oJywnKX0pYCA6ICcnXHJcbiAgICAgICAgICAgICAgfSlgXHJcbiAgICAgICAgICAgIClcclxuICBcclxuICAgICAgICAgICAgb3B0aW9ucy5hcHBseSA9IGFwcGx5XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNvcnQgJiYgb3B0aW9ucy5zb3J0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBvcHRpb25zLnNvcnQgPSBvcHRpb25zLnNvcnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IGdyb3Vwcy5pbmRleE9mKHguc3BsaXQoJyAnKVswXSkgPj0gMFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkZWxldGUgb3B0aW9ucy5zb3J0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgcmVxdWVzdCByb3dEYXRhIGJ5IGdyb3VwIGZpbHRlclxyXG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWUgPSByZXF1ZXN0U3J2Lmdyb3VwS2V5c1tpZHhdXHJcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29sc1tpZHhdLmZpZWxkXHJcbiAgICAgICAgICAgICAgKX0gZXEgJHtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKSArXHJcbiAgICAgICAgICAgICAgICBtZS5lbmNvZGUoY29sVmFsdWUpICtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKVxyXG4gICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICAgZmlsdGVyLnB1c2goY29uZGl0aW9uKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyID0gZmlsdGVyXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwcGx5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBvcHRpb25zLmFwcGx5ID0gYXBwbHlcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5leHBhbmRcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5zZWxlY3RcclxuICAgICAgICAvLyBvcHRpb25zLnNvcnQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIG9wdGlvbnMuc2tpcCA9IHJlcXVlc3Quc3RhcnRSb3dcclxuICAgICAgb3B0aW9ucy50b3AgPSAocmVxdWVzdC5lbmRSb3cgfHwgMCkgLSAocmVxdWVzdC5zdGFydFJvdyB8fCAwKVxyXG4gIFxyXG4gICAgICBpZiAoIW9wdGlvbnMuYXBwbHkgJiYgb3B0aW9ucy5za2lwID09PSAwKSB7XHJcbiAgICAgICAgb3B0aW9ucy5jb3VudCA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3B0aW9uc1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBvZGF0YSBxdWVyeSBmcm9tIGFnLWdyaWQgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGdldE9kYXRhUXVlcnkgPSAocGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyk6IHN0cmluZyA9PlxyXG4gICAgICB0aGlzLnRvUXVlcnkodGhpcy5nZXRPZGF0YU9wdGlvbnMocGFyYW1zKSlcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0IGNsYXNzIE9kYXRhUHJvdmlkZXJDbGllbnQgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXRSb3dzKHBhcmFtczogSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKSB7XHJcbiAgICAgIHN1cGVyLmdldFJvd3MocGFyYW1zKVxyXG4gICAgfVxyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgT2RhdGFTZXJ2ZXJTaWRlUHJvdmlkZXIgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXRSb3dzKHBhcmFtczogSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKTogdm9pZCB7XHJcbiAgICAgIHN1cGVyLmdldFJvd3MocGFyYW1zKVxyXG4gICAgfVxyXG4gIH0iXX0=
|
|
769
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0RhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2hlbHBlcnMvb0RhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQXNHcEMsTUFBTSxPQUFPLGFBQWE7SUFnR3hCLFlBQVksT0FBNkI7UUEzRnpDOzs7V0FHRztRQUNILHdCQUFtQixHQUFXLFlBQVksQ0FBQTtRQUMxQzs7O1dBR0c7UUFDSCxnQ0FBMkIsR0FBWSxLQUFLLENBQUE7UUE0RzVDLGtDQUFrQztRQUNsQyw0QkFBdUIsR0FBRyxHQUFzQixFQUFFO1lBQ2hELElBQUksTUFBVSxDQUFBO1lBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sR0FBRyxNQUFNLENBQUE7WUFDakIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2xCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTTthQUNQLENBQUE7UUFDSCxDQUFDLENBQUE7UUFDRCw0QkFBNEI7UUFDNUIsa0JBQWEsR0FBTztZQUNsQixVQUFVO1lBQ1YsTUFBTSxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBVSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sTUFBTSxFQUFFO1lBQ3RFLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRTtZQUN4RSxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxNQUFNLEVBQUU7WUFDeEUsZUFBZSxF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LHlCQUF5QixFQUFFOzRCQUNsQyxJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTt5QkFDakQ7d0JBQ0QsSUFBSSxFQUFFLEdBQUksTUFBYyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQTt3QkFDeEQsSUFBSSxFQUFFLEVBQUU7NEJBQ04sQ0FBQzs0QkFBQyxNQUFjLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUM5QyxnQkFBZ0IsQ0FDakIsQ0FBQTt5QkFDRjs2QkFBTTs0QkFDTCxDQUFDOzRCQUFDLE1BQWMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTt5QkFDakU7cUJBQ0Y7aUJBQ0Y7YUFDRjtRQUNILENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO2FBQzNCO1FBQ0gsQ0FBQyxDQUNGLENBQUE7SUFDSCxDQUFDO0NBNkxGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFDcEMsT0FBTyxDQUFDLE1BQWdDO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdkIsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGFBQWE7SUFDeEMsT0FBTyxDQUFDLE1BQWdDO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIElHZXRSb3dzUGFyYW1zLFxyXG4gICAgQ29sRGVmLFxyXG4gICAgQ29sR3JvdXBEZWYsXHJcbiAgICBDb2x1bW5WTyxcclxuICAgIElTZXJ2ZXJTaWRlR2V0Um93c1JlcXVlc3QsXHJcbiAgICBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMsXHJcbiAgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSdcclxuICBcclxuICBpbXBvcnQge1xyXG4gICAgT2RhdGFRdWVyeUV4dGVuZEZ1bGwsXHJcbiAgICBPZGF0YVF1ZXJ5RXh0ZW5kT3B0aW9ucyxcclxuICAgIE9kYXRhUXVlcnlPcHRpb25zLFxyXG4gICAgUGl2b3RSZXN1bHREYXQsXHJcbiAgfSBmcm9tICcuL3R5cGVzJ1xyXG4gIFxyXG4gIGltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuL3V0aWxzJ1xyXG4gIGV4cG9ydCBkZWNsYXJlIGNsYXNzIE9kYXRhUHJvdmlkZXJPcHRpb25zIHtcclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gZm9yIGNhbGwgb2RhdGEgYXBpXHJcbiAgICAgKi9cclxuICAgIGNhbGxBcGk6IChxdWVyeTogc3RyaW5nKSA9PiBQcm9taXNlPGFueT5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiBmaWVsZCBjb250YWluIGNvdW50IG9mIHJlY29yZCByZXN1bHRzIGluIGdyb3VwaW5nIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKiBAZGVmYXVsdCBjaGlsZENvdW50XHJcbiAgICAgKi9cclxuICAgIGdyb3VwQ291bnRGaWVsZE5hbWU/OiBzdHJpbmdcclxuICAgIC8qKlxyXG4gICAgICogVXNlIGluIG9kYXRhIGJ1aWxkIHF1ZXJ5XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZvciBleHRlbmQgb2RhdGEgcXVlcnkgb3B0aW9ucyBmb3IgaW1wbGVtZW50IHVzZXIgbG9naWNcclxuICAgICAqL1xyXG4gICAgYmVmb3JlUmVxdWVzdD86IChcclxuICAgICAgb3B0aW9uczogT2RhdGFRdWVyeU9wdGlvbnMsXHJcbiAgICAgIHByb3ZpZGVyOiBPZGF0YVByb3ZpZGVyLFxyXG4gICAgICByZXF1ZXN0OiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1JlcXVlc3RcclxuICAgICkgPT4gdm9pZFxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxiYWNrIGZvciBwaXZvdCBvciBncm91cCBmb3IgYXBsbHkgY29sdW1uIGFnLWdyaWQgc2V0dGluZ3NcclxuICAgICogQGV4YW1wbGVcclxuICAgICogPHByZT48Y29kZT5cclxuICAgICogYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyA9IHNlY29uZGFyeUNvbHVtbnMgPT4ge1xyXG4gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vjb25kYXJ5Q29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgY29uc3QgY29sID0gc2Vjb25kYXJ5Q29sdW1uc1tpXVxyXG4gICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xyXG4gICAgICAgICBiZWZvcmVTZXRTZWNvbmRhcnlDb2x1bW5zKGNvbC5jaGlsZHJlbilcclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIC8vQXBsbHkgbmV3IHNldHRpbmcgZm9yIGdyb3VwIGR5bmNhbWljIGNyZWF0ZWQgY29sdW1uXHJcbiAgICAgICAgIC8vIGNvbC5jZWxsQ2xhc3NSdWxlcyA9IFxyXG4gICAgICAgICAvLyBjb2wudmFsdWVGb3JtYXR0ZXIgPSBcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgIH1cclxuICAgICogPC9wcmU+PC9jb2RlPlxyXG4gICAgKi9cclxuICAgIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnM/OiAoXHJcbiAgICAgIHNlY29uZGFyeUNvbERlZnM6IChDb2xEZWYgfCBDb2xHcm91cERlZilbXVxyXG4gICAgKSA9PiB2b2lkXHJcbiAgICAvKipcclxuICAgICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBsb2FkIGRhdGFcclxuICAgICogQHBhcmFtIG9wdGlvbnMgb2RhdGEgcHJvdmlkZXIgb3B0aW9uc1xyXG4gICAgKiBAcGFyYW0gcm93RGF0YSBkYXRhIGZvciBhZy1ncmlkXHJcbiAgICAqIEBwYXJhbSB0b3RhbENvdW50IHRvdGFsIGNvdW50IHJlY29yZHNcclxuICAgICogXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGFmdGVyTG9hZERhdGEgPSAob3B0aW9ucywgcm93RGF0YSwgdG90YWxDb3VudCkgPT4ge1xyXG4gICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2tpcCA9PT0gMCAmJiByb3dEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgIGdyaWRBcGkuY29sdW1uQ29udHJvbGxlci5hdXRvU2l6ZUFsbENvbHVtbnMoKVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAqIDwvY29kZT48L3ByZT5cclxuICAgICovXHJcbiAgICBhZnRlckxvYWREYXRhPzogKFxyXG4gICAgICBvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kT3B0aW9ucyxcclxuICAgICAgcm93RGF0YTogYW55W10sXHJcbiAgICAgIHRvdGFsQ291bnQ6IG51bWJlclxyXG4gICAgKSA9PiB2b2lkXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZvciBjYXRjaCBlcnJvclxyXG4gICAgICovXHJcbiAgICBzZXRFcnJvcj86IChcclxuICAgICAgZXJyb3I6IGFueSxcclxuICAgICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtc1xyXG4gICAgKSA9PiB2b2lkXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2YgY29sdW1ucyBieSBpZC9maWVsZCBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIGJ1aWxkIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIGNhc2VTZW5zaXRpdmVDb2x1bW5zPzogc3RyaW5nW11cclxuICAgIC8qKlxyXG4gICAgICogVXNlIGZvciBzcGVjaWZpZWQgY29sdW1uIGN1c3RvbSBmaWx0ZXIgaW1wbGVtZW50YXRpb25cclxuICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGN1c3RvbUZpbHRlcnM6IHtcclxuICAgICAgICAgICAgIFwiY3VzdG9tZXJcIjogKGNvbE5hbWUsY29sLGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcixwcm92aWRlcikgPT57XHJcbiAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5vZGF0YU9wZXJhdG9yLmluKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbC52YWx1ZXNcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAqL1xyXG4gICAgY3VzdG9tRmlsdGVycz86IHtcclxuICAgICAgW2luZGV4OiBzdHJpbmddOiAoXHJcbiAgICAgICAgY29sTmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGNvbDogYW55LFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhbixcclxuICAgICAgICBwcm92aWRlcjogT2RhdGFQcm92aWRlclxyXG4gICAgICApID0+IHN0cmluZ1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBkZWNsYXJlIGludGVyZmFjZSBDYW5jZWxhYmxlUHJvbWlzZSB7XHJcbiAgICBwcm9taXNlOiBQcm9taXNlPGFueT5cclxuICAgIGNhbmNlbDogKCkgPT4gdm9pZFxyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgT2RhdGFQcm92aWRlciBpbXBsZW1lbnRzIE9kYXRhUHJvdmlkZXJPcHRpb25zIHtcclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gZm9yIGNhbGwgb2RhdGEgYXBpXHJcbiAgICAgKi9cclxuICAgIGNhbGxBcGkhOiAocXVlcnk6IHN0cmluZykgPT4gUHJvbWlzZTxhbnk+XHJcbiAgICAvKipcclxuICAgICAqIE5hbWUgb2YgZmllbGQgY29udGFpbiBjb3VudCBvZiByZWNvcmQgcmVzdWx0cyBpbiBncm91cGluZyBvZGF0YSBxdWVyeVxyXG4gICAgICogQGRlZmF1bHQgY2hpbGRDb3VudFxyXG4gICAgICovXHJcbiAgICBncm91cENvdW50RmllbGROYW1lOiBzdHJpbmcgPSAnY2hpbGRDb3VudCdcclxuICAgIC8qKlxyXG4gICAgICogVXNlIGluIG9kYXRhIGJ1aWxkIHF1ZXJ5XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBmb3IgZXh0ZW5kIG9kYXRhIHF1ZXJ5IG9wdGlvbnMgZm9yIGltcGxlbWVudCB1c2VyIGxvZ2ljXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVJlcXVlc3Q6ICgoXHJcbiAgICAgICAgb3B0aW9uczogT2RhdGFRdWVyeU9wdGlvbnMsXHJcbiAgICAgICAgcHJvdmlkZXI6IE9kYXRhUHJvdmlkZXIsXHJcbiAgICAgICAgcmVxdWVzdDogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0XHJcbiAgICApID0+IHZvaWQpIHwgdW5kZWZpbmVkXHJcbiAgICAvKipcclxuICAgICAgKiBDYWxsYmFjayBmb3IgcGl2b3Qgb3IgZ3JvdXAgZm9yIGFwbGx5IGNvbHVtbiBhZy1ncmlkIHNldHRpbmdzXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKiA8cHJlPjxjb2RlPlxyXG4gICAgICAqIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMgPSBzZWNvbmRhcnlDb2x1bW5zID0+IHtcclxuICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vjb25kYXJ5Q29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICBjb25zdCBjb2wgPSBzZWNvbmRhcnlDb2x1bW5zW2ldXHJcbiAgICAgICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICBiZWZvcmVTZXRTZWNvbmRhcnlDb2x1bW5zKGNvbC5jaGlsZHJlbilcclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAvL0FwbGx5IG5ldyBzZXR0aW5nIGZvciBncm91cCBkeW5jYW1pYyBjcmVhdGVkIGNvbHVtblxyXG4gICAgICAgICAgIC8vIGNvbC5jZWxsQ2xhc3NSdWxlcyA9IFxyXG4gICAgICAgICAgIC8vIGNvbC52YWx1ZUZvcm1hdHRlciA9IFxyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgICAqIDwvcHJlPjwvY29kZT5cclxuICAgICAgKi9cclxuICAgIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnM6ICgoXHJcbiAgICAgICAgc2Vjb25kYXJ5Q29sRGVmczogKENvbERlZiB8IENvbEdyb3VwRGVmKVtdXHJcbiAgICApID0+IHZvaWQpIHwgdW5kZWZpbmVkXHJcbiAgICAvKipcclxuICAgICAgKiBDYWxsYmFjayBpbnZva2VkIGFmdGVyIGxvYWQgZGF0YVxyXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIG9kYXRhIHByb3ZpZGVyIG9wdGlvbnNcclxuICAgICAgKiBAcGFyYW0gcm93RGF0YSBkYXRhIGZvciBhZy1ncmlkXHJcbiAgICAgICogQHBhcmFtIHRvdGFsQ291bnQgdG90YWwgY291bnQgcmVjb3Jkc1xyXG4gICAgICAqIFxyXG4gICAgICAqIEBleGFtcGxlXHJcbiAgICAgICogPHByZT48Y29kZT5cclxuICAgICAgICAgICBhZnRlckxvYWREYXRhID0gKG9wdGlvbnMsIHJvd0RhdGEsIHRvdGFsQ291bnQpID0+IHtcclxuICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2tpcCA9PT0gMCAmJiByb3dEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgZ3JpZEFwaS5jb2x1bW5Db250cm9sbGVyLmF1dG9TaXplQWxsQ29sdW1ucygpXHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICogPC9jb2RlPjwvcHJlPlxyXG4gICAgICAqL1xyXG4gICAgYWZ0ZXJMb2FkRGF0YTogKChcclxuICAgICAgICBvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kT3B0aW9ucyxcclxuICAgICAgICByb3dEYXRhOiBhbnlbXSxcclxuICAgICAgICB0b3RhbENvdW50OiBudW1iZXJcclxuICAgICkgPT4gdm9pZCkgfCB1bmRlZmluZWRcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZm9yIGNhdGNoIGVycm9yXHJcbiAgICAgKi9cclxuICAgIHNldEVycm9yOiAoKFxyXG4gICAgICAgIGVycm9yOiBhbnksXHJcbiAgICAgICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtc1xyXG4gICAgKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IG9mIGNvbHVtbnMgYnkgaWQvZmllbGQgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBidWlsZCBvZGF0YSBxdWVyeVxyXG4gICAgICovXHJcbiAgICBjYXNlU2Vuc2l0aXZlQ29sdW1ucz86IHN0cmluZ1tdXHJcbiAgICAvKipcclxuICAgICAqIFVzZSBmb3Igc3BlY2lmaWVkIGNvbHVtbiBjdXN0b20gZmlsdGVyIGltcGxlbWVudGF0aW9uXHJcbiAgICAgKiA8cHJlPjxjb2RlPlxyXG4gICAgICAgICBjdXN0b21GaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICBcImN1c3RvbWVyXCI6IChjb2xOYW1lLGNvbCxpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIscHJvdmlkZXIpID0+e1xyXG4gICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXIub2RhdGFPcGVyYXRvci5pbihcclxuICAgICAgICAgICAgICAgIGNvbE5hbWUsXHJcbiAgICAgICAgICAgICAgICBjb2wudmFsdWVzXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgKi9cclxuICAgIGN1c3RvbUZpbHRlcnM/OiB7XHJcbiAgICAgIFtpbmRleDogc3RyaW5nXTogKFxyXG4gICAgICAgIGNvbE5hbWU6IHN0cmluZyxcclxuICAgICAgICBjb2w6IGFueSxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4sXHJcbiAgICAgICAgcHJvdmlkZXI6IE9kYXRhUHJvdmlkZXJcclxuICAgICAgKSA9PiBzdHJpbmdcclxuICAgIH1cclxuICAgIGNhbmNlbFByb21pY2U6IENhbmNlbGFibGVQcm9taXNlXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPZGF0YVByb3ZpZGVyT3B0aW9ucykge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICBpZiAodGhpcy5jYWxsQXBpID09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxBcGkgbXVzdCBiZSBzcGVjaWZpZWQnKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxsQXBpICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsQXBpIG11c3QgYmUgYSBmdW5jdGlvbicpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuYmVmb3JlUmVxdWVzdCAhPSBudWxsICYmXHJcbiAgICAgICAgdHlwZW9mIHRoaXMuYmVmb3JlUmVxdWVzdCAhPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICApIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JlZm9yZVJlcXVlc3QgbXVzdCBiZSBhIGZ1bmN0aW9uJylcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5hZnRlckxvYWREYXRhICE9IG51bGwgJiZcclxuICAgICAgICB0eXBlb2YgdGhpcy5hZnRlckxvYWREYXRhICE9PSAnZnVuY3Rpb24nXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYWZ0ZXJMb2FkRGF0YSBtdXN0IGJlIGEgZnVuY3Rpb24nKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNldEVycm9yICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuc2V0RXJyb3IgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldEVycm9yIG11c3QgYmUgYSBmdW5jdGlvbicpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYW5jZWxQcm9taWNlID0gdGhpcy5jcmVhdGVDYW5jZWxhYmxlUHJvbWlzZSgpXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipDcmVhdG9yIGEgY2FuY2VsYWJsZSBQcm9taXNlICovXHJcbiAgICBjcmVhdGVDYW5jZWxhYmxlUHJvbWlzZSA9ICgpOiBDYW5jZWxhYmxlUHJvbWlzZSA9PiB7XHJcbiAgICAgIGxldCBjYW5jZWw6YW55XHJcbiAgICAgIGNvbnN0IHByID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNhbmNlbCA9IHJlamVjdFxyXG4gICAgICB9KS5jYXRjaCgoKSA9PiB7fSlcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwcm9taXNlOiBwcixcclxuICAgICAgICBjYW5jZWwsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKk9kYXRhIHF1ZXJ5IG9wZXJhdGlvbnMgKi9cclxuICAgIG9kYXRhT3BlcmF0b3I6YW55ID0ge1xyXG4gICAgICAvLyBMb2dpY2FsXHJcbiAgICAgIGVxdWFsczogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PiBgJHtjb2x9IGVxICR7dmFsdWUxfWAsXHJcbiAgICAgIG5vdEVxdWFsOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gbmUgJHt2YWx1ZTF9YCxcclxuICAgICAgbGVzc1RoYW46IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCR7Y29sfSBsdCAke3ZhbHVlMX1gLFxyXG4gICAgICBsZXNzVGhhbk9yRXF1YWw6IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT5cclxuICAgICAgICBgJHtjb2x9IGxlICR7dmFsdWUxfWAsXHJcbiAgICAgIGdyZWF0ZXJUaGFuOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gZ3QgJHt2YWx1ZTF9YCxcclxuICAgICAgZ3JlYXRlclRoYW5PckVxdWFsOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7Y29sfSBnZSAke3ZhbHVlMX1gLFxyXG4gICAgICBpblJhbmdlOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nLCB2YWx1ZTI6IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAoJHtjb2x9IGdlICR7dmFsdWUxfSBhbmQgJHtjb2x9IGxlICR7dmFsdWUyfSlgLFxyXG4gICAgICAvLyBTdHJpbmdcclxuICAgICAgZXF1YWxzU3RyOiAoXHJcbiAgICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICAgICk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke3RoaXMuaWZUb2xvd2VyQ29sKFxyXG4gICAgICAgICAgY29sLFxyXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICAgKX0gZXEgJHt0aGlzLmlmVG9sb3dlcih2YWx1ZTEsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9YCxcclxuICAgICAgbm90RXF1YWxTdHI6IChcclxuICAgICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICAgKTogc3RyaW5nID0+XHJcbiAgICAgICAgYCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgICBjb2wsXHJcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICApfSBuZSAke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX1gLFxyXG4gICAgICBjb250YWluczogKFxyXG4gICAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgICApOiBzdHJpbmcgPT5cclxuICAgICAgICBgY29udGFpbnMoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSlgLFxyXG4gICAgICBub3RDb250YWluczogKFxyXG4gICAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgICApOiBzdHJpbmcgPT5cclxuICAgICAgICBgY29udGFpbnMoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSkgZXEgZmFsc2VgLFxyXG4gICAgICBzdGFydHNXaXRoOiAoXHJcbiAgICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICAgICk6IHN0cmluZyA9PlxyXG4gICAgICAgIGBzdGFydHN3aXRoKCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgICBjb2wsXHJcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICApfSwke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0pICBlcSB0cnVlYCxcclxuICAgICAgZW5kc1dpdGg6IChcclxuICAgICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICAgKTogc3RyaW5nID0+XHJcbiAgICAgICAgYGVuZHN3aXRoKCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgICBjb2wsXHJcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICApfSwke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0pICBlcSB0cnVlYCxcclxuICAgICAgaW5TdHI6IChcclxuICAgICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZXM6IHN0cmluZ1tdLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgICApOiBzdHJpbmcgPT5cclxuICAgICAgICBgJHt0aGlzLmlmVG9sb3dlckNvbChjb2wsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9IGluICgke3ZhbHVlc1xyXG4gICAgICAgICAgLm1hcChcclxuICAgICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgICAgYCcke3RoaXMuaWZUb2xvd2VyKHRoaXMuZW5jb2RlKHgpLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSdgXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuam9pbigpfSlgLFxyXG4gICAgICBpbjogKGNvbDogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKSA9PlxyXG4gICAgICAgIGAke2NvbH0gaW4gKCR7dmFsdWVzLm1hcCgoeCkgPT4gYCR7dGhpcy5lbmNvZGUoeCl9YCkuam9pbigpfSlgLFxyXG4gICAgICBub3RJbjogKGNvbDogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKSA9PlxyXG4gICAgICAgIGBub3QgKCR7Y29sfSBpbiAoJHt2YWx1ZXMubWFwKCh4KSA9PiBgJHt4fWApLmpvaW4oKX0pKWAsXHJcbiAgICAgIC8vIERhdGVcclxuICAgICAgdHJ1bmM6IChjb2w6IHN0cmluZyk6IHN0cmluZyA9PiBgZGF0ZSgke2NvbH0pYCxcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdG9sb3dlciBmb3IgY29sdW1uIGluIG9kYXRhIHN5bnRheFxyXG4gICAgICogQHBhcmFtIGNvbCBjb2x1bW4gbmFtZVxyXG4gICAgICogQHBhcmFtIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciBuZWVkIGFwcGx5IHRvbG93ZXJcclxuICAgICAqL1xyXG4gICAgaWZUb2xvd2VyQ29sID0gKGNvbDogc3RyaW5nLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4pOiBzdHJpbmcgPT5cclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyID8gY29sIDogYHRvbG93ZXIoJHtjb2x9KWBcclxuICBcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgdmFsdWVcclxuICAgICAqIEBwYXJhbSBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgIG5lZWQgYXBwbHkgdG9sb3dlclxyXG4gICAgICovXHJcbiAgICBpZlRvbG93ZXIgPSAodmFsdWU6IHN0cmluZywgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuKTogc3RyaW5nID0+XHJcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciA/IHZhbHVlIDogdmFsdWUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWVcclxuICAgIC8qKlxyXG4gICAgICogT2RhdGEgYWdncmVnYXRpb24gb3BlcmF0aW9uc1xyXG4gICAgICovXHJcbiAgICBvZGF0YUFnZ3JlZ2F0aW9uOmFueSA9IHtcclxuICAgICAgLy8gTG9naWNhbFxyXG4gICAgICBzdW06IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke2NvbH0gd2l0aCBzdW0gYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgICBtaW46IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke2NvbH0gd2l0aCBtaW4gYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgICBtYXg6IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke2NvbH0gd2l0aCBtYXggYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgICBhdmc6IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAke2NvbH0gd2l0aCBhdmVyYWdlIGFzICR7Y29sIHx8IGFzRmllbGR9YCxcclxuICAgICAgY291bnQ6IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICAgIGAkY291bnQgYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPZGF0YSBxdWVyeSBidWlsZGVyXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBwYXJhbWV0ZXIgZm9yIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIHRvUXVlcnkgPSAob3B0aW9uczogT2RhdGFRdWVyeUV4dGVuZEZ1bGwpOiBzdHJpbmcgPT4ge1xyXG4gICAgICBsZXQgcGF0aDogc3RyaW5nW10gPSBbXVxyXG4gICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgIHBhdGgucHVzaCgnJGNvdW50PXRydWUnKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnNraXApIHtcclxuICAgICAgICBwYXRoLnB1c2goYCRza2lwPSR7b3B0aW9ucy5za2lwfWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMudG9wKSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKGAkdG9wPSR7b3B0aW9ucy50b3B9YClcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5zb3J0ICYmIG9wdGlvbnMuc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKCckb3JkZXJieT0nICsgb3B0aW9ucy5zb3J0LmpvaW4oJywnKSlcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5maWx0ZXIgJiYgb3B0aW9ucy5maWx0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHBhdGgucHVzaCgnJGZpbHRlcj0nICsgb3B0aW9ucy5maWx0ZXIuam9pbignIGFuZCAnKSlcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5hcHBseSAmJiBvcHRpb25zLmFwcGx5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXRoLnB1c2goJyRhcHBseT0nICsgb3B0aW9ucy5hcHBseS5qb2luKCcvJykpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMuZXhwYW5kICYmIG9wdGlvbnMuZXhwYW5kLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXRoLnB1c2goJyRleHBhbmQ9JyArIG9wdGlvbnMuZXhwYW5kLmpvaW4oJywnKSlcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5zZWxlY3QgJiYgb3B0aW9ucy5zZWxlY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHBhdGgucHVzaCgnJHNlbGVjdD0nICsgb3B0aW9ucy5zZWxlY3Quam9pbignLCcpKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBxdWVyeTogc3RyaW5nID0gJydcclxuICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHF1ZXJ5ID0gJz8nICsgcGF0aC5qb2luKCcmJylcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcXVlcnlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkIHF1b3RlcyBmb3Igc3RyaW5nIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgc3RyaW5nIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGVuY29kZSA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+XHJcbiAgICAgIHRoaXMuaXNTdHJWYWwodmFsdWUpID8gcmVwbGFjZUFsbCh2YWx1ZSwgXCInXCIsIFwiJydcIikgOiB2YWx1ZVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25jdGF0IHRvIGRhdGUgYSB0aW1lIGZvciBjcmVhdGUgZGF0ZXRpbWUgZm9ybWF0IGZvciBvZGF0YSBxdWVyeVxyXG4gICAgICogQHBhcmFtIHZhbHVlIGRhdGUgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHRvRGF0ZVRpbWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHZhbHVlKVxyXG4gICAgICBpZiAoaXNOYU4oZHQuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGxcclxuICAgICAgY29uc3QgZHQxID0gbmV3IERhdGUoXHJcbiAgICAgICAgRGF0ZS5VVEMoZHQuZ2V0RnVsbFllYXIoKSwgZHQuZ2V0TW9udGgoKSwgZHQuZ2V0RGF0ZSgpKVxyXG4gICAgICApXHJcbiAgICAgIHJldHVybiBkdDEudG9JU09TdHJpbmcoKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbE5hbWUgY29sdW1uTmFtZVxyXG4gICAgICogQHJldHVybnMgaXMgQ2FzZVNlbnNpdGl2ZSBmb3IgY29sdW1uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0SXNOZWVkQ2FzZVNlbnNpdGl2ZSA9IChjb2xOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciAmJlxyXG4gICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZUNvbHVtbnMgJiZcclxuICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVDb2x1bW5zLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FzZVNlbnNpdGl2ZUNvbHVtbnMuaW5kZXhPZihjb2xOYW1lKSA+PSAwXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYWctZ3JpZCBjb2x1bW4gZmlsdGVyIHRvIG9kYXRhIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0gY29sTmFtZSBjb2x1bW5OYW1lXHJcbiAgICAgKiBAcGFyYW0gY29sIGFnLWdyaWQgY29sdW1uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0RmlsdGVyT2RhdGEgPSAoY29sTmFtZTogc3RyaW5nLCBjb2w6IGFueSk6IHN0cmluZyA9PiB7XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBjb25zdCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgPSBtZS5nZXRJc05lZWRDYXNlU2Vuc2l0aXZlKGNvbE5hbWUpXHJcbiAgICAgIGNvbnN0IGN1c3RvbUZpbHRlciA9IG1lLmN1c3RvbUZpbHRlcnMgJiYgbWUuY3VzdG9tRmlsdGVyc1tjb2xOYW1lXVxyXG4gICAgICBjb2xOYW1lID0gcmVwbGFjZUFsbChjb2xOYW1lLCAnLicsICcvJylcclxuICAgICAgY29sTmFtZSA9IG1lLmdldFdyYXBDb2x1bW5OYW1lKGNvbE5hbWUpXHJcbiAgICAgIGlmIChjdXN0b21GaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gY3VzdG9tRmlsdGVyKGNvbE5hbWUsIGNvbCwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyLCBtZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGNvbC5maWx0ZXJUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICByZXR1cm4gbWUub2RhdGFPcGVyYXRvcltjb2wudHlwZV0oY29sTmFtZSwgY29sLmZpbHRlciwgY29sLmZpbHRlclRvKVxyXG4gICAgICAgICAgY2FzZSAndGV4dCc6IHtcclxuICAgICAgICAgICAgbGV0IG9wZXJhdG9yTmFtZSA9IGNvbC50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1lLmVuY29kZShjb2wuZmlsdGVyKVxyXG4gICAgICAgICAgICAvLyBsZXQgZmlsdGVyVG8gPSBtZS5lbmNvZGUoY29sLmZpbHRlclRvKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIChvcGVyYXRvck5hbWUgPT09ICdlcXVhbHMnIHx8IG9wZXJhdG9yTmFtZSA9PT0gJ25vdEVxdWFsJykgJiZcclxuICAgICAgICAgICAgICAhaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIG9wZXJhdG9yTmFtZSArPSAnU3RyJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtZS5vZGF0YU9wZXJhdG9yW29wZXJhdG9yTmFtZV0oXHJcbiAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICBgJyR7ZmlsdGVyfSdgLFxyXG4gICAgICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGNvbC5kYXRlRnJvbSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgbWUudG9EYXRlVGltZShjb2wuZGF0ZUZyb20pICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAoY29sLmRhdGVUbyA9PSBudWxsIHx8XHJcbiAgICAgICAgICAgICAgICAoY29sLmRhdGVUbyAhPSBudWxsICYmIG1lLnRvRGF0ZVRpbWUoY29sLmRhdGVUbykgIT0gbnVsbCkpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtZS5vZGF0YU9wZXJhdG9yW2NvbC50eXBlXShcclxuICAgICAgICAgICAgICAgIGNvbE5hbWUsXHJcbiAgICAgICAgICAgICAgICBgJHttZS50b0RhdGVUaW1lKGNvbC5kYXRlRnJvbSl9YCxcclxuICAgICAgICAgICAgICAgIGAke21lLnRvRGF0ZVRpbWUoY29sLmRhdGVUbyl9YFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAnc2V0JzpcclxuICAgICAgICAgICAgcmV0dXJuIGNvbC52YWx1ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgID8gbWUub2RhdGFPcGVyYXRvci5pblN0cihcclxuICAgICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgICAgY29sLnZhbHVlcyxcclxuICAgICAgICAgICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEV4dHJhY3QgdmFsdWUgZnJvbSByZWNvcmQgYnkgcGF0aCB0byBmaWVsZFxyXG4gICAgICogQHBhcmFtIGZpZWxkIHBhdGggdG8gY29sdW1uIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gb2JqICByZWNvcmRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShmaWVsZDogc3RyaW5nLCBvYmo6IGFueSk6IGFueSB7XHJcbiAgICAgIGNvbnN0IHBhdGhzID0gZmllbGQuc3BsaXQoJy4nKVxyXG4gICAgICBpZiAocGF0aHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIG9ialtmaWVsZF1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcGF0aHMucmVkdWNlKChvYmplY3QsIHBhdGgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAob2JqZWN0IHx8IHt9KVtwYXRoXSAvLyBPbGl2ZXIgU3RlZWxlJ3MgcGF0dGVyblxyXG4gICAgICAgIH0sIG9iailcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWNsdWxhdGUgcGl2b3QgZGF0YSBmb3IgYWctZ3JpZCBmcm9tIG9kYXRhXHJcbiAgICAgKiBAcGFyYW0gcGl2b3RDb2xzIHBpdm90IGNvbHVtbnNcclxuICAgICAqIEBwYXJhbSByb3dHcm91cENvbHMgcm93IGdyb3VwIGNvbHVtbnNcclxuICAgICAqIEBwYXJhbSB2YWx1ZUNvbHMgdmFsdWUgY29sdW1uc1xyXG4gICAgICogQHBhcmFtIGRhdGEgb2RhdGEgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gY291bnRGaWVsZCBjb3VudCBmaWVsZCBuYW1lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UGl2b3QgPSAoXHJcbiAgICAgIHBpdm90Q29sczogQ29sdW1uVk9bXSxcclxuICAgICAgcm93R3JvdXBDb2xzOiBDb2x1bW5WT1tdLFxyXG4gICAgICB2YWx1ZUNvbHM6IENvbHVtblZPW10sXHJcbiAgICAgIGRhdGE6IGFueVtdLFxyXG4gICAgICBjb3VudEZpZWxkOiBzdHJpbmdcclxuICAgICk6IFBpdm90UmVzdWx0RGF0ID0+IHtcclxuICAgICAgLy8gYXNzdW1lIDEgcGl2b3QgY29sIGFuZCAxIHZhbHVlIGNvbCBmb3IgdGhpcyBleGFtcGxlXHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBjb25zdCBwaXZvdERhdGE6IGFueVtdID0gW11cclxuICAgICAgY29uc3QgYWdnQ29sc0xpc3Q6IGFueVtdID0gW11cclxuICBcclxuICAgICAgY29uc3QgY29sS2V5RXhpc3RzTWFwOiBhbnkgPSB7fVxyXG4gIFxyXG4gICAgICBjb25zdCBzZWNvbmRhcnlDb2xEZWZzOiBhbnlbXSA9IFtdXHJcbiAgICAgIGNvbnN0IHNlY29uZGFyeUNvbERlZnNNYXA6YW55ID0ge31cclxuICBcclxuICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgdmFyIHBpdm90VmFsdWVzOiBzdHJpbmdbXSA9IFtdXHJcbiAgICAgICAgcGl2b3RDb2xzLmZvckVhY2goZnVuY3Rpb24gKHBpdm90Q29sKSB7XHJcbiAgICAgICAgICB2YXIgcGl2b3RGaWVsZCA9IHBpdm90Q29sLmlkXHJcbiAgICAgICAgICB2YXIgcGl2b3RWYWx1ZSA9IG1lLmdldFZhbHVlKHBpdm90RmllbGQsIGl0ZW0pXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHBpdm90VmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgcGl2b3RWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHBpdm90VmFsdWUudG9TdHJpbmdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBwaXZvdFZhbHVlcy5wdXNoKHBpdm90VmFsdWUudG9TdHJpbmcoKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBpdm90VmFsdWVzLnB1c2goJy0nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICAgICAgLy8gdmFyIHBpdm90VmFsdWUgPSBpdGVtW3Bpdm90RmllbGRdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdmFyIHBpdm90SXRlbTphbnkgPSB7fVxyXG4gIFxyXG4gICAgICAgIHZhbHVlQ29scy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZUNvbCkge1xyXG4gICAgICAgICAgdmFyIHZhbEZpZWxkID0gdmFsdWVDb2wuaWRcclxuICAgICAgICAgIHZhciBjb2xLZXkgPSBjcmVhdGVDb2xLZXkocGl2b3RWYWx1ZXMsIHZhbEZpZWxkKVxyXG4gIFxyXG4gICAgICAgICAgdmFyIHZhbHVlID0gbWUuZ2V0VmFsdWUodmFsRmllbGQsIGl0ZW0pXHJcbiAgICAgICAgICBwaXZvdEl0ZW1bY29sS2V5XSA9IHZhbHVlXHJcbiAgXHJcbiAgICAgICAgICBpZiAoIWNvbEtleUV4aXN0c01hcFtjb2xLZXldKSB7XHJcbiAgICAgICAgICAgIGFkZE5ld0FnZ0NvbChjb2xLZXksIHZhbHVlQ29sKVxyXG4gICAgICAgICAgICBhZGROZXdTZWNvbmRhcnlDb2xEZWYoY29sS2V5LCBwaXZvdFZhbHVlcywgdmFsdWVDb2wpXHJcbiAgICAgICAgICAgIGNvbEtleUV4aXN0c01hcFtjb2xLZXldID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKGNvdW50RmllbGQpIHtcclxuICAgICAgICAgIHBpdm90SXRlbVtjb3VudEZpZWxkXSA9IG1lLmdldFZhbHVlKGNvdW50RmllbGQsIGl0ZW0pXHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIHJvd0dyb3VwQ29scy5mb3JFYWNoKGZ1bmN0aW9uIChyb3dHcm91cENvbCkge1xyXG4gICAgICAgICAgdmFyIHJvd0dyb3VwRmllbGQgPSByb3dHcm91cENvbC5pZC5zcGxpdCgnLicpWzBdXHJcbiAgICAgICAgICBwaXZvdEl0ZW1bcm93R3JvdXBGaWVsZF0gPSBpdGVtW3Jvd0dyb3VwRmllbGRdXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgICBwaXZvdERhdGEucHVzaChwaXZvdEl0ZW0pXHJcbiAgICAgIH0pXHJcbiAgXHJcbiAgICAgIGZ1bmN0aW9uIGFkZE5ld0FnZ0NvbChjb2xLZXk6IHN0cmluZywgdmFsdWVDb2w6IENvbHVtblZPKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIG5ld0NvbCA9IHtcclxuICAgICAgICAgIGlkOiBjb2xLZXksXHJcbiAgICAgICAgICBmaWVsZDogY29sS2V5LFxyXG4gICAgICAgICAgYWdnRnVuYzogdmFsdWVDb2wuYWdnRnVuYyxcclxuICAgICAgICB9XHJcbiAgICAgICAgYWdnQ29sc0xpc3QucHVzaChuZXdDb2wpXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgZnVuY3Rpb24gYWRkTmV3U2Vjb25kYXJ5Q29sRGVmKGNvbEtleTphbnksIHBpdm90VmFsdWVzOmFueSwgdmFsdWVDb2w6YW55KSB7XHJcbiAgICAgICAgdmFyIHBhcmVudEdyb3VwOiBhbnkgPSBudWxsXHJcbiAgXHJcbiAgICAgICAgdmFyIGtleVBhcnRzOiBhbnkgPSBbXVxyXG4gIFxyXG4gICAgICAgIHBpdm90VmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHBpdm90VmFsdWU6IGFueSkge1xyXG4gICAgICAgICAga2V5UGFydHMucHVzaChwaXZvdFZhbHVlKVxyXG4gICAgICAgICAgdmFyIGNvbEtleSA9IGNyZWF0ZUNvbEtleShrZXlQYXJ0cylcclxuICAgICAgICAgIHZhciBncm91cENvbERlZjogYW55ID0gc2Vjb25kYXJ5Q29sRGVmc01hcFtjb2xLZXldXHJcbiAgICAgICAgICBpZiAoIWdyb3VwQ29sRGVmKSB7XHJcbiAgICAgICAgICAgIGdyb3VwQ29sRGVmID0ge1xyXG4gICAgICAgICAgICAgIGdyb3VwSWQ6IGNvbEtleSxcclxuICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBwaXZvdFZhbHVlLFxyXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWNvbmRhcnlDb2xEZWZzTWFwW2NvbEtleV0gPSBncm91cENvbERlZlxyXG4gICAgICAgICAgICBpZiAocGFyZW50R3JvdXApIHtcclxuICAgICAgICAgICAgICBwYXJlbnRHcm91cC5jaGlsZHJlbi5wdXNoKGdyb3VwQ29sRGVmKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlY29uZGFyeUNvbERlZnMucHVzaChncm91cENvbERlZilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50R3JvdXAgPSBncm91cENvbERlZlxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICAgICAgcGFyZW50R3JvdXAuY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgICBjb2xJZDogY29sS2V5LFxyXG4gICAgICAgICAgaGVhZGVyTmFtZTogdmFsdWVDb2wuYWdnRnVuYyArICcoJyArIHZhbHVlQ29sLmRpc3BsYXlOYW1lICsgJyknLFxyXG4gICAgICAgICAgZmllbGQ6IGNvbEtleSxcclxuICAgICAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcclxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbEtleShwaXZvdFZhbHVlczogc3RyaW5nW10sIHZhbHVlRmllbGQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBwaXZvdFZhbHVlcy5qb2luKCd8JylcclxuICAgICAgICBpZiAodmFsdWVGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXN1bHQgKz0gJ3wnICsgdmFsdWVGaWVsZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgPSByZXBsYWNlQWxsKHJlc3VsdCwgJy4nLCAnKicpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YTogcGl2b3REYXRhLFxyXG4gICAgICAgIGFnZ0NvbHM6IGFnZ0NvbHNMaXN0LFxyXG4gICAgICAgIHNlY29uZGFyeUNvbERlZnM6IHNlY29uZGFyeUNvbERlZnMsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByb3dEYXRhIGFycmF5IG9kYXRhIHJlc3VsdFxyXG4gICAgICogQHBhcmFtIHJvd0dyb3VwQ29scyByb3cgZ3JvdXAgY29sdW1uc1xyXG4gICAgICogQHBhcmFtIGdyb3VwS2V5cyB3aGF0IGdyb3VwcyB0aGUgdXNlciBpcyB2aWV3aW5nXHJcbiAgICAgKiBAcGFyYW0gY291bnRGaWVsZCBjb3VudCBmaWVsZCBuYW1lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYnVpbGRHcm91cHNGcm9tRGF0YSA9IChcclxuICAgICAgcm93RGF0YTogYW55W10sXHJcbiAgICAgIHJvd0dyb3VwQ29sczogQ29sdW1uVk9bXSxcclxuICAgICAgZ3JvdXBLZXlzOiBzdHJpbmdbXSxcclxuICAgICAgY291bnRGaWVsZDogc3RyaW5nXHJcbiAgICApOiBhbnlbXSA9PiB7XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBsZXQgcm93R3JvdXBDb2wgPSByb3dHcm91cENvbHNbZ3JvdXBLZXlzLmxlbmd0aF1cclxuICAgICAgbGV0IGZpZWxkID0gcm93R3JvdXBDb2wuaWRcclxuICAgICAgbGV0IG1hcHBlZFJvd0RhdGEgPSBtZS5ncm91cEJ5KHJvd0RhdGEsIGZpZWxkKVxyXG4gICAgICBsZXQgZ3JvdXBzOiBhbnkgPSBbXVxyXG4gIFxyXG4gICAgICBtZS5pdGVyYXRlT2JqZWN0KG1hcHBlZFJvd0RhdGEsIGZ1bmN0aW9uIChrZXksIHJvd0RhdGEpIHtcclxuICAgICAgICB2YXIgZ3JvdXBJdGVtID0gbWUuYWdncmVnYXRlTGlzdChyb3dEYXRhLCBjb3VudEZpZWxkKVxyXG4gICAgICAgIGdyb3VwSXRlbVtmaWVsZF0gPSBrZXlcclxuICAgICAgICBncm91cHMucHVzaChncm91cEl0ZW0pXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBncm91cHNcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggcHJvcGVydHkgb2Ygb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gb2JqZWN0IG9iamVjdCBjb250YWluZWQgb2RhdGEgZ3JvdXBlZCByZXN1bHRcclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBmdW5jdGlvbiBkbyBzb210aGluZ1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGl0ZXJhdGVPYmplY3QgPSAoXHJcbiAgICAgIG9iamVjdDogYW55LFxyXG4gICAgICBjYWxsYmFjazogKGtleTogc3RyaW5nLCByb3dEYXRhOiBhbnlbXSkgPT4gdm9pZFxyXG4gICAgKTogdm9pZCA9PiB7XHJcbiAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdClcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cclxuICAgICAgICBjYWxsYmFjayhrZXksIHZhbHVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlYXJlIGdyb3VwZWQgZGF0YVxyXG4gICAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gZmllbGQgZ3JvdXBpbmcgZmllbGRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBncm91cEJ5ID0gKHJvd0RhdGE6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogYW55ID0+IHtcclxuICAgICAgdmFyIHJlc3VsdDphbnkgPSB7fVxyXG4gICAgICBjb25zdCBtZSA9IHRoaXNcclxuICAgICAgcm93RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IG1lLmdldFZhbHVlKGZpZWxkLCBpdGVtKVxyXG4gICAgICAgIHZhciBsaXN0Rm9yVGhpc0tleSA9IHJlc3VsdFtrZXldXHJcbiAgICAgICAgaWYgKCFsaXN0Rm9yVGhpc0tleSkge1xyXG4gICAgICAgICAgbGlzdEZvclRoaXNLZXkgPSBbXVxyXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBsaXN0Rm9yVGhpc0tleVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0Rm9yVGhpc0tleS5wdXNoKGl0ZW0pXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRvdGFsIGNvdW50IHJlY29yZHMgaW4gZ3JvdXBcclxuICAgICAqIEBwYXJhbSByb3dEYXRhIGFycmF5IG9kYXRhIHJlc3VsdCBkYXRhXHJcbiAgICAgKiBAcGFyYW0gY291bnRGaWVsZCBmaWVsZCBjb250YWluZWQgY291bnQgb2YgYWxsIHJlY29yZHNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVMaXN0ID0gKHJvd0RhdGE6IGFueVtdLCBjb3VudEZpZWxkOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICB2YXIgcmVzdWx0OmFueSA9IHt9XHJcbiAgICAgIHJvd0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgaWYgKGNvdW50RmllbGQgJiYgcm93W2NvdW50RmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSAocmVzdWx0W2NvdW50RmllbGRdIHx8IDApICsgKHJvd1tjb3VudEZpZWxkXSB8fCAwKVxyXG4gICAgICAgICAgZGVsZXRlIHJvd1tjb3VudEZpZWxkXVxyXG4gICAgICAgICAgcmVzdWx0W2NvdW50RmllbGRdID0gdG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgPSBPYmplY3QuYXNzaWduKHJlc3VsdCwgcm93KVxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAgICogQ2FsY3VsYXRlIGRpc3RpbmN0IHZhbHVlcyBmb3IgaW5wdXQgZmllbGQgZnJvbSBPZGF0YSBhcGlcclxuICAgICAgICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCBvZiB0aGUgcm93IHRvIGdldCB0aGUgY2VsbHMgZGF0YSBmcm9tIFxyXG4gICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIGZvciByZXR1cm4gZGlzdGluY3QgdmFsdWVzIGZvciBpbnB1dCBmaWVsZFxyXG4gICAgICAgKiBAcGFyYW0gYmVmb3JlUmVxdWVzdCBUaGUgZnVuY3Rpb24gZm9yIGN1c3RvbWl6ZSByZXF1ZXN0XHJcbiAgICAgICAqIEBleGFtcGxlIFxyXG4gICAgICAgKiA8cHJlPjxjb2RlPlxyXG4gICAgICAgKiAgY29uc3Qgc2V0RmlsdGVyVmFsdWVzRnVuY1BhcmFtcyA9IHBhcmFtcyA9PiB7XHJcbiAgICAgICAqICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICAgKiAgICBjb25zdCBjb2wgPSBwYXJhbXMuY29sRGVmLmZpZWxkXHJcbiAgICAgICAqICAgIGNvbnN0IHN0b3JlTmFtZSA9IG1lLmdldFN0b3JlTmFtZShjb2wpXHJcbiAgICAgICAqICAgIGNvbnN0IGNhbGxiYWNrID0gZGF0YSA9PiB7XHJcbiAgICAgICAqICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICogICAgICAgIG1lLnNldFN0YXRlKHsgW3N0b3JlTmFtZV06IGRhdGEgfSlcclxuICAgICAgICogICAgICAgIHBhcmFtcy5zdWNjZXNzKGRhdGEpXHJcbiAgICAgICAqICAgICAgfVxyXG4gICAgICAgKiAgICB9XHJcbiAgICAgICAqICAgIG9kYXRhUHJvdmlkZXJJbnN0YW5jZS5nZXRGaWx0ZXJWYWx1ZXNQYXJhbXMocGFyYW1zLmNvbERlZi5maWVsZCwgY2FsbGJhY2spXHJcbiAgICAgICAqICB9XHJcbiAgICAgICAqIFxyXG4gICAgICAgKiAvLy8uLi4uXHJcbiAgICAgICAqICAgICAgPEFnR3JpZENvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkPVwicHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZT17J1BST0RVQ1QnfVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcj1cImFnU2V0Q29sdW1uRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAvLyByb3dHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZVBpdm90XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlUm93R3JvdXBcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXM9e3tcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2V0RmlsdGVyVmFsdWVzRnVuY1BhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld1Jvd3NBY3Rpb246ICdrZWVwJ1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyUGFyYW1zPXt7Y2FzZVNlbnNpdGl2ZTogdHJ1ZX19XHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAqIDwvY29kZT48L3ByZT5cclxuICAgICAgICovXHJcbiAgICBnZXRGaWx0ZXJWYWx1ZXNQYXJhbXMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGNhbGxiYWNrOiAoZGF0YTogYW55W10pID0+IHZvaWQsXHJcbiAgICAgIGJlZm9yZVJlcXVlc3Q6IChvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCkgPT4gdm9pZCB8IHVuZGVmaW5lZFxyXG4gICAgKTogdm9pZCA9PiB7XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBjb25zdCBvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCA9IHtcclxuICAgICAgICBhcHBseTogW2Bncm91cGJ5KCgke21lLmdldFdyYXBDb2x1bW5OYW1lKGZpZWxkKX0pKWBdLFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChiZWZvcmVSZXF1ZXN0KSB7XHJcbiAgICAgICAgYmVmb3JlUmVxdWVzdChvcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICAgIG1lLmNhbGxBcGkobWUudG9RdWVyeShvcHRpb25zKSkudGhlbigoeCkgPT4ge1xyXG4gICAgICAgIGlmICh4KSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzID0gbWUuZ2V0T2RhdGFSZXN1bHQoeClcclxuICAgICAgICAgIGNhbGxiYWNrKHZhbHVlcy5tYXAoKHk6YW55KSA9PiB5W2ZpZWxkXSkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3QgaXMgc3RyaW5nIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqL1xyXG4gICAgaXNTdHJWYWwgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRhcnRjIHZhbHVlcyBmcm9tIG9kYXRhIHJlc3BvbnNlXHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRPZGF0YVJlc3VsdCA9IChyZXNwb25zZTogYW55KTogYW55ID0+XHJcbiAgICAgIEFycmF5LmlzQXJyYXkocmVzcG9uc2UpID8gcmVzcG9uc2UgOiByZXNwb25zZS52YWx1ZVxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmRvY2luZyBjb2x1bW4gbmFtZSB0byBvZGF0YSBub3RhdGlvblxyXG4gICAgICogQHBhcmFtIGNvbE5hbWUgY29sdW1uIG5hbWVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRXcmFwQ29sdW1uTmFtZSA9IChjb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT5cclxuICAgICAgY29sTmFtZSA/IHJlcGxhY2VBbGwoY29sTmFtZSwgJy4nLCAnLycpIDogJydcclxuICAgIC8qKlxyXG4gICAgICogZ3JpZCBjYWxscyB0aGlzIHRvIGdldCByb3dzIGZvciBJU2VydmVyU2lkZURhdGFzb3VyY2VcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgYWctZ3JpZCBkZXRhaWxzIGZvciB0aGUgcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICAvKipcclxuICAgICAqIGdyaWQgY2FsbHMgdGhpcyB0byBnZXQgcm93cyBpbXBsZW1lbnRcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgYWctZ3JpZCBkZXRhaWxzIGZvciB0aGUgcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Um93cyhwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKTogdm9pZCB7XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBjb25zdCBjaGlsZENvdW50ID0gbWUuZ3JvdXBDb3VudEZpZWxkTmFtZVxyXG4gICAgICBjb25zdCBpc1NlcnZlck1vZGUgPSAncmVxdWVzdCcgaW4gcGFyYW1zXHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBpc1NlcnZlck1vZGVcclxuICAgICAgICA/IChwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5yZXF1ZXN0XHJcbiAgICAgICAgOiAocGFyYW1zIGFzIElHZXRSb3dzUGFyYW1zKVxyXG4gICAgICBjb25zdCByZXF1ZXN0U3J2ID0gcmVxdWVzdCBhcyBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0XHJcbiAgXHJcbiAgICAgIGNvbnN0IHBpdm90QWN0aXZlID0gIWlzU2VydmVyTW9kZVxyXG4gICAgICAgID8gZmFsc2VcclxuICAgICAgICA6IHJlcXVlc3RTcnYucGl2b3RNb2RlICYmXHJcbiAgICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICByZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGggPiAwXHJcbiAgXHJcbiAgICAgIGlmICghcGl2b3RBY3RpdmUpIHtcclxuICAgICAgICBsZXQgZm4gPSAocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFBpdm90UmVzdWx0Q29sdW1uc1xyXG4gICAgICAgIGlmIChmbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBpZiAoKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5pc1Bpdm90TW9kZSgpKSB7XHJcbiAgICAgICAgICA7KHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnMoW10pXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIDsocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFNlY29uZGFyeUNvbHVtbnMoW10pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBtZS5nZXRPZGF0YU9wdGlvbnMocGFyYW1zKVxyXG4gICAgICBjb25zdCBxdWVyeSA9IG1lLnRvUXVlcnkob3B0aW9ucylcclxuICAgICAgaWYgKFxyXG4gICAgICAgIG9wdGlvbnMuc2tpcCA9PT0gMCAmJlxyXG4gICAgICAgICghaXNTZXJ2ZXJNb2RlIHx8XHJcbiAgICAgICAgICAoaXNTZXJ2ZXJNb2RlICYmXHJcbiAgICAgICAgICAgIChwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5wYXJlbnROb2RlLmxldmVsID09PSAtMSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIG1lLmNhbmNlbFByb21pY2UuY2FuY2VsKClcclxuICAgICAgICBtZS5jYW5jZWxQcm9taWNlID0gbWUuY3JlYXRlQ2FuY2VsYWJsZVByb21pc2UoKVxyXG4gICAgICB9XHJcbiAgICAgIFByb21pc2UucmFjZShbbWUuY2FuY2VsUHJvbWljZS5wcm9taXNlLCBtZS5jYWxsQXBpKHF1ZXJ5KV0pLnRoZW4oXHJcbiAgICAgICAgYXN5bmMgKHgpID0+IHtcclxuICAgICAgICAgIGlmICgheCkge1xyXG4gICAgICAgICAgICBwYXJhbXMuZmFpbENhbGxiYWNrKClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG1lLmdldE9kYXRhUmVzdWx0KHgpXHJcbiAgICAgICAgICAgIGlmICghcGl2b3RBY3RpdmUpIHtcclxuICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuYXBwbHkpIHtcclxuICAgICAgICAgICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgdmFsdWVzLCB4WydAb2RhdGEuY291bnQnXSB8fCB4WzBdPy50b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWZ0ZXJMb2FkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEob3B0aW9ucywgdmFsdWVzLCB4WydAb2RhdGEuY291bnQnXSB8fCB4WzBdPy50b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY291bnQgPSB2YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IG9wdGlvbnMudG9wICYmIG9wdGlvbnMuc2tpcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBJZiByZWNlaXZlZCBncm91cGVkIGNvdW50IG9mIHZhbHVlIGxhcmdlIHRoYW4gcmVxdWVzdGVkIHRoZW4gcmVxdWVzdCB0b3RhbCBjb3VudCBvZiB2YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgbWUuY2FsbEFwaShxdWVyeSArICcvYWdncmVnYXRlKCRjb3VudCBhcyBjb3VudCknKS50aGVuKCh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBtZS5nZXRPZGF0YVJlc3VsdCh5KVswXS5jb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgdmFsdWVzLCBjb3VudClcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXAgIT0gbnVsbCAmJiBvcHRpb25zLnNraXAgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCB2YWx1ZXMsIGNvdW50KVxyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5hZnRlckxvYWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckxvYWREYXRhKG9wdGlvbnMsIHZhbHVlcywgY291bnQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSBtZS5nZXRPZGF0YVJlc3VsdCh4KVxyXG4gICAgICAgICAgICAgIC8vIENoZWNrIGNvdW50XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcm93RGF0YS5sZW5ndGggPT09IG9wdGlvbnMudG9wICYmXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNraXAgPT09IDAgJiZcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVvZiA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWVvZikge1xyXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnNraXAgKz0gb3B0aW9ucy50b3AgfHwgMFxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBzdWJRdWVyeSA9IG1lLnRvUXVlcnkob3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Um93RGF0YSA9IGF3YWl0IG1lLmNhbGxBcGkoc3ViUXVlcnkpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmV3Um93RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mYWlsQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVvZiA9IG5ld1Jvd0RhdGEubGVuZ3RoICE9PSBvcHRpb25zLnRvcFxyXG4gICAgICAgICAgICAgICAgICByb3dEYXRhID0gcm93RGF0YS5jb25jYXQobmV3Um93RGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgcGl2b3RSZXN1bHQgPSBtZS5nZXRQaXZvdChcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RDb2xzLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnZhbHVlQ29scyxcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEsXHJcbiAgICAgICAgICAgICAgICBjaGlsZENvdW50XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJvd0RhdGEgPSBwaXZvdFJlc3VsdC5kYXRhXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJ5Q29sRGVmcyA9IHBpdm90UmVzdWx0LnNlY29uZGFyeUNvbERlZnNcclxuICAgICAgICAgICAgICByb3dEYXRhID0gbWUuYnVpbGRHcm91cHNGcm9tRGF0YShcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRDb3VudFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBjb25zdCB0b3RhbENvdW50ID1cclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICA/IHJvd0RhdGEubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgIDogcm93RGF0YS5sZW5ndGggPT09IG9wdGlvbnMudG9wXHJcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICA6IHJvd0RhdGEubGVuZ3RoXHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRvdGFsQ291bnQgPiAob3B0aW9ucy50b3AgfHwgMCkpIHtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnN0IHNlcnZlclNpZGVCbG9jayA9IChwYXJhbXMgYXMgYW55KS5wYXJlbnROb2RlLnJvd01vZGVsXHJcbiAgICAgICAgICAgICAgLy8gICAgIC5yb3dOb2RlQmxvY2tMb2FkZXIuYmxvY2tzWzBdO1xyXG4gICAgICAgICAgICAgIC8vICAgc2VydmVyU2lkZUJsb2NrLnJvd05vZGVDYWNoZVBhcmFtcy5ibG9ja1NpemUgPSB0b3RhbENvdW50O1xyXG4gICAgICAgICAgICAgIC8vICAgc2VydmVyU2lkZUJsb2NrLmVuZFJvdyA9IHNlcnZlclNpZGVCbG9jay5zdGFydFJvdyArIHRvdGFsQ291bnQ7XHJcbiAgICAgICAgICAgICAgLy8gICBzZXJ2ZXJTaWRlQmxvY2suY3JlYXRlUm93Tm9kZXMoKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCByb3dEYXRhLCB0b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyTG9hZERhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJMb2FkRGF0YShvcHRpb25zLCByb3dEYXRhLCB0b3RhbENvdW50KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVxdWVzdFNydi5ncm91cEtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVTZXRTZWNvbmRhcnlDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyhzZWNvbmRhcnlDb2xEZWZzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGZuID0gKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnNcclxuICAgICAgICAgICAgICAgIGlmIChmbikge1xyXG4gICAgICAgICAgICAgICAgICA7KHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmc1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA7KHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRTZWNvbmRhcnlDb2x1bW5zKHNlY29uZGFyeUNvbERlZnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBtZS5zZXRSZXN1bHQocGFyYW1zLCBpc1NlcnZlck1vZGUsIFtdLCAwKVxyXG4gICAgICAgICAgaWYgKHRoaXMuc2V0RXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIsIHBhcmFtcylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHJlc3VsdFxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gaXNTZXJ2ZXJNb2RlIGRldGVjdCB0eXBlIG9mIHBhcmFtc1xyXG4gICAgICogQHBhcmFtIHJvd3NUaGlzQmxvY2sgZGF0YSBvZiB0aGUgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHJvd0NvdW50IGNvdW50IG9mIHRvdGFsIHJlc3VsdFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldFJlc3VsdCA9IChcclxuICAgICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyxcclxuICAgICAgaXNTZXJ2ZXJNb2RlOiBib29sZWFuLFxyXG4gICAgICByb3dzVGhpc0Jsb2NrOiBhbnlbXSxcclxuICAgICAgcm93Q291bnQ/OiBudW1iZXJcclxuICAgICk6IHZvaWQgPT4ge1xyXG4gICAgICBpZiAoaXNTZXJ2ZXJNb2RlKSB7XHJcbiAgICAgICAgOyhwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5zdWNjZXNzKHtcclxuICAgICAgICAgIHJvd0RhdGE6IHJvd3NUaGlzQmxvY2ssXHJcbiAgICAgICAgICByb3dDb3VudDogcm93Q291bnQsXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICA7KHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcykuc3VjY2Vzc0NhbGxiYWNrKHJvd3NUaGlzQmxvY2ssIHJvd0NvdW50KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIG9kYXRhIG9wdGlvbnMgZm9yIGJ1aWxkIHF1ZXJ5IGZyb20gYWctZ3JpZCByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgZ2V0T2RhdGFPcHRpb25zID0gKFxyXG4gICAgICBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zXHJcbiAgICApOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCA9PiB7XHJcbiAgICAgIGNvbnN0IG1lID0gdGhpc1xyXG4gICAgICBjb25zdCBvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCA9IHt9XHJcbiAgICAgIGNvbnN0IGlzU2VydmVyTW9kZSA9ICdyZXF1ZXN0JyBpbiBwYXJhbXNcclxuICAgICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICAgID8gKHBhcmFtcyBhcyBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpLnJlcXVlc3RcclxuICAgICAgICA6IChwYXJhbXMgYXMgSUdldFJvd3NQYXJhbXMpXHJcbiAgICAgIGNvbnN0IGNoaWxkQ291bnQgPSBtZS5ncm91cENvdW50RmllbGROYW1lXHJcbiAgICAgIGlmICh0aGlzLmJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLmJlZm9yZVJlcXVlc3Qob3B0aW9ucywgdGhpcywgcmVxdWVzdClcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVxdWVzdC5zb3J0TW9kZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNvcnQgPSBvcHRpb25zLnNvcnQgfHwgW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBjb2wgPSByZXF1ZXN0LnNvcnRNb2RlbFtpXVxyXG4gICAgICAgICAgbGV0IGNvbE5hbWUgPSBtZS5nZXRXcmFwQ29sdW1uTmFtZShjb2wuY29sSWQpXHJcbiAgICAgICAgICBpZiAoY29sLnNvcnQgIT09ICdhc2MnKSB7XHJcbiAgICAgICAgICAgIGNvbE5hbWUgKz0gJyBkZXNjJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc29ydC5wdXNoKGNvbE5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMuc29ydCA9IHNvcnRcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlciB8fCBbXVxyXG4gICAgICBmb3IgKGNvbnN0IGNvbE5hbWUgaW4gcmVxdWVzdC5maWx0ZXJNb2RlbCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmZpbHRlck1vZGVsLmhhc093blByb3BlcnR5KGNvbE5hbWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBjb2wgPSByZXF1ZXN0LmZpbHRlck1vZGVsW2NvbE5hbWVdXHJcbiAgICAgICAgICBsZXQgY29sRmlsdGVyID0gJydcclxuICAgICAgICAgIGlmICghY29sLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbEZpbHRlciA9IG1lLmdldEZpbHRlck9kYXRhKGNvbE5hbWUsIGNvbClcclxuICAgICAgICAgICAgaWYgKGNvbEZpbHRlcikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5wdXNoKGNvbEZpbHRlcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IG1lLmdldEZpbHRlck9kYXRhKGNvbE5hbWUsIGNvbC5jb25kaXRpb24xKVxyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24yID0gbWUuZ2V0RmlsdGVyT2RhdGEoY29sTmFtZSwgY29sLmNvbmRpdGlvbjIpXHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24xICYmIGNvbmRpdGlvbjIpIHtcclxuICAgICAgICAgICAgICBjb2xGaWx0ZXIgPSBgKCR7Y29uZGl0aW9uMX0gJHtjb2wub3BlcmF0b3IudG9Mb3dlckNhc2UoKX0gJHtjb25kaXRpb24yfSlgXHJcbiAgICAgICAgICAgICAgZmlsdGVyLnB1c2goY29sRmlsdGVyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCBwaXZvdEFjdGl2ZSA9IGZhbHNlXHJcbiAgXHJcbiAgICAgIGNvbnN0IGFwcGx5ID0gb3B0aW9ucy5hcHBseSB8fCBbXVxyXG4gICAgICBpZiAoaXNTZXJ2ZXJNb2RlKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFNydiA9IHJlcXVlc3QgYXMgSVNlcnZlclNpZGVHZXRSb3dzUmVxdWVzdFxyXG4gICAgICAgIHBpdm90QWN0aXZlID1cclxuICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RNb2RlICYmXHJcbiAgICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICByZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGggPiAwXHJcbiAgICAgICAgaWYgKHJlcXVlc3RTcnYucm93R3JvdXBDb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlckdyb3VwQnk6IHN0cmluZ1tdID0gW11cclxuICAgICAgICAgIGlmIChyZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGggPCByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy8gSWYgcmVxdWVzdCBvbmx5IGdyb3Vwc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWUgPSByZXF1ZXN0U3J2Lmdyb3VwS2V5c1tpZHhdXHJcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29sc1tpZHhdLmZpZWxkXHJcbiAgICAgICAgICAgICAgKX0gZXEgJHtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKSArXHJcbiAgICAgICAgICAgICAgICBtZS5lbmNvZGUoY29sVmFsdWUpICtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKVxyXG4gICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICAgZmlsdGVyR3JvdXBCeS5wdXNoKGNvbmRpdGlvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZmlsdGVyR3JvdXBCeS5sZW5ndGggPiAwIHx8IGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVycyBtdXN0IGJ5IGZpcnN0XHJcbiAgICAgICAgICAgICAgYXBwbHkucHVzaChgZmlsdGVyKCR7ZmlsdGVyR3JvdXBCeS5jb25jYXQoZmlsdGVyKS5qb2luKCcgYW5kICcpfSlgKVxyXG4gICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZTogc3RyaW5nW10gPSBbXVxyXG4gICAgICAgICAgICBpZiAoY2hpbGRDb3VudCkge1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZS5wdXNoKG1lLm9kYXRhQWdncmVnYXRpb24uY291bnQoY2hpbGRDb3VudCkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTcnYudmFsdWVDb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZSA9IHJlcXVlc3RTcnYudmFsdWVDb2xzW2lkeF1cclxuICAgICAgICAgICAgICAgIGNvbFZhbHVlLmFnZ0Z1bmMgJiZcclxuICAgICAgICAgICAgICAgICAgYWdncmVnYXRlLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgbWUub2RhdGFBZ2dyZWdhdGlvbltjb2xWYWx1ZS5hZ2dGdW5jXShcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmdldFdyYXBDb2x1bW5OYW1lKGNvbFZhbHVlLmZpZWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZ3JvdXBzID0gW1xyXG4gICAgICAgICAgICAgIG1lLmdldFdyYXBDb2x1bW5OYW1lKFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHNbcmVxdWVzdFNydi5ncm91cEtleXMubGVuZ3RoXS5maWVsZFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMuc29ydCB8fCBbXVxyXG4gICAgICAgICAgICBjb25zdCBzb3J0Q29sT25seSA9IHNvcnQubWFwKCh4KSA9PiB4LnNwbGl0KCcgJylbMF0pXHJcbiAgICAgICAgICAgIGlmIChwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgIGdyb3VwcyA9IGdyb3Vwcy5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5tYXAoKHgpID0+IG1lLmdldFdyYXBDb2x1bW5OYW1lKHguZmllbGQpKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBncm91cHMuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRDb2xPbmx5LmluZGV4T2YoeCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNvcnQucHVzaCh4KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0ID0gc29ydFxyXG4gICAgICAgICAgICBhcHBseS5wdXNoKFxyXG4gICAgICAgICAgICAgIGBncm91cGJ5KCgke2dyb3Vwcy5qb2luKCcsJyl9KSR7XHJcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGUubGVuZ3RoID4gMCA/IGAsYWdncmVnYXRlKCR7YWdncmVnYXRlLmpvaW4oJywnKX0pYCA6ICcnXHJcbiAgICAgICAgICAgICAgfSlgXHJcbiAgICAgICAgICAgIClcclxuICBcclxuICAgICAgICAgICAgb3B0aW9ucy5hcHBseSA9IGFwcGx5XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNvcnQgJiYgb3B0aW9ucy5zb3J0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBvcHRpb25zLnNvcnQgPSBvcHRpb25zLnNvcnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IGdyb3Vwcy5pbmRleE9mKHguc3BsaXQoJyAnKVswXSkgPj0gMFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkZWxldGUgb3B0aW9ucy5zb3J0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgcmVxdWVzdCByb3dEYXRhIGJ5IGdyb3VwIGZpbHRlclxyXG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWUgPSByZXF1ZXN0U3J2Lmdyb3VwS2V5c1tpZHhdXHJcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29sc1tpZHhdLmZpZWxkXHJcbiAgICAgICAgICAgICAgKX0gZXEgJHtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKSArXHJcbiAgICAgICAgICAgICAgICBtZS5lbmNvZGUoY29sVmFsdWUpICtcclxuICAgICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKVxyXG4gICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICAgZmlsdGVyLnB1c2goY29uZGl0aW9uKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyID0gZmlsdGVyXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwcGx5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBvcHRpb25zLmFwcGx5ID0gYXBwbHlcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5leHBhbmRcclxuICAgICAgICBkZWxldGUgb3B0aW9ucy5zZWxlY3RcclxuICAgICAgICAvLyBvcHRpb25zLnNvcnQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIG9wdGlvbnMuc2tpcCA9IHJlcXVlc3Quc3RhcnRSb3dcclxuICAgICAgb3B0aW9ucy50b3AgPSAocmVxdWVzdC5lbmRSb3cgfHwgMCkgLSAocmVxdWVzdC5zdGFydFJvdyB8fCAwKVxyXG4gIFxyXG4gICAgICBpZiAoIW9wdGlvbnMuYXBwbHkgJiYgb3B0aW9ucy5za2lwID09PSAwKSB7XHJcbiAgICAgICAgb3B0aW9ucy5jb3VudCA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3B0aW9uc1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBvZGF0YSBxdWVyeSBmcm9tIGFnLWdyaWQgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGdldE9kYXRhUXVlcnkgPSAocGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyk6IHN0cmluZyA9PlxyXG4gICAgICB0aGlzLnRvUXVlcnkodGhpcy5nZXRPZGF0YU9wdGlvbnMocGFyYW1zKSlcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0IGNsYXNzIE9kYXRhUHJvdmlkZXJDbGllbnQgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXRSb3dzKHBhcmFtczogSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKSB7XHJcbiAgICAgIHN1cGVyLmdldFJvd3MocGFyYW1zKVxyXG4gICAgfVxyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgT2RhdGFTZXJ2ZXJTaWRlUHJvdmlkZXIgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXRSb3dzKHBhcmFtczogSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKTogdm9pZCB7XHJcbiAgICAgIHN1cGVyLmdldFJvd3MocGFyYW1zKVxyXG4gICAgfVxyXG4gIH0iXX0=
|
|
@@ -135,7 +135,7 @@ class OdataProvider {
|
|
|
135
135
|
*/
|
|
136
136
|
this.toQuery = (options) => {
|
|
137
137
|
let path = [];
|
|
138
|
-
if (options
|
|
138
|
+
if (options) {
|
|
139
139
|
path.push('$count=true');
|
|
140
140
|
}
|
|
141
141
|
if (options.skip) {
|
|
@@ -720,6 +720,7 @@ class OdataProvider {
|
|
|
720
720
|
me.cancelPromice = me.createCancelablePromise();
|
|
721
721
|
}
|
|
722
722
|
Promise.race([me.cancelPromice.promise, me.callApi(query)]).then((x) => __awaiter(this, void 0, void 0, function* () {
|
|
723
|
+
var _a, _b;
|
|
723
724
|
if (!x) {
|
|
724
725
|
params.failCallback();
|
|
725
726
|
}
|
|
@@ -727,9 +728,9 @@ class OdataProvider {
|
|
|
727
728
|
const values = me.getOdataResult(x);
|
|
728
729
|
if (!pivotActive) {
|
|
729
730
|
if (!options.apply) {
|
|
730
|
-
me.setResult(params, isServerMode, values, x['@odata.count'] || x[0].totalCount);
|
|
731
|
+
me.setResult(params, isServerMode, values, x['@odata.count'] || ((_a = x[0]) === null || _a === void 0 ? void 0 : _a.totalCount));
|
|
731
732
|
if (this.afterLoadData) {
|
|
732
|
-
this.afterLoadData(options, values, x['@odata.count'] || x[0].totalCount);
|
|
733
|
+
this.afterLoadData(options, values, x['@odata.count'] || ((_b = x[0]) === null || _b === void 0 ? void 0 : _b.totalCount));
|
|
733
734
|
}
|
|
734
735
|
}
|
|
735
736
|
else {
|