@aws-cdk/toolkit-lib 1.16.1 → 1.18.0

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.
@@ -181,7 +181,8 @@ class FullCloudFormationDeployment {
181
181
  const changeSetName = deploymentMethod.changeSetName ?? 'cdk-deploy-change-set';
182
182
  const execute = deploymentMethod.execute ?? true;
183
183
  const importExistingResources = deploymentMethod.importExistingResources ?? false;
184
- const changeSetDescription = await this.createChangeSet(changeSetName, execute, importExistingResources);
184
+ const revertDrift = deploymentMethod.revertDrift ?? false;
185
+ const changeSetDescription = await this.createChangeSet(changeSetName, execute, importExistingResources, revertDrift);
185
186
  await this.updateTerminationProtection();
186
187
  if ((0, cfn_api_1.changeSetHasNoChanges)(changeSetDescription)) {
187
188
  await this.ioHelper.defaults.debug((0, util_1.format)('No changes are to be performed on %s.', this.stackName));
@@ -232,7 +233,7 @@ class FullCloudFormationDeployment {
232
233
  }
233
234
  return this.executeChangeSet(changeSetDescription);
234
235
  }
235
- async createChangeSet(changeSetName, willExecute, importExistingResources) {
236
+ async createChangeSet(changeSetName, willExecute, importExistingResources, revertDrift) {
236
237
  await this.cleanupOldChangeset(changeSetName);
237
238
  await this.ioHelper.defaults.debug(`Attempting to create ChangeSet with name ${changeSetName} to ${this.verb} stack ${this.stackName}`);
238
239
  await this.ioHelper.defaults.info((0, util_1.format)('%s: creating CloudFormation changeset...', chalk.bold(this.stackName)));
@@ -244,6 +245,7 @@ class FullCloudFormationDeployment {
244
245
  Description: `CDK Changeset for execution ${this.uuid}`,
245
246
  ClientToken: `create${this.uuid}`,
246
247
  ImportExistingResources: importExistingResources,
248
+ DeploymentMode: revertDrift ? 'REVERT_DRIFT' : undefined,
247
249
  ...this.commonPrepareOptions(),
248
250
  });
249
251
  await this.ioHelper.defaults.debug((0, util_1.format)('Initiated creation of changeset: %s; waiting for it to finish creating...', changeSet.Id));
@@ -447,6 +449,12 @@ async function canSkipDeploy(deployStackOptions, cloudFormationStack, parameterC
447
449
  await ioHelper.defaults.debug(`${deployName}: --no-execute, always creating change set`);
448
450
  return false;
449
451
  }
452
+ // Drift-aware
453
+ if (deployStackOptions.deploymentMethod?.method === 'change-set' &&
454
+ deployStackOptions.deploymentMethod.revertDrift) {
455
+ await ioHelper.defaults.debug(`${deployName}: --revert-drift, always creating change set`);
456
+ return false;
457
+ }
450
458
  // No existing stack
451
459
  if (!cloudFormationStack.exists) {
452
460
  await ioHelper.defaults.debug(`${deployName}: no existing stack`);
@@ -517,4 +525,4 @@ function hasReplacement(cs) {
517
525
  return a === 'ReplaceAndDelete' || a === 'ReplaceAndRetain' || a === 'ReplaceAndSnapshot';
518
526
  });
519
527
  }
520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ05BLGtDQTBLQztBQTRVRCxvQ0ErQkM7QUFydUJELCtCQUE4QjtBQVU5QiwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLHFFQUFnRTtBQUNoRSx5REFBbUQ7QUFDbkQscUNBQXVEO0FBS3ZELHVDQU1tQjtBQUNuQixxQ0FBcUU7QUFHckUsK0RBQTJEO0FBQzNELHFDQUFnRDtBQUdoRCxzREFBbUc7QUFFbkcsZ0RBQThEO0FBQzlELDhDQUFnSDtBQUNoSCx3RUFBc0U7QUFHdEUsa0RBQXVEO0FBQ3ZELHlEQUE2RDtBQXVLdEQsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUEyQixFQUFFLFFBQWtCO0lBQy9FLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0lBRTdDLElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzVFLHVHQUF1RztJQUN2Ryx5REFBeUQ7SUFDekQsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxRQUFRLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixLQUFLLG9CQUFXLENBQUMsWUFBWTtnQkFDM0IsZ0JBQWdCLEdBQUc7b0JBQ2pCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixVQUFVLEVBQUUsT0FBTyxDQUFDLHdCQUF3QjtpQkFDN0MsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxvQkFBVyxDQUFDLFNBQVM7Z0JBQ3hCLGdCQUFnQixHQUFHO29CQUNqQixNQUFNLEVBQUUsU0FBUztvQkFDakIsVUFBVSxFQUFFLE9BQU8sQ0FBQyx3QkFB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QyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUUsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLENBQVEsRUFBRSxDQUFRO0lBQ3JDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsRUFBa0M7SUFDeEQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxLQUFLLGtCQUFrQixJQUFJLENBQUMsS0FBSyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssb0JBQW9CLENBQUM7SUFDNUYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSB7XG4gIENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIFRhZyxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0QnVpbGRlciB9IGZyb20gJy4vYXNzZXQtbWFuaWZlc3QtYnVpbGRlcic7XG5pbXBvcnQgeyBwdWJsaXNoQXNzZXRzIH0gZnJvbSAnLi9hc3NldC1wdWJsaXNoaW5nJztcbmltcG9ydCB7IGFkZE1ldGFkYXRhQXNzZXRzVG9NYW5pZmVzdCB9IGZyb20gJy4vYXNzZXRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFyYW1ldGVyVmFsdWVzLFxuICBQYXJhbWV0ZXJDaGFuZ2VzLFxufSBmcm9tICcuL2Nmbi1hcGknO1xuaW1wb3J0IHtcbiAgY2hhbmdlU2V0SGFzTm9DaGFuZ2VzLFxuICBUZW1wbGF0ZVBhcmFtZXRlcnMsXG4gIHdhaXRGb3JDaGFuZ2VTZXQsXG4gIHdhaXRGb3JTdGFja0RlcGxveSxcbiAgd2FpdEZvclN0YWNrRGVsZXRlLFxufSBmcm9tICcuL2Nmbi1hcGknO1xuaW1wb3J0IHsgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcgfSBmcm9tICcuL2NoZWNrcyc7XG5pbXBvcnQgdHlwZSB7IERlcGxveVN0YWNrUmVzdWx0LCBTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuL2RlcGxveW1lbnQtcmVzdWx0JztcbmltcG9ydCB0eXBlIHsgQ2hhbmdlU2V0RGVwbG95bWVudCwgRGVwbG95bWVudE1ldGhvZCwgRGlyZWN0RGVwbG95bWVudCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU0RLLCBTZGtQcm92aWRlciwgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlQm9keVBhcmFtZXRlciB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IG1ha2VCb2R5UGFyYW1ldGVyLCBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uLCBDbG91ZEZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcywgU3RyaW5nV2l0aG91dFBsYWNlaG9sZGVycyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsIEhvdHN3YXBNb2RlLCBJQ09OLCBjcmVhdGVIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMgfSBmcm9tICcuLi9ob3Rzd2FwL2NvbW1vbic7XG5pbXBvcnQgeyB0cnlIb3Rzd2FwRGVwbG95bWVudCB9IGZyb20gJy4uL2hvdHN3YXAvaG90c3dhcC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlc1RvSW1wb3J0IH0gZnJvbSAnLi4vcmVzb3VyY2UtaW1wb3J0JztcbmltcG9ydCB7IFN0YWNrQWN0aXZpdHlNb25pdG9yIH0gZnJvbSAnLi4vc3RhY2stZXZlbnRzJztcbmltcG9ydCB7IEVhcmx5VmFsaWRhdGlvblJlcG9ydGVyIH0gZnJvbSAnLi9lYXJseS12YWxpZGF0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lTdGFja09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIGJlIGRlcGxveWVkXG4gICAqL1xuICByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdG8gZGVwbG95IHRoaXMgc3RhY2sgaW5cbiAgICpcbiAgICogVGhlIGVudmlyb25tZW50IG9uIHRoZSBzdGFjayBhcnRpZmFjdCBtYXkgYmUgdW5yZXNvbHZlZCwgdGhpcyBvbmVcbiAgICogbXVzdCBiZSByZXNvbHZlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgU0RLIHRvIHVzZSBmb3IgZGVwbG95aW5nIHRoZSBzdGFja1xuICAgKlxuICAgKiBTaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHdpdGggdGhlIGNvcnJlY3Qgcm9sZSB3aXRoIHdoaWNoXG4gICAqIHN0YWNrIG9wZXJhdGlvbnMgc2hvdWxkIGJlIHBlcmZvcm1lZC5cbiAgICovXG4gIHJlYWRvbmx5IHNkazogU0RLO1xuXG4gIC8qKlxuICAgKiBTREsgcHJvdmlkZXIgKHNlZWRlZCB3aXRoIGRlZmF1bHQgY3JlZGVudGlhbHMpXG4gICAqXG4gICAqIFdpbGwgYmUgdXNlZCB0bzpcbiAgICpcbiAgICogLSBQdWJsaXNoIGFzc2V0cywgZWl0aGVyIGxlZ2FjeSBhc3NldHMgb3IgbGFyZ2UgQ0ZOIHRlbXBsYXRlc1xuICAgKiAgIHRoYXQgYXJlbid0IHRoZW1zZWx2ZXMgYXNzZXRzIGZyb20gYSBtYW5pZmVzdC4gKE5lZWRzIGFuIFNES1xuICAgKiAgIFByb3ZpZGVyIGJlY2F1c2UgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlIGlzIGRlY2xhcmVkIGFzIHBhcnRcbiAgICogICBvZiB0aGUgYXNzZXQpLlxuICAgKiAtIEhvdHN3YXBcbiAgICovXG4gIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGJvb3RzdHJhcCBzdGFjayBmb3VuZCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBlbnZSZXNvdXJjZXM6IEVudmlyb25tZW50UmVzb3VyY2VzO1xuXG4gIC8qKlxuICAgKiBSb2xlIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gdG8gZXhlY3V0ZSB0aGUgY2hhbmdlIHNldFxuICAgKlxuICAgKiBUbyBvYnRhaW4gYSBgU3RyaW5nV2l0aG91dFBsYWNlaG9sZGVyc2AsIHJ1biBhIHJlZ3VsYXJcbiAgICogc3RyaW5nIHRob3VnaCBgVGFyZ2V0RW52aXJvbm1lbnQucmVwbGFjZVBsYWNlaG9sZGVyc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXhlY3V0aW9uIHJvbGU7IENsb3VkRm9ybWF0aW9uIGVpdGhlciB1c2VzIHRoZSByb2xlIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhlIHN0YWNrLCBvciBvdGhlcndpc2UgdXNlcyBjdXJyZW50IEFXUyBjcmVkZW50aWFsc1xuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IFN0cmluZ1dpdGhvdXRQbGFjZWhvbGRlcnM7XG5cbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiBBUk5zIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gdG8gbm90aWZ5IHdoZW4gdGhlIGNoYW5nZSBzZXQgaGFzIGNvbXBsZXRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSB0byBkZXBsb3kgdGhlIHN0YWNrIHVuZGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTmFtZSBmcm9tIGFzc2VtYmx5XG4gICAqL1xuICByZWFkb25seSBkZXBsb3lOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFzc2V0IElEcyB3aGljaCBzaG91bGRuJ3QgYmUgYnVpbHRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBCdWlsZCBhbGwgYXNzZXRzXG4gICAqL1xuICByZWFkb25seSByZXVzZUFzc2V0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUYWdzIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gdG8gYWRkIHRvIHN0YWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGF0IGRlcGxveW1lbnQgbWV0aG9kIHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENoYW5nZSBzZXQgd2l0aCBkZWZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudE1ldGhvZD86IERlcGxveW1lbnRNZXRob2Q7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2xsZWN0aW9uIG9mIGV4dHJhIHBhcmFtZXRlcnNcbiAgICogKGluIGFkZGl0aW9uIHRvIHRob3NlIHVzZWQgZm9yIGFzc2V0cylcbiAgICogdG8gcGFzcyB0byB0aGUgZGVwbG95ZWQgdGVtcGxhdGUuXG4gICAqIE5vdGUgdGhhdCBwYXJhbWV0ZXJzIHdpdGggYHVuZGVmaW5lZGAgb3IgZW1wdHkgdmFsdWVzIHdpbGwgYmUgaWdub3JlZCxcbiAgICogYW5kIG5vdCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogVXNlIHByZXZpb3VzIHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBJZiBub3Qgc2V0LCBhbGwgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlcnkgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHVzZVByZXZpb3VzUGFyYW1ldGVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGxveSBldmVuIGlmIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZSBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSB3ZSBhcmUgYWJvdXQgdG8gZGVwbG95LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2VEZXBsb3ltZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUm9sbGJhY2sgZmFpbGVkIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwZXJmb3JtIGEgJ2hvdHN3YXAnIGRlcGxveW1lbnQuXG4gICAqIEEgJ2hvdHN3YXAnIGRlcGxveW1lbnQgd2lsbCBhdHRlbXB0IHRvIHNob3J0LWNpcmN1aXQgQ2xvdWRGb3JtYXRpb25cbiAgICogYW5kIHVwZGF0ZSB0aGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGxpa2UgTGFtYmRhIGZ1bmN0aW9ucyBkaXJlY3RseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UYCBmb3IgcmVndWxhciBkZXBsb3ltZW50cywgYEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWWAgZm9yICd3YXRjaCcgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgIFVzZSAnZGVwbG95bWVudE1ldGhvZCcgaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgaG90c3dhcD86IEhvdHN3YXBNb2RlO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBwcm9wZXJ0aWVzIHRoYXQgY29uZmlndXJlIGhvdHN3YXAgYmVoYXZpb3JcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlICdkZXBsb3ltZW50TWV0aG9kJyBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM/OiBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBleHRyYSBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHBlcmZvcm1pbmcgQVdTIFNESyBjYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3RoaW5nIGV4dHJhIGlzIGFwcGVuZGVkIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlclxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFVc2VyQWdlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgY2hhbmdlIHNldCBvZiB0eXBlIElNUE9SVCB3aWxsIGJlIGNyZWF0ZWQsIGFuZCByZXNvdXJjZXNUb0ltcG9ydFxuICAgKiBwYXNzZWQgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB1c2UgdGhpcyBnaXZlbiB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHRoZSBzdG9yZWQgb25lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHRoZSBzdG9yZWQgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlVGVtcGxhdGU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYnVpbGQvcHVibGlzaCBhc3NldHMgaW4gcGFyYWxsZWxcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSBUbyByZW1haW4gYmFja3dhcmQgY29tcGF0aWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0UGFyYWxsZWxpc20/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zLCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gIGNvbnN0IHN0YWNrQXJ0aWZhY3QgPSBvcHRpb25zLnN0YWNrO1xuICBjb25zdCBzdGFja0VudiA9IG9wdGlvbnMucmVzb2x2ZWRFbnZpcm9ubWVudDtcblxuICBsZXQgZGVwbG95bWVudE1ldGhvZCA9IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZCA/PyB7IG1ldGhvZDogJ2NoYW5nZS1zZXQnIH07XG4gIC8vIEhvbm9yIHRoZSBvbGQgaG90c3dhcCBvcHRpb24gYmVjYXVzZSB0aGlzIEFQSSBpcyBleHBvcnRlZCBmcm9tIHRoZSBDTEkgYXMgcGFydCBvZiB0aGUgbGVnYWN5IGV4cG9ydHNcbiAgLy8gQFRPRE8gcmVtb3ZlIHdoZW4gd2UgZG9uJ3QgaGF2ZSBsZWdhY3kgZXhwb3J0cyBhbnltb3JlXG4gIGlmIChvcHRpb25zLmhvdHN3YXAgJiYgZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kICE9PSAnaG90c3dhcCcpIHtcbiAgICBzd2l0Y2ggKG9wdGlvbnMuaG90c3dhcCkge1xuICAgICAgY2FzZSBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFk6XG4gICAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgICAgbWV0aG9kOiAnaG90c3dhcCcsXG4gICAgICAgICAgcHJvcGVydGllczogb3B0aW9ucy5ob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0s6XG4gICAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgICAgbWV0aG9kOiAnaG90c3dhcCcsXG4gICAgICAgICAgcHJvcGVydGllczogb3B0aW9ucy5ob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICAgICAgICAgZmFsbGJhY2s6IGRlcGxveW1lbnRNZXRob2QsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9wdGlvbnMuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudChvcHRpb25zLmV4dHJhVXNlckFnZW50KTtcbiAgY29uc3QgY2ZuID0gb3B0aW9ucy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgY29uc3QgZGVwbG95TmFtZSA9IG9wdGlvbnMuZGVwbG95TmFtZSB8fCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZTtcbiAgbGV0IGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIGRlcGxveU5hbWUpO1xuXG4gIGlmIChjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLmlzQ3JlYXRpb25GYWlsdXJlKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoXG4gICAgICBgRm91bmQgZXhpc3Rpbmcgc3RhY2sgJHtkZXBsb3lOYW1lfSB0aGF0IGhhZCBwcmV2aW91c2x5IGZhaWxlZCBjcmVhdGlvbi4gRGVsZXRpbmcgaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmUtY3JlYXRlIGl0LmAsXG4gICAgKTtcbiAgICBhd2FpdCBjZm4uZGVsZXRlU3RhY2soeyBTdGFja05hbWU6IGRlcGxveU5hbWUgfSk7XG4gICAgY29uc3QgZGVsZXRlZFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVsZXRlKGNmbiwgaW9IZWxwZXIsIGRlcGxveU5hbWUpO1xuICAgIGlmIChkZWxldGVkU3RhY2sgJiYgZGVsZXRlZFN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdERUxFVEVfQ09NUExFVEUnKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICBgRmFpbGVkIGRlbGV0aW5nIHN0YWNrICR7ZGVwbG95TmFtZX0gdGhhdCBoYWQgcHJldmlvdXNseSBmYWlsZWQgY3JlYXRpb24gKGN1cnJlbnQgc3RhdGU6ICR7ZGVsZXRlZFN0YWNrLnN0YWNrU3RhdHVzfSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHZhcmlhYmxlIHRvIG1hcmsgdGhhdCB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgYnV0IGF2b2lkXG4gICAgLy8gZG9pbmcgYW4gYWN0dWFsIGxvb2t1cCBpbiBDbG91ZEZvcm1hdGlvbiAod2hpY2ggd291bGQgYmUgc2lsbHkgdG8gZG8gaWZcbiAgICAvLyB3ZSBqdXN0IGRlbGV0ZWQgaXQpLlxuICAgIGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBDbG91ZEZvcm1hdGlvblN0YWNrLmRvZXNOb3RFeGlzdChjZm4sIGRlcGxveU5hbWUpO1xuICB9XG5cbiAgLy8gRGV0ZWN0IFwibGVnYWN5XCIgYXNzZXRzICh3aGljaCByZW1haW4gaW4gdGhlIG1ldGFkYXRhKSBhbmQgcHVibGlzaCB0aGVtIHZpYVxuICAvLyBhbiBhZC1ob2MgYXNzZXQgbWFuaWZlc3QsIHdoaWxlIHBhc3NpbmcgdGhlaXIgbG9jYXRpb25zIHZpYSB0ZW1wbGF0ZVxuICAvLyBwYXJhbWV0ZXJzLlxuICBjb25zdCBsZWdhY3lBc3NldHMgPSBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKTtcbiAgY29uc3QgYXNzZXRQYXJhbXMgPSBhd2FpdCBhZGRNZXRhZGF0YUFzc2V0c1RvTWFuaWZlc3QoXG4gICAgaW9IZWxwZXIsXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBsZWdhY3lBc3NldHMsXG4gICAgb3B0aW9ucy5lbnZSZXNvdXJjZXMsXG4gICAgb3B0aW9ucy5yZXVzZUFzc2V0cyxcbiAgKTtcblxuICBjb25zdCBmaW5hbFBhcmFtZXRlclZhbHVlcyA9IHsgLi4ub3B0aW9ucy5wYXJhbWV0ZXJzLCAuLi5hc3NldFBhcmFtcyB9O1xuXG4gIGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZShzdGFja0FydGlmYWN0LnRlbXBsYXRlKTtcbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSBvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVyc1xuICAgID8gdGVtcGxhdGVQYXJhbXMudXBkYXRlRXhpc3RpbmcoZmluYWxQYXJhbWV0ZXJWYWx1ZXMsIGNsb3VkRm9ybWF0aW9uU3RhY2sucGFyYW1ldGVycylcbiAgICA6IHRlbXBsYXRlUGFyYW1zLnN1cHBseUFsbChmaW5hbFBhcmFtZXRlclZhbHVlcyk7XG5cbiAgaWYgKGF3YWl0IGNhblNraXBEZXBsb3kob3B0aW9ucywgY2xvdWRGb3JtYXRpb25TdGFjaywgc3RhY2tQYXJhbXMuaGFzQ2hhbmdlcyhjbG91ZEZvcm1hdGlvblN0YWNrLnBhcmFtZXRlcnMpLCBpb0hlbHBlcikpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogc2tpcHBpbmcgZGVwbG95bWVudCAodXNlIC0tZm9yY2UgdG8gb3ZlcnJpZGUpYCk7XG4gICAgLy8gaWYgd2UgY2FuIHNraXAgZGVwbG95bWVudCBhbmQgd2UgYXJlIHBlcmZvcm1pbmcgYSBob3Rzd2FwLCBsZXQgdGhlIHVzZXIga25vd1xuICAgIC8vIHRoYXQgbm8gaG90c3dhcCBkZXBsb3ltZW50IGhhcHBlbmVkXG4gICAgaWYgKGRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2hvdHN3YXAnKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKFxuICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgYFxcbiAke0lDT059ICVzXFxuYCxcbiAgICAgICAgICBjaGFsay5ib2xkKCdob3Rzd2FwIGRlcGxveW1lbnQgc2tpcHBlZCAtIG5vIGNoYW5nZXMgd2VyZSBkZXRlY3RlZCAodXNlIC0tZm9yY2UgdG8gb3ZlcnJpZGUpJyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZGVwbG95aW5nLi4uYCk7XG4gIH1cblxuICBjb25zdCBib2R5UGFyYW1ldGVyID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgaW9IZWxwZXIsXG4gICAgc3RhY2tBcnRpZmFjdCxcbiAgICBvcHRpb25zLnJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgbGVnYWN5QXNzZXRzLFxuICAgIG9wdGlvbnMuZW52UmVzb3VyY2VzLFxuICAgIG9wdGlvbnMub3ZlcnJpZGVUZW1wbGF0ZSxcbiAgKTtcbiAgbGV0IGJvb3RzdHJhcFN0YWNrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGJvb3RzdHJhcFN0YWNrTmFtZSA9IChhd2FpdCBvcHRpb25zLmVudlJlc291cmNlcy5sb29rdXBUb29sa2l0KCkpLnN0YWNrTmFtZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBib290c3RyYXAgc3RhY2sgbmFtZTogJHtlfWApO1xuICB9XG4gIGF3YWl0IHB1Ymxpc2hBc3NldHMobGVnYWN5QXNzZXRzLnRvTWFuaWZlc3Qoc3RhY2tBcnRpZmFjdC5hc3NlbWJseS5kaXJlY3RvcnkpLCBvcHRpb25zLnNka1Byb3ZpZGVyLCBzdGFja0Vudiwge1xuICAgIHBhcmFsbGVsOiBvcHRpb25zLmFzc2V0UGFyYWxsZWxpc20sXG4gICAgYWxsb3dDcm9zc0FjY291bnQ6IGF3YWl0IGRldGVybWluZUFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nKG9wdGlvbnMuc2RrLCBpb0hlbHBlciwgYm9vdHN0cmFwU3RhY2tOYW1lKSxcbiAgfSwgaW9IZWxwZXIpO1xuXG4gIC8vIGF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudCBpZiBwb3NzaWJsZVxuICBpZiAoZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnaG90c3dhcCcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaG90c3dhcE1vZGVOZXcgPSBkZXBsb3ltZW50TWV0aG9kPy5mYWxsYmFjayA/ICdmYWxsLWJhY2snIDogJ2hvdHN3YXAtb25seSc7XG4gICAgICBjb25zdCBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMgPSBkZXBsb3ltZW50TWV0aG9kLnByb3BlcnRpZXNcbiAgICAgICAgPyBjcmVhdGVIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMoZGVwbG95bWVudE1ldGhvZC5wcm9wZXJ0aWVzKVxuICAgICAgICA6IG5ldyBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMoKTtcblxuICAgICAgY29uc3QgaG90c3dhcERlcGxveW1lbnRSZXN1bHQgPSBhd2FpdCB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICAgICAgb3B0aW9ucy5zZGtQcm92aWRlcixcbiAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgIHN0YWNrUGFyYW1zLnZhbHVlcyxcbiAgICAgICAgY2xvdWRGb3JtYXRpb25TdGFjayxcbiAgICAgICAgc3RhY2tBcnRpZmFjdCxcbiAgICAgICAgaG90c3dhcE1vZGVOZXcsXG4gICAgICAgIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChob3Rzd2FwRGVwbG95bWVudFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gaG90c3dhcERlcGxveW1lbnRSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KFxuICAgICAgICAnQ291bGQgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIGFzIHRoZSBzdGFjayAlcyBjb250YWlucyBub24tQXNzZXQgY2hhbmdlcycsXG4gICAgICAgIHN0YWNrQXJ0aWZhY3QuZGlzcGxheU5hbWUsXG4gICAgICApKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoIShlIGluc3RhbmNlb2YgQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbikpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KFxuICAgICAgICAnQ291bGQgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsIGJlY2F1c2UgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJXMnLFxuICAgICAgICBmb3JtYXRFcnJvck1lc3NhZ2UoZSksXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoZGVwbG95bWVudE1ldGhvZC5mYWxsYmFjaykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbygnRmFsbGluZyBiYWNrIHRvIGRvaW5nIGEgZnVsbCBkZXBsb3ltZW50Jyk7XG4gICAgICBvcHRpb25zLnNkay5hcHBlbmRDdXN0b21Vc2VyQWdlbnQoJ2Nkay1ob3Rzd2FwL2ZhbGxiYWNrJyk7XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0gZGVwbG95bWVudE1ldGhvZC5mYWxsYmFjaztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICBub09wOiB0cnVlLFxuICAgICAgICBzdGFja0FybjogY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLFxuICAgICAgICBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGNvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSBkZXBsb3ltZW50LCBwZXJmb3JtIGEgZnVsbCBDRk4gZGVwbG95IGluc3RlYWRcbiAgY29uc3QgZnVsbERlcGxveW1lbnQgPSBuZXcgRnVsbENsb3VkRm9ybWF0aW9uRGVwbG95bWVudChcbiAgICBkZXBsb3ltZW50TWV0aG9kLFxuICAgIG9wdGlvbnMsXG4gICAgY2xvdWRGb3JtYXRpb25TdGFjayxcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIHN0YWNrUGFyYW1zLFxuICAgIGJvZHlQYXJhbWV0ZXIsXG4gICAgaW9IZWxwZXIsXG4gICk7XG4gIHJldHVybiBmdWxsRGVwbG95bWVudC5wZXJmb3JtRGVwbG95bWVudCgpO1xufVxuXG50eXBlIENvbW1vblByZXBhcmVPcHRpb25zID0ga2V5b2YgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQgJlxua2V5b2YgVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQgJlxua2V5b2YgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0O1xudHlwZSBDb21tb25FeGVjdXRlT3B0aW9ucyA9IGtleW9mIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0ICZcbmtleW9mIFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0ICZcbmtleW9mIEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQ7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBzaGFyZXMgc3RhdGUgYW5kIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZ1bGwgZGVwbG95bWVudCBtb2Rlc1xuICovXG5jbGFzcyBGdWxsQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVyYjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHV1aWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlcGxveW1lbnRNZXRob2Q6IERpcmVjdERlcGxveW1lbnQgfCBDaGFuZ2VTZXREZXBsb3ltZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb25TdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjayxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrUGFyYW1zOiBQYXJhbWV0ZXJWYWx1ZXMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBib2R5UGFyYW1ldGVyOiBUZW1wbGF0ZUJvZHlQYXJhbWV0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICkge1xuICAgIHRoaXMuY2ZuID0gb3B0aW9ucy5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICB0aGlzLnN0YWNrTmFtZSA9IG9wdGlvbnMuZGVwbG95TmFtZSA/PyBzdGFja0FydGlmYWN0LnN0YWNrTmFtZTtcblxuICAgIHRoaXMudXBkYXRlID0gY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMgJiYgY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5uYW1lICE9PSAnUkVWSUVXX0lOX1BST0dSRVNTJztcbiAgICB0aGlzLnZlcmIgPSB0aGlzLnVwZGF0ZSA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XG4gICAgdGhpcy51dWlkID0gdXVpZC52NCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBlcmZvcm1EZXBsb3ltZW50KCk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBkZXBsb3ltZW50TWV0aG9kID0gdGhpcy5kZXBsb3ltZW50TWV0aG9kID8/IHsgbWV0aG9kOiAnY2hhbmdlLXNldCcgfTtcblxuICAgIGlmIChkZXBsb3ltZW50TWV0aG9kLm1ldGhvZCA9PT0gJ2RpcmVjdCcgJiYgdGhpcy5vcHRpb25zLnJlc291cmNlc1RvSW1wb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbXBvcnRpbmcgcmVzb3VyY2VzIHJlcXVpcmVzIGEgY2hhbmdlc2V0IGRlcGxveW1lbnQnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRlcGxveW1lbnRNZXRob2QubWV0aG9kKSB7XG4gICAgICBjYXNlICdjaGFuZ2Utc2V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlU2V0RGVwbG95bWVudChkZXBsb3ltZW50TWV0aG9kKTtcblxuICAgICAgY2FzZSAnZGlyZWN0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0RGVwbG95bWVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlU2V0RGVwbG95bWVudChkZXBsb3ltZW50TWV0aG9kOiBDaGFuZ2VTZXREZXBsb3ltZW50KTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IGNoYW5nZVNldE5hbWUgPSBkZXBsb3ltZW50TWV0aG9kLmNoYW5nZVNldE5hbWUgPz8gJ2Nkay1kZXBsb3ktY2hhbmdlLXNldCc7XG4gICAgY29uc3QgZXhlY3V0ZSA9IGRlcGxveW1lbnRNZXRob2QuZXhlY3V0ZSA/PyB0cnVlO1xuICAgIGNvbnN0IGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzID0gZGVwbG95bWVudE1ldGhvZC5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyA/PyBmYWxzZTtcbiAgICBjb25zdCBjaGFuZ2VTZXREZXNjcmlwdGlvbiA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhbmdlU2V0KGNoYW5nZVNldE5hbWUsIGV4ZWN1dGUsIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbigpO1xuXG4gICAgaWYgKGNoYW5nZVNldEhhc05vQ2hhbmdlcyhjaGFuZ2VTZXREZXNjcmlwdGlvbikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdObyBjaGFuZ2VzIGFyZSB0byBiZSBwZXJmb3JtZWQgb24gJXMuJywgdGhpcy5zdGFja05hbWUpKTtcbiAgICAgIGlmIChleGVjdXRlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdEZWxldGluZyBlbXB0eSBjaGFuZ2Ugc2V0ICVzJywgY2hhbmdlU2V0RGVzY3JpcHRpb24uQ2hhbmdlU2V0SWQpKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jZm4uZGVsZXRlQ2hhbmdlU2V0KHtcbiAgICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlRGVwbG95bWVudCkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ1lvdSB1c2VkIHRoZSAtLWZvcmNlIGZsYWcsIGJ1dCBDbG91ZEZvcm1hdGlvbiByZXBvcnRlZCB0aGF0IHRoZSBkZXBsb3ltZW50IHdvdWxkIG5vdCBtYWtlIGFueSBjaGFuZ2VzLicsXG4gICAgICAgICAgICAnQWNjb3JkaW5nIHRvIENsb3VkRm9ybWF0aW9uLCBhbGwgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IHVwLXRvLWRhdGUgd2l0aCB0aGUgc3RhdGUgaW4geW91ciBDREsgYXBwLicsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICdZb3UgY2Fubm90IHVzZSB0aGUgLS1mb3JjZSBmbGFnIHRvIGdldCByaWQgb2YgY2hhbmdlcyB5b3UgbWFkZSBpbiB0aGUgY29uc29sZS4gVHJ5IHVzaW5nJyxcbiAgICAgICAgICAgICdDbG91ZEZvcm1hdGlvbiBkcmlmdCBkZXRlY3Rpb24gaW5zdGVhZDogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvdXNpbmctY2ZuLXN0YWNrLWRyaWZ0Lmh0bWwnLFxuICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgICAgb3V0cHV0czogdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsXG4gICAgICAgIHN0YWNrQXJuOiBjaGFuZ2VTZXREZXNjcmlwdGlvbi5TdGFja0lkISxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFleGVjdXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KFxuICAgICAgICAnQ2hhbmdlc2V0ICVzIGNyZWF0ZWQgYW5kIHdhaXRpbmcgaW4gcmV2aWV3IGZvciBtYW51YWwgZXhlY3V0aW9uICgtLW5vLWV4ZWN1dGUpJyxcbiAgICAgICAgY2hhbmdlU2V0RGVzY3JpcHRpb24uQ2hhbmdlU2V0SWQsXG4gICAgICApKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgICAgbm9PcDogZmFsc2UsXG4gICAgICAgIG91dHB1dHM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgICBzdGFja0FybjogY2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhY2tJZCEsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSByZXBsYWNlbWVudHMgaW4gdGhlIGNoYW5nZXNldCwgY2hlY2sgdGhlIHJvbGxiYWNrIGZsYWcgYW5kIHN0YWNrIHN0YXR1c1xuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gaGFzUmVwbGFjZW1lbnQoY2hhbmdlU2V0RGVzY3JpcHRpb24pO1xuICAgIGNvbnN0IGlzUGF1c2VkRmFpbFN0YXRlID0gdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLmlzUm9sbGJhY2thYmxlO1xuICAgIGNvbnN0IHJvbGxiYWNrID0gdGhpcy5vcHRpb25zLnJvbGxiYWNrID8/IHRydWU7XG4gICAgaWYgKGlzUGF1c2VkRmFpbFN0YXRlICYmIHJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnZmFpbHBhdXNlZC1uZWVkLXJvbGxiYWNrLWZpcnN0JywgcmVhc29uOiAncmVwbGFjZW1lbnQnLCBzdGF0dXM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5uYW1lIH07XG4gICAgfVxuICAgIGlmIChpc1BhdXNlZEZhaWxTdGF0ZSAmJiByb2xsYmFjaykge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcsIHJlYXNvbjogJ25vdC1ub3JvbGxiYWNrJywgc3RhdHVzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMubmFtZSB9O1xuICAgIH1cbiAgICBpZiAoIXJvbGxiYWNrICYmIHJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAncmVwbGFjZW1lbnQtcmVxdWlyZXMtcm9sbGJhY2snIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUNoYW5nZVNldChjaGFuZ2VTZXREZXNjcmlwdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUNoYW5nZVNldChjaGFuZ2VTZXROYW1lOiBzdHJpbmcsIHdpbGxFeGVjdXRlOiBib29sZWFuLCBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYm9vbGVhbikge1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cE9sZENoYW5nZXNldChjaGFuZ2VTZXROYW1lKTtcblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYEF0dGVtcHRpbmcgdG8gY3JlYXRlIENoYW5nZVNldCB3aXRoIG5hbWUgJHtjaGFuZ2VTZXROYW1lfSB0byAke3RoaXMudmVyYn0gc3RhY2sgJHt0aGlzLnN0YWNrTmFtZX1gKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KCclczogY3JlYXRpbmcgQ2xvdWRGb3JtYXRpb24gY2hhbmdlc2V0Li4uJywgY2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSkpKTtcbiAgICBjb25zdCBjaGFuZ2VTZXQgPSBhd2FpdCB0aGlzLmNmbi5jcmVhdGVDaGFuZ2VTZXQoe1xuICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gICAgICBDaGFuZ2VTZXRUeXBlOiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQgPyAnSU1QT1JUJyA6IHRoaXMudXBkYXRlID8gJ1VQREFURScgOiAnQ1JFQVRFJyxcbiAgICAgIFJlc291cmNlc1RvSW1wb3J0OiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgICBEZXNjcmlwdGlvbjogYENESyBDaGFuZ2VzZXQgZm9yIGV4ZWN1dGlvbiAke3RoaXMudXVpZH1gLFxuICAgICAgQ2xpZW50VG9rZW46IGBjcmVhdGUke3RoaXMudXVpZH1gLFxuICAgICAgSW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgLi4udGhpcy5jb21tb25QcmVwYXJlT3B0aW9ucygpLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ0luaXRpYXRlZCBjcmVhdGlvbiBvZiBjaGFuZ2VzZXQ6ICVzOyB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2ggY3JlYXRpbmcuLi4nLCBjaGFuZ2VTZXQuSWQpKTtcbiAgICAvLyBGZXRjaGluZyBhbGwgcGFnZXMgaWYgd2UnbGwgZXhlY3V0ZSwgc28gd2UgY2FuIGhhdmUgdGhlIGNvcnJlY3QgY2hhbmdlIGNvdW50IHdoZW4gbW9uaXRvcmluZy5cbiAgICBjb25zdCBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5ID0gbmV3IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkoKTtcbiAgICBjb25zdCBlbnZSZXNvdXJjZXMgPSBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5LmZvcih0aGlzLm9wdGlvbnMucmVzb2x2ZWRFbnZpcm9ubWVudCwgdGhpcy5vcHRpb25zLnNkaywgdGhpcy5pb0hlbHBlcik7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlcG9ydGVyID0gbmV3IEVhcmx5VmFsaWRhdGlvblJlcG9ydGVyKHRoaXMub3B0aW9ucy5zZGssIGVudlJlc291cmNlcyk7XG4gICAgcmV0dXJuIHdhaXRGb3JDaGFuZ2VTZXQodGhpcy5jZm4sIHRoaXMuaW9IZWxwZXIsIHRoaXMuc3RhY2tOYW1lLCBjaGFuZ2VTZXROYW1lLCB7XG4gICAgICBmZXRjaEFsbDogd2lsbEV4ZWN1dGUsXG4gICAgICB2YWxpZGF0aW9uUmVwb3J0ZXIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVDaGFuZ2VTZXQoY2hhbmdlU2V0OiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQpOiBQcm9taXNlPFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdJbml0aWF0aW5nIGV4ZWN1dGlvbiBvZiBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMnLCBjaGFuZ2VTZXQuQ2hhbmdlU2V0SWQsIHRoaXMuc3RhY2tOYW1lKSk7XG5cbiAgICBhd2FpdCB0aGlzLmNmbi5leGVjdXRlQ2hhbmdlU2V0KHtcbiAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXQuQ2hhbmdlU2V0TmFtZSEsXG4gICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IGBleGVjJHt0aGlzLnV1aWR9YCxcbiAgICAgIC4uLnRoaXMuY29tbW9uRXhlY3V0ZU9wdGlvbnMoKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoXG4gICAgICBmb3JtYXQoXG4gICAgICAgICdFeGVjdXRpb24gb2YgY2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzIGhhcyBzdGFydGVkOyB3YWl0aW5nIGZvciB0aGUgdXBkYXRlIHRvIGNvbXBsZXRlLi4uJyxcbiAgICAgICAgY2hhbmdlU2V0LkNoYW5nZVNldElkLFxuICAgICAgICB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIC8vICsxIGZvciB0aGUgZXh0cmEgZXZlbnQgZW1pdHRlZCBmcm9tIHVwZGF0ZXMuXG4gICAgY29uc3QgY2hhbmdlU2V0TGVuZ3RoOiBudW1iZXIgPSAoY2hhbmdlU2V0LkNoYW5nZXMgPz8gW10pLmxlbmd0aCArICh0aGlzLnVwZGF0ZSA/IDEgOiAwKTtcbiAgICByZXR1cm4gdGhpcy5tb25pdG9yRGVwbG95bWVudChjaGFuZ2VTZXQuQ3JlYXRpb25UaW1lISwgY2hhbmdlU2V0TGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xlYW51cE9sZENoYW5nZXNldChjaGFuZ2VTZXROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLmV4aXN0cykge1xuICAgICAgLy8gRGVsZXRlIGFueSBleGlzdGluZyBjaGFuZ2Ugc2V0cyBnZW5lcmF0ZWQgYnkgQ0RLIHNpbmNlIGNoYW5nZSBzZXQgbmFtZXMgbXVzdCBiZSB1bmlxdWUuXG4gICAgICAvLyBUaGUgZGVsZXRlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCBhcyBsb25nIGFzIHRoZSBzdGFjayBleGlzdHMgKGV2ZW4gaWYgdGhlIGNoYW5nZSBzZXQgZG9lcyBub3QgZXhpc3QpLlxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgUmVtb3ZpbmcgZXhpc3RpbmcgY2hhbmdlIHNldCB3aXRoIG5hbWUgJHtjaGFuZ2VTZXROYW1lfSBpZiBpdCBleGlzdHNgKTtcbiAgICAgIGF3YWl0IHRoaXMuY2ZuLmRlbGV0ZUNoYW5nZVNldCh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbigpIHtcbiAgICAvLyBVcGRhdGUgdGVybWluYXRpb24gcHJvdGVjdGlvbiBvbmx5IGlmIGl0IGhhcyBjaGFuZ2VkLlxuICAgIGNvbnN0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA9IHRoaXMuc3RhY2tBcnRpZmFjdC50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gdGVybWluYXRpb25Qcm90ZWN0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFxuICAgICAgICBmb3JtYXQgKFxuICAgICAgICAgICdVcGRhdGluZyB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGZyb20gJXMgdG8gJXMgZm9yIHN0YWNrICVzJyxcbiAgICAgICAgICB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmNmbi51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oe1xuICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IHRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ1Rlcm1pbmF0aW9uIHByb3RlY3Rpb24gdXBkYXRlZCB0byAlcyBmb3Igc3RhY2sgJXMnLCB0ZXJtaW5hdGlvblByb3RlY3Rpb24sIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXJlY3REZXBsb3ltZW50KCk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdCgnJXM6ICVzIHN0YWNrLi4uJywgY2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSksIHRoaXMudXBkYXRlID8gJ3VwZGF0aW5nJyA6ICdjcmVhdGluZycpKTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2ZuLnVwZGF0ZVN0YWNrKHtcbiAgICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogYHVwZGF0ZSR7dGhpcy51dWlkfWAsXG4gICAgICAgICAgLi4udGhpcy5jb21tb25QcmVwYXJlT3B0aW9ucygpLFxuICAgICAgICAgIC4uLnRoaXMuY29tbW9uRXhlY3V0ZU9wdGlvbnMoKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdObyB1cGRhdGVzIGFyZSB0byBiZSBwZXJmb3JtZWQuJykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdObyB1cGRhdGVzIGFyZSB0byBiZSBwZXJmb3JtZWQgZm9yIHN0YWNrICVzJywgdGhpcy5zdGFja05hbWUpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICAgICAgbm9PcDogdHJ1ZSxcbiAgICAgICAgICAgIG91dHB1dHM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgICAgICAgc3RhY2tBcm46IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5tb25pdG9yRGVwbG95bWVudChzdGFydFRpbWUsIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgd2UgY2FuIHNldCB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGR1cmluZyBjcmVhdGVcbiAgICAgIGNvbnN0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA9IHRoaXMuc3RhY2tBcnRpZmFjdC50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2U7XG5cbiAgICAgIGF3YWl0IHRoaXMuY2ZuLmNyZWF0ZVN0YWNrKHtcbiAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBgY3JlYXRlJHt0aGlzLnV1aWR9YCxcbiAgICAgICAgLi4uKHRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/IHsgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiB0cnVlIH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi50aGlzLmNvbW1vblByZXBhcmVPcHRpb25zKCksXG4gICAgICAgIC4uLnRoaXMuY29tbW9uRXhlY3V0ZU9wdGlvbnMoKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5tb25pdG9yRGVwbG95bWVudChzdGFydFRpbWUsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtb25pdG9yRGVwbG95bWVudChzdGFydFRpbWU6IERhdGUsIGV4cGVjdGVkQ2hhbmdlczogbnVtYmVyIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBtb25pdG9yID0gbmV3IFN0YWNrQWN0aXZpdHlNb25pdG9yKHtcbiAgICAgIGNmbjogdGhpcy5jZm4sXG4gICAgICBzdGFjazogdGhpcy5zdGFja0FydGlmYWN0LFxuICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIHJlc291cmNlc1RvdGFsOiBleHBlY3RlZENoYW5nZXMsXG4gICAgICBpb0hlbHBlcjogdGhpcy5pb0hlbHBlcixcbiAgICAgIGNoYW5nZVNldENyZWF0aW9uVGltZTogc3RhcnRUaW1lLFxuICAgIH0pO1xuICAgIGF3YWl0IG1vbml0b3Iuc3RhcnQoKTtcblxuICAgIGxldCBmaW5hbFN0YXRlID0gdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdWNjZXNzU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZXBsb3kodGhpcy5jZm4sIHRoaXMuaW9IZWxwZXIsIHRoaXMuc3RhY2tOYW1lKTtcblxuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiwgYnV0IGNhdGNoIGl0IGFueXdheS4gWW91IG5ldmVyIGtub3cuXG4gICAgICBpZiAoIXN1Y2Nlc3NTdGFjaykge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdTdGFjayBkZXBsb3kgZmFpbGVkICh0aGUgc3RhY2sgZGlzYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSBkZXBsb3lpbmcgaXQpJyk7XG4gICAgICB9XG4gICAgICBmaW5hbFN0YXRlID0gc3VjY2Vzc1N0YWNrO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihzdWZmaXhXaXRoRXJyb3JzKGZvcm1hdEVycm9yTWVzc2FnZShlKSwgbW9uaXRvci5lcnJvcnMpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgbW9uaXRvci5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdTdGFjayAlcyBoYXMgY29tcGxldGVkIHVwZGF0aW5nJywgdGhpcy5zdGFja05hbWUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgbm9PcDogZmFsc2UsXG4gICAgICBvdXRwdXRzOiBmaW5hbFN0YXRlLm91dHB1dHMsXG4gICAgICBzdGFja0FybjogZmluYWxTdGF0ZS5zdGFja0lkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvcHRpb25zIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIENyZWF0ZVN0YWNrLCBVcGRhdGVTdGFjayBhbmQgQ3JlYXRlQ2hhbmdlU2V0XG4gICAqL1xuICBwcml2YXRlIGNvbW1vblByZXBhcmVPcHRpb25zKCk6IFBhcnRpYWw8UGljazxVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCwgQ29tbW9uUHJlcGFyZU9wdGlvbnM+PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENhcGFiaWxpdGllczogWydDQVBBQklMSVRZX0lBTScsICdDQVBBQklMSVRZX05BTUVEX0lBTScsICdDQVBBQklMSVRZX0FVVE9fRVhQQU5EJ10sXG4gICAgICBOb3RpZmljYXRpb25BUk5zOiB0aGlzLm9wdGlvbnMubm90aWZpY2F0aW9uQXJucyxcbiAgICAgIFBhcmFtZXRlcnM6IHRoaXMuc3RhY2tQYXJhbXMuYXBpUGFyYW1ldGVycyxcbiAgICAgIFJvbGVBUk46IHRoaXMub3B0aW9ucy5yb2xlQXJuLFxuICAgICAgVGVtcGxhdGVCb2R5OiB0aGlzLmJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVCb2R5LFxuICAgICAgVGVtcGxhdGVVUkw6IHRoaXMuYm9keVBhcmFtZXRlci5UZW1wbGF0ZVVSTCxcbiAgICAgIFRhZ3M6IHRoaXMub3B0aW9ucy50YWdzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvcHRpb25zIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIFVwZGF0ZVN0YWNrIGFuZCBDcmVhdGVDaGFuZ2VTZXRcbiAgICpcbiAgICogQmUgY2FyZWZ1bCBub3QgdG8gYWRkIGluIGtleXMgZm9yIG9wdGlvbnMgdGhhdCBhcmVuJ3QgdXNlZCwgYXMgdGhlIGZlYXR1cmVzIG1heSBub3QgaGF2ZSBiZWVuXG4gICAqIGRlcGxveWVkIGV2ZXJ5d2hlcmUgeWV0LlxuICAgKi9cbiAgcHJpdmF0ZSBjb21tb25FeGVjdXRlT3B0aW9ucygpOiBQYXJ0aWFsPFBpY2s8VXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsIENvbW1vbkV4ZWN1dGVPcHRpb25zPj4ge1xuICAgIGNvbnN0IHNob3VsZERpc2FibGVSb2xsYmFjayA9IHRoaXMub3B0aW9ucy5yb2xsYmFjayA9PT0gZmFsc2U7XG5cbiAgICByZXR1cm4ge1xuICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIC4uLihzaG91bGREaXNhYmxlUm9sbGJhY2sgPyB7IERpc2FibGVSb2xsYmFjazogdHJ1ZSB9IDogdW5kZWZpbmVkKSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gYmUgZGVzdHJveWVkXG4gICAqL1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIHNkazogU0RLO1xuICByb2xlQXJuPzogc3RyaW5nO1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzdGFjayB0aGF0IHdhcyBkZXN0cm95ZWQsIGlmIGFueS5cbiAgICpcbiAgICogSWYgdGhlIHN0YWNrIGRpZG4ndCBleGlzdCB0byBiZWdpbiB3aXRoLCB0aGUgb3BlcmF0aW9uIHdpbGwgc3VjY2VlZFxuICAgKiBidXQgdGhpcyB2YWx1ZSB3aWxsIGJlIHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQXJuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzdHJveVN0YWNrKG9wdGlvbnM6IERlc3Ryb3lTdGFja09wdGlvbnMsIGlvSGVscGVyOiBJb0hlbHBlcik6IFByb21pc2U8RGVzdHJveVN0YWNrUmVzdWx0PiB7XG4gIGNvbnN0IGRlcGxveU5hbWUgPSBvcHRpb25zLmRlcGxveU5hbWUgfHwgb3B0aW9ucy5zdGFjay5zdGFja05hbWU7XG4gIGNvbnN0IGNmbiA9IG9wdGlvbnMuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG5cbiAgY29uc3QgY3VycmVudFN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoY2ZuLCBkZXBsb3lOYW1lKTtcbiAgaWYgKCFjdXJyZW50U3RhY2suZXhpc3RzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IG1vbml0b3IgPSBuZXcgU3RhY2tBY3Rpdml0eU1vbml0b3Ioe1xuICAgIGNmbixcbiAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICBzdGFja05hbWU6IGRlcGxveU5hbWUsXG4gICAgaW9IZWxwZXI6IGlvSGVscGVyLFxuICB9KTtcbiAgYXdhaXQgbW9uaXRvci5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2ZuLmRlbGV0ZVN0YWNrKHsgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLCBSb2xlQVJOOiBvcHRpb25zLnJvbGVBcm4gfSk7XG4gICAgY29uc3QgZGVzdHJveWVkU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZWxldGUoY2ZuLCBpb0hlbHBlciwgZGVwbG95TmFtZSk7XG4gICAgaWYgKGRlc3Ryb3llZFN0YWNrICYmIGRlc3Ryb3llZFN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdERUxFVEVfQ09NUExFVEUnKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBGYWlsZWQgdG8gZGVzdHJveSAke2RlcGxveU5hbWV9OiAke2Rlc3Ryb3llZFN0YWNrLnN0YWNrU3RhdHVzfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0YWNrQXJuOiBjdXJyZW50U3RhY2suc3RhY2tJZCB9O1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKHN1ZmZpeFdpdGhFcnJvcnMoZm9ybWF0RXJyb3JNZXNzYWdlKGUpLCBtb25pdG9yLmVycm9ycykpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChtb25pdG9yKSB7XG4gICAgICBhd2FpdCBtb25pdG9yLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB3ZSBjYW4gc2tpcCBkZXBsb3ltZW50XG4gKlxuICogV2UgZG8gdGhpcyBpbiBhIGNvbXBsaWNhdGVkIHdheSBieSBwcmVwcm9jZXNzaW5nIChpbnN0ZWFkIG9mIGp1c3RcbiAqIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXNldCksIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5lc3RlZCBzdGFja3MgaW52b2x2ZWRcbiAqIHRoZSBjaGFuZ2VzZXQgd2lsbCBhbHdheXMgc2hvdyB0aGUgbmVzdGVkIHN0YWNrcyBhcyBuZWVkaW5nIHRvIGJlXG4gKiB1cGRhdGVkLCBhbmQgdGhlIGRlcGxveW1lbnQgd2lsbCB0YWtlIGEgbG9uZyB0aW1lIHRvIGluIGVmZmVjdCBub3RcbiAqIGRvIGFueXRoaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBjYW5Ta2lwRGVwbG95KFxuICBkZXBsb3lTdGFja09wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyxcbiAgY2xvdWRGb3JtYXRpb25TdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjayxcbiAgcGFyYW1ldGVyQ2hhbmdlczogUGFyYW1ldGVyQ2hhbmdlcyxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGRlcGxveU5hbWUgPSBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95TmFtZSB8fCBkZXBsb3lTdGFja09wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogY2hlY2tpbmcgaWYgd2UgY2FuIHNraXAgZGVwbG95YCk7XG5cbiAgLy8gRm9yY2VkIGRlcGxveVxuICBpZiAoZGVwbG95U3RhY2tPcHRpb25zLmZvcmNlRGVwbG95bWVudCkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBmb3JjZWQgZGVwbG95bWVudGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENyZWF0aW5nIGNoYW5nZXNldCBvbmx5IChkZWZhdWx0IHRydWUpLCBuZXZlciBza2lwXG4gIGlmIChcbiAgICBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnY2hhbmdlLXNldCcgJiZcbiAgICBkZXBsb3lTdGFja09wdGlvbnMuZGVwbG95bWVudE1ldGhvZC5leGVjdXRlID09PSBmYWxzZVxuICApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogLS1uby1leGVjdXRlLCBhbHdheXMgY3JlYXRpbmcgY2hhbmdlIHNldGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE5vIGV4aXN0aW5nIHN0YWNrXG4gIGlmICghY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogbm8gZXhpc3Rpbmcgc3RhY2tgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBoYXMgY2hhbmdlZCAoYXNzZXRzIHRha2VuIGludG8gYWNjb3VudCBoZXJlKVxuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlbXBsYXRlKSAhPT0gSlNPTi5zdHJpbmdpZnkoYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZW1wbGF0ZSBoYXMgY2hhbmdlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRhZ3MgaGF2ZSBjaGFuZ2VkXG4gIGlmICghY29tcGFyZVRhZ3MoY2xvdWRGb3JtYXRpb25TdGFjay50YWdzLCBkZXBsb3lTdGFja09wdGlvbnMudGFncyA/PyBbXSkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogdGFncyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBOb3RpZmljYXRpb24gYXJucyBoYXZlIGNoYW5nZWRcbiAgaWYgKCFhcnJheUVxdWFscyhjbG91ZEZvcm1hdGlvblN0YWNrLm5vdGlmaWNhdGlvbkFybnMsIGRlcGxveVN0YWNrT3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zID8/IFtdKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBub3RpZmljYXRpb24gYXJucyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcbiAgaWYgKCEhZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gISFjbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbikge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBQYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZFxuICBpZiAocGFyYW1ldGVyQ2hhbmdlcykge1xuICAgIGlmIChwYXJhbWV0ZXJDaGFuZ2VzID09PSAnc3NtJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHNvbWUgcGFyYW1ldGVycyBjb21lIGZyb20gU1NNIHNvIHdlIGhhdmUgdG8gYXNzdW1lIHRoZXkgbWF5IGhhdmUgY2hhbmdlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogcGFyYW1ldGVycyBoYXZlIGNoYW5nZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXhpc3Rpbmcgc3RhY2sgaXMgaW4gYSBmYWlsZWQgc3RhdGVcbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNGYWlsdXJlKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHN0YWNrIGlzIGluIGEgZmFpbHVyZSBzdGF0ZWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFdlIGNhbiBza2lwIGRlcGxveVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gbGlzdCBvZiB0YWdzLCByZXR1cm5zIHRydWUgaWYgaWRlbnRpY2FsLlxuICovXG5mdW5jdGlvbiBjb21wYXJlVGFncyhhOiBUYWdbXSwgYjogVGFnW10pOiBib29sZWFuIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYVRhZyBvZiBhKSB7XG4gICAgY29uc3QgYlRhZyA9IGIuZmluZCgodGFnKSA9PiB0YWcuS2V5ID09PSBhVGFnLktleSk7XG5cbiAgICBpZiAoIWJUYWcgfHwgYlRhZy5WYWx1ZSAhPT0gYVRhZy5WYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzdWZmaXhXaXRoRXJyb3JzKG1zZzogc3RyaW5nLCBlcnJvcnM/OiBzdHJpbmdbXSkge1xuICByZXR1cm4gZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwID8gYCR7bXNnfTogJHtlcnJvcnMuam9pbignLCAnKX1gIDogbXNnO1xufVxuXG5mdW5jdGlvbiBhcnJheUVxdWFscyhhOiBhbnlbXSwgYjogYW55W10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuZXZlcnkoKGl0ZW0pID0+IGIuaW5jbHVkZXMoaXRlbSkpICYmIGIuZXZlcnkoKGl0ZW0pID0+IGEuaW5jbHVkZXMoaXRlbSkpO1xufVxuXG5mdW5jdGlvbiBoYXNSZXBsYWNlbWVudChjczogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KSB7XG4gIHJldHVybiAoY3MuQ2hhbmdlcyA/PyBbXSkuc29tZShjID0+IHtcbiAgICBjb25zdCBhID0gYy5SZXNvdXJjZUNoYW5nZT8uUG9saWN5QWN0aW9uO1xuICAgIHJldHVybiBhID09PSAnUmVwbGFjZUFuZERlbGV0ZScgfHwgYSA9PT0gJ1JlcGxhY2VBbmRSZXRhaW4nIHx8IGEgPT09ICdSZXBsYWNlQW5kU25hcHNob3QnO1xuICB9KTtcbn1cbiJdfQ==
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ05BLGtDQTBLQztBQThVRCxvQ0ErQkM7QUF2dUJELCtCQUE4QjtBQVU5QiwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLHFFQUFnRTtBQUNoRSx5REFBbUQ7QUFDbkQscUNBQXVEO0FBS3ZELHVDQU1tQjtBQUNuQixxQ0FBcUU7QUFHckUsK0RBQTJEO0FBQzNELHFDQUFnRDtBQUdoRCxzREFBbUc7QUFFbkcsZ0RBQThEO0FBQzlELDhDQUFnSDtBQUNoSCx3RUFBc0U7QUFHdEUsa0RBQXVEO0FBQ3ZELHlEQUE2RDtBQXVLdEQsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUEyQixFQUFFLFFBQWtCO0lBQy9FLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0lBRTdDLElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzVFLHVHQUF1RztJQUN2Ryx5REFBeUQ7SUFDekQsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxRQUFRLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixLQUFLLG9CQUFXLENBQUMsWUFBWTtnQkFDM0IsZ0JBQWdCLEdBQUc7b0JBQ2pCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixVQUFVLEVBQUUsT0FBTyxDQUFDLHdCQUF3QjtpQkFDN0MsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxvQkFBVyxDQUFDLFNBQVM7Z0JBQ3hCLGdCQUFnQixHQUFHO29CQUNqQixNQUFNLEVBQUUsU0FBUztvQkFDakIsVUFBVSxFQUFFLE9BQU8sQ0FBQyx3QkFB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QUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHtcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgVGFnLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB7IHB1Ymxpc2hBc3NldHMgfSBmcm9tICcuL2Fzc2V0LXB1Ymxpc2hpbmcnO1xuaW1wb3J0IHsgYWRkTWV0YWRhdGFBc3NldHNUb01hbmlmZXN0IH0gZnJvbSAnLi9hc3NldHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXJhbWV0ZXJWYWx1ZXMsXG4gIFBhcmFtZXRlckNoYW5nZXMsXG59IGZyb20gJy4vY2ZuLWFwaSc7XG5pbXBvcnQge1xuICBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMsXG4gIFRlbXBsYXRlUGFyYW1ldGVycyxcbiAgd2FpdEZvckNoYW5nZVNldCxcbiAgd2FpdEZvclN0YWNrRGVwbG95LFxuICB3YWl0Rm9yU3RhY2tEZWxldGUsXG59IGZyb20gJy4vY2ZuLWFwaSc7XG5pbXBvcnQgeyBkZXRlcm1pbmVBbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZyB9IGZyb20gJy4vY2hlY2tzJztcbmltcG9ydCB0eXBlIHsgRGVwbG95U3RhY2tSZXN1bHQsIFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4vZGVwbG95bWVudC1yZXN1bHQnO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VTZXREZXBsb3ltZW50LCBEZXBsb3ltZW50TWV0aG9kLCBEaXJlY3REZXBsb3ltZW50IH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9kZXBsb3knO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREssIFNka1Byb3ZpZGVyLCBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVCb2R5UGFyYW1ldGVyIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgbWFrZUJvZHlQYXJhbWV0ZXIsIENmbkV2YWx1YXRpb25FeGNlcHRpb24sIENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50UmVzb3VyY2VzLCBTdHJpbmdXaXRob3V0UGxhY2Vob2xkZXJzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcywgSG90c3dhcE1vZGUsIElDT04sIGNyZWF0ZUhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyB9IGZyb20gJy4uL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB7IHRyeUhvdHN3YXBEZXBsb3ltZW50IH0gZnJvbSAnLi4vaG90c3dhcC9ob3Rzd2FwLWRlcGxveW1lbnRzJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VzVG9JbXBvcnQgfSBmcm9tICcuLi9yZXNvdXJjZS1pbXBvcnQnO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eU1vbml0b3IgfSBmcm9tICcuLi9zdGFjay1ldmVudHMnO1xuaW1wb3J0IHsgRWFybHlWYWxpZGF0aW9uUmVwb3J0ZXIgfSBmcm9tICcuL2Vhcmx5LXZhbGlkYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gYmUgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0byBkZXBsb3kgdGhpcyBzdGFjayBpblxuICAgKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgb24gdGhlIHN0YWNrIGFydGlmYWN0IG1heSBiZSB1bnJlc29sdmVkLCB0aGlzIG9uZVxuICAgKiBtdXN0IGJlIHJlc29sdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBTREsgdG8gdXNlIGZvciBkZXBsb3lpbmcgdGhlIHN0YWNrXG4gICAqXG4gICAqIFNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29ycmVjdCByb2xlIHdpdGggd2hpY2hcbiAgICogc3RhY2sgb3BlcmF0aW9ucyBzaG91bGQgYmUgcGVyZm9ybWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2RrOiBTREs7XG5cbiAgLyoqXG4gICAqIFNESyBwcm92aWRlciAoc2VlZGVkIHdpdGggZGVmYXVsdCBjcmVkZW50aWFscylcbiAgICpcbiAgICogV2lsbCBiZSB1c2VkIHRvOlxuICAgKlxuICAgKiAtIFB1Ymxpc2ggYXNzZXRzLCBlaXRoZXIgbGVnYWN5IGFzc2V0cyBvciBsYXJnZSBDRk4gdGVtcGxhdGVzXG4gICAqICAgdGhhdCBhcmVuJ3QgdGhlbXNlbHZlcyBhc3NldHMgZnJvbSBhIG1hbmlmZXN0LiAoTmVlZHMgYW4gU0RLXG4gICAqICAgUHJvdmlkZXIgYmVjYXVzZSB0aGUgZmlsZSBwdWJsaXNoaW5nIHJvbGUgaXMgZGVjbGFyZWQgYXMgcGFydFxuICAgKiAgIG9mIHRoZSBhc3NldCkuXG4gICAqIC0gSG90c3dhcFxuICAgKi9cbiAgcmVhZG9ubHkgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYm9vdHN0cmFwIHN0YWNrIGZvdW5kIGluIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGVudlJlc291cmNlczogRW52aXJvbm1lbnRSZXNvdXJjZXM7XG5cbiAgLyoqXG4gICAqIFJvbGUgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBleGVjdXRlIHRoZSBjaGFuZ2Ugc2V0XG4gICAqXG4gICAqIFRvIG9idGFpbiBhIGBTdHJpbmdXaXRob3V0UGxhY2Vob2xkZXJzYCwgcnVuIGEgcmVndWxhclxuICAgKiBzdHJpbmcgdGhvdWdoIGBUYXJnZXRFbnZpcm9ubWVudC5yZXBsYWNlUGxhY2Vob2xkZXJzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBleGVjdXRpb24gcm9sZTsgQ2xvdWRGb3JtYXRpb24gZWl0aGVyIHVzZXMgdGhlIHJvbGUgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aFxuICAgKiB0aGUgc3RhY2ssIG9yIG90aGVyd2lzZSB1c2VzIGN1cnJlbnQgQVdTIGNyZWRlbnRpYWxzXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogU3RyaW5nV2l0aG91dFBsYWNlaG9sZGVycztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIEFSTnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBub3RpZnkgd2hlbiB0aGUgY2hhbmdlIHNldCBoYXMgY29tcGxldGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYW1lIHRvIGRlcGxveSB0aGUgc3RhY2sgdW5kZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOYW1lIGZyb20gYXNzZW1ibHlcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYXNzZXQgSURzIHdoaWNoIHNob3VsZG4ndCBiZSBidWlsdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEJ1aWxkIGFsbCBhc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlQXNzZXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiB0byBhZGQgdG8gc3RhY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogVGFnW107XG5cbiAgLyoqXG4gICAqIFdoYXQgZGVwbG95bWVudCBtZXRob2QgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2hhbmdlIHNldCB3aXRoIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50TWV0aG9kPzogRGVwbG95bWVudE1ldGhvZDtcblxuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgZXh0cmEgcGFyYW1ldGVyc1xuICAgKiAoaW4gYWRkaXRpb24gdG8gdGhvc2UgdXNlZCBmb3IgYXNzZXRzKVxuICAgKiB0byBwYXNzIHRvIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZS5cbiAgICogTm90ZSB0aGF0IHBhcmFtZXRlcnMgd2l0aCBgdW5kZWZpbmVkYCBvciBlbXB0eSB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkLFxuICAgKiBhbmQgbm90IHBhc3NlZCB0byB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gIC8qKlxuICAgKiBVc2UgcHJldmlvdXMgdmFsdWVzIGZvciB1bnNwZWNpZmllZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIElmIG5vdCBzZXQsIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBldmVyeSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVwbG95IGV2ZW4gaWYgdGhlIGRlcGxveWVkIHRlbXBsYXRlIGlzIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBkZXBsb3kuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZURlcGxveW1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBlcmZvcm0gYSAnaG90c3dhcCcgZGVwbG95bWVudC5cbiAgICogQSAnaG90c3dhcCcgZGVwbG95bWVudCB3aWxsIGF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCBDbG91ZEZvcm1hdGlvblxuICAgKiBhbmQgdXBkYXRlIHRoZSBhZmZlY3RlZCByZXNvdXJjZXMgbGlrZSBMYW1iZGEgZnVuY3Rpb25zIGRpcmVjdGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlRgIGZvciByZWd1bGFyIGRlcGxveW1lbnRzLCBgSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZYCBmb3IgJ3dhdGNoJyBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAgVXNlICdkZXBsb3ltZW50TWV0aG9kJyBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwPzogSG90c3dhcE1vZGU7XG5cbiAgLyoqXG4gICAqIEV4dHJhIHByb3BlcnRpZXMgdGhhdCBjb25maWd1cmUgaG90c3dhcCBiZWhhdmlvclxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RlcGxveW1lbnRNZXRob2QnIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcz86IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcztcblxuICAvKipcbiAgICogVGhlIGV4dHJhIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyIHdoZW4gcGVyZm9ybWluZyBBV1MgU0RLIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vdGhpbmcgZXh0cmEgaXMgYXBwZW5kZWQgdG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyXG4gICAqL1xuICByZWFkb25seSBleHRyYVVzZXJBZ2VudD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0LCBjaGFuZ2Ugc2V0IG9mIHR5cGUgSU1QT1JUIHdpbGwgYmUgY3JlYXRlZCwgYW5kIHJlc291cmNlc1RvSW1wb3J0XG4gICAqIHBhc3NlZCB0byBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VzVG9JbXBvcnQ7XG5cbiAgLyoqXG4gICAqIElmIHByZXNlbnQsIHVzZSB0aGlzIGdpdmVuIHRlbXBsYXRlIGluc3RlYWQgb2YgdGhlIHN0b3JlZCBvbmVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2UgdGhlIHN0b3JlZCB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVUZW1wbGF0ZT86IGFueTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBidWlsZC9wdWJsaXNoIGFzc2V0cyBpbiBwYXJhbGxlbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIFRvIHJlbWFpbiBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRQYXJhbGxlbGlzbT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXBsb3lTdGFjayhvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsIGlvSGVscGVyOiBJb0hlbHBlcik6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhY2tBcnRpZmFjdCA9IG9wdGlvbnMuc3RhY2s7XG4gIGNvbnN0IHN0YWNrRW52ID0gb3B0aW9ucy5yZXNvbHZlZEVudmlyb25tZW50O1xuXG4gIGxldCBkZXBsb3ltZW50TWV0aG9kID0gb3B0aW9ucy5kZXBsb3ltZW50TWV0aG9kID8/IHsgbWV0aG9kOiAnY2hhbmdlLXNldCcgfTtcbiAgLy8gSG9ub3IgdGhlIG9sZCBob3Rzd2FwIG9wdGlvbiBiZWNhdXNlIHRoaXMgQVBJIGlzIGV4cG9ydGVkIGZyb20gdGhlIENMSSBhcyBwYXJ0IG9mIHRoZSBsZWdhY3kgZXhwb3J0c1xuICAvLyBAVE9ETyByZW1vdmUgd2hlbiB3ZSBkb24ndCBoYXZlIGxlZ2FjeSBleHBvcnRzIGFueW1vcmVcbiAgaWYgKG9wdGlvbnMuaG90c3dhcCAmJiBkZXBsb3ltZW50TWV0aG9kPy5tZXRob2QgIT09ICdob3Rzd2FwJykge1xuICAgIHN3aXRjaCAob3B0aW9ucy5ob3Rzd2FwKSB7XG4gICAgICBjYXNlIEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWTpcbiAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBvcHRpb25zLmhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhvdHN3YXBNb2RlLkZBTExfQkFDSzpcbiAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBvcHRpb25zLmhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgICAgICAgICBmYWxsYmFjazogZGVwbG95bWVudE1ldGhvZCxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9ucy5zZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KG9wdGlvbnMuZXh0cmFVc2VyQWdlbnQpO1xuICBjb25zdCBjZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lIHx8IHN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lO1xuICBsZXQgY2xvdWRGb3JtYXRpb25TdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG5cbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNDcmVhdGlvbkZhaWx1cmUpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhcbiAgICAgIGBGb3VuZCBleGlzdGluZyBzdGFjayAke2RlcGxveU5hbWV9IHRoYXQgaGFkIHByZXZpb3VzbHkgZmFpbGVkIGNyZWF0aW9uLiBEZWxldGluZyBpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZS1jcmVhdGUgaXQuYCxcbiAgICApO1xuICAgIGF3YWl0IGNmbi5kZWxldGVTdGFjayh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSB9KTtcbiAgICBjb25zdCBkZWxldGVkU3RhY2sgPSBhd2FpdCB3YWl0Rm9yU3RhY2tEZWxldGUoY2ZuLCBpb0hlbHBlciwgZGVwbG95TmFtZSk7XG4gICAgaWYgKGRlbGV0ZWRTdGFjayAmJiBkZWxldGVkU3RhY2suc3RhY2tTdGF0dXMubmFtZSAhPT0gJ0RFTEVURV9DT01QTEVURScpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgIGBGYWlsZWQgZGVsZXRpbmcgc3RhY2sgJHtkZXBsb3lOYW1lfSB0aGF0IGhhZCBwcmV2aW91c2x5IGZhaWxlZCBjcmVhdGlvbiAoY3VycmVudCBzdGF0ZTogJHtkZWxldGVkU3RhY2suc3RhY2tTdGF0dXN9KWAsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBVcGRhdGUgdmFyaWFibGUgdG8gbWFyayB0aGF0IHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBidXQgYXZvaWRcbiAgICAvLyBkb2luZyBhbiBhY3R1YWwgbG9va3VwIGluIENsb3VkRm9ybWF0aW9uICh3aGljaCB3b3VsZCBiZSBzaWxseSB0byBkbyBpZlxuICAgIC8vIHdlIGp1c3QgZGVsZXRlZCBpdCkuXG4gICAgY2xvdWRGb3JtYXRpb25TdGFjayA9IENsb3VkRm9ybWF0aW9uU3RhY2suZG9lc05vdEV4aXN0KGNmbiwgZGVwbG95TmFtZSk7XG4gIH1cblxuICAvLyBEZXRlY3QgXCJsZWdhY3lcIiBhc3NldHMgKHdoaWNoIHJlbWFpbiBpbiB0aGUgbWV0YWRhdGEpIGFuZCBwdWJsaXNoIHRoZW0gdmlhXG4gIC8vIGFuIGFkLWhvYyBhc3NldCBtYW5pZmVzdCwgd2hpbGUgcGFzc2luZyB0aGVpciBsb2NhdGlvbnMgdmlhIHRlbXBsYXRlXG4gIC8vIHBhcmFtZXRlcnMuXG4gIGNvbnN0IGxlZ2FjeUFzc2V0cyA9IG5ldyBBc3NldE1hbmlmZXN0QnVpbGRlcigpO1xuICBjb25zdCBhc3NldFBhcmFtcyA9IGF3YWl0IGFkZE1ldGFkYXRhQXNzZXRzVG9NYW5pZmVzdChcbiAgICBpb0hlbHBlcixcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIGxlZ2FjeUFzc2V0cyxcbiAgICBvcHRpb25zLmVudlJlc291cmNlcyxcbiAgICBvcHRpb25zLnJldXNlQXNzZXRzLFxuICApO1xuXG4gIGNvbnN0IGZpbmFsUGFyYW1ldGVyVmFsdWVzID0geyAuLi5vcHRpb25zLnBhcmFtZXRlcnMsIC4uLmFzc2V0UGFyYW1zIH07XG5cbiAgY29uc3QgdGVtcGxhdGVQYXJhbXMgPSBUZW1wbGF0ZVBhcmFtZXRlcnMuZnJvbVRlbXBsYXRlKHN0YWNrQXJ0aWZhY3QudGVtcGxhdGUpO1xuICBjb25zdCBzdGFja1BhcmFtcyA9IG9wdGlvbnMudXNlUHJldmlvdXNQYXJhbWV0ZXJzXG4gICAgPyB0ZW1wbGF0ZVBhcmFtcy51cGRhdGVFeGlzdGluZyhmaW5hbFBhcmFtZXRlclZhbHVlcywgY2xvdWRGb3JtYXRpb25TdGFjay5wYXJhbWV0ZXJzKVxuICAgIDogdGVtcGxhdGVQYXJhbXMuc3VwcGx5QWxsKGZpbmFsUGFyYW1ldGVyVmFsdWVzKTtcblxuICBpZiAoYXdhaXQgY2FuU2tpcERlcGxveShvcHRpb25zLCBjbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja1BhcmFtcy5oYXNDaGFuZ2VzKGNsb3VkRm9ybWF0aW9uU3RhY2sucGFyYW1ldGVycyksIGlvSGVscGVyKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBza2lwcGluZyBkZXBsb3ltZW50ICh1c2UgLS1mb3JjZSB0byBvdmVycmlkZSlgKTtcbiAgICAvLyBpZiB3ZSBjYW4gc2tpcCBkZXBsb3ltZW50IGFuZCB3ZSBhcmUgcGVyZm9ybWluZyBhIGhvdHN3YXAsIGxldCB0aGUgdXNlciBrbm93XG4gICAgLy8gdGhhdCBubyBob3Rzd2FwIGRlcGxveW1lbnQgaGFwcGVuZWRcbiAgICBpZiAoZGVwbG95bWVudE1ldGhvZD8ubWV0aG9kID09PSAnaG90c3dhcCcpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oXG4gICAgICAgIGZvcm1hdChcbiAgICAgICAgICBgXFxuICR7SUNPTn0gJXNcXG5gLFxuICAgICAgICAgIGNoYWxrLmJvbGQoJ2hvdHN3YXAgZGVwbG95bWVudCBza2lwcGVkIC0gbm8gY2hhbmdlcyB3ZXJlIGRldGVjdGVkICh1c2UgLS1mb3JjZSB0byBvdmVycmlkZSknKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICBub09wOiB0cnVlLFxuICAgICAgb3V0cHV0czogY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgc3RhY2tBcm46IGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tJZCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBkZXBsb3lpbmcuLi5gKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlQYXJhbWV0ZXIgPSBhd2FpdCBtYWtlQm9keVBhcmFtZXRlcihcbiAgICBpb0hlbHBlcixcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIG9wdGlvbnMucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICBsZWdhY3lBc3NldHMsXG4gICAgb3B0aW9ucy5lbnZSZXNvdXJjZXMsXG4gICAgb3B0aW9ucy5vdmVycmlkZVRlbXBsYXRlLFxuICApO1xuICBsZXQgYm9vdHN0cmFwU3RhY2tOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgYm9vdHN0cmFwU3RhY2tOYW1lID0gKGF3YWl0IG9wdGlvbnMuZW52UmVzb3VyY2VzLmxvb2t1cFRvb2xraXQoKSkuc3RhY2tOYW1lO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGJvb3RzdHJhcCBzdGFjayBuYW1lOiAke2V9YCk7XG4gIH1cbiAgYXdhaXQgcHVibGlzaEFzc2V0cyhsZWdhY3lBc3NldHMudG9NYW5pZmVzdChzdGFja0FydGlmYWN0LmFzc2VtYmx5LmRpcmVjdG9yeSksIG9wdGlvbnMuc2RrUHJvdmlkZXIsIHN0YWNrRW52LCB7XG4gICAgcGFyYWxsZWw6IG9wdGlvbnMuYXNzZXRQYXJhbGxlbGlzbSxcbiAgICBhbGxvd0Nyb3NzQWNjb3VudDogYXdhaXQgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcob3B0aW9ucy5zZGssIGlvSGVscGVyLCBib290c3RyYXBTdGFja05hbWUpLFxuICB9LCBpb0hlbHBlcik7XG5cbiAgLy8gYXR0ZW1wdCB0byBzaG9ydC1jaXJjdWl0IHRoZSBkZXBsb3ltZW50IGlmIHBvc3NpYmxlXG4gIGlmIChkZXBsb3ltZW50TWV0aG9kPy5tZXRob2QgPT09ICdob3Rzd2FwJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3Rzd2FwTW9kZU5ldyA9IGRlcGxveW1lbnRNZXRob2Q/LmZhbGxiYWNrID8gJ2ZhbGwtYmFjaycgOiAnaG90c3dhcC1vbmx5JztcbiAgICAgIGNvbnN0IGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyA9IGRlcGxveW1lbnRNZXRob2QucHJvcGVydGllc1xuICAgICAgICA/IGNyZWF0ZUhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyhkZXBsb3ltZW50TWV0aG9kLnByb3BlcnRpZXMpXG4gICAgICAgIDogbmV3IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcygpO1xuXG4gICAgICBjb25zdCBob3Rzd2FwRGVwbG95bWVudFJlc3VsdCA9IGF3YWl0IHRyeUhvdHN3YXBEZXBsb3ltZW50KFxuICAgICAgICBvcHRpb25zLnNka1Byb3ZpZGVyLFxuICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgc3RhY2tQYXJhbXMudmFsdWVzLFxuICAgICAgICBjbG91ZEZvcm1hdGlvblN0YWNrLFxuICAgICAgICBzdGFja0FydGlmYWN0LFxuICAgICAgICBob3Rzd2FwTW9kZU5ldyxcbiAgICAgICAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICAgICAgKTtcblxuICAgICAgaWYgKGhvdHN3YXBEZXBsb3ltZW50UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBob3Rzd2FwRGVwbG95bWVudFJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoXG4gICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSBhIGhvdHN3YXAgZGVwbG95bWVudCwgYXMgdGhlIHN0YWNrICVzIGNvbnRhaW5zIG5vbi1Bc3NldCBjaGFuZ2VzJyxcbiAgICAgICAgc3RhY2tBcnRpZmFjdC5kaXNwbGF5TmFtZSxcbiAgICAgICkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoXG4gICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSBhIGhvdHN3YXAgZGVwbG95bWVudCwgYmVjYXVzZSB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgY291bGQgbm90IGJlIHJlc29sdmVkOiAlcycsXG4gICAgICAgIGZvcm1hdEVycm9yTWVzc2FnZShlKSxcbiAgICAgICkpO1xuICAgIH1cblxuICAgIGlmIChkZXBsb3ltZW50TWV0aG9kLmZhbGxiYWNrKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKCdGYWxsaW5nIGJhY2sgdG8gZG9pbmcgYSBmdWxsIGRlcGxveW1lbnQnKTtcbiAgICAgIG9wdGlvbnMuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudCgnY2RrLWhvdHN3YXAvZmFsbGJhY2snKTtcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSBkZXBsb3ltZW50TWV0aG9kLmZhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IHRydWUsXG4gICAgICAgIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsXG4gICAgICAgIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gY291bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIGRlcGxveW1lbnQsIHBlcmZvcm0gYSBmdWxsIENGTiBkZXBsb3kgaW5zdGVhZFxuICBjb25zdCBmdWxsRGVwbG95bWVudCA9IG5ldyBGdWxsQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50KFxuICAgIGRlcGxveW1lbnRNZXRob2QsXG4gICAgb3B0aW9ucyxcbiAgICBjbG91ZEZvcm1hdGlvblN0YWNrLFxuICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgc3RhY2tQYXJhbXMsXG4gICAgYm9keVBhcmFtZXRlcixcbiAgICBpb0hlbHBlcixcbiAgKTtcbiAgcmV0dXJuIGZ1bGxEZXBsb3ltZW50LnBlcmZvcm1EZXBsb3ltZW50KCk7XG59XG5cbnR5cGUgQ29tbW9uUHJlcGFyZU9wdGlvbnMgPSBrZXlvZiBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCAmXG5rZXlvZiBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCAmXG5rZXlvZiBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQ7XG50eXBlIENvbW1vbkV4ZWN1dGVPcHRpb25zID0ga2V5b2YgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQgJlxua2V5b2YgVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQgJlxua2V5b2YgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dDtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHNoYXJlcyBzdGF0ZSBhbmQgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZnVsbCBkZXBsb3ltZW50IG1vZGVzXG4gKi9cbmNsYXNzIEZ1bGxDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB2ZXJiOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXVpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95bWVudE1ldGhvZDogRGlyZWN0RGVwbG95bWVudCB8IENoYW5nZVNldERlcGxveW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tQYXJhbXM6IFBhcmFtZXRlclZhbHVlcyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJvZHlQYXJhbWV0ZXI6IFRlbXBsYXRlQm9keVBhcmFtZXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcixcbiAgKSB7XG4gICAgdGhpcy5jZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuICAgIHRoaXMuc3RhY2tOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lID8/IHN0YWNrQXJ0aWZhY3Quc3RhY2tOYW1lO1xuXG4gICAgdGhpcy51cGRhdGUgPSBjbG91ZEZvcm1hdGlvblN0YWNrLmV4aXN0cyAmJiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgIT09ICdSRVZJRVdfSU5fUFJPR1JFU1MnO1xuICAgIHRoaXMudmVyYiA9IHRoaXMudXBkYXRlID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcbiAgICB0aGlzLnV1aWQgPSB1dWlkLnY0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybURlcGxveW1lbnQoKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IGRlcGxveW1lbnRNZXRob2QgPSB0aGlzLmRlcGxveW1lbnRNZXRob2QgPz8geyBtZXRob2Q6ICdjaGFuZ2Utc2V0JyB9O1xuXG4gICAgaWYgKGRlcGxveW1lbnRNZXRob2QubWV0aG9kID09PSAnZGlyZWN0JyAmJiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ltcG9ydGluZyByZXNvdXJjZXMgcmVxdWlyZXMgYSBjaGFuZ2VzZXQgZGVwbG95bWVudCcpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGVwbG95bWVudE1ldGhvZC5tZXRob2QpIHtcbiAgICAgIGNhc2UgJ2NoYW5nZS1zZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5jaGFuZ2VTZXREZXBsb3ltZW50KGRlcGxveW1lbnRNZXRob2QpO1xuXG4gICAgICBjYXNlICdkaXJlY3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3REZXBsb3ltZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2VTZXREZXBsb3ltZW50KGRlcGxveW1lbnRNZXRob2Q6IENoYW5nZVNldERlcGxveW1lbnQpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0TmFtZSA9IGRlcGxveW1lbnRNZXRob2QuY2hhbmdlU2V0TmFtZSA/PyAnY2RrLWRlcGxveS1jaGFuZ2Utc2V0JztcbiAgICBjb25zdCBleGVjdXRlID0gZGVwbG95bWVudE1ldGhvZC5leGVjdXRlID8/IHRydWU7XG4gICAgY29uc3QgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMgPSBkZXBsb3ltZW50TWV0aG9kLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzID8/IGZhbHNlO1xuICAgIGNvbnN0IHJldmVydERyaWZ0ID0gZGVwbG95bWVudE1ldGhvZC5yZXZlcnREcmlmdCA/PyBmYWxzZTtcbiAgICBjb25zdCBjaGFuZ2VTZXREZXNjcmlwdGlvbiA9IGF3YWl0IHRoaXMuY3JlYXRlQ2hhbmdlU2V0KGNoYW5nZVNldE5hbWUsIGV4ZWN1dGUsIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLCByZXZlcnREcmlmdCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oKTtcblxuICAgIGlmIChjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoY2hhbmdlU2V0RGVzY3JpcHRpb24pKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnTm8gY2hhbmdlcyBhcmUgdG8gYmUgcGVyZm9ybWVkIG9uICVzLicsIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgICBpZiAoZXhlY3V0ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnRGVsZXRpbmcgZW1wdHkgY2hhbmdlIHNldCAlcycsIGNoYW5nZVNldERlc2NyaXB0aW9uLkNoYW5nZVNldElkKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2ZuLmRlbGV0ZUNoYW5nZVNldCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZURlcGxveW1lbnQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICdZb3UgdXNlZCB0aGUgLS1mb3JjZSBmbGFnLCBidXQgQ2xvdWRGb3JtYXRpb24gcmVwb3J0ZWQgdGhhdCB0aGUgZGVwbG95bWVudCB3b3VsZCBub3QgbWFrZSBhbnkgY2hhbmdlcy4nLFxuICAgICAgICAgICAgJ0FjY29yZGluZyB0byBDbG91ZEZvcm1hdGlvbiwgYWxsIHJlc291cmNlcyBhcmUgYWxyZWFkeSB1cC10by1kYXRlIHdpdGggdGhlIHN0YXRlIGluIHlvdXIgQ0RLIGFwcC4nLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAnWW91IGNhbm5vdCB1c2UgdGhlIC0tZm9yY2UgZmxhZyB0byBnZXQgcmlkIG9mIGNoYW5nZXMgeW91IG1hZGUgaW4gdGhlIGNvbnNvbGUuIFRyeSB1c2luZycsXG4gICAgICAgICAgICAnQ2xvdWRGb3JtYXRpb24gZHJpZnQgZGV0ZWN0aW9uIGluc3RlYWQ6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi1zdGFjay1kcmlmdC5odG1sJyxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IHRydWUsXG4gICAgICAgIG91dHB1dHM6IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5vdXRwdXRzLFxuICAgICAgICBzdGFja0FybjogY2hhbmdlU2V0RGVzY3JpcHRpb24uU3RhY2tJZCEsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghZXhlY3V0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGZvcm1hdChcbiAgICAgICAgJ0NoYW5nZXNldCAlcyBjcmVhdGVkIGFuZCB3YWl0aW5nIGluIHJldmlldyBmb3IgbWFudWFsIGV4ZWN1dGlvbiAoLS1uby1leGVjdXRlKScsXG4gICAgICAgIGNoYW5nZVNldERlc2NyaXB0aW9uLkNoYW5nZVNldElkLFxuICAgICAgKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgICAgc3RhY2tBcm46IGNoYW5nZVNldERlc2NyaXB0aW9uLlN0YWNrSWQhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgcmVwbGFjZW1lbnRzIGluIHRoZSBjaGFuZ2VzZXQsIGNoZWNrIHRoZSByb2xsYmFjayBmbGFnIGFuZCBzdGFjayBzdGF0dXNcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IGhhc1JlcGxhY2VtZW50KGNoYW5nZVNldERlc2NyaXB0aW9uKTtcbiAgICBjb25zdCBpc1BhdXNlZEZhaWxTdGF0ZSA9IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5pc1JvbGxiYWNrYWJsZTtcbiAgICBjb25zdCByb2xsYmFjayA9IHRoaXMub3B0aW9ucy5yb2xsYmFjayA/PyB0cnVlO1xuICAgIGlmIChpc1BhdXNlZEZhaWxTdGF0ZSAmJiByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxwYXVzZWQtbmVlZC1yb2xsYmFjay1maXJzdCcsIHJlYXNvbjogJ3JlcGxhY2VtZW50Jywgc3RhdHVzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMubmFtZSB9O1xuICAgIH1cbiAgICBpZiAoaXNQYXVzZWRGYWlsU3RhdGUgJiYgcm9sbGJhY2spIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlscGF1c2VkLW5lZWQtcm9sbGJhY2stZmlyc3QnLCByZWFzb246ICdub3Qtbm9yb2xsYmFjaycsIHN0YXR1czogdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLm5hbWUgfTtcbiAgICB9XG4gICAgaWYgKCFyb2xsYmFjayAmJiByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ3JlcGxhY2VtZW50LXJlcXVpcmVzLXJvbGxiYWNrJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVDaGFuZ2VTZXQoY2hhbmdlU2V0RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDaGFuZ2VTZXQoY2hhbmdlU2V0TmFtZTogc3RyaW5nLCB3aWxsRXhlY3V0ZTogYm9vbGVhbiwgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGJvb2xlYW4sIHJldmVydERyaWZ0OiBib29sZWFuKSB7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwT2xkQ2hhbmdlc2V0KGNoYW5nZVNldE5hbWUpO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byBjcmVhdGUgQ2hhbmdlU2V0IHdpdGggbmFtZSAke2NoYW5nZVNldE5hbWV9IHRvICR7dGhpcy52ZXJifSBzdGFjayAke3RoaXMuc3RhY2tOYW1lfWApO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoJyVzOiBjcmVhdGluZyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQuLi4nLCBjaGFsay5ib2xkKHRoaXMuc3RhY2tOYW1lKSkpO1xuICAgIGNvbnN0IGNoYW5nZVNldCA9IGF3YWl0IHRoaXMuY2ZuLmNyZWF0ZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgICAgIENoYW5nZVNldFR5cGU6IHRoaXMub3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCA/ICdJTVBPUlQnIDogdGhpcy51cGRhdGUgPyAnVVBEQVRFJyA6ICdDUkVBVEUnLFxuICAgICAgUmVzb3VyY2VzVG9JbXBvcnQ6IHRoaXMub3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCxcbiAgICAgIERlc2NyaXB0aW9uOiBgQ0RLIENoYW5nZXNldCBmb3IgZXhlY3V0aW9uICR7dGhpcy51dWlkfWAsXG4gICAgICBDbGllbnRUb2tlbjogYGNyZWF0ZSR7dGhpcy51dWlkfWAsXG4gICAgICBJbXBvcnRFeGlzdGluZ1Jlc291cmNlczogaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICBEZXBsb3ltZW50TW9kZTogcmV2ZXJ0RHJpZnQgPyAnUkVWRVJUX0RSSUZUJyA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMuY29tbW9uUHJlcGFyZU9wdGlvbnMoKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdJbml0aWF0ZWQgY3JlYXRpb24gb2YgY2hhbmdlc2V0OiAlczsgd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0LklkKSk7XG4gICAgLy8gRmV0Y2hpbmcgYWxsIHBhZ2VzIGlmIHdlJ2xsIGV4ZWN1dGUsIHNvIHdlIGNhbiBoYXZlIHRoZSBjb3JyZWN0IGNoYW5nZSBjb3VudCB3aGVuIG1vbml0b3JpbmcuXG4gICAgY29uc3QgZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSA9IG5ldyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5KCk7XG4gICAgY29uc3QgZW52UmVzb3VyY2VzID0gZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeS5mb3IodGhpcy5vcHRpb25zLnJlc29sdmVkRW52aXJvbm1lbnQsIHRoaXMub3B0aW9ucy5zZGssIHRoaXMuaW9IZWxwZXIpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXBvcnRlciA9IG5ldyBFYXJseVZhbGlkYXRpb25SZXBvcnRlcih0aGlzLm9wdGlvbnMuc2RrLCBlbnZSZXNvdXJjZXMpO1xuICAgIHJldHVybiB3YWl0Rm9yQ2hhbmdlU2V0KHRoaXMuY2ZuLCB0aGlzLmlvSGVscGVyLCB0aGlzLnN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSwge1xuICAgICAgZmV0Y2hBbGw6IHdpbGxFeGVjdXRlLFxuICAgICAgdmFsaWRhdGlvblJlcG9ydGVyLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ2hhbmdlU2V0KGNoYW5nZVNldDogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnSW5pdGlhdGluZyBleGVjdXRpb24gb2YgY2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzJywgY2hhbmdlU2V0LkNoYW5nZVNldElkLCB0aGlzLnN0YWNrTmFtZSkpO1xuXG4gICAgYXdhaXQgdGhpcy5jZm4uZXhlY3V0ZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0LkNoYW5nZVNldE5hbWUhLFxuICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBgZXhlYyR7dGhpcy51dWlkfWAsXG4gICAgICAuLi50aGlzLmNvbW1vbkV4ZWN1dGVPcHRpb25zKCksXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFxuICAgICAgZm9ybWF0KFxuICAgICAgICAnRXhlY3V0aW9uIG9mIGNoYW5nZXNldCAlcyBvbiBzdGFjayAlcyBoYXMgc3RhcnRlZDsgd2FpdGluZyBmb3IgdGhlIHVwZGF0ZSB0byBjb21wbGV0ZS4uLicsXG4gICAgICAgIGNoYW5nZVNldC5DaGFuZ2VTZXRJZCxcbiAgICAgICAgdGhpcy5zdGFja05hbWUsXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyArMSBmb3IgdGhlIGV4dHJhIGV2ZW50IGVtaXR0ZWQgZnJvbSB1cGRhdGVzLlxuICAgIGNvbnN0IGNoYW5nZVNldExlbmd0aDogbnVtYmVyID0gKGNoYW5nZVNldC5DaGFuZ2VzID8/IFtdKS5sZW5ndGggKyAodGhpcy51cGRhdGUgPyAxIDogMCk7XG4gICAgcmV0dXJuIHRoaXMubW9uaXRvckRlcGxveW1lbnQoY2hhbmdlU2V0LkNyZWF0aW9uVGltZSEsIGNoYW5nZVNldExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsZWFudXBPbGRDaGFuZ2VzZXQoY2hhbmdlU2V0TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICAgIC8vIERlbGV0ZSBhbnkgZXhpc3RpbmcgY2hhbmdlIHNldHMgZ2VuZXJhdGVkIGJ5IENESyBzaW5jZSBjaGFuZ2Ugc2V0IG5hbWVzIG11c3QgYmUgdW5pcXVlLlxuICAgICAgLy8gVGhlIGRlbGV0ZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgYXMgbG9uZyBhcyB0aGUgc3RhY2sgZXhpc3RzIChldmVuIGlmIHRoZSBjaGFuZ2Ugc2V0IGRvZXMgbm90IGV4aXN0KS5cbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYFJlbW92aW5nIGV4aXN0aW5nIGNoYW5nZSBzZXQgd2l0aCBuYW1lICR7Y2hhbmdlU2V0TmFtZX0gaWYgaXQgZXhpc3RzYCk7XG4gICAgICBhd2FpdCB0aGlzLmNmbi5kZWxldGVDaGFuZ2VTZXQoe1xuICAgICAgICBTdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oKSB7XG4gICAgLy8gVXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gb25seSBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgICBjb25zdCB0ZXJtaW5hdGlvblByb3RlY3Rpb24gPSB0aGlzLnN0YWNrQXJ0aWZhY3QudGVybWluYXRpb25Qcm90ZWN0aW9uID8/IGZhbHNlO1xuICAgIGlmICghIXRoaXMuY2xvdWRGb3JtYXRpb25TdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24gIT09IHRlcm1pbmF0aW9uUHJvdGVjdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhcbiAgICAgICAgZm9ybWF0IChcbiAgICAgICAgICAnVXBkYXRpbmcgdGVybWluYXRpb24gcHJvdGVjdGlvbiBmcm9tICVzIHRvICVzIGZvciBzdGFjayAlcycsXG4gICAgICAgICAgdGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICAgICAgdGhpcy5zdGFja05hbWUsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jZm4udXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKHtcbiAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiB0ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdUZXJtaW5hdGlvbiBwcm90ZWN0aW9uIHVwZGF0ZWQgdG8gJXMgZm9yIHN0YWNrICVzJywgdGVybWluYXRpb25Qcm90ZWN0aW9uLCB0aGlzLnN0YWNrTmFtZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGlyZWN0RGVwbG95bWVudCgpOiBQcm9taXNlPFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoJyVzOiAlcyBzdGFjay4uLicsIGNoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpLCB0aGlzLnVwZGF0ZSA/ICd1cGRhdGluZycgOiAnY3JlYXRpbmcnKSk7XG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMudXBkYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbigpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmNmbi51cGRhdGVTdGFjayh7XG4gICAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IGB1cGRhdGUke3RoaXMudXVpZH1gLFxuICAgICAgICAgIC4uLnRoaXMuY29tbW9uUHJlcGFyZU9wdGlvbnMoKSxcbiAgICAgICAgICAuLi50aGlzLmNvbW1vbkV4ZWN1dGVPcHRpb25zKCksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkIGZvciBzdGFjayAlcycsIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgICAgICAgIG5vT3A6IHRydWUsXG4gICAgICAgICAgICBvdXRwdXRzOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyxcbiAgICAgICAgICAgIHN0YWNrQXJuOiB0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tJZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubW9uaXRvckRlcGxveW1lbnQoc3RhcnRUaW1lLCB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGNhbiBzZXQgdGVybWluYXRpb24gcHJvdGVjdGlvbiBkdXJpbmcgY3JlYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvblByb3RlY3Rpb24gPSB0aGlzLnN0YWNrQXJ0aWZhY3QudGVybWluYXRpb25Qcm90ZWN0aW9uID8/IGZhbHNlO1xuXG4gICAgICBhd2FpdCB0aGlzLmNmbi5jcmVhdGVTdGFjayh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogYGNyZWF0ZSR7dGhpcy51dWlkfWAsXG4gICAgICAgIC4uLih0ZXJtaW5hdGlvblByb3RlY3Rpb24gPyB7IEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogdHJ1ZSB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4udGhpcy5jb21tb25QcmVwYXJlT3B0aW9ucygpLFxuICAgICAgICAuLi50aGlzLmNvbW1vbkV4ZWN1dGVPcHRpb25zKCksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMubW9uaXRvckRlcGxveW1lbnQoc3RhcnRUaW1lLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbW9uaXRvckRlcGxveW1lbnQoc3RhcnRUaW1lOiBEYXRlLCBleHBlY3RlZENoYW5nZXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgY29uc3QgbW9uaXRvciA9IG5ldyBTdGFja0FjdGl2aXR5TW9uaXRvcih7XG4gICAgICBjZm46IHRoaXMuY2ZuLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2tBcnRpZmFjdCxcbiAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICByZXNvdXJjZXNUb3RhbDogZXhwZWN0ZWRDaGFuZ2VzLFxuICAgICAgaW9IZWxwZXI6IHRoaXMuaW9IZWxwZXIsXG4gICAgICBjaGFuZ2VTZXRDcmVhdGlvblRpbWU6IHN0YXJ0VGltZSxcbiAgICB9KTtcbiAgICBhd2FpdCBtb25pdG9yLnN0YXJ0KCk7XG5cbiAgICBsZXQgZmluYWxTdGF0ZSA9IHRoaXMuY2xvdWRGb3JtYXRpb25TdGFjaztcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3VjY2Vzc1N0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVwbG95KHRoaXMuY2ZuLCB0aGlzLmlvSGVscGVyLCB0aGlzLnN0YWNrTmFtZSk7XG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IHJlYWxseSBoYXBwZW4sIGJ1dCBjYXRjaCBpdCBhbnl3YXkuIFlvdSBuZXZlciBrbm93LlxuICAgICAgaWYgKCFzdWNjZXNzU3RhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2sgZGVwbG95IGZhaWxlZCAodGhlIHN0YWNrIGRpc2FwcGVhcmVkIHdoaWxlIHdlIHdlcmUgZGVwbG95aW5nIGl0KScpO1xuICAgICAgfVxuICAgICAgZmluYWxTdGF0ZSA9IHN1Y2Nlc3NTdGFjaztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3Ioc3VmZml4V2l0aEVycm9ycyhmb3JtYXRFcnJvck1lc3NhZ2UoZSksIG1vbml0b3IuZXJyb3JzKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IG1vbml0b3Iuc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnU3RhY2sgJXMgaGFzIGNvbXBsZXRlZCB1cGRhdGluZycsIHRoaXMuc3RhY2tOYW1lKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdkaWQtZGVwbG95LXN0YWNrJyxcbiAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgb3V0cHV0czogZmluYWxTdGF0ZS5vdXRwdXRzLFxuICAgICAgc3RhY2tBcm46IGZpbmFsU3RhdGUuc3RhY2tJZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb3B0aW9ucyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBDcmVhdGVTdGFjaywgVXBkYXRlU3RhY2sgYW5kIENyZWF0ZUNoYW5nZVNldFxuICAgKi9cbiAgcHJpdmF0ZSBjb21tb25QcmVwYXJlT3B0aW9ucygpOiBQYXJ0aWFsPFBpY2s8VXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsIENvbW1vblByZXBhcmVPcHRpb25zPj4ge1xuICAgIHJldHVybiB7XG4gICAgICBDYXBhYmlsaXRpZXM6IFsnQ0FQQUJJTElUWV9JQU0nLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLCAnQ0FQQUJJTElUWV9BVVRPX0VYUEFORCddLFxuICAgICAgTm90aWZpY2F0aW9uQVJOczogdGhpcy5vcHRpb25zLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICBQYXJhbWV0ZXJzOiB0aGlzLnN0YWNrUGFyYW1zLmFwaVBhcmFtZXRlcnMsXG4gICAgICBSb2xlQVJOOiB0aGlzLm9wdGlvbnMucm9sZUFybixcbiAgICAgIFRlbXBsYXRlQm9keTogdGhpcy5ib2R5UGFyYW1ldGVyLlRlbXBsYXRlQm9keSxcbiAgICAgIFRlbXBsYXRlVVJMOiB0aGlzLmJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVVUkwsXG4gICAgICBUYWdzOiB0aGlzLm9wdGlvbnMudGFncyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb3B0aW9ucyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBVcGRhdGVTdGFjayBhbmQgQ3JlYXRlQ2hhbmdlU2V0XG4gICAqXG4gICAqIEJlIGNhcmVmdWwgbm90IHRvIGFkZCBpbiBrZXlzIGZvciBvcHRpb25zIHRoYXQgYXJlbid0IHVzZWQsIGFzIHRoZSBmZWF0dXJlcyBtYXkgbm90IGhhdmUgYmVlblxuICAgKiBkZXBsb3llZCBldmVyeXdoZXJlIHlldC5cbiAgICovXG4gIHByaXZhdGUgY29tbW9uRXhlY3V0ZU9wdGlvbnMoKTogUGFydGlhbDxQaWNrPFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0LCBDb21tb25FeGVjdXRlT3B0aW9ucz4+IHtcbiAgICBjb25zdCBzaG91bGREaXNhYmxlUm9sbGJhY2sgPSB0aGlzLm9wdGlvbnMucm9sbGJhY2sgPT09IGZhbHNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAuLi4oc2hvdWxkRGlzYWJsZVJvbGxiYWNrID8geyBEaXNhYmxlUm9sbGJhY2s6IHRydWUgfSA6IHVuZGVmaW5lZCksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIGJlIGRlc3Ryb3llZFxuICAgKi9cbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICBzZGs6IFNESztcbiAgcm9sZUFybj86IHN0cmluZztcbiAgZGVwbG95TmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95U3RhY2tSZXN1bHQge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc3RhY2sgdGhhdCB3YXMgZGVzdHJveWVkLCBpZiBhbnkuXG4gICAqXG4gICAqIElmIHRoZSBzdGFjayBkaWRuJ3QgZXhpc3QgdG8gYmVnaW4gd2l0aCwgdGhlIG9wZXJhdGlvbiB3aWxsIHN1Y2NlZWRcbiAgICogYnV0IHRoaXMgdmFsdWUgd2lsbCBiZSB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBzdGFja0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3Ryb3lTdGFjayhvcHRpb25zOiBEZXN0cm95U3RhY2tPcHRpb25zLCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPERlc3Ryb3lTdGFja1Jlc3VsdD4ge1xuICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5kZXBsb3lOYW1lIHx8IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuICBjb25zdCBjZm4gPSBvcHRpb25zLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gIGNvbnN0IGN1cnJlbnRTdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG4gIGlmICghY3VycmVudFN0YWNrLmV4aXN0cykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBtb25pdG9yID0gbmV3IFN0YWNrQWN0aXZpdHlNb25pdG9yKHtcbiAgICBjZm4sXG4gICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgc3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgIGlvSGVscGVyOiBpb0hlbHBlcixcbiAgfSk7XG4gIGF3YWl0IG1vbml0b3Iuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNmbi5kZWxldGVTdGFjayh7IFN0YWNrTmFtZTogZGVwbG95TmFtZSwgUm9sZUFSTjogb3B0aW9ucy5yb2xlQXJuIH0pO1xuICAgIGNvbnN0IGRlc3Ryb3llZFN0YWNrID0gYXdhaXQgd2FpdEZvclN0YWNrRGVsZXRlKGNmbiwgaW9IZWxwZXIsIGRlcGxveU5hbWUpO1xuICAgIGlmIChkZXN0cm95ZWRTdGFjayAmJiBkZXN0cm95ZWRTdGFjay5zdGFja1N0YXR1cy5uYW1lICE9PSAnREVMRVRFX0NPTVBMRVRFJykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRmFpbGVkIHRvIGRlc3Ryb3kgJHtkZXBsb3lOYW1lfTogJHtkZXN0cm95ZWRTdGFjay5zdGFja1N0YXR1c31gKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFja0FybjogY3VycmVudFN0YWNrLnN0YWNrSWQgfTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihzdWZmaXhXaXRoRXJyb3JzKGZvcm1hdEVycm9yTWVzc2FnZShlKSwgbW9uaXRvci5lcnJvcnMpKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAobW9uaXRvcikge1xuICAgICAgYXdhaXQgbW9uaXRvci5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgd2UgY2FuIHNraXAgZGVwbG95bWVudFxuICpcbiAqIFdlIGRvIHRoaXMgaW4gYSBjb21wbGljYXRlZCB3YXkgYnkgcHJlcHJvY2Vzc2luZyAoaW5zdGVhZCBvZiBqdXN0XG4gKiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzZXQpLCBiZWNhdXNlIGlmIHRoZXJlIGFyZSBuZXN0ZWQgc3RhY2tzIGludm9sdmVkXG4gKiB0aGUgY2hhbmdlc2V0IHdpbGwgYWx3YXlzIHNob3cgdGhlIG5lc3RlZCBzdGFja3MgYXMgbmVlZGluZyB0byBiZVxuICogdXBkYXRlZCwgYW5kIHRoZSBkZXBsb3ltZW50IHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBpbiBlZmZlY3Qgbm90XG4gKiBkbyBhbnl0aGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FuU2tpcERlcGxveShcbiAgZGVwbG95U3RhY2tPcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMsXG4gIGNsb3VkRm9ybWF0aW9uU3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIHBhcmFtZXRlckNoYW5nZXM6IFBhcmFtZXRlckNoYW5nZXMsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBkZXBsb3lOYW1lID0gZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveU5hbWUgfHwgZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnN0YWNrTmFtZTtcbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IGNoZWNraW5nIGlmIHdlIGNhbiBza2lwIGRlcGxveWApO1xuXG4gIC8vIEZvcmNlZCBkZXBsb3lcbiAgaWYgKGRlcGxveVN0YWNrT3B0aW9ucy5mb3JjZURlcGxveW1lbnQpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogZm9yY2VkIGRlcGxveW1lbnRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDcmVhdGluZyBjaGFuZ2VzZXQgb25seSAoZGVmYXVsdCB0cnVlKSwgbmV2ZXIgc2tpcFxuICBpZiAoXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2NoYW5nZS1zZXQnICYmXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2QuZXhlY3V0ZSA9PT0gZmFsc2VcbiAgKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IC0tbm8tZXhlY3V0ZSwgYWx3YXlzIGNyZWF0aW5nIGNoYW5nZSBzZXRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEcmlmdC1hd2FyZVxuICBpZiAoXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2Q/Lm1ldGhvZCA9PT0gJ2NoYW5nZS1zZXQnICYmXG4gICAgZGVwbG95U3RhY2tPcHRpb25zLmRlcGxveW1lbnRNZXRob2QucmV2ZXJ0RHJpZnRcbiAgKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IC0tcmV2ZXJ0LWRyaWZ0LCBhbHdheXMgY3JlYXRpbmcgY2hhbmdlIHNldGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE5vIGV4aXN0aW5nIHN0YWNrXG4gIGlmICghY2xvdWRGb3JtYXRpb25TdGFjay5leGlzdHMpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogbm8gZXhpc3Rpbmcgc3RhY2tgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBoYXMgY2hhbmdlZCAoYXNzZXRzIHRha2VuIGludG8gYWNjb3VudCBoZXJlKVxuICBpZiAoSlNPTi5zdHJpbmdpZnkoZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlbXBsYXRlKSAhPT0gSlNPTi5zdHJpbmdpZnkoYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZW1wbGF0ZSBoYXMgY2hhbmdlZGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRhZ3MgaGF2ZSBjaGFuZ2VkXG4gIGlmICghY29tcGFyZVRhZ3MoY2xvdWRGb3JtYXRpb25TdGFjay50YWdzLCBkZXBsb3lTdGFja09wdGlvbnMudGFncyA/PyBbXSkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogdGFncyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBOb3RpZmljYXRpb24gYXJucyBoYXZlIGNoYW5nZWRcbiAgaWYgKCFhcnJheUVxdWFscyhjbG91ZEZvcm1hdGlvblN0YWNrLm5vdGlmaWNhdGlvbkFybnMsIGRlcGxveVN0YWNrT3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zID8/IFtdKSkge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiBub3RpZmljYXRpb24gYXJucyBoYXZlIGNoYW5nZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcbiAgaWYgKCEhZGVwbG95U3RhY2tPcHRpb25zLnN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gISFjbG91ZEZvcm1hdGlvblN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbikge1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke2RlcGxveU5hbWV9OiB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBQYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZFxuICBpZiAocGFyYW1ldGVyQ2hhbmdlcykge1xuICAgIGlmIChwYXJhbWV0ZXJDaGFuZ2VzID09PSAnc3NtJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHNvbWUgcGFyYW1ldGVycyBjb21lIGZyb20gU1NNIHNvIHdlIGhhdmUgdG8gYXNzdW1lIHRoZXkgbWF5IGhhdmUgY2hhbmdlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgJHtkZXBsb3lOYW1lfTogcGFyYW1ldGVycyBoYXZlIGNoYW5nZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXhpc3Rpbmcgc3RhY2sgaXMgaW4gYSBmYWlsZWQgc3RhdGVcbiAgaWYgKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMuaXNGYWlsdXJlKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7ZGVwbG95TmFtZX06IHN0YWNrIGlzIGluIGEgZmFpbHVyZSBzdGF0ZWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFdlIGNhbiBza2lwIGRlcGxveVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gbGlzdCBvZiB0YWdzLCByZXR1cm5zIHRydWUgaWYgaWRlbnRpY2FsLlxuICovXG5mdW5jdGlvbiBjb21wYXJlVGFncyhhOiBUYWdbXSwgYjogVGFnW10pOiBib29sZWFuIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYVRhZyBvZiBhKSB7XG4gICAgY29uc3QgYlRhZyA9IGIuZmluZCgodGFnKSA9PiB0YWcuS2V5ID09PSBhVGFnLktleSk7XG5cbiAgICBpZiAoIWJUYWcgfHwgYlRhZy5WYWx1ZSAhPT0gYVRhZy5WYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzdWZmaXhXaXRoRXJyb3JzKG1zZzogc3RyaW5nLCBlcnJvcnM/OiBzdHJpbmdbXSkge1xuICByZXR1cm4gZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwID8gYCR7bXNnfTogJHtlcnJvcnMuam9pbignLCAnKX1gIDogbXNnO1xufVxuXG5mdW5jdGlvbiBhcnJheUVxdWFscyhhOiBhbnlbXSwgYjogYW55W10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuZXZlcnkoKGl0ZW0pID0+IGIuaW5jbHVkZXMoaXRlbSkpICYmIGIuZXZlcnkoKGl0ZW0pID0+IGEuaW5jbHVkZXMoaXRlbSkpO1xufVxuXG5mdW5jdGlvbiBoYXNSZXBsYWNlbWVudChjczogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KSB7XG4gIHJldHVybiAoY3MuQ2hhbmdlcyA/PyBbXSkuc29tZShjID0+IHtcbiAgICBjb25zdCBhID0gYy5SZXNvdXJjZUNoYW5nZT8uUG9saWN5QWN0aW9uO1xuICAgIHJldHVybiBhID09PSAnUmVwbGFjZUFuZERlbGV0ZScgfHwgYSA9PT0gJ1JlcGxhY2VBbmRSZXRhaW4nIHx8IGEgPT09ICdSZXBsYWNlQW5kU25hcHNob3QnO1xuICB9KTtcbn1cbiJdfQ==
@@ -289,7 +289,7 @@ class Deployments {
289
289
  force: options.forcePublish,
290
290
  });
291
291
  if (publisher.hasFailures) {
292
- throw new toolkit_error_1.ToolkitError(`Failed to publish asset ${asset.displayName(true)}`);
292
+ throw toolkit_error_1.ToolkitError.withCause(`Failed to publish asset ${asset.displayName(true)}`, new AggregateError(publisher.failures.map(f => f.error)));
293
293
  }
294
294
  }
295
295
  async allowCrossAccountAssetPublishingForEnv(stack) {
@@ -353,4 +353,4 @@ class ParallelSafeAssetProgress extends asset_publishing_1.BasePublishProgressLi
353
353
  function suffixWithErrors(msg, errors) {
354
354
  return errors && errors.length > 0 ? `${msg}: ${errors.join(', ')}` : msg;
355
355
  }
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ltZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsc0RBQXNEO0FBRXRELCtCQUErQjtBQUMvQixxRUFBZ0U7QUFDaEUseURBRzRCO0FBQzVCLHVDQUdtQjtBQUNuQixxQ0FBcUU7QUFFckUsaURBQTJEO0FBRzNELCtEQUEyRDtBQUMzRCxxQ0FBZ0Q7QUFNaEQsc0RBSzJCO0FBQzNCLGdEQUE4RTtBQUk5RSxrREFBeUY7QUFFekYsa0RBQTZEO0FBRTdELE1BQU0sb0NBQW9DLEdBQUcsRUFBRSxDQUFDO0FBOFBoRDs7OztHQUlHO0FBQ0gsTUFBYSxXQUFXO0lBNkJPO0lBNUJiLElBQUksQ0FBb0I7SUFFeEM7Ozs7Ozs7T0FPRztJQUNjLGdCQUFnQixDQUFjO0lBRS9DOzs7Ozs7O09BT0c7SUFDYyxzQkFBc0IsQ0FBYztJQUVwQyxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXdELENBQUM7SUFFMUYsaUNBQWlDLENBQXNCO0lBRTlDLFFBQVEsQ0FBVztJQUVwQyxZQUE2QixLQUF1QjtRQUF2QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLCtCQUFpQixDQUMvQixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsZ0JBQWdCLElBQUkseUNBQTBCLEVBQ3BELElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUF3QztRQUN0RSxPQUFPLElBQUksQ0FB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QUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztDQUNGO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsTUFBaUI7SUFDdEQsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGNka19hc3NldHMgZnJvbSAnQGF3cy1jZGsvY2RrLWFzc2V0cy1saWInO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgQXNzZXRNYW5pZmVzdEJ1aWxkZXIgfSBmcm9tICcuL2Fzc2V0LW1hbmlmZXN0LWJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgQmFzZVB1Ymxpc2hQcm9ncmVzc0xpc3RlbmVyLFxuICBQdWJsaXNoaW5nQXdzLFxufSBmcm9tICcuL2Fzc2V0LXB1Ymxpc2hpbmcnO1xuaW1wb3J0IHtcbiAgc3RhYmlsaXplU3RhY2ssXG4gIHVwbG9hZFN0YWNrVGVtcGxhdGVBc3NldHMsXG59IGZyb20gJy4vY2ZuLWFwaSc7XG5pbXBvcnQgeyBkZXRlcm1pbmVBbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZyB9IGZyb20gJy4vY2hlY2tzJztcblxuaW1wb3J0IHsgZGVwbG95U3RhY2ssIGRlc3Ryb3lTdGFjayB9IGZyb20gJy4vZGVwbG95LXN0YWNrJztcbmltcG9ydCB0eXBlIHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuL2RlcGxveW1lbnQtcmVzdWx0JztcbmltcG9ydCB0eXBlIHsgRGVwbG95bWVudE1ldGhvZCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHtcbiAgVGVtcGxhdGUsXG4gIFJvb3RUZW1wbGF0ZVdpdGhOZXN0ZWRTdGFja3MsXG59IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7XG4gIENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIGxvYWRDdXJyZW50VGVtcGxhdGUsXG4gIGxvYWRDdXJyZW50VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzLFxuICBtYWtlQm9keVBhcmFtZXRlcixcbn0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudFJlc291cmNlcywgRW52aXJvbm1lbnRBY2Nlc3MgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgdHlwZSB7IEhvdHN3YXBNb2RlLCBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXMgfSBmcm9tICcuLi9ob3Rzd2FwL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcywgUmVzb3VyY2VzVG9JbXBvcnQgfSBmcm9tICcuLi9yZXNvdXJjZS1pbXBvcnQnO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eU1vbml0b3IsIFN0YWNrRXZlbnRQb2xsZXIsIFJvbGxiYWNrQ2hvaWNlIH0gZnJvbSAnLi4vc3RhY2stZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgVGFnIH0gZnJvbSAnLi4vdGFncyc7XG5pbXBvcnQgeyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRSB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5cbmNvbnN0IEJPT1RTVFJBUF9TVEFDS19WRVJTSU9OX0ZPUl9ST0xMQkFDSyA9IDIzO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayB0byBkZXBsb3lcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiByb2xlIGZvciB0aGUgZGVwbG95bWVudCAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEN1cnJlbnQgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVG9waWMgQVJOcyB0byBzZW5kIGEgbWVzc2FnZSB3aGVuIGRlcGxveW1lbnQgZmluaXNoZXMgKHBhc3MgdGhyb3VnaCB0byBDbG91ZEZvcm1hdGlvbilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG5hbWUgdW5kZXIgd2hpY2ggc3RhY2sgd2lsbCBiZSBkZXBsb3llZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSBhcnRpZmFjdCBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkZXBsb3lOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB0b29sa2l0IHN0YWNrLCBpZiBub3QgdGhlIGRlZmF1bHQgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCAnQ0RLVG9vbGtpdCdcbiAgICovXG4gIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYXNzZXQgSURzIHdoaWNoIHNob3VsZCBOT1QgYmUgYnVpbHQgb3IgdXBsb2FkZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBCdWlsZCBhbGwgYXNzZXRzXG4gICAqL1xuICByZWFkb25seSByZXVzZUFzc2V0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0YWdzIChwYXNzIHRocm91Z2ggdG8gQ2xvdWRGb3JtYXRpb24pXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogVGFnW107XG5cbiAgLyoqXG4gICAqIFN0YWdlIHRoZSBjaGFuZ2Ugc2V0IGJ1dCBkb24ndCBleGVjdXRlIGl0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGRlcHJlY2F0ZWQgVXNlICdkZXBsb3ltZW50TWV0aG9kJyBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgbmFtZSB0byB1c2UgZm9yIHRoZSBDbG91ZEZvcm1hdGlvbiBjaGFuZ2Ugc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RlcGxveW1lbnRNZXRob2QnIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZVNldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlbGVjdCB0aGUgZGVwbG95bWVudCBtZXRob2QgKGRpcmVjdCBvciB1c2luZyBhIGNoYW5nZSBzZXQpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2hhbmdlIHNldCB3aXRoIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudE1ldGhvZD86IERlcGxveW1lbnRNZXRob2Q7XG5cbiAgLyoqXG4gICAqIEZvcmNlIGRlcGxveW1lbnQsIGV2ZW4gaWYgdGhlIGRlcGxveWVkIHRlbXBsYXRlIGlzIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBkZXBsb3kuXG4gICAqIEBkZWZhdWx0IGZhbHNlIGRlcGxveW1lbnQgd2lsbCBiZSBza2lwcGVkIGlmIHRoZSB0ZW1wbGF0ZSBpcyBpZGVudGljYWxcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4dHJhIHBhcmFtZXRlcnMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gIC8qKlxuICAgKiBVc2UgcHJldmlvdXMgdmFsdWVzIGZvciB1bnNwZWNpZmllZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIElmIG5vdCBzZXQsIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBldmVyeSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1c2VQcmV2aW91c1BhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBlcmZvcm0gYSAnaG90c3dhcCcgZGVwbG95bWVudC5cbiAgICogQSAnaG90c3dhcCcgZGVwbG95bWVudCB3aWxsIGF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCBDbG91ZEZvcm1hdGlvblxuICAgKiBhbmQgdXBkYXRlIHRoZSBhZmZlY3RlZCByZXNvdXJjZXMgbGlrZSBMYW1iZGEgZnVuY3Rpb25zIGRpcmVjdGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlRgIGZvciByZWd1bGFyIGRlcGxveW1lbnRzLCBgSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZYCBmb3IgJ3dhdGNoJyBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RlcGxveW1lbnRNZXRob2QnIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXA/OiBIb3Rzd2FwTW9kZTtcblxuICAvKipcbiAgICogUHJvcGVydGllcyB0aGF0IGNvbmZpZ3VyZSBob3Rzd2FwIGJlaGF2aW9yXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSAnZGVwbG95bWVudE1ldGhvZCcgaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzPzogSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBwZXJmb3JtaW5nIEFXUyBTREsgY2FsbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm90aGluZyBleHRyYSBpcyBhcHBlbmRlZCB0byB0aGUgVXNlci1BZ2VudCBoZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhVXNlckFnZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGV4aXN0aW5nIHJlc291cmNlcyB0byBiZSBJTVBPUlRFRCBpbnRvIHRoZSBzdGFjaywgaW5zdGVhZCBvZiBiZWluZyBDUkVBVEVEXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB1c2UgdGhpcyBnaXZlbiB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHRoZSBzdG9yZWQgb25lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHRoZSBzdG9yZWQgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlVGVtcGxhdGU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYnVpbGQvcHVibGlzaCBhc3NldHMgaW4gcGFyYWxsZWxcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSBUbyByZW1haW4gYmFja3dhcmQgY29tcGF0aWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0UGFyYWxsZWxpc20/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBpZiB0aGUgYXBwIGNvbnRhaW5zIG5vIHN0YWNrcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdGhpcyBvcHRpb24gc2VlbXMgdG8gYmUgdW5zZWQgaW5zaWRlIGRlcGxveW1lbnRzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVOb1N0YWNrcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9sbGJhY2tTdGFja09wdGlvbnMge1xuICAvKipcbiAgICogU3RhY2sgdG8gcm9sbCBiYWNrXG4gICAqL1xuICByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRpb24gcm9sZSBmb3IgdGhlIGRlcGxveW1lbnQgKHBhc3MgdGhyb3VnaCB0byBDbG91ZEZvcm1hdGlvbilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IHJvbGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHRvb2xraXQgc3RhY2ssIGlmIG5vdCB0aGUgZGVmYXVsdCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0ICdDREtUb29sa2l0J1xuICAgKi9cbiAgcmVhZG9ubHkgdG9vbGtpdFN0YWNrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IG9ycGhhbiBhbGwgZmFpbGVkIHJlc291cmNlcyBkdXJpbmcgdGhlIHJvbGxiYWNrXG4gICAqXG4gICAqIFRoaXMgd2lsbCBmb3JjZSBhIHJvbGxiYWNrIHRoYXQgb3RoZXJ3aXNlIHdvdWxkIGhhdmUgZmFpbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JwaGFuRmFpbGVkUmVzb3VyY2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3JwaGFuIHRoZSByZXNvdXJjZXMgd2l0aCB0aGUgZ2l2ZW4gbG9naWNhbCBJRHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBvcnBoYW5pbmdcbiAgICovXG4gIHJlYWRvbmx5IG9ycGhhbkxvZ2ljYWxJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byB2YWxpZGF0ZSB0aGUgdmVyc2lvbiBvZiB0aGUgYm9vdHN0cmFwIHN0YWNrIHBlcm1pc3Npb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRlQm9vdHN0cmFwU3RhY2tWZXJzaW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUm9sbGJhY2tTdGFja1Jlc3VsdCA9IHsgcmVhZG9ubHkgc3RhY2tBcm46IHN0cmluZyB9ICYgKFxuICB8IHsgcmVhZG9ubHkgbm90SW5Sb2xsYmFja2FibGVTdGF0ZTogdHJ1ZSB9XG4gIHwgeyByZWFkb25seSBzdWNjZXNzOiB0cnVlOyBub3RJblJvbGxiYWNrYWJsZVN0YXRlPzogdW5kZWZpbmVkIH1cbik7XG5cbmludGVyZmFjZSBBc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogU3RhY2sgd2l0aCBhc3NldHMgdG8gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRpb24gcm9sZSBmb3IgdGhlIGJ1aWxkaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEN1cnJlbnQgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFN0YWNrQXNzZXRzT3B0aW9ucyBleHRlbmRzIEFzc2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayBuYW1lIHRoaXMgYXNzZXQgaXMgZm9yXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQdWJsaXNoU3RhY2tBc3NldHNPcHRpb25zIGV4dGVuZHMgQXNzZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YWNrIG5hbWUgdGhpcyBhc3NldCBpcyBmb3JcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWx3YXlzIHB1Ymxpc2gsIGV2ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlUHVibGlzaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveVN0YWNrT3B0aW9ucyB7XG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIGRlcGxveU5hbWU/OiBzdHJpbmc7XG4gIHJvbGVBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tFeGlzdHNPcHRpb25zIHtcbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgZGVwbG95TmFtZT86IHN0cmluZztcbiAgdHJ5TG9va3VwUm9sZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudHNQcm9wcyB7XG4gIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgcmVhZG9ubHkgdG9vbGtpdFN0YWNrTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xufVxuXG4vKipcbiAqIFNjb3BlIGZvciBhIHNpbmdsZSBzZXQgb2YgZGVwbG95bWVudHMgZnJvbSBhIHNldCBvZiBDbG91ZCBBc3NlbWJseSBBcnRpZmFjdHNcbiAqXG4gKiBNYW5hZ2VzIGxvb2t1cCBvZiBTREtzLCBCb290c3RyYXAgc3RhY2tzLCBldGMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZXBsb3ltZW50cyB7XG4gIHB1YmxpYyByZWFkb25seSBlbnZzOiBFbnZpcm9ubWVudEFjY2VzcztcblxuICAvKipcbiAgICogU0RLIHByb3ZpZGVyIGZvciBhc3NldCBwdWJsaXNoaW5nIChkbyBub3QgdXNlIGZvciBhbnl0aGluZyBlbHNlKS5cbiAgICpcbiAgICogVGhpcyBTREsgcHJvdmlkZXIgaXMgb25seSBhbGxvd2VkIHRvIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgbm90aGluZyBlbHNlLlxuICAgKlxuICAgKiBJdCdzIG5vdCBhIGRpZmZlcmVudCBvYmplY3QsIGJ1dCB0aGUgZmllbGQgbmFtZSBzaG91bGQgaW1wbHkgdGhhdCB0aGlzXG4gICAqIG9iamVjdCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHksIGV4Y2VwdCB0byBwYXNzIHRvIGFzc2V0IGhhbmRsaW5nIHJvdXRpbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhc3NldFNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcblxuICAvKipcbiAgICogU0RLIHByb3ZpZGVyIGZvciBwYXNzaW5nIHRvIGRlcGxveVN0YWNrXG4gICAqXG4gICAqIFRoaXMgU0RLIHByb3ZpZGVyIGlzIG9ubHkgYWxsb3dlZCB0byBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UsIG5vdGhpbmcgZWxzZS5cbiAgICpcbiAgICogSXQncyBub3QgYSBkaWZmZXJlbnQgb2JqZWN0LCBidXQgdGhlIGZpZWxkIG5hbWUgc2hvdWxkIGltcGx5IHRoYXQgdGhpc1xuICAgKiBvYmplY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBleGNlcHQgdG8gcGFzcyB0byBgZGVwbG95U3RhY2tgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lTdGFja1Nka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHB1Ymxpc2hlckNhY2hlID0gbmV3IE1hcDxjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsIGNka19hc3NldHMuQXNzZXRQdWJsaXNoaW5nPigpO1xuXG4gIHByaXZhdGUgX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveW1lbnRzUHJvcHMpIHtcbiAgICB0aGlzLmFzc2V0U2RrUHJvdmlkZXIgPSBwcm9wcy5zZGtQcm92aWRlcjtcbiAgICB0aGlzLmRlcGxveVN0YWNrU2RrUHJvdmlkZXIgPSBwcm9wcy5zZGtQcm92aWRlcjtcbiAgICB0aGlzLmlvSGVscGVyID0gcHJvcHMuaW9IZWxwZXI7XG4gICAgdGhpcy5lbnZzID0gbmV3IEVudmlyb25tZW50QWNjZXNzKFxuICAgICAgcHJvcHMuc2RrUHJvdmlkZXIsXG4gICAgICBwcm9wcy50b29sa2l0U3RhY2tOYW1lID8/IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FLFxuICAgICAgdGhpcy5pb0hlbHBlcixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8Y3hhcGkuRW52aXJvbm1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnZzLnJlc29sdmVTdGFja0Vudmlyb25tZW50KHN0YWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcyhcbiAgICByb290U3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIHJldHJpZXZlUHJvY2Vzc2VkVGVtcGxhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogUHJvbWlzZTxSb290VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzPiB7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTG9va3VwQmVzdEVmZm9ydChyb290U3RhY2tBcnRpZmFjdCk7XG4gICAgcmV0dXJuIGxvYWRDdXJyZW50VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzKHJvb3RTdGFja0FydGlmYWN0LCBlbnYuc2RrLCByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkQ3VycmVudFRlbXBsYXRlKHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBSZWFkaW5nIGV4aXN0aW5nIHRlbXBsYXRlIGZvciBzdGFjayAke3N0YWNrQXJ0aWZhY3QuZGlzcGxheU5hbWV9LmApO1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0Zvckxvb2t1cEJlc3RFZmZvcnQoc3RhY2tBcnRpZmFjdCk7XG4gICAgcmV0dXJuIGxvYWRDdXJyZW50VGVtcGxhdGUoc3RhY2tBcnRpZmFjdCwgZW52LnNkayk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzKFxuICAgIHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgKTogUHJvbWlzZTxSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXM+IHtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBSZXRyaWV2aW5nIHRlbXBsYXRlIHN1bW1hcnkgZm9yIHN0YWNrICR7c3RhY2tBcnRpZmFjdC5kaXNwbGF5TmFtZX0uYCk7XG4gICAgLy8gQ3VycmVudGx5LCBuZWVkcyB0byB1c2UgYGRlcGxveS1yb2xlYCBzaW5jZSBpdCBtYXkgbmVlZCB0byByZWFkIHRlbXBsYXRlcyBpbiB0aGUgc3RhZ2luZ1xuICAgIC8vIGJ1Y2tldCB3aGljaCBoYXZlIGJlZW4gZW5jcnlwdGVkIHdpdGggYSBLTVMga2V5IChhbmQgbG9va3VwLXJvbGUgbWF5IG5vdCByZWFkIGVuY3J5cHRlZCB0aGluZ3MpXG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yUmVhZE9ubHlTdGFja09wZXJhdGlvbnMoc3RhY2tBcnRpZmFjdCk7XG4gICAgY29uc3QgY2ZuID0gZW52LnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gICAgYXdhaXQgdXBsb2FkU3RhY2tUZW1wbGF0ZUFzc2V0cyhzdGFja0FydGlmYWN0LCB0aGlzKTtcblxuICAgIC8vIFVwbG9hZCB0aGUgdGVtcGxhdGUsIGlmIG5lY2Vzc2FyeSwgYmVmb3JlIHBhc3NpbmcgaXQgdG8gQ0ZOXG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBBc3NldE1hbmlmZXN0QnVpbGRlcigpO1xuICAgIGNvbnN0IGNmblBhcmFtID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgICB0aGlzLmlvSGVscGVyLFxuICAgICAgc3RhY2tBcnRpZmFjdCxcbiAgICAgIGVudi5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgICAgYnVpbGRlcixcbiAgICAgIGVudi5yZXNvdXJjZXMsXG4gICAgKTtcblxuICAgIC8vIElmIHRoZSBgbWFrZUJvZHlQYXJhbWV0ZXJgIGJlZm9yZSB0aGlzIGFkZGVkIGFzc2V0cywgbWFrZSBzdXJlIHRvIHB1Ymxpc2ggdGhlbSBiZWZvcmVcbiAgICAvLyBjYWxsaW5nIHRoZSBBUEkuXG4gICAgY29uc3QgYWRkZWRBc3NldHMgPSBidWlsZGVyLnRvTWFuaWZlc3Qoc3RhY2tBcnRpZmFjdC5hc3NlbWJseS5kaXJlY3RvcnkpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgYWRkZWRBc3NldHMuZW50cmllcykge1xuICAgICAgYXdhaXQgdGhpcy5idWlsZFNpbmdsZUFzc2V0KCduby12ZXJzaW9uLXZhbGlkYXRpb24nLCBhZGRlZEFzc2V0cywgZW50cnksIHtcbiAgICAgICAgc3RhY2s6IHN0YWNrQXJ0aWZhY3QsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucHVibGlzaFNpbmdsZUFzc2V0KGFkZGVkQXNzZXRzLCBlbnRyeSwge1xuICAgICAgICBzdGFjazogc3RhY2tBcnRpZmFjdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlU3VtbWFyeShjZm5QYXJhbSk7XG4gICAgaWYgKCFyZXNwb25zZS5SZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoJ0dldFRlbXBsYXRlU3VtbWFyeSBBUEkgY2FsbCBkaWQgbm90IHJldHVybiBcIlJlc291cmNlSWRlbnRpZmllclN1bW1hcmllc1wiJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5SZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMgPz8gW107XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGxldCBkZXBsb3ltZW50TWV0aG9kID0gb3B0aW9ucy5kZXBsb3ltZW50TWV0aG9kO1xuICAgIC8vIEhvbm9yIHRoZSBvbGQgb3B0aW9ucyBiZWNhdXNlIHRoaXMgQVBJIGlzIGV4cG9ydGVkIGZyb20gdGhlIENMSSBhcyBwYXJ0IG9mIHRoZSBsZWdhY3kgZXhwb3J0c1xuICAgIC8vIEBUT0RPIHJlbW92ZSB3aGVuIHdlIGRvbid0IGhhdmUgbGVnYWN5IGV4cG9ydHMgYW55bW9yZVxuICAgIGlmIChvcHRpb25zLmNoYW5nZVNldE5hbWUgfHwgb3B0aW9ucy5leGVjdXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChkZXBsb3ltZW50TWV0aG9kKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgXCJZb3UgY2Fubm90IHN1cHBseSBib3RoICdkZXBsb3ltZW50TWV0aG9kJyBhbmQgJ2NoYW5nZVNldE5hbWUvZXhlY3V0ZScuIFN1cHBseSBvbmUgb3IgdGhlIG90aGVyLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IG9wdGlvbnMuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgZXhlY3V0ZTogb3B0aW9ucy5leGVjdXRlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JNdXRhYmxlU3RhY2tPcGVyYXRpb25zKG9wdGlvbnMuc3RhY2spO1xuXG4gICAgLy8gRG8gYSB2ZXJpZmljYXRpb24gb2YgdGhlIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uXG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbihcbiAgICAgIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgICAgb3B0aW9ucy5zdGFjay5yZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbixcbiAgICAgIG9wdGlvbnMuc3RhY2suYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyLFxuICAgICAgZW52LnJlc291cmNlcyk7XG5cbiAgICBjb25zdCBleGVjdXRpb25Sb2xlQXJuID0gYXdhaXQgZW52LnJlcGxhY2VQbGFjZWhvbGRlcnMob3B0aW9ucy5yb2xlQXJuID8/IG9wdGlvbnMuc3RhY2suY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Sb2xlQXJuKTtcblxuICAgIHJldHVybiBkZXBsb3lTdGFjayh7XG4gICAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICAgIHJlc29sdmVkRW52aXJvbm1lbnQ6IGVudi5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgICAgZGVwbG95TmFtZTogb3B0aW9ucy5kZXBsb3lOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uQXJuczogb3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zLFxuICAgICAgc2RrOiBlbnYuc2RrLFxuICAgICAgc2RrUHJvdmlkZXI6IHRoaXMuZGVwbG95U3RhY2tTZGtQcm92aWRlcixcbiAgICAgIHJvbGVBcm46IGV4ZWN1dGlvblJvbGVBcm4sXG4gICAgICByZXVzZUFzc2V0czogb3B0aW9ucy5yZXVzZUFzc2V0cyxcbiAgICAgIGVudlJlc291cmNlczogZW52LnJlc291cmNlcyxcbiAgICAgIHRhZ3M6IG9wdGlvbnMudGFncyxcbiAgICAgIGRlcGxveW1lbnRNZXRob2QsXG4gICAgICBmb3JjZURlcGxveW1lbnQ6IG9wdGlvbnMuZm9yY2VEZXBsb3ltZW50LFxuICAgICAgcGFyYW1ldGVyczogb3B0aW9ucy5wYXJhbWV0ZXJzLFxuICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVycyxcbiAgICAgIHJvbGxiYWNrOiBvcHRpb25zLnJvbGxiYWNrLFxuICAgICAgaG90c3dhcDogb3B0aW9ucy5ob3Rzd2FwLFxuICAgICAgaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzOiBvcHRpb25zLmhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbiAgICAgIGV4dHJhVXNlckFnZW50OiBvcHRpb25zLmV4dHJhVXNlckFnZW50LFxuICAgICAgcmVzb3VyY2VzVG9JbXBvcnQ6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgICBvdmVycmlkZVRlbXBsYXRlOiBvcHRpb25zLm92ZXJyaWRlVGVtcGxhdGUsXG4gICAgICBhc3NldFBhcmFsbGVsaXNtOiBvcHRpb25zLmFzc2V0UGFyYWxsZWxpc20sXG4gICAgfSwgdGhpcy5pb0hlbHBlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcm9sbGJhY2tTdGFjayhvcHRpb25zOiBSb2xsYmFja1N0YWNrT3B0aW9ucyk6IFByb21pc2U8Um9sbGJhY2tTdGFja1Jlc3VsdD4ge1xuICAgIGxldCByZXNvdXJjZXNUb1NraXA6IHN0cmluZ1tdID0gb3B0aW9ucy5vcnBoYW5Mb2dpY2FsSWRzID8/IFtdO1xuICAgIGlmIChvcHRpb25zLm9ycGhhbkZhaWxlZFJlc291cmNlcyAmJiByZXNvdXJjZXNUb1NraXAubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ2Fubm90IGNvbWJpbmUgLS1mb3JjZSB3aXRoIC0tb3JwaGFuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTXV0YWJsZVN0YWNrT3BlcmF0aW9ucyhvcHRpb25zLnN0YWNrKTtcblxuICAgIGlmIChvcHRpb25zLnZhbGlkYXRlQm9vdHN0cmFwU3RhY2tWZXJzaW9uID8/IHRydWUpIHtcbiAgICAgIC8vIERvIGEgdmVyaWZpY2F0aW9uIG9mIHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbihcbiAgICAgICAgb3B0aW9ucy5zdGFjay5zdGFja05hbWUsXG4gICAgICAgIEJPT1RTVFJBUF9TVEFDS19WRVJTSU9OX0ZPUl9ST0xMQkFDSyxcbiAgICAgICAgb3B0aW9ucy5zdGFjay5ib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXIsXG4gICAgICAgIGVudi5yZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGNmbiA9IGVudi5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICBjb25zdCBkZXBsb3lOYW1lID0gb3B0aW9ucy5zdGFjay5zdGFja05hbWU7XG5cbiAgICAvLyBXZSBsb29wIGluIGNhc2Ugb2YgYC0tZm9yY2VgIGFuZCB0aGUgc3RhY2sgZW5kcyB1cCBpbiBgQ09OVElOVUVfVVBEQVRFX1JPTExCQUNLYC5cbiAgICBsZXQgbWF4TG9vcHMgPSAxMDtcbiAgICB3aGlsZSAobWF4TG9vcHMtLSkge1xuICAgICAgY29uc3QgY2xvdWRGb3JtYXRpb25TdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgZGVwbG95TmFtZSk7XG4gICAgICBjb25zdCBzdGFja0FybiA9IGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tJZDtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMucm9sZUFybiA/PyBvcHRpb25zLnN0YWNrLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUm9sZUFybik7XG5cbiAgICAgIHN3aXRjaCAoY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5yb2xsYmFja0Nob2ljZSkge1xuICAgICAgICBjYXNlIFJvbGxiYWNrQ2hvaWNlLk5PTkU6XG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKGBTdGFjayAke2RlcGxveU5hbWV9IGRvZXMgbm90IG5lZWQgYSByb2xsYmFjazogJHtjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzfWApO1xuICAgICAgICAgIHJldHVybiB7IHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsIG5vdEluUm9sbGJhY2thYmxlU3RhdGU6IHRydWUgfTtcblxuICAgICAgICBjYXNlIFJvbGxiYWNrQ2hvaWNlLlNUQVJUX1JPTExCQUNLOlxuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYEluaXRpYXRpbmcgcm9sbGJhY2sgb2Ygc3RhY2sgJHtkZXBsb3lOYW1lfWApO1xuICAgICAgICAgIGF3YWl0IGNmbi5yb2xsYmFja1N0YWNrKHtcbiAgICAgICAgICAgIFN0YWNrTmFtZTogZGVwbG95TmFtZSxcbiAgICAgICAgICAgIFJvbGVBUk46IGV4ZWN1dGlvblJvbGVBcm4sXG4gICAgICAgICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgICAgIC8vIEVuYWJsaW5nIHRoaXMgaXMganVzdCB0aGUgYmV0dGVyIG92ZXJhbGwgZGVmYXVsdCwgdGhlIG9ubHkgcmVhc29uIGl0IGlzbid0IHRoZSB1cHN0cmVhbSBkZWZhdWx0IGlzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBSZXRhaW5FeGNlcHRPbkNyZWF0ZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJvbGxiYWNrQ2hvaWNlLkNPTlRJTlVFX1VQREFURV9ST0xMQkFDSzpcbiAgICAgICAgICBpZiAob3B0aW9ucy5vcnBoYW5GYWlsZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIGZhaWxlZCByZXNvdXJjZXMgZnJvbSB0aGUgZGVwbG95bWVudCBhbmQgYXV0b21hdGljYWxseSBza2lwIHRoZW1cbiAgICAgICAgICAgIC8vIChVc2luZyBkZXBsb3ltZW50IGxvZyBiZWNhdXNlIHdlIGRlZmluaXRlbHkgaGF2ZSBgRGVzY3JpYmVTdGFja0V2ZW50c2AgcGVybWlzc2lvbnMsIGFuZCB3ZSBtaWdodCBub3QgaGF2ZVxuICAgICAgICAgICAgLy8gYERlc2NyaWJlU3RhY2tSZXNvdXJjZXNgIHBlcm1pc3Npb25zKS5cbiAgICAgICAgICAgIGNvbnN0IHBvbGxlciA9IG5ldyBTdGFja0V2ZW50UG9sbGVyKGNmbiwge1xuICAgICAgICAgICAgICBzdGFja05hbWU6IGRlcGxveU5hbWUsXG4gICAgICAgICAgICAgIHN0YWNrU3RhdHVzZXM6IFsnUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLCAnVVBEQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTJ10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICAgICAgICByZXNvdXJjZXNUb1NraXAgPSBwb2xsZXIucmVzb3VyY2VFcnJvcnNcbiAgICAgICAgICAgICAgLmZpbHRlcigocikgPT4gIXIuaXNTdGFja0V2ZW50ICYmIHIucGFyZW50U3RhY2tMb2dpY2FsSWRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgLm1hcCgocikgPT4gci5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2tpcERlc2NyaXB0aW9uID0gcmVzb3VyY2VzVG9Ta2lwLmxlbmd0aCA+IDAgPyBgIChvcnBoYW5pbmc6ICR7cmVzb3VyY2VzVG9Ta2lwLmpvaW4oJywgJyl9KWAgOiAnJztcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oYENvbnRpbnVpbmcgcm9sbGJhY2sgb2Ygc3RhY2sgJHtkZXBsb3lOYW1lfSR7c2tpcERlc2NyaXB0aW9ufWApO1xuICAgICAgICAgIGF3YWl0IGNmbi5jb250aW51ZVVwZGF0ZVJvbGxiYWNrKHtcbiAgICAgICAgICAgIFN0YWNrTmFtZTogZGVwbG95TmFtZSxcbiAgICAgICAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogcmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgUm9sZUFSTjogZXhlY3V0aW9uUm9sZUFybixcbiAgICAgICAgICAgIFJlc291cmNlc1RvU2tpcDogcmVzb3VyY2VzVG9Ta2lwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUm9sbGJhY2tDaG9pY2UuUk9MTEJBQ0tfRkFJTEVEOlxuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgICAgIGBTdGFjayAke2RlcGxveU5hbWV9IGZhaWxlZCBjcmVhdGlvbiBhbmQgcm9sbGJhY2suIFRoaXMgc3RhdGUgY2Fubm90IGJlIHJvbGxlZCBiYWNrLiBZb3UgY2FuIHJlY3JlYXRlIHRoaXMgc3RhY2sgYnkgcnVubmluZyAnY2RrIGRlcGxveScuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IHN0YWNrQXJuLCBub3RJblJvbGxiYWNrYWJsZVN0YXRlOiB0cnVlIH07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBVbmV4cGVjdGVkIHJvbGxiYWNrIGNob2ljZTogJHtjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrU3RhdHVzLnJvbGxiYWNrQ2hvaWNlfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtb25pdG9yID0gbmV3IFN0YWNrQWN0aXZpdHlNb25pdG9yKHtcbiAgICAgICAgY2ZuLFxuICAgICAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICAgICAgc3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgICAgICBpb0hlbHBlcjogdGhpcy5pb0hlbHBlcixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgbW9uaXRvci5zdGFydCgpO1xuXG4gICAgICBsZXQgc3RhY2tFcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmaW5hbFN0YWNrU3RhdGUgPSBjbG91ZEZvcm1hdGlvblN0YWNrO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc1N0YWNrID0gYXdhaXQgc3RhYmlsaXplU3RhY2soY2ZuLCB0aGlzLmlvSGVscGVyLCBkZXBsb3lOYW1lKTtcblxuICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuLCBidXQgY2F0Y2ggaXQgYW55d2F5LiBZb3UgbmV2ZXIga25vdy5cbiAgICAgICAgaWYgKCFzdWNjZXNzU3RhY2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdTdGFjayBkZXBsb3kgZmFpbGVkICh0aGUgc3RhY2sgZGlzYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSByb2xsaW5nIGl0IGJhY2spJyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxTdGFja1N0YXRlID0gc3VjY2Vzc1N0YWNrO1xuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IG1vbml0b3IuZXJyb3JzLmpvaW4oJywgJyk7XG4gICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICBzdGFja0Vycm9yTWVzc2FnZSA9IGVycm9ycztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHN0YWNrRXJyb3JNZXNzYWdlID0gc3VmZml4V2l0aEVycm9ycyhmb3JtYXRFcnJvck1lc3NhZ2UoZSksIG1vbml0b3IuZXJyb3JzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IG1vbml0b3Iuc3RvcCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxTdGFja1N0YXRlLnN0YWNrU3RhdHVzLmlzUm9sbGJhY2tTdWNjZXNzIHx8ICFzdGFja0Vycm9yTWVzc2FnZSkge1xuICAgICAgICByZXR1cm4geyBzdGFja0Fybiwgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICAvLyBFaXRoZXIgd2UgbmVlZCB0byBpZ25vcmUgc29tZSByZXNvdXJjZXMgdG8gY29udGludWUgdGhlIHJvbGxiYWNrLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgaWYgKGZpbmFsU3RhY2tTdGF0ZS5zdGFja1N0YXR1cy5yb2xsYmFja0Nob2ljZSA9PT0gUm9sbGJhY2tDaG9pY2UuQ09OVElOVUVfVVBEQVRFX1JPTExCQUNLICYmIG9wdGlvbnMub3JwaGFuRmFpbGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIC8vIERvIGFub3RoZXIgbG9vcC1kZS1sb29wXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICBgJHtzdGFja0Vycm9yTWVzc2FnZX0gKGZpeCBwcm9ibGVtIGFuZCByZXRyeSwgb3Igb3JwaGFuIHRoZXNlIHJlc291cmNlcyB1c2luZyAtLW9ycGhhbiBvciAtLWZvcmNlKWAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgXCJSb2xsYmFjayBkaWQgbm90IGZpbmlzaCBhZnRlciBhIGxhcmdlIG51bWJlciBvZiBpdGVyYXRpb25zOyBzdG9wcGluZyBiZWNhdXNlIGl0IGxvb2tzIGxpa2Ugd2UncmUgbm90IG1ha2luZyBwcm9ncmVzcyBhbnltb3JlLiBZb3UgY2FuIHJldHJ5IGlmIHJvbGxiYWNrIHdhcyBwcm9ncmVzc2luZyBhcyBleHBlY3RlZC5cIixcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3lTdGFjayhvcHRpb25zOiBEZXN0cm95U3RhY2tPcHRpb25zKSB7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTXV0YWJsZVN0YWNrT3BlcmF0aW9ucyhvcHRpb25zLnN0YWNrKTtcbiAgICBjb25zdCBleGVjdXRpb25Sb2xlQXJuID0gYXdhaXQgZW52LnJlcGxhY2VQbGFjZWhvbGRlcnMob3B0aW9ucy5yb2xlQXJuID8/IG9wdGlvbnMuc3RhY2suY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Sb2xlQXJuKTtcblxuICAgIHJldHVybiBkZXN0cm95U3RhY2soe1xuICAgICAgc2RrOiBlbnYuc2RrLFxuICAgICAgcm9sZUFybjogZXhlY3V0aW9uUm9sZUFybixcbiAgICAgIHN0YWNrOiBvcHRpb25zLnN0YWNrLFxuICAgICAgZGVwbG95TmFtZTogb3B0aW9ucy5kZXBsb3lOYW1lLFxuICAgIH0sIHRoaXMuaW9IZWxwZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YWNrRXhpc3RzKG9wdGlvbnM6IFN0YWNrRXhpc3RzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBlbnY7XG4gICAgaWYgKG9wdGlvbnMudHJ5TG9va3VwUm9sZSkge1xuICAgICAgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTG9va3VwQmVzdEVmZm9ydChvcHRpb25zLnN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yUmVhZE9ubHlTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG4gICAgfVxuICAgIGNvbnN0IHN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoZW52LnNkay5jbG91ZEZvcm1hdGlvbigpLCBvcHRpb25zLmRlcGxveU5hbWUgPz8gb3B0aW9ucy5zdGFjay5zdGFja05hbWUpO1xuICAgIHJldHVybiBzdGFjay5leGlzdHM7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBzaW5nbGUgYXNzZXQgZnJvbSBhbiBhc3NldCBtYW5pZmVzdFxuICAgKlxuICAgKiBJZiBhbiBhc3NlcnQgbWFuaWZlc3QgYXJ0aWZhY3QgaXMgZ2l2ZW4sIHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgKiB3aWxsIGJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbnN0cmFpbnRzIGluIHRoYXQgbWFuaWZlc3QgYXJ0aWZhY3QuXG4gICAqIElmIHRoYXQgaXMgbm90IG5lY2Vzc2FyeSwgYCduby12ZXJzaW9uLXZhbGlkYXRpb24nYCBjYW4gYmUgcGFzc2VkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzdHlsaXN0aWMvbWF4LWxlblxuICBwdWJsaWMgYXN5bmMgYnVpbGRTaW5nbGVBc3NldChcbiAgICBhc3NldEFydGlmYWN0OiBjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3QgfCAnbm8tdmVyc2lvbi12YWxpZGF0aW9uJyxcbiAgICBhc3NldE1hbmlmZXN0OiBjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsXG4gICAgYXNzZXQ6IGNka19hc3NldHMuSU1hbmlmZXN0RW50cnksXG4gICAgb3B0aW9uczogQnVpbGRTdGFja0Fzc2V0c09wdGlvbnMsXG4gICkge1xuICAgIGlmIChhc3NldEFydGlmYWN0ICE9PSAnbm8tdmVyc2lvbi12YWxpZGF0aW9uJykge1xuICAgICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yUmVhZE9ubHlTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQm9vdHN0cmFwU3RhY2tWZXJzaW9uKFxuICAgICAgICBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgYXNzZXRBcnRpZmFjdC5yZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbixcbiAgICAgICAgYXNzZXRBcnRpZmFjdC5ib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXIsXG4gICAgICAgIGVudi5yZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkRW52aXJvbm1lbnQgPSBhd2FpdCB0aGlzLmVudnMucmVzb2x2ZVN0YWNrRW52aXJvbm1lbnQob3B0aW9ucy5zdGFjayk7XG5cbiAgICBjb25zdCBwdWJsaXNoZXIgPSB0aGlzLmNhY2hlZFB1Ymxpc2hlcihhc3NldE1hbmlmZXN0LCByZXNvbHZlZEVudmlyb25tZW50LCBvcHRpb25zLnN0YWNrTmFtZSk7XG4gICAgYXdhaXQgcHVibGlzaGVyLmJ1aWxkRW50cnkoYXNzZXQpO1xuICAgIGlmIChwdWJsaXNoZXIuaGFzRmFpbHVyZXMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEZhaWxlZCB0byBidWlsZCBhc3NldCAke2Fzc2V0LmRpc3BsYXlOYW1lKGZhbHNlKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBhIHNpbmdsZSBhc3NldCBmcm9tIGFuIGFzc2V0IG1hbmlmZXN0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHVibGlzaFNpbmdsZUFzc2V0KFxuICAgIGFzc2V0TWFuaWZlc3Q6IGNka19hc3NldHMuQXNzZXRNYW5pZmVzdCxcbiAgICBhc3NldDogY2RrX2Fzc2V0cy5JTWFuaWZlc3RFbnRyeSxcbiAgICBvcHRpb25zOiBQdWJsaXNoU3RhY2tBc3NldHNPcHRpb25zLFxuICApIHtcbiAgICBjb25zdCBzdGFja0VudiA9IGF3YWl0IHRoaXMuZW52cy5yZXNvbHZlU3RhY2tFbnZpcm9ubWVudChvcHRpb25zLnN0YWNrKTtcblxuICAgIC8vIE5vIG5lZWQgdG8gdmFsaWRhdGUgYW55bW9yZSwgd2UgYWxyZWFkeSBkaWQgdGhhdCBkdXJpbmcgYnVpbGRcbiAgICBjb25zdCBwdWJsaXNoZXIgPSB0aGlzLmNhY2hlZFB1Ymxpc2hlcihhc3NldE1hbmlmZXN0LCBzdGFja0Vudiwgb3B0aW9ucy5zdGFja05hbWUpO1xuICAgIGF3YWl0IHB1Ymxpc2hlci5wdWJsaXNoRW50cnkoYXNzZXQsIHtcbiAgICAgIGFsbG93Q3Jvc3NBY2NvdW50OiBhd2FpdCB0aGlzLmFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nRm9yRW52KG9wdGlvbnMuc3RhY2spLFxuICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VQdWJsaXNoLFxuICAgIH0pO1xuICAgIGlmIChwdWJsaXNoZXIuaGFzRmFpbHVyZXMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEZhaWxlZCB0byBwdWJsaXNoIGFzc2V0ICR7YXNzZXQuZGlzcGxheU5hbWUodHJ1ZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZ0ZvckVudihzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0ZvclJlYWRPbmx5U3RhY2tPcGVyYXRpb25zKHN0YWNrKTtcbiAgICAgIHRoaXMuX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nID0gYXdhaXQgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcoZW52LnNkaywgdGhpcy5pb0hlbHBlciwgdGhpcy5wcm9wcy50b29sa2l0U3RhY2tOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIGEgc2luZ2xlIGFzc2V0IGhhcyBiZWVuIHB1Ymxpc2hlZCBhbHJlYWR5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNTaW5nbGVBc3NldFB1Ymxpc2hlZChcbiAgICBhc3NldE1hbmlmZXN0OiBjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsXG4gICAgYXNzZXQ6IGNka19hc3NldHMuSU1hbmlmZXN0RW50cnksXG4gICAgb3B0aW9uczogUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgc3RhY2tFbnYgPSBhd2FpdCB0aGlzLmVudnMucmVzb2x2ZVN0YWNrRW52aXJvbm1lbnQob3B0aW9ucy5zdGFjayk7XG4gICAgY29uc3QgcHVibGlzaGVyID0gdGhpcy5jYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdCwgc3RhY2tFbnYsIG9wdGlvbnMuc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gcHVibGlzaGVyLmlzRW50cnlQdWJsaXNoZWQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGJvb3RzdHJhcCBzdGFjayBoYXMgdGhlIHJpZ2h0IHZlcnNpb24gZm9yIHRoaXMgc3RhY2tcbiAgICpcbiAgICogQ2FsbCBpbnRvIGVudlJlc291cmNlcy52YWxpZGF0ZVZlcnNpb24sIGJ1dCBwcmVwZW5kIHRoZSBzdGFjayBuYW1lIGluIGNhc2Ugb2YgZmFpbHVyZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBlbnZSZXNvdXJjZXM6IEVudmlyb25tZW50UmVzb3VyY2VzLFxuICApIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW52UmVzb3VyY2VzLnZhbGlkYXRlVmVyc2lvbihyZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbiwgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYCR7c3RhY2tOYW1lfTogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdDogY2RrX2Fzc2V0cy5Bc3NldE1hbmlmZXN0LCBlbnY6IGN4YXBpLkVudmlyb25tZW50LCBzdGFja05hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMucHVibGlzaGVyQ2FjaGUuZ2V0KGFzc2V0TWFuaWZlc3QpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSBzdGFja05hbWUgPyBgJHtjaGFsay5ib2xkKHN0YWNrTmFtZSl9OiBgIDogJyc7XG4gICAgY29uc3QgcHVibGlzaGVyID0gbmV3IGNka19hc3NldHMuQXNzZXRQdWJsaXNoaW5nKGFzc2V0TWFuaWZlc3QsIHtcbiAgICAgIC8vIFRoZSBBc3NldFB1Ymxpc2hpbmcgY2xhc3MgdGFrZXMgY2FyZSBvZiByb2xlIGFzc3VtaW5nIGV0Yywgc28gaXQncyBva2F5IHRvXG4gICAgICAvLyBnaXZlIGl0IGEgZGlyZWN0IGBTZGtQcm92aWRlcmAuXG4gICAgICBhd3M6IG5ldyBQdWJsaXNoaW5nQXdzKHRoaXMuYXNzZXRTZGtQcm92aWRlciwgZW52KSxcbiAgICAgIHByb2dyZXNzTGlzdGVuZXI6IG5ldyBQYXJhbGxlbFNhZmVBc3NldFByb2dyZXNzKHByZWZpeCwgdGhpcy5pb0hlbHBlciksXG4gICAgfSk7XG4gICAgdGhpcy5wdWJsaXNoZXJDYWNoZS5zZXQoYXNzZXRNYW5pZmVzdCwgcHVibGlzaGVyKTtcbiAgICByZXR1cm4gcHVibGlzaGVyO1xuICB9XG59XG5cbi8qKlxuICogQXNzZXQgcHJvZ3Jlc3MgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggcGVyY2VudGFnZXMgKGN1cnJlbnRseSlcbiAqL1xuY2xhc3MgUGFyYWxsZWxTYWZlQXNzZXRQcm9ncmVzcyBleHRlbmRzIEJhc2VQdWJsaXNoUHJvZ3Jlc3NMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJlZml4OiBzdHJpbmcsIGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHN1cGVyKGlvSGVscGVyKTtcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRNZXNzYWdlKHR5cGU6IGNka19hc3NldHMuRXZlbnRUeXBlLCBldmVudDogY2RrX2Fzc2V0cy5JUHVibGlzaFByb2dyZXNzKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9JHt0eXBlfTogJHtldmVudC5tZXNzYWdlfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VmZml4V2l0aEVycm9ycyhtc2c6IHN0cmluZywgZXJyb3JzPzogc3RyaW5nW10pIHtcbiAgcmV0dXJuIGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCA/IGAke21zZ306ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCA6IG1zZztcbn1cbiJdfQ==
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ltZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsc0RBQXNEO0FBRXRELCtCQUErQjtBQUMvQixxRUFBZ0U7QUFDaEUseURBRzRCO0FBQzVCLHVDQUdtQjtBQUNuQixxQ0FBcUU7QUFFckUsaURBQTJEO0FBRzNELCtEQUEyRDtBQUMzRCxxQ0FBZ0Q7QUFNaEQsc0RBSzJCO0FBQzNCLGdEQUE4RTtBQUk5RSxrREFBeUY7QUFFekYsa0RBQTZEO0FBRTdELE1BQU0sb0NBQW9DLEdBQUcsRUFBRSxDQUFDO0FBOFBoRDs7OztHQUlHO0FBQ0gsTUFBYSxXQUFXO0lBNkJPO0lBNUJiLElBQUksQ0FBb0I7SUFFeEM7Ozs7Ozs7T0FPRztJQUNjLGdCQUFnQixDQUFjO0lBRS9DOzs7Ozs7O09BT0c7SUFDYyxzQkFBc0IsQ0FBYztJQUVwQyxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXdELENBQUM7SUFFMUYsaUNBQWlDLENBQXNCO0lBRTlDLFFBQVEsQ0FBVztJQUVwQyxZQUE2QixLQUF1QjtRQUF2QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLCtCQUFpQixDQUMvQixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsZ0JBQWdCLElBQUkseUNBQTBCLEVBQ3BELElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUF3QztRQUN0RSxPQUFPLElBQUksQ0FB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QUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxVQUFVLENBQUMsSUFBMEIsRUFBRSxLQUFrQztRQUNqRixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLE1BQWlCO0lBQ3RELE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjZGtfYXNzZXRzIGZyb20gJ0Bhd3MtY2RrL2Nkay1hc3NldHMtbGliJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB7XG4gIEJhc2VQdWJsaXNoUHJvZ3Jlc3NMaXN0ZW5lcixcbiAgUHVibGlzaGluZ0F3cyxcbn0gZnJvbSAnLi9hc3NldC1wdWJsaXNoaW5nJztcbmltcG9ydCB7XG4gIHN0YWJpbGl6ZVN0YWNrLFxuICB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzLFxufSBmcm9tICcuL2Nmbi1hcGknO1xuaW1wb3J0IHsgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcgfSBmcm9tICcuL2NoZWNrcyc7XG5cbmltcG9ydCB7IGRlcGxveVN0YWNrLCBkZXN0cm95U3RhY2sgfSBmcm9tICcuL2RlcGxveS1zdGFjayc7XG5pbXBvcnQgdHlwZSB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi9kZXBsb3ltZW50LXJlc3VsdCc7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRNZXRob2QgfSBmcm9tICcuLi8uLi9hY3Rpb25zL2RlcGxveSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7XG4gIFRlbXBsYXRlLFxuICBSb290VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzLFxufSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQge1xuICBDbG91ZEZvcm1hdGlvblN0YWNrLFxuICBsb2FkQ3VycmVudFRlbXBsYXRlLFxuICBsb2FkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcyxcbiAgbWFrZUJvZHlQYXJhbWV0ZXIsXG59IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnRSZXNvdXJjZXMsIEVudmlyb25tZW50QWNjZXNzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHR5cGUgeyBIb3Rzd2FwTW9kZSwgSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzIH0gZnJvbSAnLi4vaG90c3dhcC9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMsIFJlc291cmNlc1RvSW1wb3J0IH0gZnJvbSAnLi4vcmVzb3VyY2UtaW1wb3J0JztcbmltcG9ydCB7IFN0YWNrQWN0aXZpdHlNb25pdG9yLCBTdGFja0V2ZW50UG9sbGVyLCBSb2xsYmFja0Nob2ljZSB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IFRhZyB9IGZyb20gJy4uL3RhZ3MnO1xuaW1wb3J0IHsgREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUUgfSBmcm9tICcuLi90b29sa2l0LWluZm8nO1xuXG5jb25zdCBCT09UU1RSQVBfU1RBQ0tfVkVSU0lPTl9GT1JfUk9MTEJBQ0sgPSAyMztcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lTdGFja09wdGlvbnMge1xuICAvKipcbiAgICogU3RhY2sgdG8gZGVwbG95XG4gICAqL1xuICByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRpb24gcm9sZSBmb3IgdGhlIGRlcGxveW1lbnQgKHBhc3MgdGhyb3VnaCB0byBDbG91ZEZvcm1hdGlvbilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IHJvbGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvcGljIEFSTnMgdG8gc2VuZCBhIG1lc3NhZ2Ugd2hlbiBkZXBsb3ltZW50IGZpbmlzaGVzIChwYXNzIHRocm91Z2ggdG8gQ2xvdWRGb3JtYXRpb24pXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBuYW1lIHVuZGVyIHdoaWNoIHN0YWNrIHdpbGwgYmUgZGVwbG95ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2UgYXJ0aWZhY3QgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdG9vbGtpdCBzdGFjaywgaWYgbm90IHRoZSBkZWZhdWx0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ0NES1Rvb2xraXQnXG4gICAqL1xuICByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFzc2V0IElEcyB3aGljaCBzaG91bGQgTk9UIGJlIGJ1aWx0IG9yIHVwbG9hZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnVpbGQgYWxsIGFzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VBc3NldHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3RhY2sgdGFncyAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBTdGFnZSB0aGUgY2hhbmdlIHNldCBidXQgZG9uJ3QgZXhlY3V0ZSBpdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBkZXByZWNhdGVkIFVzZSAnZGVwbG95bWVudE1ldGhvZCcgaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG5hbWUgdG8gdXNlIGZvciB0aGUgQ2xvdWRGb3JtYXRpb24gY2hhbmdlIHNldC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlICdkZXBsb3ltZW50TWV0aG9kJyBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGRlcGxveW1lbnQgbWV0aG9kIChkaXJlY3Qgb3IgdXNpbmcgYSBjaGFuZ2Ugc2V0KVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENoYW5nZSBzZXQgd2l0aCBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRNZXRob2Q/OiBEZXBsb3ltZW50TWV0aG9kO1xuXG4gIC8qKlxuICAgKiBGb3JjZSBkZXBsb3ltZW50LCBldmVuIGlmIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZSBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSB3ZSBhcmUgYWJvdXQgdG8gZGVwbG95LlxuICAgKiBAZGVmYXVsdCBmYWxzZSBkZXBsb3ltZW50IHdpbGwgYmUgc2tpcHBlZCBpZiB0aGUgdGVtcGxhdGUgaXMgaWRlbnRpY2FsXG4gICAqL1xuICByZWFkb25seSBmb3JjZURlcGxveW1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBwYXJhbWV0ZXJzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogVXNlIHByZXZpb3VzIHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBJZiBub3Qgc2V0LCBhbGwgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZXZlcnkgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUm9sbGJhY2sgZmFpbGVkIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwZXJmb3JtIGEgJ2hvdHN3YXAnIGRlcGxveW1lbnQuXG4gICAqIEEgJ2hvdHN3YXAnIGRlcGxveW1lbnQgd2lsbCBhdHRlbXB0IHRvIHNob3J0LWNpcmN1aXQgQ2xvdWRGb3JtYXRpb25cbiAgICogYW5kIHVwZGF0ZSB0aGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGxpa2UgTGFtYmRhIGZ1bmN0aW9ucyBkaXJlY3RseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UYCBmb3IgcmVndWxhciBkZXBsb3ltZW50cywgYEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWWAgZm9yICd3YXRjaCcgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlICdkZXBsb3ltZW50TWV0aG9kJyBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwPzogSG90c3dhcE1vZGU7XG5cbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgdGhhdCBjb25maWd1cmUgaG90c3dhcCBiZWhhdmlvclxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RlcGxveW1lbnRNZXRob2QnIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcz86IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcztcblxuICAvKipcbiAgICogVGhlIGV4dHJhIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyIHdoZW4gcGVyZm9ybWluZyBBV1MgU0RLIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vdGhpbmcgZXh0cmEgaXMgYXBwZW5kZWQgdG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyXG4gICAqL1xuICByZWFkb25seSBleHRyYVVzZXJBZ2VudD86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBleGlzdGluZyByZXNvdXJjZXMgdG8gYmUgSU1QT1JURUQgaW50byB0aGUgc3RhY2ssIGluc3RlYWQgb2YgYmVpbmcgQ1JFQVRFRFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzVG9JbXBvcnQ/OiBSZXNvdXJjZXNUb0ltcG9ydDtcblxuICAvKipcbiAgICogSWYgcHJlc2VudCwgdXNlIHRoaXMgZ2l2ZW4gdGVtcGxhdGUgaW5zdGVhZCBvZiB0aGUgc3RvcmVkIG9uZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSB0aGUgc3RvcmVkIHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZVRlbXBsYXRlPzogYW55O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGJ1aWxkL3B1Ymxpc2ggYXNzZXRzIGluIHBhcmFsbGVsXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUgVG8gcmVtYWluIGJhY2t3YXJkIGNvbXBhdGlibGUuXG4gICAqL1xuICByZWFkb25seSBhc3NldFBhcmFsbGVsaXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgaWYgdGhlIGFwcCBjb250YWlucyBubyBzdGFja3MuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHRoaXMgb3B0aW9uIHNlZW1zIHRvIGJlIHVuc2VkIGluc2lkZSBkZXBsb3ltZW50c1xuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlTm9TdGFja3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGxiYWNrU3RhY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YWNrIHRvIHJvbGwgYmFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogRXhlY3V0aW9uIHJvbGUgZm9yIHRoZSBkZXBsb3ltZW50IChwYXNzIHRocm91Z2ggdG8gQ2xvdWRGb3JtYXRpb24pXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCByb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB0b29sa2l0IHN0YWNrLCBpZiBub3QgdGhlIGRlZmF1bHQgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCAnQ0RLVG9vbGtpdCdcbiAgICovXG4gIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBvcnBoYW4gYWxsIGZhaWxlZCByZXNvdXJjZXMgZHVyaW5nIHRoZSByb2xsYmFja1xuICAgKlxuICAgKiBUaGlzIHdpbGwgZm9yY2UgYSByb2xsYmFjayB0aGF0IG90aGVyd2lzZSB3b3VsZCBoYXZlIGZhaWxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG9ycGhhbkZhaWxlZFJlc291cmNlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9ycGhhbiB0aGUgcmVzb3VyY2VzIHdpdGggdGhlIGdpdmVuIGxvZ2ljYWwgSURzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gb3JwaGFuaW5nXG4gICAqL1xuICByZWFkb25seSBvcnBoYW5Mb2dpY2FsSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIHZlcnNpb24gb2YgdGhlIGJvb3RzdHJhcCBzdGFjayBwZXJtaXNzaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJvbGxiYWNrU3RhY2tSZXN1bHQgPSB7IHJlYWRvbmx5IHN0YWNrQXJuOiBzdHJpbmcgfSAmIChcbiAgfCB7IHJlYWRvbmx5IG5vdEluUm9sbGJhY2thYmxlU3RhdGU6IHRydWUgfVxuICB8IHsgcmVhZG9ubHkgc3VjY2VzczogdHJ1ZTsgbm90SW5Sb2xsYmFja2FibGVTdGF0ZT86IHVuZGVmaW5lZCB9XG4pO1xuXG5pbnRlcmZhY2UgQXNzZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YWNrIHdpdGggYXNzZXRzIHRvIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogRXhlY3V0aW9uIHJvbGUgZm9yIHRoZSBidWlsZGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IHJvbGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTdGFja0Fzc2V0c09wdGlvbnMgZXh0ZW5kcyBBc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogU3RhY2sgbmFtZSB0aGlzIGFzc2V0IGlzIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucyBleHRlbmRzIEFzc2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayBuYW1lIHRoaXMgYXNzZXQgaXMgZm9yXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBwdWJsaXNoLCBldmVuIGlmIGl0IGFscmVhZHkgZXhpc3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZVB1Ymxpc2g/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lTdGFja09wdGlvbnMge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuICByb2xlQXJuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrRXhpc3RzT3B0aW9ucyB7XG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIGRlcGxveU5hbWU/OiBzdHJpbmc7XG4gIHRyeUxvb2t1cFJvbGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRzUHJvcHMge1xuICByZWFkb25seSBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG4gIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbn1cblxuLyoqXG4gKiBTY29wZSBmb3IgYSBzaW5nbGUgc2V0IG9mIGRlcGxveW1lbnRzIGZyb20gYSBzZXQgb2YgQ2xvdWQgQXNzZW1ibHkgQXJ0aWZhY3RzXG4gKlxuICogTWFuYWdlcyBsb29rdXAgb2YgU0RLcywgQm9vdHN0cmFwIHN0YWNrcywgZXRjLlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudHMge1xuICBwdWJsaWMgcmVhZG9ubHkgZW52czogRW52aXJvbm1lbnRBY2Nlc3M7XG5cbiAgLyoqXG4gICAqIFNESyBwcm92aWRlciBmb3IgYXNzZXQgcHVibGlzaGluZyAoZG8gbm90IHVzZSBmb3IgYW55dGhpbmcgZWxzZSkuXG4gICAqXG4gICAqIFRoaXMgU0RLIHByb3ZpZGVyIGlzIG9ubHkgYWxsb3dlZCB0byBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UsIG5vdGhpbmcgZWxzZS5cbiAgICpcbiAgICogSXQncyBub3QgYSBkaWZmZXJlbnQgb2JqZWN0LCBidXQgdGhlIGZpZWxkIG5hbWUgc2hvdWxkIGltcGx5IHRoYXQgdGhpc1xuICAgKiBvYmplY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBleGNlcHQgdG8gcGFzcyB0byBhc3NldCBoYW5kbGluZyByb3V0aW5lcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzZXRTZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFNESyBwcm92aWRlciBmb3IgcGFzc2luZyB0byBkZXBsb3lTdGFja1xuICAgKlxuICAgKiBUaGlzIFNESyBwcm92aWRlciBpcyBvbmx5IGFsbG93ZWQgdG8gYmUgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLCBub3RoaW5nIGVsc2UuXG4gICAqXG4gICAqIEl0J3Mgbm90IGEgZGlmZmVyZW50IG9iamVjdCwgYnV0IHRoZSBmaWVsZCBuYW1lIHNob3VsZCBpbXBseSB0aGF0IHRoaXNcbiAgICogb2JqZWN0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSwgZXhjZXB0IHRvIHBhc3MgdG8gYGRlcGxveVN0YWNrYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95U3RhY2tTZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwdWJsaXNoZXJDYWNoZSA9IG5ldyBNYXA8Y2RrX2Fzc2V0cy5Bc3NldE1hbmlmZXN0LCBjZGtfYXNzZXRzLkFzc2V0UHVibGlzaGluZz4oKTtcblxuICBwcml2YXRlIF9hbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBEZXBsb3ltZW50c1Byb3BzKSB7XG4gICAgdGhpcy5hc3NldFNka1Byb3ZpZGVyID0gcHJvcHMuc2RrUHJvdmlkZXI7XG4gICAgdGhpcy5kZXBsb3lTdGFja1Nka1Byb3ZpZGVyID0gcHJvcHMuc2RrUHJvdmlkZXI7XG4gICAgdGhpcy5pb0hlbHBlciA9IHByb3BzLmlvSGVscGVyO1xuICAgIHRoaXMuZW52cyA9IG5ldyBFbnZpcm9ubWVudEFjY2VzcyhcbiAgICAgIHByb3BzLnNka1Byb3ZpZGVyLFxuICAgICAgcHJvcHMudG9vbGtpdFN0YWNrTmFtZSA/PyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRSxcbiAgICAgIHRoaXMuaW9IZWxwZXIsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgZW52aXJvbm1lbnQgZm9yIGEgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUVudmlyb25tZW50KHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpOiBQcm9taXNlPGN4YXBpLkVudmlyb25tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZW52cy5yZXNvbHZlU3RhY2tFbnZpcm9ubWVudChzdGFjayk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZEN1cnJlbnRUZW1wbGF0ZVdpdGhOZXN0ZWRTdGFja3MoXG4gICAgcm9vdFN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlOiBib29sZWFuID0gZmFsc2UsXG4gICk6IFByb21pc2U8Um9vdFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcz4ge1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0Zvckxvb2t1cEJlc3RFZmZvcnQocm9vdFN0YWNrQXJ0aWZhY3QpO1xuICAgIHJldHVybiBsb2FkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcyhyb290U3RhY2tBcnRpZmFjdCwgZW52LnNkaywgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZEN1cnJlbnRUZW1wbGF0ZShzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgUmVhZGluZyBleGlzdGluZyB0ZW1wbGF0ZSBmb3Igc3RhY2sgJHtzdGFja0FydGlmYWN0LmRpc3BsYXlOYW1lfS5gKTtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JMb29rdXBCZXN0RWZmb3J0KHN0YWNrQXJ0aWZhY3QpO1xuICAgIHJldHVybiBsb2FkQ3VycmVudFRlbXBsYXRlKHN0YWNrQXJ0aWZhY3QsIGVudi5zZGspO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcyhcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICk6IFByb21pc2U8UmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzPiB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgUmV0cmlldmluZyB0ZW1wbGF0ZSBzdW1tYXJ5IGZvciBzdGFjayAke3N0YWNrQXJ0aWZhY3QuZGlzcGxheU5hbWV9LmApO1xuICAgIC8vIEN1cnJlbnRseSwgbmVlZHMgdG8gdXNlIGBkZXBsb3ktcm9sZWAgc2luY2UgaXQgbWF5IG5lZWQgdG8gcmVhZCB0ZW1wbGF0ZXMgaW4gdGhlIHN0YWdpbmdcbiAgICAvLyBidWNrZXQgd2hpY2ggaGF2ZSBiZWVuIGVuY3J5cHRlZCB3aXRoIGEgS01TIGtleSAoYW5kIGxvb2t1cC1yb2xlIG1heSBub3QgcmVhZCBlbmNyeXB0ZWQgdGhpbmdzKVxuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0ZvclJlYWRPbmx5U3RhY2tPcGVyYXRpb25zKHN0YWNrQXJ0aWZhY3QpO1xuICAgIGNvbnN0IGNmbiA9IGVudi5zZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICAgIGF3YWl0IHVwbG9hZFN0YWNrVGVtcGxhdGVBc3NldHMoc3RhY2tBcnRpZmFjdCwgdGhpcyk7XG5cbiAgICAvLyBVcGxvYWQgdGhlIHRlbXBsYXRlLCBpZiBuZWNlc3NhcnksIGJlZm9yZSBwYXNzaW5nIGl0IHRvIENGTlxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKTtcbiAgICBjb25zdCBjZm5QYXJhbSA9IGF3YWl0IG1ha2VCb2R5UGFyYW1ldGVyKFxuICAgICAgdGhpcy5pb0hlbHBlcixcbiAgICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgICBlbnYucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBlbnYucmVzb3VyY2VzLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgYG1ha2VCb2R5UGFyYW1ldGVyYCBiZWZvcmUgdGhpcyBhZGRlZCBhc3NldHMsIG1ha2Ugc3VyZSB0byBwdWJsaXNoIHRoZW0gYmVmb3JlXG4gICAgLy8gY2FsbGluZyB0aGUgQVBJLlxuICAgIGNvbnN0IGFkZGVkQXNzZXRzID0gYnVpbGRlci50b01hbmlmZXN0KHN0YWNrQXJ0aWZhY3QuYXNzZW1ibHkuZGlyZWN0b3J5KTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFkZGVkQXNzZXRzLmVudHJpZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRTaW5nbGVBc3NldCgnbm8tdmVyc2lvbi12YWxpZGF0aW9uJywgYWRkZWRBc3NldHMsIGVudHJ5LCB7XG4gICAgICAgIHN0YWNrOiBzdGFja0FydGlmYWN0LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnB1Ymxpc2hTaW5nbGVBc3NldChhZGRlZEFzc2V0cywgZW50cnksIHtcbiAgICAgICAgc3RhY2s6IHN0YWNrQXJ0aWZhY3QsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNmbi5nZXRUZW1wbGF0ZVN1bW1hcnkoY2ZuUGFyYW0pO1xuICAgIGlmICghcmVzcG9uc2UuUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKCdHZXRUZW1wbGF0ZVN1bW1hcnkgQVBJIGNhbGwgZGlkIG5vdCByZXR1cm4gXCJSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXNcIicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzID8/IFtdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBsZXQgZGVwbG95bWVudE1ldGhvZCA9IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZDtcbiAgICAvLyBIb25vciB0aGUgb2xkIG9wdGlvbnMgYmVjYXVzZSB0aGlzIEFQSSBpcyBleHBvcnRlZCBmcm9tIHRoZSBDTEkgYXMgcGFydCBvZiB0aGUgbGVnYWN5IGV4cG9ydHNcbiAgICAvLyBAVE9ETyByZW1vdmUgd2hlbiB3ZSBkb24ndCBoYXZlIGxlZ2FjeSBleHBvcnRzIGFueW1vcmVcbiAgICBpZiAob3B0aW9ucy5jaGFuZ2VTZXROYW1lIHx8IG9wdGlvbnMuZXhlY3V0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGVwbG95bWVudE1ldGhvZCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgIFwiWW91IGNhbm5vdCBzdXBwbHkgYm90aCAnZGVwbG95bWVudE1ldGhvZCcgYW5kICdjaGFuZ2VTZXROYW1lL2V4ZWN1dGUnLiBTdXBwbHkgb25lIG9yIHRoZSBvdGhlci5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBvcHRpb25zLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGV4ZWN1dGU6IG9wdGlvbnMuZXhlY3V0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTXV0YWJsZVN0YWNrT3BlcmF0aW9ucyhvcHRpb25zLnN0YWNrKTtcblxuICAgIC8vIERvIGEgdmVyaWZpY2F0aW9uIG9mIHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSxcbiAgICAgIG9wdGlvbnMuc3RhY2sucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sXG4gICAgICBvcHRpb25zLnN0YWNrLmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcixcbiAgICAgIGVudi5yZXNvdXJjZXMpO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMucm9sZUFybiA/PyBvcHRpb25zLnN0YWNrLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUm9sZUFybik7XG5cbiAgICByZXR1cm4gZGVwbG95U3RhY2soe1xuICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICByZXNvbHZlZEVudmlyb25tZW50OiBlbnYucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIGRlcGxveU5hbWU6IG9wdGlvbnMuZGVwbG95TmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvbkFybnM6IG9wdGlvbnMubm90aWZpY2F0aW9uQXJucyxcbiAgICAgIHNkazogZW52LnNkayxcbiAgICAgIHNka1Byb3ZpZGVyOiB0aGlzLmRlcGxveVN0YWNrU2RrUHJvdmlkZXIsXG4gICAgICByb2xlQXJuOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgICAgcmV1c2VBc3NldHM6IG9wdGlvbnMucmV1c2VBc3NldHMsXG4gICAgICBlbnZSZXNvdXJjZXM6IGVudi5yZXNvdXJjZXMsXG4gICAgICB0YWdzOiBvcHRpb25zLnRhZ3MsXG4gICAgICBkZXBsb3ltZW50TWV0aG9kLFxuICAgICAgZm9yY2VEZXBsb3ltZW50OiBvcHRpb25zLmZvcmNlRGVwbG95bWVudCxcbiAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnMucGFyYW1ldGVycyxcbiAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogb3B0aW9ucy51c2VQcmV2aW91c1BhcmFtZXRlcnMsXG4gICAgICByb2xsYmFjazogb3B0aW9ucy5yb2xsYmFjayxcbiAgICAgIGhvdHN3YXA6IG9wdGlvbnMuaG90c3dhcCxcbiAgICAgIGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlczogb3B0aW9ucy5ob3Rzd2FwUHJvcGVydHlPdmVycmlkZXMsXG4gICAgICBleHRyYVVzZXJBZ2VudDogb3B0aW9ucy5leHRyYVVzZXJBZ2VudCxcbiAgICAgIHJlc291cmNlc1RvSW1wb3J0OiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0LFxuICAgICAgb3ZlcnJpZGVUZW1wbGF0ZTogb3B0aW9ucy5vdmVycmlkZVRlbXBsYXRlLFxuICAgICAgYXNzZXRQYXJhbGxlbGlzbTogb3B0aW9ucy5hc3NldFBhcmFsbGVsaXNtLFxuICAgIH0sIHRoaXMuaW9IZWxwZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrU3RhY2sob3B0aW9uczogUm9sbGJhY2tTdGFja09wdGlvbnMpOiBQcm9taXNlPFJvbGxiYWNrU3RhY2tSZXN1bHQ+IHtcbiAgICBsZXQgcmVzb3VyY2VzVG9Ta2lwOiBzdHJpbmdbXSA9IG9wdGlvbnMub3JwaGFuTG9naWNhbElkcyA/PyBbXTtcbiAgICBpZiAob3B0aW9ucy5vcnBoYW5GYWlsZWRSZXNvdXJjZXMgJiYgcmVzb3VyY2VzVG9Ta2lwLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0Nhbm5vdCBjb21iaW5lIC0tZm9yY2Ugd2l0aCAtLW9ycGhhbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0Zvck11dGFibGVTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG5cbiAgICBpZiAob3B0aW9ucy52YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbiA/PyB0cnVlKSB7XG4gICAgICAvLyBEbyBhIHZlcmlmaWNhdGlvbiBvZiB0aGUgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb25cbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICAgIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgICAgICBCT09UU1RSQVBfU1RBQ0tfVkVSU0lPTl9GT1JfUk9MTEJBQ0ssXG4gICAgICAgIG9wdGlvbnMuc3RhY2suYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyLFxuICAgICAgICBlbnYucmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjZm4gPSBlbnYuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgZGVwbG95TmFtZSA9IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuXG4gICAgLy8gV2UgbG9vcCBpbiBjYXNlIG9mIGAtLWZvcmNlYCBhbmQgdGhlIHN0YWNrIGVuZHMgdXAgaW4gYENPTlRJTlVFX1VQREFURV9ST0xMQkFDS2AuXG4gICAgbGV0IG1heExvb3BzID0gMTA7XG4gICAgd2hpbGUgKG1heExvb3BzLS0pIHtcbiAgICAgIGNvbnN0IGNsb3VkRm9ybWF0aW9uU3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIGRlcGxveU5hbWUpO1xuICAgICAgY29uc3Qgc3RhY2tBcm4gPSBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQ7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblJvbGVBcm4gPSBhd2FpdCBlbnYucmVwbGFjZVBsYWNlaG9sZGVycyhvcHRpb25zLnJvbGVBcm4gPz8gb3B0aW9ucy5zdGFjay5jbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblJvbGVBcm4pO1xuXG4gICAgICBzd2l0Y2ggKGNsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMucm9sbGJhY2tDaG9pY2UpIHtcbiAgICAgICAgY2FzZSBSb2xsYmFja0Nob2ljZS5OT05FOlxuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihgU3RhY2sgJHtkZXBsb3lOYW1lfSBkb2VzIG5vdCBuZWVkIGEgcm9sbGJhY2s6ICR7Y2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1c31gKTtcbiAgICAgICAgICByZXR1cm4geyBzdGFja0FybjogY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLCBub3RJblJvbGxiYWNrYWJsZVN0YXRlOiB0cnVlIH07XG5cbiAgICAgICAgY2FzZSBSb2xsYmFja0Nob2ljZS5TVEFSVF9ST0xMQkFDSzpcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBJbml0aWF0aW5nIHJvbGxiYWNrIG9mIHN0YWNrICR7ZGVwbG95TmFtZX1gKTtcbiAgICAgICAgICBhd2FpdCBjZm4ucm9sbGJhY2tTdGFjayh7XG4gICAgICAgICAgICBTdGFja05hbWU6IGRlcGxveU5hbWUsXG4gICAgICAgICAgICBSb2xlQVJOOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgICAgICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgICAvLyBFbmFibGluZyB0aGlzIGlzIGp1c3QgdGhlIGJldHRlciBvdmVyYWxsIGRlZmF1bHQsIHRoZSBvbmx5IHJlYXNvbiBpdCBpc24ndCB0aGUgdXBzdHJlYW0gZGVmYXVsdCBpcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgUmV0YWluRXhjZXB0T25DcmVhdGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSb2xsYmFja0Nob2ljZS5DT05USU5VRV9VUERBVEVfUk9MTEJBQ0s6XG4gICAgICAgICAgaWYgKG9wdGlvbnMub3JwaGFuRmFpbGVkUmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBmYWlsZWQgcmVzb3VyY2VzIGZyb20gdGhlIGRlcGxveW1lbnQgYW5kIGF1dG9tYXRpY2FsbHkgc2tpcCB0aGVtXG4gICAgICAgICAgICAvLyAoVXNpbmcgZGVwbG95bWVudCBsb2cgYmVjYXVzZSB3ZSBkZWZpbml0ZWx5IGhhdmUgYERlc2NyaWJlU3RhY2tFdmVudHNgIHBlcm1pc3Npb25zLCBhbmQgd2UgbWlnaHQgbm90IGhhdmVcbiAgICAgICAgICAgIC8vIGBEZXNjcmliZVN0YWNrUmVzb3VyY2VzYCBwZXJtaXNzaW9ucykuXG4gICAgICAgICAgICBjb25zdCBwb2xsZXIgPSBuZXcgU3RhY2tFdmVudFBvbGxlcihjZm4sIHtcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgICAgICAgICAgICBzdGFja1N0YXR1c2VzOiBbJ1JPTExCQUNLX0lOX1BST0dSRVNTJywgJ1VQREFURV9ST0xMQkFDS19JTl9QUk9HUkVTUyddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICAgICAgICAgICAgcmVzb3VyY2VzVG9Ta2lwID0gcG9sbGVyLnJlc291cmNlRXJyb3JzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+ICFyLmlzU3RhY2tFdmVudCAmJiByLnBhcmVudFN0YWNrTG9naWNhbElkcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgIC5tYXAoKHIpID0+IHIuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNraXBEZXNjcmlwdGlvbiA9IHJlc291cmNlc1RvU2tpcC5sZW5ndGggPiAwID8gYCAob3JwaGFuaW5nOiAke3Jlc291cmNlc1RvU2tpcC5qb2luKCcsICcpfSlgIDogJyc7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKGBDb250aW51aW5nIHJvbGxiYWNrIG9mIHN0YWNrICR7ZGVwbG95TmFtZX0ke3NraXBEZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICBhd2FpdCBjZm4uY29udGludWVVcGRhdGVSb2xsYmFjayh7XG4gICAgICAgICAgICBTdGFja05hbWU6IGRlcGxveU5hbWUsXG4gICAgICAgICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgICAgIFJvbGVBUk46IGV4ZWN1dGlvblJvbGVBcm4sXG4gICAgICAgICAgICBSZXNvdXJjZXNUb1NraXA6IHJlc291cmNlc1RvU2tpcCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJvbGxiYWNrQ2hvaWNlLlJPTExCQUNLX0ZBSUxFRDpcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgICBgU3RhY2sgJHtkZXBsb3lOYW1lfSBmYWlsZWQgY3JlYXRpb24gYW5kIHJvbGxiYWNrLiBUaGlzIHN0YXRlIGNhbm5vdCBiZSByb2xsZWQgYmFjay4gWW91IGNhbiByZWNyZWF0ZSB0aGlzIHN0YWNrIGJ5IHJ1bm5pbmcgJ2NkayBkZXBsb3knLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4geyBzdGFja0Fybiwgbm90SW5Sb2xsYmFja2FibGVTdGF0ZTogdHJ1ZSB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVW5leHBlY3RlZCByb2xsYmFjayBjaG9pY2U6ICR7Y2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5yb2xsYmFja0Nob2ljZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9uaXRvciA9IG5ldyBTdGFja0FjdGl2aXR5TW9uaXRvcih7XG4gICAgICAgIGNmbixcbiAgICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICAgIHN0YWNrTmFtZTogZGVwbG95TmFtZSxcbiAgICAgICAgaW9IZWxwZXI6IHRoaXMuaW9IZWxwZXIsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IG1vbml0b3Iuc3RhcnQoKTtcblxuICAgICAgbGV0IHN0YWNrRXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmluYWxTdGFja1N0YXRlID0gY2xvdWRGb3JtYXRpb25TdGFjaztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NTdGFjayA9IGF3YWl0IHN0YWJpbGl6ZVN0YWNrKGNmbiwgdGhpcy5pb0hlbHBlciwgZGVwbG95TmFtZSk7XG5cbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiwgYnV0IGNhdGNoIGl0IGFueXdheS4gWW91IG5ldmVyIGtub3cuXG4gICAgICAgIGlmICghc3VjY2Vzc1N0YWNrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2sgZGVwbG95IGZhaWxlZCAodGhlIHN0YWNrIGRpc2FwcGVhcmVkIHdoaWxlIHdlIHdlcmUgcm9sbGluZyBpdCBiYWNrKScpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsU3RhY2tTdGF0ZSA9IHN1Y2Nlc3NTdGFjaztcblxuICAgICAgICBjb25zdCBlcnJvcnMgPSBtb25pdG9yLmVycm9ycy5qb2luKCcsICcpO1xuICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgc3RhY2tFcnJvck1lc3NhZ2UgPSBlcnJvcnM7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBzdGFja0Vycm9yTWVzc2FnZSA9IHN1ZmZpeFdpdGhFcnJvcnMoZm9ybWF0RXJyb3JNZXNzYWdlKGUpLCBtb25pdG9yLmVycm9ycyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBtb25pdG9yLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsU3RhY2tTdGF0ZS5zdGFja1N0YXR1cy5pc1JvbGxiYWNrU3VjY2VzcyB8fCAhc3RhY2tFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgc3RhY2tBcm4sIHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRWl0aGVyIHdlIG5lZWQgdG8gaWdub3JlIHNvbWUgcmVzb3VyY2VzIHRvIGNvbnRpbnVlIHRoZSByb2xsYmFjaywgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgIGlmIChmaW5hbFN0YWNrU3RhdGUuc3RhY2tTdGF0dXMucm9sbGJhY2tDaG9pY2UgPT09IFJvbGxiYWNrQ2hvaWNlLkNPTlRJTlVFX1VQREFURV9ST0xMQkFDSyAmJiBvcHRpb25zLm9ycGhhbkZhaWxlZFJlc291cmNlcykge1xuICAgICAgICAvLyBEbyBhbm90aGVyIGxvb3AtZGUtbG9vcFxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgYCR7c3RhY2tFcnJvck1lc3NhZ2V9IChmaXggcHJvYmxlbSBhbmQgcmV0cnksIG9yIG9ycGhhbiB0aGVzZSByZXNvdXJjZXMgdXNpbmcgLS1vcnBoYW4gb3IgLS1mb3JjZSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgIFwiUm9sbGJhY2sgZGlkIG5vdCBmaW5pc2ggYWZ0ZXIgYSBsYXJnZSBudW1iZXIgb2YgaXRlcmF0aW9uczsgc3RvcHBpbmcgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHdlJ3JlIG5vdCBtYWtpbmcgcHJvZ3Jlc3MgYW55bW9yZS4gWW91IGNhbiByZXRyeSBpZiByb2xsYmFjayB3YXMgcHJvZ3Jlc3NpbmcgYXMgZXhwZWN0ZWQuXCIsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXN0cm95U3RhY2sob3B0aW9uczogRGVzdHJveVN0YWNrT3B0aW9ucykge1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0Zvck11dGFibGVTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMucm9sZUFybiA/PyBvcHRpb25zLnN0YWNrLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUm9sZUFybik7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0YWNrKHtcbiAgICAgIHNkazogZW52LnNkayxcbiAgICAgIHJvbGVBcm46IGV4ZWN1dGlvblJvbGVBcm4sXG4gICAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICAgIGRlcGxveU5hbWU6IG9wdGlvbnMuZGVwbG95TmFtZSxcbiAgICB9LCB0aGlzLmlvSGVscGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFja0V4aXN0cyhvcHRpb25zOiBTdGFja0V4aXN0c09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZW52O1xuICAgIGlmIChvcHRpb25zLnRyeUxvb2t1cFJvbGUpIHtcbiAgICAgIGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0Zvckxvb2t1cEJlc3RFZmZvcnQob3B0aW9ucy5zdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0ZvclJlYWRPbmx5U3RhY2tPcGVyYXRpb25zKG9wdGlvbnMuc3RhY2spO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGVudi5zZGsuY2xvdWRGb3JtYXRpb24oKSwgb3B0aW9ucy5kZXBsb3lOYW1lID8/IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gc3RhY2suZXhpc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgc2luZ2xlIGFzc2V0IGZyb20gYW4gYXNzZXQgbWFuaWZlc3RcbiAgICpcbiAgICogSWYgYW4gYXNzZXJ0IG1hbmlmZXN0IGFydGlmYWN0IGlzIGdpdmVuLCB0aGUgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb25cbiAgICogd2lsbCBiZSB2YWxpZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25zdHJhaW50cyBpbiB0aGF0IG1hbmlmZXN0IGFydGlmYWN0LlxuICAgKiBJZiB0aGF0IGlzIG5vdCBuZWNlc3NhcnksIGAnbm8tdmVyc2lvbi12YWxpZGF0aW9uJ2AgY2FuIGJlIHBhc3NlZC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgcHVibGljIGFzeW5jIGJ1aWxkU2luZ2xlQXNzZXQoXG4gICAgYXNzZXRBcnRpZmFjdDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0IHwgJ25vLXZlcnNpb24tdmFsaWRhdGlvbicsXG4gICAgYXNzZXRNYW5pZmVzdDogY2RrX2Fzc2V0cy5Bc3NldE1hbmlmZXN0LFxuICAgIGFzc2V0OiBjZGtfYXNzZXRzLklNYW5pZmVzdEVudHJ5LFxuICAgIG9wdGlvbnM6IEJ1aWxkU3RhY2tBc3NldHNPcHRpb25zLFxuICApIHtcbiAgICBpZiAoYXNzZXRBcnRpZmFjdCAhPT0gJ25vLXZlcnNpb24tdmFsaWRhdGlvbicpIHtcbiAgICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0ZvclJlYWRPbmx5U3RhY2tPcGVyYXRpb25zKG9wdGlvbnMuc3RhY2spO1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbihcbiAgICAgICAgb3B0aW9ucy5zdGFjay5zdGFja05hbWUsXG4gICAgICAgIGFzc2V0QXJ0aWZhY3QucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sXG4gICAgICAgIGFzc2V0QXJ0aWZhY3QuYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyLFxuICAgICAgICBlbnYucmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZEVudmlyb25tZW50ID0gYXdhaXQgdGhpcy5lbnZzLnJlc29sdmVTdGFja0Vudmlyb25tZW50KG9wdGlvbnMuc3RhY2spO1xuXG4gICAgY29uc3QgcHVibGlzaGVyID0gdGhpcy5jYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdCwgcmVzb2x2ZWRFbnZpcm9ubWVudCwgb3B0aW9ucy5zdGFja05hbWUpO1xuICAgIGF3YWl0IHB1Ymxpc2hlci5idWlsZEVudHJ5KGFzc2V0KTtcbiAgICBpZiAocHVibGlzaGVyLmhhc0ZhaWx1cmVzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBGYWlsZWQgdG8gYnVpbGQgYXNzZXQgJHthc3NldC5kaXNwbGF5TmFtZShmYWxzZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggYSBzaW5nbGUgYXNzZXQgZnJvbSBhbiBhc3NldCBtYW5pZmVzdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2hTaW5nbGVBc3NldChcbiAgICBhc3NldE1hbmlmZXN0OiBjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsXG4gICAgYXNzZXQ6IGNka19hc3NldHMuSU1hbmlmZXN0RW50cnksXG4gICAgb3B0aW9uczogUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgc3RhY2tFbnYgPSBhd2FpdCB0aGlzLmVudnMucmVzb2x2ZVN0YWNrRW52aXJvbm1lbnQob3B0aW9ucy5zdGFjayk7XG5cbiAgICAvLyBObyBuZWVkIHRvIHZhbGlkYXRlIGFueW1vcmUsIHdlIGFscmVhZHkgZGlkIHRoYXQgZHVyaW5nIGJ1aWxkXG4gICAgY29uc3QgcHVibGlzaGVyID0gdGhpcy5jYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdCwgc3RhY2tFbnYsIG9wdGlvbnMuc3RhY2tOYW1lKTtcbiAgICBhd2FpdCBwdWJsaXNoZXIucHVibGlzaEVudHJ5KGFzc2V0LCB7XG4gICAgICBhbGxvd0Nyb3NzQWNjb3VudDogYXdhaXQgdGhpcy5hbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZ0ZvckVudihvcHRpb25zLnN0YWNrKSxcbiAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlUHVibGlzaCxcbiAgICB9KTtcbiAgICBpZiAocHVibGlzaGVyLmhhc0ZhaWx1cmVzKSB7XG4gICAgICB0aHJvdyBUb29sa2l0RXJyb3Iud2l0aENhdXNlKGBGYWlsZWQgdG8gcHVibGlzaCBhc3NldCAke2Fzc2V0LmRpc3BsYXlOYW1lKHRydWUpfWAsIG5ldyBBZ2dyZWdhdGVFcnJvcihwdWJsaXNoZXIuZmFpbHVyZXMubWFwKGYgPT4gZi5lcnJvcikpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nRm9yRW52KHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5fYWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yUmVhZE9ubHlTdGFja09wZXJhdGlvbnMoc3RhY2spO1xuICAgICAgdGhpcy5fYWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcgPSBhd2FpdCBkZXRlcm1pbmVBbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZyhlbnYuc2RrLCB0aGlzLmlvSGVscGVyLCB0aGlzLnByb3BzLnRvb2xraXRTdGFja05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYSBzaW5nbGUgYXNzZXQgaGFzIGJlZW4gcHVibGlzaGVkIGFscmVhZHlcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1NpbmdsZUFzc2V0UHVibGlzaGVkKFxuICAgIGFzc2V0TWFuaWZlc3Q6IGNka19hc3NldHMuQXNzZXRNYW5pZmVzdCxcbiAgICBhc3NldDogY2RrX2Fzc2V0cy5JTWFuaWZlc3RFbnRyeSxcbiAgICBvcHRpb25zOiBQdWJsaXNoU3RhY2tBc3NldHNPcHRpb25zLFxuICApIHtcbiAgICBjb25zdCBzdGFja0VudiA9IGF3YWl0IHRoaXMuZW52cy5yZXNvbHZlU3RhY2tFbnZpcm9ubWVudChvcHRpb25zLnN0YWNrKTtcbiAgICBjb25zdCBwdWJsaXNoZXIgPSB0aGlzLmNhY2hlZFB1Ymxpc2hlcihhc3NldE1hbmlmZXN0LCBzdGFja0Vudiwgb3B0aW9ucy5zdGFja05hbWUpO1xuICAgIHJldHVybiBwdWJsaXNoZXIuaXNFbnRyeVB1Ymxpc2hlZChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgYm9vdHN0cmFwIHN0YWNrIGhhcyB0aGUgcmlnaHQgdmVyc2lvbiBmb3IgdGhpcyBzdGFja1xuICAgKlxuICAgKiBDYWxsIGludG8gZW52UmVzb3VyY2VzLnZhbGlkYXRlVmVyc2lvbiwgYnV0IHByZXBlbmQgdGhlIHN0YWNrIG5hbWUgaW4gY2FzZSBvZiBmYWlsdXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbihcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIGJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGVudlJlc291cmNlczogRW52aXJvbm1lbnRSZXNvdXJjZXMsXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnZSZXNvdXJjZXMudmFsaWRhdGVWZXJzaW9uKHJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uLCBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXIpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHtzdGFja05hbWV9OiAke2Zvcm1hdEVycm9yTWVzc2FnZShlKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhY2hlZFB1Ymxpc2hlcihhc3NldE1hbmlmZXN0OiBjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsIGVudjogY3hhcGkuRW52aXJvbm1lbnQsIHN0YWNrTmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5wdWJsaXNoZXJDYWNoZS5nZXQoYXNzZXRNYW5pZmVzdCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IHN0YWNrTmFtZSA/IGAke2NoYWxrLmJvbGQoc3RhY2tOYW1lKX06IGAgOiAnJztcbiAgICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgY2RrX2Fzc2V0cy5Bc3NldFB1Ymxpc2hpbmcoYXNzZXRNYW5pZmVzdCwge1xuICAgICAgLy8gVGhlIEFzc2V0UHVibGlzaGluZyBjbGFzcyB0YWtlcyBjYXJlIG9mIHJvbGUgYXNzdW1pbmcgZXRjLCBzbyBpdCdzIG9rYXkgdG9cbiAgICAgIC8vIGdpdmUgaXQgYSBkaXJlY3QgYFNka1Byb3ZpZGVyYC5cbiAgICAgIGF3czogbmV3IFB1Ymxpc2hpbmdBd3ModGhpcy5hc3NldFNka1Byb3ZpZGVyLCBlbnYpLFxuICAgICAgcHJvZ3Jlc3NMaXN0ZW5lcjogbmV3IFBhcmFsbGVsU2FmZUFzc2V0UHJvZ3Jlc3MocHJlZml4LCB0aGlzLmlvSGVscGVyKSxcbiAgICB9KTtcbiAgICB0aGlzLnB1Ymxpc2hlckNhY2hlLnNldChhc3NldE1hbmlmZXN0LCBwdWJsaXNoZXIpO1xuICAgIHJldHVybiBwdWJsaXNoZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBBc3NldCBwcm9ncmVzcyB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBwZXJjZW50YWdlcyAoY3VycmVudGx5KVxuICovXG5jbGFzcyBQYXJhbGxlbFNhZmVBc3NldFByb2dyZXNzIGV4dGVuZHMgQmFzZVB1Ymxpc2hQcm9ncmVzc0xpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwcmVmaXg6IHN0cmluZywgaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gICAgc3VwZXIoaW9IZWxwZXIpO1xuICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1lc3NhZ2UodHlwZTogY2RrX2Fzc2V0cy5FdmVudFR5cGUsIGV2ZW50OiBjZGtfYXNzZXRzLklQdWJsaXNoUHJvZ3Jlc3MpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0ke3R5cGV9OiAke2V2ZW50Lm1lc3NhZ2V9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdWZmaXhXaXRoRXJyb3JzKG1zZzogc3RyaW5nLCBlcnJvcnM/OiBzdHJpbmdbXSkge1xuICByZXR1cm4gZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwID8gYCR7bXNnfTogJHtlcnJvcnMuam9pbignLCAnKX1gIDogbXNnO1xufVxuIl19