igniteui-angular 18.2.13 → 18.2.15
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/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/directives/button/button.directive.mjs +10 -6
- package/esm2022/lib/grids/common/crud.service.mjs +6 -4
- package/esm2022/lib/input-group/input-group.component.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker.component.mjs +5 -3
- package/fesm2022/igniteui-angular.mjs +23 -15
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/directives/button/button.directive.d.ts +4 -2
- package/lib/input-group/input-group.component.d.ts +3 -3
- package/package.json +1 -1
|
@@ -581,10 +581,12 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
|
|
|
581
581
|
return;
|
|
582
582
|
}
|
|
583
583
|
this.endEdit(true, event);
|
|
584
|
-
|
|
585
|
-
|
|
584
|
+
// work with copy of original row, since context may change on collapse.
|
|
585
|
+
const parentRowCopy = parentRow ? Object.assign(copyDescriptors(parentRow), parentRow) : null;
|
|
586
|
+
if (parentRowCopy != null && this.grid.expansionStates.get(parentRowCopy.key)) {
|
|
587
|
+
this.grid.collapseRow(parentRowCopy.key);
|
|
586
588
|
}
|
|
587
|
-
this.createAddRow(
|
|
589
|
+
this.createAddRow(parentRowCopy, asChild);
|
|
588
590
|
this.grid.transactions.startPending();
|
|
589
591
|
if (this.addRowParent.isPinned) {
|
|
590
592
|
// If parent is pinned, add the new row to pinned records
|
|
@@ -662,4 +664,4 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
|
|
|
662
664
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxGridCRUDService, decorators: [{
|
|
663
665
|
type: Injectable
|
|
664
666
|
}] });
|
|
665
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVyRSxNQUFNLE9BQU8sVUFBVTtJQU1uQixZQUFtQixFQUFPLEVBQVMsS0FBYSxFQUFTLElBQVMsRUFBUyxJQUFjO1FBQXRFLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQVU7UUFGbEYsaUJBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUdwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsS0FBYTtRQUMvRCxNQUFNLElBQUksR0FBdUI7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLE1BQU0s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QUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OEdBL0lRLGtCQUFrQjtrSEFBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJR3JpZEVkaXREb25lRXZlbnRBcmdzLCBJR3JpZEVkaXRFdmVudEFyZ3MsIElSb3dEYXRhQ2FuY2VsYWJsZUV2ZW50QXJncywgSVJvd0RhdGFFdmVudEFyZ3MgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IEdyaWRUeXBlLCBSb3dUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb3B5RGVzY3JpcHRvcnMsIGlzRXF1YWwsIGlzRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25TdGF0ZTogYW55O1xuICAgIHB1YmxpYyBzdGF0ZTogYW55O1xuICAgIHB1YmxpYyBuZXdEYXRhOiBhbnk7XG4gICAgcHVibGljIHJvd0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksIHB1YmxpYyBpbmRleDogbnVtYmVyLCBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgdGhpcy5yb3dGb3JtR3JvdXAgPSB0aGlzLmdyaWQudmFsaWRhdGlvbi5jcmVhdGUoaWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSb3dFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzOiBJR3JpZEVkaXRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dLZXk6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICB2YWxpZDogdGhpcy5yb3dGb3JtR3JvdXAudmFsaWQsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUm93RGF0YUV2ZW50QXJncyhldmVudD86IEV2ZW50KTogSVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93S2V5OiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMubmV3RGF0YSA/PyB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogdHJ1ZSxcbiAgICAgICAgICAgIHZhbGlkOiB0aGlzLnJvd0Zvcm1Hcm91cC52YWxpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSb3dFZGl0RG9uZUV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZCwgdHJ1ZSkgOiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQpO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPz8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0tleTogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogY2FjaGVkUm93RGF0YSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hBZGRSb3cgZXh0ZW5kcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgaXNBZGRSb3cgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IGFueSxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgZGF0YTogYW55LFxuICAgICAgICBwdWJsaWMgcmVjb3JkUmVmOiBhbnksXG4gICAgICAgIGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHN1cGVyKGlkLCBpbmRleCwgZGF0YSwgZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZVJvd0VkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVSb3dFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICBhcmdzLm9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIGFyZ3Mucm93RGF0YSA9IHRoaXMubmV3RGF0YSA/PyB0aGlzLmRhdGE7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjcmVhdGVSb3dFZGl0RG9uZUV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmNyZWF0ZVJvd0VkaXREb25lRXZlbnRBcmdzKG51bGwsIGV2ZW50KTtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZ3hBZGRSb3dQYXJlbnQge1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMTcuMS4wLiBVc2UgYHJvd0tleWAgaW5zdGVhZFxuICAgICAqL1xuICAgIHJvd0lEOiBzdHJpbmc7XG4gICAgcm93S2V5OiBhbnk7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBhc0NoaWxkOiBib29sZWFuO1xuICAgIGlzUGlubmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbCB7XG4gICAgcHVibGljIHByaW1hcnlLZXk6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcbiAgICBwdWJsaWMgcGVuZGluZ1ZhbHVlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkLFxuICAgICAgICBwdWJsaWMgcm93SW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbHVtbixcbiAgICAgICAgcHVibGljIHZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyBfZWRpdFZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyByb3dEYXRhOiBhbnksXG4gICAgICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLmdyaWQudmFsaWRhdGlvbi5jcmVhdGUoaWQucm93SUQsIHJvd0RhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdFZhbHVlKCkge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGVkaXRWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcblxuICAgICAgICBpZiAodGhpcy5ncmlkLnZhbGlkYXRpb25UcmlnZ2VyID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSB0cmlnZ2VyIGlzIGNoYW5nZSwgbWFyayBhcyB0b3VjaGVkLlxuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYXN0VG9OdW1iZXIodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgIXRoaXMuY29sdW1uLmlubGluZUVkaXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmFOKHYpICYmIGlzRmluaXRlKHYpID8gdiA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDZWxsRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdyaWQudmFsaWRhdGlvbi5nZXRGb3JtQ29udHJvbCh0aGlzLmlkLnJvd0lELCB0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIHJvd0tleTogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIGNlbGxJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGE6IHRoaXMucm93RGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgdmFsaWQ6IGZvcm1Db250cm9sID8gZm9ybUNvbnRyb2wudmFsaWQgOiB0cnVlLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGluY2x1ZGVOZXdWYWx1ZSkge1xuICAgICAgICAgICAgYXJncy5uZXdWYWx1ZSA9IHRoaXMuY2FzdFRvTnVtYmVyKHRoaXMuZWRpdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2VsbEVkaXREb25lRXZlbnRBcmdzKHZhbHVlOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZC5yb3dJRCwgdHJ1ZSkgOiB0aGlzLnJvd0RhdGE7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB1cGRhdGVkRGF0YSA9PT0gbnVsbCA/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZC5yb3dJRCkgOiB1cGRhdGVkRGF0YTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdyaWQudmFsaWRhdGlvbi5nZXRGb3JtQ29udHJvbCh0aGlzLmlkLnJvd0lELCB0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICByb3dLZXk6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICBjZWxsSUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAvLyByb3dEYXRhIC0gc2hvdWxkIGJlIHRoZSB1cGRhdGVkL2NvbW1pdHRlZCByb3dEYXRhIC0gdGhpcyBlZmZlY3RpdmVseSBzaG91bGQgYmUgdGhlIG5ld1ZhbHVlXG4gICAgICAgICAgICAvLyB0aGUgb25seSBjYXNlIHdlIHVzZSB0aGlzLnJvd0RhdGEgZGlyZWN0bHksIGlzIHdoZW4gdGhlcmUgaXMgbm8gcm93RWRpdGluZyBvciB0cmFuc2FjdGlvbnMgZW5hYmxlZFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgdmFsaWQ6IGZvcm1Db250cm9sID8gZm9ybUNvbnRyb2wudmFsaWQgOiB0cnVlLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hDZWxsQ3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIGNlbGw6IElneENlbGwgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGlzSW5Db21wb3NpdGlvbk1vZGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjcmVhdGVDZWxsKGNlbGwpOiBJZ3hDZWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbCA9IG5ldyBJZ3hDZWxsKGNlbGwuY2VsbElEIHx8IGNlbGwuaWQsIGNlbGwucm93LmluZGV4LCBjZWxsLmNvbHVtbiwgY2VsbC52YWx1ZSwgY2VsbC52YWx1ZSxcbiAgICAgICAgICAgIGNlbGwucm93LmRhdGEsIGNlbGwuZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJvdyhjZWxsOiBJZ3hDZWxsKTogSWd4RWRpdFJvdyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyA9IG5ldyBJZ3hFZGl0Um93KGNlbGwuaWQucm93SUQsIGNlbGwucm93SW5kZXgsIGNlbGwucm93RGF0YSwgY2VsbC5ncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2FtZVJvdyhyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgJiYgdGhpcy5yb3cuaWQgPT09IHJvd0lEO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYW1lQ2VsbChjZWxsOiBJZ3hDZWxsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5jZWxsLmlkLnJvd0lEID09PSBjZWxsLmlkLnJvd0lEICYmXG4gICAgICAgICAgICB0aGlzLmNlbGwuaWQuY29sdW1uSUQgPT09IGNlbGwuaWQuY29sdW1uSUQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2VsbEluRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY2VsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmVnaW5DZWxsRWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGwuY3JlYXRlQ2VsbEVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0RW50ZXIuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVDZWxsRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2VsbChleGl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCB3aGVuIHdlIGFyZSBub3QgdXNpbmcgbmdNb2RlbCB0byB1cGRhdGUgdGhlIGVkaXRWYWx1ZVxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBjaGFuZ2UgZXZlbnQgb2YgdGhlIGlubGluZUVkaXRvclRlbXBsYXRlIGlzIGhpdCBiZWZvcmVcbiAgICAgICAgLy8gdHJ5aW5nIHRvIHVwZGF0ZSBhbnkgY2VsbFxuICAgICAgICBjb25zdCBjZWxsTm9kZSA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9jZWxsX2J5X2luZGV4KHRoaXMuY2VsbC5pZC5yb3dJbmRleCwgdGhpcy5jZWxsLmNvbHVtbi5maWVsZCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBhY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gY2VsbE5vZGUuZ2V0Um9vdE5vZGUoKSBhcyBEb2N1bWVudCB8IFNoYWRvd1Jvb3Q7XG4gICAgICAgICAgICBpZiAoY2VsbE5vZGUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdyaWQudmFsaWRhdGlvbi5nZXRGb3JtQ29udHJvbCh0aGlzLmNlbGwuaWQucm93SUQsIHRoaXMuY2VsbC5jb2x1bW4uZmllbGQpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnZhbGlkYXRpb25UcmlnZ2VyID09PSAnYmx1cicgJiYgdGhpcy5jZWxsLnBlbmRpbmdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRyaWdnZXIgaXMgYmx1ciwgdXBkYXRlIHZhbHVlIGlmIHRoZXJlJ3MgYSBwZW5kaW5nIG9uZSBhbmQgbWFyayBhcyB0b3VjaGVkLlxuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jZWxsLnBlbmRpbmdWYWx1ZSk7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmlkLnZhbGlkYXRpb25UcmlnZ2VyID09PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb25lQXJncztcbiAgICAgICAgaWYgKHRoaXMuY2VsbC5jb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyAmJiAhaXNEYXRlKHRoaXMuY2VsbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodGhpcy5jZWxsLnZhbHVlKSwgdGhpcy5jZWxsLmVkaXRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBkb25lQXJncyA9IHRoaXMuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5jZWxsLnZhbHVlLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsRWRpdChldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgLy8gdGhlIGZvY3VzIGlzIG5lZWRlZCB3aGVuIHdlIGNhbmNlbCB0aGUgY2VsbEVkaXQgc28gdGhhdCB0aGUgYWN0aXZlRWxlbWVudCBzdGF5cyBvbiB0aGUgZWRpdG9yIHRlbXBsYXRlXG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuXG4gICAgICAgIGRvbmVBcmdzID0gdGhpcy5jZWxsRWRpdERvbmUoZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKGV4aXQpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uYXJncywgLi4uZG9uZUFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXREb25lKGV2ZW50LCBhZGRSb3c6IGJvb2xlYW4pOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMuY2VsbC5jcmVhdGVDZWxsRWRpdERvbmVFdmVudEFyZ3MobmV3VmFsdWUsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0RG9uZS5lbWl0KGRvbmVBcmdzKTtcbiAgICAgICAgaWYgKGFkZFJvdykge1xuICAgICAgICAgICAgZG9uZUFyZ3Mucm93RGF0YSA9IHRoaXMucm93LmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbmVBcmdzO1xuICAgIH1cblxuICAgIC8qKiBFeGl0IGNlbGwgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGV4aXRDZWxsRWRpdChldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGlmICghdGhpcy5jZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsPy5jcmVhdGVDZWxsRWRpdERvbmVFdmVudEFyZ3MobmV3VmFsdWUsIGV2ZW50KTtcblxuICAgICAgICB0aGlzLmNlbGwudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0RXhpdC5lbWl0KGFyZ3MpO1xuICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuXG4gICAgLyoqIENsZWFycyBjZWxsIGVkaXRpbmcgc3RhdGUgKi9cbiAgICBwdWJsaWMgZW5kQ2VsbEVkaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdGFyZ2V0ZWQgY2VsbCBpcyBpbiBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgdGFyZ2V0SW5FZGl0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JbmRleCAmJiB0aGlzLmNlbGwucm93SW5kZXggPT09IHJvd0luZGV4O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBJZ3hSb3dDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hDZWxsQ3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIF9yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jvd0VkaXRpbmdTdGFydGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZ2V0IHByaW1hcnlLZXkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93SW5FZGl0TW9kZSgpOiBSb3dUeXBlIHtcbiAgICAgICAgY29uc3QgZWRpdFJvd1N0YXRlID0gdGhpcy5yb3c7XG4gICAgICAgIHJldHVybiBlZGl0Um93U3RhdGUgIT09IG51bGwgPyB0aGlzLmdyaWQucm93TGlzdC5maW5kKGUgPT4gZS5rZXkgPT09IGVkaXRSb3dTdGF0ZS5pZCkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5vbkVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmICh0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSBudWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VkaXRpbmdCbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb3dFZGl0aW5nQmxvY2tlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEVudGVycyByb3cgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGJlZ2luUm93RWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3cgfHwgISh0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4RWRpdFJvdy5uYW1lKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUm93KHRoaXMuY2VsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcm93RWRpdGluZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dBcmdzID0gdGhpcy5yb3cuY3JlYXRlUm93RWRpdEV2ZW50QXJncyhmYWxzZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFbnRlci5lbWl0KHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChyb3dBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZEVkaXRNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3Jvd0VkaXRpbmdTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3cudHJhbnNhY3Rpb25TdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlblJvd092ZXJsYXkodGhpcy5yb3cuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0VkaXQoZXZlbnQ6IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucm93LmNyZWF0ZVJvd0VkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93KGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdGluZ092ZXJsYXkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheS5jb2xsYXBzZWQgfHwgIXRoaXMucm93KSB7XG4gICAgICAgICAgICByZXR1cm4ge30gYXMgSUdyaWRFZGl0RXZlbnRBcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0VkaXREYXRhKHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhKTtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3MgfCBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgICAgICB0aGlzLnJvdy5uZXdEYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICBsZXQgcm93RWRpdEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVSb3dFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICBsZXQgbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgICAgIGlmICghY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgaXNBZGRSb3cgPSB0aGlzLnJvdyAmJiB0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWU7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMucm93ID8gdGhpcy5yb3cuaWQgOiB0aGlzLmNlbGwuaWQucm93SUQ7XG4gICAgICAgICAgICBpZiAoaXNBZGRSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmFsaWRhdGlvbi5jbGVhcihpZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52YWxpZGF0aW9uLnVwZGF0ZShpZCwgcm93RWRpdEFyZ3Mub2xkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpIHtcbiAgICAgICAgICAgIHJvd0VkaXRBcmdzID0gdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyh0aGlzLnJvdywgdGhpcy5yb3cubmV3RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKHJvd0VkaXRBcmdzLm9sZFZhbHVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dBZGRBcmdzID0gdGhpcy5yb3cuY3JlYXRlUm93RGF0YUV2ZW50QXJncyhldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkLmVtaXQocm93QWRkQXJncyk7XG4gICAgICAgICAgICBpZiAocm93QWRkQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93QWRkQXJncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudFJvd0lkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5hZGRSb3dUb0RhdGEodGhpcy5yb3cubmV3RGF0YSA/PyB0aGlzLnJvdy5kYXRhLCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG5cbiAgICAgICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3dFZGl0RG9uZShudWxsLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMuZXhpdFJvd0VkaXQocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4geyAuLi5ub25DYW5jZWxhYmxlQXJncywgLi4ucm93RWRpdEFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdERvbmUoY2FjaGVkUm93RGF0YSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5yb3cuY3JlYXRlUm93RWRpdERvbmVFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cblxuICAgIC8qKiBFeGl0IHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdFJvd0VkaXQoY2FjaGVkUm93RGF0YSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93LmNyZWF0ZVJvd0VkaXREb25lRXZlbnRBcmdzKGNhY2hlZFJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFeGl0LmVtaXQobm9uQ2FuY2VsYWJsZUFyZ3MpO1xuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSgpO1xuXG4gICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICByZXR1cm4gbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRSb3dFZGl0KCkge1xuICAgICAgICB0aGlzLnJvdyA9IG51bGw7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm93RWRpdGluZ1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgYW5kIHJvdyBlZGl0aW5nIHN0YXRlIGFuZCBjbG9zZXMgcm93IGVkaXRpbmcgdGVtcGxhdGUgaWYgaXQgaXMgb3BlbiAqL1xuICAgIHB1YmxpYyBlbmRFZGl0TW9kZSgpIHtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93RWRpdERhdGEocm93OiBJZ3hFZGl0Um93LCB2YWx1ZT86IGFueSkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IHJvd0luRWRpdE1vZGUgPSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICByb3cubmV3RGF0YSA9IHZhbHVlID8/IHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZTtcblxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHJvdy5pZCA9PT0gcm93SW5FZGl0TW9kZS5pZCkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBzcHJlYWQgb3BlcmF0b3IgaGVyZSBhcyBpdCB3aWxsIGNvcHkgZXZlcnl0aGluZyBvdmVyIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGRlc2NyaXB0b3JzXG4gICAgICAgICAgICByb3cuZGF0YSA9IE9iamVjdC5hc3NpZ24oY29weURlc2NyaXB0b3JzKHJvdy5kYXRhKSwgcm93LmRhdGEsIHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBXb3JrYXJvdW5kIGZvciB1cGRhdGluZyBhIHJvdyBpbiBlZGl0IG1vZGUgdGhyb3VnaCB0aGUgQVBJXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvdy5pZCk7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHN0YXRlID8gT2JqZWN0LmFzc2lnbih7fSwgcm93LmRhdGEsIHN0YXRlLnZhbHVlKSA6IHJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hSb3dBZGRDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hSb3dDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBhZGRSb3dQYXJlbnQ6IElneEFkZFJvd1BhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3cocGFyZW50Um93OiBSb3dUeXBlLCBhc0NoaWxkPzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvd1BhcmVudChwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIGNvbnN0IG5ld1JlYyA9IHRoaXMuZ3JpZC5nZXRFbXB0eVJlY29yZE9iamVjdEZvcihwYXJlbnRSb3cpO1xuICAgICAgICBjb25zdCBhZGRSb3dJbmRleCA9IHRoaXMuYWRkUm93UGFyZW50LmluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEFkZFJvdyhuZXdSZWMucm93SUQsIGFkZFJvd0luZGV4LCBuZXdSZWMuZGF0YSwgbmV3UmVjLnJlY29yZFJlZiwgdGhpcy5ncmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3dQYXJlbnQocm93OiBSb3dUeXBlLCBuZXdSb3dBc0NoaWxkPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHJvdyA/IHJvdy5pbmRleCA6IC0xO1xuICAgICAgICBjb25zdCByb3dJZCA9IHJvdyA/IHJvdy5rZXkgOiAocm93SW5kZXggPj0gMCA/IHRoaXMuZ3JpZC5yb3dMaXN0Lmxhc3Qua2V5IDogbnVsbCk7XG5cbiAgICAgICAgY29uc3QgaXNJblBpbm5lZEFyZWEgPSB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleChyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHBpbkluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dJZCk7XG4gICAgICAgIGNvbnN0IHVucGluSW5kZXggPSB0aGlzLmdyaWQuZ2V0VW5waW5uZWRJbmRleEJ5SWQocm93SWQpO1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IHtcbiAgICAgICAgICAgIHJvd0lEOiByb3dJZCxcbiAgICAgICAgICAgIHJvd0tleTogcm93SWQsXG4gICAgICAgICAgICBpbmRleDogaXNJblBpbm5lZEFyZWEgPyBwaW5JbmRleCA6IHVucGluSW5kZXgsXG4gICAgICAgICAgICBhc0NoaWxkOiBuZXdSb3dBc0NoaWxkLFxuICAgICAgICAgICAgaXNQaW5uZWQ6IGlzSW5QaW5uZWRBcmVhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHwgSVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgaXNBZGRSb3cgPSB0aGlzLnJvdyAmJiB0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWU7XG4gICAgICAgIGlmIChpc0FkZFJvdykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChhZGRSb3dBcmdzOiBJUm93RGF0YUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBhZGRSb3dBcmdzLmRhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlubmVkSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0RhdGFbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgLy8gQSBjaGVjayB3aGV0aGVyIHRoZSByb3cgaXMgaW4gdGhlIGN1cnJlbnQgdmlld1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdJbmRleCA9IHBpbm5lZEluZGV4ICE9PSAtMSA/IHBpbm5lZEluZGV4IDogdGhpcy5fZmluZFJlY29yZEluZGV4SW5WaWV3KHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEuZmluZEluZGV4KGRhdGEgPT4gZGF0YVt0aGlzLnByaW1hcnlLZXldID09PSByb3dEYXRhW3RoaXMucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5WaWV3ID0gdmlld0luZGV4ICE9PSAtMSAmJiAhdGhpcy5ncmlkLm5hdmlnYXRpb24uc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHZpZXdJbmRleCwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0luZGV4ID0gaXNJblZpZXcgPyAtMSA6IGRhdGFJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2hvd1NuYWNrYmFyRm9yKHNob3dJbmRleCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FkZFJvdykge1xuICAgICAgICAgICAgdGhpcy5lbmRBZGRSb3coKTtcbiAgICAgICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dBZGRlZEV2ZW50QXJnczogSVJvd0RhdGFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3Mucm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogYXJncy5yb3dEYXRhLFxuICAgICAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5S2V5OiBhcmdzLnJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldLFxuICAgICAgICAgICAgICAgICAgICByb3dLZXk6IGFyZ3Mucm93RGF0YVt0aGlzLmdyaWQucHJpbWFyeUtleV0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZE5vdGlmaWVyLm5leHQocm93QWRkZWRFdmVudEFyZ3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5lbWl0KHJvd0FkZGVkRXZlbnRBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZEFkZFJvdygpIHtcbiAgICAgICAgdGhpcy5hZGRSb3dQYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIG1vZGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIF9maW5kUmVjb3JkSW5kZXhJblZpZXcocmVjKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmluZEluZGV4KGRhdGEgPT4gZGF0YVt0aGlzLnByaW1hcnlLZXldID09PSByZWNbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICBpZiAodGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm93UGFyZW50LmFzQ2hpbGQgPyB0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCAhPT0gbnVsbCAmJiB0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGF3bmVkRm9yUmVjb3JkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3JlY19ieV9pZCh0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhd25lZEZvclJlY29yZD8ucGFyZW50Py5yb3dJRDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRDUlVEU2VydmljZSBleHRlbmRzIElneFJvd0FkZENydWRTdGF0ZSB7XG5cbiAgICBwdWJsaWMgZW50ZXJFZGl0TW9kZShjZWxsLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5Db21wb3NpdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5vbkVkaXRhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgaGF2ZSBhIGBwcmltYXJ5S2V5YCBzcGVjaWZpZWQgd2hlbiB1c2luZyBgcm93RWRpdGFibGVgIScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGNhc2Ugc29sZWx5IGZvciBmMi9lbnRlciBuYXYgdGhhdCB1c2VzIGVudGVyRWRpdE1vZGUgYXMgdG9nZ2xlLiBSZWZhY3Rvci5cbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbGVkID0gdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCFjYW5jZWxlZCB8fCAhdGhpcy5jZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0VkaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHJvd0RhdGFcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3cgJiYgIXRoaXMuc2FtZVJvdyhjZWxsPy5jZWxsSUQ/LnJvd0lEKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZ0Jsb2NrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDZWxsKGNlbGwpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmJlZ2luUm93RWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWdpbkNlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVudGVycyBhZGQgcm93IG1vZGUgYnkgY3JlYXRpbmcgdGVtcG9yYXJ5IGR1bW15IHNvIHRoZSB1c2VyIGNhbiBmaWxsIGluIG5ldyByb3cgY2VsbHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Um93IFBhcmVudCByb3cgYWZ0ZXIgd2hpY2ggdGhlIEFkZCBSb3cgVUkgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgIElmIGBudWxsYCB3aWxsIHNob3cgaXQgYXQgdGhlIGJvdHRvbSBhZnRlciBhbGwgcm93cyAob3IgdG9wIGlmIHRoZXJlIGFyZSBub3Qgcm93cykuXG4gICAgICogQHBhcmFtIGFzQ2hpbGQgU3BlY2lmaWVzIGlmIHRoZSBuZXcgcm93IHNob3VsZCBiZSBhZGRlZCBhcyBhIGNoaWxkIHRvIGEgdHJlZSByb3cuXG4gICAgICogQHBhcmFtIGV2ZW50IEJhc2UgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGFkZCByb3cgbW9kZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZW50ZXJBZGRSb3dNb2RlKHBhcmVudFJvdzogUm93VHlwZSwgYXNDaGlsZD86IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0VkaXRpbmcgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgdXNlIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nISBQbGVhc2Ugc2V0IHJvd0VkaXRhYmxlIHRvIHRydWUuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICBpZiAocGFyZW50Um93ICE9IG51bGwgJiYgdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocGFyZW50Um93LmtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2xsYXBzZVJvdyhwYXJlbnRSb3cua2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93KHBhcmVudFJvdywgYXNDaGlsZCk7XG5cbiAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5zdGFydFBlbmRpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICAvLyBJZiBwYXJlbnQgaXMgcGlubmVkLCBhZGQgdGhlIG5ldyByb3cgdG8gcGlubmVkIHJlY29yZHNcbiAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgYW55KS5fcGlubmVkUmVjb3JkSURzLnNwbGljZSh0aGlzLnJvdy5pbmRleCwgMCwgdGhpcy5yb3cuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLnRyaWdnZXJQaXBlcygpO1xuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcyh0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyh0aGlzLnJvdy5pbmRleCwgLTEpO1xuICAgICAgICAvLyB3aGVuIHNlbGVjdGluZyB0aGUgZHVtbXkgcm93IHdlIG5lZWQgdG8gYWRqdXN0IGZvciB0b3AgcGlubmVkIHJvd3NcbiAgICAgICAgY29uc3QgaW5kZXhBZGp1c3QgPSB0aGlzLmdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgP1xuICAgICAgICAgICAgKCF0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCA/IHRoaXMuZ3JpZC5waW5uZWRSb3dzLmxlbmd0aCA6IDApIDpcbiAgICAgICAgICAgICghdGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQgPyAwIDogdGhpcy5ncmlkLnVucGlubmVkUmVjb3Jkcy5sZW5ndGgpO1xuXG4gICAgICAgIC8vIFRPRE86IFR5cGUgdGhpcyB3aXRob3V0IHNob3ZpbmcgYSBidW5jaCBvZiBpbnRlcm5hbCBwcm9wZXJ0aWVzIGluIHRoZSByb3cgdHlwZVxuICAgICAgICBjb25zdCBkdW1teVJvdyA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5yb3cuaW5kZXggKyBpbmRleEFkanVzdCkgYXMgYW55O1xuICAgICAgICBkdW1teVJvdy50cmlnZ2VyQWRkQW5pbWF0aW9uKCk7XG4gICAgICAgIGR1bW15Um93LmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGR1bW15Um93LmFkZEFuaW1hdGlvbkVuZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gZHVtbXlSb3cuY2VsbHMuZmluZChjID0+IGMuZWRpdGFibGUpO1xuICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW50ZXJFZGl0TW9kZShjZWxsLCBldmVudCk7XG4gICAgICAgICAgICAgICAgY2VsbC5hY3RpdmF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5pc2hlcyB0aGUgcm93IHRyYW5zYWN0aW9ucyBvbiB0aGUgY3VycmVudCByb3cgYW5kIHJldHVybnMgd2hldGhlciB0aGUgZ3JpZCBlZGl0aW5nIHdhcyBjYW5jZWxlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgYGNvbW1pdCA9PT0gdHJ1ZWAsIHBhc3NlcyB0aGVtIGZyb20gdGhlIHBlbmRpbmcgc3RhdGUgdG8gdGhlIGRhdGEgKG9yIHRyYW5zYWN0aW9uIHNlcnZpY2UpXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uIChjbGljayk9XCJncmlkLmVuZEVkaXQodHJ1ZSlcIj5Db21taXQgUm93PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGNvbW1pdFxuICAgICAqL1xuICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGUgc2FtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0aG9kIHdpdGhvdXQgZXZ0IGVtaXNzaW9uLlxuICAgIHB1YmxpYyBlbmRFZGl0KGNvbW1pdCA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdyAmJiAhdGhpcy5jZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXJncztcbiAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgYXJncyA9IHRoaXMudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICBpZiAoYXJncyAmJiBhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzLmNhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5lZWRlZGUgYmVjYXVzZSB0aGlzLmNlbGwgaXMgbnVsbCBhZnRlciBleGl0Q2VsbEVkaXRcbiAgICAgICAgICAgIC8vIHRodXMgdGhlIG5leHQgaWYgaXMgYWx3YXlzIGZhbHNlXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5jZWxsO1xuICAgICAgICAgICAgdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgY2VsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUoY2VsbC5pZC5yb3dJRCwgdHJ1ZSkgfHwgY2VsbC5yb3dEYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52YWxpZGF0aW9uLnVwZGF0ZShjZWxsLmlkLnJvd0lELCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVSb3coY29tbWl0LCBldmVudCk7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZXZlbnQgJiYgYWN0aXZlQ2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBhY3RpdmVDZWxsLnJvdztcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2xJbmRleCA9IGFjdGl2ZUNlbGwubGF5b3V0ID8gYWN0aXZlQ2VsbC5sYXlvdXQuY29sdW1uVmlzaWJsZUluZGV4IDogYWN0aXZlQ2VsbC5jb2x1bW47XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
|
|
667
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVyRSxNQUFNLE9BQU8sVUFBVTtJQU1uQixZQUFtQixFQUFPLEVBQVMsS0FBYSxFQUFTLElBQVMsRUFBUyxJQUFjO1FBQXRFLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQVU7UUFGbEYsaUJBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUdwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsS0FBYTtRQUMvRCxNQUFNLElBQUksR0FBdUI7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLE1BQU0s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QUFDLEdBQUcsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs4R0FoSlEsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElHcmlkRWRpdERvbmVFdmVudEFyZ3MsIElHcmlkRWRpdEV2ZW50QXJncywgSVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzLCBJUm93RGF0YUV2ZW50QXJncyB9IGZyb20gJy4uL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgR3JpZFR5cGUsIFJvd1R5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvcHlEZXNjcmlwdG9ycywgaXNFcXVhbCwgaXNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi8uLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcblxuZXhwb3J0IGNsYXNzIElneEVkaXRSb3cge1xuICAgIHB1YmxpYyB0cmFuc2FjdGlvblN0YXRlOiBhbnk7XG4gICAgcHVibGljIHN0YXRlOiBhbnk7XG4gICAgcHVibGljIG5ld0RhdGE6IGFueTtcbiAgICBwdWJsaWMgcm93Rm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IGFueSwgcHVibGljIGluZGV4OiBudW1iZXIsIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLnJvd0Zvcm1Hcm91cCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmNyZWF0ZShpZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJvd0VkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0tleTogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIHZhbGlkOiB0aGlzLnJvd0Zvcm1Hcm91cC52YWxpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlTmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGFyZ3MubmV3VmFsdWUgPSB0aGlzLm5ld0RhdGEgPz8gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSb3dEYXRhRXZlbnRBcmdzKGV2ZW50PzogRXZlbnQpOiBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzOiBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dLZXk6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLm5ld0RhdGEgPz8gdGhpcy5kYXRhLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiB0cnVlLFxuICAgICAgICAgICAgdmFsaWQ6IHRoaXMucm93Rm9ybUdyb3VwLnZhbGlkLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJvd0VkaXREb25lRXZlbnRBcmdzKGNhY2hlZFJvd0RhdGE6IGFueSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCA/XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLmlkLCB0cnVlKSA6IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB1cGRhdGVkRGF0YSA/PyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQpO1xuICAgICAgICBjb25zdCBhcmdzOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcHJpbWFyeUtleTogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93S2V5OiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiBjYWNoZWRSb3dEYXRhLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHVwZGF0ZWREYXRhLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneEFkZFJvdyBleHRlbmRzIElneEVkaXRSb3cge1xuICAgIHB1YmxpYyBpc0FkZFJvdyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogYW55LFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICBkYXRhOiBhbnksXG4gICAgICAgIHB1YmxpYyByZWNvcmRSZWY6IGFueSxcbiAgICAgICAgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgc3VwZXIoaWQsIGluZGV4LCBkYXRhLCBncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlUm93RWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmNyZWF0ZVJvd0VkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlLCBldmVudCk7XG4gICAgICAgIGFyZ3Mub2xkVmFsdWUgPSBudWxsO1xuICAgICAgICBhcmdzLmlzQWRkUm93ID0gdHJ1ZTtcbiAgICAgICAgYXJncy5yb3dEYXRhID0gdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZVJvd0VkaXREb25lRXZlbnRBcmdzKGNhY2hlZFJvd0RhdGE6IGFueSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuY3JlYXRlUm93RWRpdERvbmVFdmVudEFyZ3MobnVsbCwgZXZlbnQpO1xuICAgICAgICBhcmdzLmlzQWRkUm93ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElneEFkZFJvd1BhcmVudCB7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxNy4xLjAuIFVzZSBgcm93S2V5YCBpbnN0ZWFkXG4gICAgICovXG4gICAgcm93SUQ6IHN0cmluZztcbiAgICByb3dLZXk6IGFueTtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGFzQ2hpbGQ6IGJvb2xlYW47XG4gICAgaXNQaW5uZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hDZWxsIHtcbiAgICBwdWJsaWMgcHJpbWFyeUtleTogYW55O1xuICAgIHB1YmxpYyBzdGF0ZTogYW55O1xuICAgIHB1YmxpYyBwZW5kaW5nVmFsdWU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaWQsXG4gICAgICAgIHB1YmxpYyByb3dJbmRleDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY29sdW1uLFxuICAgICAgICBwdWJsaWMgdmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIF9lZGl0VmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIHJvd0RhdGE6IGFueSxcbiAgICAgICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuZ3JpZC52YWxpZGF0aW9uLmNyZWF0ZShpZC5yb3dJRCwgcm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0VmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5ncmlkLnZhbGlkYXRpb24uZ2V0Rm9ybUNvbnRyb2wodGhpcy5pZC5yb3dJRCwgdGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZWRpdFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5ncmlkLnZhbGlkYXRpb24uZ2V0Rm9ybUNvbnRyb2wodGhpcy5pZC5yb3dJRCwgdGhpcy5jb2x1bW4uZmllbGQpO1xuXG4gICAgICAgIGlmICh0aGlzLmdyaWQudmFsaWRhdGlvblRyaWdnZXIgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRyaWdnZXIgaXMgY2hhbmdlLCBtYXJrIGFzIHRvdWNoZWQuXG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhc3RUb051bWJlcih2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiAhdGhpcy5jb2x1bW4uaW5saW5lRWRpdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOYU4odikgJiYgaXNGaW5pdGUodikgPyB2IDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNlbGxFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcHJpbWFyeUtleTogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgcm93S2V5OiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICB2YWxpZDogZm9ybUNvbnRyb2wgPyBmb3JtQ29udHJvbC52YWxpZCA6IHRydWUsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5jYXN0VG9OdW1iZXIodGhpcy5lZGl0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDZWxsRWRpdERvbmVFdmVudEFyZ3ModmFsdWU6IGFueSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCA/XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLmlkLnJvd0lELCB0cnVlKSA6IHRoaXMucm93RGF0YTtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHVwZGF0ZWREYXRhID09PSBudWxsID8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkLnJvd0lEKSA6IHVwZGF0ZWREYXRhO1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIHJvd0tleTogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIGNlbGxJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIC8vIHJvd0RhdGEgLSBzaG91bGQgYmUgdGhlIHVwZGF0ZWQvY29tbWl0dGVkIHJvd0RhdGEgLSB0aGlzIGVmZmVjdGl2ZWx5IHNob3VsZCBiZSB0aGUgbmV3VmFsdWVcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhc2Ugd2UgdXNlIHRoaXMucm93RGF0YSBkaXJlY3RseSwgaXMgd2hlbiB0aGVyZSBpcyBubyByb3dFZGl0aW5nIG9yIHRyYW5zYWN0aW9ucyBlbmFibGVkXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICB2YWxpZDogZm9ybUNvbnRyb2wgPyBmb3JtQ29udHJvbC52YWxpZCA6IHRydWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZTtcbiAgICBwdWJsaWMgY2VsbDogSWd4Q2VsbCB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyByb3c6IElneEVkaXRSb3cgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgaXNJbkNvbXBvc2l0aW9uTW9kZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNyZWF0ZUNlbGwoY2VsbCk6IElneENlbGwge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsID0gbmV3IElneENlbGwoY2VsbC5jZWxsSUQgfHwgY2VsbC5pZCwgY2VsbC5yb3cuaW5kZXgsIGNlbGwuY29sdW1uLCBjZWxsLnZhbHVlLCBjZWxsLnZhbHVlLFxuICAgICAgICAgICAgY2VsbC5yb3cuZGF0YSwgY2VsbC5ncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUm93KGNlbGw6IElneENlbGwpOiBJZ3hFZGl0Um93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEVkaXRSb3coY2VsbC5pZC5yb3dJRCwgY2VsbC5yb3dJbmRleCwgY2VsbC5yb3dEYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYW1lUm93KHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyAmJiB0aGlzLnJvdy5pZCA9PT0gcm93SUQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVDZWxsKGNlbGw6IElneENlbGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbGwuaWQucm93SUQgPT09IGNlbGwuaWQucm93SUQgJiZcbiAgICAgICAgICAgIHRoaXMuY2VsbC5pZC5jb2x1bW5JRCA9PT0gY2VsbC5pZC5jb2x1bW5JRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjZWxsSW5FZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jZWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBiZWdpbkNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVDZWxsRWRpdEV2ZW50QXJncyhmYWxzZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXRFbnRlci5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXQoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsLmNyZWF0ZUNlbGxFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDZWxsKGV4aXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIHdoZW4gd2UgYXJlIG5vdCB1c2luZyBuZ01vZGVsIHRvIHVwZGF0ZSB0aGUgZWRpdFZhbHVlXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGNoYW5nZSBldmVudCBvZiB0aGUgaW5saW5lRWRpdG9yVGVtcGxhdGUgaXMgaGl0IGJlZm9yZVxuICAgICAgICAvLyB0cnlpbmcgdG8gdXBkYXRlIGFueSBjZWxsXG4gICAgICAgIGNvbnN0IGNlbGxOb2RlID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2NlbGxfYnlfaW5kZXgodGhpcy5jZWxsLmlkLnJvd0luZGV4LCB0aGlzLmNlbGwuY29sdW1uLmZpZWxkKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IGFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChjZWxsTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBjZWxsTm9kZS5nZXRSb290Tm9kZSgpIGFzIERvY3VtZW50IHwgU2hhZG93Um9vdDtcbiAgICAgICAgICAgIGlmIChjZWxsTm9kZS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuY2VsbC5pZC5yb3dJRCwgdGhpcy5jZWxsLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQudmFsaWRhdGlvblRyaWdnZXIgPT09ICdibHVyJyAmJiB0aGlzLmNlbGwucGVuZGluZ1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGluIGNhc2UgdHJpZ2dlciBpcyBibHVyLCB1cGRhdGUgdmFsdWUgaWYgdGhlcmUncyBhIHBlbmRpbmcgb25lIGFuZCBtYXJrIGFzIHRvdWNoZWQuXG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmNlbGwucGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdyaWQudmFsaWRhdGlvblRyaWdnZXIgPT09ICdibHVyJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRvbmVBcmdzO1xuICAgICAgICBpZiAodGhpcy5jZWxsLmNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnICYmICFpc0RhdGUodGhpcy5jZWxsLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGlzRXF1YWwoRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLmNlbGwudmFsdWUpLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmNlbGwudmFsdWUsIHRoaXMuY2VsbC5lZGl0VmFsdWUpKSB7XG4gICAgICAgICAgICBkb25lQXJncyA9IHRoaXMuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAvLyB0aGUgZm9jdXMgaXMgbmVlZGVkIHdoZW4gd2UgY2FuY2VsIHRoZSBjZWxsRWRpdCBzbyB0aGF0IHRoZSBhY3RpdmVFbGVtZW50IHN0YXlzIG9uIHRoZSBlZGl0b3IgdGVtcGxhdGVcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKHRoaXMuY2VsbCk7XG5cbiAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmNlbGxFZGl0RG9uZShldmVudCwgZmFsc2UpO1xuICAgICAgICBpZiAoZXhpdCkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyAuLi5hcmdzLCAuLi5kb25lQXJncyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdERvbmUoZXZlbnQsIGFkZFJvdzogYm9vbGVhbik6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2VsbC5jYXN0VG9OdW1iZXIodGhpcy5jZWxsLmVkaXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5jZWxsLmNyZWF0ZUNlbGxFZGl0RG9uZUV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgICBkb25lQXJncy5yb3dEYXRhID0gdGhpcy5yb3cuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIEV4aXQgY2VsbCBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdENlbGxFZGl0KGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2VsbC5jYXN0VG9OdW1iZXIodGhpcy5jZWxsLmVkaXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGw/LmNyZWF0ZUNlbGxFZGl0RG9uZUV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuY2VsbC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXRFeGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRDZWxsRWRpdCgpIHtcbiAgICAgICAgdGhpcy5jZWxsID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSB0YXJnZXRlZCBjZWxsIGlzIGluIGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyB0YXJnZXRJbkVkaXQocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY2VsbC5jb2x1bW4uaW5kZXggPT09IGNvbHVtbkluZGV4ICYmIHRoaXMuY2VsbC5yb3dJbmRleCA9PT0gcm93SW5kZXg7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIElneFJvd0NydWRTdGF0ZSBleHRlbmRzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBjbG9zZVJvd0VkaXRpbmdPdmVybGF5ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgX3Jvd0VkaXRpbmdCbG9ja2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcm93RWRpdGluZ1N0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUtleSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dJbkVkaXRNb2RlKCk6IFJvd1R5cGUge1xuICAgICAgICBjb25zdCBlZGl0Um93U3RhdGUgPSB0aGlzLnJvdztcbiAgICAgICAgcmV0dXJuIGVkaXRSb3dTdGF0ZSAhPT0gbnVsbCA/IHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQoZSA9PiBlLmtleSA9PT0gZWRpdFJvd1N0YXRlLmlkKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFZGl0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0VkaXRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbm9uRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZ0Jsb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFZGl0aW5nQmxvY2tlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJvd0VkaXRpbmdCbG9ja2VkKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dFZGl0aW5nQmxvY2tlZCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogRW50ZXJzIHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgYmVnaW5Sb3dFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdyB8fCAhKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3codGhpcy5jZWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9yb3dFZGl0aW5nU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB0aGlzLnJvdy5jcmVhdGVSb3dFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdEVudGVyLmVtaXQocm93QXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fcm93RWRpdGluZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvdy50cmFuc2FjdGlvblN0YXRlID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5zdGFydFBlbmRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5vcGVuUm93T3ZlcmxheSh0aGlzLnJvdy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdChldmVudDogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yb3cuY3JlYXRlUm93RWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3coY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucm93RWRpdGFibGUgfHxcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheSAmJlxuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRpbmdPdmVybGF5LmNvbGxhcHNlZCB8fCAhdGhpcy5yb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBJR3JpZEVkaXRFdmVudEFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXJncztcbiAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgdGhpcy5yb3cubmV3RGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm93RWRpdERhdGEodGhpcy5yb3csIHRoaXMucm93Lm5ld0RhdGEpO1xuICAgICAgICAgICAgYXJncyA9IHRoaXMucm93RWRpdChldmVudCk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MgPSB0aGlzLmVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdCwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB8IElSb3dEYXRhQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgIGxldCByb3dFZGl0QXJncyA9IHRoaXMucm93LmNyZWF0ZVJvd0VkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgIGxldCBub25DYW5jZWxhYmxlQXJncztcbiAgICAgICAgaWYgKCFjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBpc0FkZFJvdyA9IHRoaXMucm93ICYmIHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hBZGRSb3cubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5yb3cgPyB0aGlzLnJvdy5pZCA6IHRoaXMuY2VsbC5pZC5yb3dJRDtcbiAgICAgICAgICAgIGlmIChpc0FkZFJvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52YWxpZGF0aW9uLmNsZWFyKGlkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnZhbGlkYXRpb24udXBkYXRlKGlkLCByb3dFZGl0QXJncy5vbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEVkaXRSb3cubmFtZSkge1xuICAgICAgICAgICAgcm93RWRpdEFyZ3MgPSB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfcm93KHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhLCBldmVudCk7XG4gICAgICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93RWRpdERvbmUocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0FkZEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVSb3dEYXRhRXZlbnRBcmdzKGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGQuZW1pdChyb3dBZGRBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBZGRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dBZGRBcmdzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50Um93SWQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLmFkZFJvd1RvRGF0YSh0aGlzLnJvdy5uZXdEYXRhID8/IHRoaXMucm93LmRhdGEsIHBhcmVudElkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcblxuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKG51bGwsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5leGl0Um93RWRpdChyb3dFZGl0QXJncy5vbGRWYWx1ZSwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiB7IC4uLm5vbkNhbmNlbGFibGVBcmdzLCAuLi5yb3dFZGl0QXJncyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByb3dFZGl0RG9uZShjYWNoZWRSb3dEYXRhLCBldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZG9uZUFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVSb3dFZGl0RG9uZUV2ZW50QXJncyhjYWNoZWRSb3dEYXRhLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RG9uZS5lbWl0KGRvbmVBcmdzKTtcbiAgICAgICAgcmV0dXJuIGRvbmVBcmdzO1xuICAgIH1cblxuXG4gICAgLyoqIEV4aXQgcm93IGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyBleGl0Um93RWRpdChjYWNoZWRSb3dEYXRhLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3cuY3JlYXRlUm93RWRpdERvbmVFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdEV4aXQuZW1pdChub25DYW5jZWxhYmxlQXJncyk7XG4gICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG5cbiAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgIHJldHVybiBub25DYW5jZWxhYmxlQXJncztcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIHJvdyBlZGl0aW5nIHN0YXRlICovXG4gICAgcHVibGljIGVuZFJvd0VkaXQoKSB7XG4gICAgICAgIHRoaXMucm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yb3dFZGl0aW5nU3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgY2VsbCBhbmQgcm93IGVkaXRpbmcgc3RhdGUgYW5kIGNsb3NlcyByb3cgZWRpdGluZyB0ZW1wbGF0ZSBpZiBpdCBpcyBvcGVuICovXG4gICAgcHVibGljIGVuZEVkaXRNb2RlKCkge1xuICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNsb3NlUm93RWRpdGluZ092ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3dFZGl0RGF0YShyb3c6IElneEVkaXRSb3csIHZhbHVlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IGdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgIHJvdy5uZXdEYXRhID0gdmFsdWUgPz8gcm93SW5FZGl0TW9kZS50cmFuc2FjdGlvblN0YXRlO1xuXG5cbiAgICAgICAgaWYgKHJvd0luRWRpdE1vZGUgJiYgcm93LmlkID09PSByb3dJbkVkaXRNb2RlLmlkKSB7XG4gICAgICAgICAgICAvLyBkbyBub3QgdXNlIHNwcmVhZCBvcGVyYXRvciBoZXJlIGFzIGl0IHdpbGwgY29weSBldmVyeXRoaW5nIG92ZXIgYW4gZW1wdHkgb2JqZWN0IHdpdGggbm8gZGVzY3JpcHRvcnNcbiAgICAgICAgICAgIHJvdy5kYXRhID0gT2JqZWN0LmFzc2lnbihjb3B5RGVzY3JpcHRvcnMocm93LmRhdGEpLCByb3cuZGF0YSwgcm93SW5FZGl0TW9kZS50cmFuc2FjdGlvblN0YXRlKTtcbiAgICAgICAgICAgIC8vIFRPRE86IFdvcmthcm91bmQgZm9yIHVwZGF0aW5nIGEgcm93IGluIGVkaXQgbW9kZSB0aHJvdWdoIHRoZSBBUElcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUocm93LmlkKTtcbiAgICAgICAgICAgIHJvdy5kYXRhID0gc3RhdGUgPyBPYmplY3QuYXNzaWduKHt9LCByb3cuZGF0YSwgc3RhdGUudmFsdWUpIDogcm93LmRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGFyZW50Um93SWQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneFJvd0FkZENydWRTdGF0ZSBleHRlbmRzIElneFJvd0NydWRTdGF0ZSB7XG4gICAgcHVibGljIGFkZFJvd1BhcmVudDogSWd4QWRkUm93UGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFkZFJvdyhwYXJlbnRSb3c6IFJvd1R5cGUsIGFzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93UGFyZW50KHBhcmVudFJvdywgYXNDaGlsZCk7XG5cbiAgICAgICAgY29uc3QgbmV3UmVjID0gdGhpcy5ncmlkLmdldEVtcHR5UmVjb3JkT2JqZWN0Rm9yKHBhcmVudFJvdyk7XG4gICAgICAgIGNvbnN0IGFkZFJvd0luZGV4ID0gdGhpcy5hZGRSb3dQYXJlbnQuaW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4QWRkUm93KG5ld1JlYy5yb3dJRCwgYWRkUm93SW5kZXgsIG5ld1JlYy5kYXRhLCBuZXdSZWMucmVjb3JkUmVmLCB0aGlzLmdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFkZFJvd1BhcmVudChyb3c6IFJvd1R5cGUsIG5ld1Jvd0FzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93ID8gcm93LmluZGV4IDogLTE7XG4gICAgICAgIGNvbnN0IHJvd0lkID0gcm93ID8gcm93LmtleSA6IChyb3dJbmRleCA+PSAwID8gdGhpcy5ncmlkLnJvd0xpc3QubGFzdC5rZXkgOiBudWxsKTtcblxuICAgICAgICBjb25zdCBpc0luUGlubmVkQXJlYSA9IHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgcGluSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0lkKTtcbiAgICAgICAgY29uc3QgdW5waW5JbmRleCA9IHRoaXMuZ3JpZC5nZXRVbnBpbm5lZEluZGV4QnlJZChyb3dJZCk7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0ge1xuICAgICAgICAgICAgcm93SUQ6IHJvd0lkLFxuICAgICAgICAgICAgcm93S2V5OiByb3dJZCxcbiAgICAgICAgICAgIGluZGV4OiBpc0luUGlubmVkQXJlYSA/IHBpbkluZGV4IDogdW5waW5JbmRleCxcbiAgICAgICAgICAgIGFzQ2hpbGQ6IG5ld1Jvd0FzQ2hpbGQsXG4gICAgICAgICAgICBpc1Bpbm5lZDogaXNJblBpbm5lZEFyZWFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3MgfCBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBpc0FkZFJvdyA9IHRoaXMucm93ICYmIHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hBZGRSb3cubmFtZTtcbiAgICAgICAgaWYgKGlzQWRkUm93KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGFkZFJvd0FyZ3M6IElSb3dEYXRhRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IGFkZFJvd0FyZ3MuZGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5uZWRJbmRleCA9IHRoaXMuZ3JpZC5waW5uZWRSZWNvcmRzLmZpbmRJbmRleCh4ID0+IHhbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNoZWNrIHdoZXRoZXIgdGhlIHJvdyBpcyBpbiB0aGUgY3VycmVudCB2aWV3XG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld0luZGV4ID0gcGlubmVkSW5kZXggIT09IC0xID8gcGlubmVkSW5kZXggOiB0aGlzLl9maW5kUmVjb3JkSW5kZXhJblZpZXcocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0RhdGFbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJblZpZXcgPSB2aWV3SW5kZXggIT09IC0xICYmICF0aGlzLmdyaWQubmF2aWdhdGlvbi5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwodmlld0luZGV4LCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93SW5kZXggPSBpc0luVmlldyA/IC0xIDogZGF0YUluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zaG93U25hY2tiYXJGb3Ioc2hvd0luZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdCwgZXZlbnQpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQWRkUm93KSB7XG4gICAgICAgICAgICB0aGlzLmVuZEFkZFJvdygpO1xuICAgICAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FkZGVkRXZlbnRBcmdzOiBJUm93RGF0YUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncy5yb3dEYXRhLFxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiBhcmdzLnJvd0RhdGEsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnlLZXk6IGFyZ3Mucm93RGF0YVt0aGlzLmdyaWQucHJpbWFyeUtleV0sXG4gICAgICAgICAgICAgICAgICAgIHJvd0tleTogYXJncy5yb3dEYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkTm90aWZpZXIubmV4dChyb3dBZGRlZEV2ZW50QXJncyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkLmVtaXQocm93QWRkZWRFdmVudEFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kQWRkUm93KCkge1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICogVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgbW9kaWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyZWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJlY1t0aGlzLnByaW1hcnlLZXldKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0UGFyZW50Um93SWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5hc0NoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCA/IHRoaXMuYWRkUm93UGFyZW50LnJvd0lEIDogdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSBudWxsICYmIHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYXduZWRGb3JSZWNvcmQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcmVjX2J5X2lkKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybiBzcGF3bmVkRm9yUmVjb3JkPy5wYXJlbnQ/LnJvd0lEO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZENSVURTZXJ2aWNlIGV4dGVuZHMgSWd4Um93QWRkQ3J1ZFN0YXRlIHtcblxuICAgIHB1YmxpYyBlbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubm9uRWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBoYXZlIGEgYHByaW1hcnlLZXlgIHNwZWNpZmllZCB3aGVuIHVzaW5nIGByb3dFZGl0YWJsZWAhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogY2FzZSBzb2xlbHkgZm9yIGYyL2VudGVyIG5hdiB0aGF0IHVzZXMgZW50ZXJFZGl0TW9kZSBhcyB0b2dnbGUuIFJlZmFjdG9yLlxuICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbmNlbGVkIHx8ICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gcm93RGF0YVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdyAmJiAhdGhpcy5zYW1lUm93KGNlbGw/LmNlbGxJRD8ucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nQmxvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjYW5jZWxlZCA9IHRoaXMuYmVnaW5Sb3dFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2VsbChjZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW50ZXJzIGFkZCByb3cgbW9kZSBieSBjcmVhdGluZyB0ZW1wb3JhcnkgZHVtbXkgc28gdGhlIHVzZXIgY2FuIGZpbGwgaW4gbmV3IHJvdyBjZWxscy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRSb3cgUGFyZW50IHJvdyBhZnRlciB3aGljaCB0aGUgQWRkIFJvdyBVSSB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgSWYgYG51bGxgIHdpbGwgc2hvdyBpdCBhdCB0aGUgYm90dG9tIGFmdGVyIGFsbCByb3dzIChvciB0b3AgaWYgdGhlcmUgYXJlIG5vdCByb3dzKS5cbiAgICAgKiBAcGFyYW0gYXNDaGlsZCBTcGVjaWZpZXMgaWYgdGhlIG5ldyByb3cgc2hvdWxkIGJlIGFkZGVkIGFzIGEgY2hpbGQgdG8gYSB0cmVlIHJvdy5cbiAgICAgKiBAcGFyYW0gZXZlbnQgQmFzZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYWRkIHJvdyBtb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbnRlckFkZFJvd01vZGUocGFyZW50Um93OiBSb3dUeXBlLCBhc0NoaWxkPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucm93RWRpdGluZyAmJiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCB1c2Ugcm93IGVkaXQgbW9kZSB0byBwZXJmb3JtIHJvdyBhZGRpbmchIFBsZWFzZSBzZXQgcm93RWRpdGFibGUgdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAvLyB3b3JrIHdpdGggY29weSBvZiBvcmlnaW5hbCByb3csIHNpbmNlIGNvbnRleHQgbWF5IGNoYW5nZSBvbiBjb2xsYXBzZS5cbiAgICAgICAgY29uc3QgcGFyZW50Um93Q29weSA9IHBhcmVudFJvdyA/IE9iamVjdC5hc3NpZ24oY29weURlc2NyaXB0b3JzKHBhcmVudFJvdyksIHBhcmVudFJvdykgOiBudWxsO1xuICAgICAgICBpZiAocGFyZW50Um93Q29weSAhPSBudWxsICYmIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHBhcmVudFJvd0NvcHkua2V5KSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KHBhcmVudFJvd0NvcHkua2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93KHBhcmVudFJvd0NvcHksIGFzQ2hpbGQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCkge1xuICAgICAgICAgICAgLy8gSWYgcGFyZW50IGlzIHBpbm5lZCwgYWRkIHRoZSBuZXcgcm93IHRvIHBpbm5lZCByZWNvcmRzXG4gICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuX3Bpbm5lZFJlY29yZElEcy5zcGxpY2UodGhpcy5yb3cuaW5kZXgsIDAsIHRoaXMucm93LmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5yb3cuaW5kZXgsIC0xKTtcbiAgICAgICAgLy8gd2hlbiBzZWxlY3RpbmcgdGhlIGR1bW15IHJvdyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdG9wIHBpbm5lZCByb3dzXG4gICAgICAgIGNvbnN0IGluZGV4QWRqdXN0ID0gdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wID9cbiAgICAgICAgICAgICghdGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQgPyB0aGlzLmdyaWQucGlubmVkUm93cy5sZW5ndGggOiAwKSA6XG4gICAgICAgICAgICAoIXRoaXMuYWRkUm93UGFyZW50LmlzUGlubmVkID8gMCA6IHRoaXMuZ3JpZC51bnBpbm5lZFJlY29yZHMubGVuZ3RoKTtcblxuICAgICAgICAvLyBUT0RPOiBUeXBlIHRoaXMgd2l0aG91dCBzaG92aW5nIGEgYnVuY2ggb2YgaW50ZXJuYWwgcHJvcGVydGllcyBpbiB0aGUgcm93IHR5cGVcbiAgICAgICAgY29uc3QgZHVtbXlSb3cgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHRoaXMucm93LmluZGV4ICsgaW5kZXhBZGp1c3QpIGFzIGFueTtcbiAgICAgICAgZHVtbXlSb3cudHJpZ2dlckFkZEFuaW1hdGlvbigpO1xuICAgICAgICBkdW1teVJvdy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkdW1teVJvdy5hZGRBbmltYXRpb25FbmQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGR1bW15Um93LmNlbGxzLmZpbmQoYyA9PiBjLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5jZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIHJvdyB0cmFuc2FjdGlvbnMgb24gdGhlIGN1cnJlbnQgcm93IGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGdyaWQgZWRpdGluZyB3YXMgY2FuY2VsZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIGBjb21taXQgPT09IHRydWVgLCBwYXNzZXMgdGhlbSBmcm9tIHRoZSBwZW5kaW5nIHN0YXRlIHRvIHRoZSBkYXRhIChvciB0cmFuc2FjdGlvbiBzZXJ2aWNlKVxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiAoY2xpY2spPVwiZ3JpZC5lbmRFZGl0KHRydWUpXCI+Q29tbWl0IFJvdzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBjb21taXRcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGhvZCB3aXRob3V0IGV2dCBlbWlzc2lvbi5cbiAgICBwdWJsaWMgZW5kRWRpdChjb21taXQgPSB0cnVlLCBldmVudD86IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5yb3cgJiYgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBuZWVkZWRlIGJlY2F1c2UgdGhpcy5jZWxsIGlzIG51bGwgYWZ0ZXIgZXhpdENlbGxFZGl0XG4gICAgICAgICAgICAvLyB0aHVzIHRoZSBuZXh0IGlmIGlzIGFsd2F5cyBmYWxzZVxuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbDtcbiAgICAgICAgICAgIHRoaXMuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIGNlbGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKGNlbGwuaWQucm93SUQsIHRydWUpIHx8IGNlbGwucm93RGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmFsaWRhdGlvbi51cGRhdGUoY2VsbC5pZC5yb3dJRCwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IHRoaXMudXBkYXRlUm93KGNvbW1pdCwgZXZlbnQpO1xuICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVDZWxsID0gdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGV2ZW50ICYmIGFjdGl2ZUNlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gYWN0aXZlQ2VsbC5yb3c7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlQ29sSW5kZXggPSBhY3RpdmVDZWxsLmxheW91dCA/IGFjdGl2ZUNlbGwubGF5b3V0LmNvbHVtblZpc2libGVJbmRleCA6IGFjdGl2ZUNlbGwuY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
|
|
@@ -147,13 +147,13 @@ export class IgxInputGroupComponent {
|
|
|
147
147
|
this._filled = false;
|
|
148
148
|
this._resourceStrings = getCurrentResourceStrings(InputResourceStringsEN);
|
|
149
149
|
this._theme = this.themeToken.theme;
|
|
150
|
-
const
|
|
150
|
+
const themeChange = this.themeToken.onChange((theme) => {
|
|
151
151
|
if (this._theme !== theme) {
|
|
152
152
|
this._theme = theme;
|
|
153
153
|
this.cdr.detectChanges();
|
|
154
154
|
}
|
|
155
155
|
});
|
|
156
|
-
this._destroyRef.onDestroy(() => unsubscribe);
|
|
156
|
+
this._destroyRef.onDestroy(() => themeChange.unsubscribe());
|
|
157
157
|
}
|
|
158
158
|
/** @hidden */
|
|
159
159
|
onClick(event) {
|
|
@@ -341,7 +341,7 @@ export class IgxInputGroupComponent {
|
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
343
|
/** @hidden @internal */
|
|
344
|
-
|
|
344
|
+
ngAfterContentChecked() {
|
|
345
345
|
this.setComponentTheme();
|
|
346
346
|
}
|
|
347
347
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxInputGroupComponent, deps: [{ token: i0.ElementRef }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: DOCUMENT }, { token: i1.PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: THEME_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -447,4 +447,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
447
447
|
type: HostBinding,
|
|
448
448
|
args: ['class.igx-input-group--search']
|
|
449
449
|
}] } });
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUVWLFdBQVcsRUFDWCxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFDM0IsUUFBUSxFQUFhLGdCQUFnQixFQUNyQyxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdGLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUNILGlCQUFpQixFQUNqQixhQUFhLEVBQ2hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFxQixvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBWSxXQUFXLEVBQWMsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQVNsRixNQUFNLE9BQU8sc0JBQXNCO0lBQy9COzs7T0FHRztJQUNILElBQ1csZUFBZSxDQUFDLEtBQTRCO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUE0RUQsY0FBYztJQUNkLElBQ1csVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ3RELENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFDVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQ1csSUFBSSxDQUFDLEtBQXdCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLEtBQUssQ0FBQyxLQUFlO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQ1csT0FBZ0MsRUFHL0IsZUFBa0MsRUFFbEMsUUFBYSxFQUNiLFFBQXNCLEVBQ3RCLEdBQXNCLEVBRXRCLFVBQXNCO1FBVHZCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBRy9CLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUVsQyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ2IsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUV0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBcEtsQzs7Ozs7Ozs7OztXQVVHO1FBRUksaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFM0IsY0FBYztRQUVQLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRTlCLGNBQWM7UUFFUCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGNBQWM7UUFFUCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXpCOzs7Ozs7O1dBT0c7UUFFSSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXhCOzs7Ozs7Ozs7V0FTRztRQUVJLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUV0QyxjQUFjO1FBRVAsZUFBVSxHQUFHLEtBQUssQ0FBQztRQWdCbEIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsVUFBSyxHQUFzQixJQUFJLENBQUM7UUFDaEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixxQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBOEZ6RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRXBDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWM7SUFFUCxPQUFPLENBQUMsS0FBaUI7UUFDNUIsSUFDSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2YsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDekMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQzlCLENBQUM7WUFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUVQLGFBQWEsQ0FBQyxLQUFtQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixnQkFBZ0IsQ0FBQyxLQUFpQjtRQUNyQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFDVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDeEQsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLFFBQVEsQ0FBQyxLQUFvQztRQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQ1csV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekUsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLFFBQVEsQ0FBQyxLQUFvQztRQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sQ0FDSCxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQzdDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGlCQUFpQjtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFDVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDO0lBQ3BGLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFDVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQ1csZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFDVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFXLE1BQU0sQ0FBQyxHQUFHO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUU1RCxJQUFJLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZUFBZTtRQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQXRhUSxzQkFBc0IsNENBOEtuQixvQkFBb0IsNkJBRXBCLFFBQVEsMEVBSVIsV0FBVztrR0FwTGQsc0JBQXNCLDhLQWdFWCxnQkFBZ0Isd3BDQXBFekIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyw2REFzRmxFLGlCQUFpQiwyQkFBVSxpQkFBaUIsc0RBVnpDLGdCQUFnQixRQUFVLGdCQUFnQiw0Q0FHMUMsa0JBQWtCLDJCQUFVLGtCQUFrQiw0Q0FHOUMsa0JBQWtCLDJCQUFVLGtCQUFrQiw2QkNwSG5FLHdtS0F3SkEsNENEcEhjLElBQUksNkZBQUUsZ0JBQWdCLG9KQUFFLGtCQUFrQiw4RUFBRSxrQkFBa0Isb0lBQUUsT0FBTyxvRkFBRSxrQkFBa0IsNEVBQUUsZ0JBQWdCLDJGQUFFLFFBQVEsNkVBQUUsWUFBWSxxRkFBRSxlQUFlOzsyRkFFdkosc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNJLGlCQUFpQixhQUVoQixDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsd0JBQXdCLEVBQUUsQ0FBQyxjQUNwRSxJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDOzswQkErSzVKLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsb0JBQW9COzswQkFFM0IsTUFBTTsyQkFBQyxRQUFROzswQkFJZixNQUFNOzJCQUFDLFdBQVc7eUNBOUtaLGVBQWU7c0JBRHpCLEtBQUs7Z0JBd0JDLFlBQVk7c0JBRGxCLFdBQVc7dUJBQUMsdUJBQXVCO2dCQUs3QixjQUFjO3NCQURwQixXQUFXO3VCQUFDLG9DQUFvQztnQkFLMUMsVUFBVTtzQkFEaEIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBS3ZDLFNBQVM7c0JBRGYsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBWXRDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBY3ZDLHNCQUFzQjtzQkFENUIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLL0IsVUFBVTtzQkFEaEIsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBS25DLEtBQUs7c0JBRGQsZUFBZTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbkQsU0FBUztzQkFEbEIsZUFBZTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUkxRSxTQUFTO3NCQURsQixlQUFlO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBSzFFLEtBQUs7c0JBRGQsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVcvRCxVQUFVO3NCQURwQixXQUFXO3VCQUFDLDhCQUE4QjtnQkFPaEMsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBT2xDLFFBQVE7c0JBRGxCLFdBQVc7dUJBQUMsK0JBQStCO2dCQU9qQyxhQUFhO3NCQUR2QixXQUFXO3VCQUFDLHVDQUF1QztnQkFhekMsSUFBSTtzQkFEZCxLQUFLO3VCQUFDLE1BQU07Z0JBK0JGLEtBQUs7c0JBRGYsS0FBSztnQkE2Q0MsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhMUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBNEI1QixXQUFXO3NCQURyQixXQUFXO3VCQUFDLGlDQUFpQztnQkFZbkMsV0FBVztzQkFEckIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBb0RuQyxTQUFTO3NCQURuQixXQUFXO3VCQUFDLDRCQUE0QjtnQkFpQjlCLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsNkJBQTZCO2dCQXFCL0IsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBZ0JqQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLCtCQUErQjtnQkFnQmpDLGVBQWU7c0JBRHpCLFdBQVc7dUJBQUMsa0NBQWtDO2dCQWdCcEMsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBZ0JqQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsXG4gICAgT3B0aW9uYWwsIFF1ZXJ5TGlzdCwgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSW5wdXRSZXNvdXJjZVN0cmluZ3MsIElucHV0UmVzb3VyY2VTdHJpbmdzRU4gfSBmcm9tICcuLi9jb3JlL2kxOG4vaW5wdXQtcmVzb3VyY2VzJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCwgZ2V0Q29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SGludERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvaGludC9oaW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIElneElucHV0RGlyZWN0aXZlLFxuICAgIElneElucHV0U3RhdGVcbn0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgSWd4SW5wdXRHcm91cEJhc2UgfSBmcm9tICcuL2lucHV0LWdyb3VwLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwVHlwZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUgfSBmcm9tICcuL2lucHV0R3JvdXBUeXBlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElneFRoZW1lLCBUSEVNRV9UT0tFTiwgVGhlbWVUb2tlbiB9IGZyb20gJy4uL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnRva2VuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtaW5wdXQtZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnaW5wdXQtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4SW5wdXRHcm91cEJhc2UsIHVzZUV4aXN0aW5nOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH1dLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4QnV0dG9uRGlyZWN0aXZlLCBOZ0NsYXNzLCBJZ3hTdWZmaXhEaXJlY3RpdmUsIElneEljb25Db21wb25lbnQsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4SW5wdXRHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIElneElucHV0R3JvdXBCYXNlLCBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSUlucHV0UmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUlucHV0UmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdGhlIGF1dG8tZ2VuZXJhdGVkIGNsYXNzIG9mIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAuXG4gICAgICogQnkgZGVmYXVsdCBhcHBsaWVkIHRoZSBjbGFzcyBpcyBhcHBsaWVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqICBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiAgbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogIHRoaXMuaW5wdXRHcm91cC5kZWZhdWx0Q2xhc3MgPSBmYWxzZTtcbiAgICAgKiBgYGBcbiAgICAgKiB9XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAnKVxuICAgIHB1YmxpYyBkZWZhdWx0Q2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcGxhY2Vob2xkZXInKVxuICAgIHB1YmxpYyBoYXNQbGFjZWhvbGRlciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcmVxdWlyZWQnKVxuICAgIHB1YmxpYyBpc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1mb2N1c2VkJylcbiAgICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFdoZW4gdHJ1dGh5LCBkaXNhYmxlcyB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgLlxuICAgICAqIENvbnRyb2xsZWQgYnkgdGhlIHVuZGVybHlpbmcgYElneElucHV0RGlyZWN0aXZlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1pbnB1dC1ncm91cCBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LWlucHV0LWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIHRoZSBpbnB1dCB3aGVuIGNsaWNraW5nIG9uIG90aGVyIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBncm91cCAoZS5nLiBwcmVmaXggb3Igc3VmZml4KS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIEF1dG9tYXRpYyBmb2N1cyBjYXVzZXMgc29mdHdhcmUga2V5Ym9hcmQgdG8gc2hvdyBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaW5wdXQtZ3JvdXAgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwidHJ1ZVwiPjwvaWd4LWlucHV0LWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzdXBwcmVzc0lucHV0QXV0b2ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS13YXJuaW5nJylcbiAgICBwdWJsaWMgaGFzV2FybmluZyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneEhpbnREaXJlY3RpdmUsIHsgcmVhZDogSWd4SGludERpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCBoaW50czogUXVlcnlMaXN0PElneEhpbnREaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQcmVmaXhEaXJlY3RpdmUsIHsgcmVhZDogSWd4UHJlZml4RGlyZWN0aXZlLCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBfcHJlZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hTdWZmaXhEaXJlY3RpdmUsIHsgcmVhZDogSWd4U3VmZml4RGlyZWN0aXZlLCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBfc3VmZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hTdWZmaXhEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgaW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIF90eXBlOiBJZ3hJbnB1dEdyb3VwVHlwZSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZmlsbGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfdGhlbWU6IElneFRoZW1lO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MoSW5wdXRSZXNvdXJjZVN0cmluZ3NFTik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS12YWxpZCcpXG4gICAgcHVibGljIGdldCB2YWxpZENsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC52YWxpZCA9PT0gSWd4SW5wdXRTdGF0ZS5WQUxJRDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1pbnZhbGlkJylcbiAgICBwdWJsaWMgZ2V0IGludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQudmFsaWQgPT09IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1maWxsZWQnKVxuICAgIHB1YmxpYyBnZXQgaXNGaWxsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsZWQgfHwgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tdGV4dGFyZWEtZ3JvdXAnKVxuICAgIHB1YmxpYyBnZXQgdGV4dEFyZWFDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuaXNUZXh0QXJlYTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGhvdyB0aGUgaW5wdXQgd2lsbCBiZSBzdHlsZWQuXG4gICAgICogQWxsb3dlZCB2YWx1ZXMgb2YgdHlwZSBJZ3hJbnB1dEdyb3VwVHlwZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1pbnB1dC1ncm91cCBbdHlwZV09XCInc2VhcmNoJ1wiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgndHlwZScpXG4gICAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgLiBIb3cgdGhlIGlucHV0IGlzIHN0eWxlZC5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBgbGluZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXBcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaW5wdXRUeXBlID0gdGhpcy5pbnB1dEdyb3VwLnR5cGU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgfHwgdGhpcy5faW5wdXRHcm91cFR5cGUgfHwgJ2xpbmUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRoZW1lIG9mIHRoZSBpbnB1dC5cbiAgICAgKiBBbGxvd2VkIHZhbHVlcyBvZiB0eXBlIElneElucHV0R3JvdXBUaGVtZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgbGV0IGlucHV0VGhlbWUgPSAnZmx1ZW50JztcbiAgICAgKiB9XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHRoZW1lKHZhbHVlOiBJZ3hUaGVtZSkge1xuICAgICAgICB0aGlzLl90aGVtZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRoZW1lIG9mIHRoZSBpbnB1dC5cbiAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgb2YgdHlwZSBJZ3hJbnB1dEdyb3VwVHlwZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgbGV0IGlucHV0VGhlbWUgPSB0aGlzLmlucHV0R3JvdXAudGhlbWU7XG4gICAgICogfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGhlbWUoKTogSWd4VGhlbWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhlbWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSlcbiAgICAgICAgcHJpdmF0ZSBfaW5wdXRHcm91cFR5cGU6IElneElucHV0R3JvdXBUeXBlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKVxuICAgICAgICBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KFRIRU1FX1RPS0VOKVxuICAgICAgICBwcml2YXRlIHRoZW1lVG9rZW46IFRoZW1lVG9rZW5cbiAgICApIHtcbiAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLnRoZW1lVG9rZW4udGhlbWU7XG5cbiAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZSB9ID0gdGhpcy50aGVtZVRva2VuLm9uQ2hhbmdlKCh0aGVtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RoZW1lICE9PSB0aGVtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RoZW1lID0gdGhlbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB1bnN1YnNjcmliZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaXNGb2N1c2VkICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgIXRoaXMuc3VwcHJlc3NJbnB1dEF1dG9mb2N1c1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkICYmIGV2ZW50LnRhcmdldCAhPT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhpbnRDbGlja0hhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgaGFzIGhpbnRzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlucHV0SGludHMgPSB0aGlzLmlucHV0R3JvdXAuaGFzSGludHM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzSGludHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXByZWZpeGVkJylcbiAgICBwdWJsaWMgZ2V0IGhhc1ByZWZpeGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZml4ZXMubGVuZ3RoID4gMCB8fCB0aGlzLmlzRmlsZVR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCBwcmVmaXhlcyhpdGVtczogUXVlcnlMaXN0PElneFByZWZpeERpcmVjdGl2ZT4pIHtcbiAgICAgICAgdGhpcy5fcHJlZml4ZXMgPSBpdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tc3VmZml4ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGFzU3VmZml4ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWZmaXhlcy5sZW5ndGggPiAwIHx8IHRoaXMuaXNGaWxlVHlwZSAmJiB0aGlzLmlzRmlsbGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgc3VmZml4ZXMoaXRlbXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+KSB7XG4gICAgICAgIHRoaXMuX3N1ZmZpeGVzID0gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgaGFzIGJvcmRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpbnB1dEJvcmRlciA9IHRoaXMuaW5wdXRHcm91cC5oYXNCb3JkZXI7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzQm9yZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gJ2xpbmUnIHx8IHRoaXMudHlwZSA9PT0gJ2JveCcpICYmXG4gICAgICAgICAgICB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHR5cGUgaXMgbGluZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlTGluZSA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVMaW5lO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsaW5lJyAmJiB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0eXBlIGlzIGJveC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlQm94ID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUJveDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWJveCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVCb3goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdib3gnICYmIHRoaXMuX3RoZW1lID09PSAnbWF0ZXJpYWwnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB1cGxvYWRCdXR0b25IYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY2xlYXJWYWx1ZUhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tZmlsZScpXG4gICAgcHVibGljIGdldCBpc0ZpbGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC50eXBlID09PSAnZmlsZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBmaWxlTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0LmZpbGVOYW1lcyB8fCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MuaWd4X2lucHV0X2ZpbGVfcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdHlwZSBpcyBib3JkZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUJvcmRlciA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVCb3JkZXI7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1ib3JkZXInKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlQm9yZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnYm9yZGVyJyAmJiB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0aGVtZSBpcyBGbHVlbnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUZsdWVudCA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVGbHVlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1mbHVlbnQnKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlRmx1ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhlbWUgPT09ICdmbHVlbnQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHRoZW1lIGlzIEJvb3RzdHJhcC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlQm9vdHN0cmFwID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUJvb3RzdHJhcDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWJvb3RzdHJhcCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVCb290c3RyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVtZSA9PT0gJ2Jvb3RzdHJhcCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdGhlbWUgaXMgSW5kaWdvLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVJbmRpZ28gPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlSW5kaWdvO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0taW5kaWdvJylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUluZGlnbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW1lID09PSAnaW5kaWdvJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0eXBlIGlzIHNlYXJjaC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlU2VhcmNoID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZVNlYXJjaDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXNlYXJjaCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdzZWFyY2gnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBmaWxsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgc2V0IGZpbGxlZCh2YWwpIHtcbiAgICAgICAgdGhpcy5fZmlsbGVkID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tcG9uZW50VGhlbWUoKSB7XG4gICAgICAgIGlmICghdGhpcy50aGVtZVRva2VuLnByZWZlclRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVtZSA9IGdldENvbXBvbmVudFRoZW1lKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoZW1lICYmIHRoZW1lICE9PSB0aGlzLl90aGVtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0Q29tcG9uZW50VGhlbWUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX193cmFwcGVyXCIgKm5nSWY9XCJpc1R5cGVCb3g7IGVsc2UgYnVuZGxlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1bmRsZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2hpbnRcIiAoY2xpY2spPVwiaGludENsaWNrSGFuZGxlcigkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWhpbnQsIFtpZ3hIaW50XVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xhYmVsPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hJbnB1dF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3ByZWZpeD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4LCBbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXBsb2FkQnV0dG9uPlxuICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiaXNGaWxlVHlwZVwiIGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX191cGxvYWQtYnV0dG9uXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1cGxvYWRCdXR0b25IYW5kbGVyKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC1pbnB1dC1ncm91cF9fdXBsb2FkLWJ1dHRvbic6IGlzVHlwZUxpbmUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHJlc291cmNlU3RyaW5ncy5pZ3hfaW5wdXRfdXBsb2FkX2J1dHRvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2lneC1wcmVmaXg+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbGVzPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVUeXBlXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2ZpbGUtaW5wdXRcIlxuICAgICAgICBbdGl0bGVdPVwiZmlsZU5hbWVzXCJcbiAgICA+XG4gICAgICAgIDxzcGFuPnt7IGZpbGVOYW1lcyB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2xlYXI+XG4gICAgPGlneC1zdWZmaXhcbiAgICAgICAgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2NsZWFyLWljb25cIlxuICAgICAgICAqbmdJZj1cImlzRmlsZVR5cGUgJiYgaXNGaWxsZWRcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZUhhbmRsZXIoKVwiXG4gICAgICAgIChrZXlkb3duLkVudGVyKT1cImNsZWFyVmFsdWVIYW5kbGVyKClcIlxuICAgICAgICB0aXRsZT1cImNsZWFyIGZpbGVzXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImlucHV0X2NsZWFyXCI+PC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1ZmZpeD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LCBbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0ZXJpYWxCdW5kbGU+XG4gICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1zdGFydFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZWZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fbm90Y2hcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtbWFpblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsZXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fZmlsbGVyXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLWVuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2xpbmVcIiAqbmdJZj1cImhhc0JvcmRlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmbHVlbnRCdW5kbGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLXN0YXJ0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLW1haW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1lbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1ZmZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19saW5lXCIgKm5nSWY9XCJoYXNCb3JkZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9vdHN0cmFwQnVuZGxlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1zdGFydFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZWZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVzXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLWVuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidW5kbGU+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidGhlbWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb3RzdHJhcCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib290c3RyYXBCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZsdWVudCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmbHVlbnRCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZGlnbydcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmbHVlbnRCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdGVyaWFsQnVuZGxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUVWLFdBQVcsRUFDWCxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFDM0IsUUFBUSxFQUFhLGdCQUFnQixFQUNyQyxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdGLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUNILGlCQUFpQixFQUNqQixhQUFhLEVBQ2hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFD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RHRCLFdBQVc7dUJBQUMsZ0NBQWdDO2dCQU9sQyxRQUFRO3NCQURsQixXQUFXO3VCQUFDLCtCQUErQjtnQkFPakMsYUFBYTtzQkFEdkIsV0FBVzt1QkFBQyx1Q0FBdUM7Z0JBYXpDLElBQUk7c0JBRGQsS0FBSzt1QkFBQyxNQUFNO2dCQStCRixLQUFLO3NCQURmLEtBQUs7Z0JBMkNDLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYTFCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTRCNUIsV0FBVztzQkFEckIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBWW5DLFdBQVc7c0JBRHJCLFdBQVc7dUJBQUMsaUNBQWlDO2dCQW9EbkMsU0FBUztzQkFEbkIsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBaUI5QixVQUFVO3NCQURwQixXQUFXO3VCQUFDLDZCQUE2QjtnQkFxQi9CLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsK0JBQStCO2dCQWdCakMsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBZ0JqQyxlQUFlO3NCQUR6QixXQUFXO3VCQUFDLGtDQUFrQztnQkFnQnBDLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsK0JBQStCO2dCQWdCakMsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCxcbiAgICBPcHRpb25hbCwgUXVlcnlMaXN0LCBib29sZWFuQXR0cmlidXRlLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJbnB1dFJlc291cmNlU3RyaW5ncywgSW5wdXRSZXNvdXJjZVN0cmluZ3NFTiB9IGZyb20gJy4uL2NvcmUvaTE4bi9pbnB1dC1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsLCBnZXRDb21wb25lbnRUaGVtZSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hIaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9oaW50L2hpbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgSWd4SW5wdXREaXJlY3RpdmUsXG4gICAgSWd4SW5wdXRTdGF0ZVxufSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQcmVmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQmFzZSB9IGZyb20gJy4vaW5wdXQtZ3JvdXAuY29tbW9uJztcbmltcG9ydCB7IElneElucHV0R3JvdXBUeXBlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4vaW5wdXRHcm91cFR5cGUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSWd4VGhlbWUsIFRIRU1FX1RPS0VOLCBUaGVtZVRva2VuIH0gZnJvbSAnLi4vc2VydmljZXMvdGhlbWUvdGhlbWUudG9rZW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1pbnB1dC1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICdpbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hJbnB1dEdyb3VwQmFzZSwgdXNlRXhpc3Rpbmc6IElneElucHV0R3JvdXBDb21wb25lbnQgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgSWd4UHJlZml4RGlyZWN0aXZlLCBJZ3hCdXR0b25EaXJlY3RpdmUsIE5nQ2xhc3MsIElneFN1ZmZpeERpcmVjdGl2ZSwgSWd4SWNvbkNvbXBvbmVudCwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgSWd4SW5wdXRHcm91cEJhc2Uge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJSW5wdXRSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJSW5wdXRSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgYXV0by1nZW5lcmF0ZWQgY2xhc3Mgb2YgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YC5cbiAgICAgKiBCeSBkZWZhdWx0IGFwcGxpZWQgdGhlIGNsYXNzIGlzIGFwcGxpZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqICBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgdGhpcy5pbnB1dEdyb3VwLmRlZmF1bHRDbGFzcyA9IGZhbHNlO1xuICAgICAqIGBgYFxuICAgICAqIH1cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cCcpXG4gICAgcHVibGljIGRlZmF1bHRDbGFzcyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1wbGFjZWhvbGRlcicpXG4gICAgcHVibGljIGhhc1BsYWNlaG9sZGVyID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1yZXF1aXJlZCcpXG4gICAgcHVibGljIGlzUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWZvY3VzZWQnKVxuICAgIHB1YmxpYyBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogV2hlbiB0cnV0aHksIGRpc2FibGVzIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAuXG4gICAgICogQ29udHJvbGxlZCBieSB0aGUgdW5kZXJseWluZyBgSWd4SW5wdXREaXJlY3RpdmVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWlucHV0LWdyb3VwIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgdGhlIGlucHV0IHdoZW4gY2xpY2tpbmcgb24gb3RoZXIgZWxlbWVudHMgaW4gdGhlIGlucHV0IGdyb3VwIChlLmcuIHByZWZpeCBvciBzdWZmaXgpLlxuICAgICAqXG4gICAgICogQHJlbWFya3MgQXV0b21hdGljIGZvY3VzIGNhdXNlcyBzb2Z0d2FyZSBrZXlib2FyZCB0byBzaG93IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1pbnB1dC1ncm91cCBbc3VwcHJlc3NJbnB1dEF1dG9mb2N1c109XCJ0cnVlXCI+PC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHN1cHByZXNzSW5wdXRBdXRvZm9jdXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXdhcm5pbmcnKVxuICAgIHB1YmxpYyBoYXNXYXJuaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4SGludERpcmVjdGl2ZSwgeyByZWFkOiBJZ3hIaW50RGlyZWN0aXZlIH0pXG4gICAgcHJvdGVjdGVkIGhpbnRzOiBRdWVyeUxpc3Q8SWd4SGludERpcmVjdGl2ZT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKElneFByZWZpeERpcmVjdGl2ZSwgeyByZWFkOiBJZ3hQcmVmaXhEaXJlY3RpdmUsIGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIF9wcmVmaXhlczogUXVlcnlMaXN0PElneFByZWZpeERpcmVjdGl2ZT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKElneFN1ZmZpeERpcmVjdGl2ZSwgeyByZWFkOiBJZ3hTdWZmaXhEaXJlY3RpdmUsIGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIF9zdWZmaXhlczogUXVlcnlMaXN0PElneFN1ZmZpeERpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUsIHsgcmVhZDogSWd4SW5wdXREaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBpbnB1dDogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgX3R5cGU6IElneElucHV0R3JvdXBUeXBlID0gbnVsbDtcbiAgICBwcml2YXRlIF9maWxsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF90aGVtZTogSWd4VGhlbWU7XG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyhJbnB1dFJlc291cmNlU3RyaW5nc0VOKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXZhbGlkJylcbiAgICBwdWJsaWMgZ2V0IHZhbGlkQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0LnZhbGlkID09PSBJZ3hJbnB1dFN0YXRlLlZBTElEO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWludmFsaWQnKVxuICAgIHB1YmxpYyBnZXQgaW52YWxpZENsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC52YWxpZCA9PT0gSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWZpbGxlZCcpXG4gICAgcHVibGljIGdldCBpc0ZpbGxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGxlZCB8fCAodGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS10ZXh0YXJlYS1ncm91cCcpXG4gICAgcHVibGljIGdldCB0ZXh0QXJlYUNsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5pc1RleHRBcmVhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaG93IHRoZSBpbnB1dCB3aWxsIGJlIHN0eWxlZC5cbiAgICAgKiBBbGxvd2VkIHZhbHVlcyBvZiB0eXBlIElneElucHV0R3JvdXBUeXBlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWlucHV0LWdyb3VwIFt0eXBlXT1cIidzZWFyY2gnXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCd0eXBlJylcbiAgICBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IElneElucHV0R3JvdXBUeXBlKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAuIEhvdyB0aGUgaW5wdXQgaXMgc3R5bGVkLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIGBsaW5lYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpbnB1dFR5cGUgPSB0aGlzLmlucHV0R3JvdXAudHlwZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSB8fCB0aGlzLl9pbnB1dEdyb3VwVHlwZSB8fCAnbGluZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGhlbWUgb2YgdGhlIGlucHV0LlxuICAgICAqIEFsbG93ZWQgdmFsdWVzIG9mIHR5cGUgSWd4SW5wdXRHcm91cFRoZW1lLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICBsZXQgaW5wdXRUaGVtZSA9ICdmbHVlbnQnO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdGhlbWUodmFsdWU6IElneFRoZW1lKSB7XG4gICAgICAgIHRoaXMuX3RoZW1lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdGhlbWUgb2YgdGhlIGlucHV0LlxuICAgICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBvZiB0eXBlIElneElucHV0R3JvdXBUeXBlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICBsZXQgaW5wdXRUaGVtZSA9IHRoaXMuaW5wdXRHcm91cC50aGVtZTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgcHVibGljIGdldCB0aGVtZSgpOiBJZ3hUaGVtZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVtZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KElHWF9JTlBVVF9HUk9VUF9UWVBFKVxuICAgICAgICBwcml2YXRlIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoVEhFTUVfVE9LRU4pXG4gICAgICAgIHByaXZhdGUgdGhlbWVUb2tlbjogVGhlbWVUb2tlblxuICAgICkge1xuICAgICAgICB0aGlzLl90aGVtZSA9IHRoaXMudGhlbWVUb2tlbi50aGVtZTtcbiAgICAgICAgY29uc3QgdGhlbWVDaGFuZ2UgPSB0aGlzLnRoZW1lVG9rZW4ub25DaGFuZ2UoKHRoZW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWUgIT09IHRoZW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGVtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGVtZUNoYW5nZS51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5pc0ZvY3VzZWQgJiZcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldCAhPT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICAhdGhpcy5zdXBwcmVzc0lucHV0QXV0b2ZvY3VzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVyZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQgJiYgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGludENsaWNrSGFuZGxlcihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCBoYXMgaGludHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXBcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaW5wdXRIaW50cyA9IHRoaXMuaW5wdXRHcm91cC5oYXNIaW50cztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNIaW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGludHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcHJlZml4ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGFzUHJlZml4ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmaXhlcy5sZW5ndGggPiAwIHx8IHRoaXMuaXNGaWxlVHlwZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IHByZWZpeGVzKGl0ZW1zOiBRdWVyeUxpc3Q8SWd4UHJlZml4RGlyZWN0aXZlPikge1xuICAgICAgICB0aGlzLl9wcmVmaXhlcyA9IGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1zdWZmaXhlZCcpXG4gICAgcHVibGljIGdldCBoYXNTdWZmaXhlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1ZmZpeGVzLmxlbmd0aCA+IDAgfHwgdGhpcy5pc0ZpbGVUeXBlICYmIHRoaXMuaXNGaWxsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCBzdWZmaXhlcyhpdGVtczogUXVlcnlMaXN0PElneFByZWZpeERpcmVjdGl2ZT4pIHtcbiAgICAgICAgdGhpcy5fc3VmZml4ZXMgPSBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCBoYXMgYm9yZGVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlucHV0Qm9yZGVyID0gdGhpcy5pbnB1dEdyb3VwLmhhc0JvcmRlcjtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNCb3JkZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy50eXBlID09PSAnbGluZScgfHwgdGhpcy50eXBlID09PSAnYm94JykgJiZcbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID09PSAnbWF0ZXJpYWwnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdHlwZSBpcyBsaW5lLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVMaW5lID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUxpbmU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNUeXBlTGluZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2xpbmUnICYmIHRoaXMuX3RoZW1lID09PSAnbWF0ZXJpYWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHR5cGUgaXMgYm94LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVCb3ggPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlQm94O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tYm94JylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUJveCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2JveCcgJiYgdGhpcy5fdGhlbWUgPT09ICdtYXRlcmlhbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHVwbG9hZEJ1dHRvbkhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjbGVhclZhbHVlSGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1maWxlJylcbiAgICBwdWJsaWMgZ2V0IGlzRmlsZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0LnR5cGUgPT09ICdmaWxlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZpbGVOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZmlsZU5hbWVzIHx8IHRoaXMuX3Jlc291cmNlU3RyaW5ncy5pZ3hfaW5wdXRfZmlsZV9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0eXBlIGlzIGJvcmRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlQm9yZGVyID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUJvcmRlcjtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWJvcmRlcicpXG4gICAgcHVibGljIGdldCBpc1R5cGVCb3JkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdib3JkZXInICYmIHRoaXMuX3RoZW1lID09PSAnbWF0ZXJpYWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHRoZW1lIGlzIEZsdWVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlRmx1ZW50ID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUZsdWVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWZsdWVudCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVGbHVlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVtZSA9PT0gJ2ZsdWVudCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdGhlbWUgaXMgQm9vdHN0cmFwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVCb290c3RyYXAgPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlQm9vdHN0cmFwO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tYm9vdHN0cmFwJylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUJvb3RzdHJhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW1lID09PSAnYm9vdHN0cmFwJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0aGVtZSBpcyBJbmRpZ28uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUluZGlnbyA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVJbmRpZ287XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1pbmRpZ28nKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlSW5kaWdvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhlbWUgPT09ICdpbmRpZ28nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHR5cGUgaXMgc2VhcmNoLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVTZWFyY2ggPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlU2VhcmNoO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tc2VhcmNoJylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZVNlYXJjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3NlYXJjaCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGZpbGxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBzZXQgZmlsbGVkKHZhbCkge1xuICAgICAgICB0aGlzLl9maWxsZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDb21wb25lbnRUaGVtZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRoZW1lVG9rZW4ucHJlZmVyVG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW1lID0gZ2V0Q29tcG9uZW50VGhlbWUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhlbWUgJiYgdGhlbWUgIT09IHRoaXMuX3RoZW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aGVtZSA9IHRoZW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5zZXRDb21wb25lbnRUaGVtZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX3dyYXBwZXJcIiAqbmdJZj1cImlzVHlwZUJveDsgZWxzZSBidW5kbGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnVuZGxlXCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9faGludFwiIChjbGljayk9XCJoaW50Q2xpY2tIYW5kbGVyKCRldmVudClcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWw+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneElucHV0XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcHJlZml4PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsIFtpZ3hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1cGxvYWRCdXR0b24+XG4gICAgPGlneC1wcmVmaXggKm5nSWY9XCJpc0ZpbGVUeXBlXCIgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX3VwbG9hZC1idXR0b25cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWd4QnV0dG9uPVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVwbG9hZEJ1dHRvbkhhbmRsZXIoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaWd4LWlucHV0LWdyb3VwX191cGxvYWQtYnV0dG9uJzogaXNUeXBlTGluZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgcmVzb3VyY2VTdHJpbmdzLmlneF9pbnB1dF91cGxvYWRfYnV0dG9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvaWd4LXByZWZpeD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsZXM+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cImlzRmlsZVR5cGVcIlxuICAgICAgICBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fZmlsZS1pbnB1dFwiXG4gICAgICAgIFt0aXRsZV09XCJmaWxlTmFtZXNcIlxuICAgID5cbiAgICAgICAgPHNwYW4+e3sgZmlsZU5hbWVzIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjbGVhcj5cbiAgICA8aWd4LXN1ZmZpeFxuICAgICAgICBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fY2xlYXItaWNvblwiXG4gICAgICAgICpuZ0lmPVwiaXNGaWxlVHlwZSAmJiBpc0ZpbGxlZFwiXG4gICAgICAgIChjbGljayk9XCJjbGVhclZhbHVlSGFuZGxlcigpXCJcbiAgICAgICAgKGtleWRvd24uRW50ZXIpPVwiY2xlYXJWYWx1ZUhhbmRsZXIoKVwiXG4gICAgICAgIHRpdGxlPVwiY2xlYXIgZmlsZXNcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgID5cbiAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImRlZmF1bHRcIiBuYW1lPVwiaW5wdXRfY2xlYXJcIj48L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3VmZml4PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXgsIFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRlcmlhbEJ1bmRsZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLXN0YXJ0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19ub3RjaFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1tYWluXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19maWxsZXJcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtZW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xlYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWZmaXhcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fbGluZVwiICpuZ0lmPVwiaGFzQm9yZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZsdWVudEJ1bmRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtc3RhcnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVmaXhcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtbWFpblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsZXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLWVuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2xpbmVcIiAqbmdJZj1cImhhc0JvcmRlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNib290c3RyYXBCdW5kbGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLXN0YXJ0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsZXNcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtZW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xlYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWZmaXhcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1bmRsZT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0aGVtZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vdHN0cmFwJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvb3RzdHJhcEJ1bmRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmx1ZW50J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZsdWVudEJ1bmRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5kaWdvJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZsdWVudEJ1bmRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0ZXJpYWxCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|