projen
Version:
CDK for software projects
184 lines • 35.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SonarqubeProperties = exports.SonarqubeRegion = exports.SonarqubeLogLevel = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const component_1 = require("../component");
const properties_file_1 = require("../properties-file");
/**
* Log level for SonarQube analysis.
*/
var SonarqubeLogLevel;
(function (SonarqubeLogLevel) {
/** Standard logging (default) */
SonarqubeLogLevel["INFO"] = "INFO";
/** Verbose logging */
SonarqubeLogLevel["DEBUG"] = "DEBUG";
/** Most verbose, includes plugin/library output */
SonarqubeLogLevel["TRACE"] = "TRACE";
})(SonarqubeLogLevel || (exports.SonarqubeLogLevel = SonarqubeLogLevel = {}));
/**
* SonarQube Cloud region.
*/
var SonarqubeRegion;
(function (SonarqubeRegion) {
/** EU instance (default) */
SonarqubeRegion["EU"] = "eu";
/** US instance */
SonarqubeRegion["US"] = "us";
})(SonarqubeRegion || (exports.SonarqubeRegion = SonarqubeRegion = {}));
/**
* Manages the `sonar-project.properties` configuration file for SonarQube
* analysis.
*
* This component generates a `sonar-project.properties` file at the project
* root with the specified configuration parameters. It provides typed options
* whose structure mirrors the dot-notation property namespaces.
*
* @see https://docs.sonarsource.com/sonarqube-cloud/analyzing-source-code/analysis-parameters/parameters-not-settable-in-ui
*
* @example
* new SonarqubeProperties(project, {
* projectKey: 'my-org_my-project',
* organization: 'my-org',
* sources: 'src',
* tests: 'test',
* exclusions: ['*{@literal *}/node_modules/**'],
* coverage: { exclusions: ['*{@literal *}/test/**'] },
* javascript: { lcov: { reportPaths: ['coverage/lcov.info'] } },
* sourceEncoding: 'UTF-8',
* });
*/
class SonarqubeProperties extends component_1.Component {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.sonarqube.SonarqubeProperties", version: "0.103.12" };
/**
* The underlying properties file.
*/
file;
constructor(scope, options) {
super(scope);
const sonar = {};
// Project identification (mandatory)
sonar.projectKey = options.projectKey;
if (options.organization) {
sonar.organization = options.organization;
}
// Server connection
if (options.region) {
sonar.region = options.region;
}
// Project information
if (options.projectName) {
sonar.projectName = options.projectName;
}
if (options.projectVersion) {
sonar.projectVersion = options.projectVersion;
}
// SCM (sonar.scm.*)
if (options.scm) {
sonar.scm = {};
if (options.scm.provider) {
sonar.scm.provider = options.scm.provider;
}
if (options.scm.exclusions?.disabled !== undefined) {
sonar.scm.exclusions = {
disabled: String(options.scm.exclusions.disabled),
};
}
}
// Analysis scope
if (options.sources) {
sonar.sources = options.sources;
}
if (options.tests) {
sonar.tests = options.tests;
}
if (options.projectBaseDir) {
sonar.projectBaseDir = options.projectBaseDir;
}
if (options.exclusions && options.exclusions.length > 0) {
sonar.exclusions = options.exclusions.join(",");
}
// Language & profile
if (options.language) {
sonar.language = options.language;
}
if (options.profile) {
sonar.profile = options.profile;
}
// Coverage (sonar.coverage.*)
if (options.coverage?.exclusions &&
options.coverage.exclusions.length > 0) {
sonar.coverage = { exclusions: options.coverage.exclusions.join(",") };
}
// JavaScript (sonar.javascript.*)
if (options.javascript?.lcov?.reportPaths &&
options.javascript.lcov.reportPaths.length > 0) {
sonar.javascript = {
lcov: { reportPaths: options.javascript.lcov.reportPaths.join(",") },
};
}
// TypeScript (sonar.typescript.*)
if (options.typescript?.tsconfigPath) {
sonar.typescript = { tsconfigPath: options.typescript.tsconfigPath };
}
// Rust (sonar.rust.*)
if (options.rust) {
sonar.rust = {};
if (options.rust.lcov?.reportPaths &&
options.rust.lcov.reportPaths.length > 0) {
sonar.rust.lcov = {
reportPaths: options.rust.lcov.reportPaths.join(","),
};
}
if (options.rust.clippy?.enabled !== undefined) {
sonar.rust.clippy = { enabled: String(options.rust.clippy.enabled) };
}
if (options.rust.clippyReport?.reportPaths &&
options.rust.clippyReport.reportPaths.length > 0) {
sonar.rust.clippyReport = {
reportPaths: options.rust.clippyReport.reportPaths.join(","),
};
}
}
// Duplication (sonar.cpd.*)
if (options.cpd?.exclusions && options.cpd.exclusions.length > 0) {
sonar.cpd = { exclusions: options.cpd.exclusions.join(",") };
}
// Encoding
if (options.sourceEncoding) {
sonar.sourceEncoding = options.sourceEncoding;
}
// Logging (sonar.log.*)
if (options.log?.level) {
sonar.log = { level: options.log.level };
}
// Quality gate (sonar.qualitygate.*)
if (options.qualitygate) {
const qg = {};
if (options.qualitygate.wait !== undefined) {
qg.wait = String(options.qualitygate.wait);
}
if (options.qualitygate.timeout !== undefined) {
qg.timeout = String(options.qualitygate.timeout);
}
if (Object.keys(qg).length > 0) {
sonar.qualitygate = qg;
}
}
this.file = new properties_file_1.PropertiesFile(this.project, "sonar-project.properties", {
obj: { sonar },
committed: options.fileOptions?.committed,
readonly: options.fileOptions?.readonly,
marker: options.fileOptions?.marker,
comment: options.fileOptions?.comment,
});
// Extra properties (user-specified arbitrary properties). Applied as
// overrides so a leaf like "sonar.coverage" replaces the whole subtree
// rather than merging with the typed options above.
for (const [key, value] of Object.entries(options.extraProperties ?? {})) {
this.file.addOverride(key, value);
}
}
}
exports.SonarqubeProperties = SonarqubeProperties;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYXJxdWJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NvbmFycXViZS9zb25hcnF1YmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDRDQUF5QztBQUN6Qyx3REFBb0Q7QUFFcEQ7O0dBRUc7QUFDSCxJQUFZLGlCQU9YO0FBUEQsV0FBWSxpQkFBaUI7SUFDM0IsaUNBQWlDO0lBQ2pDLGtDQUFhLENBQUE7SUFDYixzQkFBc0I7SUFDdEIsb0NBQWUsQ0FBQTtJQUNmLG1EQUFtRDtJQUNuRCxvQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFQVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQU81QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3pCLDRCQUE0QjtJQUM1Qiw0QkFBUyxDQUFBO0lBQ1Qsa0JBQWtCO0lBQ2xCLDRCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsZUFBZSwrQkFBZixlQUFlLFFBSzFCO0FBbWJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLHFCQUFTOztJQUNoRDs7T0FFRztJQUNhLElBQUksQ0FBaUI7SUFFckMsWUFBWSxLQUFpQixFQUFFLE9BQW1DO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLE1BQU0sS0FBSyxHQUF3QixFQUFFLENBQUM7UUFFdEMscUNBQXFDO1FBQ3JDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUV0QyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUMsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDaEMsQ0FBQztR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QUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksZ0NBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFO1lBQ3ZFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNkLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVM7WUFDekMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUTtZQUN2QyxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNO1lBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU87U0FDdEMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxvREFBb0Q7UUFDcEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzs7QUE1Skgsa0RBNkpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb3BlcnRpZXNGaWxlIH0gZnJvbSBcIi4uL3Byb3BlcnRpZXMtZmlsZVwiO1xuXG4vKipcbiAqIExvZyBsZXZlbCBmb3IgU29uYXJRdWJlIGFuYWx5c2lzLlxuICovXG5leHBvcnQgZW51bSBTb25hcnF1YmVMb2dMZXZlbCB7XG4gIC8qKiBTdGFuZGFyZCBsb2dnaW5nIChkZWZhdWx0KSAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKiBWZXJib3NlIGxvZ2dpbmcgKi9cbiAgREVCVUcgPSBcIkRFQlVHXCIsXG4gIC8qKiBNb3N0IHZlcmJvc2UsIGluY2x1ZGVzIHBsdWdpbi9saWJyYXJ5IG91dHB1dCAqL1xuICBUUkFDRSA9IFwiVFJBQ0VcIixcbn1cblxuLyoqXG4gKiBTb25hclF1YmUgQ2xvdWQgcmVnaW9uLlxuICovXG5leHBvcnQgZW51bSBTb25hcnF1YmVSZWdpb24ge1xuICAvKiogRVUgaW5zdGFuY2UgKGRlZmF1bHQpICovXG4gIEVVID0gXCJldVwiLFxuICAvKiogVVMgaW5zdGFuY2UgKi9cbiAgVVMgPSBcInVzXCIsXG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTmVzdGVkIG9wdGlvbiBpbnRlcmZhY2VzIG1hdGNoaW5nIHRoZSBzb25hci4qIGRvdC1ub3RhdGlvbiBzdHJ1Y3R1cmVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5zY20uKmAgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVTY21PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBTQ00gcHJvdmlkZXIgdG8gdXNlLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5zY20ucHJvdmlkZXJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tZGV0ZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgc29uYXIuc2NtLmV4Y2x1c2lvbnMuKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXhjbHVzaW9uIG92ZXJyaWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IFNvbmFycXViZVNjbUV4Y2x1c2lvbnNPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5zY20uZXhjbHVzaW9ucy4qYCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVNjbUV4Y2x1c2lvbnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBmaWxlcyBpZ25vcmVkIGJ5IHRoZSBTQ00gKGUuZy4sIGZpbGVzIGluIC5naXRpZ25vcmUpXG4gICAqIGZyb20gYmVpbmcgZXhjbHVkZWQgZnJvbSBhbmFseXNpcy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuc2NtLmV4Y2x1c2lvbnMuZGlzYWJsZWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5jb3ZlcmFnZS4qYCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZUNvdmVyYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgZmlsZSBwYXRoIHBhdHRlcm5zIHRvIGV4Y2x1ZGUgZnJvbSB0ZXN0IGNvdmVyYWdlXG4gICAqIGNhbGN1bGF0aW9ucy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuY292ZXJhZ2UuZXhjbHVzaW9uc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY292ZXJhZ2UgZXhjbHVzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5jcGQuKmAgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVDcGRPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBmaWxlIHBhdGggcGF0dGVybnMgdG8gZXhjbHVkZSBmcm9tIGNvZGVcbiAgICogZHVwbGljYXRpb24gZGV0ZWN0aW9uLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5jcGQuZXhjbHVzaW9uc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZHVwbGljYXRpb24gZXhjbHVzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5qYXZhc2NyaXB0LipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlSmF2YXNjcmlwdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYHNvbmFyLmphdmFzY3JpcHQubGNvdi4qYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBMQ09WIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxjb3Y/OiBTb25hcnF1YmVMY292T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgc29uYXIudHlwZXNjcmlwdC4qYCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVR5cGVzY3JpcHRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci50eXBlc2NyaXB0LnRzY29uZmlnUGF0aGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5ydXN0LipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlUnVzdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYHNvbmFyLnJ1c3QubGNvdi4qYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBSdXN0IExDT1YgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbGNvdj86IFNvbmFycXViZUxjb3ZPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgc29uYXIucnVzdC5jbGlwcHkuKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpcHB5IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNsaXBweT86IFNvbmFycXViZVJ1c3RDbGlwcHlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgc29uYXIucnVzdC5jbGlwcHlSZXBvcnQuKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpcHB5IHJlcG9ydCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBjbGlwcHlSZXBvcnQ/OiBTb25hcnF1YmVSdXN0Q2xpcHB5UmVwb3J0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBsY292IHJlcG9ydCBwYXRocyAoc2hhcmVkIGJldHdlZW4gbGFuZ3VhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVMY292T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgcGF0aHMgdG8gTENPViBjb3ZlcmFnZSByZXBvcnQgZmlsZXMuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLjxsYW5ndWFnZT4ubGNvdi5yZXBvcnRQYXRoc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0UGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgc29uYXIucnVzdC5jbGlwcHkuKmAgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVSdXN0Q2xpcHB5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIENsaXBweSBhbmFseXNpcyBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5ydXN0LmNsaXBweS5lbmFibGVkYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHNvbmFyLnJ1c3QuY2xpcHB5UmVwb3J0LipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlUnVzdENsaXBweVJlcG9ydE9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aHMgdG8gQ2xpcHB5IEpTT04gcmVwb3J0IGZpbGVzLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5ydXN0LmNsaXBweVJlcG9ydC5yZXBvcnRQYXRoc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0UGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgc29uYXIubG9nLipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlTG9nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgcXVhbnRpdHkvbGV2ZWwgb2YgbG9ncyBwcm9kdWNlZCBkdXJpbmcgYW5hbHlzaXMuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLmxvZy5sZXZlbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNvbmFycXViZUxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogU29uYXJxdWJlTG9nTGV2ZWw7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHNvbmFyLnF1YWxpdHlnYXRlLipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlUXVhbGl0eUdhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgYW5hbHlzaXMgc3RlcCB0byBwb2xsIHRoZSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIHRoZVxuICAgKiBRdWFsaXR5IEdhdGUgc3RhdHVzLiBXaWxsIGZhaWwgdGhlIHBpcGVsaW5lIGlmIHRoZSBxdWFsaXR5IGdhdGUgZmFpbHMuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnF1YWxpdHlnYXRlLndhaXRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgd2FpdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IHRoZSBzY2FubmVyIHNob3VsZCB3YWl0IGZvciBhIHJlcG9ydFxuICAgKiB0byBiZSBwcm9jZXNzZWQuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnF1YWxpdHlnYXRlLnRpbWVvdXRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFNvbmFycXViZVByb3BlcnRpZXNgLlxuICpcbiAqIFRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIG1pcnJvcnMgdGhlIGBzb25hci4qYCBkb3Qtbm90YXRpb24gdXNlZCBpblxuICogYHNvbmFyLXByb2plY3QucHJvcGVydGllc2AuIE5lc3RlZCBpbnRlcmZhY2VzIG1hcCB0byBuZXN0ZWQgcHJvcGVydHlcbiAqIG5hbWVzcGFjZXMuIEZvciBleGFtcGxlLCBgc2NtLnByb3ZpZGVyYCBtYXBzIHRvIGBzb25hci5zY20ucHJvdmlkZXJgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVByb3BlcnRpZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgdW5pcXVlIGtleS5cbiAgICpcbiAgICogQ2FuIGluY2x1ZGUgdXAgdG8gNDAwIGNoYXJhY3RlcnMuIEFsbG93ZWQgY2hhcmFjdGVyczpcbiAgICogbGV0dGVycywgZGlnaXRzLCBkYXNoLCB1bmRlcnNjb3JlLCBwZXJpb2RzLCBhbmQgY29sb25zLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5wcm9qZWN0S2V5YC4gVGhpcyBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdEtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IG9mIHRoZSBvcmdhbml6YXRpb24gdG8gd2hpY2ggdGhlIHByb2plY3QgYmVsb25ncy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIub3JnYW5pemF0aW9uYC4gTWFuZGF0b3J5IGZvciBTb25hclF1YmUgQ2xvdWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3JnYW5pemF0aW9uXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHByb2plY3QgZGlzcGxheWVkIG9uIHRoZSB3ZWIgaW50ZXJmYWNlLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5wcm9qZWN0TmFtZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0IHZlcnNpb24uXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnByb2plY3RWZXJzaW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3Qgc2V0XG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ29tbWEtc2VwYXJhdGVkIHBhdGhzIHRvIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgbWFpbiBzb3VyY2UgY29kZVxuICAgKiAobm9uLXRlc3QgY29kZSkuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnNvdXJjZXNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0IGJhc2UgZGlyZWN0b3J5XG4gICAqL1xuICByZWFkb25seSBzb3VyY2VzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgcGF0aHMgdG8gZGlyZWN0b3JpZXMgY29udGFpbmluZyB0ZXN0IGNvZGUuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnRlc3RzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0ZXN0IGNvZGUgYW5hbHl6ZWRcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGJhc2UgZGlyZWN0b3J5IHdoZW4gdGhlIGFuYWx5c2lzIG5lZWRzIHRvIHRha2UgcGxhY2VcbiAgICogaW4gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgb25lIGZyb20gd2hpY2ggaXQgd2FzIHN0YXJ0ZWQuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnByb2plY3RCYXNlRGlyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIGFuYWx5c2lzIHdhcyBzdGFydGVkXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0QmFzZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogRW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuc291cmNlRW5jb2RpbmdgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN5c3RlbSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRW5jb2Rpbmc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBmaWxlIHBhdGggcGF0dGVybnMgdG8gZXhjbHVkZSBmcm9tIHRoZSBhbmFseXNpcyBzY29wZS5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuZXhjbHVzaW9uc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXhjbHVzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgZm9yIGFuYWx5c2lzLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5sYW5ndWFnZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0by1kZXRlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWFsaXR5IHByb2ZpbGUgbmFtZS5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIucHJvZmlsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlcyB0aGUgZGVmYXVsdCBwcm9maWxlIGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNvbmFyUXViZSBDbG91ZCBpbnN0YW5jZSdzIHJlZ2lvbi5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIucmVnaW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgU29uYXJxdWJlUmVnaW9uLkVVXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBTb25hcnF1YmVSZWdpb247XG5cbiAgLyoqXG4gICAqIFNDTS1yZWxhdGVkIG9wdGlvbnMgKGBzb25hci5zY20uKmApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIFNDTSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzY20/OiBTb25hcnF1YmVTY21PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb3ZlcmFnZS1yZWxhdGVkIG9wdGlvbnMgKGBzb25hci5jb3ZlcmFnZS4qYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY292ZXJhZ2UgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY292ZXJhZ2U/OiBTb25hcnF1YmVDb3ZlcmFnZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIER1cGxpY2F0aW9uIGRldGVjdGlvbiBvcHRpb25zIChgc29uYXIuY3BkLipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDUEQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY3BkPzogU29uYXJxdWJlQ3BkT3B0aW9ucztcblxuICAvKipcbiAgICogSmF2YVNjcmlwdC1zcGVjaWZpYyBvcHRpb25zIChgc29uYXIuamF2YXNjcmlwdC4qYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gSmF2YVNjcmlwdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBqYXZhc2NyaXB0PzogU29uYXJxdWJlSmF2YXNjcmlwdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQtc3BlY2lmaWMgb3B0aW9ucyAoYHNvbmFyLnR5cGVzY3JpcHQuKmApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXNjcmlwdD86IFNvbmFycXViZVR5cGVzY3JpcHRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdXN0LXNwZWNpZmljIG9wdGlvbnMgKGBzb25hci5ydXN0LipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBSdXN0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJ1c3Q/OiBTb25hcnF1YmVSdXN0T3B0aW9ucztcblxuICAvKipcbiAgICogTG9nZ2luZyBvcHRpb25zIChgc29uYXIubG9nLipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJTkZPIGxldmVsXG4gICAqL1xuICByZWFkb25seSBsb2c/OiBTb25hcnF1YmVMb2dPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBRdWFsaXR5IGdhdGUgb3B0aW9ucyAoYHNvbmFyLnF1YWxpdHlnYXRlLipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBxdWFsaXR5IGdhdGUgbm90IGF3YWl0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpdHlnYXRlPzogU29uYXJxdWJlUXVhbGl0eUdhdGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyYml0cmFyeSBwcm9wZXJ0aWVzIHRvIGluY2x1ZGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZvciBwcm9wZXJ0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoZSB0eXBlZCBvcHRpb25zLlxuICAgKiBLZXlzIHVzZSBkb3Qtbm90YXRpb24gKGUuZy4sIGBzb25hci5qYXZhLmJpbmFyaWVzYCkuXG4gICAqXG4gICAqIFRoZXNlIGFyZSBhcHBsaWVkIGFzIG92ZXJyaWRlcyBhZnRlciB0aGUgdHlwZWQgb3B0aW9ucyBhYm92ZSwgc28gYSBrZXlcbiAgICogdGhhdCBpcyBhIHByZWZpeCBvZiBhIHR5cGVkIG9wdGlvbiAoZS5nLiBgXCJzb25hci5jb3ZlcmFnZVwiYCkgcmVwbGFjZXNcbiAgICogdGhhdCBlbnRpcmUgc3VidHJlZSByYXRoZXIgdGhhbiBtZXJnaW5nIHdpdGggaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYVByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgZ2VuZXJhdGVkIHByb3BlcnRpZXMgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGZpbGUgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU9wdGlvbnM/OiBTb25hcnF1YmVGaWxlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBGaWxlIG9wdGlvbnMgZm9yIHRoZSBnZW5lcmF0ZWQgYHNvbmFyLXByb2plY3QucHJvcGVydGllc2AgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgZmlsZSBzaG91bGQgYmUgY29tbWl0dGVkIHRvIGdpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0dGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGZpbGUgc2hvdWxkIGJlIHJlYWRvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZWFkb25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIHByb2plbiBtYXJrZXIgdG8gdGhlIGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbWFya2VyIHdpbGwgYmUgaW5jbHVkZWQgYXMgbG9uZyBhcyB0aGUgcHJvamVjdCBpcyBub3QgZWplY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgbWFya2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb21tZW50IHRvIGluY2x1ZGUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGNvbW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1lbnQ/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBgc29uYXItcHJvamVjdC5wcm9wZXJ0aWVzYCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIFNvbmFyUXViZVxuICogYW5hbHlzaXMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgZ2VuZXJhdGVzIGEgYHNvbmFyLXByb2plY3QucHJvcGVydGllc2AgZmlsZSBhdCB0aGUgcHJvamVjdFxuICogcm9vdCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBJdCBwcm92aWRlcyB0eXBlZCBvcHRpb25zXG4gKiB3aG9zZSBzdHJ1Y3R1cmUgbWlycm9ycyB0aGUgZG90LW5vdGF0aW9uIHByb3BlcnR5IG5hbWVzcGFjZXMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3Muc29uYXJzb3VyY2UuY29tL3NvbmFycXViZS1jbG91ZC9hbmFseXppbmctc291cmNlLWNvZGUvYW5hbHlzaXMtcGFyYW1ldGVycy9wYXJhbWV0ZXJzLW5vdC1zZXR0YWJsZS1pbi11aVxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgU29uYXJxdWJlUHJvcGVydGllcyhwcm9qZWN0LCB7XG4gKiAgIHByb2plY3RLZXk6ICdteS1vcmdfbXktcHJvamVjdCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHNvdXJjZXM6ICdzcmMnLFxuICogICB0ZXN0czogJ3Rlc3QnLFxuICogICBleGNsdXNpb25zOiBbJyp7QGxpdGVyYWwgKn0vbm9kZV9tb2R1bGVzLyoqJ10sXG4gKiAgIGNvdmVyYWdlOiB7IGV4Y2x1c2lvbnM6IFsnKntAbGl0ZXJhbCAqfS90ZXN0LyoqJ10gfSxcbiAqICAgamF2YXNjcmlwdDogeyBsY292OiB7IHJlcG9ydFBhdGhzOiBbJ2NvdmVyYWdlL2xjb3YuaW5mbyddIH0gfSxcbiAqICAgc291cmNlRW5jb2Rpbmc6ICdVVEYtOCcsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIFNvbmFycXViZVByb3BlcnRpZXMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgcHJvcGVydGllcyBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IFByb3BlcnRpZXNGaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBvcHRpb25zOiBTb25hcnF1YmVQcm9wZXJ0aWVzT3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IHNvbmFyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAvLyBQcm9qZWN0IGlkZW50aWZpY2F0aW9uIChtYW5kYXRvcnkpXG4gICAgc29uYXIucHJvamVjdEtleSA9IG9wdGlvbnMucHJvamVjdEtleTtcblxuICAgIGlmIChvcHRpb25zLm9yZ2FuaXphdGlvbikge1xuICAgICAgc29uYXIub3JnYW5pemF0aW9uID0gb3B0aW9ucy5vcmdhbml6YXRpb247XG4gICAgfVxuXG4gICAgLy8gU2VydmVyIGNvbm5lY3Rpb25cbiAgICBpZiAob3B0aW9ucy5yZWdpb24pIHtcbiAgICAgIHNvbmFyLnJlZ2lvbiA9IG9wdGlvbnMucmVnaW9uO1xuICAgIH1cblxuICAgIC8vIFByb2plY3QgaW5mb3JtYXRpb25cbiAgICBpZiAob3B0aW9ucy5wcm9qZWN0TmFtZSkge1xuICAgICAgc29uYXIucHJvamVjdE5hbWUgPSBvcHRpb25zLnByb2plY3ROYW1lO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcm9qZWN0VmVyc2lvbikge1xuICAgICAgc29uYXIucHJvamVjdFZlcnNpb24gPSBvcHRpb25zLnByb2plY3RWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIFNDTSAoc29uYXIuc2NtLiopXG4gICAgaWYgKG9wdGlvbnMuc2NtKSB7XG4gICAgICBzb25hci5zY20gPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgaWYgKG9wdGlvbnMuc2NtLnByb3ZpZGVyKSB7XG4gICAgICAgIHNvbmFyLnNjbS5wcm92aWRlciA9IG9wdGlvbnMuc2NtLnByb3ZpZGVyO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2NtLmV4Y2x1c2lvbnM/LmRpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc29uYXIuc2NtLmV4Y2x1c2lvbnMgPSB7XG4gICAgICAgICAgZGlzYWJsZWQ6IFN0cmluZyhvcHRpb25zLnNjbS5leGNsdXNpb25zLmRpc2FibGVkKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbmFseXNpcyBzY29wZVxuICAgIGlmIChvcHRpb25zLnNvdXJjZXMpIHtcbiAgICAgIHNvbmFyLnNvdXJjZXMgPSBvcHRpb25zLnNvdXJjZXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlc3RzKSB7XG4gICAgICBzb25hci50ZXN0cyA9IG9wdGlvbnMudGVzdHM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByb2plY3RCYXNlRGlyKSB7XG4gICAgICBzb25hci5wcm9qZWN0QmFzZURpciA9IG9wdGlvbnMucHJvamVjdEJhc2VEaXI7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmV4Y2x1c2lvbnMgJiYgb3B0aW9ucy5leGNsdXNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHNvbmFyLmV4Y2x1c2lvbnMgPSBvcHRpb25zLmV4Y2x1c2lvbnMuam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgLy8gTGFuZ3VhZ2UgJiBwcm9maWxlXG4gICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2UpIHtcbiAgICAgIHNvbmFyLmxhbmd1YWdlID0gb3B0aW9ucy5sYW5ndWFnZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJvZmlsZSkge1xuICAgICAgc29uYXIucHJvZmlsZSA9IG9wdGlvbnMucHJvZmlsZTtcbiAgICB9XG5cbiAgICAvLyBDb3ZlcmFnZSAoc29uYXIuY292ZXJhZ2UuKilcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmNvdmVyYWdlPy5leGNsdXNpb25zICYmXG4gICAgICBvcHRpb25zLmNvdmVyYWdlLmV4Y2x1c2lvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgc29uYXIuY292ZXJhZ2UgPSB7IGV4Y2x1c2lvbnM6IG9wdGlvbnMuY292ZXJhZ2UuZXhjbHVzaW9ucy5qb2luKFwiLFwiKSB9O1xuICAgIH1cblxuICAgIC8vIEphdmFTY3JpcHQgKHNvbmFyLmphdmFzY3JpcHQuKilcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmphdmFzY3JpcHQ/Lmxjb3Y/LnJlcG9ydFBhdGhzICYmXG4gICAgICBvcHRpb25zLmphdmFzY3JpcHQubGNvdi5yZXBvcnRQYXRocy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBzb25hci5qYXZhc2NyaXB0ID0ge1xuICAgICAgICBsY292OiB7IHJlcG9ydFBhdGhzOiBvcHRpb25zLmphdmFzY3JpcHQubGNvdi5yZXBvcnRQYXRocy5qb2luKFwiLFwiKSB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUeXBlU2NyaXB0IChzb25hci50eXBlc2NyaXB0LiopXG4gICAgaWYgKG9wdGlvbnMudHlwZXNjcmlwdD8udHNjb25maWdQYXRoKSB7XG4gICAgICBzb25hci50eXBlc2NyaXB0ID0geyB0c2NvbmZpZ1BhdGg6IG9wdGlvbnMudHlwZXNjcmlwdC50c2NvbmZpZ1BhdGggfTtcbiAgICB9XG5cbiAgICAvLyBSdXN0IChzb25hci5ydXN0LiopXG4gICAgaWYgKG9wdGlvbnMucnVzdCkge1xuICAgICAgc29uYXIucnVzdCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucnVzdC5sY292Py5yZXBvcnRQYXRocyAmJlxuICAgICAgICBvcHRpb25zLnJ1c3QubGNvdi5yZXBvcnRQYXRocy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgc29uYXIucnVzdC5sY292ID0ge1xuICAgICAgICAgIHJlcG9ydFBhdGhzOiBvcHRpb25zLnJ1c3QubGNvdi5yZXBvcnRQYXRocy5qb2luKFwiLFwiKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnJ1c3QuY2xpcHB5Py5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc29uYXIucnVzdC5jbGlwcHkgPSB7IGVuYWJsZWQ6IFN0cmluZyhvcHRpb25zLnJ1c3QuY2xpcHB5LmVuYWJsZWQpIH07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucnVzdC5jbGlwcHlSZXBvcnQ/LnJlcG9ydFBhdGhzICYmXG4gICAgICAgIG9wdGlvbnMucnVzdC5jbGlwcHlSZXBvcnQucmVwb3J0UGF0aHMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHNvbmFyLnJ1c3QuY2xpcHB5UmVwb3J0ID0ge1xuICAgICAgICAgIHJlcG9ydFBhdGhzOiBvcHRpb25zLnJ1c3QuY2xpcHB5UmVwb3J0LnJlcG9ydFBhdGhzLmpvaW4oXCIsXCIpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIER1cGxpY2F0aW9uIChzb25hci5jcGQuKilcbiAgICBpZiAob3B0aW9ucy5jcGQ/LmV4Y2x1c2lvbnMgJiYgb3B0aW9ucy5jcGQuZXhjbHVzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBzb25hci5jcGQgPSB7IGV4Y2x1c2lvbnM6IG9wdGlvbnMuY3BkLmV4Y2x1c2lvbnMuam9pbihcIixcIikgfTtcbiAgICB9XG5cbiAgICAvLyBFbmNvZGluZ1xuICAgIGlmIChvcHRpb25zLnNvdXJjZUVuY29kaW5nKSB7XG4gICAgICBzb25hci5zb3VyY2VFbmNvZGluZyA9IG9wdGlvbnMuc291cmNlRW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgLy8gTG9nZ2luZyAoc29uYXIubG9nLiopXG4gICAgaWYgKG9wdGlvbnMubG9nPy5sZXZlbCkge1xuICAgICAgc29uYXIubG9nID0geyBsZXZlbDogb3B0aW9ucy5sb2cubGV2ZWwgfTtcbiAgICB9XG5cbiAgICAvLyBRdWFsaXR5IGdhdGUgKHNvbmFyLnF1YWxpdHlnYXRlLiopXG4gICAgaWYgKG9wdGlvbnMucXVhbGl0eWdhdGUpIHtcbiAgICAgIGNvbnN0IHFnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICBpZiAob3B0aW9ucy5xdWFsaXR5Z2F0ZS53YWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcWcud2FpdCA9IFN0cmluZyhvcHRpb25zLnF1YWxpdHlnYXRlLndhaXQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eWdhdGUudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHFnLnRpbWVvdXQgPSBTdHJpbmcob3B0aW9ucy5xdWFsaXR5Z2F0ZS50aW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhxZykubGVuZ3RoID4gMCkge1xuICAgICAgICBzb25hci5xdWFsaXR5Z2F0ZSA9IHFnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZmlsZSA9IG5ldyBQcm9wZXJ0aWVzRmlsZSh0aGlzLnByb2plY3QsIFwic29uYXItcHJvamVjdC5wcm9wZXJ0aWVzXCIsIHtcbiAgICAgIG9iajogeyBzb25hciB9LFxuICAgICAgY29tbWl0dGVkOiBvcHRpb25zLmZpbGVPcHRpb25zPy5jb21taXR0ZWQsXG4gICAgICByZWFkb25seTogb3B0aW9ucy5maWxlT3B0aW9ucz8ucmVhZG9ubHksXG4gICAgICBtYXJrZXI6IG9wdGlvbnMuZmlsZU9wdGlvbnM/Lm1hcmtlcixcbiAgICAgIGNvbW1lbnQ6IG9wdGlvbnMuZmlsZU9wdGlvbnM/LmNvbW1lbnQsXG4gICAgfSk7XG5cbiAgICAvLyBFeHRyYSBwcm9wZXJ0aWVzICh1c2VyLXNwZWNpZmllZCBhcmJpdHJhcnkgcHJvcGVydGllcykuIEFwcGxpZWQgYXNcbiAgICAvLyBvdmVycmlkZXMgc28gYSBsZWFmIGxpa2UgXCJzb25hci5jb3ZlcmFnZVwiIHJlcGxhY2VzIHRoZSB3aG9sZSBzdWJ0cmVlXG4gICAgLy8gcmF0aGVyIHRoYW4gbWVyZ2luZyB3aXRoIHRoZSB0eXBlZCBvcHRpb25zIGFib3ZlLlxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuZXh0cmFQcm9wZXJ0aWVzID8/IHt9KSkge1xuICAgICAgdGhpcy5maWxlLmFkZE92ZXJyaWRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19