igniteui-angular 16.1.3 → 16.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +5 -9
- package/esm2022/lib/core/utils.mjs +2 -2
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +4 -1
- package/esm2022/lib/grids/common/strategy.mjs +2 -1
- package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +6 -3
- package/esm2022/lib/grids/grid/grid.component.mjs +15 -3
- package/esm2022/lib/grids/headers/grid-header-row.component.mjs +9 -3
- package/esm2022/lib/services/overlay/overlay.mjs +2 -2
- package/esm2022/lib/snackbar/snackbar.component.mjs +4 -3
- package/fesm2022/igniteui-angular.mjs +37 -17
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/buttonGroup/buttonGroup.component.d.ts +2 -2
- package/lib/core/styles/components/rating/_rating-theme.scss +5 -5
- package/lib/core/styles/components/snackbar/_snackbar-theme.scss +14 -24
- package/lib/grids/grid/grid.component.d.ts +9 -0
- package/lib/grids/headers/grid-header-row.component.d.ts +4 -0
- package/lib/snackbar/snackbar.component.d.ts +1 -1
- package/migrations/common/tsUtils.js +1 -1
- package/package.json +2 -2
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -355,7 +355,7 @@ export class IgxOverlayService {
|
|
|
355
355
|
// TODO: update attach
|
|
356
356
|
}
|
|
357
357
|
this.updateSize(info);
|
|
358
|
-
info.settings.positionStrategy.position(info.elementRef.nativeElement.parentElement, { width: info.initialSize.width, height: info.initialSize.height },
|
|
358
|
+
info.settings.positionStrategy.position(info.elementRef.nativeElement.parentElement, { width: info.initialSize.width, height: info.initialSize.height }, this._document, true, info.settings.target);
|
|
359
359
|
this.addModalClasses(info);
|
|
360
360
|
if (info.settings.positionStrategy.settings.openAnimation) {
|
|
361
361
|
// TODO: should we build players again. This was already done in attach!!!
|
|
@@ -843,4 +843,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
|
|
|
843
843
|
type: Inject,
|
|
844
844
|
args: [IgxAngularAnimationService]
|
|
845
845
|
}] }]; } });
|
|
846
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFLSCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBS1YsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFDSCxNQUFNLEVBQ04sT0FBTyxFQUVQLGNBQWMsRUFDZCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUs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LENBQUM7U0FDdEM7SUFDTCxDQUFDOzhHQXg2QlEsaUJBQWlCLGdIQTZGZCxRQUFRLCtEQUdSLDBCQUEwQjtrSEFoRzdCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkE4RnpCLE1BQU07MkJBQUMsUUFBUTs7MEJBR2YsTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIGZhZGVJbixcbiAgICBmYWRlT3V0LFxuICAgIElBbmltYXRpb25QYXJhbXMsXG4gICAgc2NhbGVJbkhvckxlZnQsXG4gICAgc2NhbGVJbkhvclJpZ2h0LFxuICAgIHNjYWxlSW5WZXJCb3R0b20sXG4gICAgc2NhbGVJblZlclRvcCxcbiAgICBzY2FsZU91dEhvckxlZnQsXG4gICAgc2NhbGVPdXRIb3JSaWdodCxcbiAgICBzY2FsZU91dFZlckJvdHRvbSxcbiAgICBzY2FsZU91dFZlclRvcCxcbiAgICBzbGlkZUluQm90dG9tLFxuICAgIHNsaWRlSW5Ub3AsXG4gICAgc2xpZGVPdXRCb3R0b20sXG4gICAgc2xpZGVPdXRUb3Bcbn0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hbmltYXRpb24vYW5ndWxhci1hbmltYXRpb24tc2VydmljZSc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBBdXRvUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vYXV0by1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9jb25uZWN0ZWQtcG9zaXRpb25pbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgQ29udGFpbmVyUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vY29udGFpbmVyLXBvc2l0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IEVsYXN0aWNQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9lbGFzdGljLXBvc2l0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2dsb2JhbC1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBJUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vSVBvc2l0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IHsgTm9PcFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi9zY3JvbGwvTm9PcFNjcm9sbFN0cmF0ZWd5JztcbmltcG9ydCB7XG4gICAgQWJzb2x1dGVQb3NpdGlvbixcbiAgICBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIE92ZXJsYXlBbmltYXRpb25FdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNsb3NpbmdFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUV2ZW50QXJncyxcbiAgICBPdmVybGF5SW5mbyxcbiAgICBPdmVybGF5U2V0dGluZ3MsXG4gICAgUG9pbnQsXG4gICAgUG9zaXRpb25TZXR0aW5ncyxcbiAgICBSZWxhdGl2ZVBvc2l0aW9uLFxuICAgIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSxcbiAgICBWZXJ0aWNhbEFsaWdubWVudFxufSBmcm9tICcuL3V0aWxpdGllcyc7XG5cbi8qKlxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL292ZXJsYXktbWFpbilcbiAqIFRoZSBvdmVybGF5IHNlcnZpY2UgYWxsb3dzIHVzZXJzIHRvIHNob3cgY29tcG9uZW50cyBvbiBvdmVybGF5IGRpdiBhYm92ZSBhbGwgb3RoZXIgZWxlbWVudHMgaW4gdGhlIHBhZ2UuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSWd4T3ZlcmxheVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQganVzdCBiZWZvcmUgdGhlIG92ZXJsYXkgY29udGVudCBzdGFydHMgdG8gb3Blbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogb3BlbmluZyhldmVudDogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBvcGVuaW5nID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgY29udGVudCBpcyBvcGVuZWQgYW5kIGFsbCBhbmltYXRpb25zIGFyZSBmaW5pc2hlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogb3BlbmVkKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3Qgb3BlbmVkID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGp1c3QgYmVmb3JlIHRoZSBvdmVybGF5IGNvbnRlbnQgc3RhcnRzIHRvIGNsb3NlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjbG9zaW5nKGV2ZW50OiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNsb3NpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsb3NpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlDbG9zaW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciB0aGUgb3ZlcmxheSBjb250ZW50IGlzIGNsb3NlZCBhbmQgYWxsIGFuaW1hdGlvbnMgYXJlIGZpbmlzaGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjbG9zZWQoZXZlbnQ6IE92ZXJsYXlFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBjbG9zZWQgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIHRoZSBjb250ZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBvdmVybGF5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb250ZW50QXBwZW5kaW5nKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY29udGVudEFwcGVuZGluZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGVudEFwcGVuZGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGNvbnRlbnQgaXMgYXBwZW5kZWQgdG8gdGhlIG92ZXJsYXksIGFuZCBiZWZvcmUgYW5pbWF0aW9ucyBhcmUgc3RhcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29udGVudEFwcGVuZGVkKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY29udGVudEFwcGVuZGVkID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb250ZW50QXBwZW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGp1c3QgYmVmb3JlIHRoZSBvdmVybGF5IGFuaW1hdGlvbiBzdGFydC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogYW5pbWF0aW9uU3RhcnRpbmcoZXZlbnQ6IE92ZXJsYXlBbmltYXRpb25FdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBhbmltYXRpb25TdGFydGluZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgYW5pbWF0aW9uU3RhcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlBbmltYXRpb25FdmVudEFyZ3M+KCk7XG5cbiAgICBwcml2YXRlIF9jb21wb25lbnRJZCA9IDA7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUluZm9zOiBPdmVybGF5SW5mb1tdID0gW107XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudDtcbiAgICBwcml2YXRlIF9rZXlQcmVzc0V2ZW50TGlzdGVuZXI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIF9jdXJzb3JTdHlsZUlzU2V0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY3Vyc29yT3JpZ2luYWxWYWx1ZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrOiBbXSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBOb09wU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgbW9kYWw6IHRydWUsXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IGZhbHNlXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9mYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsLFxuICAgICAgICBASW5qZWN0KElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlKXByaXZhdGUgYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLl9kb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvdmVybGF5IHNldHRpbmdzIHdpdGggZ2xvYmFsIG9yIGNvbnRhaW5lciBwb3NpdGlvbiBzdHJhdGVneSBhbmQgcHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24gUHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzLiBEZWZhdWx0IHBvc2l0aW9uIGlzICdjZW50ZXInXG4gICAgICogQHBhcmFtIG91dGxldCBUaGUgb3V0bGV0IGNvbnRhaW5lciB0byBhdHRhY2ggdGhlIG92ZXJsYXkgdG9cbiAgICAgKiBAcmV0dXJucyBOb24tbW9kYWwgb3ZlcmxheSBzZXR0aW5ncyBiYXNlZCBvbiBHbG9iYWwgb3IgQ29udGFpbmVyIHBvc2l0aW9uIHN0cmF0ZWd5IGFuZCB0aGUgcHJvdmlkZWQgcG9zaXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVBYnNvbHV0ZU92ZXJsYXlTZXR0aW5ncyhcbiAgICAgICAgcG9zaXRpb24/OiBBYnNvbHV0ZVBvc2l0aW9uLCBvdXRsZXQ/OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZik6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLmNyZWF0ZUFic29sdXRlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gb3V0bGV0ID8gbmV3IENvbnRhaW5lclBvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncykgOiBuZXcgR2xvYmFsUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICAgICAgb3V0bGV0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvdmVybGF5U2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvdmVybGF5IHNldHRpbmdzIHdpdGggYXV0bywgY29ubmVjdGVkIG9yIGVsYXN0aWMgcG9zaXRpb24gc3RyYXRlZ3kgYW5kIHByZXNldCBwb3NpdGlvbiBzZXR0aW5nc1xuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCBBdHRhY2hpbmcgdGFyZ2V0IGZvciB0aGUgY29tcG9uZW50IHRvIHNob3dcbiAgICAgKiBAcGFyYW0gc3RyYXRlZ3kgVGhlIHJlbGF0aXZlIHBvc2l0aW9uIHN0cmF0ZWd5IHRvIGJlIGFwcGxpZWQgdG8gdGhlIG92ZXJsYXkgc2V0dGluZ3MuIERlZmF1bHQgaXMgQXV0byBwb3NpdGlvbmluZyBzdHJhdGVneS5cbiAgICAgKiBAcGFyYW0gcG9zaXRpb24gUHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzLiBCeSBkZWZhdWx0IHRoZSBlbGVtZW50IGlzIHBvc2l0aW9uZWQgYmVsb3cgdGhlIHRhcmdldCwgbGVmdCBhbGlnbmVkLlxuICAgICAqIEByZXR1cm5zIE5vbi1tb2RhbCBvdmVybGF5IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0YXJnZXQsIHN0cmF0ZWd5IGFuZCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlbGF0aXZlT3ZlcmxheVNldHRpbmdzKFxuICAgICAgICB0YXJnZXQ6IFBvaW50IHwgSFRNTEVsZW1lbnQsXG4gICAgICAgIHBvc2l0aW9uPzogUmVsYXRpdmVQb3NpdGlvbixcbiAgICAgICAgc3RyYXRlZ3k/OiBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kpOlxuICAgICAgICBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBwb3NpdGlvblNldHRpbmdzID0gdGhpcy5jcmVhdGVSZWxhdGl2ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb24pO1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneSwgcG9zaXRpb25TZXR0aW5ncyksXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vT3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3ZlcmxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZUFic29sdXRlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbjogQWJzb2x1dGVQb3NpdGlvbik6IFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgICAgICBsZXQgcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBBYnNvbHV0ZVBvc2l0aW9uLkJvdHRvbTpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJbkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNsaWRlT3V0Qm90dG9tXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWJzb2x1dGVQb3NpdGlvbi5Ub3A6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNsaWRlSW5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dFRvcFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFic29sdXRlUG9zaXRpb24uQ2VudGVyOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogZmFkZU91dFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUmVsYXRpdmVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uOiBSZWxhdGl2ZVBvc2l0aW9uKTogUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgICAgIGxldCBwb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzO1xuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQWJvdmU6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJCb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dFZlckJvdHRvbSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkJlbG93OlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluVmVyVG9wLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRWZXJUb3BcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkFmdGVyOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJbkhvckxlZnQsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dEhvckxlZnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkJlZm9yZTpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluSG9yUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dEhvclJpZ2h0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5EZWZhdWx0OlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJblZlclRvcCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyVG9wLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneTogUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LCBwb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzKTogSVBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneS5Db25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kuRWxhc3RpYzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsYXN0aWNQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kuQXV0bzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbCBgc2hvdyhpZClgIG1ldGhvZFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBFbGVtZW50UmVmIHRvIHNob3cgaW4gb3ZlcmxheVxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBEaXNwbGF5IHNldHRpbmdzIGZvciB0aGUgb3ZlcmxheSwgc3VjaCBhcyBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsL2Nsb3NlIGJlaGF2aW9yLlxuICAgICAqIEByZXR1cm5zIElkIG9mIHRoZSBjcmVhdGVkIG92ZXJsYXkuIFZhbGlkIHVudGlsIGBkZXRhY2hgIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXR0YWNoKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbCBgc2hvdyhpZClgIG1ldGhvZFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBDb21wb25lbnQgVHlwZSB0byBzaG93IGluIG92ZXJsYXlcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0gbW9kdWxlUmVmIE9wdGlvbmFsIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgY29udGFpbmluZyBJbmplY3RvciBhbmQgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICogdGhhdCBjYW4gcmVzb2x2ZSB0aGUgY29tcG9uZW50J3MgZmFjdG9yeVxuICAgICAqIEByZXR1cm5zIElkIG9mIHRoZSBjcmVhdGVkIG92ZXJsYXkuIFZhbGlkIHVudGlsIGBkZXRhY2hgIGlzIGNhbGxlZC5cbiAgICAgKiBAZGVwcmVjYXRlZCBkZXByZWNhdGVkIGluIDE0LjAuMC4gVXNlIHRoZSBgYXR0YWNoKGNvbXBvbmVudCwgdmlld0NvbnRhaW5lclJlZiwgc2V0dGluZ3MpYCBvdmVybG9hZFxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goXG4gICAgICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgICAgICBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyxcbiAgICAgICAgbW9kdWxlUmVmPzogeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0pOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGFuIElkLiBQcm92aWRlIHRoaXMgSWQgd2hlbiBjYWxsaW5nIHRoZSBgc2hvdyhpZClgIG1ldGhvZFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBDb21wb25lbnQgVHlwZSB0byBzaG93IGluIG92ZXJsYXlcbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lclJlZiBSZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5lciB3aGVyZSBjcmVhdGVkIGNvbXBvbmVudCdzIGhvc3QgdmlldyB3aWxsIGJlIGluc2VydGVkXG4gICAgICogQHBhcmFtIHNldHRpbmdzIERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICovXG4gICAgcHVibGljIGF0dGFjaChjb21wb25lbnQ6IFR5cGU8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiBzdHJpbmc7XG4gICAgcHVibGljIGF0dGFjaChcbiAgICAgICAgY29tcG9uZW50T3JFbGVtZW50OiBFbGVtZW50UmVmIHwgVHlwZTxhbnk+LFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncz86IFZpZXdDb250YWluZXJSZWYgfCBPdmVybGF5U2V0dGluZ3MsXG4gICAgICAgIG1vZHVsZVJlZk9yU2V0dGluZ3M/OiB7IGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSB8IE92ZXJsYXlTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5SW5mbyhjb21wb25lbnRPckVsZW1lbnQsIHRoaXMuZ2V0VXNlclZpZXdDb250YWluZXJPck1vZHVsZVJlZih2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncywgbW9kdWxlUmVmT3JTZXR0aW5ncykpO1xuXG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdPdmVybGF5IHdhcyBub3QgYWJsZSB0byBhdHRhY2ggcHJvdmlkZWQgY29tcG9uZW50IScpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpbmZvLmlkID0gKHRoaXMuX2NvbXBvbmVudElkKyspLnRvU3RyaW5nKCk7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RlZmF1bHRTZXR0aW5ncywgdGhpcy5nZXRVc2VyT3ZlcmxheVNldHRpbmdzKHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzLCBtb2R1bGVSZWZPclNldHRpbmdzKSk7XG4gICAgICAgIC8vIEVtaXQgdGhlIGNvbnRlbnRBcHBlbmRpbmcgZXZlbnQgYmVmb3JlIGFwcGVuZGluZyB0aGUgY29udGVudFxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7IGlkOiBpbmZvLmlkLCBlbGVtZW50UmVmOiBpbmZvLmVsZW1lbnRSZWYsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIHNldHRpbmdzIH07XG4gICAgICAgIHRoaXMuY29udGVudEFwcGVuZGluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIC8vIEFwcGVuZCB0aGUgY29udGVudCB0byB0aGUgb3ZlcmxheVxuICAgICAgICBpbmZvLnNldHRpbmdzID0gZXZlbnRBcmdzLnNldHRpbmdzO1xuICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MucHVzaChpbmZvKTtcbiAgICAgICAgaW5mby5ob29rID0gdGhpcy5wbGFjZUVsZW1lbnRIb29rKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaW5mby5pbml0aWFsU2l6ZSA9IHsgd2lkdGg6IGVsZW1lbnRSZWN0LndpZHRoLCBoZWlnaHQ6IGVsZW1lbnRSZWN0LmhlaWdodCB9O1xuICAgICAgICB0aGlzLm1vdmVFbGVtZW50VG9PdmVybGF5KGluZm8pO1xuICAgICAgICB0aGlzLmNvbnRlbnRBcHBlbmRlZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuaW5pdGlhbGl6ZSh0aGlzLl9kb2N1bWVudCwgdGhpcywgaW5mby5pZCk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKCk7XG4gICAgICAgIHRoaXMuYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMuYWRkUmVzaXplSGFuZGxlcigpO1xuICAgICAgICB0aGlzLmFkZENsb3NlT25Fc2NhcGVMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5idWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbyk7XG4gICAgICAgIHJldHVybiBpbmZvLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBvdmVybGF5IHdpdGggdGhlIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIG9mIHRoZSBvdmVybGF5IHRvIHJlbW92ZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuZGV0YWNoKGlkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0YWNoKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5kZXRhY2ggd2FzIGNhbGxlZCB3aXRoIHdyb25nIGlkOiAnLCBpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5kZXRhY2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmluaXNoQW5pbWF0aW9ucyhpbmZvKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncy5zY3JvbGxTdHJhdGVneS5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5yZW1vdmVPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5yZW1vdmVSZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuY2xlYW5VcChpbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYWxsIHRoZSBvdmVybGF5cy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmRldGFjaEFsbCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRhY2hBbGwoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaCh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIG92ZXJsYXkgZm9yIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHNob3cgb3ZlcmxheSBmb3JcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhpZDogc3RyaW5nLCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5zaG93IHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiB1cGRhdGUgYXR0YWNoXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaXplKGluZm8pO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb24oXG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgICAgICAgeyB3aWR0aDogaW5mby5pbml0aWFsU2l6ZS53aWR0aCwgaGVpZ2h0OiBpbmZvLmluaXRpYWxTaXplLmhlaWdodCB9LFxuICAgICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgaW5mby5zZXR0aW5ncy50YXJnZXQpO1xuICAgICAgICB0aGlzLmFkZE1vZGFsQ2xhc3NlcyhpbmZvKTtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgYnVpbGQgcGxheWVycyBhZ2Fpbi4gVGhpcyB3YXMgYWxyZWFkeSBkb25lIGluIGF0dGFjaCEhIVxuICAgICAgICAgICAgLy8gdGhpcy5idWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbyk7XG4gICAgICAgICAgICB0aGlzLnBsYXlPcGVuQW5pbWF0aW9uKGluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgb3BlbmVkIGZpcmVzXG4gICAgICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcbiAgICAgICAgICAgIGluZm8udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgY29tcG9uZW50IHdpdGggdGhlIElEIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuaGlkZShpZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhpZGUoaWQ6IHN0cmluZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLl9oaWRlKGlkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgYWxsIHRoZSBjb21wb25lbnRzIGFuZCB0aGUgb3ZlcmxheS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmhpZGVBbGwoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZUFsbCgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgdGhlIGNvbXBvbmVudCB3aXRoIElEIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHJlcG9zaXRpb24gb3ZlcmxheSBmb3JcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LnJlcG9zaXRpb24oaWQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyByZXBvc2l0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFvdmVybGF5SW5mbyB8fCAhb3ZlcmxheUluZm8uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV3JvbmcgaWQgcHJvdmlkZWQgaW4gb3ZlcmxheS5yZXBvc2l0aW9uIG1ldGhvZC4gSWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW92ZXJsYXlJbmZvLnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IG92ZXJsYXlJbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudFJlY3QgPSBjb250ZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgb3ZlcmxheUluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbihcbiAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb250ZW50RWxlbWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb250ZW50RWxlbWVudFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIG92ZXJsYXlJbmZvLnNldHRpbmdzLnRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2Zmc2V0cyB0aGUgY29udGVudCBhbG9uZyB0aGUgY29ycmVzcG9uZGluZyBheGlzIGJ5IHRoZSBwcm92aWRlZCBhbW91bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCB0byBvZmZzZXQgb3ZlcmxheSBmb3JcbiAgICAgKiBAcGFyYW0gZGVsdGFYIEFtb3VudCBvZiBvZmZzZXQgaW4gaG9yaXpvbnRhbCBkaXJlY3Rpb25cbiAgICAgKiBAcGFyYW0gZGVsdGFZIEFtb3VudCBvZiBvZmZzZXQgaW4gdmVydGljYWwgZGlyZWN0aW9uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5zZXRPZmZzZXQoaWQsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0T2Zmc2V0KGlkOiBzdHJpbmcsIGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuXG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5mby50cmFuc2Zvcm1YICs9IGRlbHRhWDtcbiAgICAgICAgaW5mby50cmFuc2Zvcm1ZICs9IGRlbHRhWTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1YID0gaW5mby50cmFuc2Zvcm1YO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1ZID0gaW5mby50cmFuc2Zvcm1ZO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGB0cmFuc2xhdGUoJHt0cmFuc2Zvcm1YfXB4LCAke3RyYW5zZm9ybVl9cHgpYDtcbiAgICAgICAgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVwb3NpdGlvbkFsbCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdGlvbih0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0T3ZlcmxheUJ5SWQoaWQ6IHN0cmluZyk6IE92ZXJsYXlJbmZvIHtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX292ZXJsYXlJbmZvcy5maW5kKGUgPT4gZS5pZCA9PT0gaWQpO1xuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oaWRlKGlkOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2lneE92ZXJsYXkuaGlkZSB3YXMgY2FsbGVkIHdpdGggd3JvbmcgaWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEFyZ3M6IE92ZXJsYXlDbG9zaW5nRXZlbnRBcmdzID0geyBpZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiwgY2FuY2VsOiBmYWxzZSwgZXZlbnQgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZU1vZGFsQ2xhc3NlcyhpbmZvKTtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oaW5mbywgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZURvbmUoaW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJPdmVybGF5U2V0dGluZ3MoXG4gICAgICB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncz86IFZpZXdDb250YWluZXJSZWYgfCBPdmVybGF5U2V0dGluZ3MsXG4gICAgICBtb2R1bGVSZWZPclNldHRpbmdzPzogeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gfCBPdmVybGF5U2V0dGluZ3MpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBsZXQgcmVzdWx0OiBPdmVybGF5U2V0dGluZ3MgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncyAmJiAhKHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzIGluc3RhbmNlb2YgVmlld0NvbnRhaW5lclJlZikpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kdWxlUmVmT3JTZXR0aW5ncyAmJiAhKCdpbmplY3RvcicgaW4gbW9kdWxlUmVmT3JTZXR0aW5ncyAmJiAnY29tcG9uZW50RmFjdG9yeVJlc29sdmVyJyBpbiBtb2R1bGVSZWZPclNldHRpbmdzKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlUmVmT3JTZXR0aW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXRVc2VyVmlld0NvbnRhaW5lck9yTW9kdWxlUmVmKFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncz86IFZpZXdDb250YWluZXJSZWYgfCBPdmVybGF5U2V0dGluZ3MsXG4gICAgICAgIG1vZHVsZVJlZk9yU2V0dGluZ3M/OiB7IGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSB8IE92ZXJsYXlTZXR0aW5nc1xuICAgICAgICApOiBWaWV3Q29udGFpbmVyUmVmIHwgeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gfCB1bmRlZmluZWQge1xuICAgICAgICAgIGxldCByZXN1bHQ6IFZpZXdDb250YWluZXJSZWYgfCB7IGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAodmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3MgaW5zdGFuY2VvZiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kdWxlUmVmT3JTZXR0aW5ncyAmJiAnaW5qZWN0b3InIGluIG1vZHVsZVJlZk9yU2V0dGluZ3MgJiYgJ2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaW4gbW9kdWxlUmVmT3JTZXR0aW5ncykge1xuICAgICAgICAgICAgICByZXN1bHQgPSBtb2R1bGVSZWZPclNldHRpbmdzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5SW5mbyhcbiAgICAgICAgY29tcG9uZW50OiBFbGVtZW50UmVmIHwgVHlwZTxhbnk+LFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmPzogeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gfCBWaWV3Q29udGFpbmVyUmVmKTogT3ZlcmxheUluZm8gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB7IG5nWm9uZTogdGhpcy5fem9uZSwgdHJhbnNmb3JtWDogMCwgdHJhbnNmb3JtWTogMCB9O1xuICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgRWxlbWVudFJlZikge1xuICAgICAgICAgICAgaW5mby5lbGVtZW50UmVmID0gY29tcG9uZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGR5bmFtaWNDb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+O1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJSZWYgaW5zdGFuY2VvZiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY0NvbXBvbmVudCA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBkeW5hbWljRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhY3RvcnlSZXNvbHZlciA9IHZpZXdDb250YWluZXJSZWYgPyB2aWV3Q29udGFpbmVyUmVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA6IHRoaXMuX2ZhY3RvcnlSZXNvbHZlcjtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljRmFjdG9yeSA9IGZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSB2aWV3Q29udGFpbmVyUmVmID8gdmlld0NvbnRhaW5lclJlZi5pbmplY3RvciA6IHRoaXMuX2luamVjdG9yO1xuICAgICAgICAgICAgICAgIGR5bmFtaWNDb21wb25lbnQgPSBkeW5hbWljRmFjdG9yeS5jcmVhdGUoaW5qZWN0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KGR5bmFtaWNDb21wb25lbnQuaG9zdFZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGR5bmFtaWNDb21wb25lbnQub25EZXN0cm95KSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY0NvbXBvbmVudC5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8uZGV0YWNoZWQgJiYgdGhpcy5fb3ZlcmxheUluZm9zLmluZGV4T2YoaW5mbykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaChpbmZvLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5ld2x5IGNyZWF0ZWQgZnJvbSBhIENvbXBvbmVudCwgaXQgaXMgd3JhcHBlZCBpbiAnbmctY29tcG9uZW50JyB0YWcgLSB3ZSBkbyBub3Qgd2FudCB0aGF0LlxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGR5bmFtaWNDb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZiA9IHsgbmF0aXZlRWxlbWVudDogZWxlbWVudCB9O1xuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYgPSBkeW5hbWljQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxhY2VFbGVtZW50SG9vayhlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvb2sgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaG9vay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGhvb2ssIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaG9vaztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVFbGVtZW50VG9PdmVybGF5KGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQgPSB0aGlzLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5nZXRDb250ZW50RWxlbWVudChpbmZvLndyYXBwZXJFbGVtZW50LCBpbmZvLnNldHRpbmdzLm1vZGFsKTtcbiAgICAgICAgdGhpcy5nZXRPdmVybGF5RWxlbWVudChpbmZvKS5hcHBlbmRDaGlsZChpbmZvLndyYXBwZXJFbGVtZW50KTtcbiAgICAgICAgY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0V3JhcHBlckVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCB3cmFwcGVyOiBIVE1MRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X193cmFwcGVyJyk7XG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGVudEVsZW1lbnQod3JhcHBlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBtb2RhbDogYm9vbGVhbik6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY29udGVudDogSFRNTEVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X19jb250ZW50LS1tb2RhbCcpO1xuICAgICAgICAgICAgY29udGVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldjogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fY29udGVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGV2OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBoaWRlIGVsZW1lbnQgdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcuIFNob3cgdGhlIGVsZW1lbnQgZXhhY3RseSBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0c1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHdyYXBwZXJFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE92ZXJsYXlFbGVtZW50KGluZm86IE92ZXJsYXlJbmZvKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5vdXRsZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvLnNldHRpbmdzLm91dGxldC5uYXRpdmVFbGVtZW50IHx8IGluZm8uc2V0dGluZ3Mub3V0bGV0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheScpO1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9vdmVybGF5RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXlFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2l6ZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIC8vICBpZiB3ZSBhcmUgcG9zaXRpb25pbmcgY29tcG9uZW50IHRoaXMgaXMgZmlyc3QgdGltZSBpdCBnZXRzIHZpc2libGVcbiAgICAgICAgICAgIC8vICBhbmQgd2UgY2FuIGZpbmFsbHkgZ2V0IGl0cyBzaXplXG4gICAgICAgICAgICBpbmZvLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBpbmZvLmluaXRpYWxTaXplID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgY29udGVudCBkaXYgd2lkdGggb25seSBpZiBlbGVtZW50IHRvIHNob3cgaGFzIHdpZHRoXG4gICAgICAgIGlmIChpbmZvLmluaXRpYWxTaXplLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLndpZHRoID0gaW5mby5pbml0aWFsU2l6ZS53aWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpbmZvLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGluZm8ud3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0XG4gICAgICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluZm8uY2xvc2VBbmltYXRpb25EZXRhY2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBpZDogaW5mby5pZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiwgZXZlbnQ6IGluZm8uZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGluZm8uZXZlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhblVwKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBIVE1MRWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBvdXRsZXQgPSB0aGlzLmdldE92ZXJsYXlFbGVtZW50KGluZm8pO1xuICAgICAgICAvLyBpZiBzYW1lIGVsZW1lbnQgaXMgc2hvd24gaW4gb3RoZXIgb3ZlcmxheSBvdXRsZXQgd2lsbCBub3QgY29udGFpblxuICAgICAgICAvLyB0aGUgZWxlbWVudCBhbmQgd2Ugc2hvdWxkIG5vdCByZW1vdmUgaXQgZm9ybSBvdXRsZXRcbiAgICAgICAgaWYgKG91dGxldC5jb250YWlucyhjaGlsZCkpIHtcbiAgICAgICAgICAgIG91dGxldC5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnROb2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoaW5mby5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIGluZm8uY29tcG9uZW50UmVmO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmhvb2spIHtcbiAgICAgICAgICAgIGluZm8uaG9vay5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgaW5mby5ob29rKTtcbiAgICAgICAgICAgIGluZm8uaG9vay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGluZm8uaG9vayk7XG4gICAgICAgICAgICBkZWxldGUgaW5mby5ob29rO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vdmVybGF5SW5mb3MuaW5kZXhPZihpbmZvKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gdGhpcy5fb3ZlcmxheUVsZW1lbnQucGFyZW50RWxlbWVudCBjaGVjayBqdXN0IGZvciB0ZXN0cyB0aGF0IG1hbnVhbGx5IGRlbGV0ZSB0aGUgZWxlbWVudFxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlFbGVtZW50ICYmIHRoaXMuX292ZXJsYXlFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX292ZXJsYXlFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsb3NlT25Fc2NhcGVMaXN0ZW5lcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYW4gYWxsIHRoZSByZXNvdXJjZXMgYXR0YWNoZWQgdG8gaW5mb1xuICAgICAgICBkZWxldGUgaW5mby5lbGVtZW50UmVmO1xuICAgICAgICBkZWxldGUgaW5mby5zZXR0aW5ncztcbiAgICAgICAgZGVsZXRlIGluZm8uaW5pdGlhbFNpemU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvbkRldGFjaGluZyA9IHRydWU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyO1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uRGV0YWNoaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcjtcbiAgICAgICAgZGVsZXRlIGluZm8ubmdab25lO1xuICAgICAgICBkZWxldGUgaW5mby53cmFwcGVyRWxlbWVudDtcbiAgICAgICAgaW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5T3BlbkFuaW1hdGlvbihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgb3BlbmluZyBhbmltYXRpb24gYWxyZWFkeSBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBvc2l0aW9uO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmluaXQoKTtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5wb3NpdGlvbiA9IDEgLSBwb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0aW5nLmVtaXQoeyBpZDogaW5mby5pZCwgYW5pbWF0aW9uUGxheWVyOiBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIsIGFuaW1hdGlvblR5cGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAvLyAgdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcgc2hvdyB0aGUgZWxlbWVudCBqdXN0IGJlZm9yZSBhbmltYXRpb24gc3RhcnRcbiAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5Q2xvc2VBbmltYXRpb24oaW5mbzogT3ZlcmxheUluZm8sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIGNsb3NpbmcgYW5pbWF0aW9uIGFscmVhZHkgc3RhcnRlZCBkbyBub3RoaW5nXG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnBvc2l0aW9uO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmluaXQoKTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucG9zaXRpb24gPSAxIC0gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGFydGluZy5lbWl0KHsgaWQ6IGluZm8uaWQsIGFuaW1hdGlvblBsYXllcjogaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciwgYW5pbWF0aW9uVHlwZTogJ2Nsb3NlJyB9KTtcbiAgICAgICAgaW5mby5ldmVudCA9IGV2ZW50O1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyAgVE9ETzogY2hlY2sgaWYgYXBwbHlBbmltYXRpb25QYXJhbXMgd2lsbCB3b3JrIHdpdGggY29tcGxleCBhbmltYXRpb25zXG4gICAgcHJpdmF0ZSBhcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbk9wdGlvbnM6IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKSB7XG4gICAgICAgIGlmICghYW5pbWF0aW9uT3B0aW9ucykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbmltYXRpb25PcHRpb25zLm9wdGlvbnMgfHwgIWFuaW1hdGlvbk9wdGlvbnMub3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSBhbmltYXRpb25PcHRpb25zLm9wdGlvbnMucGFyYW1zIGFzIElBbmltYXRpb25QYXJhbXM7XG4gICAgICAgIGlmIChwYXJhbXMuZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcmFtcy5kdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmVhc2luZykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uID0gcGFyYW1zLmVhc2luZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja2VkID0gKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vICBpZiB3ZSBnZXQgdG8gbW9kYWwgb3ZlcmxheSBqdXN0IHJldHVybiAtIHdlIHNob3VsZCBub3QgY2xvc2UgYW55dGhpbmcgdW5kZXIgaXRcbiAgICAgICAgLy8gIGlmIHdlIGdldCB0byBub24tbW9kYWwgb3ZlcmxheSBkbyB0aGUgbmV4dDpcbiAgICAgICAgLy8gICAxLiBDaGVjayBpdCBoYXMgY2xvc2Ugb24gb3V0c2lkZSBjbGljay4gSWYgbm90IGdvIG9uIHRvIG5leHQgb3ZlcmxheTtcbiAgICAgICAgLy8gICAyLiBJZiB0cnVlIGNoZWNrIGlmIGNsaWNrIGlzIG9uIHRoZSBlbGVtZW50LiBJZiBpdCBpcyBvbiB0aGUgZWxlbWVudCB3ZSBoYXZlIGNsb3NlZFxuICAgICAgICAvLyAgYWxyZWFkeSBhbGwgcHJldmlvdXMgbm9uLW1vZGFsIHdpdGggY2xvc2Ugb24gb3V0c2lkZSBjbGljayBlbGVtZW50cywgc28gd2UgcmV0dXJuLiBJZlxuICAgICAgICAvLyAgbm90IGNsb3NlIHRoZSBvdmVybGF5IGFuZCBjaGVjayBuZXh0XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zW2ldO1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXYuY29tcG9zZWQgPyBldi5jb21wb3NlZFBhdGgoKVswXSA6IGV2LnRhcmdldDtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5RWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjbGljayBpcyBvbiB0aGUgb3ZlcmxheSBlbGVtZW50IG9yIG9uIGFuIGVsZW1lbnQgZnJvbSB0aGUgZXhjbHVzaW9uIGxpc3QsIGFuZCBpZiBzbyBkbyBub3QgY2xvc2UgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlRWxlbWVudHMgPSBpbmZvLnNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID9cbiAgICAgICAgICAgICAgICAgICAgWy4uLmluZm8uc2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2ssIG92ZXJsYXlFbGVtZW50XSA6IFtvdmVybGF5RWxlbWVudF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnNpZGVDbGljazogYm9vbGVhbiA9IGV4Y2x1ZGVFbGVtZW50cy5zb21lKGUgPT4gZS5jb250YWlucyh0YXJnZXQgYXMgTm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luc2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgLy8gIGlmIHRoZSBjbGljayBpcyBvdXRzaWRlIGNsaWNrLCBidXQgY2xvc2UgYW5pbWF0aW9uIGhhcyBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKGluZm8uaWQsIGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBhZGRPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgICAgIGZyb21FdmVudChpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuX2hpZGUoaW5mby5pZCwgZSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAvLyAgaWYgYWxsIG92ZXJsYXlzIG1pbnVzIGNsb3Npbmcgb3ZlcmxheXMgZXF1YWxzIG9uZSBhZGQgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKHggPT4geC5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmICF4LnNldHRpbmdzLm1vZGFsKS5sZW5ndGggLVxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5maWx0ZXIoeCA9PiB4LnNldHRpbmdzLmNsb3NlT25PdXRzaWRlQ2xpY2sgJiYgIXguc2V0dGluZ3MubW9kYWwgJiZcbiAgICAgICAgICAgICAgICAgICAgeC5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKS5sZW5ndGggPT09IDEpIHtcblxuICAgICAgICAgICAgICAgIC8vIGNsaWNrIGV2ZW50IGlzIG5vdCBmaXJlZCBvbiBpT1MuIFRvIG1ha2UgZWxlbWVudCBcImNsaWNrYWJsZVwiIHdlIGFyZVxuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgdGhlIGN1cnNvciB0byBwb2ludGVyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzSU9TICYmICF0aGlzLl9jdXJzb3JTdHlsZUlzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUgPSB0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnNvclN0eWxlSXNTZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja2VkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkUmVtb3ZlQ2xpY2tFdmVudExpc3RlbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5mb3JFYWNoKG8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvLnNldHRpbmdzLm1vZGFsID09PSBmYWxzZSAmJiBvLmlkICE9PSBpbmZvLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJzb3JTdHlsZUlzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUlzU2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKVxuICAgICAgICAgICAgICAgIC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoIC0gY2xvc2luZ092ZXJsYXlzQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVwb3NpdGlvbkFsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVJlc2l6ZUhhbmRsZXIoKSB7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdPdmVybGF5c0NvdW50ID1cbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIobyA9PiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpXG4gICAgICAgICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGggLSBjbG9zaW5nT3ZlcmxheXNDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXBvc2l0aW9uQWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLmNsb3NlT25Fc2NhcGUgJiYgIXRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyID0gZnJvbUV2ZW50KHRoaXMuX2RvY3VtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldjogS2V5Ym9hcmRFdmVudCkgPT4gZXYua2V5ID09PSAnRXNjYXBlJyB8fCBldi5rZXkgPT09ICdFc2MnKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZU92ZXJsYXlzID0gdGhpcy5fb3ZlcmxheUluZm9zLmZpbHRlcihvID0+IG8udmlzaWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGVPdmVybGF5cy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0T3ZlcmxheUluZm8gPSB2aXNpYmxlT3ZlcmxheXNbdmlzaWJsZU92ZXJsYXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRPdmVybGF5SW5mby52aXNpYmxlICYmIHRhcmdldE92ZXJsYXlJbmZvLnNldHRpbmdzLmNsb3NlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKHRhcmdldE92ZXJsYXlJbmZvLmlkLCBldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUNsb3NlT25Fc2NhcGVMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRNb2RhbENsYXNzZXMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBbmltYXRpb25QYXJhbXMod3JhcHBlckVsZW1lbnQsIGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXItLW1vZGFsJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTW9kYWxDbGFzc2VzKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyRWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBbmltYXRpb25QYXJhbXMod3JhcHBlckVsZW1lbnQsIGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbik7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtb3ZlcmxheV9fd3JhcHBlci0tbW9kYWwnKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X193cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQW5pbWF0aW9uUGxheWVycyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllciA9IHRoaXMuYW5pbWF0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIC5idWlsZEFuaW1hdGlvbihpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbiwgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmFuaW1hdGlvbkVuZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub3BlbkFuaW1hdGlvbkRvbmUoaW5mbykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuY2xvc2VBbmltYXRpb24pIHtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIgPSB0aGlzLmFuaW1hdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICAuYnVpbGRBbmltYXRpb24oaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uLCBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmFuaW1hdGlvbkVuZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VBbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkFuaW1hdGlvbkRvbmUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKCFpbmZvLm9wZW5BbmltYXRpb25EZXRhY2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBpZDogaW5mby5pZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyKSB7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcikge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZURvbmUoaW5mbyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5pc2hBbmltYXRpb25zKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIC8vIC8vIFRPRE86IHNob3VsZCB3ZSBlbWl0IGhlcmUgb3BlbmVkIG9yIGNsb3NlZCBldmVudHNcbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIuZmluaXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5maW5pc2goKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
846
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFLSCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBS1YsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFDSCxNQUFNLEVBQ04sT0FBTyxFQUVQLGNBQWMsRUFDZCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUs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LE1BQU0sRUFBRSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQzs4R0F4NkJRLGlCQUFpQixnSEE2RmQsUUFBUSwrREFHUiwwQkFBMEI7a0hBaEc3QixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBOEZ6QixNQUFNOzJCQUFDLFFBQVE7OzBCQUdmLE1BQU07MkJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50RmFjdG9yeSxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVHlwZSxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBmYWRlSW4sXG4gICAgZmFkZU91dCxcbiAgICBJQW5pbWF0aW9uUGFyYW1zLFxuICAgIHNjYWxlSW5Ib3JMZWZ0LFxuICAgIHNjYWxlSW5Ib3JSaWdodCxcbiAgICBzY2FsZUluVmVyQm90dG9tLFxuICAgIHNjYWxlSW5WZXJUb3AsXG4gICAgc2NhbGVPdXRIb3JMZWZ0LFxuICAgIHNjYWxlT3V0SG9yUmlnaHQsXG4gICAgc2NhbGVPdXRWZXJCb3R0b20sXG4gICAgc2NhbGVPdXRWZXJUb3AsXG4gICAgc2xpZGVJbkJvdHRvbSxcbiAgICBzbGlkZUluVG9wLFxuICAgIHNsaWRlT3V0Qm90dG9tLFxuICAgIHNsaWRlT3V0VG9wXG59IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvbWFpbic7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYW5pbWF0aW9uL2FuZ3VsYXItYW5pbWF0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2F1dG8tcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vY29ubmVjdGVkLXBvc2l0aW9uaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbnRhaW5lclBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2NvbnRhaW5lci1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBFbGFzdGljUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vZWxhc3RpYy1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9nbG9iYWwtcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgSVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL0lQb3NpdGlvblN0cmF0ZWd5JztcbmltcG9ydCB7IE5vT3BTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4vc2Nyb2xsL05vT3BTY3JvbGxTdHJhdGVneSc7XG5pbXBvcnQge1xuICAgIEFic29sdXRlUG9zaXRpb24sXG4gICAgSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzLFxuICAgIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzLFxuICAgIE92ZXJsYXlDbG9zaW5nRXZlbnRBcmdzLFxuICAgIE92ZXJsYXlFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUluZm8sXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvaW50LFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgUmVsYXRpdmVQb3NpdGlvbixcbiAgICBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSAnLi91dGlsaXRpZXMnO1xuXG4vKipcbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9vdmVybGF5LW1haW4pXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIGFsbG93cyB1c2VycyB0byBzaG93IGNvbXBvbmVudHMgb24gb3ZlcmxheSBkaXYgYWJvdmUgYWxsIG90aGVyIGVsZW1lbnRzIGluIHRoZSBwYWdlLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIElneE92ZXJsYXlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGp1c3QgYmVmb3JlIHRoZSBvdmVybGF5IGNvbnRlbnQgc3RhcnRzIHRvIG9wZW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5pbmcoZXZlbnQ6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3Qgb3BlbmluZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBvdmVybGF5IGNvbnRlbnQgaXMgb3BlbmVkIGFuZCBhbGwgYW5pbWF0aW9ucyBhcmUgZmluaXNoZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5lZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IG9wZW5lZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBjb250ZW50IHN0YXJ0cyB0byBjbG9zZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2luZyhldmVudDogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBjbG9zaW5nID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5Q2xvc2luZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgY29udGVudCBpcyBjbG9zZWQgYW5kIGFsbCBhbmltYXRpb25zIGFyZSBmaW5pc2hlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2VkKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY2xvc2VkID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgY29udGVudCBpcyBhcHBlbmRlZCB0byB0aGUgb3ZlcmxheS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29udGVudEFwcGVuZGluZyhldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbnRlbnRBcHBlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBjb250ZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBvdmVybGF5LCBhbmQgYmVmb3JlIGFuaW1hdGlvbnMgYXJlIHN0YXJ0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnRlbnRBcHBlbmRlZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRlZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGVudEFwcGVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBhbmltYXRpb24gc3RhcnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGFuaW1hdGlvblN0YXJ0aW5nKGV2ZW50OiBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgYW5pbWF0aW9uU3RhcnRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGFuaW1hdGlvblN0YXJ0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzPigpO1xuXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50SWQgPSAwO1xuICAgIHByaXZhdGUgX292ZXJsYXlJbmZvczogT3ZlcmxheUluZm9bXSA9IFtdO1xuICAgIHByaXZhdGUgX292ZXJsYXlFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG4gICAgcHJpdmF0ZSBfa2V5UHJlc3NFdmVudExpc3RlbmVyOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfY3Vyc29yU3R5bGVJc1NldCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2N1cnNvck9yaWdpbmFsVmFsdWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgX2RlZmF1bHRTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW10sXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgX2FwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEluamVjdChJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSlwcml2YXRlIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3ZlcmxheSBzZXR0aW5ncyB3aXRoIGdsb2JhbCBvciBjb250YWluZXIgcG9zaXRpb24gc3RyYXRlZ3kgYW5kIHByZXNldCBwb3NpdGlvbiBzZXR0aW5nc1xuICAgICAqXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFByZXNldCBwb3NpdGlvbiBzZXR0aW5ncy4gRGVmYXVsdCBwb3NpdGlvbiBpcyAnY2VudGVyJ1xuICAgICAqIEBwYXJhbSBvdXRsZXQgVGhlIG91dGxldCBjb250YWluZXIgdG8gYXR0YWNoIHRoZSBvdmVybGF5IHRvXG4gICAgICogQHJldHVybnMgTm9uLW1vZGFsIG92ZXJsYXkgc2V0dGluZ3MgYmFzZWQgb24gR2xvYmFsIG9yIENvbnRhaW5lciBwb3NpdGlvbiBzdHJhdGVneSBhbmQgdGhlIHByb3ZpZGVkIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlQWJzb2x1dGVPdmVybGF5U2V0dGluZ3MoXG4gICAgICAgIHBvc2l0aW9uPzogQWJzb2x1dGVQb3NpdGlvbiwgb3V0bGV0PzogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWYpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBwb3NpdGlvblNldHRpbmdzID0gdGhpcy5jcmVhdGVBYnNvbHV0ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb24pO1xuICAgICAgICBjb25zdCBzdHJhdGVneSA9IG91dGxldCA/IG5ldyBDb250YWluZXJQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpIDogbmV3IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vT3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgICAgIG91dGxldFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3ZlcmxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3ZlcmxheSBzZXR0aW5ncyB3aXRoIGF1dG8sIGNvbm5lY3RlZCBvciBlbGFzdGljIHBvc2l0aW9uIHN0cmF0ZWd5IGFuZCBwcmVzZXQgcG9zaXRpb24gc2V0dGluZ3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgQXR0YWNoaW5nIHRhcmdldCBmb3IgdGhlIGNvbXBvbmVudCB0byBzaG93XG4gICAgICogQHBhcmFtIHN0cmF0ZWd5IFRoZSByZWxhdGl2ZSBwb3NpdGlvbiBzdHJhdGVneSB0byBiZSBhcHBsaWVkIHRvIHRoZSBvdmVybGF5IHNldHRpbmdzLiBEZWZhdWx0IGlzIEF1dG8gcG9zaXRpb25pbmcgc3RyYXRlZ3kuXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFByZXNldCBwb3NpdGlvbiBzZXR0aW5ncy4gQnkgZGVmYXVsdCB0aGUgZWxlbWVudCBpcyBwb3NpdGlvbmVkIGJlbG93IHRoZSB0YXJnZXQsIGxlZnQgYWxpZ25lZC5cbiAgICAgKiBAcmV0dXJucyBOb24tbW9kYWwgb3ZlcmxheSBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGFyZ2V0LCBzdHJhdGVneSBhbmQgcG9zaXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVSZWxhdGl2ZU92ZXJsYXlTZXR0aW5ncyhcbiAgICAgICAgdGFyZ2V0OiBQb2ludCB8IEhUTUxFbGVtZW50LFxuICAgICAgICBwb3NpdGlvbj86IFJlbGF0aXZlUG9zaXRpb24sXG4gICAgICAgIHN0cmF0ZWd5PzogUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5KTpcbiAgICAgICAgT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25TZXR0aW5ncyA9IHRoaXMuY3JlYXRlUmVsYXRpdmVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koc3RyYXRlZ3ksIHBvc2l0aW9uU2V0dGluZ3MpLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBOb09wU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlTZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBYnNvbHV0ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb246IEFic29sdXRlUG9zaXRpb24pOiBQb3NpdGlvblNldHRpbmdzIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgQWJzb2x1dGVQb3NpdGlvbi5Cb3R0b206XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNsaWRlSW5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dEJvdHRvbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFic29sdXRlUG9zaXRpb24uVG9wOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuVG9wLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluVG9wLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRUb3BcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBYnNvbHV0ZVBvc2l0aW9uLkNlbnRlcjpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IGZhZGVJbixcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVJlbGF0aXZlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbjogUmVsYXRpdmVQb3NpdGlvbik6IFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgICAgICBsZXQgcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkFib3ZlOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuVG9wLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluVmVyQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRWZXJCb3R0b20sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5CZWxvdzpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJblZlclRvcCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyVG9wXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5BZnRlcjpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5Ib3JMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRIb3JMZWZ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5CZWZvcmU6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJbkhvclJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRIb3JSaWdodFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uRGVmYXVsdDpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJUb3AsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dFZlclRvcCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koc3RyYXRlZ3k6IFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSwgcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyk6IElQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kuQ29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LkVsYXN0aWM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGFzdGljUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LkF1dG86XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgSWQuIFByb3ZpZGUgdGhpcyBJZCB3aGVuIGNhbGwgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgRWxlbWVudFJlZiB0byBzaG93IGluIG92ZXJsYXlcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKiBAcmV0dXJucyBJZCBvZiB0aGUgY3JlYXRlZCBvdmVybGF5LiBWYWxpZCB1bnRpbCBgZGV0YWNoYCBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGF0dGFjaChlbGVtZW50OiBFbGVtZW50UmVmLCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgSWQuIFByb3ZpZGUgdGhpcyBJZCB3aGVuIGNhbGwgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IFR5cGUgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHNldHRpbmdzIERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICogQHBhcmFtIG1vZHVsZVJlZiBPcHRpb25hbCByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgSW5qZWN0b3IgYW5kIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICAgICAqIHRoYXQgY2FuIHJlc29sdmUgdGhlIGNvbXBvbmVudCdzIGZhY3RvcnlcbiAgICAgKiBAcmV0dXJucyBJZCBvZiB0aGUgY3JlYXRlZCBvdmVybGF5LiBWYWxpZCB1bnRpbCBgZGV0YWNoYCBpcyBjYWxsZWQuXG4gICAgICogQGRlcHJlY2F0ZWQgZGVwcmVjYXRlZCBpbiAxNC4wLjAuIFVzZSB0aGUgYGF0dGFjaChjb21wb25lbnQsIHZpZXdDb250YWluZXJSZWYsIHNldHRpbmdzKWAgb3ZlcmxvYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYXR0YWNoKFxuICAgICAgICBjb21wb25lbnQ6IFR5cGU8YW55PixcbiAgICAgICAgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MsXG4gICAgICAgIG1vZHVsZVJlZj86IHsgaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9KTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbGluZyB0aGUgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IFR5cGUgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWYgUmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgd2hlcmUgY3JlYXRlZCBjb21wb25lbnQncyBob3N0IHZpZXcgd2lsbCBiZSBpbnNlcnRlZFxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBEaXNwbGF5IHNldHRpbmdzIGZvciB0aGUgb3ZlcmxheSwgc3VjaCBhcyBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsL2Nsb3NlIGJlaGF2aW9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goY29tcG9uZW50OiBUeXBlPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdHRhY2goXG4gICAgICAgIGNvbXBvbmVudE9yRWxlbWVudDogRWxlbWVudFJlZiB8IFR5cGU8YW55PixcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3M/OiBWaWV3Q29udGFpbmVyUmVmIHwgT3ZlcmxheVNldHRpbmdzLFxuICAgICAgICBtb2R1bGVSZWZPclNldHRpbmdzPzogeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gfCBPdmVybGF5U2V0dGluZ3MpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUluZm8oY29tcG9uZW50T3JFbGVtZW50LCB0aGlzLmdldFVzZXJWaWV3Q29udGFpbmVyT3JNb2R1bGVSZWYodmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3MsIG1vZHVsZVJlZk9yU2V0dGluZ3MpKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignT3ZlcmxheSB3YXMgbm90IGFibGUgdG8gYXR0YWNoIHByb3ZpZGVkIGNvbXBvbmVudCEnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5mby5pZCA9ICh0aGlzLl9jb21wb25lbnRJZCsrKS50b1N0cmluZygpO1xuICAgICAgICBpbmZvLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kZWZhdWx0U2V0dGluZ3MsIHRoaXMuZ2V0VXNlck92ZXJsYXlTZXR0aW5ncyh2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncywgbW9kdWxlUmVmT3JTZXR0aW5ncykpO1xuICAgICAgICAvLyBFbWl0IHRoZSBjb250ZW50QXBwZW5kaW5nIGV2ZW50IGJlZm9yZSBhcHBlbmRpbmcgdGhlIGNvbnRlbnRcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0geyBpZDogaW5mby5pZCwgZWxlbWVudFJlZjogaW5mby5lbGVtZW50UmVmLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBzZXR0aW5ncyB9O1xuICAgICAgICB0aGlzLmNvbnRlbnRBcHBlbmRpbmcuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICAvLyBBcHBlbmQgdGhlIGNvbnRlbnQgdG8gdGhlIG92ZXJsYXlcbiAgICAgICAgaW5mby5zZXR0aW5ncyA9IGV2ZW50QXJncy5zZXR0aW5ncztcbiAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLnB1c2goaW5mbyk7XG4gICAgICAgIGluZm8uaG9vayA9IHRoaXMucGxhY2VFbGVtZW50SG9vayhpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGluZm8uaW5pdGlhbFNpemUgPSB7IHdpZHRoOiBlbGVtZW50UmVjdC53aWR0aCwgaGVpZ2h0OiBlbGVtZW50UmVjdC5oZWlnaHQgfTtcbiAgICAgICAgdGhpcy5tb3ZlRWxlbWVudFRvT3ZlcmxheShpbmZvKTtcbiAgICAgICAgdGhpcy5jb250ZW50QXBwZW5kZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmIH0pO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnNjcm9sbFN0cmF0ZWd5LmluaXRpYWxpemUodGhpcy5fZG9jdW1lbnQsIHRoaXMsIGluZm8uaWQpO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnNjcm9sbFN0cmF0ZWd5LmF0dGFjaCgpO1xuICAgICAgICB0aGlzLmFkZE91dHNpZGVDbGlja0xpc3RlbmVyKGluZm8pO1xuICAgICAgICB0aGlzLmFkZFJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5hZGRDbG9zZU9uRXNjYXBlTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMuYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm8pO1xuICAgICAgICByZXR1cm4gaW5mby5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgb3ZlcmxheSB3aXRoIHRoZSBwcm92aWRlZCBpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCBvZiB0aGUgb3ZlcmxheSB0byByZW1vdmVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmRldGFjaChpZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRldGFjaChpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG5cbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2lneE92ZXJsYXkuZGV0YWNoIHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uZGV0YWNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbmlzaEFuaW1hdGlvbnMoaW5mbyk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVzaXplSGFuZGxlcigpO1xuICAgICAgICB0aGlzLmNsZWFuVXAoaW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aGUgb3ZlcmxheXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5kZXRhY2hBbGwoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0YWNoQWxsKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2godGhpcy5fb3ZlcmxheUluZm9zW2ldLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBvdmVybGF5IGZvciBwcm92aWRlZCBpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCB0byBzaG93IG92ZXJsYXkgZm9yXG4gICAgICogQHBhcmFtIHNldHRpbmdzIERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICovXG4gICAgcHVibGljIHNob3coaWQ6IHN0cmluZywgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2lneE92ZXJsYXkuc2hvdyB3YXMgY2FsbGVkIHdpdGggd3JvbmcgaWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEFyZ3M6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzID0geyBpZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiwgY2FuY2VsOiBmYWxzZSB9O1xuICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICBpZiAoZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICAgICAgLy8gVE9ETzogdXBkYXRlIGF0dGFjaFxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU2l6ZShpbmZvKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnBvc2l0aW9uKFxuICAgICAgICAgICAgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIHsgd2lkdGg6IGluZm8uaW5pdGlhbFNpemUud2lkdGgsIGhlaWdodDogaW5mby5pbml0aWFsU2l6ZS5oZWlnaHQgfSxcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIGluZm8uc2V0dGluZ3MudGFyZ2V0KTtcbiAgICAgICAgdGhpcy5hZGRNb2RhbENsYXNzZXMoaW5mbyk7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbikge1xuICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIGJ1aWxkIHBsYXllcnMgYWdhaW4uIFRoaXMgd2FzIGFscmVhZHkgZG9uZSBpbiBhdHRhY2ghISFcbiAgICAgICAgICAgIC8vIHRoaXMuYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm8pO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihpbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICB0byBlbGltaW5hdGUgZmxpY2tlcmluZyBzaG93IHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlIG9wZW5lZCBmaXJlc1xuICAgICAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgICAgICAgICBpbmZvLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIGNvbXBvbmVudCB3aXRoIHRoZSBJRCBwcm92aWRlZCBhcyBhIHBhcmFtZXRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmhpZGUoaWQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKGlkOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5faGlkZShpZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGVzIGFsbCB0aGUgY29tcG9uZW50cyBhbmQgdGhlIG92ZXJsYXkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5oaWRlQWxsKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhpZGVBbGwoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUodGhpcy5fb3ZlcmxheUluZm9zW2ldLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9zaXRpb25zIHRoZSBjb21wb25lbnQgd2l0aCBJRCBwcm92aWRlZCBhcyBhIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCB0byByZXBvc2l0aW9uIG92ZXJsYXkgZm9yXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5yZXBvc2l0aW9uKGlkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3NpdGlvbihpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG4gICAgICAgIGlmICghb3ZlcmxheUluZm8gfHwgIW92ZXJsYXlJbmZvLnNldHRpbmdzKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dyb25nIGlkIHByb3ZpZGVkIGluIG92ZXJsYXkucmVwb3NpdGlvbiBtZXRob2QuIElkOiAnLCBpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvdmVybGF5SW5mby52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSBvdmVybGF5SW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnRSZWN0ID0gY29udGVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIG92ZXJsYXlJbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb24oXG4gICAgICAgICAgICBjb250ZW50RWxlbWVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogY29udGVudEVsZW1lbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogY29udGVudEVsZW1lbnRSZWN0LmhlaWdodFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBvdmVybGF5SW5mby5zZXR0aW5ncy50YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9mZnNldHMgdGhlIGNvbnRlbnQgYWxvbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXhpcyBieSB0aGUgcHJvdmlkZWQgYW1vdW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSWQgdG8gb2Zmc2V0IG92ZXJsYXkgZm9yXG4gICAgICogQHBhcmFtIGRlbHRhWCBBbW91bnQgb2Ygb2Zmc2V0IGluIGhvcml6b250YWwgZGlyZWN0aW9uXG4gICAgICogQHBhcmFtIGRlbHRhWSBBbW91bnQgb2Ygb2Zmc2V0IGluIHZlcnRpY2FsIGRpcmVjdGlvblxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuc2V0T2Zmc2V0KGlkLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldE9mZnNldChpZDogc3RyaW5nLCBkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZm8udHJhbnNmb3JtWCArPSBkZWx0YVg7XG4gICAgICAgIGluZm8udHJhbnNmb3JtWSArPSBkZWx0YVk7XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtWCA9IGluZm8udHJhbnNmb3JtWDtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtWSA9IGluZm8udHJhbnNmb3JtWTtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGUgPSBgdHJhbnNsYXRlKCR7dHJhbnNmb3JtWH1weCwgJHt0cmFuc2Zvcm1ZfXB4KWA7XG4gICAgICAgIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHJlcG9zaXRpb25BbGwgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLnJlcG9zaXRpb24odGhpcy5fb3ZlcmxheUluZm9zW2ldLmlkKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldE92ZXJsYXlCeUlkKGlkOiBzdHJpbmcpOiBPdmVybGF5SW5mbyB7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLl9vdmVybGF5SW5mb3MuZmluZChlID0+IGUuaWQgPT09IGlkKTtcbiAgICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGlkZShpZDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdpZ3hPdmVybGF5LmhpZGUgd2FzIGNhbGxlZCB3aXRoIHdyb25nIGlkOiAnLCBpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBPdmVybGF5Q2xvc2luZ0V2ZW50QXJncyA9IHsgaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIGNhbmNlbDogZmFsc2UsIGV2ZW50IH07XG4gICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVNb2RhbENsYXNzZXMoaW5mbyk7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuY2xvc2VBbmltYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGxheUNsb3NlQW5pbWF0aW9uKGluZm8sIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEb25lKGluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVc2VyT3ZlcmxheVNldHRpbmdzKFxuICAgICAgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3M/OiBWaWV3Q29udGFpbmVyUmVmIHwgT3ZlcmxheVNldHRpbmdzLFxuICAgICAgbW9kdWxlUmVmT3JTZXR0aW5ncz86IHsgaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IHwgT3ZlcmxheVNldHRpbmdzKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgbGV0IHJlc3VsdDogT3ZlcmxheVNldHRpbmdzIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3MgJiYgISh2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncyBpbnN0YW5jZW9mIFZpZXdDb250YWluZXJSZWYpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncztcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZHVsZVJlZk9yU2V0dGluZ3MgJiYgISgnaW5qZWN0b3InIGluIG1vZHVsZVJlZk9yU2V0dGluZ3MgJiYgJ2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaW4gbW9kdWxlUmVmT3JTZXR0aW5ncykpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vZHVsZVJlZk9yU2V0dGluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0VXNlclZpZXdDb250YWluZXJPck1vZHVsZVJlZihcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3M/OiBWaWV3Q29udGFpbmVyUmVmIHwgT3ZlcmxheVNldHRpbmdzLFxuICAgICAgICBtb2R1bGVSZWZPclNldHRpbmdzPzogeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gfCBPdmVybGF5U2V0dGluZ3NcbiAgICAgICAgKTogVmlld0NvbnRhaW5lclJlZiB8IHsgaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgICBsZXQgcmVzdWx0OiBWaWV3Q29udGFpbmVyUmVmIHwgeyBpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzIGluc3RhbmNlb2YgVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICAgICAgICByZXN1bHQgPSB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1vZHVsZVJlZk9yU2V0dGluZ3MgJiYgJ2luamVjdG9yJyBpbiBtb2R1bGVSZWZPclNldHRpbmdzICYmICdjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXInIGluIG1vZHVsZVJlZk9yU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlUmVmT3JTZXR0aW5ncztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3ZlcmxheUluZm8oXG4gICAgICAgIGNvbXBvbmVudDogRWxlbWVudFJlZiB8IFR5cGU8YW55PixcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZj86IHsgaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IHwgVmlld0NvbnRhaW5lclJlZik6IE92ZXJsYXlJbmZvIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0geyBuZ1pvbmU6IHRoaXMuX3pvbmUsIHRyYW5zZm9ybVg6IDAsIHRyYW5zZm9ybVk6IDAgfTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEVsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZiA9IGNvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkeW5hbWljQ29tcG9uZW50OiBDb21wb25lbnRSZWY8YW55PjtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyUmVmIGluc3RhbmNlb2YgVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICAgICAgICAgIGR5bmFtaWNDb21wb25lbnQgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZHluYW1pY0ZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PjtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3J5UmVzb2x2ZXIgPSB2aWV3Q29udGFpbmVyUmVmID8gdmlld0NvbnRhaW5lclJlZi5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgOiB0aGlzLl9mYWN0b3J5UmVzb2x2ZXI7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY0ZhY3RvcnkgPSBmYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gdmlld0NvbnRhaW5lclJlZiA/IHZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IgOiB0aGlzLl9pbmplY3RvcjtcbiAgICAgICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50ID0gZHluYW1pY0ZhY3RvcnkuY3JlYXRlKGluamVjdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhkeW5hbWljQ29tcG9uZW50Lmhvc3RWaWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkeW5hbWljQ29tcG9uZW50Lm9uRGVzdHJveSkge1xuICAgICAgICAgICAgICAgIGR5bmFtaWNDb21wb25lbnQub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmRldGFjaGVkICYmIHRoaXMuX292ZXJsYXlJbmZvcy5pbmRleE9mKGluZm8pICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2goaW5mby5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBuZXdseSBjcmVhdGVkIGZyb20gYSBDb21wb25lbnQsIGl0IGlzIHdyYXBwZWQgaW4gJ25nLWNvbXBvbmVudCcgdGFnIC0gd2UgZG8gbm90IHdhbnQgdGhhdC5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkeW5hbWljQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYgPSB7IG5hdGl2ZUVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgICAgICAgICAgIGluZm8uY29tcG9uZW50UmVmID0gZHluYW1pY0NvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYWNlRWxlbWVudEhvb2soZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob29rID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhvb2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZWxlbWVudC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShob29rLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGhvb2s7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlRWxlbWVudFRvT3ZlcmxheShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50ID0gdGhpcy5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoaW5mby53cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5tb2RhbCk7XG4gICAgICAgIHRoaXMuZ2V0T3ZlcmxheUVsZW1lbnQoaW5mbykuYXBwZW5kQ2hpbGQoaW5mby53cmFwcGVyRWxlbWVudCk7XG4gICAgICAgIGNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFdyYXBwZXJFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlcjogSFRNTEVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fd3JhcHBlcicpO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRlbnRFbGVtZW50KHdyYXBwZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgbW9kYWw6IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlmIChtb2RhbCkge1xuICAgICAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fY29udGVudC0tbW9kYWwnKTtcbiAgICAgICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXY6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX2NvbnRlbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIChldjogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAgaGlkZSBlbGVtZW50IHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nLiBTaG93IHRoZSBlbGVtZW50IGV4YWN0bHkgYmVmb3JlIGFuaW1hdGlvbiBzdGFydHNcbiAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5RWxlbWVudChpbmZvOiBPdmVybGF5SW5mbyk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3Mub3V0bGV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5mby5zZXR0aW5ncy5vdXRsZXQubmF0aXZlRWxlbWVudCB8fCBpbmZvLnNldHRpbmdzLm91dGxldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX292ZXJsYXlFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXknKTtcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fb3ZlcmxheUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNpemUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICAvLyAgaWYgd2UgYXJlIHBvc2l0aW9uaW5nIGNvbXBvbmVudCB0aGlzIGlzIGZpcnN0IHRpbWUgaXQgZ2V0cyB2aXNpYmxlXG4gICAgICAgICAgICAvLyAgYW5kIHdlIGNhbiBmaW5hbGx5IGdldCBpdHMgc2l6ZVxuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaW5mby5pbml0aWFsU2l6ZSA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IGNvbnRlbnQgZGl2IHdpZHRoIG9ubHkgaWYgZWxlbWVudCB0byBzaG93IGhhcyB3aWR0aFxuICAgICAgICBpZiAoaW5mby5pbml0aWFsU2l6ZS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IGluZm8uaW5pdGlhbFNpemUud2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZURvbmUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaW5mby52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGlmIChpbmZvLndyYXBwZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyB0byBlbGltaW5hdGUgZmxpY2tlcmluZyBzaG93IHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlIGFuaW1hdGlvbiBzdGFydFxuICAgICAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbmZvLmNsb3NlQW5pbWF0aW9uRGV0YWNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIGV2ZW50OiBpbmZvLmV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBpbmZvLmV2ZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW5VcChpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBjb25zdCBjaGlsZDogSFRNTEVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgb3V0bGV0ID0gdGhpcy5nZXRPdmVybGF5RWxlbWVudChpbmZvKTtcbiAgICAgICAgLy8gaWYgc2FtZSBlbGVtZW50IGlzIHNob3duIGluIG90aGVyIG92ZXJsYXkgb3V0bGV0IHdpbGwgbm90IGNvbnRhaW5cbiAgICAgICAgLy8gdGhlIGVsZW1lbnQgYW5kIHdlIHNob3VsZCBub3QgcmVtb3ZlIGl0IGZvcm0gb3V0bGV0XG4gICAgICAgIGlmIChvdXRsZXQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgICAgICAgICBvdXRsZXQucmVtb3ZlQ2hpbGQoY2hpbGQucGFyZW50Tm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KGluZm8uY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIGluZm8uY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSBpbmZvLmNvbXBvbmVudFJlZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5ob29rKSB7XG4gICAgICAgICAgICBpbmZvLmhvb2sucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGluZm8uaG9vayk7XG4gICAgICAgICAgICBpbmZvLmhvb2sucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChpbmZvLmhvb2spO1xuICAgICAgICAgICAgZGVsZXRlIGluZm8uaG9vaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3ZlcmxheUluZm9zLmluZGV4T2YoaW5mbyk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIHRoaXMuX292ZXJsYXlFbGVtZW50LnBhcmVudEVsZW1lbnQgY2hlY2sganVzdCBmb3IgdGVzdHMgdGhhdCBtYW51YWxseSBkZWxldGUgdGhlIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGF5RWxlbWVudCAmJiB0aGlzLl9vdmVybGF5RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9vdmVybGF5RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbG9zZU9uRXNjYXBlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFuIGFsbCB0aGUgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIGluZm9cbiAgICAgICAgZGVsZXRlIGluZm8uZWxlbWVudFJlZjtcbiAgICAgICAgZGVsZXRlIGluZm8uc2V0dGluZ3M7XG4gICAgICAgIGRlbGV0ZSBpbmZvLmluaXRpYWxTaXplO1xuICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25EZXRhY2hpbmcgPSB0cnVlO1xuICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgZGVsZXRlIGluZm8ub3BlbkFuaW1hdGlvblBsYXllcjtcbiAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvbkRldGFjaGluZyA9IHRydWU7XG4gICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgZGVsZXRlIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI7XG4gICAgICAgIGRlbGV0ZSBpbmZvLm5nWm9uZTtcbiAgICAgICAgZGVsZXRlIGluZm8ud3JhcHBlckVsZW1lbnQ7XG4gICAgICAgIGluZm8gPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxheU9wZW5BbmltYXRpb24oaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIG9wZW5pbmcgYW5pbWF0aW9uIGFscmVhZHkgc3RhcnRlZCBkbyBub3RoaW5nXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5wb3NpdGlvbjtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5pbml0KCk7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucG9zaXRpb24gPSAxIC0gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGFydGluZy5lbWl0KHsgaWQ6IGluZm8uaWQsIGFuaW1hdGlvblBsYXllcjogaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLCBhbmltYXRpb25UeXBlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgLy8gIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0XG4gICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xuICAgICAgICBpbmZvLnZpc2libGUgPSB0cnVlO1xuICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucGxheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxheUNsb3NlQW5pbWF0aW9uKGluZm86IE92ZXJsYXlJbmZvLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBjbG9zaW5nIGFuaW1hdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgZG8gbm90aGluZ1xuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5wb3NpdGlvbjtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5pbml0KCk7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBvc2l0aW9uID0gMSAtIHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhcnRpbmcuZW1pdCh7IGlkOiBpbmZvLmlkLCBhbmltYXRpb25QbGF5ZXI6IGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIsIGFuaW1hdGlvblR5cGU6ICdjbG9zZScgfSk7XG4gICAgICAgIGluZm8uZXZlbnQgPSBldmVudDtcbiAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgLy8gIFRPRE86IGNoZWNrIGlmIGFwcGx5QW5pbWF0aW9uUGFyYW1zIHdpbGwgd29yayB3aXRoIGNvbXBsZXggYW5pbWF0aW9uc1xuICAgIHByaXZhdGUgYXBwbHlBbmltYXRpb25QYXJhbXMod3JhcHBlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmltYXRpb25PcHRpb25zOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSkge1xuICAgICAgICBpZiAoIWFuaW1hdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwbXMnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYW5pbWF0aW9uT3B0aW9ucy5vcHRpb25zIHx8ICFhbmltYXRpb25PcHRpb25zLm9wdGlvbnMucGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gYW5pbWF0aW9uT3B0aW9ucy5vcHRpb25zLnBhcmFtcyBhcyBJQW5pbWF0aW9uUGFyYW1zO1xuICAgICAgICBpZiAocGFyYW1zLmR1cmF0aW9uKSB7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBwYXJhbXMuZHVyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5lYXNpbmcpIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiA9IHBhcmFtcy5lYXNpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRvY3VtZW50Q2xpY2tlZCA9IChldjogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAvLyAgaWYgd2UgZ2V0IHRvIG1vZGFsIG92ZXJsYXkganVzdCByZXR1cm4gLSB3ZSBzaG91bGQgbm90IGNsb3NlIGFueXRoaW5nIHVuZGVyIGl0XG4gICAgICAgIC8vICBpZiB3ZSBnZXQgdG8gbm9uLW1vZGFsIG92ZXJsYXkgZG8gdGhlIG5leHQ6XG4gICAgICAgIC8vICAgMS4gQ2hlY2sgaXQgaGFzIGNsb3NlIG9uIG91dHNpZGUgY2xpY2suIElmIG5vdCBnbyBvbiB0byBuZXh0IG92ZXJsYXk7XG4gICAgICAgIC8vICAgMi4gSWYgdHJ1ZSBjaGVjayBpZiBjbGljayBpcyBvbiB0aGUgZWxlbWVudC4gSWYgaXQgaXMgb24gdGhlIGVsZW1lbnQgd2UgaGF2ZSBjbG9zZWRcbiAgICAgICAgLy8gIGFscmVhZHkgYWxsIHByZXZpb3VzIG5vbi1tb2RhbCB3aXRoIGNsb3NlIG9uIG91dHNpZGUgY2xpY2sgZWxlbWVudHMsIHNvIHdlIHJldHVybi4gSWZcbiAgICAgICAgLy8gIG5vdCBjbG9zZSB0aGUgb3ZlcmxheSBhbmQgY2hlY2sgbmV4dFxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX292ZXJsYXlJbmZvc1tpXTtcbiAgICAgICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2LmNvbXBvc2VkID8gZXYuY29tcG9zZWRQYXRoKClbMF0gOiBldi50YXJnZXQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgY2xpY2sgaXMgb24gdGhlIG92ZXJsYXkgZWxlbWVudCBvciBvbiBhbiBlbGVtZW50IGZyb20gdGhlIGV4Y2x1c2lvbiBsaXN0LCBhbmQgaWYgc28gZG8gbm90IGNsb3NlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgY29uc3QgZXhjbHVkZUVsZW1lbnRzID0gaW5mby5zZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA/XG4gICAgICAgICAgICAgICAgICAgIFsuLi5pbmZvLnNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrLCBvdmVybGF5RWxlbWVudF0gOiBbb3ZlcmxheUVsZW1lbnRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5zaWRlQ2xpY2s6IGJvb2xlYW4gPSBleGNsdWRlRWxlbWVudHMuc29tZShlID0+IGUuY29udGFpbnModGFyZ2V0IGFzIE5vZGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNJbnNpZGVDbGljaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIC8vICBpZiB0aGUgY2xpY2sgaXMgb3V0c2lkZSBjbGljaywgYnV0IGNsb3NlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBkbyBub3RoaW5nXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZShpbmZvLmlkLCBldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljaykge1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LCAnY2xpY2snKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLl9oaWRlKGluZm8uaWQsIGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gIGlmIGFsbCBvdmVybGF5cyBtaW51cyBjbG9zaW5nIG92ZXJsYXlzIGVxdWFscyBvbmUgYWRkIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLmZpbHRlcih4ID0+IHguc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljayAmJiAheC5zZXR0aW5ncy5tb2RhbCkubGVuZ3RoIC1cbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKHggPT4geC5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmICF4LnNldHRpbmdzLm1vZGFsICYmXG4gICAgICAgICAgICAgICAgICAgIHguY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkubGVuZ3RoID09PSAxKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGljayBldmVudCBpcyBub3QgZmlyZWQgb24gaU9TLiBUbyBtYWtlIGVsZW1lbnQgXCJjbGlja2FibGVcIiB3ZSBhcmVcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHRoZSBjdXJzb3IgdG8gcG9pbnRlclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtVXRpbC5pc0lPUyAmJiAhdGhpcy5fY3Vyc29yU3R5bGVJc1NldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlID0gdGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUlzU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU91dHNpZGVDbGlja0xpc3RlbmVyKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbGV0IHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoby5zZXR0aW5ncy5tb2RhbCA9PT0gZmFsc2UgJiYgby5pZCAhPT0gaW5mby5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW1vdmVDbGlja0V2ZW50TGlzdGVuZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVDbGlja0V2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3Vyc29yU3R5bGVJc1NldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yU3R5bGVJc1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja2VkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUmVzaXplSGFuZGxlcigpIHtcbiAgICAgICAgY29uc3QgY2xvc2luZ092ZXJsYXlzQ291bnQgPVxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihvID0+IG8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCAtIGNsb3NpbmdPdmVybGF5c0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb25BbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKVxuICAgICAgICAgICAgICAgIC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoIC0gY2xvc2luZ092ZXJsYXlzQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVwb3NpdGlvbkFsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENsb3NlT25Fc2NhcGVMaXN0ZW5lcihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uRXNjYXBlICYmICF0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lciA9IGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ2tleWRvd24nKS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXY6IEtleWJvYXJkRXZlbnQpID0+IGV2LmtleSA9PT0gJ0VzY2FwZScgfHwgZXYua2V5ID09PSAnRXNjJylcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKChldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2libGVPdmVybGF5cyA9IHRoaXMuX292ZXJsYXlJbmZvcy5maWx0ZXIobyA9PiBvLnZpc2libGUpO1xuICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlT3ZlcmxheXMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldE92ZXJsYXlJbmZvID0gdmlzaWJsZU92ZXJsYXlzW3Zpc2libGVPdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0T3ZlcmxheUluZm8udmlzaWJsZSAmJiB0YXJnZXRPdmVybGF5SW5mby5zZXR0aW5ncy5jbG9zZU9uRXNjYXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSh0YXJnZXRPdmVybGF5SW5mby5pZCwgZXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVDbG9zZU9uRXNjYXBlTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTW9kYWxDbGFzc2VzKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyRWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lneC1vdmVybGF5X193cmFwcGVyJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uUGFyYW1zKHdyYXBwZXJFbGVtZW50LCBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbik7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X193cmFwcGVyLS1tb2RhbCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU1vZGFsQ2xhc3NlcyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uUGFyYW1zKHdyYXBwZXJFbGVtZW50LCBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuY2xvc2VBbmltYXRpb24pO1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaWd4LW92ZXJsYXlfX3dyYXBwZXItLW1vZGFsJyk7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fd3JhcHBlcicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgPSB0aGlzLmFuaW1hdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICAuYnVpbGRBbmltYXRpb24oaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24sIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5hbmltYXRpb25FbmRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW5BbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyID0gdGhpcy5hbmltYXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJ1aWxkQW5pbWF0aW9uKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbiwgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5hbmltYXRpb25FbmRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlQW5pbWF0aW9uRG9uZShpbmZvKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5BbmltYXRpb25Eb25lKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmICghaW5mby5vcGVuQW5pbWF0aW9uRGV0YWNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcikge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZUFuaW1hdGlvbkRvbmUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIpIHtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VEb25lKGluZm8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoQW5pbWF0aW9ucyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICAvLyAvLyBUT0RPOiBzaG91bGQgd2UgZW1pdCBoZXJlIG9wZW5lZCBvciBjbG9zZWQgZXZlbnRzXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmZpbmlzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuZmluaXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -5,6 +5,7 @@ import { takeUntil } from 'rxjs/operators';
|
|
|
5
5
|
import { fadeIn, fadeOut } from '../animations/main';
|
|
6
6
|
import { ContainerPositionStrategy, GlobalPositionStrategy, HorizontalAlignment, VerticalAlignment } from '../services/public_api';
|
|
7
7
|
import { IgxNotificationsDirective } from '../directives/notification/notifications.directive';
|
|
8
|
+
import { IgxButtonDirective } from '../directives/button/button.directive';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
let NEXT_ID = 0;
|
|
10
11
|
/**
|
|
@@ -163,11 +164,11 @@ export class IgxSnackbarComponent extends IgxNotificationsDirective {
|
|
|
163
164
|
});
|
|
164
165
|
}
|
|
165
166
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxSnackbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxSnackbarComponent, isStandalone: true, selector: "igx-snackbar", inputs: { id: "id", actionText: "actionText", positionSettings: "positionSettings" }, outputs: { clicked: "clicked", animationStarted: "animationStarted", animationDone: "animationDone" }, host: { properties: { "attr.id": "this.id", "class.igx-snackbar": "this.cssClass" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"igx-snackbar__message\">\n {{ textMessage }}\n <ng-content></ng-content>\n</div>\n<
|
|
167
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxSnackbarComponent, isStandalone: true, selector: "igx-snackbar", inputs: { id: "id", actionText: "actionText", positionSettings: "positionSettings" }, outputs: { clicked: "clicked", animationStarted: "animationStarted", animationDone: "animationDone" }, host: { properties: { "attr.id": "this.id", "class.igx-snackbar": "this.cssClass" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"igx-snackbar__message\">\n {{ textMessage }}\n <ng-content></ng-content>\n</div>\n<div #customButton class=\"igx-snackbar__button\">\n <ng-content select=\"[igxButton]\"></ng-content>\n</div>\n<button *ngIf=\"!customButton.children.length && actionText\" igxButton (click)=\"triggerAction()\">\n {{ actionText }}\n</button>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }] }); }
|
|
167
168
|
}
|
|
168
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxSnackbarComponent, decorators: [{
|
|
169
170
|
type: Component,
|
|
170
|
-
args: [{ selector: 'igx-snackbar', standalone: true, imports: [NgIf], template: "<div class=\"igx-snackbar__message\">\n {{ textMessage }}\n <ng-content></ng-content>\n</div>\n<
|
|
171
|
+
args: [{ selector: 'igx-snackbar', standalone: true, imports: [NgIf, IgxButtonDirective], template: "<div class=\"igx-snackbar__message\">\n {{ textMessage }}\n <ng-content></ng-content>\n</div>\n<div #customButton class=\"igx-snackbar__button\">\n <ng-content select=\"[igxButton]\"></ng-content>\n</div>\n<button *ngIf=\"!customButton.children.length && actionText\" igxButton (click)=\"triggerAction()\">\n {{ actionText }}\n</button>\n" }]
|
|
171
172
|
}], propDecorators: { id: [{
|
|
172
173
|
type: HostBinding,
|
|
173
174
|
args: ['attr.id']
|
|
@@ -187,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
|
|
|
187
188
|
}], positionSettings: [{
|
|
188
189
|
type: Input
|
|
189
190
|
}] } });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3NuYWNrYmFyL3NuYWNrYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFDekQsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7QUFHL0YsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBT0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLHlCQUF5QjtJQU5uRTs7UUFRSTs7Ozs7Ozs7Ozs7V0FXRztRQUdhLE9BQUUsR0FBRyxnQkFBZ0IsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUVqRDs7Ozs7V0FLRztRQUVJLGFBQVEsR0FBRyxjQUFjLENBQUM7UUFVakM7Ozs7OztXQU1HO1FBRUksWUFBTyxHQUFHLElBQUksWUFBWSxFQUF3QixD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QjtrR0FBcEIsb0JBQW9CLG1YQ3pDakMsc1FBT0EsNENEZ0NjLElBQUk7OzJGQUVMLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsSUFBSSxDQUFDOzhCQWtCQyxFQUFFO3NCQUZqQixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQVVDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBU2pCLFVBQVU7c0JBQXpCLEtBQUs7Z0JBVUMsT0FBTztzQkFEYixNQUFNO2dCQVVVLGdCQUFnQjtzQkFBaEMsTUFBTTtnQkFTVSxhQUFhO3NCQUE3QixNQUFNO2dCQVdJLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZhZGVJbiwgZmFkZU91dCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvbWFpbic7XG5pbXBvcnQgeyBDb250YWluZXJQb3NpdGlvblN0cmF0ZWd5LCBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5LCBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hOb3RpZmljYXRpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9ucy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVG9nZ2xlVmlld0V2ZW50QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIFNuYWNrYmFyKiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL3NuYWNrYmFyLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBTbmFjayBCYXIgcHJvdmlkZXMgZmVlZGJhY2sgYWJvdXQgYW4gb3BlcmF0aW9uIHdpdGggYSBzaW5nbGUtbGluZSBtZXNzYWdlLCB3aGljaCBjYW5cbiAqIGluY2x1ZGUgYSBsaW5rIHRvIGFuIGFjdGlvbiBzdWNoIGFzIFVuZG8uXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiAoY2xpY2spPVwic25hY2tiYXIuc2hvdygpXCI+U2VuZCBtZXNzYWdlPC9idXR0b24+XG4gKiA8ZGl2PlxuICogICA8aWd4LXNuYWNrYmFyICNzbmFja2Jhcj5cbiAqICAgICAgTWVzc2FnZSBzZW50XG4gKiAgIDwvaWd4LXNuYWNrYmFyPlxuICogPC9kaXY+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtc25hY2tiYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnc25hY2tiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWZdXG59KVxuZXhwb3J0IGNsYXNzIElneFNuYWNrYmFyQ29tcG9uZW50IGV4dGVuZHMgSWd4Tm90aWZpY2F0aW9uc0RpcmVjdGl2ZVxuICAgIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIHNuYWNrYmFyLlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIG9mIHRoZSBmaXJzdCBzbmFja2JhciBjb21wb25lbnQgIHdpbGwgYmUgYFwiaWd4LXNuYWNrYmFyLTBcImA7XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgaWQgPSBcIlNuYWNrYmFyMVwiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc25hY2tiYXJJZCA9IHRoaXMuc25hY2tiYXIuaWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4U25hY2tiYXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGlkID0gYGlneC1zbmFja2Jhci0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbmFja2JhcicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1zbmFja2Jhcic7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBhY3Rpb25UZXh0YCBhdHRyaWJ1dGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgW2FjdGlvblRleHRdID0gXCInQWN0aW9uIFRleHQnXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvblRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlIHRvIHRoZSBgSWd4U25hY2tiYXJDb21wb25lbnRgIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIChjbGlja2VkKT1cImNsaWNrZWRIYW5kbGVyKCRldmVudClcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4U25hY2tiYXJDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBzbmFja2JhciBhbmltYXRpb24gc3RhcnRzLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYFRvZ2dsZVZpZXdFdmVudEFyZ3NgIGludGVyZmFjZSBhcyBhbiBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciAoYW5pbWF0aW9uU3RhcnRlZCkgPSBcImFuaW1hdGlvblN0YXJ0ZWQoJGV2ZW50KVwiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgYW5pbWF0aW9uU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VG9nZ2xlVmlld0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIHNuYWNrYmFyIGFuaW1hdGlvbiBlbmRzLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYFRvZ2dsZVZpZXdFdmVudEFyZ3NgIGludGVyZmFjZSBhcyBhbiBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciAoYW5pbWF0aW9uRG9uZSkgPSBcImFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgYW5pbWF0aW9uRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8VG9nZ2xlVmlld0V2ZW50QXJncz4oKTtcblxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwb3NpdGlvbiBhbmQgYW5pbWF0aW9uIHNldHRpbmdzIHVzZWQgYnkgdGhlIHNuYWNrYmFyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdzbmFja2JhcicsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzbmFja2JhcjogSWd4U25hY2tiYXJDb21wb25lbnQ7XG4gICAgICogbGV0IGN1cnJlbnRQb3NpdGlvbjogUG9zaXRpb25TZXR0aW5ncyA9IHRoaXMuc25hY2tiYXIucG9zaXRpb25TZXR0aW5nc1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBwb3NpdGlvblNldHRpbmdzKCk6IFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHBvc2l0aW9uIGFuZCBhbmltYXRpb24gc2V0dGluZ3MgdXNlZCBieSB0aGUgc25hY2tiYXIuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgW3Bvc2l0aW9uU2V0dGluZ3NdPVwibmV3UG9zaXRpb25TZXR0aW5nc1wiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBpbXBvcnQgeyBzbGlkZUluVG9wLCBzbGlkZU91dEJvdHRvbSB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xuICAgICAqIC4uLlxuICAgICAqIEBWaWV3Q2hpbGQoJ3NuYWNrYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHNuYWNrYmFyOiBJZ3hTbmFja2JhckNvbXBvbmVudDtcbiAgICAgKiAgcHVibGljIG5ld1Bvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oc2xpZGVJblRvcCwgeyBwYXJhbXM6IHsgZHVyYXRpb246ICcxMDAwbXMnLCBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVZKDEwMCUpJ319KSxcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oc2xpZGVPdXRCb3R0b20sIHsgcGFyYW1zOiB7IGR1cmF0aW9uOiAnMTAwMG1zJywgZnJvbVBvc2l0aW9uOiAndHJhbnNsYXRlWSgwKSd9fSksXG4gICAgICogICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICogICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAqICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgKiAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAqICAgICAgbWluU2l6ZTogeyBoZWlnaHQ6IDEwMCwgd2lkdGg6IDEwMCB9XG4gICAgICogIH07XG4gICAgICogdGhpcy5zbmFja2Jhci5wb3NpdGlvblNldHRpbmdzID0gdGhpcy5uZXdQb3NpdGlvblNldHRpbmdzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcG9zaXRpb25TZXR0aW5ncyhzZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9wb3NpdGlvblNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgIG9wZW5BbmltYXRpb246IHVzZUFuaW1hdGlvbihmYWRlSW4sIHsgcGFyYW1zOiB7IGR1cmF0aW9uOiAnLjM1cycsIGVhc2luZzogJ2N1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKScsXG4gICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVZKDEwMCUpJywgdG9Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMCknfSB9KSxcbiAgICAgICAgY2xvc2VBbmltYXRpb246IHVzZUFuaW1hdGlvbihmYWRlT3V0LCB7ICBwYXJhbXM6IHsgZHVyYXRpb246ICcuMnMnLCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpJyxcbiAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMCknLCB0b1Bvc2l0aW9uOiAndHJhbnNsYXRlWSgxMDAlKSd9IH0pLFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgc25hY2tiYXIgYW5kIGhpZGVzIGl0IGFmdGVyIHRoZSBgZGlzcGxheVRpbWVgIGlzIG92ZXIgaWYgYGF1dG9IaWRlYCBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNuYWNrYmFyLm9wZW4oKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLnN0cmF0ZWd5ID0gdGhpcy5vdXRsZXQgPyBuZXcgQ29udGFpbmVyUG9zaXRpb25TdHJhdGVneSh0aGlzLnBvc2l0aW9uU2V0dGluZ3MpXG4gICAgICAgICAgICA6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KHRoaXMucG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIHN1cGVyLm9wZW4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBvciBjbG9zZXMgdGhlIHNuYWNrYmFyLCBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbmFja2Jhci50b2dnbGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAgcHVibGljIG92ZXJyaWRlIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkIHx8IHRoaXMuaXNDbG9zaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGlja2VkLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVuZWRFdmVudEFyZ3M6IFRvZ2dsZVZpZXdFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBpZDogdGhpcy5fb3ZlcmxheUlkIH07XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0ZWQuZW1pdChvcGVuZWRFdmVudEFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlZEV2ZW50QXJnczogVG9nZ2xlVmlld0V2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGlkOiB0aGlzLl9vdmVybGF5SWQgfTtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KGNsb3NlZEV2ZW50QXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImlneC1zbmFja2Jhcl9fbWVzc2FnZVwiPlxuICAgIHt7IHRleHRNZXNzYWdlIH19XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlneC1zbmFja2Jhcl9fYnV0dG9uXCIgaWd4UmlwcGxlPVwid2hpdGVcIiAqbmdJZj1cImFjdGlvblRleHRcIiAoY2xpY2spPVwidHJpZ2dlckFjdGlvbigpXCI+XG4gICAge3sgYWN0aW9uVGV4dCB9fVxuPC9idXR0b24+XG4iXX0=
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3NuYWNrYmFyL3NuYWNrYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFDekQsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFFM0UsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBT0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLHlCQUF5QjtJQU5uRTs7UUFRSTs7Ozs7Ozs7Ozs7V0FXRztRQUdhLE9BQUUsR0FBRyxnQkFBZ0IsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUVqRDs7Ozs7V0FLRztRQUVJLGFBQVEsR0FBRyxjQUFjLENBQUM7UUFV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QztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBaEtRLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG1YQzFDakMsZ1dBVUEsNENEOEJjLElBQUksNkZBQUUsa0JBQWtCOzsyRkFFekIsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNJLGNBQWMsY0FFWixJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUM7OEJBa0JuQixFQUFFO3NCQUZqQixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQVVDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBU2pCLFVBQVU7c0JBQXpCLEtBQUs7Z0JBVUMsT0FBTztzQkFEYixNQUFNO2dCQVVVLGdCQUFnQjtzQkFBaEMsTUFBTTtnQkFTVSxhQUFhO3NCQUE3QixNQUFNO2dCQVVJLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZhZGVJbiwgZmFkZU91dCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvbWFpbic7XG5pbXBvcnQgeyBDb250YWluZXJQb3NpdGlvblN0cmF0ZWd5LCBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5LCBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hOb3RpZmljYXRpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9ucy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVG9nZ2xlVmlld0V2ZW50QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5cbmxldCBORVhUX0lEID0gMDtcbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgU25hY2tiYXIqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvc25hY2tiYXIuaHRtbClcbiAqXG4gKiBUaGUgSWduaXRlIFVJIFNuYWNrIEJhciBwcm92aWRlcyBmZWVkYmFjayBhYm91dCBhbiBvcGVyYXRpb24gd2l0aCBhIHNpbmdsZS1saW5lIG1lc3NhZ2UsIHdoaWNoIGNhblxuICogaW5jbHVkZSBhIGxpbmsgdG8gYW4gYWN0aW9uIHN1Y2ggYXMgVW5kby5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uIChjbGljayk9XCJzbmFja2Jhci5zaG93KClcIj5TZW5kIG1lc3NhZ2U8L2J1dHRvbj5cbiAqIDxkaXY+XG4gKiAgIDxpZ3gtc25hY2tiYXIgI3NuYWNrYmFyPlxuICogICAgICBNZXNzYWdlIHNlbnRcbiAqICAgPC9pZ3gtc25hY2tiYXI+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1zbmFja2JhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdzbmFja2Jhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgSWd4QnV0dG9uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTbmFja2JhckNvbXBvbmVudCBleHRlbmRzIElneE5vdGlmaWNhdGlvbnNEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBzbmFja2Jhci5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCBvZiB0aGUgZmlyc3Qgc25hY2tiYXIgY29tcG9uZW50ICB3aWxsIGJlIGBcImlneC1zbmFja2Jhci0wXCJgO1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIGlkID0gXCJTbmFja2JhcjFcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNuYWNrYmFySWQgPSB0aGlzLnNuYWNrYmFyLmlkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFNuYWNrYmFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBpZCA9IGBpZ3gtc25hY2tiYXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc25hY2tiYXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtc25hY2tiYXInO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgYWN0aW9uVGV4dGAgYXR0cmlidXRlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIFthY3Rpb25UZXh0XSA9IFwiJ0FjdGlvbiBUZXh0J1wiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25UZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYElneFNuYWNrYmFyQ29tcG9uZW50YCBhcyBhbiBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciAoY2xpY2tlZCk9XCJjbGlja2VkSGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFNuYWNrYmFyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgc25hY2tiYXIgYW5pbWF0aW9uIHN0YXJ0cy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBUb2dnbGVWaWV3RXZlbnRBcmdzYCBpbnRlcmZhY2UgYXMgYW4gYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgKGFuaW1hdGlvblN0YXJ0ZWQpID0gXCJhbmltYXRpb25TdGFydGVkKCRldmVudClcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGFuaW1hdGlvblN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRvZ2dsZVZpZXdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBzbmFja2JhciBhbmltYXRpb24gZW5kcy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBUb2dnbGVWaWV3RXZlbnRBcmdzYCBpbnRlcmZhY2UgYXMgYW4gYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgKGFuaW1hdGlvbkRvbmUpID0gXCJhbmltYXRpb25Eb25lKCRldmVudClcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGFuaW1hdGlvbkRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPFRvZ2dsZVZpZXdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBvc2l0aW9uIGFuZCBhbmltYXRpb24gc2V0dGluZ3MgdXNlZCBieSB0aGUgc25hY2tiYXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ3NuYWNrYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHNuYWNrYmFyOiBJZ3hTbmFja2JhckNvbXBvbmVudDtcbiAgICAgKiBsZXQgY3VycmVudFBvc2l0aW9uOiBQb3NpdGlvblNldHRpbmdzID0gdGhpcy5zbmFja2Jhci5wb3NpdGlvblNldHRpbmdzXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBvc2l0aW9uU2V0dGluZ3MoKTogUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gYW5kIGFuaW1hdGlvbiBzZXR0aW5ncyB1c2VkIGJ5IHRoZSBzbmFja2Jhci5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciBbcG9zaXRpb25TZXR0aW5nc109XCJuZXdQb3NpdGlvblNldHRpbmdzXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGltcG9ydCB7IHNsaWRlSW5Ub3AsIHNsaWRlT3V0Qm90dG9tIH0gZnJvbSAnaWduaXRldWktYW5ndWxhcic7XG4gICAgICogLi4uXG4gICAgICogQFZpZXdDaGlsZCgnc25hY2tiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc25hY2tiYXI6IElneFNuYWNrYmFyQ29tcG9uZW50O1xuICAgICAqICBwdWJsaWMgbmV3UG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgKiAgICAgIG9wZW5BbmltYXRpb246IHVzZUFuaW1hdGlvbihzbGlkZUluVG9wLCB7IHBhcmFtczogeyBkdXJhdGlvbjogJzEwMDBtcycsIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMTAwJSknfX0pLFxuICAgICAqICAgICAgY2xvc2VBbmltYXRpb246IHVzZUFuaW1hdGlvbihzbGlkZU91dEJvdHRvbSwgeyBwYXJhbXM6IHsgZHVyYXRpb246ICcxMDAwbXMnLCBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVZKDApJ319KSxcbiAgICAgKiAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgKiAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICogICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAqICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICogICAgICBtaW5TaXplOiB7IGhlaWdodDogMTAwLCB3aWR0aDogMTAwIH1cbiAgICAgKiAgfTtcbiAgICAgKiB0aGlzLnNuYWNrYmFyLnBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLm5ld1Bvc2l0aW9uU2V0dGluZ3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBwb3NpdGlvblNldHRpbmdzKHNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgb3BlbkFuaW1hdGlvbjogdXNlQW5pbWF0aW9uKGZhZGVJbiwgeyBwYXJhbXM6IHsgZHVyYXRpb246ICcuMzVzJywgZWFzaW5nOiAnY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpJyxcbiAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMTAwJSknLCB0b1Bvc2l0aW9uOiAndHJhbnNsYXRlWSgwKSd9IH0pLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogdXNlQW5pbWF0aW9uKGZhZGVPdXQsIHsgIHBhcmFtczogeyBkdXJhdGlvbjogJy4ycycsIGVhc2luZzogJ2N1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSknLFxuICAgICAgICAgICAgZnJvbVBvc2l0aW9uOiAndHJhbnNsYXRlWSgwKScsIHRvUG9zaXRpb246ICd0cmFuc2xhdGVZKDEwMCUpJ30gfSksXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBzbmFja2JhciBhbmQgaGlkZXMgaXQgYWZ0ZXIgdGhlIGBkaXNwbGF5VGltZWAgaXMgb3ZlciBpZiBgYXV0b0hpZGVgIGlzIHNldCB0byBgdHJ1ZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc25hY2tiYXIub3BlbigpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBvcGVuKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0cmF0ZWd5ID0gdGhpcy5vdXRsZXQgPyBuZXcgQ29udGFpbmVyUG9zaXRpb25TdHJhdGVneSh0aGlzLnBvc2l0aW9uU2V0dGluZ3MpXG4gICAgICAgICAgICA6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KHRoaXMucG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIHN1cGVyLm9wZW4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBvciBjbG9zZXMgdGhlIHNuYWNrYmFyLCBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbmFja2Jhci50b2dnbGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAgcHVibGljIG92ZXJyaWRlIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkIHx8IHRoaXMuaXNDbG9zaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGlja2VkLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVuZWRFdmVudEFyZ3M6IFRvZ2dsZVZpZXdFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBpZDogdGhpcy5fb3ZlcmxheUlkIH07XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0ZWQuZW1pdChvcGVuZWRFdmVudEFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlZEV2ZW50QXJnczogVG9nZ2xlVmlld0V2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGlkOiB0aGlzLl9vdmVybGF5SWQgfTtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KGNsb3NlZEV2ZW50QXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtc25hY2tiYXJfX21lc3NhZ2VcIj5cbiAgICB7eyB0ZXh0TWVzc2FnZSB9fVxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuPGRpdiAjY3VzdG9tQnV0dG9uIGNsYXNzPVwiaWd4LXNuYWNrYmFyX19idXR0b25cIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4QnV0dG9uXVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPGJ1dHRvbiAqbmdJZj1cIiFjdXN0b21CdXR0b24uY2hpbGRyZW4ubGVuZ3RoICYmIGFjdGlvblRleHRcIiBpZ3hCdXR0b24gKGNsaWNrKT1cInRyaWdnZXJBY3Rpb24oKVwiPlxuICAgIHt7IGFjdGlvblRleHQgfX1cbjwvYnV0dG9uPlxuIl19
|