@aws-mdaa/devops 1.4.0 → 1.6.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.
package/lib/devops.js CHANGED
@@ -59,20 +59,6 @@ class MdaaDevopsL3Construct extends l3_construct_1.MdaaL3Construct {
59
59
  naming: this.props.naming,
60
60
  encryptionKey: kmsKey,
61
61
  });
62
- construct_1.MdaaNagSuppressions.addCodeResourceSuppressions(devOpsBucket, [
63
- {
64
- id: 'NIST.800.53.R5-S3BucketReplicationEnabled',
65
- reason: 'Bucket does not contain data assets. Replication not required.',
66
- },
67
- {
68
- id: 'HIPAA.Security-S3BucketReplicationEnabled',
69
- reason: 'Bucket does not contain data assets. Replication not required.',
70
- },
71
- {
72
- id: 'PCI.DSS.321-S3BucketReplicationEnabled',
73
- reason: 'Bucket does not contain data assets. Replication not required.',
74
- },
75
- ], true);
76
62
  const codeCommitEventRole = new iam_constructs_1.MdaaRole(this, 'codecommit-event-role', {
77
63
  roleName: 'codecommit-event',
78
64
  naming: this.props.naming,
@@ -155,7 +141,7 @@ class MdaaDevopsL3Construct extends l3_construct_1.MdaaL3Construct {
155
141
  Object.entries(this.props.pipelines ?? {}).forEach(entry => {
156
142
  const pipelineProps = {
157
143
  pipelineType: aws_codepipeline_1.PipelineType.V2,
158
- naming: this.props.naming.withModuleName(`devops-${entry[0]}`),
144
+ naming: this.props.naming.withSuffix(entry[0]),
159
145
  pipelineName: this.props.naming.resourceName(entry[0]),
160
146
  ...entry[1],
161
147
  role: pipelineRole,
@@ -387,4 +373,4 @@ class FixCdkBuildProject {
387
373
  }
388
374
  }
389
375
  }
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2b3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGV2b3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILHVDQUFrSDtBQUNsSCw2REFBb0Q7QUFDcEQsNkRBQXNEO0FBQ3RELHlEQUErRTtBQUUvRSwyREFBcUQ7QUFFckQsNkNBQWdFO0FBQ2hFLDZEQU1tQztBQUNuQywrREFBcUU7QUFDckUsbUVBQStGO0FBQy9GLG1GQU04QztBQUM5QyxpREFXNkI7QUFFN0IsK0NBQTRDO0FBRTVDLHFEQUFxRDtBQUNyRCxtREFBMEQsQ0FBQyxTQUFTO0FBK0pwRSxNQUFhLGtCQUFtQixTQUFRLHlCQUF5QztJQUcvRSxZQUFZLEtBQVksRUFBRSxLQUErQjtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFzQixDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQVJELGdEQVFDO0FBRUQsTUFBYSxnQkFBaUIsU0FBUSxnQkFBVTtJQUM5QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxnQkFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUNTLG9CQUFvQixDQUM1QixLQUFZLEVBQ1osZ0JBQXNDLEVBQ3RDLFdBQXFDO1FBRXJDLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQWtCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUN6QyxHQUFHLGdCQUFnQjtZQUNuQixHQUFHLFNBQVMsQ0FBQyxZQUFZO1NBQzFCLENBQUMsQ0FBQztRQUNILHFCQUFPLENBQUMs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Q3BDLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLDBDQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6RCxPQUFPLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBdFBELG9DQXNQQztBQUVELE1BQU0sa0JBQWtCO0lBQ2YsS0FBSyxDQUFDLFNBQXFCO1FBQ2hDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUN0RCwrQkFBbUIsQ0FBQywyQkFBMkIsQ0FDN0MsU0FBUyxFQUNUO2dCQUNFLEVBQUUsRUFBRSxFQUFFLDhDQUE4QyxFQUFFLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRTtnQkFDaEcsRUFBRSxFQUFFLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLGdDQUFnQyxFQUFFO2FBQzlGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUFwcENvbmZpZ1BhcnNlciwgTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzLCBNZGFhQmFzZUNvbmZpZ0NvbnRlbnRzLCBNZGFhQ2RrQXBwIH0gZnJvbSAnQGF3cy1tZGFhL2FwcCc7XG5pbXBvcnQgeyBNZGFhUm9sZSB9IGZyb20gJ0Bhd3MtbWRhYS9pYW0tY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhS21zS2V5IH0gZnJvbSAnQGF3cy1tZGFhL2ttcy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFMM0NvbnN0cnVjdCwgTWRhYUwzQ29uc3RydWN0UHJvcHMgfSBmcm9tICdAYXdzLW1kYWEvbDMtY29uc3RydWN0JztcbmltcG9ydCB7IElNZGFhUmVzb3VyY2VOYW1pbmcgfSBmcm9tICdAYXdzLW1kYWEvbmFtaW5nJztcbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tICdhanYnO1xuaW1wb3J0IHsgQXBwUHJvcHMsIEFzcGVjdHMsIElBc3BlY3QsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQnVpbGRTcGVjLFxuICBDb21wdXRlVHlwZSxcbiAgTGludXhCdWlsZEltYWdlLFxuICBQaXBlbGluZVByb2plY3QsXG4gIFBpcGVsaW5lUHJvamVjdFByb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IElSZXBvc2l0b3J5LCBSZXBvc2l0b3J5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVjb21taXQnO1xuaW1wb3J0IHsgQXJ0aWZhY3QsIFBpcGVsaW5lLCBQaXBlbGluZVByb3BzLCBQaXBlbGluZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCB7XG4gIENvZGVCdWlsZEFjdGlvbixcbiAgQ29kZUJ1aWxkQWN0aW9uUHJvcHMsXG4gIENvZGVDb21taXRTb3VyY2VBY3Rpb24sXG4gIENvZGVDb21taXRUcmlnZ2VyLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCB7XG4gIEFjY291bnRQcmluY2lwYWwsXG4gIENvbXBvc2l0ZVByaW5jaXBhbCxcbiAgRWZmZWN0LFxuICBJUm9sZSxcbiAgTWFuYWdlZFBvbGljeSxcbiAgUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGNvbmZpZ1NjaGVtYSBmcm9tICcuL2NvbmZpZy1zY2hlbWEuanNvbic7XG5pbXBvcnQgeyBNZGFhTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnQGF3cy1tZGFhL2NvbnN0cnVjdCc7IC8vTk9TT05BUlxuXG4vKipcbiAqIFEtRU5IQU5DRUQtSU5URVJGQUNFXG4gKiBWYWxpZGF0aW9uIHN0YWdlIGNvbW1hbmQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIENvZGVCdWlsZCB2YWxpZGF0aW9uIHByb2plY3RzIHRoYXQgZXhlY3V0ZSBpbmZyYXN0cnVjdHVyZSB0ZXN0aW5nIGFuZCBjb21wbGlhbmNlIHZlcmlmaWNhdGlvbiBkdXJpbmcgTURBQSBkZXBsb3ltZW50IHBpcGVsaW5lcy4gRGVmaW5lcyBpbnN0YWxsIGRlcGVuZGVuY2llcyBhbmQgdmFsaWRhdGlvbiBjb21tYW5kcyB0aGF0IHJ1biBpbiBDb2RlQnVpbGQgZW52aXJvbm1lbnRzIHRvIHZlcmlmeSBkZXBsb3llZCBpbmZyYXN0cnVjdHVyZSBtZWV0cyByZXF1aXJlbWVudHMgYmVmb3JlIHBpcGVsaW5lIHByb2dyZXNzaW9uLlxuICpcbiAqIFVzZSBjYXNlczogSW5mcmFzdHJ1Y3R1cmUgc21va2UgdGVzdGluZzsgQ29tcGxpYW5jZSB2ZXJpZmljYXRpb247IERlcGxveW1lbnQgdmFsaWRhdGlvbjsgUXVhbGl0eSBnYXRlIGVuZm9yY2VtZW50OyBQb3N0LWRlcGxveW1lbnQgdmVyaWZpY2F0aW9uXG4gKlxuICogQVdTOiBBV1MgQ29kZUJ1aWxkIHZhbGlkYXRpb24gcHJvamVjdCBjb21tYW5kcyB3aXRoIGluc3RhbGwgZGVwZW5kZW5jaWVzIGFuZCB2YWxpZGF0aW9uIHNjcmlwdCBleGVjdXRpb24gZm9yIHBpcGVsaW5lIHF1YWxpdHkgZ2F0ZXNcbiAqXG4gKiBWYWxpZGF0aW9uOiBpbnN0YWxsIGNvbW1hbmRzIG11c3QgYmUgdmFsaWQgcGFja2FnZSBtYW5hZ2VyIGNvbW1hbmRzOyBjb21tYW5kcyBtdXN0IGJlIGV4ZWN1dGFibGUgc2hlbGwgc2NyaXB0cyB0aGF0IHJldHVybiBhcHByb3ByaWF0ZSBleGl0IGNvZGVzIGZvciBwaXBlbGluZSBzdWNjZXNzL2ZhaWx1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZVN0YWdlQ29tbWFuZHMge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBwYWNrYWdlIGluc3RhbGxhdGlvbiBjb21tYW5kcyBmb3IgQ29kZUJ1aWxkIHZhbGlkYXRpb24gZW52aXJvbm1lbnQgc2V0dXAgZW5hYmxpbmcgdGVzdGluZyB0b29sIGluc3RhbGxhdGlvbiBhbmQgZGVwZW5kZW5jeSBtYW5hZ2VtZW50LiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIGluc3RhbGwgcGhhc2UgdG8gaW5zdGFsbCByZXF1aXJlZCB0ZXN0aW5nIGZyYW1ld29ya3MsIHZhbGlkYXRpb24gdG9vbHMsIGFuZCBkZXBlbmRlbmNpZXMgbmVlZGVkIGZvciBpbmZyYXN0cnVjdHVyZSB2YWxpZGF0aW9uIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogVGVzdGluZyB0b29sIGluc3RhbGxhdGlvbjsgVmFsaWRhdGlvbiBkZXBlbmRlbmN5IHNldHVwOyBUZXN0aW5nIGZyYW1ld29yayBpbnN0YWxsYXRpb247IEVudmlyb25tZW50IHByZXBhcmF0aW9uOyBWYWxpZGF0aW9uIHRvb2wgc2V0dXBcbiAgICpcbiAgICogQVdTOiBBV1MgQ29kZUJ1aWxkIHZhbGlkYXRpb24gaW5zdGFsbCBwaGFzZSBjb21tYW5kcyBmb3IgdGVzdGluZyB0b29sIGluc3RhbGxhdGlvbiBhbmQgdmFsaWRhdGlvbiBlbnZpcm9ubWVudCBzZXR1cFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIHNoZWxsIGNvbW1hbmRzIGlmIHByb3ZpZGVkOyBjb21tYW5kcyBleGVjdXRlIGluIENvZGVCdWlsZCBMaW51eCBlbnZpcm9ubWVudDsgb3B0aW9uYWwgZm9yIHZhbGlkYXRpb24gaW5zdGFsbCBwaGFzZVxuICAgKiovXG4gIHJlYWRvbmx5IGluc3RhbGw/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBjb21tYW5kcyBmb3IgaW5mcmFzdHJ1Y3R1cmUgdGVzdGluZyBhbmQgY29tcGxpYW5jZSB2ZXJpZmljYXRpb24gZW5hYmxpbmcgcXVhbGl0eSBnYXRlIGVuZm9yY2VtZW50LiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB0byB2YWxpZGF0ZSBkZXBsb3llZCBpbmZyYXN0cnVjdHVyZSwgcGVyZm9ybSBzbW9rZSB0ZXN0cywgYW5kIHZlcmlmeSBjb21wbGlhbmNlIHJlcXVpcmVtZW50cyBiZWZvcmUgcGlwZWxpbmUgcHJvZ3Jlc3Npb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogSW5mcmFzdHJ1Y3R1cmUgc21va2UgdGVzdGluZzsgQ29tcGxpYW5jZSB2ZXJpZmljYXRpb247IFF1YWxpdHkgZ2F0ZSBlbmZvcmNlbWVudDsgUG9zdC1kZXBsb3ltZW50IHZhbGlkYXRpb247IEluZnJhc3RydWN0dXJlIHRlc3RpbmdcbiAgICpcbiAgICogQVdTOiBBV1MgQ29kZUJ1aWxkIHZhbGlkYXRpb24gY29tbWFuZHMgZm9yIGluZnJhc3RydWN0dXJlIHRlc3RpbmcgYW5kIGNvbXBsaWFuY2UgdmVyaWZpY2F0aW9uIHdpdGggcXVhbGl0eSBnYXRlIGVuZm9yY2VtZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIG11c3QgcmV0dXJuIGFwcHJvcHJpYXRlIGV4aXQgY29kZXMgZm9yIHBpcGVsaW5lIHN1Y2Nlc3MvZmFpbHVyZTsgb3B0aW9uYWwgZm9yIHZhbGlkYXRpb24gZXhlY3V0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgY29tbWFuZHM/OiBzdHJpbmdbXTtcbn1cbi8qKlxuICogUS1FTkhBTkNFRC1JTlRFUkZBQ0VcbiAqIERlcGxveW1lbnQgc3RhZ2UgY29tbWFuZCBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgQ29kZUJ1aWxkIHByb2plY3RzIHRoYXQgZXhlY3V0ZSBjdXN0b20gc2NyaXB0cyBkdXJpbmcgTURBQSBkZXBsb3ltZW50IHBpcGVsaW5lIHN0YWdlcy4gRGVmaW5lcyBpbnN0YWxsIGRlcGVuZGVuY2llcywgcHJlLWRlcGxveW1lbnQgcHJlcGFyYXRpb24gY29tbWFuZHMsIGFuZCBwb3N0LWRlcGxveW1lbnQgY2xlYW51cCBjb21tYW5kcyB0aGF0IHJ1biBpbiBDb2RlQnVpbGQgZW52aXJvbm1lbnRzIHRvIGN1c3RvbWl6ZSBkZXBsb3ltZW50IGJlaGF2aW9yIGFuZCBwZXJmb3JtIGVudmlyb25tZW50LXNwZWNpZmljIG9wZXJhdGlvbnMuXG4gKlxuICogVXNlIGNhc2VzOiBFbnZpcm9ubWVudCBwcmVwYXJhdGlvbjsgQ3VzdG9tIGRlcGxveW1lbnQgc2NyaXB0czsgUG9zdC1kZXBsb3ltZW50IGNsZWFudXA7IEluZnJhc3RydWN0dXJlIGN1c3RvbWl6YXRpb247IEVudmlyb25tZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBBV1M6IEFXUyBDb2RlQnVpbGQgcHJvamVjdCBjb21tYW5kcyB3aXRoIGluc3RhbGwsIHByZS1leGVjdXRpb24sIGFuZCBwb3N0LWV4ZWN1dGlvbiBob29rcyBmb3IgZGVwbG95bWVudCBzdGFnZSBjdXN0b21pemF0aW9uXG4gKlxuICogVmFsaWRhdGlvbjogaW5zdGFsbCBjb21tYW5kcyBtdXN0IGJlIHZhbGlkIHBhY2thZ2UgbWFuYWdlciBjb21tYW5kczsgcHJlL3Bvc3QgY29tbWFuZHMgbXVzdCBiZSBleGVjdXRhYmxlIHNoZWxsIHNjcmlwdHM7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGNvbW1hbmRzIGZvciBDb2RlQnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgZW5hYmxpbmcgZGVwZW5kZW5jeSBtYW5hZ2VtZW50IGFuZCB0b29sIGluc3RhbGxhdGlvbi4gRGVmaW5lcyBjb21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBpbnN0YWxsIHBoYXNlIHRvIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMsIGRlcGVuZGVuY2llcywgYW5kIHRvb2xzIG5lZWRlZCBmb3IgZGVwbG95bWVudCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERlcGVuZGVuY3kgaW5zdGFsbGF0aW9uOyBUb29sIHNldHVwOyBQYWNrYWdlIG1hbmFnZW1lbnQ7IEVudmlyb25tZW50IHByZXBhcmF0aW9uOyBCdWlsZCB0b29sIGluc3RhbGxhdGlvblxuICAgKlxuICAgKiBBV1M6IEFXUyBDb2RlQnVpbGQgaW5zdGFsbCBwaGFzZSBjb21tYW5kcyBmb3IgZGVwZW5kZW5jeSBpbnN0YWxsYXRpb24gYW5kIGVudmlyb25tZW50IHNldHVwXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50OyBvcHRpb25hbCBmb3IgaW5zdGFsbCBwaGFzZVxuICAgKiovXG4gIHJlYWRvbmx5IGluc3RhbGw/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgcHJlLWV4ZWN1dGlvbiBjb21tYW5kcyBmb3IgZGVwbG95bWVudCBzdGFnZSBwcmVwYXJhdGlvbiBlbmFibGluZyBjdXN0b20gc2V0dXAgYW5kIHZhbGlkYXRpb24gYmVmb3JlIG1haW4gZGVwbG95bWVudCBvcGVyYXRpb25zLiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG1haW4gZGVwbG95bWVudCBzdGFnZSB0byBwZXJmb3JtIGVudmlyb25tZW50IHByZXBhcmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgY3VzdG9tIHNldHVwIHRhc2tzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEVudmlyb25tZW50IHByZXBhcmF0aW9uOyBQcmUtZGVwbG95bWVudCB2YWxpZGF0aW9uOyBDdXN0b20gc2V0dXA7IENvbmZpZ3VyYXRpb24gdmVyaWZpY2F0aW9uOyBQcmVyZXF1aXNpdGUgY2hlY2tzXG4gICAqXG4gICAqIEFXUzogQVdTIENvZGVCdWlsZCBwcmUtZXhlY3V0aW9uIGNvbW1hbmRzIGZvciBkZXBsb3ltZW50IHN0YWdlIHByZXBhcmF0aW9uIGFuZCB2YWxpZGF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50OyBvcHRpb25hbCBmb3IgcHJlLWV4ZWN1dGlvbiBwaGFzZVxuICAgKiovXG4gIHJlYWRvbmx5IHByZT86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBwb3N0LWV4ZWN1dGlvbiBjb21tYW5kcyBmb3IgZGVwbG95bWVudCBzdGFnZSBjbGVhbnVwIGFuZCBmaW5hbGl6YXRpb24gZW5hYmxpbmcgY3VzdG9tIGNsZWFudXAgYW5kIHBvc3QtZGVwbG95bWVudCBvcGVyYXRpb25zLiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciB0aGUgbWFpbiBkZXBsb3ltZW50IHN0YWdlIHRvIHBlcmZvcm0gY2xlYW51cCwgbm90aWZpY2F0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZmluYWxpemF0aW9uIHRhc2tzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFBvc3QtZGVwbG95bWVudCBjbGVhbnVwOyBOb3RpZmljYXRpb24gc2VuZGluZzsgVmFsaWRhdGlvbiBjaGVja3M7IFJlc291cmNlIGNsZWFudXA7IEZpbmFsaXphdGlvbiB0YXNrc1xuICAgKlxuICAgKiBBV1M6IEFXUyBDb2RlQnVpbGQgcG9zdC1leGVjdXRpb24gY29tbWFuZHMgZm9yIGRlcGxveW1lbnQgc3RhZ2UgY2xlYW51cCBhbmQgZmluYWxpemF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50OyBvcHRpb25hbCBmb3IgcG9zdC1leGVjdXRpb24gcGhhc2VcbiAgICoqL1xuICByZWFkb25seSBwb3N0Pzogc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRzIGV4dGVuZHMgU3RhZ2VDb21tYW5kcyB7XG4gIHJlYWRvbmx5IHByZURlcGxveT86IFN0YWdlQ29tbWFuZHM7XG4gIHJlYWRvbmx5IHByZURlcGxveVZhbGlkYXRlPzogVmFsaWRhdGVTdGFnZUNvbW1hbmRzO1xuICByZWFkb25seSBkZXBsb3k/OiBTdGFnZUNvbW1hbmRzO1xuICByZWFkb25seSBwb3N0RGVwbG95VmFsaWRhdGU/OiBWYWxpZGF0ZVN0YWdlQ29tbWFuZHM7XG59XG4vKipcbiAqIFEtRU5IQU5DRUQtSU5URVJGQUNFXG4gKiBNREFBIERldk9wcyBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgQ0kvQ0QgcGlwZWxpbmUgb3JjaGVzdHJhdGlvbiB3aXRoIENvZGVDb21taXQgcmVwb3NpdG9yeSBpbnRlZ3JhdGlvbiBhbmQgbXVsdGktZW52aXJvbm1lbnQgZGVwbG95bWVudCBtYW5hZ2VtZW50LiBEZWZpbmVzIHRoZSBjb21wbGV0ZSBEZXZPcHMgaW5mcmFzdHJ1Y3R1cmUgaW5jbHVkaW5nIHNvdXJjZSByZXBvc2l0b3JpZXMsIGRlcGxveW1lbnQgcGlwZWxpbmVzLCBhbmQgQ0RLIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIGZvciBhdXRvbWF0ZWQgTURBQSBpbmZyYXN0cnVjdHVyZSBkZXBsb3ltZW50IGFjcm9zcyBtdWx0aXBsZSBlbnZpcm9ubWVudHMgd2l0aCBhcHByb3ZhbCBnYXRlcyBhbmQgdmFsaWRhdGlvbiBzdGFnZXMuXG4gKlxuICogVXNlIGNhc2VzOiBNdWx0aS1lbnZpcm9ubWVudCBDSS9DRCBwaXBlbGluZXM7IEF1dG9tYXRlZCBNREFBIGRlcGxveW1lbnRzOyBDb25maWd1cmF0aW9uIHJlcG9zaXRvcnkgbWFuYWdlbWVudDsgSW5mcmFzdHJ1Y3R1cmUgY2hhbmdlIG1hbmFnZW1lbnQ7IERldk9wcyBhdXRvbWF0aW9uXG4gKlxuICogQVdTOiBBV1MgQ29kZVBpcGVsaW5lIHdpdGggQ29kZUNvbW1pdCBzb3VyY2UgcmVwb3NpdG9yaWVzLCBDb2RlQnVpbGQgcHJvamVjdHMgZm9yIE1EQUEgQ0xJIGV4ZWN1dGlvbiwgYW5kIENESyBib290c3RyYXAgaW50ZWdyYXRpb24gZm9yIGluZnJhc3RydWN0dXJlIGRlcGxveW1lbnRcbiAqXG4gKiBWYWxpZGF0aW9uOiBtZGFhQ29kZUNvbW1pdFJlcG8gYW5kIGNvbmZpZ3NDb2RlQ29tbWl0UmVwbyBtdXN0IGJlIHZhbGlkIENvZGVDb21taXQgcmVwb3NpdG9yeSBuYW1lczsgcGlwZWxpbmVzIG11c3QgY29udGFpbiB2YWxpZCBQaXBlbGluZUNvbmZpZyBvYmplY3RzOyBjZGtCb290c3RyYXBDb250ZXh0IG11c3QgYmUgdmFsaWQgQ0RLIHF1YWxpZmllclxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldk9wc0NvbmZpZ0NvbnRlbnRzIGV4dGVuZHMgTWRhYUJhc2VDb25maWdDb250ZW50cywgQ29tbWFuZHMge1xuICByZWFkb25seSBtZGFhQ29kZUNvbW1pdFJlcG86IHN0cmluZztcbiAgcmVhZG9ubHkgbWRhYUJyYW5jaD86IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZmlnc0NvZGVDb21taXRSZXBvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZ3NCcmFuY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lcz86IHsgW3BpcGVsaW5lTmFtZTogc3RyaW5nXTogUGlwZWxpbmVDb25maWcgfTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogQ0RLIGJvb3RzdHJhcCBjb250ZXh0IHF1YWxpZmllciBmb3IgaWRlbnRpZnlpbmcgQ0RLIGJvb3RzdHJhcCByZXNvdXJjZXMgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRGVmaW5lcyB0aGUgQ0RLIGJvb3RzdHJhcCBxdWFsaWZpZXIgdXNlZCB0byBsb2NhdGUgQ0RLIGRlcGxveW1lbnQgcm9sZXMsIGJ1Y2tldHMsIGFuZCBvdGhlciBib290c3RyYXAgcmVzb3VyY2VzIGZvciBNREFBIGluZnJhc3RydWN0dXJlIGRlcGxveW1lbnQgdGhyb3VnaCBDSS9DRCBwaXBlbGluZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ0RLIGJvb3RzdHJhcCByZXNvdXJjZSBpZGVudGlmaWNhdGlvbjsgTXVsdGktZW52aXJvbm1lbnQgQ0RLIGRlcGxveW1lbnQ7IEJvb3RzdHJhcCByZXNvdXJjZSBpc29sYXRpb247IENESyByb2xlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBV1MgQ0RLIGJvb3RzdHJhcCByZXNvdXJjZXMgaW5jbHVkaW5nIGRlcGxveW1lbnQgcm9sZXMgYW5kIGFzc2V0IGJ1Y2tldHNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBDREsgYm9vdHN0cmFwIHF1YWxpZmllciBzdHJpbmc7IGRlZmF1bHRzIHRvIHN0YW5kYXJkIENESyBxdWFsaWZpZXIgaWYgbm90IHNwZWNpZmllZDsgb3B0aW9uYWwgc3RyaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgY2RrQm9vdHN0cmFwQ29udGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogSW5kaXZpZHVhbCBwaXBlbGluZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgZW52aXJvbm1lbnQtc3BlY2lmaWMgTURBQSBkZXBsb3ltZW50IHBpcGVsaW5lcyB3aXRoIGRvbWFpbiwgZW52aXJvbm1lbnQsIGFuZCBtb2R1bGUgZmlsdGVyaW5nIGNhcGFiaWxpdGllcy4gRGVmaW5lcyBwaXBlbGluZS1zcGVjaWZpYyBkZXBsb3ltZW50IHBhcmFtZXRlcnMgaW5jbHVkaW5nIHRhcmdldCBmaWx0ZXJzIGZvciBzZWxlY3RpdmUgZGVwbG95bWVudCwgY3VzdG9tIGNvbW1hbmQgZXhlY3V0aW9uLCBhbmQgcGlwZWxpbmUtbGV2ZWwgZGVwbG95bWVudCBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgdGFyZ2V0ZWQgaW5mcmFzdHJ1Y3R1cmUgZGVwbG95bWVudCB3aXRoaW4gbXVsdGktZG9tYWluIGRhdGEgYXJjaGl0ZWN0dXJlcy5cbiAqIFVzZSBjYXNlczogRW52aXJvbm1lbnQtc3BlY2lmaWMgcGlwZWxpbmVzOyBTZWxlY3RpdmUgbW9kdWxlIGRlcGxveW1lbnQ7IERvbWFpbi1maWx0ZXJlZCBkZXBsb3ltZW50czsgUGlwZWxpbmUgY3VzdG9taXphdGlvbjsgVGFyZ2V0ZWQgaW5mcmFzdHJ1Y3R1cmUgdXBkYXRlc1xuICogQVdTOiBBV1MgQ29kZVBpcGVsaW5lIGNvbmZpZ3VyYXRpb24gd2l0aCBkb21haW4vZW52aXJvbm1lbnQvbW9kdWxlIGZpbHRlcmluZyBmb3Igc2VsZWN0aXZlIE1EQUEgZGVwbG95bWVudCB0YXJnZXRpbmcgc3BlY2lmaWMgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50c1xuICogVmFsaWRhdGlvbjogZG9tYWluRmlsdGVyLCBlbnZGaWx0ZXIsIGFuZCBtb2R1bGVGaWx0ZXIgbXVzdCByZWZlcmVuY2UgdmFsaWQgTURBQSBkb21haW5zLCBlbnZpcm9ubWVudHMsIGFuZCBtb2R1bGVzOyBwaXBlbGluZSBtdXN0IGluaGVyaXQgdmFsaWQgQ29tbWFuZHMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQ29uZmlnIGV4dGVuZHMgQ29tbWFuZHMge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBkb21haW4gbmFtZXMgZm9yIHBpcGVsaW5lIGRlcGxveW1lbnQgZmlsdGVyaW5nIGVuYWJsaW5nIHNlbGVjdGl2ZSBkb21haW4tc3BlY2lmaWMgZGVwbG95bWVudHMuIFJlc3RyaWN0cyBwaXBlbGluZSBleGVjdXRpb24gdG8gb25seSB0aGUgc3BlY2lmaWVkIE1EQUEgZG9tYWlucywgYWxsb3dpbmcgZm9yIHRhcmdldGVkIGRlcGxveW1lbnQgc3RyYXRlZ2llcyBhbmQgZG9tYWluIGlzb2xhdGlvbiBpbiBtdWx0aS1kb21haW4gZGF0YSBhcmNoaXRlY3R1cmVzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERvbWFpbi1zcGVjaWZpYyBkZXBsb3ltZW50czsgTXVsdGktZG9tYWluIGZpbHRlcmluZzsgU2VsZWN0aXZlIGRvbWFpbiB1cGRhdGVzOyBEb21haW4gaXNvbGF0aW9uIHN0cmF0ZWdpZXNcbiAgICpcbiAgICogQVdTOiBBV1MgQ29kZVBpcGVsaW5lIGRvbWFpbiBmaWx0ZXJpbmcgZm9yIHNlbGVjdGl2ZSBNREFBIGRvbWFpbiBkZXBsb3ltZW50IGFuZCB0YXJnZXRlZCBpbmZyYXN0cnVjdHVyZSB1cGRhdGVzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgTURBQSBkb21haW4gbmFtZXMgaWYgcHJvdmlkZWQ7IGRvbWFpbnMgbXVzdCBleGlzdCBpbiBNREFBIGNvbmZpZ3VyYXRpb247IG9wdGlvbmFsIGZvciBkb21haW4gZmlsdGVyaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgZG9tYWluRmlsdGVyPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGVudmlyb25tZW50IG5hbWVzIGZvciBwaXBlbGluZSBkZXBsb3ltZW50IGZpbHRlcmluZyBlbmFibGluZyBzZWxlY3RpdmUgZW52aXJvbm1lbnQtc3BlY2lmaWMgZGVwbG95bWVudHMuIFJlc3RyaWN0cyBwaXBlbGluZSBleGVjdXRpb24gdG8gb25seSB0aGUgc3BlY2lmaWVkIE1EQUEgZW52aXJvbm1lbnRzLCBhbGxvd2luZyBmb3IgdGFyZ2V0ZWQgZGVwbG95bWVudCBzdHJhdGVnaWVzIGFuZCBlbnZpcm9ubWVudCBpc29sYXRpb24gYWNyb3NzIGRldmVsb3BtZW50LCBzdGFnaW5nLCBhbmQgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogRW52aXJvbm1lbnQtc3BlY2lmaWMgZGVwbG95bWVudHM7IE11bHRpLWVudmlyb25tZW50IGZpbHRlcmluZzsgU2VsZWN0aXZlIGVudmlyb25tZW50IHVwZGF0ZXM7IEVudmlyb25tZW50IGlzb2xhdGlvbiBzdHJhdGVnaWVzXG4gICAqXG4gICAqIEFXUzogQVdTIENvZGVQaXBlbGluZSBlbnZpcm9ubWVudCBmaWx0ZXJpbmcgZm9yIHNlbGVjdGl2ZSBNREFBIGVudmlyb25tZW50IGRlcGxveW1lbnQgYW5kIHRhcmdldGVkIGluZnJhc3RydWN0dXJlIHVwZGF0ZXNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBNREFBIGVudmlyb25tZW50IG5hbWVzIGlmIHByb3ZpZGVkOyBlbnZpcm9ubWVudHMgbXVzdCBleGlzdCBpbiBNREFBIGNvbmZpZ3VyYXRpb247IG9wdGlvbmFsIGZvciBlbnZpcm9ubWVudCBmaWx0ZXJpbmdcbiAgICoqL1xuICByZWFkb25seSBlbnZGaWx0ZXI/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgbW9kdWxlIG5hbWVzIGZvciBwaXBlbGluZSBkZXBsb3ltZW50IGZpbHRlcmluZyBlbmFibGluZyBzZWxlY3RpdmUgbW9kdWxlLXNwZWNpZmljIGRlcGxveW1lbnRzLiBSZXN0cmljdHMgcGlwZWxpbmUgZXhlY3V0aW9uIHRvIG9ubHkgdGhlIHNwZWNpZmllZCBNREFBIG1vZHVsZXMsIGFsbG93aW5nIGZvciB0YXJnZXRlZCBkZXBsb3ltZW50IHN0cmF0ZWdpZXMgYW5kIG1vZHVsZSBpc29sYXRpb24gZm9yIHNwZWNpZmljIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMgb3Igc2VydmljZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogTW9kdWxlLXNwZWNpZmljIGRlcGxveW1lbnRzOyBNdWx0aS1tb2R1bGUgZmlsdGVyaW5nOyBTZWxlY3RpdmUgbW9kdWxlIHVwZGF0ZXM7IENvbXBvbmVudCBpc29sYXRpb24gc3RyYXRlZ2llc1xuICAgKlxuICAgKiBBV1M6IEFXUyBDb2RlUGlwZWxpbmUgbW9kdWxlIGZpbHRlcmluZyBmb3Igc2VsZWN0aXZlIE1EQUEgbW9kdWxlIGRlcGxveW1lbnQgYW5kIHRhcmdldGVkIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudCB1cGRhdGVzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgTURBQSBtb2R1bGUgbmFtZXMgaWYgcHJvdmlkZWQ7IG1vZHVsZXMgbXVzdCBleGlzdCBpbiBNREFBIGNvbmZpZ3VyYXRpb247IG9wdGlvbmFsIGZvciBtb2R1bGUgZmlsdGVyaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgbW9kdWxlRmlsdGVyPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBEZXZPcHNDb25maWdQYXJzZXIgZXh0ZW5kcyBNZGFhQXBwQ29uZmlnUGFyc2VyPERldk9wc0NvbmZpZ0NvbnRlbnRzPiB7XG4gIHB1YmxpYyByZWFkb25seSBkZXZvcHNDb25maWc6IERldk9wc0NvbmZpZ0NvbnRlbnRzO1xuXG4gIGNvbnN0cnVjdG9yKHN0YWNrOiBTdGFjaywgcHJvcHM6IE1kYWFBcHBDb25maWdQYXJzZXJQcm9wcykge1xuICAgIHN1cGVyKHN0YWNrLCBwcm9wcywgY29uZmlnU2NoZW1hIGFzIFNjaGVtYSk7XG5cbiAgICB0aGlzLmRldm9wc0NvbmZpZyA9IHRoaXMuY29uZmlnQ29udGVudHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1kYWFEZXZvcHNDREtBcHAgZXh0ZW5kcyBNZGFhQ2RrQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM/OiBBcHBQcm9wcykge1xuICAgIHN1cGVyKHsgLi4ucHJvcHMsIC4uLnsgdXNlQm9vdHN0cmFwOiBmYWxzZSB9IH0sIE1kYWFDZGtBcHAucGFyc2VQYWNrYWdlSnNvbihgJHtfX2Rpcm5hbWV9Ly4uL3BhY2thZ2UuanNvbmApKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3ViR2VuZXJhdGVSZXNvdXJjZXMoXG4gICAgc3RhY2s6IFN0YWNrLFxuICAgIGwzQ29uc3RydWN0UHJvcHM6IE1kYWFMM0NvbnN0cnVjdFByb3BzLFxuICAgIHBhcnNlclByb3BzOiBNZGFhQXBwQ29uZmlnUGFyc2VyUHJvcHMsXG4gICkge1xuICAgIGNvbnN0IGFwcENvbmZpZyA9IG5ldyBEZXZPcHNDb25maWdQYXJzZXIoc3RhY2ssIHBhcnNlclByb3BzKTtcbiAgICBuZXcgTWRhYURldm9wc0wzQ29uc3RydWN0KHN0YWNrLCAnZGV2b3BzJywge1xuICAgICAgLi4ubDNDb25zdHJ1Y3RQcm9wcyxcbiAgICAgIC4uLmFwcENvbmZpZy5kZXZvcHNDb25maWcsXG4gICAgfSk7XG4gICAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBGaXhDZGtCdWlsZFByb2plY3QoKSk7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWRhYURldm9wc0wzQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBNZGFhTDNDb25zdHJ1Y3RQcm9wcywgRGV2T3BzQ29uZmlnQ29udGVudHMge31cblxuZXhwb3J0IGNsYXNzIE1kYWFEZXZvcHNMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQ0RLX0JPT1RTVFJBUF9DT05URVhUID0gJ2huYjY1OWZkcyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IE1kYWFEZXZvcHNMM0NvbnN0cnVjdFByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZGFhRGV2b3BzTDNDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIGNvbnN0IHBpcGVsaW5lUm9sZSA9IG5ldyBNZGFhUm9sZSh0aGlzLCAncGlwZWxpbmUtcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAncGlwZWxpbmUnLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2NvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZGFhUmVwbyA9IFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlOYW1lKHRoaXMsICdtZGFhLWltcG9ydC1yZXBvJywgdGhpcy5wcm9wcy5tZGFhQ29kZUNvbW1pdFJlcG8pO1xuICAgIGNvbnN0IGNvbmZpZ3NSZXBvID0gUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeU5hbWUodGhpcywgJ2NvbmZpZ3MtaW1wb3J0LXJlcG8nLCB0aGlzLnByb3BzLmNvbmZpZ3NDb2RlQ29tbWl0UmVwbyk7XG5cbiAgICBjb25zdCBrbXNLZXkgPSBuZXcgTWRhYUttc0tleSh0aGlzLCAna21zLWtleScsIHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBrZXlVc2VyUm9sZUlkczogW3BpcGVsaW5lUm9sZS5yb2xlSWRdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGV2T3BzQnVja2V0ID0gbmV3IE1kYWFCdWNrZXQodGhpcywgJ3BpcGVsaW5lLWJ1Y2tldCcsIHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBrbXNLZXksXG4gICAgfSk7XG5cbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIGRldk9wc0J1Y2tldCxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnTklTVC44MDAuNTMuUjUtUzNCdWNrZXRSZXBsaWNhdGlvbkVuYWJsZWQnLFxuICAgICAgICAgIHJlYXNvbjogJ0J1Y2tldCBkb2VzIG5vdCBjb250YWluIGRhdGEgYXNzZXRzLiBSZXBsaWNhdGlvbiBub3QgcmVxdWlyZWQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnSElQQUEuU2VjdXJpdHktUzNCdWNrZXRSZXBsaWNhdGlvbkVuYWJsZWQnLFxuICAgICAgICAgIHJlYXNvbjogJ0J1Y2tldCBkb2VzIG5vdCBjb250YWluIGRhdGEgYXNzZXRzLiBSZXBsaWNhdGlvbiBub3QgcmVxdWlyZWQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtUzNCdWNrZXRSZXBsaWNhdGlvbkVuYWJsZWQnLFxuICAgICAgICAgIHJlYXNvbjogJ0J1Y2tldCBkb2VzIG5vdCBjb250YWluIGRhdGEgYXNzZXRzLiBSZXBsaWNhdGlvbiBub3QgcmVxdWlyZWQuJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBjb25zdCBjb2RlQ29tbWl0RXZlbnRSb2xlID0gbmV3IE1kYWFSb2xlKHRoaXMsICdjb2RlY29tbWl0LWV2ZW50LXJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2NvZGVjb21taXQtZXZlbnQnLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2V2ZW50cy5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2RlQ29tbWl0UmVhZFBvbGljeSA9IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnY29kZWNvbW1pdDpHZXRCcmFuY2gnLCAnY29kZWNvbW1pdDpHZXRDb21taXQnLCAnY29kZWNvbW1pdDpHZXRSZXBvc2l0b3J5JywgJ2NvZGVjb21taXQ6R2l0UHVsbCddLFxuICAgICAgICAgIHJlc291cmNlczogW21kYWFSZXBvLnJlcG9zaXRvcnlBcm4sIGNvbmZpZ3NSZXBvLnJlcG9zaXRvcnlBcm5dLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2RlQ29tbWl0QWN0aW9uUm9sZSA9IG5ldyBNZGFhUm9sZSh0aGlzLCAnY29kZWNvbW1pdC1hY3Rpb24tcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnY29kZWNvbW1pdC1hY3Rpb24nLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwodGhpcy5hY2NvdW50KSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7IGNvZGVjb21taXRfcmVhZDogY29kZUNvbW1pdFJlYWRQb2xpY3kgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEFjdGlvblJvbGUgPSBuZXcgTWRhYVJvbGUodGhpcywgJ2NvZGVidWlsZC1hY3Rpb24tcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnY29kZWJ1aWxkLWFjdGlvbicsXG4gICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbCgnY29kZWJ1aWxkLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbmV3IEFjY291bnRQcmluY2lwYWwodGhpcy5hY2NvdW50KSxcbiAgICAgICksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQVdTQ2xvdWRGb3JtYXRpb25SZWFkT25seUFjY2VzcycpXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEFjdGlvblBvbGljeSA9IG5ldyBQb2xpY3kodGhpcywgJ2NvZGVidWlsZC1wb2xpY3knKTtcbiAgICBjb25zdCBjZGtMb29rdXBSb2xlID0gdGhpcy5pbXBvcnRDZGtSb2xlKHRoaXMsICdsb29rdXAnLCB0aGlzLnByb3BzLmNka0Jvb3RzdHJhcENvbnRleHQpO1xuICAgIGNvbnN0IGNka0RlcGxveVJvbGUgPSB0aGlzLmltcG9ydENka1JvbGUodGhpcywgJ2RlcGxveScsIHRoaXMucHJvcHMuY2RrQm9vdHN0cmFwQ29udGV4dCk7XG4gICAgY29uc3QgY2RrRXhlY1JvbGUgPSB0aGlzLmltcG9ydENka1JvbGUodGhpcywgJ2V4ZWMnLCB0aGlzLnByb3BzLmNka0Jvb3RzdHJhcENvbnRleHQpO1xuICAgIGNvbnN0IGNka0ZpbGVQdWJsaXNoaW5nUm9sZSA9IHRoaXMuaW1wb3J0Q2RrUm9sZSh0aGlzLCAnZmlsZS1wdWJsaXNoaW5nJywgdGhpcy5wcm9wcy5jZGtCb290c3RyYXBDb250ZXh0KTtcbiAgICBjb25zdCBjZGtJbWFnZVB1Ymxpc2hpbmdSb2xlID0gdGhpcy5pbXBvcnRDZGtSb2xlKHRoaXMsICdpbWFnZS1wdWJsaXNoaW5nJywgdGhpcy5wcm9wcy5jZGtCb290c3RyYXBDb250ZXh0KTtcbiAgICBjb25zdCBjZGtCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgYGNkay1idWNrZXQtaW1wb3J0YCxcbiAgICAgIGBjZGstJHt0aGlzLnByb3BzLmNka0Jvb3RzdHJhcENvbnRleHQgPz8gTWRhYURldm9wc0wzQ29uc3RydWN0LkRFRkFVTFRfQ0RLX0JPT1RTVFJBUF9DT05URVhUfS1hc3NldHMtJHtcbiAgICAgICAgdGhpcy5hY2NvdW50XG4gICAgICB9LSR7dGhpcy5yZWdpb259YCxcbiAgICApO1xuXG4gICAgY29kZUJ1aWxkQWN0aW9uUG9saWN5LmFkZFN0YXRlbWVudHMoXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQVNTVU1FQ0RLUk9MRVMnLFxuICAgICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGNka0xvb2t1cFJvbGUucm9sZUFybixcbiAgICAgICAgICBjZGtEZXBsb3lSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgY2RrRmlsZVB1Ymxpc2hpbmdSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgY2RrSW1hZ2VQdWJsaXNoaW5nUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIGNka0V4ZWNSb2xlLnJvbGVBcm4sXG4gICAgICAgIF0sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvZGVCdWlsZEFjdGlvblBvbGljeS5hZGRTdGF0ZW1lbnRzKFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ1MzTGlzdCcsXG4gICAgICAgIGFjdGlvbnM6IFsnczM6TGlzdEFsbE15QnVja2V0cyddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkRm9ybWF0aW9uQ2hhbmdlU2V0cycsXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb2RlQnVpbGRBY3Rpb25Qb2xpY3kuYWRkU3RhdGVtZW50cyhcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDREtTMycsXG4gICAgICAgIGFjdGlvbnM6IFsnczM6R2V0KicsICdzMzpQdXQqJywgJ3MzOkxpc3QqJ10sXG4gICAgICAgIHJlc291cmNlczogW2Nka0J1Y2tldC5idWNrZXRBcm4sIGNka0J1Y2tldC5hcm5Gb3JPYmplY3RzKCcqJyldLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIGNvZGVCdWlsZEFjdGlvblBvbGljeSxcbiAgICAgIFtcbiAgICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JywgcmVhc29uOiAnUGVybWlzc2lvbnMgYXJlIHNjb3BlZCBsZWFzdCBwcml2aWxlZ2UgZm9yIGRlcGxveW1lbnQgdGltZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ1BDSS5EU1MuMzIxLUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGNvZGVCdWlsZEFjdGlvblBvbGljeS5hdHRhY2hUb1JvbGUoY29kZUJ1aWxkQWN0aW9uUm9sZSk7XG4gICAgY29uc3QgbWFudWFsQWN0aW9uUm9sZSA9IG5ldyBNZGFhUm9sZSh0aGlzLCAnbWFudWFsLWFjdGlvbi1yb2xlJywge1xuICAgICAgcm9sZU5hbWU6ICdtYW51YWwtYWN0aW9uJyxcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBBY2NvdW50UHJpbmNpcGFsKHRoaXMuYWNjb3VudCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3N1bWVBY3Rpb25Sb2xlR3JhbnQgPSBjb2RlQnVpbGRBY3Rpb25Sb2xlLmdyYW50QXNzdW1lUm9sZShwaXBlbGluZVJvbGUpO1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5wcm9wcy5waXBlbGluZXMgPz8ge30pLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgY29uc3QgcGlwZWxpbmVQcm9wczogTWRhYVBpcGVsaW5lUHJvcHMgPSB7XG4gICAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLndpdGhNb2R1bGVOYW1lKGBkZXZvcHMtJHtlbnRyeVswXX1gKSxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLnByb3BzLm5hbWluZy5yZXNvdXJjZU5hbWUoZW50cnlbMF0pLFxuICAgICAgICAuLi5lbnRyeVsxXSxcbiAgICAgICAgcm9sZTogcGlwZWxpbmVSb2xlLFxuICAgICAgICBhcnRpZmFjdEJ1Y2tldDogZGV2T3BzQnVja2V0LFxuICAgICAgICBjb2RlQ29tbWl0QWN0aW9uUm9sZTogY29kZUNvbW1pdEFjdGlvblJvbGUsXG4gICAgICAgIGNvZGVDb21taXRFdmVudFJvbGU6IGNvZGVDb21taXRFdmVudFJvbGUsXG4gICAgICAgIGNvZGVCdWlsZEFjdGlvblJvbGU6IGNvZGVCdWlsZEFjdGlvblJvbGUsXG4gICAgICAgIG1kYWFSZXBvOiBtZGFhUmVwbyxcbiAgICAgICAgY29uZmlnc1JlcG86IGNvbmZpZ3NSZXBvLFxuICAgICAgICBrbXNLZXk6IGttc0tleSxcbiAgICAgICAgbWFudWFsQWN0aW9uUm9sZTogbWFudWFsQWN0aW9uUm9sZSxcbiAgICAgICAgaW5zdGFsbDogWy4uLih0aGlzLnByb3BzLmluc3RhbGwgPz8gW10pLCAuLi4oZW50cnlbMV0uaW5zdGFsbCA/PyBbXSldLFxuICAgICAgICBwcmU6IFsuLi4odGhpcy5wcm9wcy5wcmUgPz8gW10pLCAuLi4oZW50cnlbMV0ucHJlID8/IFtdKV0sXG4gICAgICAgIHBvc3Q6IFsuLi4odGhpcy5wcm9wcy5wb3N0ID8/IFtdKSwgLi4uKGVudHJ5WzFdLnBvc3QgPz8gW10pXSxcbiAgICAgICAgcHJlRGVwbG95OiB7IC4uLnRoaXMucHJvcHMucHJlRGVwbG95LCAuLi5lbnRyeVsxXS5wcmVEZXBsb3kgfSxcbiAgICAgICAgcHJlRGVwbG95VmFsaWRhdGU6XG4gICAgICAgICAgdGhpcy5wcm9wcy5wcmVEZXBsb3lWYWxpZGF0ZSB8fCBlbnRyeVsxXS5wcmVEZXBsb3lWYWxpZGF0ZVxuICAgICAgICAgICAgPyB7IC4uLnRoaXMucHJvcHMucHJlRGVwbG95VmFsaWRhdGUsIC4uLmVudHJ5WzFdLnByZURlcGxveVZhbGlkYXRlIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBkZXBsb3k6IHsgLi4udGhpcy5wcm9wcy5kZXBsb3ksIC4uLmVudHJ5WzFdLmRlcGxveSB9LFxuICAgICAgICBwb3N0RGVwbG95VmFsaWRhdGU6XG4gICAgICAgICAgdGhpcy5wcm9wcy5wb3N0RGVwbG95VmFsaWRhdGUgfHwgZW50cnlbMV0ucG9zdERlcGxveVZhbGlkYXRlXG4gICAgICAgICAgICA/IHsgLi4udGhpcy5wcm9wcy5wb3N0RGVwbG95VmFsaWRhdGUsIC4uLmVudHJ5WzFdLnBvc3REZXBsb3lWYWxpZGF0ZSB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3IE1kYWFQaXBlbGluZSh0aGlzLCBgbWRhYS1waXBlbGluZS0ke2VudHJ5WzBdfWAsIHBpcGVsaW5lUHJvcHMpO1xuICAgICAgYXNzdW1lQWN0aW9uUm9sZUdyYW50LmFwcGx5QmVmb3JlKHBpcGVsaW5lKTtcbiAgICB9KTtcblxuICAgIE1kYWFOYWdTdXBwcmVzc2lvbnMuYWRkQ29kZVJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgcGlwZWxpbmVSb2xlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLCByZWFzb246ICdQZXJtaXNzaW9ucyBhcmUgc2NvcGVkIGxlYXN0IHByaXZpbGVnZSBmb3IgZGVwbG95bWVudCB0aW1lLicgfSxcbiAgICAgICAgeyBpZDogJ05JU1QuODAwLjUzLlI1LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdISVBBQS5TZWN1cml0eS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnUENJLkRTUy4zMjEtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBjb2RlQnVpbGRBY3Rpb25Sb2xlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnQXdzU29sdXRpb25zLUlBTTQnLCByZWFzb246ICdBV1NDbG91ZEZvcm1hdGlvblJlYWRPbmx5QWNjZXNzIGlzIFJlYWQgT25seSBBY2Nlc3MnIH0sXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsIHJlYXNvbjogJ1Blcm1pc3Npb25zIGFyZSBzY29wZWQgbGVhc3QgcHJpdmlsZWdlIGZvciBkZXBsb3ltZW50IHRpbWUuJyB9LFxuICAgICAgICB7IGlkOiAnTklTVC44MDAuNTMuUjUtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIGNvZGVDb21taXRBY3Rpb25Sb2xlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLCByZWFzb246ICdQZXJtaXNzaW9ucyBhcmUgc2NvcGVkIGxlYXN0IHByaXZpbGVnZSBmb3IgZGVwbG95bWVudCB0aW1lLicgfSxcbiAgICAgICAgeyBpZDogJ05JU1QuODAwLjUzLlI1LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdISVBBQS5TZWN1cml0eS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnUENJLkRTUy4zMjEtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBjb2RlQ29tbWl0RXZlbnRSb2xlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnTklTVC44MDAuNTMuUjUtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW1wb3J0Q2RrUm9sZShzY29wZTogQ29uc3RydWN0LCByb2xlTmFtZTogc3RyaW5nLCBjZGtCb290c3RyYXBDb250ZXh0Pzogc3RyaW5nKTogSVJvbGUge1xuICAgIHJldHVybiBSb2xlLmZyb21Sb2xlTmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAgYGNkay0ke3JvbGVOYW1lfS1yb2xlLWltcG9ydGAsXG4gICAgICBgY2RrLSR7Y2RrQm9vdHN0cmFwQ29udGV4dCA/PyBNZGFhRGV2b3BzTDNDb25zdHJ1Y3QuREVGQVVMVF9DREtfQk9PVFNUUkFQX0NPTlRFWFR9LSR7cm9sZU5hbWV9LXJvbGUtJHtcbiAgICAgICAgU3RhY2sub2Yoc2NvcGUpLmFjY291bnRcbiAgICAgIH0tJHtTdGFjay5vZihzY29wZSkucmVnaW9ufWAsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kYWFQaXBlbGluZVByb3BzIGV4dGVuZHMgUGlwZWxpbmVQcm9wcywgU3RhZ2VDb21tYW5kcywgUGlwZWxpbmVDb25maWcge1xuICByZWFkb25seSBuYW1pbmc6IElNZGFhUmVzb3VyY2VOYW1pbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBjb2RlQ29tbWl0QWN0aW9uUm9sZTogSVJvbGU7XG4gIHJlYWRvbmx5IGNvZGVDb21taXRFdmVudFJvbGU6IElSb2xlO1xuICByZWFkb25seSBjb2RlQnVpbGRBY3Rpb25Sb2xlOiBJUm9sZTtcbiAgcmVhZG9ubHkgbWRhYVJlcG86IElSZXBvc2l0b3J5O1xuICByZWFkb25seSBtZGFhQnJhbmNoPzogc3RyaW5nO1xuICByZWFkb25seSBjb25maWdzUmVwbzogSVJlcG9zaXRvcnk7XG4gIHJlYWRvbmx5IGNvbmZpZ3NCcmFuY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGttc0tleTogSUtleTtcbiAgcmVhZG9ubHkgbWFudWFsQWN0aW9uUm9sZTogSVJvbGU7XG59XG5cbmV4cG9ydCBjbGFzcyBNZGFhUGlwZWxpbmUgZXh0ZW5kcyBQaXBlbGluZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IE1kYWFQaXBlbGluZVByb3BzO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTWRhYVBpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICBjb25zdCBzb3VyY2VTdGFnZSA9IHRoaXMuYWRkU3RhZ2UoeyBzdGFnZU5hbWU6ICdTb3VyY2UnIH0pO1xuICAgIGNvbnN0IG1kYWFTb3VyY2VPdXRwdXQgPSBuZXcgQXJ0aWZhY3QoJ01EQUEnKTtcbiAgICBjb25zdCBtZGFhU291cmNlQWN0aW9uID0gdGhpcy5jcmVhdGVDb2RlQ29tbWl0U291cmNlQWN0aW9uKFxuICAgICAgJ21kYWEnLFxuICAgICAgbWRhYVNvdXJjZU91dHB1dCxcbiAgICAgIHRoaXMucHJvcHMuY29kZUNvbW1pdEFjdGlvblJvbGUsXG4gICAgICB0aGlzLnByb3BzLmNvZGVDb21taXRFdmVudFJvbGUsXG4gICAgICB0aGlzLnByb3BzLm1kYWFSZXBvLFxuICAgICAgdGhpcy5wcm9wcy5tZGFhQnJhbmNoID8/ICdtYWluJyxcbiAgICApO1xuICAgIGNvbnN0IGNvbmZpZ1NvdXJjZU91dHB1dCA9IG5ldyBBcnRpZmFjdCgnQ09ORklHUycpO1xuICAgIGNvbnN0IGNvbmZpZ1NvdXJjZUFjdGlvbiA9IHRoaXMuY3JlYXRlQ29kZUNvbW1pdFNvdXJjZUFjdGlvbihcbiAgICAgICdjb25maWdzJyxcbiAgICAgIGNvbmZpZ1NvdXJjZU91dHB1dCxcbiAgICAgIHRoaXMucHJvcHMuY29kZUNvbW1pdEFjdGlvblJvbGUsXG4gICAgICB0aGlzLnByb3BzLmNvZGVDb21taXRFdmVudFJvbGUsXG4gICAgICB0aGlzLnByb3BzLmNvbmZpZ3NSZXBvLFxuICAgICAgdGhpcy5wcm9wcy5jb25maWdzQnJhbmNoID8/ICdtYWluJyxcbiAgICApO1xuICAgIHNvdXJjZVN0YWdlLmFkZEFjdGlvbihtZGFhU291cmNlQWN0aW9uKTtcbiAgICBzb3VyY2VTdGFnZS5hZGRBY3Rpb24oY29uZmlnU291cmNlQWN0aW9uKTtcblxuICAgIGNvbnN0IHBpcGVsaW5lUHJvamVjdHM6IFBpcGVsaW5lUHJvamVjdFtdID0gW107XG4gICAgY29uc3QgcHJlRGVwbG95T3V0cHV0ID0gbmV3IEFydGlmYWN0KCdQUkVERVBMT1lfT1VUUFVUJyk7XG4gICAgdGhpcy5hZGRQcmVEZXBsb3lTdGFnZShjb25maWdTb3VyY2VPdXRwdXQsIG1kYWFTb3VyY2VPdXRwdXQsIHByZURlcGxveU91dHB1dCwgcGlwZWxpbmVQcm9qZWN0cyk7XG4gICAgdGhpcy5hZGRQcmVEZXBsb3lWYWxpZGF0ZVN0YWdlKHByZURlcGxveU91dHB1dCwgcGlwZWxpbmVQcm9qZWN0cyk7XG4gICAgdGhpcy5hZGREZXBsb3lTdGFnZShwcmVEZXBsb3lPdXRwdXQsIHBpcGVsaW5lUHJvamVjdHMpO1xuICAgIHRoaXMuYWRkUG9zdERlcGxveVZhbGlkYXRlU3RhZ2UocHJlRGVwbG95T3V0cHV0LCBwaXBlbGluZVByb2plY3RzKTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEFjdGlvblBvbGljeSA9IG5ldyBQb2xpY3kodGhpcywgJ2NvZGVidWlsZC1hY3Rpb24tcG9saWN5Jywge1xuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NvZGVidWlsZDpTdGFydEJ1aWxkJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBwaXBlbGluZVByb2plY3RzLm1hcCh4ID0+IHgucHJvamVjdEFybiksXG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIE1kYWFOYWdTdXBwcmVzc2lvbnMuYWRkQ29kZVJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgY29kZUJ1aWxkQWN0aW9uUG9saWN5LFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnTklTVC44MDAuNTMuUjUtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIHRoaXMucHJvcHMuY29kZUJ1aWxkQWN0aW9uUm9sZS5hdHRhY2hJbmxpbmVQb2xpY3koY29kZUJ1aWxkQWN0aW9uUG9saWN5KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9zdERlcGxveVZhbGlkYXRlU3RhZ2UocHJlRGVwbG95T3V0cHV0OiBBcnRpZmFjdCwgcGlwZWxpbmVQcm9qZWN0czogUGlwZWxpbmVQcm9qZWN0W10pIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wb3N0RGVwbG95VmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IFt2YWxpZGF0ZUFjdGlvbiwgdmFsaWRhdGVQcm9qZWN0XSA9IHRoaXMuY3JlYXRlQ29kZUJ1aWxkQWN0aW9uKFxuICAgICAgICAnUG9zdERlcGxveVZhbGlkYXRlJyxcbiAgICAgICAgcHJlRGVwbG95T3V0cHV0LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbGxDb21tYW5kczogWy4uLih0aGlzLnByb3BzLmluc3RhbGwgPz8gW10pLCAuLi4odGhpcy5wcm9wcy5wb3N0RGVwbG95VmFsaWRhdGU/Lmluc3RhbGwgPz8gW10pXSxcbiAgICAgICAgICBwcmVDb21tYW5kczogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbW1hbmRzOiBbLi4uKHRoaXMucHJvcHMucG9zdERlcGxveVZhbGlkYXRlPy5jb21tYW5kcyA/PyBbXSldLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgcGlwZWxpbmVQcm9qZWN0cy5wdXNoKHZhbGlkYXRlUHJvamVjdCk7XG4gICAgICBjb25zdCBwb3N0RGVwbG95VmFsaWRhdGVTdGFnZSA9IHRoaXMuYWRkU3RhZ2Uoe1xuICAgICAgICBzdGFnZU5hbWU6ICdQb3N0LURlcGxveS1WYWxpZGF0ZScsXG4gICAgICB9KTtcbiAgICAgIHBvc3REZXBsb3lWYWxpZGF0ZVN0YWdlLmFkZEFjdGlvbih2YWxpZGF0ZUFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lTdGFnZShwcmVEZXBsb3lPdXRwdXQ6IEFydGlmYWN0LCBwaXBlbGluZVByb2plY3RzOiBQaXBlbGluZVByb2plY3RbXSkge1xuICAgIGNvbnN0IGRlcGxveVN0YWdlID0gdGhpcy5hZGRTdGFnZSh7IHN0YWdlTmFtZTogJ0RlcGxveScgfSk7XG4gICAgY29uc3QgW2RlcGxveUFjdGlvbiwgZGVwbG95UHJvamVjdF0gPSB0aGlzLmNyZWF0ZUNvZGVCdWlsZEFjdGlvbihcbiAgICAgICdEZXBsb3knLFxuXG4gICAgICBwcmVEZXBsb3lPdXRwdXQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGluc3RhbGxDb21tYW5kczogWyduIDE4JywgLi4uKHRoaXMucHJvcHMuaW5zdGFsbCA/PyBbXSksIC4uLih0aGlzLnByb3BzLmRlcGxveT8uaW5zdGFsbCA/PyBbXSldLFxuICAgICAgICBwcmVDb21tYW5kczogWy4uLih0aGlzLnByb3BzLnByZSA/PyBbXSksIC4uLih0aGlzLnByb3BzLmRlcGxveT8ucHJlID8/IFtdKV0sXG4gICAgICAgIGNvbW1hbmRzOiBbdGhpcy5jcmVhdGVNZGFhQ29tbWFuZCgnZGVwbG95JyldLFxuICAgICAgICBwb3N0Q29tbWFuZHM6IFsuLi4odGhpcy5wcm9wcy5wb3N0ID8/IFtdKSwgLi4uKHRoaXMucHJvcHMuZGVwbG95Py5wb3N0ID8/IFtdKV0sXG4gICAgICB9LFxuICAgICk7XG4gICAgZGVwbG95U3RhZ2UuYWRkQWN0aW9uKGRlcGxveUFjdGlvbik7XG4gICAgcGlwZWxpbmVQcm9qZWN0cy5wdXNoKGRlcGxveVByb2plY3QpO1xuICB9XG4gIHByaXZhdGUgYWRkUHJlRGVwbG95VmFsaWRhdGVTdGFnZShwcmVEZXBsb3lPdXRwdXQ6IEFydGlmYWN0LCBwaXBlbGluZVByb2plY3RzOiBQaXBlbGluZVByb2plY3RbXSkge1xuICAgIGNvbnN0IHByZURlcGxveVZhbGlkYXRlU3RhZ2UgPSB0aGlzLmFkZFN0YWdlKHtcbiAgICAgIHN0YWdlTmFtZTogJ1ByZS1EZXBsb3ktVmFsaWRhdGUnLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLnByZURlcGxveVZhbGlkYXRlKSB7XG4gICAgICBjb25zdCBbdmFsaWRhdGVBY3Rpb24sIHZhbGlkYXRlUHJvamVjdF0gPSB0aGlzLmNyZWF0ZUNvZGVCdWlsZEFjdGlvbihcbiAgICAgICAgJ1ByZURlcGxveVZhbGlkYXRlJyxcbiAgICAgICAgcHJlRGVwbG95T3V0cHV0LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbGxDb21tYW5kczogWy4uLih0aGlzLnByb3BzLmluc3RhbGwgPz8gW10pLCAuLi4odGhpcy5wcm9wcy5wcmVEZXBsb3lWYWxpZGF0ZT8uaW5zdGFsbCA/PyBbXSldLFxuICAgICAgICAgIHByZUNvbW1hbmRzOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tbWFuZHM6IFsuLi4odGhpcy5wcm9wcy5wcmVEZXBsb3lWYWxpZGF0ZT8uY29tbWFuZHMgPz8gW10pXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBwcmVEZXBsb3lWYWxpZGF0ZVN0YWdlLmFkZEFjdGlvbih2YWxpZGF0ZUFjdGlvbik7XG4gICAgICBwaXBlbGluZVByb2plY3RzLnB1c2godmFsaWRhdGVQcm9qZWN0KTtcbiAgICB9XG4gICAgcHJlRGVwbG95VmFsaWRhdGVTdGFnZS5hZGRBY3Rpb24oXG4gICAgICBuZXcgTWFudWFsQXBwcm92YWxBY3Rpb24oe1xuICAgICAgICBhY3Rpb25OYW1lOiAnQXBwcm92ZScsXG4gICAgICAgIHJvbGU6IHRoaXMucHJvcHMubWFudWFsQWN0aW9uUm9sZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFByZURlcGxveVN0YWdlKFxuICAgIGNvbmZpZ1NvdXJjZU91dHB1dDogQXJ0aWZhY3QsXG4gICAgbWRhYVNvdXJjZU91dHB1dDogQXJ0aWZhY3QsXG4gICAgcHJlRGVwbG95T3V0cHV0OiBBcnRpZmFjdCxcbiAgICBwaXBlbGluZVByb2plY3RzOiBQaXBlbGluZVByb2plY3RbXSxcbiAgKTogUGlwZWxpbmVQcm9qZWN0IHtcbiAgICBjb25zdCBwcmVEZXBsb3lTdGFnZSA9IHRoaXMuYWRkU3RhZ2UoeyBzdGFnZU5hbWU6ICdQcmUtRGVwbG95JyB9KTtcblxuICAgIGNvbnN0IFtkaWZmQWN0aW9uLCBkaWZmUHJvamVjdF0gPSB0aGlzLmNyZWF0ZUNvZGVCdWlsZEFjdGlvbihcbiAgICAgICdTeW50aC1BbmQtRGlmZicsXG4gICAgICBjb25maWdTb3VyY2VPdXRwdXQsXG4gICAgICBbbWRhYVNvdXJjZU91dHB1dF0sXG4gICAgICBbcHJlRGVwbG95T3V0cHV0XSxcbiAgICAgIHtcbiAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICAgICAgJ24gMTgnLFxuICAgICAgICAgICdsbiAtcyAkQ09ERUJVSUxEX1NSQ19ESVJfTURBQSAuL21kYWEnLFxuICAgICAgICAgIC4uLih0aGlzLnByb3BzLmluc3RhbGwgPz8gW10pLFxuICAgICAgICAgIC4uLih0aGlzLnByb3BzLnByZURlcGxveT8uaW5zdGFsbCA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIHByZUNvbW1hbmRzOiBbLi4uKHRoaXMucHJvcHMucHJlID8/IFtdKSwgLi4uKHRoaXMucHJvcHMucHJlRGVwbG95Py5wcmUgPz8gW10pXSxcbiAgICAgICAgY29tbWFuZHM6IFt0aGlzLmNyZWF0ZU1kYWFDb21tYW5kKCdkaWZmJyldLFxuICAgICAgICBwb3N0Q29tbWFuZHM6IFsuLi4odGhpcy5wcm9wcy5wb3N0ID8/IFtdKSwgLi4uKHRoaXMucHJvcHMucHJlRGVwbG95Py5wb3N0ID8/IFtdKV0sXG4gICAgICB9LFxuICAgICk7XG4gICAgcHJlRGVwbG95U3RhZ2UuYWRkQWN0aW9uKGRpZmZBY3Rpb24pO1xuICAgIHBpcGVsaW5lUHJvamVjdHMucHVzaChkaWZmUHJvamVjdCk7XG4gICAgcmV0dXJuIGRpZmZQcm9qZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb2RlQ29tbWl0U291cmNlQWN0aW9uKFxuICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICBvdXRwdXQ6IEFydGlmYWN0LFxuICAgIHJvbGU6IElSb2xlLFxuICAgIGV2ZW50Um9sZTogSVJvbGUsXG4gICAgcmVwb3NpdG9yeTogSVJlcG9zaXRvcnksXG4gICAgYnJhbmNoOiBzdHJpbmcsXG4gICk6IENvZGVDb21taXRTb3VyY2VBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29kZUNvbW1pdFNvdXJjZUFjdGlvbih7XG4gICAgICBvdXRwdXQsXG4gICAgICBhY3Rpb25OYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgcm9sZTogcm9sZSxcbiAgICAgIHJ1bk9yZGVyOiB1bmRlZmluZWQsXG4gICAgICBicmFuY2g6IGJyYW5jaCxcbiAgICAgIHRyaWdnZXI6IENvZGVDb21taXRUcmlnZ2VyLkVWRU5UUyxcbiAgICAgIHJlcG9zaXRvcnk6IHJlcG9zaXRvcnksXG4gICAgICBldmVudFJvbGU6IGV2ZW50Um9sZSxcbiAgICAgIGNvZGVCdWlsZENsb25lT3V0cHV0OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZGFhQ29tbWFuZChtZGFhQWN0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1kYWFDbWQgPSBbYC4vbWRhYS9iaW4vbWRhYSAke21kYWFBY3Rpb259YF07XG4gICAgaWYgKHRoaXMucHJvcHMuZG9tYWluRmlsdGVyKSB7XG4gICAgICBtZGFhQ21kLnB1c2goYC1kICR7dGhpcy5wcm9wcy5kb21haW5GaWx0ZXIuam9pbignLCcpfWApO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5lbnZGaWx0ZXIpIHtcbiAgICAgIG1kYWFDbWQucHVzaChgLWUgJHt0aGlzLnByb3BzLmVudkZpbHRlci5qb2luKCcsJyl9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm1vZHVsZUZpbHRlcikge1xuICAgICAgbWRhYUNtZC5wdXNoKGAtbSAke3RoaXMucHJvcHMubW9kdWxlRmlsdGVyLmpvaW4oJywnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1kYWFDbWQuam9pbignICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb2RlQnVpbGRBY3Rpb24oXG4gICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGlucHV0OiBBcnRpZmFjdCxcbiAgICBleHRyYUlucHV0cz86IEFydGlmYWN0W10sXG4gICAgb3V0cHV0cz86IEFydGlmYWN0W10sXG4gICAgY29tbWFuZHM/OiB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgICAgIHByZUNvbW1hbmRzPzogc3RyaW5nW107XG4gICAgICBjb21tYW5kcz86IHN0cmluZ1tdO1xuICAgICAgcG9zdENvbW1hbmRzPzogc3RyaW5nW107XG4gICAgfSxcbiAgKTogW0NvZGVCdWlsZEFjdGlvbiwgUGlwZWxpbmVQcm9qZWN0XSB7XG4gICAgY29uc3QgcHJvamVjdFByb3BzOiBQaXBlbGluZVByb2plY3RQcm9wcyA9IHtcbiAgICAgIHByb2plY3ROYW1lOiB0aGlzLnByb3BzLm5hbWluZy5yZXNvdXJjZU5hbWUoYWN0aW9uTmFtZSksXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLnByb3BzLmttc0tleSxcbiAgICAgIHJvbGU6IHRoaXMucHJvcHMuY29kZUJ1aWxkQWN0aW9uUm9sZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5YMl9MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yXzUsXG4gICAgICB9LFxuICAgICAgYnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBpbnN0YWxsOiB7XG4gICAgICAgICAgICBjb21tYW5kczogY29tbWFuZHM/Lmluc3RhbGxDb21tYW5kcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZV9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IGNvbW1hbmRzPy5wcmVDb21tYW5kcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogY29tbWFuZHM/LmNvbW1hbmRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcG9zdF9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IGNvbW1hbmRzPy5wb3N0Q29tbWFuZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJ0aWZhY3RzOiB7XG4gICAgICAgICAgZmlsZXM6IFsnKiovKiddLFxuICAgICAgICAgICdlbmFibGUtc3ltbGlua3MnOiAneWVzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBjb2RlQnVpbGRQcm9qZWN0ID0gbmV3IFBpcGVsaW5lUHJvamVjdCh0aGlzLCBgY29kZWJ1aWxkLXByb2plY3QtJHthY3Rpb25OYW1lfWAsIHByb2plY3RQcm9wcyk7XG4gICAgY29uc3QgY29kZUJ1aWxkQWN0aW9uUHJvcHM6IENvZGVCdWlsZEFjdGlvblByb3BzID0ge1xuICAgICAgaW5wdXQ6IGlucHV0LFxuICAgICAgZXh0cmFJbnB1dHM6IGV4dHJhSW5wdXRzLFxuICAgICAgYWN0aW9uTmFtZTogYWN0aW9uTmFtZSxcbiAgICAgIHByb2plY3Q6IGNvZGVCdWlsZFByb2plY3QsXG4gICAgICByb2xlOiB0aGlzLnByb3BzLmNvZGVCdWlsZEFjdGlvblJvbGUsXG4gICAgICBvdXRwdXRzOiBvdXRwdXRzLFxuICAgIH07XG5cbiAgICBjb25zdCBhY3Rpb24gPSBuZXcgQ29kZUJ1aWxkQWN0aW9uKGNvZGVCdWlsZEFjdGlvblByb3BzKTtcbiAgICByZXR1cm4gW2FjdGlvbiwgY29kZUJ1aWxkUHJvamVjdF07XG4gIH1cbn1cblxuY2xhc3MgRml4Q2RrQnVpbGRQcm9qZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHB1YmxpYyB2aXNpdChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBpZiAoY29uc3RydWN0Lm5vZGUuaWQuc3RhcnRzV2l0aCgnY29kZWJ1aWxkLXByb2plY3QnKSkge1xuICAgICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgIGNvbnN0cnVjdCxcbiAgICAgICAgW1xuICAgICAgICAgIHsgaWQ6ICdISVBBQS5TZWN1cml0eS1Db2RlQnVpbGRQcm9qZWN0U291cmNlUmVwb1VybCcsIHJlYXNvbjogJ1BpcGVsaW5lIHNvdXJjZSBpcyBDb2RlQ29tbWl0LicgfSxcbiAgICAgICAgICB7IGlkOiAnUENJLkRTUy4zMjEtQ29kZUJ1aWxkUHJvamVjdFNvdXJjZVJlcG9VcmwnLCByZWFzb246ICdQaXBlbGluZSBzb3VyY2UgaXMgQ29kZUNvbW1pdC4nIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2b3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGV2b3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILHVDQUFrSDtBQUNsSCw2REFBb0Q7QUFDcEQsNkRBQXNEO0FBQ3RELHlEQUErRTtBQUUvRSwyREFBcUQ7QUFFckQsNkNBQWdFO0FBQ2hFLDZEQU1tQztBQUNuQywrREFBcUU7QUFDckUsbUVBQStGO0FBQy9GLG1GQU04QztBQUM5QyxpREFXNkI7QUFFN0IsK0NBQTRDO0FBRTVDLHFEQUFxRDtBQUNyRCxtREFBMEQsQ0FBQyxTQUFTO0FBK0pwRSxNQUFhLGtCQUFtQixTQUFRLHlCQUF5QztJQUcvRSxZQUFZLEtBQVksRUFBRSxLQUErQjtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFzQixDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQVJELGdEQVFDO0FBRUQsTUFBYSxnQkFBaUIsU0FBUSxnQkFBVTtJQUM5QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxnQkFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUNTLG9CQUFvQixDQUM1QixLQUFZLEVBQ1osZ0JBQXNDLEVBQ3RDLFdBQXFDO1FBRXJDLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQWtCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUN6QyxHQUFHLGdCQUFnQjtZQUNuQixHQUFHLFNBQVMsQ0FBQyxZQUFZO1NBQzFCLENBQUMsQ0FBQztRQUNILHFCQUFPLENBQUMs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QixDQUFDLEVBQUUsQ0FBQztZQUN0RCwrQkFBbUIsQ0FBQywyQkFBMkIsQ0FDN0MsU0FBUyxFQUNUO2dCQUNFLEVBQUUsRUFBRSxFQUFFLDhDQUE4QyxFQUFFLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRTtnQkFDaEcsRUFBRSxFQUFFLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLGdDQUFnQyxFQUFFO2FBQzlGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUFwcENvbmZpZ1BhcnNlciwgTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzLCBNZGFhQmFzZUNvbmZpZ0NvbnRlbnRzLCBNZGFhQ2RrQXBwIH0gZnJvbSAnQGF3cy1tZGFhL2FwcCc7XG5pbXBvcnQgeyBNZGFhUm9sZSB9IGZyb20gJ0Bhd3MtbWRhYS9pYW0tY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhS21zS2V5IH0gZnJvbSAnQGF3cy1tZGFhL2ttcy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFMM0NvbnN0cnVjdCwgTWRhYUwzQ29uc3RydWN0UHJvcHMgfSBmcm9tICdAYXdzLW1kYWEvbDMtY29uc3RydWN0JztcbmltcG9ydCB7IElNZGFhUmVzb3VyY2VOYW1pbmcgfSBmcm9tICdAYXdzLW1kYWEvbmFtaW5nJztcbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tICdhanYnO1xuaW1wb3J0IHsgQXBwUHJvcHMsIEFzcGVjdHMsIElBc3BlY3QsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQnVpbGRTcGVjLFxuICBDb21wdXRlVHlwZSxcbiAgTGludXhCdWlsZEltYWdlLFxuICBQaXBlbGluZVByb2plY3QsXG4gIFBpcGVsaW5lUHJvamVjdFByb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IElSZXBvc2l0b3J5LCBSZXBvc2l0b3J5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVjb21taXQnO1xuaW1wb3J0IHsgQXJ0aWZhY3QsIFBpcGVsaW5lLCBQaXBlbGluZVByb3BzLCBQaXBlbGluZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCB7XG4gIENvZGVCdWlsZEFjdGlvbixcbiAgQ29kZUJ1aWxkQWN0aW9uUHJvcHMsXG4gIENvZGVDb21taXRTb3VyY2VBY3Rpb24sXG4gIENvZGVDb21taXRUcmlnZ2VyLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCB7XG4gIEFjY291bnRQcmluY2lwYWwsXG4gIENvbXBvc2l0ZVByaW5jaXBhbCxcbiAgRWZmZWN0LFxuICBJUm9sZSxcbiAgTWFuYWdlZFBvbGljeSxcbiAgUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGNvbmZpZ1NjaGVtYSBmcm9tICcuL2NvbmZpZy1zY2hlbWEuanNvbic7XG5pbXBvcnQgeyBNZGFhTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnQGF3cy1tZGFhL2NvbnN0cnVjdCc7IC8vTk9TT05BUlxuXG4vKipcbiAqIFEtRU5IQU5DRUQtSU5URVJGQUNFXG4gKiBWYWxpZGF0aW9uIHN0YWdlIGNvbW1hbmQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIENvZGVCdWlsZCB2YWxpZGF0aW9uIHByb2plY3RzIHRoYXQgZXhlY3V0ZSBpbmZyYXN0cnVjdHVyZSB0ZXN0aW5nIGFuZCBjb21wbGlhbmNlIHZlcmlmaWNhdGlvbiBkdXJpbmcgTURBQSBkZXBsb3ltZW50IHBpcGVsaW5lcy4gRGVmaW5lcyBpbnN0YWxsIGRlcGVuZGVuY2llcyBhbmQgdmFsaWRhdGlvbiBjb21tYW5kcyB0aGF0IHJ1biBpbiBDb2RlQnVpbGQgZW52aXJvbm1lbnRzIHRvIHZlcmlmeSBkZXBsb3llZCBpbmZyYXN0cnVjdHVyZSBtZWV0cyByZXF1aXJlbWVudHMgYmVmb3JlIHBpcGVsaW5lIHByb2dyZXNzaW9uLlxuICpcbiAqIFVzZSBjYXNlczogSW5mcmFzdHJ1Y3R1cmUgc21va2UgdGVzdGluZzsgQ29tcGxpYW5jZSB2ZXJpZmljYXRpb247IERlcGxveW1lbnQgdmFsaWRhdGlvbjsgUXVhbGl0eSBnYXRlIGVuZm9yY2VtZW50OyBQb3N0LWRlcGxveW1lbnQgdmVyaWZpY2F0aW9uXG4gKlxuICogQVdTOiBBV1MgQ29kZUJ1aWxkIHZhbGlkYXRpb24gcHJvamVjdCBjb21tYW5kcyB3aXRoIGluc3RhbGwgZGVwZW5kZW5jaWVzIGFuZCB2YWxpZGF0aW9uIHNjcmlwdCBleGVjdXRpb24gZm9yIHBpcGVsaW5lIHF1YWxpdHkgZ2F0ZXNcbiAqXG4gKiBWYWxpZGF0aW9uOiBpbnN0YWxsIGNvbW1hbmRzIG11c3QgYmUgdmFsaWQgcGFja2FnZSBtYW5hZ2VyIGNvbW1hbmRzOyBjb21tYW5kcyBtdXN0IGJlIGV4ZWN1dGFibGUgc2hlbGwgc2NyaXB0cyB0aGF0IHJldHVybiBhcHByb3ByaWF0ZSBleGl0IGNvZGVzIGZvciBwaXBlbGluZSBzdWNjZXNzL2ZhaWx1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZVN0YWdlQ29tbWFuZHMge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBwYWNrYWdlIGluc3RhbGxhdGlvbiBjb21tYW5kcyBmb3IgQ29kZUJ1aWxkIHZhbGlkYXRpb24gZW52aXJvbm1lbnQgc2V0dXAgZW5hYmxpbmcgdGVzdGluZyB0b29sIGluc3RhbGxhdGlvbiBhbmQgZGVwZW5kZW5jeSBtYW5hZ2VtZW50LiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIGluc3RhbGwgcGhhc2UgdG8gaW5zdGFsbCByZXF1aXJlZCB0ZXN0aW5nIGZyYW1ld29ya3MsIHZhbGlkYXRpb24gdG9vbHMsIGFuZCBkZXBlbmRlbmNpZXMgbmVlZGVkIGZvciBpbmZyYXN0cnVjdHVyZSB2YWxpZGF0aW9uIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogVGVzdGluZyB0b29sIGluc3RhbGxhdGlvbjsgVmFsaWRhdGlvbiBkZXBlbmRlbmN5IHNldHVwOyBUZXN0aW5nIGZyYW1ld29yayBpbnN0YWxsYXRpb247IEVudmlyb25tZW50IHByZXBhcmF0aW9uOyBWYWxpZGF0aW9uIHRvb2wgc2V0dXBcbiAgICpcbiAgICogQVdTOiBBV1MgQ29kZUJ1aWxkIHZhbGlkYXRpb24gaW5zdGFsbCBwaGFzZSBjb21tYW5kcyBmb3IgdGVzdGluZyB0b29sIGluc3RhbGxhdGlvbiBhbmQgdmFsaWRhdGlvbiBlbnZpcm9ubWVudCBzZXR1cFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIHNoZWxsIGNvbW1hbmRzIGlmIHByb3ZpZGVkOyBjb21tYW5kcyBleGVjdXRlIGluIENvZGVCdWlsZCBMaW51eCBlbnZpcm9ubWVudDsgb3B0aW9uYWwgZm9yIHZhbGlkYXRpb24gaW5zdGFsbCBwaGFzZVxuICAgKiovXG4gIHJlYWRvbmx5IGluc3RhbGw/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBjb21tYW5kcyBmb3IgaW5mcmFzdHJ1Y3R1cmUgdGVzdGluZyBhbmQgY29tcGxpYW5jZSB2ZXJpZmljYXRpb24gZW5hYmxpbmcgcXVhbGl0eSBnYXRlIGVuZm9yY2VtZW50LiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB0byB2YWxpZGF0ZSBkZXBsb3llZCBpbmZyYXN0cnVjdHVyZSwgcGVyZm9ybSBzbW9rZSB0ZXN0cywgYW5kIHZlcmlmeSBjb21wbGlhbmNlIHJlcXVpcmVtZW50cyBiZWZvcmUgcGlwZWxpbmUgcHJvZ3Jlc3Npb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogSW5mcmFzdHJ1Y3R1cmUgc21va2UgdGVzdGluZzsgQ29tcGxpYW5jZSB2ZXJpZmljYXRpb247IFF1YWxpdHkgZ2F0ZSBlbmZvcmNlbWVudDsgUG9zdC1kZXBsb3ltZW50IHZhbGlkYXRpb247IEluZnJhc3RydWN0dXJlIHRlc3RpbmdcbiAgICpcbiAgICogQVdTOiBBV1MgQ29kZUJ1aWxkIHZhbGlkYXRpb24gY29tbWFuZHMgZm9yIGluZnJhc3RydWN0dXJlIHRlc3RpbmcgYW5kIGNvbXBsaWFuY2UgdmVyaWZpY2F0aW9uIHdpdGggcXVhbGl0eSBnYXRlIGVuZm9yY2VtZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIG11c3QgcmV0dXJuIGFwcHJvcHJpYXRlIGV4aXQgY29kZXMgZm9yIHBpcGVsaW5lIHN1Y2Nlc3MvZmFpbHVyZTsgb3B0aW9uYWwgZm9yIHZhbGlkYXRpb24gZXhlY3V0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgY29tbWFuZHM/OiBzdHJpbmdbXTtcbn1cbi8qKlxuICogUS1FTkhBTkNFRC1JTlRFUkZBQ0VcbiAqIERlcGxveW1lbnQgc3RhZ2UgY29tbWFuZCBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgQ29kZUJ1aWxkIHByb2plY3RzIHRoYXQgZXhlY3V0ZSBjdXN0b20gc2NyaXB0cyBkdXJpbmcgTURBQSBkZXBsb3ltZW50IHBpcGVsaW5lIHN0YWdlcy4gRGVmaW5lcyBpbnN0YWxsIGRlcGVuZGVuY2llcywgcHJlLWRlcGxveW1lbnQgcHJlcGFyYXRpb24gY29tbWFuZHMsIGFuZCBwb3N0LWRlcGxveW1lbnQgY2xlYW51cCBjb21tYW5kcyB0aGF0IHJ1biBpbiBDb2RlQnVpbGQgZW52aXJvbm1lbnRzIHRvIGN1c3RvbWl6ZSBkZXBsb3ltZW50IGJlaGF2aW9yIGFuZCBwZXJmb3JtIGVudmlyb25tZW50LXNwZWNpZmljIG9wZXJhdGlvbnMuXG4gKlxuICogVXNlIGNhc2VzOiBFbnZpcm9ubWVudCBwcmVwYXJhdGlvbjsgQ3VzdG9tIGRlcGxveW1lbnQgc2NyaXB0czsgUG9zdC1kZXBsb3ltZW50IGNsZWFudXA7IEluZnJhc3RydWN0dXJlIGN1c3RvbWl6YXRpb247IEVudmlyb25tZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBBV1M6IEFXUyBDb2RlQnVpbGQgcHJvamVjdCBjb21tYW5kcyB3aXRoIGluc3RhbGwsIHByZS1leGVjdXRpb24sIGFuZCBwb3N0LWV4ZWN1dGlvbiBob29rcyBmb3IgZGVwbG95bWVudCBzdGFnZSBjdXN0b21pemF0aW9uXG4gKlxuICogVmFsaWRhdGlvbjogaW5zdGFsbCBjb21tYW5kcyBtdXN0IGJlIHZhbGlkIHBhY2thZ2UgbWFuYWdlciBjb21tYW5kczsgcHJlL3Bvc3QgY29tbWFuZHMgbXVzdCBiZSBleGVjdXRhYmxlIHNoZWxsIHNjcmlwdHM7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGNvbW1hbmRzIGZvciBDb2RlQnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgZW5hYmxpbmcgZGVwZW5kZW5jeSBtYW5hZ2VtZW50IGFuZCB0b29sIGluc3RhbGxhdGlvbi4gRGVmaW5lcyBjb21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBpbnN0YWxsIHBoYXNlIHRvIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMsIGRlcGVuZGVuY2llcywgYW5kIHRvb2xzIG5lZWRlZCBmb3IgZGVwbG95bWVudCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERlcGVuZGVuY3kgaW5zdGFsbGF0aW9uOyBUb29sIHNldHVwOyBQYWNrYWdlIG1hbmFnZW1lbnQ7IEVudmlyb25tZW50IHByZXBhcmF0aW9uOyBCdWlsZCB0b29sIGluc3RhbGxhdGlvblxuICAgKlxuICAgKiBBV1M6IEFXUyBDb2RlQnVpbGQgaW5zdGFsbCBwaGFzZSBjb21tYW5kcyBmb3IgZGVwZW5kZW5jeSBpbnN0YWxsYXRpb24gYW5kIGVudmlyb25tZW50IHNldHVwXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50OyBvcHRpb25hbCBmb3IgaW5zdGFsbCBwaGFzZVxuICAgKiovXG4gIHJlYWRvbmx5IGluc3RhbGw/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgcHJlLWV4ZWN1dGlvbiBjb21tYW5kcyBmb3IgZGVwbG95bWVudCBzdGFnZSBwcmVwYXJhdGlvbiBlbmFibGluZyBjdXN0b20gc2V0dXAgYW5kIHZhbGlkYXRpb24gYmVmb3JlIG1haW4gZGVwbG95bWVudCBvcGVyYXRpb25zLiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG1haW4gZGVwbG95bWVudCBzdGFnZSB0byBwZXJmb3JtIGVudmlyb25tZW50IHByZXBhcmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgY3VzdG9tIHNldHVwIHRhc2tzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEVudmlyb25tZW50IHByZXBhcmF0aW9uOyBQcmUtZGVwbG95bWVudCB2YWxpZGF0aW9uOyBDdXN0b20gc2V0dXA7IENvbmZpZ3VyYXRpb24gdmVyaWZpY2F0aW9uOyBQcmVyZXF1aXNpdGUgY2hlY2tzXG4gICAqXG4gICAqIEFXUzogQVdTIENvZGVCdWlsZCBwcmUtZXhlY3V0aW9uIGNvbW1hbmRzIGZvciBkZXBsb3ltZW50IHN0YWdlIHByZXBhcmF0aW9uIGFuZCB2YWxpZGF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50OyBvcHRpb25hbCBmb3IgcHJlLWV4ZWN1dGlvbiBwaGFzZVxuICAgKiovXG4gIHJlYWRvbmx5IHByZT86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBwb3N0LWV4ZWN1dGlvbiBjb21tYW5kcyBmb3IgZGVwbG95bWVudCBzdGFnZSBjbGVhbnVwIGFuZCBmaW5hbGl6YXRpb24gZW5hYmxpbmcgY3VzdG9tIGNsZWFudXAgYW5kIHBvc3QtZGVwbG95bWVudCBvcGVyYXRpb25zLiBEZWZpbmVzIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciB0aGUgbWFpbiBkZXBsb3ltZW50IHN0YWdlIHRvIHBlcmZvcm0gY2xlYW51cCwgbm90aWZpY2F0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZmluYWxpemF0aW9uIHRhc2tzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFBvc3QtZGVwbG95bWVudCBjbGVhbnVwOyBOb3RpZmljYXRpb24gc2VuZGluZzsgVmFsaWRhdGlvbiBjaGVja3M7IFJlc291cmNlIGNsZWFudXA7IEZpbmFsaXphdGlvbiB0YXNrc1xuICAgKlxuICAgKiBBV1M6IEFXUyBDb2RlQnVpbGQgcG9zdC1leGVjdXRpb24gY29tbWFuZHMgZm9yIGRlcGxveW1lbnQgc3RhZ2UgY2xlYW51cCBhbmQgZmluYWxpemF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc2hlbGwgY29tbWFuZHMgaWYgcHJvdmlkZWQ7IGNvbW1hbmRzIGV4ZWN1dGUgaW4gQ29kZUJ1aWxkIExpbnV4IGVudmlyb25tZW50OyBvcHRpb25hbCBmb3IgcG9zdC1leGVjdXRpb24gcGhhc2VcbiAgICoqL1xuICByZWFkb25seSBwb3N0Pzogc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRzIGV4dGVuZHMgU3RhZ2VDb21tYW5kcyB7XG4gIHJlYWRvbmx5IHByZURlcGxveT86IFN0YWdlQ29tbWFuZHM7XG4gIHJlYWRvbmx5IHByZURlcGxveVZhbGlkYXRlPzogVmFsaWRhdGVTdGFnZUNvbW1hbmRzO1xuICByZWFkb25seSBkZXBsb3k/OiBTdGFnZUNvbW1hbmRzO1xuICByZWFkb25seSBwb3N0RGVwbG95VmFsaWRhdGU/OiBWYWxpZGF0ZVN0YWdlQ29tbWFuZHM7XG59XG4vKipcbiAqIFEtRU5IQU5DRUQtSU5URVJGQUNFXG4gKiBNREFBIERldk9wcyBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgQ0kvQ0QgcGlwZWxpbmUgb3JjaGVzdHJhdGlvbiB3aXRoIENvZGVDb21taXQgcmVwb3NpdG9yeSBpbnRlZ3JhdGlvbiBhbmQgbXVsdGktZW52aXJvbm1lbnQgZGVwbG95bWVudCBtYW5hZ2VtZW50LiBEZWZpbmVzIHRoZSBjb21wbGV0ZSBEZXZPcHMgaW5mcmFzdHJ1Y3R1cmUgaW5jbHVkaW5nIHNvdXJjZSByZXBvc2l0b3JpZXMsIGRlcGxveW1lbnQgcGlwZWxpbmVzLCBhbmQgQ0RLIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIGZvciBhdXRvbWF0ZWQgTURBQSBpbmZyYXN0cnVjdHVyZSBkZXBsb3ltZW50IGFjcm9zcyBtdWx0aXBsZSBlbnZpcm9ubWVudHMgd2l0aCBhcHByb3ZhbCBnYXRlcyBhbmQgdmFsaWRhdGlvbiBzdGFnZXMuXG4gKlxuICogVXNlIGNhc2VzOiBNdWx0aS1lbnZpcm9ubWVudCBDSS9DRCBwaXBlbGluZXM7IEF1dG9tYXRlZCBNREFBIGRlcGxveW1lbnRzOyBDb25maWd1cmF0aW9uIHJlcG9zaXRvcnkgbWFuYWdlbWVudDsgSW5mcmFzdHJ1Y3R1cmUgY2hhbmdlIG1hbmFnZW1lbnQ7IERldk9wcyBhdXRvbWF0aW9uXG4gKlxuICogQVdTOiBBV1MgQ29kZVBpcGVsaW5lIHdpdGggQ29kZUNvbW1pdCBzb3VyY2UgcmVwb3NpdG9yaWVzLCBDb2RlQnVpbGQgcHJvamVjdHMgZm9yIE1EQUEgQ0xJIGV4ZWN1dGlvbiwgYW5kIENESyBib290c3RyYXAgaW50ZWdyYXRpb24gZm9yIGluZnJhc3RydWN0dXJlIGRlcGxveW1lbnRcbiAqXG4gKiBWYWxpZGF0aW9uOiBtZGFhQ29kZUNvbW1pdFJlcG8gYW5kIGNvbmZpZ3NDb2RlQ29tbWl0UmVwbyBtdXN0IGJlIHZhbGlkIENvZGVDb21taXQgcmVwb3NpdG9yeSBuYW1lczsgcGlwZWxpbmVzIG11c3QgY29udGFpbiB2YWxpZCBQaXBlbGluZUNvbmZpZyBvYmplY3RzOyBjZGtCb290c3RyYXBDb250ZXh0IG11c3QgYmUgdmFsaWQgQ0RLIHF1YWxpZmllclxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldk9wc0NvbmZpZ0NvbnRlbnRzIGV4dGVuZHMgTWRhYUJhc2VDb25maWdDb250ZW50cywgQ29tbWFuZHMge1xuICByZWFkb25seSBtZGFhQ29kZUNvbW1pdFJlcG86IHN0cmluZztcbiAgcmVhZG9ubHkgbWRhYUJyYW5jaD86IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZmlnc0NvZGVDb21taXRSZXBvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZ3NCcmFuY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lcz86IHsgW3BpcGVsaW5lTmFtZTogc3RyaW5nXTogUGlwZWxpbmVDb25maWcgfTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogQ0RLIGJvb3RzdHJhcCBjb250ZXh0IHF1YWxpZmllciBmb3IgaWRlbnRpZnlpbmcgQ0RLIGJvb3RzdHJhcCByZXNvdXJjZXMgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRGVmaW5lcyB0aGUgQ0RLIGJvb3RzdHJhcCBxdWFsaWZpZXIgdXNlZCB0byBsb2NhdGUgQ0RLIGRlcGxveW1lbnQgcm9sZXMsIGJ1Y2tldHMsIGFuZCBvdGhlciBib290c3RyYXAgcmVzb3VyY2VzIGZvciBNREFBIGluZnJhc3RydWN0dXJlIGRlcGxveW1lbnQgdGhyb3VnaCBDSS9DRCBwaXBlbGluZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ0RLIGJvb3RzdHJhcCByZXNvdXJjZSBpZGVudGlmaWNhdGlvbjsgTXVsdGktZW52aXJvbm1lbnQgQ0RLIGRlcGxveW1lbnQ7IEJvb3RzdHJhcCByZXNvdXJjZSBpc29sYXRpb247IENESyByb2xlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBV1MgQ0RLIGJvb3RzdHJhcCByZXNvdXJjZXMgaW5jbHVkaW5nIGRlcGxveW1lbnQgcm9sZXMgYW5kIGFzc2V0IGJ1Y2tldHNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBDREsgYm9vdHN0cmFwIHF1YWxpZmllciBzdHJpbmc7IGRlZmF1bHRzIHRvIHN0YW5kYXJkIENESyBxdWFsaWZpZXIgaWYgbm90IHNwZWNpZmllZDsgb3B0aW9uYWwgc3RyaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgY2RrQm9vdHN0cmFwQ29udGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogSW5kaXZpZHVhbCBwaXBlbGluZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgZW52aXJvbm1lbnQtc3BlY2lmaWMgTURBQSBkZXBsb3ltZW50IHBpcGVsaW5lcyB3aXRoIGRvbWFpbiwgZW52aXJvbm1lbnQsIGFuZCBtb2R1bGUgZmlsdGVyaW5nIGNhcGFiaWxpdGllcy4gRGVmaW5lcyBwaXBlbGluZS1zcGVjaWZpYyBkZXBsb3ltZW50IHBhcmFtZXRlcnMgaW5jbHVkaW5nIHRhcmdldCBmaWx0ZXJzIGZvciBzZWxlY3RpdmUgZGVwbG95bWVudCwgY3VzdG9tIGNvbW1hbmQgZXhlY3V0aW9uLCBhbmQgcGlwZWxpbmUtbGV2ZWwgZGVwbG95bWVudCBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgdGFyZ2V0ZWQgaW5mcmFzdHJ1Y3R1cmUgZGVwbG95bWVudCB3aXRoaW4gbXVsdGktZG9tYWluIGRhdGEgYXJjaGl0ZWN0dXJlcy5cbiAqIFVzZSBjYXNlczogRW52aXJvbm1lbnQtc3BlY2lmaWMgcGlwZWxpbmVzOyBTZWxlY3RpdmUgbW9kdWxlIGRlcGxveW1lbnQ7IERvbWFpbi1maWx0ZXJlZCBkZXBsb3ltZW50czsgUGlwZWxpbmUgY3VzdG9taXphdGlvbjsgVGFyZ2V0ZWQgaW5mcmFzdHJ1Y3R1cmUgdXBkYXRlc1xuICogQVdTOiBBV1MgQ29kZVBpcGVsaW5lIGNvbmZpZ3VyYXRpb24gd2l0aCBkb21haW4vZW52aXJvbm1lbnQvbW9kdWxlIGZpbHRlcmluZyBmb3Igc2VsZWN0aXZlIE1EQUEgZGVwbG95bWVudCB0YXJnZXRpbmcgc3BlY2lmaWMgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50c1xuICogVmFsaWRhdGlvbjogZG9tYWluRmlsdGVyLCBlbnZGaWx0ZXIsIGFuZCBtb2R1bGVGaWx0ZXIgbXVzdCByZWZlcmVuY2UgdmFsaWQgTURBQSBkb21haW5zLCBlbnZpcm9ubWVudHMsIGFuZCBtb2R1bGVzOyBwaXBlbGluZSBtdXN0IGluaGVyaXQgdmFsaWQgQ29tbWFuZHMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQ29uZmlnIGV4dGVuZHMgQ29tbWFuZHMge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBkb21haW4gbmFtZXMgZm9yIHBpcGVsaW5lIGRlcGxveW1lbnQgZmlsdGVyaW5nIGVuYWJsaW5nIHNlbGVjdGl2ZSBkb21haW4tc3BlY2lmaWMgZGVwbG95bWVudHMuIFJlc3RyaWN0cyBwaXBlbGluZSBleGVjdXRpb24gdG8gb25seSB0aGUgc3BlY2lmaWVkIE1EQUEgZG9tYWlucywgYWxsb3dpbmcgZm9yIHRhcmdldGVkIGRlcGxveW1lbnQgc3RyYXRlZ2llcyBhbmQgZG9tYWluIGlzb2xhdGlvbiBpbiBtdWx0aS1kb21haW4gZGF0YSBhcmNoaXRlY3R1cmVzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERvbWFpbi1zcGVjaWZpYyBkZXBsb3ltZW50czsgTXVsdGktZG9tYWluIGZpbHRlcmluZzsgU2VsZWN0aXZlIGRvbWFpbiB1cGRhdGVzOyBEb21haW4gaXNvbGF0aW9uIHN0cmF0ZWdpZXNcbiAgICpcbiAgICogQVdTOiBBV1MgQ29kZVBpcGVsaW5lIGRvbWFpbiBmaWx0ZXJpbmcgZm9yIHNlbGVjdGl2ZSBNREFBIGRvbWFpbiBkZXBsb3ltZW50IGFuZCB0YXJnZXRlZCBpbmZyYXN0cnVjdHVyZSB1cGRhdGVzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgTURBQSBkb21haW4gbmFtZXMgaWYgcHJvdmlkZWQ7IGRvbWFpbnMgbXVzdCBleGlzdCBpbiBNREFBIGNvbmZpZ3VyYXRpb247IG9wdGlvbmFsIGZvciBkb21haW4gZmlsdGVyaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgZG9tYWluRmlsdGVyPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGVudmlyb25tZW50IG5hbWVzIGZvciBwaXBlbGluZSBkZXBsb3ltZW50IGZpbHRlcmluZyBlbmFibGluZyBzZWxlY3RpdmUgZW52aXJvbm1lbnQtc3BlY2lmaWMgZGVwbG95bWVudHMuIFJlc3RyaWN0cyBwaXBlbGluZSBleGVjdXRpb24gdG8gb25seSB0aGUgc3BlY2lmaWVkIE1EQUEgZW52aXJvbm1lbnRzLCBhbGxvd2luZyBmb3IgdGFyZ2V0ZWQgZGVwbG95bWVudCBzdHJhdGVnaWVzIGFuZCBlbnZpcm9ubWVudCBpc29sYXRpb24gYWNyb3NzIGRldmVsb3BtZW50LCBzdGFnaW5nLCBhbmQgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogRW52aXJvbm1lbnQtc3BlY2lmaWMgZGVwbG95bWVudHM7IE11bHRpLWVudmlyb25tZW50IGZpbHRlcmluZzsgU2VsZWN0aXZlIGVudmlyb25tZW50IHVwZGF0ZXM7IEVudmlyb25tZW50IGlzb2xhdGlvbiBzdHJhdGVnaWVzXG4gICAqXG4gICAqIEFXUzogQVdTIENvZGVQaXBlbGluZSBlbnZpcm9ubWVudCBmaWx0ZXJpbmcgZm9yIHNlbGVjdGl2ZSBNREFBIGVudmlyb25tZW50IGRlcGxveW1lbnQgYW5kIHRhcmdldGVkIGluZnJhc3RydWN0dXJlIHVwZGF0ZXNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBNREFBIGVudmlyb25tZW50IG5hbWVzIGlmIHByb3ZpZGVkOyBlbnZpcm9ubWVudHMgbXVzdCBleGlzdCBpbiBNREFBIGNvbmZpZ3VyYXRpb247IG9wdGlvbmFsIGZvciBlbnZpcm9ubWVudCBmaWx0ZXJpbmdcbiAgICoqL1xuICByZWFkb25seSBlbnZGaWx0ZXI/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgbW9kdWxlIG5hbWVzIGZvciBwaXBlbGluZSBkZXBsb3ltZW50IGZpbHRlcmluZyBlbmFibGluZyBzZWxlY3RpdmUgbW9kdWxlLXNwZWNpZmljIGRlcGxveW1lbnRzLiBSZXN0cmljdHMgcGlwZWxpbmUgZXhlY3V0aW9uIHRvIG9ubHkgdGhlIHNwZWNpZmllZCBNREFBIG1vZHVsZXMsIGFsbG93aW5nIGZvciB0YXJnZXRlZCBkZXBsb3ltZW50IHN0cmF0ZWdpZXMgYW5kIG1vZHVsZSBpc29sYXRpb24gZm9yIHNwZWNpZmljIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMgb3Igc2VydmljZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogTW9kdWxlLXNwZWNpZmljIGRlcGxveW1lbnRzOyBNdWx0aS1tb2R1bGUgZmlsdGVyaW5nOyBTZWxlY3RpdmUgbW9kdWxlIHVwZGF0ZXM7IENvbXBvbmVudCBpc29sYXRpb24gc3RyYXRlZ2llc1xuICAgKlxuICAgKiBBV1M6IEFXUyBDb2RlUGlwZWxpbmUgbW9kdWxlIGZpbHRlcmluZyBmb3Igc2VsZWN0aXZlIE1EQUEgbW9kdWxlIGRlcGxveW1lbnQgYW5kIHRhcmdldGVkIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudCB1cGRhdGVzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgTURBQSBtb2R1bGUgbmFtZXMgaWYgcHJvdmlkZWQ7IG1vZHVsZXMgbXVzdCBleGlzdCBpbiBNREFBIGNvbmZpZ3VyYXRpb247IG9wdGlvbmFsIGZvciBtb2R1bGUgZmlsdGVyaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgbW9kdWxlRmlsdGVyPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBEZXZPcHNDb25maWdQYXJzZXIgZXh0ZW5kcyBNZGFhQXBwQ29uZmlnUGFyc2VyPERldk9wc0NvbmZpZ0NvbnRlbnRzPiB7XG4gIHB1YmxpYyByZWFkb25seSBkZXZvcHNDb25maWc6IERldk9wc0NvbmZpZ0NvbnRlbnRzO1xuXG4gIGNvbnN0cnVjdG9yKHN0YWNrOiBTdGFjaywgcHJvcHM6IE1kYWFBcHBDb25maWdQYXJzZXJQcm9wcykge1xuICAgIHN1cGVyKHN0YWNrLCBwcm9wcywgY29uZmlnU2NoZW1hIGFzIFNjaGVtYSk7XG5cbiAgICB0aGlzLmRldm9wc0NvbmZpZyA9IHRoaXMuY29uZmlnQ29udGVudHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1kYWFEZXZvcHNDREtBcHAgZXh0ZW5kcyBNZGFhQ2RrQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM/OiBBcHBQcm9wcykge1xuICAgIHN1cGVyKHsgLi4ucHJvcHMsIC4uLnsgdXNlQm9vdHN0cmFwOiBmYWxzZSB9IH0sIE1kYWFDZGtBcHAucGFyc2VQYWNrYWdlSnNvbihgJHtfX2Rpcm5hbWV9Ly4uL3BhY2thZ2UuanNvbmApKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3ViR2VuZXJhdGVSZXNvdXJjZXMoXG4gICAgc3RhY2s6IFN0YWNrLFxuICAgIGwzQ29uc3RydWN0UHJvcHM6IE1kYWFMM0NvbnN0cnVjdFByb3BzLFxuICAgIHBhcnNlclByb3BzOiBNZGFhQXBwQ29uZmlnUGFyc2VyUHJvcHMsXG4gICkge1xuICAgIGNvbnN0IGFwcENvbmZpZyA9IG5ldyBEZXZPcHNDb25maWdQYXJzZXIoc3RhY2ssIHBhcnNlclByb3BzKTtcbiAgICBuZXcgTWRhYURldm9wc0wzQ29uc3RydWN0KHN0YWNrLCAnZGV2b3BzJywge1xuICAgICAgLi4ubDNDb25zdHJ1Y3RQcm9wcyxcbiAgICAgIC4uLmFwcENvbmZpZy5kZXZvcHNDb25maWcsXG4gICAgfSk7XG4gICAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBGaXhDZGtCdWlsZFByb2plY3QoKSk7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWRhYURldm9wc0wzQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBNZGFhTDNDb25zdHJ1Y3RQcm9wcywgRGV2T3BzQ29uZmlnQ29udGVudHMge31cblxuZXhwb3J0IGNsYXNzIE1kYWFEZXZvcHNMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQ0RLX0JPT1RTVFJBUF9DT05URVhUID0gJ2huYjY1OWZkcyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IE1kYWFEZXZvcHNMM0NvbnN0cnVjdFByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZGFhRGV2b3BzTDNDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIGNvbnN0IHBpcGVsaW5lUm9sZSA9IG5ldyBNZGFhUm9sZSh0aGlzLCAncGlwZWxpbmUtcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAncGlwZWxpbmUnLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2NvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZGFhUmVwbyA9IFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlOYW1lKHRoaXMsICdtZGFhLWltcG9ydC1yZXBvJywgdGhpcy5wcm9wcy5tZGFhQ29kZUNvbW1pdFJlcG8pO1xuICAgIGNvbnN0IGNvbmZpZ3NSZXBvID0gUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeU5hbWUodGhpcywgJ2NvbmZpZ3MtaW1wb3J0LXJlcG8nLCB0aGlzLnByb3BzLmNvbmZpZ3NDb2RlQ29tbWl0UmVwbyk7XG5cbiAgICBjb25zdCBrbXNLZXkgPSBuZXcgTWRhYUttc0tleSh0aGlzLCAna21zLWtleScsIHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBrZXlVc2VyUm9sZUlkczogW3BpcGVsaW5lUm9sZS5yb2xlSWRdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGV2T3BzQnVja2V0ID0gbmV3IE1kYWFCdWNrZXQodGhpcywgJ3BpcGVsaW5lLWJ1Y2tldCcsIHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBrbXNLZXksXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2RlQ29tbWl0RXZlbnRSb2xlID0gbmV3IE1kYWFSb2xlKHRoaXMsICdjb2RlY29tbWl0LWV2ZW50LXJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2NvZGVjb21taXQtZXZlbnQnLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2V2ZW50cy5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2RlQ29tbWl0UmVhZFBvbGljeSA9IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnY29kZWNvbW1pdDpHZXRCcmFuY2gnLCAnY29kZWNvbW1pdDpHZXRDb21taXQnLCAnY29kZWNvbW1pdDpHZXRSZXBvc2l0b3J5JywgJ2NvZGVjb21taXQ6R2l0UHVsbCddLFxuICAgICAgICAgIHJlc291cmNlczogW21kYWFSZXBvLnJlcG9zaXRvcnlBcm4sIGNvbmZpZ3NSZXBvLnJlcG9zaXRvcnlBcm5dLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2RlQ29tbWl0QWN0aW9uUm9sZSA9IG5ldyBNZGFhUm9sZSh0aGlzLCAnY29kZWNvbW1pdC1hY3Rpb24tcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnY29kZWNvbW1pdC1hY3Rpb24nLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwodGhpcy5hY2NvdW50KSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7IGNvZGVjb21taXRfcmVhZDogY29kZUNvbW1pdFJlYWRQb2xpY3kgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEFjdGlvblJvbGUgPSBuZXcgTWRhYVJvbGUodGhpcywgJ2NvZGVidWlsZC1hY3Rpb24tcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnY29kZWJ1aWxkLWFjdGlvbicsXG4gICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbCgnY29kZWJ1aWxkLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbmV3IEFjY291bnRQcmluY2lwYWwodGhpcy5hY2NvdW50KSxcbiAgICAgICksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQVdTQ2xvdWRGb3JtYXRpb25SZWFkT25seUFjY2VzcycpXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEFjdGlvblBvbGljeSA9IG5ldyBQb2xpY3kodGhpcywgJ2NvZGVidWlsZC1wb2xpY3knKTtcbiAgICBjb25zdCBjZGtMb29rdXBSb2xlID0gdGhpcy5pbXBvcnRDZGtSb2xlKHRoaXMsICdsb29rdXAnLCB0aGlzLnByb3BzLmNka0Jvb3RzdHJhcENvbnRleHQpO1xuICAgIGNvbnN0IGNka0RlcGxveVJvbGUgPSB0aGlzLmltcG9ydENka1JvbGUodGhpcywgJ2RlcGxveScsIHRoaXMucHJvcHMuY2RrQm9vdHN0cmFwQ29udGV4dCk7XG4gICAgY29uc3QgY2RrRXhlY1JvbGUgPSB0aGlzLmltcG9ydENka1JvbGUodGhpcywgJ2V4ZWMnLCB0aGlzLnByb3BzLmNka0Jvb3RzdHJhcENvbnRleHQpO1xuICAgIGNvbnN0IGNka0ZpbGVQdWJsaXNoaW5nUm9sZSA9IHRoaXMuaW1wb3J0Q2RrUm9sZSh0aGlzLCAnZmlsZS1wdWJsaXNoaW5nJywgdGhpcy5wcm9wcy5jZGtCb290c3RyYXBDb250ZXh0KTtcbiAgICBjb25zdCBjZGtJbWFnZVB1Ymxpc2hpbmdSb2xlID0gdGhpcy5pbXBvcnRDZGtSb2xlKHRoaXMsICdpbWFnZS1wdWJsaXNoaW5nJywgdGhpcy5wcm9wcy5jZGtCb290c3RyYXBDb250ZXh0KTtcbiAgICBjb25zdCBjZGtCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgYGNkay1idWNrZXQtaW1wb3J0YCxcbiAgICAgIGBjZGstJHt0aGlzLnByb3BzLmNka0Jvb3RzdHJhcENvbnRleHQgPz8gTWRhYURldm9wc0wzQ29uc3RydWN0LkRFRkFVTFRfQ0RLX0JPT1RTVFJBUF9DT05URVhUfS1hc3NldHMtJHtcbiAgICAgICAgdGhpcy5hY2NvdW50XG4gICAgICB9LSR7dGhpcy5yZWdpb259YCxcbiAgICApO1xuXG4gICAgY29kZUJ1aWxkQWN0aW9uUG9saWN5LmFkZFN0YXRlbWVudHMoXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQVNTVU1FQ0RLUk9MRVMnLFxuICAgICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGNka0xvb2t1cFJvbGUucm9sZUFybixcbiAgICAgICAgICBjZGtEZXBsb3lSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgY2RrRmlsZVB1Ymxpc2hpbmdSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgY2RrSW1hZ2VQdWJsaXNoaW5nUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIGNka0V4ZWNSb2xlLnJvbGVBcm4sXG4gICAgICAgIF0sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvZGVCdWlsZEFjdGlvblBvbGljeS5hZGRTdGF0ZW1lbnRzKFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ1MzTGlzdCcsXG4gICAgICAgIGFjdGlvbnM6IFsnczM6TGlzdEFsbE15QnVja2V0cyddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkRm9ybWF0aW9uQ2hhbmdlU2V0cycsXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb2RlQnVpbGRBY3Rpb25Qb2xpY3kuYWRkU3RhdGVtZW50cyhcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDREtTMycsXG4gICAgICAgIGFjdGlvbnM6IFsnczM6R2V0KicsICdzMzpQdXQqJywgJ3MzOkxpc3QqJ10sXG4gICAgICAgIHJlc291cmNlczogW2Nka0J1Y2tldC5idWNrZXRBcm4sIGNka0J1Y2tldC5hcm5Gb3JPYmplY3RzKCcqJyldLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIGNvZGVCdWlsZEFjdGlvblBvbGljeSxcbiAgICAgIFtcbiAgICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JywgcmVhc29uOiAnUGVybWlzc2lvbnMgYXJlIHNjb3BlZCBsZWFzdCBwcml2aWxlZ2UgZm9yIGRlcGxveW1lbnQgdGltZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ1BDSS5EU1MuMzIxLUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGNvZGVCdWlsZEFjdGlvblBvbGljeS5hdHRhY2hUb1JvbGUoY29kZUJ1aWxkQWN0aW9uUm9sZSk7XG4gICAgY29uc3QgbWFudWFsQWN0aW9uUm9sZSA9IG5ldyBNZGFhUm9sZSh0aGlzLCAnbWFudWFsLWFjdGlvbi1yb2xlJywge1xuICAgICAgcm9sZU5hbWU6ICdtYW51YWwtYWN0aW9uJyxcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBBY2NvdW50UHJpbmNpcGFsKHRoaXMuYWNjb3VudCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3N1bWVBY3Rpb25Sb2xlR3JhbnQgPSBjb2RlQnVpbGRBY3Rpb25Sb2xlLmdyYW50QXNzdW1lUm9sZShwaXBlbGluZVJvbGUpO1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5wcm9wcy5waXBlbGluZXMgPz8ge30pLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgY29uc3QgcGlwZWxpbmVQcm9wczogTWRhYVBpcGVsaW5lUHJvcHMgPSB7XG4gICAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLndpdGhTdWZmaXgoZW50cnlbMF0pLFxuICAgICAgICBwaXBlbGluZU5hbWU6IHRoaXMucHJvcHMubmFtaW5nLnJlc291cmNlTmFtZShlbnRyeVswXSksXG4gICAgICAgIC4uLmVudHJ5WzFdLFxuICAgICAgICByb2xlOiBwaXBlbGluZVJvbGUsXG4gICAgICAgIGFydGlmYWN0QnVja2V0OiBkZXZPcHNCdWNrZXQsXG4gICAgICAgIGNvZGVDb21taXRBY3Rpb25Sb2xlOiBjb2RlQ29tbWl0QWN0aW9uUm9sZSxcbiAgICAgICAgY29kZUNvbW1pdEV2ZW50Um9sZTogY29kZUNvbW1pdEV2ZW50Um9sZSxcbiAgICAgICAgY29kZUJ1aWxkQWN0aW9uUm9sZTogY29kZUJ1aWxkQWN0aW9uUm9sZSxcbiAgICAgICAgbWRhYVJlcG86IG1kYWFSZXBvLFxuICAgICAgICBjb25maWdzUmVwbzogY29uZmlnc1JlcG8sXG4gICAgICAgIGttc0tleToga21zS2V5LFxuICAgICAgICBtYW51YWxBY3Rpb25Sb2xlOiBtYW51YWxBY3Rpb25Sb2xlLFxuICAgICAgICBpbnN0YWxsOiBbLi4uKHRoaXMucHJvcHMuaW5zdGFsbCA/PyBbXSksIC4uLihlbnRyeVsxXS5pbnN0YWxsID8/IFtdKV0sXG4gICAgICAgIHByZTogWy4uLih0aGlzLnByb3BzLnByZSA/PyBbXSksIC4uLihlbnRyeVsxXS5wcmUgPz8gW10pXSxcbiAgICAgICAgcG9zdDogWy4uLih0aGlzLnByb3BzLnBvc3QgPz8gW10pLCAuLi4oZW50cnlbMV0ucG9zdCA/PyBbXSldLFxuICAgICAgICBwcmVEZXBsb3k6IHsgLi4udGhpcy5wcm9wcy5wcmVEZXBsb3ksIC4uLmVudHJ5WzFdLnByZURlcGxveSB9LFxuICAgICAgICBwcmVEZXBsb3lWYWxpZGF0ZTpcbiAgICAgICAgICB0aGlzLnByb3BzLnByZURlcGxveVZhbGlkYXRlIHx8IGVudHJ5WzFdLnByZURlcGxveVZhbGlkYXRlXG4gICAgICAgICAgICA/IHsgLi4udGhpcy5wcm9wcy5wcmVEZXBsb3lWYWxpZGF0ZSwgLi4uZW50cnlbMV0ucHJlRGVwbG95VmFsaWRhdGUgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGxveTogeyAuLi50aGlzLnByb3BzLmRlcGxveSwgLi4uZW50cnlbMV0uZGVwbG95IH0sXG4gICAgICAgIHBvc3REZXBsb3lWYWxpZGF0ZTpcbiAgICAgICAgICB0aGlzLnByb3BzLnBvc3REZXBsb3lWYWxpZGF0ZSB8fCBlbnRyeVsxXS5wb3N0RGVwbG95VmFsaWRhdGVcbiAgICAgICAgICAgID8geyAuLi50aGlzLnByb3BzLnBvc3REZXBsb3lWYWxpZGF0ZSwgLi4uZW50cnlbMV0ucG9zdERlcGxveVZhbGlkYXRlIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgTWRhYVBpcGVsaW5lKHRoaXMsIGBtZGFhLXBpcGVsaW5lLSR7ZW50cnlbMF19YCwgcGlwZWxpbmVQcm9wcyk7XG4gICAgICBhc3N1bWVBY3Rpb25Sb2xlR3JhbnQuYXBwbHlCZWZvcmUocGlwZWxpbmUpO1xuICAgIH0pO1xuXG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBwaXBlbGluZVJvbGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsIHJlYXNvbjogJ1Blcm1pc3Npb25zIGFyZSBzY29wZWQgbGVhc3QgcHJpdmlsZWdlIGZvciBkZXBsb3ltZW50IHRpbWUuJyB9LFxuICAgICAgICB7IGlkOiAnTklTVC44MDAuNTMuUjUtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIGNvZGVCdWlsZEFjdGlvblJvbGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsIHJlYXNvbjogJ0FXU0Nsb3VkRm9ybWF0aW9uUmVhZE9ubHlBY2Nlc3MgaXMgUmVhZCBPbmx5IEFjY2VzcycgfSxcbiAgICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JywgcmVhc29uOiAnUGVybWlzc2lvbnMgYXJlIHNjb3BlZCBsZWFzdCBwcml2aWxlZ2UgZm9yIGRlcGxveW1lbnQgdGltZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ1BDSS5EU1MuMzIxLUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIE1kYWFOYWdTdXBwcmVzc2lvbnMuYWRkQ29kZVJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgY29kZUNvbW1pdEFjdGlvblJvbGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsIHJlYXNvbjogJ1Blcm1pc3Npb25zIGFyZSBzY29wZWQgbGVhc3QgcHJpdmlsZWdlIGZvciBkZXBsb3ltZW50IHRpbWUuJyB9LFxuICAgICAgICB7IGlkOiAnTklTVC44MDAuNTMuUjUtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIGNvZGVDb21taXRFdmVudFJvbGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ1BDSS5EU1MuMzIxLUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbXBvcnRDZGtSb2xlKHNjb3BlOiBDb25zdHJ1Y3QsIHJvbGVOYW1lOiBzdHJpbmcsIGNka0Jvb3RzdHJhcENvbnRleHQ/OiBzdHJpbmcpOiBJUm9sZSB7XG4gICAgcmV0dXJuIFJvbGUuZnJvbVJvbGVOYW1lKFxuICAgICAgc2NvcGUsXG4gICAgICBgY2RrLSR7cm9sZU5hbWV9LXJvbGUtaW1wb3J0YCxcbiAgICAgIGBjZGstJHtjZGtCb290c3RyYXBDb250ZXh0ID8/IE1kYWFEZXZvcHNMM0NvbnN0cnVjdC5ERUZBVUxUX0NES19CT09UU1RSQVBfQ09OVEVYVH0tJHtyb2xlTmFtZX0tcm9sZS0ke1xuICAgICAgICBTdGFjay5vZihzY29wZSkuYWNjb3VudFxuICAgICAgfS0ke1N0YWNrLm9mKHNjb3BlKS5yZWdpb259YCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWRhYVBpcGVsaW5lUHJvcHMgZXh0ZW5kcyBQaXBlbGluZVByb3BzLCBTdGFnZUNvbW1hbmRzLCBQaXBlbGluZUNvbmZpZyB7XG4gIHJlYWRvbmx5IG5hbWluZzogSU1kYWFSZXNvdXJjZU5hbWluZztcbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvZGVDb21taXRBY3Rpb25Sb2xlOiBJUm9sZTtcbiAgcmVhZG9ubHkgY29kZUNvbW1pdEV2ZW50Um9sZTogSVJvbGU7XG4gIHJlYWRvbmx5IGNvZGVCdWlsZEFjdGlvblJvbGU6IElSb2xlO1xuICByZWFkb25seSBtZGFhUmVwbzogSVJlcG9zaXRvcnk7XG4gIHJlYWRvbmx5IG1kYWFCcmFuY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZ3NSZXBvOiBJUmVwb3NpdG9yeTtcbiAgcmVhZG9ubHkgY29uZmlnc0JyYW5jaD86IHN0cmluZztcbiAgcmVhZG9ubHkga21zS2V5OiBJS2V5O1xuICByZWFkb25seSBtYW51YWxBY3Rpb25Sb2xlOiBJUm9sZTtcbn1cblxuZXhwb3J0IGNsYXNzIE1kYWFQaXBlbGluZSBleHRlbmRzIFBpcGVsaW5lIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTWRhYVBpcGVsaW5lUHJvcHM7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZGFhUGlwZWxpbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIGNvbnN0IHNvdXJjZVN0YWdlID0gdGhpcy5hZGRTdGFnZSh7IHN0YWdlTmFtZTogJ1NvdXJjZScgfSk7XG4gICAgY29uc3QgbWRhYVNvdXJjZU91dHB1dCA9IG5ldyBBcnRpZmFjdCgnTURBQScpO1xuICAgIGNvbnN0IG1kYWFTb3VyY2VBY3Rpb24gPSB0aGlzLmNyZWF0ZUNvZGVDb21taXRTb3VyY2VBY3Rpb24oXG4gICAgICAnbWRhYScsXG4gICAgICBtZGFhU291cmNlT3V0cHV0LFxuICAgICAgdGhpcy5wcm9wcy5jb2RlQ29tbWl0QWN0aW9uUm9sZSxcbiAgICAgIHRoaXMucHJvcHMuY29kZUNvbW1pdEV2ZW50Um9sZSxcbiAgICAgIHRoaXMucHJvcHMubWRhYVJlcG8sXG4gICAgICB0aGlzLnByb3BzLm1kYWFCcmFuY2ggPz8gJ21haW4nLFxuICAgICk7XG4gICAgY29uc3QgY29uZmlnU291cmNlT3V0cHV0ID0gbmV3IEFydGlmYWN0KCdDT05GSUdTJyk7XG4gICAgY29uc3QgY29uZmlnU291cmNlQWN0aW9uID0gdGhpcy5jcmVhdGVDb2RlQ29tbWl0U291cmNlQWN0aW9uKFxuICAgICAgJ2NvbmZpZ3MnLFxuICAgICAgY29uZmlnU291cmNlT3V0cHV0LFxuICAgICAgdGhpcy5wcm9wcy5jb2RlQ29tbWl0QWN0aW9uUm9sZSxcbiAgICAgIHRoaXMucHJvcHMuY29kZUNvbW1pdEV2ZW50Um9sZSxcbiAgICAgIHRoaXMucHJvcHMuY29uZmlnc1JlcG8sXG4gICAgICB0aGlzLnByb3BzLmNvbmZpZ3NCcmFuY2ggPz8gJ21haW4nLFxuICAgICk7XG4gICAgc291cmNlU3RhZ2UuYWRkQWN0aW9uKG1kYWFTb3VyY2VBY3Rpb24pO1xuICAgIHNvdXJjZVN0YWdlLmFkZEFjdGlvbihjb25maWdTb3VyY2VBY3Rpb24pO1xuXG4gICAgY29uc3QgcGlwZWxpbmVQcm9qZWN0czogUGlwZWxpbmVQcm9qZWN0W10gPSBbXTtcbiAgICBjb25zdCBwcmVEZXBsb3lPdXRwdXQgPSBuZXcgQXJ0aWZhY3QoJ1BSRURFUExPWV9PVVRQVVQnKTtcbiAgICB0aGlzLmFkZFByZURlcGxveVN0YWdlKGNvbmZpZ1NvdXJjZU91dHB1dCwgbWRhYVNvdXJjZU91dHB1dCwgcHJlRGVwbG95T3V0cHV0LCBwaXBlbGluZVByb2plY3RzKTtcbiAgICB0aGlzLmFkZFByZURlcGxveVZhbGlkYXRlU3RhZ2UocHJlRGVwbG95T3V0cHV0LCBwaXBlbGluZVByb2plY3RzKTtcbiAgICB0aGlzLmFkZERlcGxveVN0YWdlKHByZURlcGxveU91dHB1dCwgcGlwZWxpbmVQcm9qZWN0cyk7XG4gICAgdGhpcy5hZGRQb3N0RGVwbG95VmFsaWRhdGVTdGFnZShwcmVEZXBsb3lPdXRwdXQsIHBpcGVsaW5lUHJvamVjdHMpO1xuXG4gICAgY29uc3QgY29kZUJ1aWxkQWN0aW9uUG9saWN5ID0gbmV3IFBvbGljeSh0aGlzLCAnY29kZWJ1aWxkLWFjdGlvbi1wb2xpY3knLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnY29kZWJ1aWxkOlN0YXJ0QnVpbGQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IHBpcGVsaW5lUHJvamVjdHMubWFwKHggPT4geC5wcm9qZWN0QXJuKSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBjb2RlQnVpbGRBY3Rpb25Qb2xpY3ksXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgYXBwcm9wcmlhdGUuJyB9LFxuICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdJbmxpbmUgcG9saWN5IGFwcHJvcHJpYXRlLicgfSxcbiAgICAgICAgeyBpZDogJ1BDSS5EU1MuMzIxLUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSBhcHByb3ByaWF0ZS4nIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgdGhpcy5wcm9wcy5jb2RlQnVpbGRBY3Rpb25Sb2xlLmF0dGFjaElubGluZVBvbGljeShjb2RlQnVpbGRBY3Rpb25Qb2xpY3kpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQb3N0RGVwbG95VmFsaWRhdGVTdGFnZShwcmVEZXBsb3lPdXRwdXQ6IEFydGlmYWN0LCBwaXBlbGluZVByb2plY3RzOiBQaXBlbGluZVByb2plY3RbXSkge1xuICAgIGlmICh0aGlzLnByb3BzLnBvc3REZXBsb3lWYWxpZGF0ZSkge1xuICAgICAgY29uc3QgW3ZhbGlkYXRlQWN0aW9uLCB2YWxpZGF0ZVByb2plY3RdID0gdGhpcy5jcmVhdGVDb2RlQnVpbGRBY3Rpb24oXG4gICAgICAgICdQb3N0RGVwbG95VmFsaWRhdGUnLFxuICAgICAgICBwcmVEZXBsb3lPdXRwdXQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7XG4gICAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbLi4uKHRoaXMucHJvcHMuaW5zdGFsbCA/PyBbXSksIC4uLih0aGlzLnByb3BzLnBvc3REZXBsb3lWYWxpZGF0ZT8uaW5zdGFsbCA/PyBbXSldLFxuICAgICAgICAgIHByZUNvbW1hbmRzOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tbWFuZHM6IFsuLi4odGhpcy5wcm9wcy5wb3N0RGVwbG95VmFsaWRhdGU/LmNvbW1hbmRzID8/IFtdKV0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBwaXBlbGluZVByb2plY3RzLnB1c2godmFsaWRhdGVQcm9qZWN0KTtcbiAgICAgIGNvbnN0IHBvc3REZXBsb3lWYWxpZGF0ZVN0YWdlID0gdGhpcy5hZGRTdGFnZSh7XG4gICAgICAgIHN0YWdlTmFtZTogJ1Bvc3QtRGVwbG95LVZhbGlkYXRlJyxcbiAgICAgIH0pO1xuICAgICAgcG9zdERlcGxveVZhbGlkYXRlU3RhZ2UuYWRkQWN0aW9uKHZhbGlkYXRlQWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlcGxveVN0YWdlKHByZURlcGxveU91dHB1dDogQXJ0aWZhY3QsIHBpcGVsaW5lUHJvamVjdHM6IFBpcGVsaW5lUHJvamVjdFtdKSB7XG4gICAgY29uc3QgZGVwbG95U3RhZ2UgPSB0aGlzLmFkZFN0YWdlKHsgc3RhZ2VOYW1lOiAnRGVwbG95JyB9KTtcbiAgICBjb25zdCBbZGVwbG95QWN0aW9uLCBkZXBsb3lQcm9qZWN0XSA9IHRoaXMuY3JlYXRlQ29kZUJ1aWxkQWN0aW9uKFxuICAgICAgJ0RlcGxveScsXG5cbiAgICAgIHByZURlcGxveU91dHB1dCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbJ24gMTgnLCAuLi4odGhpcy5wcm9wcy5pbnN0YWxsID8/IFtdKSwgLi4uKHRoaXMucHJvcHMuZGVwbG95Py5pbnN0YWxsID8/IFtdKV0sXG4gICAgICAgIHByZUNvbW1hbmRzOiBbLi4uKHRoaXMucHJvcHMucHJlID8/IFtdKSwgLi4uKHRoaXMucHJvcHMuZGVwbG95Py5wcmUgPz8gW10pXSxcbiAgICAgICAgY29tbWFuZHM6IFt0aGlzLmNyZWF0ZU1kYWFDb21tYW5kKCdkZXBsb3knKV0sXG4gICAgICAgIHBvc3RDb21tYW5kczogWy4uLih0aGlzLnByb3BzLnBvc3QgPz8gW10pLCAuLi4odGhpcy5wcm9wcy5kZXBsb3k/LnBvc3QgPz8gW10pXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBkZXBsb3lTdGFnZS5hZGRBY3Rpb24oZGVwbG95QWN0aW9uKTtcbiAgICBwaXBlbGluZVByb2plY3RzLnB1c2goZGVwbG95UHJvamVjdCk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcmVEZXBsb3lWYWxpZGF0ZVN0YWdlKHByZURlcGxveU91dHB1dDogQXJ0aWZhY3QsIHBpcGVsaW5lUHJvamVjdHM6IFBpcGVsaW5lUHJvamVjdFtdKSB7XG4gICAgY29uc3QgcHJlRGVwbG95VmFsaWRhdGVTdGFnZSA9IHRoaXMuYWRkU3RhZ2Uoe1xuICAgICAgc3RhZ2VOYW1lOiAnUHJlLURlcGxveS1WYWxpZGF0ZScsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMucHJvcHMucHJlRGVwbG95VmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IFt2YWxpZGF0ZUFjdGlvbiwgdmFsaWRhdGVQcm9qZWN0XSA9IHRoaXMuY3JlYXRlQ29kZUJ1aWxkQWN0aW9uKFxuICAgICAgICAnUHJlRGVwbG95VmFsaWRhdGUnLFxuICAgICAgICBwcmVEZXBsb3lPdXRwdXQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7XG4gICAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbLi4uKHRoaXMucHJvcHMuaW5zdGFsbCA/PyBbXSksIC4uLih0aGlzLnByb3BzLnByZURlcGxveVZhbGlkYXRlPy5pbnN0YWxsID8/IFtdKV0sXG4gICAgICAgICAgcHJlQ29tbWFuZHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21tYW5kczogWy4uLih0aGlzLnByb3BzLnByZURlcGxveVZhbGlkYXRlPy5jb21tYW5kcyA/PyBbXSldLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHByZURlcGxveVZhbGlkYXRlU3RhZ2UuYWRkQWN0aW9uKHZhbGlkYXRlQWN0aW9uKTtcbiAgICAgIHBpcGVsaW5lUHJvamVjdHMucHVzaCh2YWxpZGF0ZVByb2plY3QpO1xuICAgIH1cbiAgICBwcmVEZXBsb3lWYWxpZGF0ZVN0YWdlLmFkZEFjdGlvbihcbiAgICAgIG5ldyBNYW51YWxBcHByb3ZhbEFjdGlvbih7XG4gICAgICAgIGFjdGlvbk5hbWU6ICdBcHByb3ZlJyxcbiAgICAgICAgcm9sZTogdGhpcy5wcm9wcy5tYW51YWxBY3Rpb25Sb2xlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHJlRGVwbG95U3RhZ2UoXG4gICAgY29uZmlnU291cmNlT3V0cHV0OiBBcnRpZmFjdCxcbiAgICBtZGFhU291cmNlT3V0cHV0OiBBcnRpZmFjdCxcbiAgICBwcmVEZXBsb3lPdXRwdXQ6IEFydGlmYWN0LFxuICAgIHBpcGVsaW5lUHJvamVjdHM6IFBpcGVsaW5lUHJvamVjdFtdLFxuICApOiBQaXBlbGluZVByb2plY3Qge1xuICAgIGNvbnN0IHByZURlcGxveVN0YWdlID0gdGhpcy5hZGRTdGFnZSh7IHN0YWdlTmFtZTogJ1ByZS1EZXBsb3knIH0pO1xuXG4gICAgY29uc3QgW2RpZmZBY3Rpb24sIGRpZmZQcm9qZWN0XSA9IHRoaXMuY3JlYXRlQ29kZUJ1aWxkQWN0aW9uKFxuICAgICAgJ1N5bnRoLUFuZC1EaWZmJyxcbiAgICAgIGNvbmZpZ1NvdXJjZU91dHB1dCxcbiAgICAgIFttZGFhU291cmNlT3V0cHV0XSxcbiAgICAgIFtwcmVEZXBsb3lPdXRwdXRdLFxuICAgICAge1xuICAgICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgICAgICAnbiAxOCcsXG4gICAgICAgICAgJ2xuIC1zICRDT0RFQlVJTERfU1JDX0RJUl9NREFBIC4vbWRhYScsXG4gICAgICAgICAgLi4uKHRoaXMucHJvcHMuaW5zdGFsbCA/PyBbXSksXG4gICAgICAgICAgLi4uKHRoaXMucHJvcHMucHJlRGVwbG95Py5pbnN0YWxsID8/IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAgcHJlQ29tbWFuZHM6IFsuLi4odGhpcy5wcm9wcy5wcmUgPz8gW10pLCAuLi4odGhpcy5wcm9wcy5wcmVEZXBsb3k/LnByZSA/PyBbXSldLFxuICAgICAgICBjb21tYW5kczogW3RoaXMuY3JlYXRlTWRhYUNvbW1hbmQoJ2RpZmYnKV0sXG4gICAgICAgIHBvc3RDb21tYW5kczogWy4uLih0aGlzLnByb3BzLnBvc3QgPz8gW10pLCAuLi4odGhpcy5wcm9wcy5wcmVEZXBsb3k/LnBvc3QgPz8gW10pXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBwcmVEZXBsb3lTdGFnZS5hZGRBY3Rpb24oZGlmZkFjdGlvbik7XG4gICAgcGlwZWxpbmVQcm9qZWN0cy5wdXNoKGRpZmZQcm9qZWN0KTtcbiAgICByZXR1cm4gZGlmZlByb2plY3Q7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvZGVDb21taXRTb3VyY2VBY3Rpb24oXG4gICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIG91dHB1dDogQXJ0aWZhY3QsXG4gICAgcm9sZTogSVJvbGUsXG4gICAgZXZlbnRSb2xlOiBJUm9sZSxcbiAgICByZXBvc2l0b3J5OiBJUmVwb3NpdG9yeSxcbiAgICBicmFuY2g6IHN0cmluZyxcbiAgKTogQ29kZUNvbW1pdFNvdXJjZUFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb2RlQ29tbWl0U291cmNlQWN0aW9uKHtcbiAgICAgIG91dHB1dCxcbiAgICAgIGFjdGlvbk5hbWU6IGFjdGlvbk5hbWUsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgcnVuT3JkZXI6IHVuZGVmaW5lZCxcbiAgICAgIGJyYW5jaDogYnJhbmNoLFxuICAgICAgdHJpZ2dlcjogQ29kZUNvbW1pdFRyaWdnZXIuRVZFTlRTLFxuICAgICAgcmVwb3NpdG9yeTogcmVwb3NpdG9yeSxcbiAgICAgIGV2ZW50Um9sZTogZXZlbnRSb2xlLFxuICAgICAgY29kZUJ1aWxkQ2xvbmVPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1kYWFDb21tYW5kKG1kYWFBY3Rpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWRhYUNtZCA9IFtgLi9tZGFhL2Jpbi9tZGFhICR7bWRhYUFjdGlvbn1gXTtcbiAgICBpZiAodGhpcy5wcm9wcy5kb21haW5GaWx0ZXIpIHtcbiAgICAgIG1kYWFDbWQucHVzaChgLWQgJHt0aGlzLnByb3BzLmRvbWFpbkZpbHRlci5qb2luKCcsJyl9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmVudkZpbHRlcikge1xuICAgICAgbWRhYUNtZC5wdXNoKGAtZSAke3RoaXMucHJvcHMuZW52RmlsdGVyLmpvaW4oJywnKX1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMubW9kdWxlRmlsdGVyKSB7XG4gICAgICBtZGFhQ21kLnB1c2goYC1tICR7dGhpcy5wcm9wcy5tb2R1bGVGaWx0ZXIuam9pbignLCcpfWApO1xuICAgIH1cbiAgICByZXR1cm4gbWRhYUNtZC5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvZGVCdWlsZEFjdGlvbihcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgaW5wdXQ6IEFydGlmYWN0LFxuICAgIGV4dHJhSW5wdXRzPzogQXJ0aWZhY3RbXSxcbiAgICBvdXRwdXRzPzogQXJ0aWZhY3RbXSxcbiAgICBjb21tYW5kcz86IHtcbiAgICAgIGluc3RhbGxDb21tYW5kcz86IHN0cmluZ1tdO1xuICAgICAgcHJlQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgICAgIGNvbW1hbmRzPzogc3RyaW5nW107XG4gICAgICBwb3N0Q29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgICB9LFxuICApOiBbQ29kZUJ1aWxkQWN0aW9uLCBQaXBlbGluZVByb2plY3RdIHtcbiAgICBjb25zdCBwcm9qZWN0UHJvcHM6IFBpcGVsaW5lUHJvamVjdFByb3BzID0ge1xuICAgICAgcHJvamVjdE5hbWU6IHRoaXMucHJvcHMubmFtaW5nLnJlc291cmNlTmFtZShhY3Rpb25OYW1lKSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMucHJvcHMua21zS2V5LFxuICAgICAgcm9sZTogdGhpcy5wcm9wcy5jb2RlQnVpbGRBY3Rpb25Sb2xlLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLlgyX0xBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfNSxcbiAgICAgIH0sXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBjb21tYW5kcz8uaW5zdGFsbENvbW1hbmRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJlX2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogY29tbWFuZHM/LnByZUNvbW1hbmRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBjb21tYW5kcz8uY29tbWFuZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogY29tbWFuZHM/LnBvc3RDb21tYW5kcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhcnRpZmFjdHM6IHtcbiAgICAgICAgICBmaWxlczogWycqKi8qJ10sXG4gICAgICAgICAgJ2VuYWJsZS1zeW1saW5rcyc6ICd5ZXMnLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZFByb2plY3QgPSBuZXcgUGlwZWxpbmVQcm9qZWN0KHRoaXMsIGBjb2RlYnVpbGQtcHJvamVjdC0ke2FjdGlvbk5hbWV9YCwgcHJvamVjdFByb3BzKTtcbiAgICBjb25zdCBjb2RlQnVpbGRBY3Rpb25Qcm9wczogQ29kZUJ1aWxkQWN0aW9uUHJvcHMgPSB7XG4gICAgICBpbnB1dDogaW5wdXQsXG4gICAgICBleHRyYUlucHV0czogZXh0cmFJbnB1dHMsXG4gICAgICBhY3Rpb25OYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgcHJvamVjdDogY29kZUJ1aWxkUHJvamVjdCxcbiAgICAgIHJvbGU6IHRoaXMucHJvcHMuY29kZUJ1aWxkQWN0aW9uUm9sZSxcbiAgICAgIG91dHB1dHM6IG91dHB1dHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBDb2RlQnVpbGRBY3Rpb24oY29kZUJ1aWxkQWN0aW9uUHJvcHMpO1xuICAgIHJldHVybiBbYWN0aW9uLCBjb2RlQnVpbGRQcm9qZWN0XTtcbiAgfVxufVxuXG5jbGFzcyBGaXhDZGtCdWlsZFByb2plY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHVibGljIHZpc2l0KGNvbnN0cnVjdDogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChjb25zdHJ1Y3Qubm9kZS5pZC5zdGFydHNXaXRoKCdjb2RlYnVpbGQtcHJvamVjdCcpKSB7XG4gICAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgICAgY29uc3RydWN0LFxuICAgICAgICBbXG4gICAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUNvZGVCdWlsZFByb2plY3RTb3VyY2VSZXBvVXJsJywgcmVhc29uOiAnUGlwZWxpbmUgc291cmNlIGlzIENvZGVDb21taXQuJyB9LFxuICAgICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1Db2RlQnVpbGRQcm9qZWN0U291cmNlUmVwb1VybCcsIHJlYXNvbjogJ1BpcGVsaW5lIHNvdXJjZSBpcyBDb2RlQ29tbWl0LicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -8,37 +8,35 @@
8
8
  "bin": {
9
9
  "devops-cdk": "bin/devops.js"
10
10
  },
11
- "version": "1.4.0",
11
+ "version": "1.6.0",
12
12
  "license": "Apache-2.0",
13
13
  "scripts": {
14
- "build": "tsc && typescript-json-schema --required --noExtraProps tsconfig.json DevOpsConfigContents --include 'lib/*.ts' --include '../../../../node_modules/@types/**/*.ts' --include 'lib/config-schema.json' > lib/config-schema.json && cp lib/config-schema.json ../../../../schemas/${npm_package_name}.json",
14
+ "build": "../../../../scripts/build/build_package.sh DevOpsConfigContents",
15
15
  "watch": "tsc -w",
16
16
  "test": "jest --passWithNoTests --coverage",
17
17
  "cdk": "cdk",
18
- "lint": "eslint --max-warnings 0 -c ../../../../.eslintrc.json '**/*.{ts,tsx}' --ignore-pattern 'dist/*' --ignore-pattern 'node_modules/*' --ignore-pattern \"*.d.ts\" "
18
+ "lint": "eslint --max-warnings 0 -c ../../../../eslint.config.mjs",
19
+ "test:package-docs": "../../../../scripts/generate_docs/test_package_docs.sh"
19
20
  },
20
21
  "main": "lib/index.js",
21
22
  "types": "lib/index.d.ts",
22
23
  "devDependencies": {
23
- "@aws-mdaa/testing": "1.4.0",
24
24
  "@types/jest": "29.5.14",
25
25
  "@types/node": "22.9.0",
26
26
  "@types/prettier": "2.6.0",
27
27
  "jest": "29.7.0",
28
- "ts-jest": "29.4.6",
28
+ "ts-jest": "29.4.9",
29
29
  "ts-node": "10.9.2",
30
30
  "typescript": "5.9.3",
31
- "typescript-json-schema": "0.67.1"
31
+ "typescript-json-schema": "0.67.4"
32
32
  },
33
33
  "dependencies": {
34
- "@aws-mdaa/app": "1.4.0",
35
- "@aws-mdaa/config": "1.4.0",
36
- "@aws-mdaa/iam-constructs": "1.4.0",
37
- "@aws-mdaa/iam-role-helper": "1.4.0",
38
- "@aws-mdaa/kms-constructs": "1.4.0",
39
- "@aws-mdaa/l3-construct": "1.4.0",
40
- "@aws-mdaa/s3-constructs": "1.4.0",
41
- "ajv": "8.17.1",
34
+ "@aws-mdaa/app": "1.6.0",
35
+ "@aws-mdaa/iam-constructs": "1.6.0",
36
+ "@aws-mdaa/kms-constructs": "1.6.0",
37
+ "@aws-mdaa/l3-construct": "1.6.0",
38
+ "@aws-mdaa/s3-constructs": "1.6.0",
39
+ "ajv": "8.18.0",
42
40
  "aws-cdk-lib": "2.220.0",
43
41
  "cdk-nag": "2.37.55",
44
42
  "constructs": "10.0.96",
@@ -49,5 +47,8 @@
49
47
  "repository": {
50
48
  "type": "git",
51
49
  "url": "https://github.com/aws/modern-data-architecture-accelerator"
50
+ },
51
+ "mdaa": {
52
+ "deployStage": "0"
52
53
  }
53
54
  }
@@ -0,0 +1,110 @@
1
+ # (Required) The CodeCommit repo containing these configs
2
+ # Pipelines will be triggered on updates to this repo
3
+ configsCodeCommitRepo: test-config-repo
4
+ # (Optional) The branch within the configs repo to be deployed
5
+ configsBranch: test-branch
6
+ # (Required) The CodeCommit repo containing the MDAA source code
7
+ # Pipelines will be triggered on updates to this repo
8
+ mdaaCodeCommitRepo: test-mdaa-repo
9
+ # (Optional) The branch within the MDAA repo to be deployed
10
+ mdaaBranch: test-mdaa-branch
11
+ # (Optional) CDK bootstrap context qualifier for identifying CDK bootstrap
12
+ # resources (deployment roles, asset buckets) in the target environment
13
+ cdkBootstrapContext: my-cdk-qualifier
14
+ # (Optional) Install commands to be run on all stages of all pipelines
15
+ install:
16
+ - echo testing
17
+ # (Optional) Pre commands to be run on all stages of all pipelines
18
+ pre:
19
+ - echo testing
20
+ # (Optional) Post commands to be run on all stages of all pipelines
21
+ post:
22
+ - echo testing
23
+ # (Optional) Commands to be run on PreDeploy stage of all pipelines
24
+ preDeploy:
25
+ # Install dependencies for pre-deploy stage
26
+ install:
27
+ - echo testing
28
+ # Pre-execution commands for pre-deploy stage
29
+ pre:
30
+ - echo testing
31
+ # Post-execution commands for pre-deploy stage
32
+ post:
33
+ - echo testing
34
+ # (Optional) Commands to be run on PreDeployValidate stage of all pipelines
35
+ preDeployValidate:
36
+ # Install testing tools for pre-deploy validation
37
+ install:
38
+ - echo testing
39
+ # Validation commands for pre-deploy quality gate
40
+ commands:
41
+ - echo testing
42
+ # (Optional) Commands to be run on Deploy stage of all pipelines
43
+ deploy:
44
+ # Install dependencies for deploy stage
45
+ install:
46
+ - echo testing
47
+ # Pre-execution commands for deploy stage
48
+ pre:
49
+ - echo testing
50
+ # Post-execution commands for deploy stage
51
+ post:
52
+ - echo testing
53
+ # (Optional) Commands to be run on PostDeployValidate stage of all pipelines
54
+ postDeployValidate:
55
+ # Install testing tools for post-deploy validation
56
+ install:
57
+ - echo testing
58
+ # Validation commands for post-deploy quality gate
59
+ commands:
60
+ - echo testing
61
+ # Pipelines to be deployed
62
+ pipelines:
63
+ # Pipeline Name
64
+ domain-test1:
65
+ # Domains which will be deployed via this pipeline
66
+ domainFilter:
67
+ - testdomain1
68
+ # Envs which will be deployed via this pipeline
69
+ envFilter:
70
+ - testenv
71
+ # Modules which will be deployed via this pipeline
72
+ moduleFilter:
73
+ - testmodule1
74
+ # (Optional) Install commands for all stages of this pipeline
75
+ install:
76
+ - echo testing
77
+ # (Optional) Pre commands for all stages of this pipeline
78
+ pre:
79
+ - echo testing
80
+ # (Optional) Post commands for all stages of this pipeline
81
+ post:
82
+ - echo testing
83
+ # (Optional) Pipeline-level PreDeploy stage commands
84
+ preDeploy:
85
+ install:
86
+ - echo testing
87
+ pre:
88
+ - echo testing
89
+ post:
90
+ - echo testing
91
+ # (Optional) Pipeline-level PreDeployValidate stage commands
92
+ preDeployValidate:
93
+ install:
94
+ - echo testing
95
+ commands:
96
+ - echo testing
97
+ # (Optional) Pipeline-level Deploy stage commands
98
+ deploy:
99
+ install:
100
+ - echo testing
101
+ pre:
102
+ - echo testing
103
+ post:
104
+ - echo testing
105
+ # (Optional) Pipeline-level PostDeployValidate stage commands
106
+ postDeployValidate:
107
+ install:
108
+ - echo testing
109
+ commands:
110
+ - echo testing
@@ -0,0 +1,20 @@
1
+ # Minimal DevOps module configuration.
2
+ # Deploys a single CI/CD pipeline for a domain with CodeCommit
3
+ # integration.
4
+
5
+ # The CodeCommit repo containing these configs
6
+ configsCodeCommitRepo: test-config-repo
7
+ # The CodeCommit repo containing the MDAA source code
8
+ mdaaCodeCommitRepo: test-mdaa-repo
9
+ # Pipelines to be deployed
10
+ pipelines:
11
+ my-pipeline:
12
+ # Domains deployed via this pipeline
13
+ domainFilter:
14
+ - my-domain
15
+ # Envs deployed via this pipeline
16
+ envFilter:
17
+ - dev
18
+ # Modules deployed via this pipeline
19
+ moduleFilter:
20
+ - my-module
package/mdaa.config.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "DEPLOY_STAGE": "0"
3
- }