@techextensor/tab-sdk 0.0.31 → 0.0.33

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.
@@ -111,11 +111,11 @@ export class CrudService {
111
111
  * @param parameters - Optional parameters to pass to the select query.
112
112
  * @returns A promise that resolves to a common API response containing the result of executing the select query.
113
113
  */
114
- async executeSelectQuery(selectQueryId, parameters) {
114
+ async executeSelectQuery(selectQueryId, parameters, additionalConfig) {
115
115
  // Use the firstValueFrom RxJs operator to wait for the observable to complete
116
116
  const response = await firstValueFrom(
117
117
  // Call the executeSelectQueryById method of the TabGetService and pass the ID of the select query and parameters
118
- this._tabGetService.executeSelectQueryById(selectQueryId, parameters));
118
+ this._tabGetService.executeSelectQueryById(selectQueryId, parameters, additionalConfig));
119
119
  // Return the response from the server
120
120
  return response;
121
121
  }
@@ -187,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
187
187
  providedIn: 'root'
188
188
  }]
189
189
  }] });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL2NydWQvY3J1ZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBeUosY0FBYyxFQUFFLGFBQWEsRUFBaUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyUSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELGNBQWMsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXZFOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBbUIsRUFBRSxPQUFhO1FBQy9DLDhFQUE4RTtRQUM5RSxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUM3QyxDQUFDO1FBRUYsc0NBQXNDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQXNCLEVBQUUsT0FBYTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWM7UUFDakMsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FDaEQsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0Q7Ozs7OztTQU1LO0lBQ0wsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFzQixFQUFFLE9BQWE7UUFDbEQsTUFBTSxRQUFRLEdB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akMsNEZBQTRGO1FBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUMxQyxDQUFDO1FBRUYsc0NBQXNDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBMEI7UUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjO1FBQ2pDLCtFQUErRTtRQUMvRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FDM0MsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5OUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVBJU2VsZWN0UXVlcnksIENvbW1vbkFwaVJlc3BvbnNlLCBEZWxldGVQYXlsb2FkLCBHZXRQYXlsb2FkLCBJbnNlcnRQYXlsb2FkLCBVcGRhdGVQYXlsb2FkLCBJbXByb3REYXRhUGF5bG9hZCwgUmNvcmRIaXN0b3J5UGF5bG9hZCwgU2VhcmNoRGF0YVBheWxvYWQsIFRhYkNydWRTZXJ2aWNlLCBUYWJHZXRTZXJ2aWNlLCBleGVjdXRlU3RvcmVkUHJvY2VkdXJlUGF5bG9hZCB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENydWRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJDcnVkU2VydmljZTogVGFiQ3J1ZFNlcnZpY2UgPSBpbmplY3QoVGFiQ3J1ZFNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYkdldFNlcnZpY2U6IFRhYkdldFNlcnZpY2UgPSBpbmplY3QoVGFiR2V0U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UgdXNpbmcgdGhlIHByb3ZpZGVkIHBheWxvYWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gdG8gcmV0cmlldmUgdGhlIHJlY29yZC5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZXRyaWV2ZWQgcmVjb3JkLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVEc3EocGF5bG9hZDogR2V0UGF5bG9hZCwgaGVhZGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLl90YWJDcnVkU2VydmljZS5nZXQocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyBhIHJlY29yZCBpbnRvIHRoZSBkYXRhYmFzZSB1c2luZyB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyBpbmZvcm1hdGlvbiB0byBpbnNlcnQgdGhlIHJlY29yZC5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSBpbnNlcnRlZCByZWNvcmQuXG4gICAgICovXG4gICAgYXN5bmMgaW5zZXJ0KHBheWxvYWQ6IEluc2VydFBheWxvYWQsIGhlYWRlcnM/OiBhbnkpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBpbnNlcnQgbWV0aG9kIG9mIHRoZSBUYWJDcnVkU2VydmljZSBhbmQgcGFzcyB0aGUgcGF5bG9hZCBhbmQgaGVhZGVyc1xuICAgICAgICAgICAgdGhpcy5fdGFiQ3J1ZFNlcnZpY2UuaW5zZXJ0KHBheWxvYWQsIGhlYWRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgICAqIEluc2VydHMgbXVsdGlwbGUgcmVjb3JkcyBpbnRvIHRoZSBkYXRhYmFzZSB1c2luZyB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gdG8gaW5zZXJ0IG11bHRpcGxlIHJlY29yZHMuXG4gICAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIGluc2VydGVkIHJlY29yZHMuXG4gICAgICAgKi9cbiAgICBhc3luYyBidWxrSW5zZXJ0KHBheWxvYWQ6IEluc2VydFBheWxvYWQsIGhlYWRlcnM/OiBhbnkpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBidWxrSW5zZXJ0IG1ldGhvZCBvZiB0aGUgVGFiQ3J1ZFNlcnZpY2UgYW5kIHBhc3MgdGhlIHBheWxvYWQgYW5kIGhlYWRlcnNcbiAgICAgICAgICAgIHRoaXMuX3RhYkNydWRTZXJ2aWNlLmJ1bGtJbnNlcnQocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgYSByZWNvcmQgaW4gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIGluZm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgcmVjb3JkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJzIC0gT3B0aW9uYWwgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgcmVjb3JkLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZShwYXlsb2FkOiBVcGRhdGVQYXlsb2FkLCBoZWFkZXJzPzogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBVc2UgdGhlIGZpcnN0VmFsdWVGcm9tIFJ4SnMgb3BlcmF0b3IgdG8gd2FpdCBmb3IgdGhlIG9ic2VydmFibGUgdG8gY29tcGxldGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIHRoaXMuX3RhYkNydWRTZXJ2aWNlLnVwZGF0ZShwYXlsb2FkLCBoZWFkZXJzKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIGluZm9ybWF0aW9uIHRvIGRlbGV0ZSB0aGUgcmVjb3JkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJzIC0gT3B0aW9uYWwgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIGRlbGV0ZWQgcmVjb3JkLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShwYXlsb2FkOiBEZWxldGVQYXlsb2FkLCBoZWFkZXJzPzogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBVc2UgdGhlIGZpcnN0VmFsdWVGcm9tIFJ4SnMgb3BlcmF0b3IgdG8gd2FpdCBmb3IgdGhlIG9ic2VydmFibGUgdG8gY29tcGxldGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGRlbGV0ZSBtZXRob2Qgb2YgdGhlIFRhYkNydWRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBwYXlsb2FkIGFuZCBoZWFkZXJzXG4gICAgICAgICAgICB0aGlzLl90YWJDcnVkU2VydmljZS5kZWxldGUocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYSBzdG9yZWQgcHJvY2VkdXJlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNwIC0gVGhlIG5hbWUgb2YgdGhlIHN0b3JlZCBwcm9jZWR1cmUgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVTcChzcDogc3RyaW5nLCBoZWFkZXJzPzogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBVc2UgdGhlIGZpcnN0VmFsdWVGcm9tIFJ4SnMgb3BlcmF0b3IgdG8gd2FpdCBmb3IgdGhlIG9ic2VydmFibGUgdG8gY29tcGxldGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGV4ZWN1dGVTcCBtZXRob2Qgb2YgdGhlIFRhYkNydWRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBuYW1lIG9mIHRoZSBzdG9yZWQgcHJvY2VkdXJlIGFuZCBoZWFkZXJzXG4gICAgICAgICAgICB0aGlzLl90YWJDcnVkU2VydmljZS5leGVjdXRlU3Aoc3AsIGhlYWRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgc3RvcmVkIHByb2NlZHVyZSB1c2luZyB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyBpbmZvcm1hdGlvbiB0byBleGVjdXRlIHRoZSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgICAqIEBwYXJhbSBoZWFkZXJzIC0gT3B0aW9uYWwgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHN0b3JlZCBwcm9jZWR1cmUuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVN0b3JlZFByb2NlZHVyZShwYXlsb2FkOiBleGVjdXRlU3RvcmVkUHJvY2VkdXJlUGF5bG9hZCwgaGVhZGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBleGVjdXRlU3RvcmVkUHJvY2VkdXJlIG1ldGhvZCBvZiB0aGUgVGFiQ3J1ZFNlcnZpY2UgYW5kIHBhc3MgdGhlIHBheWxvYWQgYW5kIGhlYWRlcnNcbiAgICAgICAgICAgIHRoaXMuX3RhYkNydWRTZXJ2aWNlLmV4ZWN1dGVTdG9yZWRQcm9jZWR1cmUocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYSBzZWxlY3QgcXVlcnkgdXNpbmcgdGhlIHByb3ZpZGVkIHNlbGVjdCBxdWVyeSBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3RRdWVyeUlkIC0gVGhlIElEIG9mIHRoZSBzZWxlY3QgcXVlcnkgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgc2VsZWN0IHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzZWxlY3QgcXVlcnkuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVNlbGVjdFF1ZXJ5KHNlbGVjdFF1ZXJ5SWQ6IHN0cmluZywgcGFyYW1ldGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBleGVjdXRlU2VsZWN0UXVlcnlCeUlkIG1ldGhvZCBvZiB0aGUgVGFiR2V0U2VydmljZSBhbmQgcGFzcyB0aGUgSUQgb2YgdGhlIHNlbGVjdCBxdWVyeSBhbmQgcGFyYW1ldGVyc1xuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5leGVjdXRlU2VsZWN0UXVlcnlCeUlkKHNlbGVjdFF1ZXJ5SWQsIHBhcmFtZXRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgc2VsZWN0IHF1ZXJ5IHVzaW5nIHRoZSBwcm92aWRlZCBzZWxlY3QgcXVlcnkgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC0gVGhlIHNlbGVjdCBxdWVyeSBkYXRhLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBzZWxlY3QgcXVlcnkuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNlbGVjdCBxdWVyeS5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlU2VsZWN0RXhlY3V0b3IoZGF0YTogQVBJU2VsZWN0UXVlcnksIHBhcmFtZXRlcnM/OiBhbnkpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIC8vIFVzZSB0aGUgZmlyc3RWYWx1ZUZyb20gUnhKcyBvcGVyYXRvciB0byB3YWl0IGZvciB0aGUgb2JzZXJ2YWJsZSB0byBjb21wbGV0ZVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgc2VsZWN0RXhlY3V0b3IgbWV0aG9kIG9mIHRoZSBUYWJHZXRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBzZWxlY3QgcXVlcnkgZGF0YSBhbmQgcGFyYW1ldGVyc1xuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5zZWxlY3RFeGVjdXRvcihkYXRhLCBwYXJhbWV0ZXJzKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzZWFyY2ggZGF0YSB1c2luZyB0aGUgcHJvdmlkZWQgc2VhcmNoIHF1ZXJ5IGFuZCBsaW1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWFyY2hRdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbnVtYmVyIG9mIHJlY29yZHMgdG8gbGltaXQgdGhlIHJlc3VsdHMgdG8uXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGNvbW1vbiBBUEkgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgc2VhcmNoIGRhdGEuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2VhcmNoRGF0YShwYXlsb2FkOiBTZWFyY2hEYXRhUGF5bG9hZCwgcGFyYW1ldGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBnZXRTZWFyY2hEYXRhIG1ldGhvZCBvZiB0aGUgVGFiR2V0U2VydmljZSBhbmQgcGFzcyB0aGUgc2VhcmNoIHF1ZXJ5IGFuZCBsaW1pdFxuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5nZXRTZWFyY2hEYXRhKHBheWxvYWQsIHBhcmFtZXRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgaGlzdG9yeSBvZiByZWNvcmRzIGZvciBhIHNwZWNpZmllZCBhcHAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE9iamVjdElkIC0gVGhlIElEIG9mIHRoZSBhcHAgb2JqZWN0IHRvIHJldHJpZXZlIHRoZSByZWNvcmQgaGlzdG9yeSBmb3IuXG4gICAgICogQHBhcmFtIHJlY29yZElkcyAtIEFuIGFycmF5IG9mIHJlY29yZCBJRHMgdG8gcmV0cmlldmUgdGhlIGhpc3RvcnkgZm9yLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZWNvcmQgaGlzdG9yeS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZWNvcmRIaXN0b3J5KHBheWxvYWQ6IFJjb3JkSGlzdG9yeVBheWxvYWQpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIC8vIFVzZSB0aGUgZmlyc3RWYWx1ZUZyb20gUnhKcyBvcGVyYXRvciB0byB3YWl0IGZvciB0aGUgb2JzZXJ2YWJsZSB0byBjb21wbGV0ZVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgZ2V0SGlzdG9yeSBtZXRob2Qgb2YgdGhlIFRhYkdldFNlcnZpY2UgYW5kIHBhc3MgdGhlIGFwcCBvYmplY3QgSUQgYW5kIHJlY29yZCBJRHNcbiAgICAgICAgICAgIHRoaXMuX3RhYkdldFNlcnZpY2UuZ2V0SGlzdG9yeShwYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBvcnRzIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGltcG9ydC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGNvbW1vbiBBUEkgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGltcG9ydGluZyB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBpbXBvcnQocGF5bG9hZDogSW1wcm90RGF0YVBheWxvYWQpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgcG1qYXlJbXBvcnQgbWV0aG9kIG9mIHRoZSBUYWJHZXRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBkYXRhIHRvIGltcG9ydFxuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5wbWpheUltcG9ydChwYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59Il19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL2NydWQvY3J1ZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBeUosY0FBYyxFQUFFLGFBQWEsRUFBaUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyUSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELGNBQWMsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXZFOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBbUIsRUFBRSxPQUFhO1FBQy9DLDhFQUE4RTtRQUM5RSxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUM3QyxDQUFDO1FBRUYsc0NBQXNDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQXNCLEVBQUUsT0FBYTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWM7UUFDakMsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FDaEQsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0Q7Ozs7OztTQU1LO0lBQ0wsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFzQixFQUFFLE9BQWE7UUFDbEQsTUFBTSxRQUFRLEdB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LFFBQVEsR0FBRyxNQUFNLGNBQWM7UUFDakMsNEZBQTRGO1FBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUMxQyxDQUFDO1FBRUYsc0NBQXNDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBMEI7UUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjO1FBQ2pDLCtFQUErRTtRQUMvRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FDM0MsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5OUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVBJU2VsZWN0UXVlcnksIENvbW1vbkFwaVJlc3BvbnNlLCBEZWxldGVQYXlsb2FkLCBHZXRQYXlsb2FkLCBJbnNlcnRQYXlsb2FkLCBVcGRhdGVQYXlsb2FkLCBJbXByb3REYXRhUGF5bG9hZCwgUmNvcmRIaXN0b3J5UGF5bG9hZCwgU2VhcmNoRGF0YVBheWxvYWQsIFRhYkNydWRTZXJ2aWNlLCBUYWJHZXRTZXJ2aWNlLCBleGVjdXRlU3RvcmVkUHJvY2VkdXJlUGF5bG9hZCB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENydWRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJDcnVkU2VydmljZTogVGFiQ3J1ZFNlcnZpY2UgPSBpbmplY3QoVGFiQ3J1ZFNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYkdldFNlcnZpY2U6IFRhYkdldFNlcnZpY2UgPSBpbmplY3QoVGFiR2V0U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UgdXNpbmcgdGhlIHByb3ZpZGVkIHBheWxvYWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gdG8gcmV0cmlldmUgdGhlIHJlY29yZC5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZXRyaWV2ZWQgcmVjb3JkLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVEc3EocGF5bG9hZDogR2V0UGF5bG9hZCwgaGVhZGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLl90YWJDcnVkU2VydmljZS5nZXQocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyBhIHJlY29yZCBpbnRvIHRoZSBkYXRhYmFzZSB1c2luZyB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyBpbmZvcm1hdGlvbiB0byBpbnNlcnQgdGhlIHJlY29yZC5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSBpbnNlcnRlZCByZWNvcmQuXG4gICAgICovXG4gICAgYXN5bmMgaW5zZXJ0KHBheWxvYWQ6IEluc2VydFBheWxvYWQsIGhlYWRlcnM/OiBhbnkpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBpbnNlcnQgbWV0aG9kIG9mIHRoZSBUYWJDcnVkU2VydmljZSBhbmQgcGFzcyB0aGUgcGF5bG9hZCBhbmQgaGVhZGVyc1xuICAgICAgICAgICAgdGhpcy5fdGFiQ3J1ZFNlcnZpY2UuaW5zZXJ0KHBheWxvYWQsIGhlYWRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgICAqIEluc2VydHMgbXVsdGlwbGUgcmVjb3JkcyBpbnRvIHRoZSBkYXRhYmFzZSB1c2luZyB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gdG8gaW5zZXJ0IG11bHRpcGxlIHJlY29yZHMuXG4gICAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIGluc2VydGVkIHJlY29yZHMuXG4gICAgICAgKi9cbiAgICBhc3luYyBidWxrSW5zZXJ0KHBheWxvYWQ6IEluc2VydFBheWxvYWQsIGhlYWRlcnM/OiBhbnkpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBidWxrSW5zZXJ0IG1ldGhvZCBvZiB0aGUgVGFiQ3J1ZFNlcnZpY2UgYW5kIHBhc3MgdGhlIHBheWxvYWQgYW5kIGhlYWRlcnNcbiAgICAgICAgICAgIHRoaXMuX3RhYkNydWRTZXJ2aWNlLmJ1bGtJbnNlcnQocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgYSByZWNvcmQgaW4gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIGluZm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgcmVjb3JkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJzIC0gT3B0aW9uYWwgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgcmVjb3JkLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZShwYXlsb2FkOiBVcGRhdGVQYXlsb2FkLCBoZWFkZXJzPzogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBVc2UgdGhlIGZpcnN0VmFsdWVGcm9tIFJ4SnMgb3BlcmF0b3IgdG8gd2FpdCBmb3IgdGhlIG9ic2VydmFibGUgdG8gY29tcGxldGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIHRoaXMuX3RhYkNydWRTZXJ2aWNlLnVwZGF0ZShwYXlsb2FkLCBoZWFkZXJzKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIGluZm9ybWF0aW9uIHRvIGRlbGV0ZSB0aGUgcmVjb3JkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJzIC0gT3B0aW9uYWwgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIGRlbGV0ZWQgcmVjb3JkLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShwYXlsb2FkOiBEZWxldGVQYXlsb2FkLCBoZWFkZXJzPzogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBVc2UgdGhlIGZpcnN0VmFsdWVGcm9tIFJ4SnMgb3BlcmF0b3IgdG8gd2FpdCBmb3IgdGhlIG9ic2VydmFibGUgdG8gY29tcGxldGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGRlbGV0ZSBtZXRob2Qgb2YgdGhlIFRhYkNydWRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBwYXlsb2FkIGFuZCBoZWFkZXJzXG4gICAgICAgICAgICB0aGlzLl90YWJDcnVkU2VydmljZS5kZWxldGUocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYSBzdG9yZWQgcHJvY2VkdXJlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNwIC0gVGhlIG5hbWUgb2YgdGhlIHN0b3JlZCBwcm9jZWR1cmUgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVTcChzcDogc3RyaW5nLCBoZWFkZXJzPzogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBVc2UgdGhlIGZpcnN0VmFsdWVGcm9tIFJ4SnMgb3BlcmF0b3IgdG8gd2FpdCBmb3IgdGhlIG9ic2VydmFibGUgdG8gY29tcGxldGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGV4ZWN1dGVTcCBtZXRob2Qgb2YgdGhlIFRhYkNydWRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBuYW1lIG9mIHRoZSBzdG9yZWQgcHJvY2VkdXJlIGFuZCBoZWFkZXJzXG4gICAgICAgICAgICB0aGlzLl90YWJDcnVkU2VydmljZS5leGVjdXRlU3Aoc3AsIGhlYWRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgc3RvcmVkIHByb2NlZHVyZSB1c2luZyB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyBpbmZvcm1hdGlvbiB0byBleGVjdXRlIHRoZSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgICAqIEBwYXJhbSBoZWFkZXJzIC0gT3B0aW9uYWwgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHN0b3JlZCBwcm9jZWR1cmUuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVN0b3JlZFByb2NlZHVyZShwYXlsb2FkOiBleGVjdXRlU3RvcmVkUHJvY2VkdXJlUGF5bG9hZCwgaGVhZGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBleGVjdXRlU3RvcmVkUHJvY2VkdXJlIG1ldGhvZCBvZiB0aGUgVGFiQ3J1ZFNlcnZpY2UgYW5kIHBhc3MgdGhlIHBheWxvYWQgYW5kIGhlYWRlcnNcbiAgICAgICAgICAgIHRoaXMuX3RhYkNydWRTZXJ2aWNlLmV4ZWN1dGVTdG9yZWRQcm9jZWR1cmUocGF5bG9hZCwgaGVhZGVycylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYSBzZWxlY3QgcXVlcnkgdXNpbmcgdGhlIHByb3ZpZGVkIHNlbGVjdCBxdWVyeSBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3RRdWVyeUlkIC0gVGhlIElEIG9mIHRoZSBzZWxlY3QgcXVlcnkgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgc2VsZWN0IHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzZWxlY3QgcXVlcnkuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVNlbGVjdFF1ZXJ5KHNlbGVjdFF1ZXJ5SWQ6IHN0cmluZywgcGFyYW1ldGVycz86IGFueSwgYWRkaXRpb25hbENvbmZpZz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBleGVjdXRlU2VsZWN0UXVlcnlCeUlkIG1ldGhvZCBvZiB0aGUgVGFiR2V0U2VydmljZSBhbmQgcGFzcyB0aGUgSUQgb2YgdGhlIHNlbGVjdCBxdWVyeSBhbmQgcGFyYW1ldGVyc1xuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5leGVjdXRlU2VsZWN0UXVlcnlCeUlkKHNlbGVjdFF1ZXJ5SWQsIHBhcmFtZXRlcnMsIGFkZGl0aW9uYWxDb25maWcpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgc2VsZWN0IHF1ZXJ5IHVzaW5nIHRoZSBwcm92aWRlZCBzZWxlY3QgcXVlcnkgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC0gVGhlIHNlbGVjdCBxdWVyeSBkYXRhLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBzZWxlY3QgcXVlcnkuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21tb24gQVBJIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNlbGVjdCBxdWVyeS5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlU2VsZWN0RXhlY3V0b3IoZGF0YTogQVBJU2VsZWN0UXVlcnksIHBhcmFtZXRlcnM/OiBhbnkpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIC8vIFVzZSB0aGUgZmlyc3RWYWx1ZUZyb20gUnhKcyBvcGVyYXRvciB0byB3YWl0IGZvciB0aGUgb2JzZXJ2YWJsZSB0byBjb21wbGV0ZVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgc2VsZWN0RXhlY3V0b3IgbWV0aG9kIG9mIHRoZSBUYWJHZXRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBzZWxlY3QgcXVlcnkgZGF0YSBhbmQgcGFyYW1ldGVyc1xuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5zZWxlY3RFeGVjdXRvcihkYXRhLCBwYXJhbWV0ZXJzKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzZWFyY2ggZGF0YSB1c2luZyB0aGUgcHJvdmlkZWQgc2VhcmNoIHF1ZXJ5IGFuZCBsaW1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWFyY2hRdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbnVtYmVyIG9mIHJlY29yZHMgdG8gbGltaXQgdGhlIHJlc3VsdHMgdG8uXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGNvbW1vbiBBUEkgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgc2VhcmNoIGRhdGEuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2VhcmNoRGF0YShwYXlsb2FkOiBTZWFyY2hEYXRhUGF5bG9hZCwgcGFyYW1ldGVycz86IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gVXNlIHRoZSBmaXJzdFZhbHVlRnJvbSBSeEpzIG9wZXJhdG9yIHRvIHdhaXQgZm9yIHRoZSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBnZXRTZWFyY2hEYXRhIG1ldGhvZCBvZiB0aGUgVGFiR2V0U2VydmljZSBhbmQgcGFzcyB0aGUgc2VhcmNoIHF1ZXJ5IGFuZCBsaW1pdFxuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5nZXRTZWFyY2hEYXRhKHBheWxvYWQsIHBhcmFtZXRlcnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgaGlzdG9yeSBvZiByZWNvcmRzIGZvciBhIHNwZWNpZmllZCBhcHAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE9iamVjdElkIC0gVGhlIElEIG9mIHRoZSBhcHAgb2JqZWN0IHRvIHJldHJpZXZlIHRoZSByZWNvcmQgaGlzdG9yeSBmb3IuXG4gICAgICogQHBhcmFtIHJlY29yZElkcyAtIEFuIGFycmF5IG9mIHJlY29yZCBJRHMgdG8gcmV0cmlldmUgdGhlIGhpc3RvcnkgZm9yLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tbW9uIEFQSSByZXNwb25zZSBjb250YWluaW5nIHRoZSByZWNvcmQgaGlzdG9yeS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZWNvcmRIaXN0b3J5KHBheWxvYWQ6IFJjb3JkSGlzdG9yeVBheWxvYWQpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XG4gICAgICAgIC8vIFVzZSB0aGUgZmlyc3RWYWx1ZUZyb20gUnhKcyBvcGVyYXRvciB0byB3YWl0IGZvciB0aGUgb2JzZXJ2YWJsZSB0byBjb21wbGV0ZVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgZ2V0SGlzdG9yeSBtZXRob2Qgb2YgdGhlIFRhYkdldFNlcnZpY2UgYW5kIHBhc3MgdGhlIGFwcCBvYmplY3QgSUQgYW5kIHJlY29yZCBJRHNcbiAgICAgICAgICAgIHRoaXMuX3RhYkdldFNlcnZpY2UuZ2V0SGlzdG9yeShwYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBvcnRzIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGltcG9ydC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGNvbW1vbiBBUEkgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGltcG9ydGluZyB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBpbXBvcnQocGF5bG9hZDogSW1wcm90RGF0YVBheWxvYWQpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgcG1qYXlJbXBvcnQgbWV0aG9kIG9mIHRoZSBUYWJHZXRTZXJ2aWNlIGFuZCBwYXNzIHRoZSBkYXRhIHRvIGltcG9ydFxuICAgICAgICAgICAgdGhpcy5fdGFiR2V0U2VydmljZS5wbWpheUltcG9ydChwYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59Il19
@@ -731,6 +731,88 @@ export class StoreService {
731
731
  this._sessionStorageService.clearSessionStorage();
732
732
  }
733
733
  }
734
+ /**
735
+ * Adds a screen context with the given key and data.
736
+ *
737
+ * The screen context is a collection of key-value pairs that are stored in session storage.
738
+ * The key is used to identify the screen context and the data is the value associated with the key.
739
+ *
740
+ * @param key The key for the screen context.
741
+ * @param data The data to store in the screen context.
742
+ */
743
+ addScreenContext(key, data) {
744
+ try {
745
+ if (!key || data == null)
746
+ return;
747
+ const screenContext = this.getSession(StorageConstants.screenContext) || {};
748
+ if (!screenContext[key]) {
749
+ // Initialize the key with an empty array if it doesn't exist
750
+ screenContext[key] = [];
751
+ }
752
+ // Add the data to the existing array
753
+ screenContext[key].push(data);
754
+ // Update the screen context with the new data
755
+ this.setSession(StorageConstants.screenContext, screenContext);
756
+ }
757
+ catch (error) {
758
+ console.error('Error adding screen context:', error);
759
+ }
760
+ }
761
+ /**
762
+ * Retrieves the latest screen context data associated with the given key.
763
+ *
764
+ * The screen context is a collection of key-value pairs that are stored in session storage.
765
+ * The key is used to identify the screen context and the data is the value associated with the key.
766
+ *
767
+ * @param key The key for the screen context.
768
+ * @returns The latest screen context data associated with the key, or null if the key is not found.
769
+ */
770
+ getScreenContext(key) {
771
+ try {
772
+ if (!key)
773
+ return null;
774
+ const screenContext = this.getSession(StorageConstants.screenContext);
775
+ if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {
776
+ return null;
777
+ }
778
+ // Return the latest screen context data (LIFO)
779
+ return screenContext[key][screenContext[key].length - 1];
780
+ }
781
+ catch (error) {
782
+ console.error('Error getting screen context:', error);
783
+ return null;
784
+ }
785
+ }
786
+ /**
787
+ * Removes the latest screen context data associated with the given key from session storage.
788
+ *
789
+ * The screen context is a collection of key-value pairs that are stored in session storage.
790
+ * The key is used to identify the screen context and the data is the value associated with the key.
791
+ *
792
+ * @param key The key for the screen context.
793
+ * @returns The removed screen context data, or null if the key is not found or the data is not present.
794
+ */
795
+ cleanScreenContext(key) {
796
+ try {
797
+ if (!key)
798
+ return null;
799
+ const screenContext = this.getSession(StorageConstants.screenContext);
800
+ if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {
801
+ return null;
802
+ }
803
+ const removedData = screenContext[key].pop(); // Remove latest (LIFO)
804
+ // Auto-cleanup: Remove key if array becomes empty
805
+ if (screenContext[key].length === 0) {
806
+ delete screenContext[key];
807
+ }
808
+ this.setSession(StorageConstants.screenContext, screenContext);
809
+ return removedData;
810
+ }
811
+ catch (error) {
812
+ console.error('Error cleaning screen context:', error);
813
+ return null;
814
+ }
815
+ }
734
816
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
735
817
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreService, providedIn: 'root' });
736
818
  }
@@ -740,4 +822,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
740
822
  providedIn: 'root'
741
823
  }]
742
824
  }] });
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi9zdG9yZS9zdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFDSixvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRS9GOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUSxDQUFDLEtBQW9CO1FBQzdCLHFFQUFxRTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDViw4Q0FBOEM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLDZEQUE2RDtRQUM3RCxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVE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LENBQUM7d0dBdHpCUSxZQUFZOzRHQUFaLFlBQVksY0FGVCxNQUFNOzs0RkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBTdG9yYWdlQ29uc3RhbnRzIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcbmltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS9zdG9yZS5lbnVtJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdG9yZVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IElEIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgZ2V0IHRlbmFudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdJbmZvKCk/LklkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGVuYW50IElEIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdGVuYW50IElEIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgdGVuYW50SWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIG9yZ2FuaXphdGlvbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHRlbmFudCBJRCB2YWx1ZVxuICAgICAgICBvcmdJbmZvLklkID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRPcmdJbmZvKG9yZ0luZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IG5hbWUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICovXG4gICAgZ2V0IHRlbmFudE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBvcmdhbml6YXRpb24gaW5mbyBmcm9tIHN0b3JhZ2VcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdGVuYW50IG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJuIG51bGxcbiAgICAgICAgcmV0dXJuIG9yZ0luZm8/Lk9yZ2FuaXphdGlvbk5hbWUgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0ZW5hbnQgbmFtZSBpbiB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHRlbmFudCBuYW1lIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgdGVuYW50TmFtZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgb3JnYW5pemF0aW9uIG5hbWUgdmFsdWVcbiAgICAgICAgb3JnSW5mby5Pcmdhbml6YXRpb25OYW1lID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRPcmdJbmZvKG9yZ0luZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBzdWJkb21haW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBzdWJkb21haW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBvcmdhbml6YXRpb24gaW5mbyBmcm9tIHN0b3JhZ2VcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgc3ViZG9tYWluIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybiBudWxsXG4gICAgICAgIHJldHVybiBvcmdJbmZvPy5TdWJkb21haW4gfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdWJkb21haW4gaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdWJkb21haW4gdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBzdWJkb21haW4odmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIG9yZ2FuaXphdGlvbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHN1YmRvbWFpbiB2YWx1ZVxuICAgICAgICBvcmdJbmZvLlN1YmRvbWFpbiA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGxvY2FsZSBzZXR0aW5ncyBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgbG9jYWxlIHNldHRpbmdzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IG9yZ0xvY2FsZVNldHRpbmdzKCk6IGFueSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBsb2NhbGUgc2V0dGluZ3MgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9cbiAgICAgICAgbGV0IGxvY2FsU2V0dGluZ3MgPSB0aGlzLmdldE9yZ0luZm8oKT8uTG9jYWxlU2V0dGluZ3M7XG5cbiAgICAgICAgLy8gSWYgdGhlIGxvY2FsZSBzZXR0aW5ncyBhcmUgYSBzdHJpbmcsIHBhcnNlIHRoZW0gYXMgSlNPTlxuICAgICAgICBpZih0eXBlb2YgbG9jYWxTZXR0aW5ncyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGxvY2FsU2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU2V0dGluZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBsb2NhbGUgc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIGxvY2FsU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbG9jYWxlIHNldHRpbmdzIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbG9jYWxlIHNldHRpbmdzIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgb3JnTG9jYWxlU2V0dGluZ3ModmFsdWU6IGFueSkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9jYWxlIHNldHRpbmdzIHZhbHVlXG4gICAgICAgIG9yZ0luZm8uTG9jYWxlU2V0dGluZ3MgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgSUQgZnJvbSB0aGUgYXBwIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGFwcCBJRCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IGFwcElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBJbmZvKCk/LklkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYXBwIElEIGluIHRoZSBhcHAgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYXBwIElEIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgYXBwSWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGFwcCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB0aGlzLmdldEFwcEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGFwcCBJRCB2YWx1ZVxuICAgICAgICBhcHBJbmZvLklkID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBhcHAgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGFwcCBuYW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgYXBwTmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm8sIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpPy5BcHBOYW1lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYXBwIG5hbWUgaW4gdGhlIGFwcCBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgbmFtZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IGFwcE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGFwcCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB0aGlzLmdldEFwcEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGFwcCBuYW1lIHZhbHVlXG4gICAgICAgIGFwcEluZm8uQXBwTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0QXBwSW5mbyhhcHBJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IElEIGZyb20gdGhlIGVudmlyb25tZW50IGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgZW52aXJvbm1lbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgZW52aXJvbm1lbnQgSUQgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKT8uSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbnZpcm9ubWVudCBJRCBpbiB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZW52aXJvbm1lbnQgSUQgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBlbnZpcm9ubWVudElkKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBlbnZpcm9ubWVudCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBlbnZpcm9ubWVudCBJRCB2YWx1ZVxuICAgICAgICBlbnZpcm9ubWVudEluZm8uSWQgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBlbnZpcm9ubWVudCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBlbnZpcm9ubWVudE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKT8uTmFtZSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVudmlyb25tZW50IG5hbWUgaW4gdGhlIGVudmlyb25tZW50IGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGVudmlyb25tZW50IG5hbWUgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBlbnZpcm9ubWVudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGVudmlyb25tZW50IGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmZvID0gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGVudmlyb25tZW50IG5hbWUgdmFsdWVcbiAgICAgICAgZW52aXJvbm1lbnRJbmZvLk5hbWUgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy50b2tlbiB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0b2tlbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0b2tlbiB2YWx1ZVxuICAgICAgICB0b2tlbkluZm8udG9rZW4gPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9rZW5JbmZvKHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlZnJlc2ggdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCByZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkluZm8oKT8ucmVmcmVzaFRva2VuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVmcmVzaCB0b2tlbiBpbiB0aGUgdG9rZW4gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcmVmcmVzaCB0b2tlbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHJlZnJlc2hUb2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgdG9rZW4gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmcmVzaCB0b2tlbiB2YWx1ZVxuICAgICAgICB0b2tlbkluZm8ucmVmcmVzaFRva2VuID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCB0b2tlbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgcmVmcmVzaFRva2VuRXhwaXJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8sXG4gICAgICAgIC8vIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnJlZnJlc2hUb2tlbkV4cGlyeSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgaW4gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCByZWZyZXNoVG9rZW5FeHBpcnkodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWVcbiAgICAgICAgdG9rZW5JbmZvLnJlZnJlc2hUb2tlbkV4cGlyeSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHN0YXRpYyB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0aWMgdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBzdGF0aWNUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8sXG4gICAgICAgIC8vIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnN0YXRpY1Rva2VuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhdGljIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdGF0aWMgdG9rZW4gdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBzdGF0aWNUb2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgdG9rZW4gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGljIHRva2VuIHZhbHVlXG4gICAgICAgIHRva2VuSW5mby5zdGF0aWNUb2tlbiA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgSUQgZnJvbSB0aGUgdXNlciBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSB1c2VyIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgdXNlcklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIElEIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbygpPy51c2VyPy5JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlcidzIHJvbGVzIGZyb20gdGhlIHVzZXIgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdXNlciByb2xlcyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCB1c2VyUm9sZXMoKTogYW55W10gfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgdXNlciByb2xlcyBmcm9tIHRoZSB1c2VyIGluZm8sIG9yIHJldHVybiBudWxsIGlmIHRoZXkgZG9uJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8oKT8udXNlcj8uUm9sZXMgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIncyB0ZWFtcyBmcm9tIHRoZSB1c2VyIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVzZXIgdGVhbXMgaWYgdGhleSBleGlzdCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgdXNlclRlYW1zKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHVzZXIgdGVhbXMgZnJvbSB0aGUgdXNlciBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiB0aGV5IGRvbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LlRlYW1zIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgdGVuYW50IElEIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICByZW1vdmVUZW5hbnRJZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnSWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB0ZW5hbnQgbmFtZSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcmVtb3ZlVGVuYW50TmFtZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW5hbnQgbmFtZSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnT3JnYW5pemF0aW9uTmFtZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzdWJkb21haW4gcHJvcGVydHkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlU3ViZG9tYWluKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnU3ViZG9tYWluJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIElEIGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIGFwcCBJRCBwcm9wZXJ0eSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24gc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlQXBwSWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUFwcEluZm8oJ0lkJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgYXBwIG5hbWUgcHJvcGVydHkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZUFwcE5hbWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUFwcEluZm8oJ0FwcE5hbWUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIElEIHByb3BlcnR5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlRW52aXJvbm1lbnRJZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oJ0lkJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgZW52aXJvbm1lbnQgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIE5hbWUgcHJvcGVydHkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVFbnZpcm9ubWVudE5hbWUoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZW52aXJvbm1lbnQgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oJ05hbWUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVRva2VuKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm9cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9rZW5JbmZvKCd0b2tlbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSByZWZyZXNoIHRva2VuIHByb3BlcnR5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzZXNzaW9uXG4gICAgICogc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVSZWZyZXNoVG9rZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygncmVmcmVzaFRva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVJlZnJlc2hUb2tlbkV4cGlyeSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSBmcm9tIHRoZSB0b2tlbiBpbmZvXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygncmVmcmVzaFRva2VuRXhwaXJ5Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgc3RhdGljIHRva2VuIHByb3BlcnR5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzZXNzaW9uXG4gICAgICogc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVTdGF0aWNUb2tlbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21Ub2tlbkluZm8oJ3N0YXRpY1Rva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21PcmdJbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcbiAgICAgICAgaWYgKG9yZ0luZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICAgICAgZGVsZXRlIG9yZ0luZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIGJhY2sgdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5zZXRPcmdJbmZvKG9yZ0luZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tQXBwSW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcHBJbmZvID0gdGhpcy5nZXRBcHBJbmZvKCk7XG4gICAgICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGRlbGV0ZSBhcHBJbmZvW2tleV07XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGFwcCBpbmZvcm1hdGlvbiBiYWNrIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tRW52aXJvbm1lbnRJbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCk7XG4gICAgICAgIGlmIChlbnZpcm9ubWVudEluZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICAgICAgICBkZWxldGUgZW52aXJvbm1lbnRJbmZvW2tleV07XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldEVudmlyb25tZW50SW5mbyhlbnZpcm9ubWVudEluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tVG9rZW5JbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCk7XG4gICAgICAgIGlmICh0b2tlbkluZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBkZWxldGUgdG9rZW5JbmZvW2tleV07XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRPcmdJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLm9yZ0luZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gdG8gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gb3JnSW5mbyAtIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0T3JnSW5mbyhvcmdJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcbiAgICAgICAgLy8gaWYgKG9yZ0luZm8uSWQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLlRlbmFudElkLCBvcmdJbmZvLklkKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMucmVtb3ZlU2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLlRlbmFudElkKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIFNhdmUgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMub3JnSW5mbywgb3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGFwcCBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldEFwcEluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5hcHBJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgYXBwIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYXBwSW5mbyAtIFRoZSBhcHAgaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0QXBwSW5mbyhhcHBJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcbiAgICAgICAgLy8gaWYgKGFwcEluZm8/LklkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5BcHBJZCwgYXBwSW5mby5JZCk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5BcHBJZCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyBpZiAoYXBwSW5mbz8uQXBwTmFtZSkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuYXBwbGljYXRpb25Db2RlLCBhcHBJbmZvLkFwcE5hbWUpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuYXBwbGljYXRpb25Db2RlKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIFNhdmUgdGhlIGFwcCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBTdG9yYWdlQ29uc3RhbnRzLmFwcEluZm8sIGFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIG9iamVjdCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0RW52aXJvbm1lbnRJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuZW52aXJvbm1lbnRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gdG8gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnZJbmZvIC0gVGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHNldEVudmlyb25tZW50SW5mbyhlbnZJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgZW52aXJvbm1lbnQgaW5mbyB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5lbnZpcm9ubWVudEluZm8sIGVudkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdG9rZW4gaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHRva2VuIGluZm9ybWF0aW9uIG9iamVjdCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0VG9rZW5JbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgdGhlIHRva2VuIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdG9rZW5JbmZvIC0gVGhlIHRva2VuIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHNldFRva2VuSW5mbyh0b2tlbkluZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0ZW1wIG9uY2UgcmVtb3ZlIGZyb20gZHJvcGRvd24sIHdlIGNhbiByZW1vdmUgdGhpc1xuICAgICAgICAvLyBpZiAodG9rZW5JbmZvPy50b2tlbikge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMudG9rZW4sIHRva2VuSW5mbz8udG9rZW4pO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMudG9rZW4pO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdG9rZW4gaW5mbyB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvLCB0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHVzZXIgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRVc2VySW5mbygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy51c2VySW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdXNlciBpbmZvcm1hdGlvbiBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB1c2VySW5mbyBUaGUgdXNlciBpbmZvcm1hdGlvbiB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRVc2VySW5mbyh1c2VySW5mbzogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFNhdmUgdGhlIHVzZXIgaW5mbyB0byBsb2NhbCBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvLCB1c2VySW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0TG9jYWwoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5LCBkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIGxvY2FsIHN0b3JhZ2UgYnkga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZSwgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldExvY2FsKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICovXG4gICAgcmVtb3ZlTG9jYWwoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBsb2NhbCBzdG9yYWdlIGRhdGEuXG4gICAgICovXG4gICAgY2xlYXJMb2NhbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBrZXktdmFsdWUgcGFpciBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0U2Vzc2lvbihrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFNhdmUgZGF0YSB0byBzZXNzaW9uIHN0b3JhZ2UgdW5kZXIgdGhlIHNwZWNpZmllZCBrZXlcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5LCBkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHNlc3Npb24gc3RvcmFnZSBieSBrZXkuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UsIG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRTZXNzaW9uKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmVTZXNzaW9uKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIHNlc3Npb24gc3RvcmFnZSBkYXRhLlxuICAgICAqL1xuICAgIGNsZWFyU2Vzc2lvbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5jbGVhclN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBhdXRoZW50aWNhdGlvbi1yZWxhdGVkIGRhdGEgZnJvbSBsb2NhbCBhbmQgc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIGFmdGVyIGEgdXNlciBsb2dzIG91dC5cbiAgICAgKi9cbiAgICBjbGVhckF1dGgoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB1c2VyIGluZm8gZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudXNlckluZm8pO1xuICAgICAgICAvLyBSZW1vdmUgdG9rZW4gaW5mbyBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJpYyBnZXR0ZXIgbWV0aG9kIGZvciByZXRyaWV2aW5nIGRhdGEgZnJvbSBlaXRoZXIgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gcmV0cmlldmUgZnJvbS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIHRvIHJldHJpZXZlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXRyaWV2ZWQgZGF0YSwgZGVzZXJpYWxpemVkIGZyb20gSlNPTiBpZiBpdCB3YXMgc3RvcmVkIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RnJvbVN0b3JhZ2Uoc3RvcmFnZTogU3RvcmFnZVR5cGUsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIHN0b3JhZ2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsXG4gICAgICAgICAgICA/IHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKGtleSlcbiAgICAgICAgICAgIDogdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25TdG9yYWdlKGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIGRhdGEgYXMgSlNPTlxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgOiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBjYW5ub3QgYmUgcGFyc2VkLCByZXR1cm4gaXQgYXMgaXNcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIHN0b3JlZC5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFRvU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RvcmFnZSB0eXBlIGlzIGxvY2FsXG4gICAgICAgIGlmIChzdG9yYWdlID09PSBTdG9yYWdlVHlwZS5Mb2NhbCkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBkYXRhIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKGtleSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uU3RvcmFnZShrZXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgZ2l2ZW4ga2V5IGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSBcbiAgICAgKiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgdHlwZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgdHlwZSBvZiBzdG9yYWdlIHRvIHJlbW92ZSBmcm9tIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25TdG9yYWdlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZVxuICAgICAqIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gY2xlYXIgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJTdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmIChzdG9yYWdlID09PSBTdG9yYWdlVHlwZS5Mb2NhbCkge1xuICAgICAgICAgICAgLy8gQ2xlYXIgbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5jbGVhckxvY2FsU3RvcmFnZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2xlYXIgc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uU3RvcmFnZVNlcnZpY2UuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
825
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi9zdG9yZS9zdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFDSixvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRS9GOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUSxDQUFDLEtBQW9CO1FBQzdCLHFFQUFxRTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDViw4Q0FBOEM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLDZEQUE2RDtRQUM3RCxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVE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TCxDQUFDO3dHQS80QlEsWUFBWTs0R0FBWixZQUFZLGNBRlQsTUFBTTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSwgU3RvcmFnZUNvbnN0YW50cyB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XG5pbXBvcnQgeyBTdG9yYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vc3RvcmUuZW51bSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RvcmVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KFNlc3Npb25TdG9yYWdlU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBJRCBmcm9tIHRoZSBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIGdldCB0ZW5hbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnSW5mbygpPy5JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRlbmFudCBJRCBpbiB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHRlbmFudCBJRCB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHRlbmFudElkKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0ZW5hbnQgSUQgdmFsdWVcbiAgICAgICAgb3JnSW5mby5JZCA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqL1xuICAgIGdldCB0ZW5hbnROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gZnJvbSBzdG9yYWdlXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHRlbmFudCBuYW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybiBudWxsXG4gICAgICAgIHJldHVybiBvcmdJbmZvPy5Pcmdhbml6YXRpb25OYW1lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGVuYW50IG5hbWUgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0ZW5hbnQgbmFtZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHRlbmFudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIG9yZ2FuaXphdGlvbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIG9yZ2FuaXphdGlvbiBuYW1lIHZhbHVlXG4gICAgICAgIG9yZ0luZm8uT3JnYW5pemF0aW9uTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViZG9tYWluIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgc3ViZG9tYWluKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gZnJvbSBzdG9yYWdlXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHN1YmRvbWFpbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSByZXR1cm4gbnVsbFxuICAgICAgICByZXR1cm4gb3JnSW5mbz8uU3ViZG9tYWluIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3ViZG9tYWluIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3ViZG9tYWluIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgc3ViZG9tYWluKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdWJkb21haW4gdmFsdWVcbiAgICAgICAgb3JnSW5mby5TdWJkb21haW4gPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBsb2NhbGUgc2V0dGluZ3MgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGxvY2FsZSBzZXR0aW5ncyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBvcmdMb2NhbGVTZXR0aW5ncygpOiBhbnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbG9jYWxlIHNldHRpbmdzIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvXG4gICAgICAgIGxldCBsb2NhbFNldHRpbmdzID0gdGhpcy5nZXRPcmdJbmZvKCk/LkxvY2FsZVNldHRpbmdzO1xuXG4gICAgICAgIC8vIElmIHRoZSBsb2NhbGUgc2V0dGluZ3MgYXJlIGEgc3RyaW5nLCBwYXJzZSB0aGVtIGFzIEpTT05cbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbFNldHRpbmdzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbG9jYWxTZXR0aW5ncyA9IEpTT04ucGFyc2UobG9jYWxTZXR0aW5ncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGxvY2FsZSBzZXR0aW5nc1xuICAgICAgICByZXR1cm4gbG9jYWxTZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb2NhbGUgc2V0dGluZ3MgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBsb2NhbGUgc2V0dGluZ3MgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBvcmdMb2NhbGVTZXR0aW5ncyh2YWx1ZTogYW55KSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbGUgc2V0dGluZ3MgdmFsdWVcbiAgICAgICAgb3JnSW5mby5Mb2NhbGVTZXR0aW5ncyA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFwcCBJRCBmcm9tIHRoZSBhcHAgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgYXBwSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcEluZm8oKT8uSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhcHAgSUQgaW4gdGhlIGFwcCBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgSUQgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBhcHBJZCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgYXBwIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuZ2V0QXBwSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwIElEIHZhbHVlXG4gICAgICAgIGFwcEluZm8uSWQgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGFwcCBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldEFwcEluZm8oYXBwSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgbmFtZSBmcm9tIHRoZSBhcHAgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBhcHBOYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBhcHAgbmFtZSBmcm9tIHRoZSBhcHAgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBJbmZvKCk/LkFwcE5hbWUgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhcHAgbmFtZSBpbiB0aGUgYXBwIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFwcCBuYW1lIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgYXBwTmFtZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgYXBwIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuZ2V0QXBwSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwIG5hbWUgdmFsdWVcbiAgICAgICAgYXBwSW5mby5BcHBOYW1lID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBhcHAgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZW52aXJvbm1lbnQgSUQgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgSUQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBlbnZpcm9ubWVudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudmlyb25tZW50SW5mbygpPy5JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVudmlyb25tZW50IElEIGluIHRoZSBlbnZpcm9ubWVudCBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBlbnZpcm9ubWVudCBJRCB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IGVudmlyb25tZW50SWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGVudmlyb25tZW50IGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmZvID0gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGVudmlyb25tZW50IElEIHZhbHVlXG4gICAgICAgIGVudmlyb25tZW50SW5mby5JZCA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudEluZm8oZW52aXJvbm1lbnRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgbmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IGVudmlyb25tZW50TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgZW52aXJvbm1lbnQgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudmlyb25tZW50SW5mbygpPy5OYW1lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZW52aXJvbm1lbnQgbmFtZSBpbiB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZW52aXJvbm1lbnQgbmFtZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IGVudmlyb25tZW50TmFtZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnQgaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBlbnZpcm9ubWVudEluZm8gPSB0aGlzLmdldEVudmlyb25tZW50SW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZW52aXJvbm1lbnQgbmFtZSB2YWx1ZVxuICAgICAgICBlbnZpcm9ubWVudEluZm8uTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudEluZm8oZW52aXJvbm1lbnRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHRva2VuIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgdG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8sIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnRva2VuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdG9rZW4gaW4gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHRva2VuIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgdG9rZW4odmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHRva2VuIHZhbHVlXG4gICAgICAgIHRva2VuSW5mby50b2tlbiA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVmcmVzaCB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSByZWZyZXNoIHRva2VuIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgcmVmcmVzaFRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZyZXNoIHRva2VuIHZhbHVlXG4gICAgICAgIHRva2VuSW5mby5yZWZyZXNoVG9rZW4gPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9rZW5JbmZvKHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCByZWZyZXNoVG9rZW5FeHBpcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgZnJvbSB0aGUgdG9rZW4gaW5mbyxcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkluZm8oKT8ucmVmcmVzaFRva2VuRXhwaXJ5IHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBpbiB0aGUgdG9rZW4gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHJlZnJlc2hUb2tlbkV4cGlyeSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgdG9rZW4gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZVxuICAgICAgICB0b2tlbkluZm8ucmVmcmVzaFRva2VuRXhwaXJ5ID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCB0b2tlbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHN0YXRpYyB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHN0YXRpY1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mbyxcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkluZm8oKT8uc3RhdGljVG9rZW4gfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0aWMgdG9rZW4gaW4gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0YXRpYyB0b2tlbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHN0YXRpY1Rva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0aWMgdG9rZW4gdmFsdWVcbiAgICAgICAgdG9rZW5JbmZvLnN0YXRpY1Rva2VuID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCB0b2tlbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBJRCBmcm9tIHRoZSB1c2VyIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHVzZXIgSUQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCB1c2VySWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHVzZXIgSUQgZnJvbSB0aGUgdXNlciBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LklkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB1c2VyJ3Mgcm9sZXMgZnJvbSB0aGUgdXNlciBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1c2VyIHJvbGVzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHVzZXJSb2xlcygpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIHJvbGVzIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgdGhleSBkb24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbygpPy51c2VyPy5Sb2xlcyB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlcidzIHRlYW1zIGZyb20gdGhlIHVzZXIgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdXNlciB0ZWFtcyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCB1c2VyVGVhbXMoKTogYW55W10gfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgdXNlciB0ZWFtcyBmcm9tIHRoZSB1c2VyIGluZm8sIG9yIHJldHVybiBudWxsIGlmIHRoZXkgZG9uJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8oKT8udXNlcj8uVGVhbXMgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB0ZW5hbnQgSUQgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHJlbW92ZVRlbmFudElkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdJZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICByZW1vdmVUZW5hbnROYW1lKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdPcmdhbml6YXRpb25OYW1lJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHN1YmRvbWFpbiBwcm9wZXJ0eSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVTdWJkb21haW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdTdWJkb21haW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBhcHAgSUQgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgYXBwIElEIHByb3BlcnR5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVBcHBJZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tQXBwSW5mbygnSWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBhcHAgbmFtZSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBhcHAgbmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24gc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlQXBwTmFtZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tQXBwSW5mbygnQXBwTmFtZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGVudmlyb25tZW50IElEIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgSUQgcHJvcGVydHkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVFbnZpcm9ubWVudElkKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGVudmlyb25tZW50IElEIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbygnSWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBlbnZpcm9ubWVudCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgTmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICAgICAqIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZUVudmlyb25tZW50TmFtZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbnZpcm9ubWVudCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbygnTmFtZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSB0b2tlbiBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlVG9rZW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21Ub2tlbkluZm8oJ3Rva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVJlZnJlc2hUb2tlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9rZW5JbmZvKCdyZWZyZXNoVG9rZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlUmVmcmVzaFRva2VuRXhwaXJ5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IGZyb20gdGhlIHRva2VuIGluZm9cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9rZW5JbmZvKCdyZWZyZXNoVG9rZW5FeHBpcnknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzdGF0aWMgdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVN0YXRpY1Rva2VuKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHN0YXRpYyB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygnc3RhdGljVG9rZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlRnJvbU9yZ0luZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpO1xuICAgICAgICBpZiAob3JnSW5mbykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBkZWxldGUgb3JnSW5mb1trZXldO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYmFjayB0byBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzZXNzaW9uXG4gICAgICogc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21BcHBJbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB0aGlzLmdldEFwcEluZm8oKTtcbiAgICAgICAgaWYgKGFwcEluZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvblxuICAgICAgICAgICAgZGVsZXRlIGFwcEluZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldEFwcEluZm8oYXBwSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmZvID0gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKTtcbiAgICAgICAgaWYgKGVudmlyb25tZW50SW5mbykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGRlbGV0ZSBlbnZpcm9ubWVudEluZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21Ub2tlbkluZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKTtcbiAgICAgICAgaWYgKHRva2VuSW5mbykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGRlbGV0ZSB0b2tlbkluZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuc2V0VG9rZW5JbmZvKHRva2VuSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldE9yZ0luZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMub3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0byBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBvcmdJbmZvIC0gVGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRPcmdJbmZvKG9yZ0luZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0ZW1wIG9uY2UgcmVtb3ZlIGZyb20gZHJvcGRvd24sIHdlIGNhbiByZW1vdmUgdGhpc1xuICAgICAgICAvLyBpZiAob3JnSW5mby5JZCkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuVGVuYW50SWQsIG9yZ0luZm8uSWQpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuVGVuYW50SWQpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy5vcmdJbmZvLCBvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFwcCBpbmZvcm1hdGlvbiBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIGluZm9ybWF0aW9uIG9iamVjdCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0QXBwSW5mbygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBTdG9yYWdlQ29uc3RhbnRzLmFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBhcHAgaW5mb3JtYXRpb24gdG8gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBhcHBJbmZvIC0gVGhlIGFwcCBpbmZvcm1hdGlvbiB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRBcHBJbmZvKGFwcEluZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0ZW1wIG9uY2UgcmVtb3ZlIGZyb20gZHJvcGRvd24sIHdlIGNhbiByZW1vdmUgdGhpc1xuICAgICAgICAvLyBpZiAoYXBwSW5mbz8uSWQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLkFwcElkLCBhcHBJbmZvLklkKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMucmVtb3ZlU2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLkFwcElkKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIGlmIChhcHBJbmZvPy5BcHBOYW1lKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5hcHBsaWNhdGlvbkNvZGUsIGFwcEluZm8uQXBwTmFtZSk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5hcHBsaWNhdGlvbkNvZGUpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgYXBwIGluZm8gdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbywgYXBwSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRFbnZpcm9ubWVudEluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5lbnZpcm9ubWVudEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiB0byBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGVudkluZm8gLSBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0RW52aXJvbm1lbnRJbmZvKGVudkluZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBTYXZlIHRoZSBlbnZpcm9ubWVudCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBTdG9yYWdlQ29uc3RhbnRzLmVudmlyb25tZW50SW5mbywgZW52SW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgdG9rZW4gaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRUb2tlbkluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgdG9rZW4gaW5mb3JtYXRpb24gdG8gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB0b2tlbkluZm8gLSBUaGUgdG9rZW4gaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0VG9rZW5JbmZvKHRva2VuSW5mbzogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIHRlbXAgb25jZSByZW1vdmUgZnJvbSBkcm9wZG93biwgd2UgY2FuIHJlbW92ZSB0aGlzXG4gICAgICAgIC8vIGlmICh0b2tlbkluZm8/LnRva2VuKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy50b2tlbiwgdG9rZW5JbmZvPy50b2tlbik7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy50b2tlbik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyBTYXZlIHRoZSB0b2tlbiBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy50b2tlbkluZm8sIHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB1c2VyIGluZm9ybWF0aW9uIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgdXNlciBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldFVzZXJJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB1c2VyIGluZm9ybWF0aW9uIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIHVzZXJJbmZvIFRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHNldFVzZXJJbmZvKHVzZXJJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbmZvIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudXNlckluZm8sIHVzZXJJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEga2V5LXZhbHVlIHBhaXIgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSB2YWx1ZSB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRMb2NhbChrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gbG9jYWwgc3RvcmFnZSBieSBrZXkuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0TG9jYWwoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmVMb2NhbChrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGxvY2FsIHN0b3JhZ2UgZGF0YS5cbiAgICAgKi9cbiAgICBjbGVhckxvY2FsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSB2YWx1ZSB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRTZXNzaW9uKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU2F2ZSBkYXRhIHRvIHNlc3Npb24gc3RvcmFnZSB1bmRlciB0aGUgc3BlY2lmaWVkIGtleVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gc2Vzc2lvbiBzdG9yYWdlIGJ5IGtleS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZXRyaWV2ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZSwgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldFNlc3Npb24oa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqL1xuICAgIHJlbW92ZVNlc3Npb24oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgc2Vzc2lvbiBzdG9yYWdlIGRhdGEuXG4gICAgICovXG4gICAgY2xlYXJTZXNzaW9uKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uLXJlbGF0ZWQgZGF0YSBmcm9tIGxvY2FsIGFuZCBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgYWZ0ZXIgYSB1c2VyIGxvZ3Mgb3V0LlxuICAgICAqL1xuICAgIGNsZWFyQXV0aCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHVzZXIgaW5mbyBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy51c2VySW5mbyk7XG4gICAgICAgIC8vIFJlbW92ZSB0b2tlbiBpbmZvIGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmljIGdldHRlciBtZXRob2QgZm9yIHJldHJpZXZpbmcgZGF0YSBmcm9tIGVpdGhlciBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byByZXRyaWV2ZSBmcm9tLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGEgdG8gcmV0cmlldmUuXG4gICAgICogQHJldHVybnMgVGhlIHJldHJpZXZlZCBkYXRhLCBkZXNlcmlhbGl6ZWQgZnJvbSBKU09OIGlmIGl0IHdhcyBzdG9yZWQgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRGcm9tU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgc3RvcmFnZVxuICAgICAgICBjb25zdCBkYXRhID0gc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWxcbiAgICAgICAgICAgID8gdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5nZXRMb2NhbFN0b3JhZ2Uoa2V5KVxuICAgICAgICAgICAgOiB0aGlzLl9zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvblN0b3JhZ2Uoa2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSB0aGUgZGF0YSBhcyBKU09OXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGNhbm5vdCBiZSBwYXJzZWQsIHJldHVybiBpdCBhcyBpc1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byB1c2UgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB1bmRlciB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgc3RvcmVkLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0VG9TdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdG9yYWdlIHR5cGUgaXMgbG9jYWxcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIGRhdGEgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5zZXRMb2NhbFN0b3JhZ2Uoa2V5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSBkYXRhIGluIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25TdG9yYWdlKGtleSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgdHlwZS5cbiAgICAgKiBcbiAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIHRoZSBnaXZlbiBrZXkgZnJvbSBlaXRoZXIgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlIFxuICAgICAqIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gcmVtb3ZlIGZyb20gKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21TdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWwpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvblN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgY2xlYXJzIGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBlaXRoZXIgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlXG4gICAgICogYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byBjbGVhciAobG9jYWwgb3Igc2Vzc2lvbikuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhclN0b3JhZ2Uoc3RvcmFnZTogU3RvcmFnZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XG4gICAgICAgICAgICAvLyBDbGVhciBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLmNsZWFyTG9jYWxTdG9yYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDbGVhciBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdG9yYWdlU2VydmljZS5jbGVhclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgc2NyZWVuIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBkYXRhLlxuICAgICAqIFxuICAgICAqIFRoZSBzY3JlZW4gY29udGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogVGhlIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JlZW4gY29udGV4dCBhbmQgdGhlIGRhdGEgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHNjcmVlbiBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlIGluIHRoZSBzY3JlZW4gY29udGV4dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU2NyZWVuQ29udGV4dChrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWtleSB8fCBkYXRhID09IG51bGwpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgc2NyZWVuQ29udGV4dCA9IHRoaXMuZ2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQpIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAoIXNjcmVlbkNvbnRleHRba2V5XSkge1xuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGtleSB3aXRoIGFuIGVtcHR5IGFycmF5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICBzY3JlZW5Db250ZXh0W2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBkYXRhIHRvIHRoZSBleGlzdGluZyBhcnJheVxuICAgICAgICAgICAgc2NyZWVuQ29udGV4dFtrZXldLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNjcmVlbiBjb250ZXh0IHdpdGggdGhlIG5ldyBkYXRhXG4gICAgICAgICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0LCBzY3JlZW5Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBzY3JlZW4gY29udGV4dDonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGxhdGVzdCBzY3JlZW4gY29udGV4dCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgICAqIFxuICAgICAqIFRoZSBzY3JlZW4gY29udGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogVGhlIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JlZW4gY29udGV4dCBhbmQgdGhlIGRhdGEgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHNjcmVlbiBjb250ZXh0LlxuICAgICAqIEByZXR1cm5zIFRoZSBsYXRlc3Qgc2NyZWVuIGNvbnRleHQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbCBpZiB0aGUga2V5IGlzIG5vdCBmb3VuZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2NyZWVuQ29udGV4dChrZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JlZW5Db250ZXh0ID0gdGhpcy5nZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuc2NyZWVuQ29udGV4dCk7XG4gICAgICAgICAgICBpZiAoIXNjcmVlbkNvbnRleHQgfHwgIXNjcmVlbkNvbnRleHRba2V5XSB8fCBzY3JlZW5Db250ZXh0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbGF0ZXN0IHNjcmVlbiBjb250ZXh0IGRhdGEgKExJRk8pXG4gICAgICAgICAgICByZXR1cm4gc2NyZWVuQ29udGV4dFtrZXldW3NjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgc2NyZWVuIGNvbnRleHQ6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBsYXRlc3Qgc2NyZWVuIGNvbnRleHQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleSBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBUaGUgc2NyZWVuIGNvbnRleHQgaXMgYSBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzdG9yZWQgaW4gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFRoZSBrZXkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2NyZWVuIGNvbnRleHQgYW5kIHRoZSBkYXRhIGlzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSBzY3JlZW4gY29udGV4dC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBzY3JlZW4gY29udGV4dCBkYXRhLCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kIG9yIHRoZSBkYXRhIGlzIG5vdCBwcmVzZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhblNjcmVlbkNvbnRleHQoa2V5OiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcbiAgICAgICAgdHJ5IHsgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgc2NyZWVuQ29udGV4dCA9IHRoaXMuZ2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXNjcmVlbkNvbnRleHQgfHwgIXNjcmVlbkNvbnRleHRba2V5XSB8fCBzY3JlZW5Db250ZXh0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWREYXRhID0gc2NyZWVuQ29udGV4dFtrZXldLnBvcCgpOyAvLyBSZW1vdmUgbGF0ZXN0IChMSUZPKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBdXRvLWNsZWFudXA6IFJlbW92ZSBrZXkgaWYgYXJyYXkgYmVjb21lcyBlbXB0eVxuICAgICAgICAgICAgaWYgKHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NyZWVuQ29udGV4dFtrZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0LCBzY3JlZW5Db250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVkRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsZWFuaW5nIHNjcmVlbiBjb250ZXh0OicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
@@ -1095,11 +1095,11 @@ class CrudService {
1095
1095
  * @param parameters - Optional parameters to pass to the select query.
1096
1096
  * @returns A promise that resolves to a common API response containing the result of executing the select query.
1097
1097
  */
1098
- async executeSelectQuery(selectQueryId, parameters) {
1098
+ async executeSelectQuery(selectQueryId, parameters, additionalConfig) {
1099
1099
  // Use the firstValueFrom RxJs operator to wait for the observable to complete
1100
1100
  const response = await firstValueFrom(
1101
1101
  // Call the executeSelectQueryById method of the TabGetService and pass the ID of the select query and parameters
1102
- this._tabGetService.executeSelectQueryById(selectQueryId, parameters));
1102
+ this._tabGetService.executeSelectQueryById(selectQueryId, parameters, additionalConfig));
1103
1103
  // Return the response from the server
1104
1104
  return response;
1105
1105
  }
@@ -1960,6 +1960,88 @@ class StoreService {
1960
1960
  this._sessionStorageService.clearSessionStorage();
1961
1961
  }
1962
1962
  }
1963
+ /**
1964
+ * Adds a screen context with the given key and data.
1965
+ *
1966
+ * The screen context is a collection of key-value pairs that are stored in session storage.
1967
+ * The key is used to identify the screen context and the data is the value associated with the key.
1968
+ *
1969
+ * @param key The key for the screen context.
1970
+ * @param data The data to store in the screen context.
1971
+ */
1972
+ addScreenContext(key, data) {
1973
+ try {
1974
+ if (!key || data == null)
1975
+ return;
1976
+ const screenContext = this.getSession(StorageConstants.screenContext) || {};
1977
+ if (!screenContext[key]) {
1978
+ // Initialize the key with an empty array if it doesn't exist
1979
+ screenContext[key] = [];
1980
+ }
1981
+ // Add the data to the existing array
1982
+ screenContext[key].push(data);
1983
+ // Update the screen context with the new data
1984
+ this.setSession(StorageConstants.screenContext, screenContext);
1985
+ }
1986
+ catch (error) {
1987
+ console.error('Error adding screen context:', error);
1988
+ }
1989
+ }
1990
+ /**
1991
+ * Retrieves the latest screen context data associated with the given key.
1992
+ *
1993
+ * The screen context is a collection of key-value pairs that are stored in session storage.
1994
+ * The key is used to identify the screen context and the data is the value associated with the key.
1995
+ *
1996
+ * @param key The key for the screen context.
1997
+ * @returns The latest screen context data associated with the key, or null if the key is not found.
1998
+ */
1999
+ getScreenContext(key) {
2000
+ try {
2001
+ if (!key)
2002
+ return null;
2003
+ const screenContext = this.getSession(StorageConstants.screenContext);
2004
+ if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {
2005
+ return null;
2006
+ }
2007
+ // Return the latest screen context data (LIFO)
2008
+ return screenContext[key][screenContext[key].length - 1];
2009
+ }
2010
+ catch (error) {
2011
+ console.error('Error getting screen context:', error);
2012
+ return null;
2013
+ }
2014
+ }
2015
+ /**
2016
+ * Removes the latest screen context data associated with the given key from session storage.
2017
+ *
2018
+ * The screen context is a collection of key-value pairs that are stored in session storage.
2019
+ * The key is used to identify the screen context and the data is the value associated with the key.
2020
+ *
2021
+ * @param key The key for the screen context.
2022
+ * @returns The removed screen context data, or null if the key is not found or the data is not present.
2023
+ */
2024
+ cleanScreenContext(key) {
2025
+ try {
2026
+ if (!key)
2027
+ return null;
2028
+ const screenContext = this.getSession(StorageConstants.screenContext);
2029
+ if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {
2030
+ return null;
2031
+ }
2032
+ const removedData = screenContext[key].pop(); // Remove latest (LIFO)
2033
+ // Auto-cleanup: Remove key if array becomes empty
2034
+ if (screenContext[key].length === 0) {
2035
+ delete screenContext[key];
2036
+ }
2037
+ this.setSession(StorageConstants.screenContext, screenContext);
2038
+ return removedData;
2039
+ }
2040
+ catch (error) {
2041
+ console.error('Error cleaning screen context:', error);
2042
+ return null;
2043
+ }
2044
+ }
1963
2045
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1964
2046
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreService, providedIn: 'root' });
1965
2047
  }