aws-delivlib 15.4.0 → 15.4.1
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/shellable.js +12 -8
- package/package.json +1 -1
package/lib/shellable.js
CHANGED
|
@@ -32,6 +32,8 @@ const build_spec_1 = require("./build-spec");
|
|
|
32
32
|
const util_1 = require("./util");
|
|
33
33
|
const S3_BUCKET_ENV = 'SCRIPT_S3_BUCKET';
|
|
34
34
|
const S3_KEY_ENV = 'SCRIPT_S3_KEY';
|
|
35
|
+
const WINDOWS_BASE_DIR = 'C:\\delivlib';
|
|
36
|
+
const WINDOWS_SCRIPT_DIR = `${WINDOWS_BASE_DIR}\\scriptdir`;
|
|
35
37
|
/**
|
|
36
38
|
* A CodeBuild project that runs arbitrary scripts.
|
|
37
39
|
*
|
|
@@ -268,6 +270,11 @@ class WindowsPlatform extends ShellPlatform {
|
|
|
268
270
|
}
|
|
269
271
|
prebuildCommands(assumeRole, useRegionalStsEndpoints) {
|
|
270
272
|
const lines = new Array();
|
|
273
|
+
// Download and unpack the script bundle before any assume-role step below.
|
|
274
|
+
lines.push(`echo "Downloading scripts from s3://$env:${S3_BUCKET_ENV}/$env:${S3_KEY_ENV}"`);
|
|
275
|
+
lines.push(`New-Item -ItemType Directory -Force -Path ${WINDOWS_BASE_DIR} | Out-Null`);
|
|
276
|
+
lines.push(`aws s3 cp s3://$env:${S3_BUCKET_ENV}/$env:${S3_KEY_ENV} ${WINDOWS_BASE_DIR}\\scripts.zip`);
|
|
277
|
+
lines.push(`Expand-Archive -Path ${WINDOWS_BASE_DIR}\\scripts.zip -DestinationPath ${WINDOWS_SCRIPT_DIR} -Force`);
|
|
271
278
|
if (assumeRole) {
|
|
272
279
|
if (assumeRole.refresh) {
|
|
273
280
|
// Configure a named profile in the shared config file and delegate credential
|
|
@@ -277,7 +284,7 @@ class WindowsPlatform extends ShellPlatform {
|
|
|
277
284
|
const configPath = `${awsHome}\\config`;
|
|
278
285
|
const profileName = assumeRole.profileName ?? 'long-running-profile';
|
|
279
286
|
lines.push(`New-Item -ItemType Directory -Force -Path ${awsHome} | Out-Null`);
|
|
280
|
-
lines.push(`New-Item -ItemType File -
|
|
287
|
+
lines.push(`if (-not (Test-Path ${awsHome}\\credentials)) { New-Item -ItemType File -Path ${awsHome}\\credentials | Out-Null }`);
|
|
281
288
|
lines.push(`Add-Content -Path ${configPath} -Value "[profile ${profileName}]"`);
|
|
282
289
|
lines.push(`Add-Content -Path ${configPath} -Value "credential_source = EcsContainer"`);
|
|
283
290
|
lines.push(`Add-Content -Path ${configPath} -Value "role_session_name = ${assumeRole.sessionName}"`);
|
|
@@ -306,14 +313,11 @@ class WindowsPlatform extends ShellPlatform {
|
|
|
306
313
|
}
|
|
307
314
|
buildCommands(entrypoint, args) {
|
|
308
315
|
return [
|
|
309
|
-
|
|
310
|
-
`
|
|
311
|
-
|
|
312
|
-
'Expand-Archive -Path $TEMPDIR/scripts.zip -DestinationPath $TEMPDIR\\scriptdir',
|
|
313
|
-
'$env:SCRIPT_DIR = "$TEMPDIR\\scriptdir"',
|
|
314
|
-
`& $TEMPDIR\\scriptdir\\${entrypoint} ${(args ?? []).join(' ')}`.trimRight(),
|
|
316
|
+
`$env:SCRIPT_DIR = "${WINDOWS_SCRIPT_DIR}"`,
|
|
317
|
+
`echo "Running ${entrypoint}"`,
|
|
318
|
+
`& ${WINDOWS_SCRIPT_DIR}\\${entrypoint} ${(args ?? []).join(' ')}`.trimRight(),
|
|
315
319
|
];
|
|
316
320
|
}
|
|
317
321
|
}
|
|
318
322
|
exports.WindowsPlatform = WindowsPlatform;
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2hlbGxhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qiw2Q0FLcUI7QUFFckIsMkNBQXVDO0FBQ3ZDLDZDQUF5QztBQUN6QyxpQ0FBb0Q7QUFFcEQsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUM7QUFDekMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDO0FBNlBuQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQWN0QyxZQUFZLE1BQWlCLEVBQUUsRUFBVSxFQUFtQixLQUFxQjtRQUMvRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRHdDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRy9FLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDO1FBRTVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUMvRDtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksMkJBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3RELElBQUksRUFBRSxLQUFLLENBQUMsZUFBZTtZQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtZQUNsQyxVQUFVLEVBQUUsd0JBQVUsQ0FBQyxJQUFJO1NBQzVCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEtB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QUFFLENBQUM7Z0JBQzVGLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFFckUsNkVBQTZFO2dCQUM3RSxzRUFBc0U7Z0JBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsc0NBQXNDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ2xFLEtBQUssQ0FBQyxJQUFJLENBQUMsa0RBQWtELFVBQVUsQ0FBQyxPQUFPLDBCQUEwQixVQUFVLENBQUMsV0FBVyxJQUFJLFVBQVUscUJBQXFCLENBQUMsQ0FBQztnQkFDcEssS0FBSyxDQUFDLElBQUksQ0FBQywrREFBK0QsQ0FBQyxDQUFDO2dCQUM1RSxLQUFLLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7Z0JBQ3BGLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQzthQUM5RTtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sYUFBYSxDQUFDLFVBQWtCLEVBQUUsSUFBZTtRQUN0RCxPQUFPO1lBQ0wscUVBQXFFO1lBQ3JFLHVCQUF1QixhQUFhLFNBQVMsVUFBVSx3QkFBd0I7WUFDL0Usd0RBQXdEO1lBQ3hELGdGQUFnRjtZQUNoRix5Q0FBeUM7WUFDekMsMEJBQTBCLFVBQVUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUU7U0FDN0UsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhGRCwwQ0FnRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSwgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzX2Fzc2V0cyBhcyBhc3NldHMsIGF3c19zZWNyZXRzbWFuYWdlciwgYXdzX3NzbSwgSWdub3JlTW9kZSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQnVpbGRTcGVjIH0gZnJvbSAnLi9idWlsZC1zcGVjJztcbmltcG9ydCB7IHJlbmRlckVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgUzNfQlVDS0VUX0VOViA9ICdTQ1JJUFRfUzNfQlVDS0VUJztcbmNvbnN0IFMzX0tFWV9FTlYgPSAnU0NSSVBUX1MzX0tFWSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxhYmxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBQcm9qZWN0XG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogU291cmNlIGZvciB0aGUgQ29kZUJ1aWxkIHByb2plY3RcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gc291cmNlXG4gICAqL1xuICBzb3VyY2U/OiBjYnVpbGQuSVNvdXJjZTtcblxuICAvKipcbiAgICogV2hhdCBwbGF0Zm9ybSB0byB1cyB0byBydW4gdGhlIHNjcmlwdHMgb25cbiAgICpcbiAgICogQGRlZmF1bHQgU2hlbGxQbGF0Zm9ybS5MaW51eFVidW50dVxuICAgKi9cbiAgcGxhdGZvcm0/OiBTaGVsbFBsYXRmb3JtO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHNlY3JldHMgbWFuYWdlciB2YWx1ZXMuIFRoZSB2YWx1ZXMgbXVzdCBiZSBjb21wbGV0ZSBTZWNyZXQgTWFuYWdlciBBUk5zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKi9cbiAgZW52aXJvbm1lbnRTZWNyZXRzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggU1NNIHBhcmFtZXRlciB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICBlbnZpcm9ubWVudFBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcHV0ZSB0eXBlIHRvIHVzZSBmb3IgdGhlIGJ1aWxkIGNvbnRhaW5lci5cbiAgICpcbiAgICogTm90ZSB0aGF0IG5vdCBhbGwgY29tYmluYXRpb25zIGFyZSBhdmFpbGFibGUuIEZvciBleGFtcGxlLFxuICAgKiBXaW5kb3dzIGltYWdlcyBjYW5ub3QgYmUgcnVuIG9uIENvbXB1dGVUeXBlLlNtYWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDb21wdXRlVHlwZS5NZWRpdW1cbiAgICovXG4gIGNvbXB1dGVUeXBlPzogY2J1aWxkLkNvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IHRoZSBwcm9qZWN0IGJ1aWxkcyBEb2NrZXIgaW1hZ2VzLiBTcGVjaWZ5IHRydWUgdG8gZW5hYmxlXG4gICAqIHJ1bm5pbmcgdGhlIERvY2tlciBkYWVtb24gaW5zaWRlIGEgRG9ja2VyIGNvbnRhaW5lci4gVGhpcyB2YWx1ZSBtdXN0IGJlXG4gICAqIHNldCB0byB0cnVlIG9ubHkgaWYgdGhpcyBidWlsZCBwcm9qZWN0IHdpbGwgYmUgdXNlZCB0byBidWlsZCBEb2NrZXJcbiAgICogaW1hZ2VzLCBhbmQgdGhlIHNwZWNpZmllZCBidWlsZCBlbnZpcm9ubWVudCBpbWFnZSBpcyBub3Qgb25lIHByb3ZpZGVkIGJ5XG4gICAqIEFXUyBDb2RlQnVpbGQgd2l0aCBEb2NrZXIgc3VwcG9ydC4gT3RoZXJ3aXNlLCBhbGwgYXNzb2NpYXRlZCBidWlsZHMgdGhhdFxuICAgKiBhdHRlbXB0IHRvIGludGVyYWN0IHdpdGggdGhlIERvY2tlciBkYWVtb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB0aGUgYnVpbGQgcHJvamVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBuYW1lIGlzIGdlbmVyYXRlZCBieSBDbG91ZEZvcm1hdGlvbi5cbiAgICovXG4gIGJ1aWxkUHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBSZWdpb25hbCBBV1MgU1RTIGVuZHBvaW50cyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkXG4gICAqIG9mIHRoZSBnbG9iYWwgZW5kcG9pbnQuIFNwZWNpZnkgdHJ1ZSB0byB1c2UgUmVnaW9uYWwgQVdTIFNUUyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VSZWdpb25hbFN0c0VuZHBvaW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENhbiBiZSB1c2VkIHRvIHJ1biB0aGlzIGJ1aWxkIHVzaW5nIGEgc3BlY2lmaWMgSUFNIHJvbGUuIFRoaXMgY2FuIGJlIHVzZWQsXG4gICAqIGZvciBleGFtcGxlLCB0byBleGVjdXRlIGluIHRoZSBjb250ZXh0IG9mIGFub3RoZXIgYWNjb3VudCAoZS5nLiB0byBydW5cbiAgICogdGVzdHMgaW4gaXNvbGF0aW9uKS5cbiAgICovXG4gIGFzc3VtZVJvbGU/OiBBc3N1bWVSb2xlO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkc3BlYyAoZm9yIGFydGlmYWN0cyBldGMuKVxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBhZGRpdGlvbmFsIGJ1aWxkc3BlY1xuICAgKi9cbiAgYnVpbGRTcGVjPzogQnVpbGRTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBvZiB0aGUgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBDb2RlQnVpbGQgZGVmYXVsdCAoMSBob3VyKVxuICAgKi9cbiAgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBbGFybSBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IDMwMCBzZWNvbmRzICg1IG1pbnV0ZXMpXG4gICAqL1xuICBhbGFybVBlcmlvZD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBbGFybSB0aHJlc2hvbGQuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGFsYXJtVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbGFybSBldmFsdWF0aW9uIHBlcmlvZHMuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGFsYXJtRXZhbHVhdGlvblBlcmlvZHM/OiBudW1iZXI7XG5cbiAgc2Vjb25kYXJ5QXJ0aWZhY3ROYW1lcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDbGFyaWZ5IHdoZXRoZXIgdGhpcyBTaGVsbGFibGUgcHJvZHVjZXMgYW55IGFydGlmYWN0c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwcm9kdWNlc0FydGlmYWN0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZSB0byB1c2Ugd2hlbiBhZGRpbmcgYXMgYW4gYWN0aW9uIHRvIHRoZSBwaXBlbGluZVxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBuYW1lc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbk5hbWVzcGFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZyb20gdGhlIHBpcGVsaW5lIGFjdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lRW52aXJvbm1lbnRWYXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2Ugcm9sZSB0byBhc3N1bWUgd2hpbGUgcnVubmluZyB0aGUgYnVpbGRcbiAgICpcbiAgICogQGRlZmF1bHQgQSByb2xlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZVJvbGU/OiBJUm9sZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHVzZWQgdG8gY3JlYXRlIGEgU2hlbGxhYmxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxhYmxlUHJvcHMgZXh0ZW5kcyBTaGVsbGFibGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aXRoIHRoZSBzY3JpcHRzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IHRoZSB3aG9sZSBkaXJlY3Rvcnkgd2lsbCBiZSB1cGxvYWRlZC4gVXNlIGBleGNsdWRlRmlsZVBhdHRlcm5zYCB0byBpZ25vcmUgZmlsZXMuXG4gICAqL1xuICBzY3JpcHREaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZSBwYXRocyBtYXRjaGluZyB0aGUgZ2xvYiBwYXR0ZXJucyB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNjcmlwdCBkaXIuXG4gICAqL1xuICBleGNsdWRlRmlsZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZpbGVuYW1lIG9mIHRoZSBpbml0aWFsIHNjcmlwdCB0byBzdGFydCwgcmVsYXRpdmUgdG8gc2NyaXB0RGlyZWN0b3J5LlxuICAgKi9cbiAgZW50cnlwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBlbnRyeXBvaW50IHNjcmlwdC5cbiAgICpcbiAgICogKE5PVEU6IG5vdCBuYW1lZCAnYXJndW1lbnRzJyBiZWNhdXNlIHRoYXQncyBhIHJlc2VydmVkIGlkZW50aWZpZXIgaW4gSmF2YVNjcmlwdClcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gYXJndW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzdW1lUm9sZSB7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJvbGUgdG8gYXNzdW1lLlxuICAgKi9cbiAgcm9sZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgYXNzdW1lZCByb2xlIHNlc3Npb24uXG4gICAqXG4gICAqIFVzZSAgdGhlICByb2xlICBzZXNzaW9uIG5hbWUgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBzZXNzaW9uIHdoZW4gdGhlIHNhbWVcbiAgICogcm9sZSBpcyBhc3N1bWVkIGJ5IGRpZmZlcmVudCBwcmluY2lwYWxzIG9yIGZvciBkaWZmZXJlbnQgcmVhc29ucy4gSW5cbiAgICogY3Jvc3MtYWNjb3VudCBzY2VuYXJpb3MsIHRoZSByb2xlIHNlc3Npb24gbmFtZSBpcyB2aXNpYmxlIHRvLCBhbmQgY2FuIGJlXG4gICAqIGxvZ2dlZCBieSB0aGUgYWNjb3VudCB0aGF0IG93bnMgdGhlIHJvbGUuICBUaGUgcm9sZSBzZXNzaW9uIG5hbWUgaXMgYWxzb1xuICAgKiB1c2VkIGluIHRoZSBBUk4gb2YgdGhlIGFzc3VtZWQgcm9sZSBwcmluY2lwYWwuIFRoaXMgbWVhbnMgdGhhdCBzdWJzZXF1ZW50XG4gICAqIGNyb3NzLWFjY291bnQgQVBJIHJlcXVlc3RzIHVzaW5nIHRoZSB0ZW0tIHBvcmFyeSBzZWN1cml0eSBjcmVkZW50aWFscyB3aWxsXG4gICAqIGV4cG9zZSB0aGUgcm9sZSBzZXNzaW9uIG5hbWUgdG8gdGhlIGV4dGVybmFsIGFjY291bnQgaW4gdGhlaXIgQ2xvdWRUcmFpbFxuICAgKiBsb2dzLlxuICAgKlxuICAgKiBUaGUgcmVnZXggdXNlZCB0byB2YWxpZGF0ZSB0aGlzIHBhcmFtZXRlciBpcyBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzXG4gICAqIGNvbnNpc3RpbmcgIG9mIHVwcGVyLSBhbmQgbG93ZXItY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB3aXRoIG5vXG4gICAqIHNwYWNlcy4gWW91IGNhbiBhbHNvIGluY2x1ZGUgdW5kZXJzY29yZXMgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmdcbiAgICogY2hhcmFjdGVyczogPSwuQC1cbiAgICovXG4gIHNlc3Npb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgIHVuaXF1ZSAgaWRlbnRpZmllciAgdGhhdCAgaXMgIHVzZWQgYnkgdGhpcmQgcGFydGllcyB3aGVuIGFzc3VtaW5nIHJvbGVzXG4gICAqIGluIHRoZWlyIGN1c3RvbWVycycgYWNjb3VudHMuIEZvciBlYWNoICByb2xlICB0aGF0ICB0aGUgIHRoaXJkIHBhcnR5IGNhblxuICAgKiBhc3N1bWUsIHRoZXkgc2hvdWxkIGluc3RydWN0IHRoZWlyIGN1c3RvbWVycyB0byBlbnN1cmUgdGhlIHJvbGUncyB0cnVzdFxuICAgKiBwb2xpY3kgY2hlY2tzIGZvciB0aGUgZXh0ZXJuYWwgSUQgdGhhdCB0aGUgdGhpcmQgIHBhcnR5IGdlbmVyYXRlZC4gIEVhY2hcbiAgICogdGltZSB0aGUgdGhpcmQgcGFydHkgYXNzdW1lcyB0aGUgcm9sZSwgdGhleSBzaG91bGQgcGFzcyB0aGUgY3VzdG9tZXInc1xuICAgKiBleHRlcm5hbCBJRC4gVGhlIGV4dGVybmFsIElEIGlzIHVzZWZ1bCBpbiAgb3JkZXIgdG8gIGhlbHAgIHRoaXJkICBwYXJ0aWVzXG4gICAqIGJpbmQgYSByb2xlIHRvIHRoZSBjdXN0b21lciB3aG8gY3JlYXRlZCBpdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG4gICAqIGV4dGVybmFsIElELCBzZWUgSG93IHRvIFVzZSBhbiBFeHRlci0gbmFsICBJRCAgV2hlbiBHcmFudGluZyBBY2Nlc3MgdG8gWW91clxuICAgKiBBV1MgUmVzb3VyY2VzIHRvIGEgVGhpcmQgUGFydHkgaW4gdGhlIElBTSBVc2VyIEd1aWRlIC5cbiAgICpcbiAgICogVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGNvbnNpc3RpbmcgIG9mIHVwcGVyLSBhbmRcbiAgICogbG93ZXItY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB3aXRoIG5vIHNwYWNlcy4gWW91IGNhbiBhbHNvIGluY2x1ZGVcbiAgICogdW5kZXJzY29yZXMgb3IgIGFueSAgb2YgIHRoZSAgZm9sbG93aW5nIGNoYXJhY3RlcnM6ID0sLkA6Ly1cbiAgICovXG4gIGV4dGVybmFsSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBwcm9maWUgbmFtZSBpcyBjb25maWd1cmVkLCBhbiBhc3N1bWVkIHJvbGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNyZWF0ZWRcbiAgICogaW4gdGhlIHNoYXJlZCBhd3MgY29uZmlndXJhdGlvbiBmaWxlICh+Ly5hd3MvY29uZmlnKS4gVGhpcyBpcyBpbiBjb250cmFyeSBvZiBzaW1wbHkgaW52b2tpbmdcbiAgICogYW4gYHN0cyBhc3N1bWUtcm9sZWAgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYSBzZXNzaW9uIHdpdGggYSBmaXhlZCBleHBpcnkgZGF0ZS5cbiAgICpcbiAgICogVXNpbmcgYSBwcm9maWxlIHdpbGwgZGVsZWdhdGUgY3JlZGVudGlhbCByZWZyZXNoaW5nIHRvIHRoZSBTREsvQ0xJLlxuICAgKiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IGxvbmcgcnVubmluZyBzZXNzaW9ucyB0aGF0IG5lZWRzIHNlc3Npb25zIHRoYXQgYXJlIGxvbmdlciB0aGFuXG4gICAqIHRoZSBzZXNzaW9uIGR1cmF0aW9uIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIGBzdHMgYXNzdW1lLXJvbGVgLlxuICAgKlxuICAgKiBUaGUgYXBwbGljYXRpb24gY29kZSB3aWxsIGFjY2VzcyB0byB0aGlzIHByb2ZpbGUgaW4gdGhlIGBBV1NfUFJPRklMRWAgZW52IHZhcmlhYmxlLlxuICAgKlxuICAgKiBPbmx5IHJlbGV2YW50IGlmIGByZWZyZXNoYCBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvdXNlcmd1aWRlL2NsaS1jb25maWd1cmUtZmlsZXMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAnbG9uZy1ydW5uaW5nLXByb2ZpbGUnXG4gICAqL1xuICBwcm9maWxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmeSB0aGlzIGlmIHlvdSBoYXZlIGEgbG9uZyBydW5uaW5nIGV4ZWN1dGlvbiB0aGF0IG5lZWRzIGxvbmcgcnVubmluZyBzZXNzaW9ucy5cbiAgICogVGhpcyB3aWxsIGNyZWF0ZSBhIHByb2ZpbGUgYW5kIHVzZSBpdCB0byBkZWxlZ2F0ZSBjcmVkZW50aWFsIHJlZnJlc2hpbmcgdG8gdGhlIFNESy9DTElcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlZnJlc2g/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQSBDb2RlQnVpbGQgcHJvamVjdCB0aGF0IHJ1bnMgYXJiaXRyYXJ5IHNjcmlwdHMuXG4gKlxuICogVGhlIHNjcmlwdHMgdG8gYmUgcnVuIGFyZSBzcGVjaWZpZWQgYnkgc3VwcGx5aW5nIGEgZGlyZWN0b3J5LlxuICogQWxsIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlIHVwbG9hZGVkLCB0aGVuIHRoZSBzY3JpcHQgZGVzaWduYXRlZFxuICogYXMgdGhlIGVudHJ5IHBvaW50IGlzIHN0YXJ0ZWQuXG4gKlxuICogVGhlIHNjcmlwdCBpcyBleGVjdXRlZCBpbiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBidWlsZCBwcm9qZWN0J3NcbiAqIGlucHV0IGlzIHN0b3JlZC4gVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2NyaXB0IGZpbGVzIGFyZSBzdG9yZWRcbiAqIGlzIGluIHRoZSAkU0NSSVBUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBTdXBwb3J0cyBib3RoIFdpbmRvd3MgYW5kIExpbnV4IGNvbXB1dGVzLlxuICovXG5leHBvcnQgY2xhc3MgU2hlbGxhYmxlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHByb2plY3Q6IGNidWlsZC5Qcm9qZWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBDbG91ZFdhdGNoIGFsYXJtIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgaWYgdGhpcyBhY3Rpb24gZmFpbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWxhcm06IGNsb3Vkd2F0Y2guQWxhcm07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybTogU2hlbGxQbGF0Zm9ybTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFNwZWM6IEJ1aWxkU3BlYztcblxuICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dEFydGlmYWN0TmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBwcm9wczogU2hlbGxhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIGlkKTtcblxuICAgIHRoaXMucGxhdGZvcm0gPSBwcm9wcy5wbGF0Zm9ybSB8fCBTaGVsbFBsYXRmb3JtLkxpbnV4VWJ1bnR1O1xuXG4gICAgY29uc3QgZW50cnlwb2ludCA9IHBhdGguam9pbihwcm9wcy5zY3JpcHREaXJlY3RvcnksIHByb3BzLmVudHJ5cG9pbnQpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeXBvaW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0ZXN0IGVudHJ5cG9pbnQ6ICR7ZW50cnlwb2ludH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldCA9IG5ldyBhc3NldHMuQXNzZXQodGhpcywgJ1NjcmlwdERpcmVjdG9yeScsIHtcbiAgICAgIHBhdGg6IHByb3BzLnNjcmlwdERpcmVjdG9yeSxcbiAgICAgIGV4Y2x1ZGU6IHByb3BzLmV4Y2x1ZGVGaWxlUGF0dGVybnMsXG4gICAgICBpZ25vcmVNb2RlOiBJZ25vcmVNb2RlLkdMT0IsXG4gICAgfSk7XG5cbiAgICB0aGlzLm91dHB1dEFydGlmYWN0TmFtZSA9IChwcm9wcy5wcm9kdWNlc0FydGlmYWN0cyA/PyB0cnVlKSA/IGBBcnRpZmFjdF8ke3RoaXMubm9kZS5hZGRyfWAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMub3V0cHV0QXJ0aWZhY3ROYW1lICYmIHRoaXMub3V0cHV0QXJ0aWZhY3ROYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaG9vcHMsIHRvbyBsb25nOiAke3RoaXMub3V0cHV0QXJ0aWZhY3ROYW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuYnVpbGRTcGVjID0gQnVpbGRTcGVjLnNpbXBsZSh7XG4gICAgICBpbnN0YWxsOiB0aGlzLnBsYXRmb3JtLmluc3RhbGxDb21tYW5kcygpLFxuICAgICAgcHJlQnVpbGQ6IHRoaXMucGxhdGZvcm0ucHJlYnVpbGRDb21tYW5kcyhwcm9wcy5hc3N1bWVSb2xlLCBwcm9wcy51c2VSZWdpb25hbFN0c0VuZHBvaW50cyksXG4gICAgICBidWlsZDogdGhpcy5wbGF0Zm9ybS5idWlsZENvbW1hbmRzKHByb3BzLmVudHJ5cG9pbnQsIHByb3BzLmFyZ3MpLFxuICAgIH0pLm1lcmdlKHByb3BzLmJ1aWxkU3BlYyB8fCBCdWlsZFNwZWMuZW1wdHkoKSk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFNlY3JldHNBc1NlY3JldE5hbWVzID0gdGhpcy5jb252ZXJ0RW52aXJvbm1lbnRTZWNyZXRBcm5zVG9TZWNyZXROYW1lcyhwcm9wcy5lbnZpcm9ubWVudFNlY3JldHMpO1xuXG4gICAgdGhpcy5wcm9qZWN0ID0gbmV3IGNidWlsZC5Qcm9qZWN0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHByb2plY3ROYW1lOiBwcm9wcy5idWlsZFByb2plY3ROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgc291cmNlOiBwcm9wcy5zb3VyY2UsXG4gICAgICByb2xlOiBwcm9wcy5zZXJ2aWNlUm9sZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHRoaXMucGxhdGZvcm0uYnVpbGRJbWFnZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IHByb3BzLmNvbXB1dGVUeXBlIHx8IGNidWlsZC5Db21wdXRlVHlwZS5NRURJVU0sXG4gICAgICAgIHByaXZpbGVnZWQ6IHByb3BzLnByaXZpbGVnZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgW1MzX0JVQ0tFVF9FTlZdOiB7IHZhbHVlOiBhc3NldC5zM0J1Y2tldE5hbWUgfSxcbiAgICAgICAgW1MzX0tFWV9FTlZdOiB7IHZhbHVlOiBhc3NldC5zM09iamVjdEtleSB9LFxuICAgICAgICAuLi5yZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudCksXG4gICAgICAgIC4uLnJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKGVudmlyb25tZW50U2VjcmV0c0FzU2VjcmV0TmFtZXMsIGNidWlsZC5CdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUiksXG4gICAgICAgIC4uLnJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50UGFyYW1ldGVycywgY2J1aWxkLkJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUuUEFSQU1FVEVSX1NUT1JFKSxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0LFxuICAgICAgYnVpbGRTcGVjOiBjYnVpbGQuQnVpbGRTcGVjLmZyb21PYmplY3QodGhpcy5idWlsZFNwZWMucmVuZGVyKHsgcHJpbWFyeUFydGlmYWN0TmFtZTogdGhpcy5vdXRwdXRBcnRpZmFjdE5hbWUgfSkpLFxuICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb2xlID0gdGhpcy5wcm9qZWN0LnJvbGUhOyAvLyBub3QgdW5kZWZpbmVkLCBhcyBpdCdzIGEgbmV3IFByb2plY3RcbiAgICB0aGlzLnJvbGUuYWRkTWFuYWdlZFBvbGljeShpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0FtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5JykpO1xuICAgIGFzc2V0LmdyYW50UmVhZCh0aGlzLnJvbGUpO1xuXG4gICAgLy8gR3JhbnQgcmVhZCBhY2Nlc3MgdG8gc2VjcmV0c1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzLmVudmlyb25tZW50U2VjcmV0cyA/PyB7fSkuZm9yRWFjaCgoW25hbWUsIHNlY3JldEFybl0pID0+IHtcbiAgICAgIGNvbnN0IHNlY3JldCA9IGF3c19zZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldENvbXBsZXRlQXJuKHRoaXMsIGAke25hbWV9U2VjcmV0YCwgc2VjcmV0QXJuKTtcbiAgICAgIHNlY3JldC5ncmFudFJlYWQodGhpcy5yb2xlKTtcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHBhcmFtZXRlcnNcbiAgICBPYmplY3QuZW50cmllcyhwcm9wcy5lbnZpcm9ubWVudFBhcmFtZXRlcnMgPz8ge30pLmZvckVhY2goKFtuYW1lLCBwYXJhbWV0ZXJOYW1lXSkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gYXdzX3NzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUodGhpcywgYCR7bmFtZX1QYXJhbWV0ZXJgLCBwYXJhbWV0ZXJOYW1lKTtcbiAgICAgIHBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5yb2xlKTtcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5hc3N1bWVSb2xlKSB7XG4gICAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLmFzc3VtZVJvbGUucm9sZUFybl0sXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgdGhpcy5hbGFybSA9IG5ldyBjbG91ZHdhdGNoLkFsYXJtKHRoaXMsICdBbGFybScsIHtcbiAgICAgIG1ldHJpYzogdGhpcy5wcm9qZWN0Lm1ldHJpY0ZhaWxlZEJ1aWxkcyh7IHBlcmlvZDogcHJvcHMuYWxhcm1QZXJpb2QgfHwgRHVyYXRpb24uc2Vjb25kcygzMDApIH0pLFxuICAgICAgdGhyZXNob2xkOiBwcm9wcy5hbGFybVRocmVzaG9sZCB8fCAxLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IHByb3BzLmFsYXJtRXZhbHVhdGlvblBlcmlvZHMgfHwgMSxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9QaXBlbGluZShzdGFnZTogY3BpcGVsaW5lLklTdGFnZSwgbmFtZTogc3RyaW5nLCBpbnB1dEFydGlmYWN0OiBjcGlwZWxpbmUuQXJ0aWZhY3QsIHJ1bk9yZGVyPzogbnVtYmVyKTpcbiAgY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uIHtcbiAgICBjb25zdCBjb2RlQnVpbGRBY3Rpb24gPSBuZXcgY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6IG5hbWUsXG4gICAgICBwcm9qZWN0OiB0aGlzLnByb2plY3QsXG4gICAgICBydW5PcmRlcixcbiAgICAgIGlucHV0OiBpbnB1dEFydGlmYWN0LFxuICAgICAgdmFyaWFibGVzTmFtZXNwYWNlOiB0aGlzLnByb3BzLmFjdGlvbk5hbWVzcGFjZSxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB0aGlzLnByb3BzLnBpcGVsaW5lRW52aXJvbm1lbnRWYXJzXG4gICAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMucHJvcHMucGlwZWxpbmVFbnZpcm9ubWVudFZhcnMpXG4gICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiAoW2ssIHsgdHlwZTogY2J1aWxkLkJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUuUExBSU5URVhULCB2YWx1ZTogdiB9XSBhcyBjb25zdCkpKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0QXJ0aWZhY3ROYW1lXG4gICAgICAgID8gW3RoaXMub3V0cHV0QXJ0aWZhY3ROYW1lLCAuLi50aGlzLmJ1aWxkU3BlYy5hZGRpdGlvbmFsQXJ0aWZhY3ROYW1lcyA/PyBbXV0ubWFwKG4gPT4gbmV3IGNwaXBlbGluZS5BcnRpZmFjdChuKSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgc3RhZ2UuYWRkQWN0aW9uKGNvZGVCdWlsZEFjdGlvbik7XG4gICAgcmV0dXJuIGNvZGVCdWlsZEFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3Qgb2YgYGVudmlyb25tZW50U2VjcmV0c2AgaXMgdGhhdCB0aGUgdmFsdWVzIGFyZSBjb21wbGV0ZSBTZWNyZXQgQVJOcztcbiAgICogaG93ZXZlciwgdGhlIENvZGVCdWlsZCBjb25zdHJ1Y3QgZXhwZWN0cyBzZWNyZXQgbmFtZXMgYXMgdGhlIGlucHV0cyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyB0aGUgZW52aXJvbm1lbnQgc2VjcmV0cyBmcm9tIEFSTnMgdG8gbmFtZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRFbnZpcm9ubWVudFNlY3JldEFybnNUb1NlY3JldE5hbWVzKGVudmlyb25tZW50U2VjcmV0cz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBpZiAoIWVudmlyb25tZW50U2VjcmV0cykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IH07XG4gICAgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnRTZWNyZXRzID8/IHt9KS5mb3JFYWNoKChbbmFtZSwgc2VjcmV0QXJuXSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gYXdzX3NlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0Q29tcGxldGVBcm4odGhpcywgYCR7bmFtZX1TZWNyZXRGcm9tQXJuYCwgc2VjcmV0QXJuKTtcbiAgICAgIG91dFtuYW1lXSA9IHNlY3JldC5zZWNyZXROYW1lO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQbGF0Zm9ybSBhcmNoZXR5cGVcbiAqL1xuZXhwb3J0IGVudW0gUGxhdGZvcm1UeXBlIHtcbiAgTGludXggPSAnTGludXgnLFxuICBXaW5kb3dzID0gJ1dpbmRvd3MnLFxufVxuXG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB0eXBlIHRvIHJ1biB0aGUgc2NyaXB0cyBvblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2hlbGxQbGF0Zm9ybSB7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBkZWZhdWx0IFVidW50dSBMaW51eCBwbGF0Zm9ybVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgTGludXhVYnVudHUoKTogU2hlbGxQbGF0Zm9ybSB7XG4gICAgLy8gQ2Fubm90IGJlIHN0YXRpYyBtZW1iZXIgYmVjYXVzZSBvZiBpbml0aWFsaXphdGlvbiBvcmRlclxuICAgIHJldHVybiBuZXcgTGludXhQbGF0Zm9ybShjYnVpbGQuTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgZGVmYXVsdCBXaW5kb3dzIHBsYXRmb3JtXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBXaW5kb3dzKCk6IFNoZWxsUGxhdGZvcm0ge1xuICAgIC8vIENhbm5vdCBiZSBzdGF0aWMgbWVtYmVyIGJlY2F1c2Ugb2YgaW5pdGlhbGl6YXRpb24gb3JkZXJcbiAgICByZXR1cm4gbmV3IFdpbmRvd3NQbGF0Zm9ybShjYnVpbGQuV2luZG93c0J1aWxkSW1hZ2UuV0lOX1NFUlZFUl9DT1JFXzIwMTlfQkFTRSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYnVpbGRJbWFnZTogY2J1aWxkLklCdWlsZEltYWdlKSB7XG4gIH1cblxuICAvKipcbiAgICogUmV0cm4gY29tbWFuZHMgdG8gcHJlcGFyZSB0aGUgaG9zdCBmb3IgdGhlIHNoZWxsYWJsZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBpbnN0YWxsQ29tbWFuZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybiBjb21tYW5kcyB0byBkb3dubG9hZCB0aGUgc2NyaXB0IGJ1bmRsZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHByZWJ1aWxkQ29tbWFuZHMoYXNzdW1lUm9sZT86IEFzc3VtZVJvbGUsIHVzZVJlZ2lvbmFsU3RzRW5kcG9pbnRzPzogYm9vbGVhbik6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gY29tbWFuZHMgdG8gc3RhcnQgdGhlIGVudHJ5cG9pbnQgc2NyaXB0XG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYnVpbGRDb21tYW5kcyhlbnRyeXBvaW50OiBzdHJpbmcsIGFyZ3M/OiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHBsYXRmb3JtXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0IHBsYXRmb3JtVHlwZSgpOiBQbGF0Zm9ybVR5cGU7XG59XG5cbi8qKlxuICogQSBMaW51eCBQbGF0Zm9ybVxuICovXG5leHBvcnQgY2xhc3MgTGludXhQbGF0Zm9ybSBleHRlbmRzIFNoZWxsUGxhdGZvcm0ge1xuICBwdWJsaWMgcmVhZG9ubHkgcGxhdGZvcm1UeXBlID0gUGxhdGZvcm1UeXBlLkxpbnV4O1xuXG4gIHB1YmxpYyBpbnN0YWxsQ29tbWFuZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBbXG4gICAgICAnY29tbWFuZCAtdiB5YXJuID4gL2Rldi9udWxsIHx8IG5wbSBpbnN0YWxsIC0tZ2xvYmFsIHlhcm4nLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgcHJlYnVpbGRDb21tYW5kcyhhc3N1bWVSb2xlPzogQXNzdW1lUm9sZSwgdXNlUmVnaW9uYWxTdHNFbmRwb2ludHM/OiBib29sZWFuKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxpbmVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICAvLyBCZXR0ZXIgZWNobyB0aGUgbG9jYXRpb24gaGVyZTsgaWYgdGhpcyBmYWlscywgdGhlIGVycm9yIG1lc3NhZ2Ugb25seSBjb250YWluc1xuICAgIC8vIHRoZSB1bmV4cGFuZGVkIHZhcmlhYmxlcyBieSBkZWZhdWx0LiBJdCBtaWdodCBmYWlsIGlmIHlvdSdyZSBydW5uaW5nIGFuIG9sZFxuICAgIC8vIGRlZmluaXRpb24gb2YgdGhlIENvZGVCdWlsZCBwcm9qZWN0LS10aGUgcGVybWlzc2lvbnMgd2lsbCBoYXZlIGJlZW4gY2hhbmdlZFxuICAgIC8vIHRvIG9ubHkgYWxsb3cgZG93bmxvYWRpbmcgdGhlIHZlcnkgbGF0ZXN0IHZlcnNpb24uXG4gICAgbGluZXMucHVzaChgZWNobyBcIkRvd25sb2FkaW5nIHNjcmlwdHMgZnJvbSBzMzovL1xcJHske1MzX0JVQ0tFVF9FTlZ9fS9cXCR7JHtTM19LRVlfRU5WfX1cImApO1xuICAgIGxpbmVzLnB1c2goYGF3cyBzMyBjcCBzMzovL1xcJHske1MzX0JVQ0tFVF9FTlZ9fS9cXCR7JHtTM19LRVlfRU5WfX0gL3RtcGApO1xuICAgIGxpbmVzLnB1c2goJ21rZGlyIC1wIC90bXAvc2NyaXB0ZGlyJyk7XG4gICAgbGluZXMucHVzaChgdW56aXAgL3RtcC8kKGJhc2VuYW1lIFxcJCR7UzNfS0VZX0VOVn0pIC1kIC90bXAvc2NyaXB0ZGlyYCk7XG5cbiAgICBpZiAoYXNzdW1lUm9sZSkge1xuXG4gICAgICBpZiAoYXNzdW1lUm9sZS5yZWZyZXNoKSB7XG5cbiAgICAgICAgY29uc3QgYXdzSG9tZSA9ICd+Ly5hd3MnO1xuXG4gICAgICAgIGNvbnN0IHByb2ZpbGVOYW1lID0gYXNzdW1lUm9sZS5wcm9maWxlTmFtZSA/PyAnbG9uZy1ydW5uaW5nLXByb2ZpbGUnO1xuXG4gICAgICAgIGxpbmVzLnB1c2goYG1rZGlyIC1wICR7YXdzSG9tZX1gKTtcbiAgICAgICAgbGluZXMucHVzaChgdG91Y2ggJHthd3NIb21lfS9jcmVkZW50aWFsc2ApO1xuICAgICAgICBsaW5lcy5wdXNoKGBjb25maWc9JHthd3NIb21lfS9jb25maWdgKTtcbiAgICAgICAgbGluZXMucHVzaChgZWNobyBbcHJvZmlsZSAke3Byb2ZpbGVOYW1lfV0+PiAkXFx7Y29uZmlnXFx9YCk7XG4gICAgICAgIGxpbmVzLnB1c2goJ2VjaG8gY3JlZGVudGlhbF9zb3VyY2UgPSBFY3NDb250YWluZXIgPj4gJFxce2NvbmZpZ1xcfScpO1xuICAgICAgICBsaW5lcy5wdXNoKGBlY2hvIHJvbGVfc2Vzc2lvbl9uYW1lID0gJHthc3N1bWVSb2xlLnNlc3Npb25OYW1lfSA+PiAkXFx7Y29uZmlnXFx9YCk7XG4gICAgICAgIGxpbmVzLnB1c2goYGVjaG8gcm9sZV9hcm4gPSAke2Fzc3VtZVJvbGUucm9sZUFybn0gPj4gJGNvbmZpZ2ApO1xuXG4gICAgICAgIGlmIChhc3N1bWVSb2xlLmV4dGVybmFsSWQpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGBlY2hvIGV4dGVybmFsX2lkID0gJHthc3N1bWVSb2xlLmV4dGVybmFsSWR9ID4+ICRjb25maWdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxldCB0aGUgYXBwbGljYXRpb24gY29kZSBrbm93IHdoaWNoIHJvbGUgaXMgYmVpbmcgdXNlZC5cbiAgICAgICAgbGluZXMucHVzaChgZXhwb3J0IEFXU19QUk9GSUxFPSR7cHJvZmlsZU5hbWV9YCk7XG5cbiAgICAgICAgLy8gZm9yY2UgdGhlIEFXUyBTREsgZm9yIEphdmFTY3JpcHQgdG8gYWN0dWFsbHkgbG9hZCB0aGUgY29uZmlnIGZpbGUgKGRvIGF1dG9tYXRpY2FsbHkgc28gdXNlcnMgZG9uJ3QgZm9yZ2V0KVxuICAgICAgICBsaW5lcy5wdXNoKCdleHBvcnQgQVdTX1NES19MT0FEX0NPTkZJRz0xJyk7XG5cbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgY29uc3QgZXh0ZXJuYWxJZCA9IGFzc3VtZVJvbGUuZXh0ZXJuYWxJZCA/IGAtLWV4dGVybmFsLWlkIFwiJHthc3N1bWVSb2xlLmV4dGVybmFsSWR9XCJgIDogJyc7XG4gICAgICAgIGNvbnN0IFN0c0VuZHBvaW50cyA9IHVzZVJlZ2lvbmFsU3RzRW5kcG9pbnRzID8gJ3JlZ2lvbmFsJyA6ICdsZWdhY3knO1xuXG4gICAgICAgIGxpbmVzLnB1c2goJ2NyZWRzPSQobWt0ZW1wIC1kKS9jcmVkcy5qc29uJyk7XG4gICAgICAgIGxpbmVzLnB1c2goYEFXU19TVFNfUkVHSU9OQUxfRU5EUE9JTlRTPSR7U3RzRW5kcG9pbnRzfSBhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXCIke2Fzc3VtZVJvbGUucm9sZUFybn1cIiAtLXJvbGUtc2Vzc2lvbi1uYW1lIFwiJHthc3N1bWVSb2xlLnNlc3Npb25OYW1lfVwiICR7ZXh0ZXJuYWxJZH0gPiAkY3JlZHNgKTtcbiAgICAgICAgbGluZXMucHVzaCgnZXhwb3J0IEFXU19BQ0NFU1NfS0VZX0lEPVwiJChjYXQgJHtjcmVkc30gfCBncmVwIFwiQWNjZXNzS2V5SWRcIiB8IGN1dCAtZFxcJ1wiXFwnIC1mIDQpXCInKTtcbiAgICAgICAgbGluZXMucHVzaCgnZXhwb3J0IEFXU19TRUNSRVRfQUNDRVNTX0tFWT1cIiQoY2F0ICR7Y3JlZHN9IHwgZ3JlcCBcIlNlY3JldEFjY2Vzc0tleVwiIHwgY3V0IC1kXFwnXCJcXCcgLWYgNClcIicpO1xuICAgICAgICBsaW5lcy5wdXNoKCdleHBvcnQgQVdTX1NFU1NJT05fVE9LRU49XCIkKGNhdCAke2NyZWRzfSB8IGdyZXAgXCJTZXNzaW9uVG9rZW5cIiB8IGN1dCAtZFxcJ1wiXFwnIC1mIDQpXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRDb21tYW5kcyhlbnRyeXBvaW50OiBzdHJpbmcsIGFyZ3M/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2V4cG9ydCBTQ1JJUFRfRElSPS90bXAvc2NyaXB0ZGlyJyxcbiAgICAgIGBlY2hvIFwiUnVubmluZyAke2VudHJ5cG9pbnR9XCJgLFxuICAgICAgYC9iaW4vYmFzaCAvdG1wL3NjcmlwdGRpci8ke2VudHJ5cG9pbnR9ICR7KGFyZ3MgPz8gW10pLmpvaW4oJyAnKX1gLnRyaW1SaWdodCgpLFxuICAgIF07XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBXaW5kb3dzUGxhdGZvcm1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dzUGxhdGZvcm1PcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXBncmFkZSBOb2RlLmpzIHVzaW5nIENob2NvbGF0ZXkgZHVyaW5nIHRoZSBpbnN0YWxsIHBoYXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGdyYWRlTm9kZVdpdGhDaG9jb2xhdGV5PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIFdpbmRvd3MgUGxhdGZvcm1cbiAqL1xuZXhwb3J0IGNsYXNzIFdpbmRvd3NQbGF0Zm9ybSBleHRlbmRzIFNoZWxsUGxhdGZvcm0ge1xuICBwdWJsaWMgcmVhZG9ubHkgcGxhdGZvcm1UeXBlID0gUGxhdGZvcm1UeXBlLldpbmRvd3M7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXBncmFkZU5vZGVXaXRoQ2hvY29sYXRleTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihidWlsZEltYWdlOiBjYnVpbGQuSUJ1aWxkSW1hZ2UsIG9wdGlvbnM6IFdpbmRvd3NQbGF0Zm9ybU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKGJ1aWxkSW1hZ2UpO1xuICAgIHRoaXMudXBncmFkZU5vZGVXaXRoQ2hvY29sYXRleSA9IG9wdGlvbnMudXBncmFkZU5vZGVXaXRoQ2hvY29sYXRleSA/PyB0cnVlO1xuICB9XG5cbiAgcHVibGljIGluc3RhbGxDb21tYW5kcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnVwZ3JhZGVOb2RlV2l0aENob2NvbGF0ZXkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgaW1hZ2UncyBub2RlanMgdG8gdGhlIGxhdGVzdCBMVFMgcmVsZWFzZS5cbiAgICAgICdJbXBvcnQtTW9kdWxlIFwiQzpcXFxcUHJvZ3JhbURhdGFcXFxcY2hvY29sYXRleVxcXFxoZWxwZXJzXFxcXGNob2NvbGF0ZXlQcm9maWxlLnBzbTFcIicsXG4gICAgICAnQzpcXFxcUHJvZ3JhbURhdGFcXFxcY2hvY29sYXRleVxcXFxiaW5cXFxcY2hvY28uZXhlIHVwZ3JhZGUgbm9kZWpzLWx0cyAteScsXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVidWlsZENvbW1hbmRzKGFzc3VtZVJvbGU/OiBBc3N1bWVSb2xlLCB1c2VSZWdpb25hbFN0c0VuZHBvaW50cz86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgaWYgKGFzc3VtZVJvbGUpIHtcblxuICAgICAgaWYgKGFzc3VtZVJvbGUucmVmcmVzaCkge1xuXG4gICAgICAgIC8vIENvbmZpZ3VyZSBhIG5hbWVkIHByb2ZpbGUgaW4gdGhlIHNoYXJlZCBjb25maWcgZmlsZSBhbmQgZGVsZWdhdGUgY3JlZGVudGlhbFxuICAgICAgICAvLyByZWZyZXNoaW5nIHRvIHRoZSBTREsvQ0xJLiBUaGlzIG1pcnJvcnMgdGhlIExpbnV4IGBjcmVkZW50aWFsX3NvdXJjZWAgYXBwcm9hY2hcbiAgICAgICAgLy8gYW5kIHN1cHBvcnRzIHNlc3Npb25zIGxvbmdlciB0aGFuIGEgc2luZ2xlIGBzdHMgYXNzdW1lLXJvbGVgIGNhbGwuXG4gICAgICAgIGNvbnN0IGF3c0hvbWUgPSAnJGVudjpVU0VSUFJPRklMRVxcXFwuYXdzJztcbiAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGAke2F3c0hvbWV9XFxcXGNvbmZpZ2A7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVOYW1lID0gYXNzdW1lUm9sZS5wcm9maWxlTmFtZSA/PyAnbG9uZy1ydW5uaW5nLXByb2ZpbGUnO1xuXG4gICAgICAgIGxpbmVzLnB1c2goYE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLUZvcmNlIC1QYXRoICR7YXdzSG9tZX0gfCBPdXQtTnVsbGApO1xuICAgICAgICBsaW5lcy5wdXNoKGBOZXctSXRlbSAtSXRlbVR5cGUgRmlsZSAtRm9yY2UgLVBhdGggJHthd3NIb21lfVxcXFxjcmVkZW50aWFscyB8IE91dC1OdWxsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYEFkZC1Db250ZW50IC1QYXRoICR7Y29uZmlnUGF0aH0gLVZhbHVlIFwiW3Byb2ZpbGUgJHtwcm9maWxlTmFtZX1dXCJgKTtcbiAgICAgICAgbGluZXMucHVzaChgQWRkLUNvbnRlbnQgLVBhdGggJHtjb25maWdQYXRofSAtVmFsdWUgXCJjcmVkZW50aWFsX3NvdXJjZSA9IEVjc0NvbnRhaW5lclwiYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYEFkZC1Db250ZW50IC1QYXRoICR7Y29uZmlnUGF0aH0gLVZhbHVlIFwicm9sZV9zZXNzaW9uX25hbWUgPSAke2Fzc3VtZVJvbGUuc2Vzc2lvbk5hbWV9XCJgKTtcbiAgICAgICAgbGluZXMucHVzaChgQWRkLUNvbnRlbnQgLVBhdGggJHtjb25maWdQYXRofSAtVmFsdWUgXCJyb2xlX2FybiA9ICR7YXNzdW1lUm9sZS5yb2xlQXJufVwiYCk7XG5cbiAgICAgICAgaWYgKGFzc3VtZVJvbGUuZXh0ZXJuYWxJZCkge1xuICAgICAgICAgIGxpbmVzLnB1c2goYEFkZC1Db250ZW50IC1QYXRoICR7Y29uZmlnUGF0aH0gLVZhbHVlIFwiZXh0ZXJuYWxfaWQgPSAke2Fzc3VtZVJvbGUuZXh0ZXJuYWxJZH1cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGV0IHRoZSBhcHBsaWNhdGlvbiBjb2RlIGtub3cgd2hpY2ggcm9sZSBpcyBiZWluZyB1c2VkLlxuICAgICAgICBsaW5lcy5wdXNoKGAkZW52OkFXU19QUk9GSUxFID0gXCIke3Byb2ZpbGVOYW1lfVwiYCk7XG5cbiAgICAgICAgLy8gZm9yY2UgdGhlIEFXUyBTREsgZm9yIEphdmFTY3JpcHQgdG8gYWN0dWFsbHkgbG9hZCB0aGUgY29uZmlnIGZpbGUgKGRvIGF1dG9tYXRpY2FsbHkgc28gdXNlcnMgZG9uJ3QgZm9yZ2V0KVxuICAgICAgICBsaW5lcy5wdXNoKCckZW52OkFXU19TREtfTE9BRF9DT05GSUcgPSBcIjFcIicpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGNvbnN0IGV4dGVybmFsSWQgPSBhc3N1bWVSb2xlLmV4dGVybmFsSWQgPyBgIC0tZXh0ZXJuYWwtaWQgXCIke2Fzc3VtZVJvbGUuZXh0ZXJuYWxJZH1cImAgOiAnJztcbiAgICAgICAgY29uc3Qgc3RzRW5kcG9pbnRzID0gdXNlUmVnaW9uYWxTdHNFbmRwb2ludHMgPyAncmVnaW9uYWwnIDogJ2xlZ2FjeSc7XG5cbiAgICAgICAgLy8gUG93ZXJTaGVsbCBoYXMgbmF0aXZlIEpTT04gcGFyc2luZywgc28gd2UgY2FuIGFzc3VtZSB0aGUgcm9sZSBhbmQgcmVhZCB0aGVcbiAgICAgICAgLy8gY3JlZGVudGlhbHMgb2ZmIHRoZSBwYXJzZWQgb2JqZWN0IHJhdGhlciB0aGFuIGdyZXBwaW5nIGEgdGVtcCBmaWxlLlxuICAgICAgICBsaW5lcy5wdXNoKGAkZW52OkFXU19TVFNfUkVHSU9OQUxfRU5EUE9JTlRTID0gXCIke3N0c0VuZHBvaW50c31cImApO1xuICAgICAgICBsaW5lcy5wdXNoKGAkYXNzdW1lZFJvbGUgPSBhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXCIke2Fzc3VtZVJvbGUucm9sZUFybn1cIiAtLXJvbGUtc2Vzc2lvbi1uYW1lIFwiJHthc3N1bWVSb2xlLnNlc3Npb25OYW1lfVwiJHtleHRlcm5hbElkfSB8IENvbnZlcnRGcm9tLUpzb25gKTtcbiAgICAgICAgbGluZXMucHVzaCgnJGVudjpBV1NfQUNDRVNTX0tFWV9JRCA9ICRhc3N1bWVkUm9sZS5DcmVkZW50aWFscy5BY2Nlc3NLZXlJZCcpO1xuICAgICAgICBsaW5lcy5wdXNoKCckZW52OkFXU19TRUNSRVRfQUNDRVNTX0tFWSA9ICRhc3N1bWVkUm9sZS5DcmVkZW50aWFscy5TZWNyZXRBY2Nlc3NLZXknKTtcbiAgICAgICAgbGluZXMucHVzaCgnJGVudjpBV1NfU0VTU0lPTl9UT0tFTiA9ICRhc3N1bWVkUm9sZS5DcmVkZW50aWFscy5TZXNzaW9uVG9rZW4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRDb21tYW5kcyhlbnRyeXBvaW50OiBzdHJpbmcsIGFyZ3M/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ1NldC1WYXJpYWJsZSAtTmFtZSBURU1QRElSIC1WYWx1ZSAoTmV3LVRlbXBvcmFyeUZpbGUpLkRpcmVjdG9yeU5hbWUnLFxuICAgICAgYGF3cyBzMyBjcCBzMzovLyRlbnY6JHtTM19CVUNLRVRfRU5WfS8kZW52OiR7UzNfS0VZX0VOVn0gJFRFTVBESVJcXFxcc2NyaXB0cy56aXBgLFxuICAgICAgJ05ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJFRFTVBESVJcXFxcc2NyaXB0ZGlyJyxcbiAgICAgICdFeHBhbmQtQXJjaGl2ZSAtUGF0aCAkVEVNUERJUi9zY3JpcHRzLnppcCAtRGVzdGluYXRpb25QYXRoICRURU1QRElSXFxcXHNjcmlwdGRpcicsXG4gICAgICAnJGVudjpTQ1JJUFRfRElSID0gXCIkVEVNUERJUlxcXFxzY3JpcHRkaXJcIicsXG4gICAgICBgJiAkVEVNUERJUlxcXFxzY3JpcHRkaXJcXFxcJHtlbnRyeXBvaW50fSAkeyhhcmdzID8/IFtdKS5qb2luKCcgJyl9YC50cmltUmlnaHQoKSxcbiAgICBdO1xuICB9XG59XG4iXX0=
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2hlbGxhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qiw2Q0FLcUI7QUFFckIsMkNBQXVDO0FBQ3ZDLDZDQUF5QztBQUN6QyxpQ0FBb0Q7QUFFcEQsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUM7QUFDekMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDO0FBRW5DLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxnQkFBZ0IsYUFBYSxDQUFDO0FBNlA1RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQWN0QyxZQUFZLE1BQWlCLEVBQUUsRUFBVSxFQUFtQixLQUFxQjtRQUMvRSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRHdDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRy9FLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDO1FBRTVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUMvRDtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksMkJBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3RELElBQUksRUFBRSxLQUFLLENBQUMsZUFBZTtZQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtZQUNsQyxVQUFVLEVBQUUsd0JBQVUsQ0FBQyxJQUFJO1NBQzVCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdkcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsc0JBQVMsQ0FBQyxNQUFNLENBQUM7WUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO1lBQ3hDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1lBQ3pGLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDakUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLHNCQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUvQyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVqSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMkJBQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNsRCxXQUFXLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUNuQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztZQUN2QixXQUFXLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtnQkFDcEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksMkJBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTTtnQkFDM0QsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2FBQzdCO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRTtnQkFDOUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxHQUFHLElBQUEsaUNBQTBCLEVBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDaEQsR0FBRyxJQUFBLGlDQUEwQixFQUFDLCtCQUErQixFQUFFLDJCQUFNLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFDO2dCQUNuSCxHQUFHLElBQUEsaUNBQTBCLEVBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLDJCQUFNLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFDO2FBQ2hIO1lBQ0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLFNBQVMsRUFBRSwyQkFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDLHVDQUF1QztRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDhDQUE4QyxDQUFDLENBQUMsQ0FBQztRQUN2SCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQiwrQkFBK0I7UUFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRTtZQUMzRSxNQUFNLE1BQU0sR0FBRyxnQ0FBa0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQ0FBa0M7UUFDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUNsRixNQUFNLFNBQVMsR0FBRyxxQkFBTyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMzRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUkscUJBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3JELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNMO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDRCQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDL0MsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9GLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUM7WUFDcEMsa0JBQWtCLEVBQUUsNEJBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxrQ0FBa0M7WUFDcEYsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixJQUFJLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsNEJBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNO1NBQ3JELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBdUIsRUFBRSxJQUFZLEVBQUUsYUFBaUMsRUFBRSxRQUFpQjtRQUU5RyxNQUFNLGVBQWUsR0FBRyxJQUFJLHNDQUFpQixDQUFDLGVBQWUsQ0FBQztZQUM1RCxVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsUUFBUTtZQUNSLEtBQUssRUFBRSxhQUFhO1lBQ3BCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUM5QyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QjtnQkFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDO3FCQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsMkJBQU0sQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFXLENBQUMsQ0FBQztnQkFDdEcsQ0FBQyxDQUFDLFNBQVM7WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDOUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLDhCQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoSCxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx5Q0FBeUMsQ0FBQyxrQkFBOEM7UUFDOUYsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsTUFBTSxHQUFHLEdBQThCLEVBQUcsQ0FBQztRQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDckUsTUFBTSxNQUFNLEdBQUcsZ0NBQWtCLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUF0SUQsOEJBc0lDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDdEIsK0JBQWUsQ0FBQTtJQUNmLG1DQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUd2QjtBQUVEOztHQUVHO0FBQ0gsTUFBc0IsYUFBYTtJQUNqQzs7T0FFRztJQUNJLE1BQU0sS0FBSyxXQUFXO1FBQzNCLDBEQUEwRDtRQUMxRCxPQUFPLElBQUksYUFBYSxDQUFDLDJCQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sS0FBSyxPQUFPO1FBQ3ZCLDBEQUEwRDtRQUMxRCxPQUFPLElBQUksZUFBZSxDQUFDLDJCQUFNLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsWUFBNEIsVUFBOEI7UUFBOUIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7SUFDMUQsQ0FBQztDQXFCRjtBQXZDRCxzQ0F1Q0M7QUFFRDs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLGFBQWE7SUFBaEQ7O1FBQ2tCLGlCQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztJQW9FcEQsQ0FBQztJQWxFUSxlQUFlO1FBQ3BCLE9BQU87WUFDTCwwREFBMEQ7U0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxVQUF1QixFQUFFLHVCQUFpQztRQUNoRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2xDLGdGQUFnRjtRQUNoRiw4RUFBOEU7UUFDOUUsOEVBQThFO1FBQzlFLHFEQUFxRDtRQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxhQUFhLFFBQVEsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUMxRixLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixhQUFhLFFBQVEsVUFBVSxRQUFRLENBQUMsQ0FBQztRQUN6RSxLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO1FBRXZFLElBQUksVUFBVSxFQUFFO1lBRWQsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUV0QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7Z0JBRXpCLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLElBQUksc0JBQXNCLENBQUM7Z0JBRXJFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsT0FBTyxjQUFjLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLE9BQU8sU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFdBQVcsaUJBQWlCLENBQUMsQ0FBQztnQkFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO2dCQUNuRSxLQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixVQUFVLENBQUMsV0FBVyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNoRixLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixVQUFVLENBQUMsT0FBTyxhQUFhLENBQUMsQ0FBQztnQkFFL0QsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO29CQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixVQUFVLENBQUMsVUFBVSxhQUFhLENBQUMsQ0FBQztpQkFDdEU7Z0JBRUQsMERBQTBEO2dCQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRCw2R0FBNkc7Z0JBQzdHLEtBQUssQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUU1QztpQkFBTTtnQkFFTCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNGLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFFckUsS0FBSyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLDhCQUE4QixZQUFZLG9DQUFvQyxVQUFVLENBQUMsT0FBTywwQkFBMEIsVUFBVSxDQUFDLFdBQVcsS0FBSyxVQUFVLFdBQVcsQ0FBQyxDQUFDO2dCQUN2TCxLQUFLLENBQUMsSUFBSSxDQUFDLG9GQUFvRixDQUFDLENBQUM7Z0JBQ2pHLEtBQUssQ0FBQyxJQUFJLENBQUMsNEZBQTRGLENBQUMsQ0FBQztnQkFDekcsS0FBSyxDQUFDLElBQUksQ0FBQyxxRkFBcUYsQ0FBQyxDQUFDO2FBQ25HO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxhQUFhLENBQUMsVUFBa0IsRUFBRSxJQUFlO1FBQ3RELE9BQU87WUFDTCxrQ0FBa0M7WUFDbEMsaUJBQWlCLFVBQVUsR0FBRztZQUM5Qiw0QkFBNEIsVUFBVSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRTtTQUMvRSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBckVELHNDQXFFQztBQWNEOztHQUVHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLGFBQWE7SUFJaEQsWUFBWSxVQUE4QixFQUFFLFVBQWtDLEVBQUU7UUFDOUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBSkosaUJBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBS2xELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDbkMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxPQUFPO1lBQ0wsdURBQXVEO1lBQ3ZELDhFQUE4RTtZQUM5RSxtRUFBbUU7U0FDcEUsQ0FBQztJQUNKLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxVQUF1QixFQUFFLHVCQUFpQztRQUNoRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBRWxDLDJFQUEyRTtRQUMzRSxLQUFLLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxhQUFhLFNBQVMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUM1RixLQUFLLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxnQkFBZ0IsYUFBYSxDQUFDLENBQUM7UUFDdkYsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsYUFBYSxTQUFTLFVBQVUsSUFBSSxnQkFBZ0IsZUFBZSxDQUFDLENBQUM7UUFDdkcsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsZ0JBQWdCLGtDQUFrQyxrQkFBa0IsU0FBUyxDQUFDLENBQUM7UUFFbEgsSUFBSSxVQUFVLEVBQUU7WUFFZCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUU7Z0JBRXRCLDhFQUE4RTtnQkFDOUUsaUZBQWlGO2dCQUNqRixxRUFBcUU7Z0JBQ3JFLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDO2dCQUN6QyxNQUFNLFVBQVUsR0FBRyxHQUFHLE9BQU8sVUFBVSxDQUFDO2dCQUN4QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLHNCQUFzQixDQUFDO2dCQUVyRSxLQUFLLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxPQUFPLGFBQWEsQ0FBQyxDQUFDO2dCQUM5RSxLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixPQUFPLG1EQUFtRCxPQUFPLDRCQUE0QixDQUFDLENBQUM7Z0JBQ2pJLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLFVBQVUscUJBQXFCLFdBQVcsSUFBSSxDQUFDLENBQUM7Z0JBQ2hGLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLFVBQVUsNENBQTRDLENBQUMsQ0FBQztnQkFDeEYsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsVUFBVSxnQ0FBZ0MsVUFBVSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3JHLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLFVBQVUsdUJBQXVCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUV4RixJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7b0JBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLFVBQVUsMEJBQTBCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2lCQUMvRjtnQkFFRCwwREFBMEQ7Z0JBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBRWxELDZHQUE2RztnQkFDN0csS0FBSyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2FBRTlDO2lCQUFNO2dCQUVMLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUYsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUVyRSw2RUFBNkU7Z0JBQzdFLHNFQUFzRTtnQkFDdEUsS0FBSyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDbEUsS0FBSyxDQUFDLElBQUksQ0FBQyxrREFBa0QsVUFBVSxDQUFDLE9BQU8sMEJBQTBCLFVBQVUsQ0FBQyxXQUFXLElBQUksVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNwSyxLQUFLLENBQUMsSUFBSSxDQUFDLCtEQUErRCxDQUFDLENBQUM7Z0JBQzVFLEtBQUssQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQztnQkFDcEYsS0FBSyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO2FBQzlFO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxhQUFhLENBQUMsVUFBa0IsRUFBRSxJQUFlO1FBQ3RELE9BQU87WUFDTCxzQkFBc0Isa0JBQWtCLEdBQUc7WUFDM0MsaUJBQWlCLFVBQVUsR0FBRztZQUM5QixLQUFLLGtCQUFrQixLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUU7U0FDL0UsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5GRCwwQ0FtRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSwgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzX2Fzc2V0cyBhcyBhc3NldHMsIGF3c19zZWNyZXRzbWFuYWdlciwgYXdzX3NzbSwgSWdub3JlTW9kZSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQnVpbGRTcGVjIH0gZnJvbSAnLi9idWlsZC1zcGVjJztcbmltcG9ydCB7IHJlbmRlckVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgUzNfQlVDS0VUX0VOViA9ICdTQ1JJUFRfUzNfQlVDS0VUJztcbmNvbnN0IFMzX0tFWV9FTlYgPSAnU0NSSVBUX1MzX0tFWSc7XG5cbmNvbnN0IFdJTkRPV1NfQkFTRV9ESVIgPSAnQzpcXFxcZGVsaXZsaWInO1xuY29uc3QgV0lORE9XU19TQ1JJUFRfRElSID0gYCR7V0lORE9XU19CQVNFX0RJUn1cXFxcc2NyaXB0ZGlyYDtcblxuZXhwb3J0IGludGVyZmFjZSBTaGVsbGFibGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIFByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTb3VyY2UgZm9yIHRoZSBDb2RlQnVpbGQgcHJvamVjdFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBzb3VyY2VcbiAgICovXG4gIHNvdXJjZT86IGNidWlsZC5JU291cmNlO1xuXG4gIC8qKlxuICAgKiBXaGF0IHBsYXRmb3JtIHRvIHVzIHRvIHJ1biB0aGUgc2NyaXB0cyBvblxuICAgKlxuICAgKiBAZGVmYXVsdCBTaGVsbFBsYXRmb3JtLkxpbnV4VWJ1bnR1XG4gICAqL1xuICBwbGF0Zm9ybT86IFNoZWxsUGxhdGZvcm07XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggc2VjcmV0cyBtYW5hZ2VyIHZhbHVlcy4gVGhlIHZhbHVlcyBtdXN0IGJlIGNvbXBsZXRlIFNlY3JldCBNYW5hZ2VyIEFSTnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICBlbnZpcm9ubWVudFNlY3JldHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBTU00gcGFyYW1ldGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIGVudmlyb25tZW50UGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wdXRlIHR5cGUgdG8gdXNlIGZvciB0aGUgYnVpbGQgY29udGFpbmVyLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgbm90IGFsbCBjb21iaW5hdGlvbnMgYXJlIGF2YWlsYWJsZS4gRm9yIGV4YW1wbGUsXG4gICAqIFdpbmRvd3MgaW1hZ2VzIGNhbm5vdCBiZSBydW4gb24gQ29tcHV0ZVR5cGUuU21hbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbXB1dGVUeXBlLk1lZGl1bVxuICAgKi9cbiAgY29tcHV0ZVR5cGU/OiBjYnVpbGQuQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBob3cgdGhlIHByb2plY3QgYnVpbGRzIERvY2tlciBpbWFnZXMuIFNwZWNpZnkgdHJ1ZSB0byBlbmFibGVcbiAgICogcnVubmluZyB0aGUgRG9ja2VyIGRhZW1vbiBpbnNpZGUgYSBEb2NrZXIgY29udGFpbmVyLiBUaGlzIHZhbHVlIG11c3QgYmVcbiAgICogc2V0IHRvIHRydWUgb25seSBpZiB0aGlzIGJ1aWxkIHByb2plY3Qgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIERvY2tlclxuICAgKiBpbWFnZXMsIGFuZCB0aGUgc3BlY2lmaWVkIGJ1aWxkIGVudmlyb25tZW50IGltYWdlIGlzIG5vdCBvbmUgcHJvdmlkZWQgYnlcbiAgICogQVdTIENvZGVCdWlsZCB3aXRoIERvY2tlciBzdXBwb3J0LiBPdGhlcndpc2UsIGFsbCBhc3NvY2lhdGVkIGJ1aWxkcyB0aGF0XG4gICAqIGF0dGVtcHQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRG9ja2VyIGRhZW1vbiB3aWxsIGZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcml2aWxlZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgZm9yIHRoZSBidWlsZCBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIG5hbWUgaXMgZ2VuZXJhdGVkIGJ5IENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgYnVpbGRQcm9qZWN0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIFJlZ2lvbmFsIEFXUyBTVFMgZW5kcG9pbnRzIHNob3VsZCBiZSB1c2VkIGluc3RlYWRcbiAgICogb2YgdGhlIGdsb2JhbCBlbmRwb2ludC4gU3BlY2lmeSB0cnVlIHRvIHVzZSBSZWdpb25hbCBBV1MgU1RTIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVzZVJlZ2lvbmFsU3RzRW5kcG9pbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2FuIGJlIHVzZWQgdG8gcnVuIHRoaXMgYnVpbGQgdXNpbmcgYSBzcGVjaWZpYyBJQU0gcm9sZS4gVGhpcyBjYW4gYmUgdXNlZCxcbiAgICogZm9yIGV4YW1wbGUsIHRvIGV4ZWN1dGUgaW4gdGhlIGNvbnRleHQgb2YgYW5vdGhlciBhY2NvdW50IChlLmcuIHRvIHJ1blxuICAgKiB0ZXN0cyBpbiBpc29sYXRpb24pLlxuICAgKi9cbiAgYXNzdW1lUm9sZT86IEFzc3VtZVJvbGU7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYnVpbGRzcGVjIChmb3IgYXJ0aWZhY3RzIGV0Yy4pXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGFkZGl0aW9uYWwgYnVpbGRzcGVjXG4gICAqL1xuICBidWlsZFNwZWM/OiBCdWlsZFNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IG9mIHRoZSBidWlsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIENvZGVCdWlsZCBkZWZhdWx0ICgxIGhvdXIpXG4gICAqL1xuICB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEFsYXJtIHBlcmlvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMzAwIHNlY29uZHMgKDUgbWludXRlcylcbiAgICovXG4gIGFsYXJtUGVyaW9kPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgYWxhcm1UaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFsYXJtIGV2YWx1YXRpb24gcGVyaW9kcy5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgYWxhcm1FdmFsdWF0aW9uUGVyaW9kcz86IG51bWJlcjtcblxuICBzZWNvbmRhcnlBcnRpZmFjdE5hbWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENsYXJpZnkgd2hldGhlciB0aGlzIFNoZWxsYWJsZSBwcm9kdWNlcyBhbnkgYXJ0aWZhY3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y2VzQXJ0aWZhY3RzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZXNwYWNlIHRvIHVzZSB3aGVuIGFkZGluZyBhcyBhbiBhY3Rpb24gdG8gdGhlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uTmFtZXNwYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgZnJvbSB0aGUgcGlwZWxpbmUgYWN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVFbnZpcm9ubWVudFZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSByb2xlIHRvIGFzc3VtZSB3aGlsZSBydW5uaW5nIHRoZSBidWlsZFxuICAgKlxuICAgKiBAZGVmYXVsdCBBIHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlUm9sZT86IElSb2xlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdXNlZCB0byBjcmVhdGUgYSBTaGVsbGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaGVsbGFibGVQcm9wcyBleHRlbmRzIFNoZWxsYWJsZU9wdGlvbnMge1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdpdGggdGhlIHNjcmlwdHMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHdob2xlIGRpcmVjdG9yeSB3aWxsIGJlIHVwbG9hZGVkLiBVc2UgYGV4Y2x1ZGVGaWxlUGF0dGVybnNgIHRvIGlnbm9yZSBmaWxlcy5cbiAgICovXG4gIHNjcmlwdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlIHBhdGhzIG1hdGNoaW5nIHRoZSBnbG9iIHBhdHRlcm5zIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2NyaXB0IGRpci5cbiAgICovXG4gIGV4Y2x1ZGVGaWxlUGF0dGVybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRmlsZW5hbWUgb2YgdGhlIGluaXRpYWwgc2NyaXB0IHRvIHN0YXJ0LCByZWxhdGl2ZSB0byBzY3JpcHREaXJlY3RvcnkuXG4gICAqL1xuICBlbnRyeXBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGVudHJ5cG9pbnQgc2NyaXB0LlxuICAgKlxuICAgKiAoTk9URTogbm90IG5hbWVkICdhcmd1bWVudHMnIGJlY2F1c2UgdGhhdCdzIGEgcmVzZXJ2ZWQgaWRlbnRpZmllciBpbiBKYXZhU2NyaXB0KVxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBhcmd1bWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3N1bWVSb2xlIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcm9sZSB0byBhc3N1bWUuXG4gICAqL1xuICByb2xlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBhc3N1bWVkIHJvbGUgc2Vzc2lvbi5cbiAgICpcbiAgICogVXNlICB0aGUgIHJvbGUgIHNlc3Npb24gbmFtZSB0byB1bmlxdWVseSBpZGVudGlmeSBhIHNlc3Npb24gd2hlbiB0aGUgc2FtZVxuICAgKiByb2xlIGlzIGFzc3VtZWQgYnkgZGlmZmVyZW50IHByaW5jaXBhbHMgb3IgZm9yIGRpZmZlcmVudCByZWFzb25zLiBJblxuICAgKiBjcm9zcy1hY2NvdW50IHNjZW5hcmlvcywgdGhlIHJvbGUgc2Vzc2lvbiBuYW1lIGlzIHZpc2libGUgdG8sIGFuZCBjYW4gYmVcbiAgICogbG9nZ2VkIGJ5IHRoZSBhY2NvdW50IHRoYXQgb3ducyB0aGUgcm9sZS4gIFRoZSByb2xlIHNlc3Npb24gbmFtZSBpcyBhbHNvXG4gICAqIHVzZWQgaW4gdGhlIEFSTiBvZiB0aGUgYXNzdW1lZCByb2xlIHByaW5jaXBhbC4gVGhpcyBtZWFucyB0aGF0IHN1YnNlcXVlbnRcbiAgICogY3Jvc3MtYWNjb3VudCBBUEkgcmVxdWVzdHMgdXNpbmcgdGhlIHRlbS0gcG9yYXJ5IHNlY3VyaXR5IGNyZWRlbnRpYWxzIHdpbGxcbiAgICogZXhwb3NlIHRoZSByb2xlIHNlc3Npb24gbmFtZSB0byB0aGUgZXh0ZXJuYWwgYWNjb3VudCBpbiB0aGVpciBDbG91ZFRyYWlsXG4gICAqIGxvZ3MuXG4gICAqXG4gICAqIFRoZSByZWdleCB1c2VkIHRvIHZhbGlkYXRlIHRoaXMgcGFyYW1ldGVyIGlzIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnNcbiAgICogY29uc2lzdGluZyAgb2YgdXBwZXItIGFuZCBsb3dlci1jYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHdpdGggbm9cbiAgICogc3BhY2VzLiBZb3UgY2FuIGFsc28gaW5jbHVkZSB1bmRlcnNjb3JlcyBvciBhbnkgb2YgdGhlIGZvbGxvd2luZ1xuICAgKiBjaGFyYWN0ZXJzOiA9LC5ALVxuICAgKi9cbiAgc2Vzc2lvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSAgdW5pcXVlICBpZGVudGlmaWVyICB0aGF0ICBpcyAgdXNlZCBieSB0aGlyZCBwYXJ0aWVzIHdoZW4gYXNzdW1pbmcgcm9sZXNcbiAgICogaW4gdGhlaXIgY3VzdG9tZXJzJyBhY2NvdW50cy4gRm9yIGVhY2ggIHJvbGUgIHRoYXQgIHRoZSAgdGhpcmQgcGFydHkgY2FuXG4gICAqIGFzc3VtZSwgdGhleSBzaG91bGQgaW5zdHJ1Y3QgdGhlaXIgY3VzdG9tZXJzIHRvIGVuc3VyZSB0aGUgcm9sZSdzIHRydXN0XG4gICAqIHBvbGljeSBjaGVja3MgZm9yIHRoZSBleHRlcm5hbCBJRCB0aGF0IHRoZSB0aGlyZCAgcGFydHkgZ2VuZXJhdGVkLiAgRWFjaFxuICAgKiB0aW1lIHRoZSB0aGlyZCBwYXJ0eSBhc3N1bWVzIHRoZSByb2xlLCB0aGV5IHNob3VsZCBwYXNzIHRoZSBjdXN0b21lcidzXG4gICAqIGV4dGVybmFsIElELiBUaGUgZXh0ZXJuYWwgSUQgaXMgdXNlZnVsIGluICBvcmRlciB0byAgaGVscCAgdGhpcmQgIHBhcnRpZXNcbiAgICogYmluZCBhIHJvbGUgdG8gdGhlIGN1c3RvbWVyIHdobyBjcmVhdGVkIGl0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbiAgICogZXh0ZXJuYWwgSUQsIHNlZSBIb3cgdG8gVXNlIGFuIEV4dGVyLSBuYWwgIElEICBXaGVuIEdyYW50aW5nIEFjY2VzcyB0byBZb3VyXG4gICAqIEFXUyBSZXNvdXJjZXMgdG8gYSBUaGlyZCBQYXJ0eSBpbiB0aGUgSUFNIFVzZXIgR3VpZGUgLlxuICAgKlxuICAgKiBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgY29uc2lzdGluZyAgb2YgdXBwZXItIGFuZFxuICAgKiBsb3dlci1jYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHdpdGggbm8gc3BhY2VzLiBZb3UgY2FuIGFsc28gaW5jbHVkZVxuICAgKiB1bmRlcnNjb3JlcyBvciAgYW55ICBvZiAgdGhlICBmb2xsb3dpbmcgY2hhcmFjdGVyczogPSwuQDovLVxuICAgKi9cbiAgZXh0ZXJuYWxJZD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBhIHByb2ZpZSBuYW1lIGlzIGNvbmZpZ3VyZWQsIGFuIGFzc3VtZWQgcm9sZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgY3JlYXRlZFxuICAgKiBpbiB0aGUgc2hhcmVkIGF3cyBjb25maWd1cmF0aW9uIGZpbGUgKH4vLmF3cy9jb25maWcpLiBUaGlzIGlzIGluIGNvbnRyYXJ5IG9mIHNpbXBseSBpbnZva2luZ1xuICAgKiBhbiBgc3RzIGFzc3VtZS1yb2xlYCBjb21tYW5kIHRoYXQgY3JlYXRlcyBhIHNlc3Npb24gd2l0aCBhIGZpeGVkIGV4cGlyeSBkYXRlLlxuICAgKlxuICAgKiBVc2luZyBhIHByb2ZpbGUgd2lsbCBkZWxlZ2F0ZSBjcmVkZW50aWFsIHJlZnJlc2hpbmcgdG8gdGhlIFNESy9DTEkuXG4gICAqIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgbG9uZyBydW5uaW5nIHNlc3Npb25zIHRoYXQgbmVlZHMgc2Vzc2lvbnMgdGhhdCBhcmUgbG9uZ2VyIHRoYW5cbiAgICogdGhlIHNlc3Npb24gZHVyYXRpb24gdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgYHN0cyBhc3N1bWUtcm9sZWAuXG4gICAqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgYWNjZXNzIHRvIHRoaXMgcHJvZmlsZSBpbiB0aGUgYEFXU19QUk9GSUxFYCBlbnYgdmFyaWFibGUuXG4gICAqXG4gICAqIE9ubHkgcmVsZXZhbnQgaWYgYHJlZnJlc2hgIGlzIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC91c2VyZ3VpZGUvY2xpLWNvbmZpZ3VyZS1maWxlcy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0ICdsb25nLXJ1bm5pbmctcHJvZmlsZSdcbiAgICovXG4gIHByb2ZpbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoaXMgaWYgeW91IGhhdmUgYSBsb25nIHJ1bm5pbmcgZXhlY3V0aW9uIHRoYXQgbmVlZHMgbG9uZyBydW5uaW5nIHNlc3Npb25zLlxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgcHJvZmlsZSBhbmQgdXNlIGl0IHRvIGRlbGVnYXRlIGNyZWRlbnRpYWwgcmVmcmVzaGluZyB0byB0aGUgU0RLL0NMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVmcmVzaD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBBIENvZGVCdWlsZCBwcm9qZWN0IHRoYXQgcnVucyBhcmJpdHJhcnkgc2NyaXB0cy5cbiAqXG4gKiBUaGUgc2NyaXB0cyB0byBiZSBydW4gYXJlIHNwZWNpZmllZCBieSBzdXBwbHlpbmcgYSBkaXJlY3RvcnkuXG4gKiBBbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgdXBsb2FkZWQsIHRoZW4gdGhlIHNjcmlwdCBkZXNpZ25hdGVkXG4gKiBhcyB0aGUgZW50cnkgcG9pbnQgaXMgc3RhcnRlZC5cbiAqXG4gKiBUaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIGluIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJ1aWxkIHByb2plY3Qnc1xuICogaW5wdXQgaXMgc3RvcmVkLiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBzY3JpcHQgZmlsZXMgYXJlIHN0b3JlZFxuICogaXMgaW4gdGhlICRTQ1JJUFRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICpcbiAqIFN1cHBvcnRzIGJvdGggV2luZG93cyBhbmQgTGludXggY29tcHV0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGVsbGFibGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogY2J1aWxkLlByb2plY3Q7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIENsb3VkV2F0Y2ggYWxhcm0gdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCBpZiB0aGlzIGFjdGlvbiBmYWlscy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhbGFybTogY2xvdWR3YXRjaC5BbGFybTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtOiBTaGVsbFBsYXRmb3JtO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkU3BlYzogQnVpbGRTcGVjO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0QXJ0aWZhY3ROYW1lPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTaGVsbGFibGVQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgaWQpO1xuXG4gICAgdGhpcy5wbGF0Zm9ybSA9IHByb3BzLnBsYXRmb3JtIHx8IFNoZWxsUGxhdGZvcm0uTGludXhVYnVudHU7XG5cbiAgICBjb25zdCBlbnRyeXBvaW50ID0gcGF0aC5qb2luKHByb3BzLnNjcmlwdERpcmVjdG9yeSwgcHJvcHMuZW50cnlwb2ludCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5cG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRlc3QgZW50cnlwb2ludDogJHtlbnRyeXBvaW50fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0ID0gbmV3IGFzc2V0cy5Bc3NldCh0aGlzLCAnU2NyaXB0RGlyZWN0b3J5Jywge1xuICAgICAgcGF0aDogcHJvcHMuc2NyaXB0RGlyZWN0b3J5LFxuICAgICAgZXhjbHVkZTogcHJvcHMuZXhjbHVkZUZpbGVQYXR0ZXJucyxcbiAgICAgIGlnbm9yZU1vZGU6IElnbm9yZU1vZGUuR0xPQixcbiAgICB9KTtcblxuICAgIHRoaXMub3V0cHV0QXJ0aWZhY3ROYW1lID0gKHByb3BzLnByb2R1Y2VzQXJ0aWZhY3RzID8/IHRydWUpID8gYEFydGlmYWN0XyR7dGhpcy5ub2RlLmFkZHJ9YCA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5vdXRwdXRBcnRpZmFjdE5hbWUgJiYgdGhpcy5vdXRwdXRBcnRpZmFjdE5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdob29wcywgdG9vIGxvbmc6ICR7dGhpcy5vdXRwdXRBcnRpZmFjdE5hbWV9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5idWlsZFNwZWMgPSBCdWlsZFNwZWMuc2ltcGxlKHtcbiAgICAgIGluc3RhbGw6IHRoaXMucGxhdGZvcm0uaW5zdGFsbENvbW1hbmRzKCksXG4gICAgICBwcmVCdWlsZDogdGhpcy5wbGF0Zm9ybS5wcmVidWlsZENvbW1hbmRzKHByb3BzLmFzc3VtZVJvbGUsIHByb3BzLnVzZVJlZ2lvbmFsU3RzRW5kcG9pbnRzKSxcbiAgICAgIGJ1aWxkOiB0aGlzLnBsYXRmb3JtLmJ1aWxkQ29tbWFuZHMocHJvcHMuZW50cnlwb2ludCwgcHJvcHMuYXJncyksXG4gICAgfSkubWVyZ2UocHJvcHMuYnVpbGRTcGVjIHx8IEJ1aWxkU3BlYy5lbXB0eSgpKTtcblxuICAgIGNvbnN0IGVudmlyb25tZW50U2VjcmV0c0FzU2VjcmV0TmFtZXMgPSB0aGlzLmNvbnZlcnRFbnZpcm9ubWVudFNlY3JldEFybnNUb1NlY3JldE5hbWVzKHByb3BzLmVudmlyb25tZW50U2VjcmV0cyk7XG5cbiAgICB0aGlzLnByb2plY3QgPSBuZXcgY2J1aWxkLlByb2plY3QodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgcHJvamVjdE5hbWU6IHByb3BzLmJ1aWxkUHJvamVjdE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBzb3VyY2U6IHByb3BzLnNvdXJjZSxcbiAgICAgIHJvbGU6IHByb3BzLnNlcnZpY2VSb2xlLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogdGhpcy5wbGF0Zm9ybS5idWlsZEltYWdlLFxuICAgICAgICBjb21wdXRlVHlwZTogcHJvcHMuY29tcHV0ZVR5cGUgfHwgY2J1aWxkLkNvbXB1dGVUeXBlLk1FRElVTSxcbiAgICAgICAgcHJpdmlsZWdlZDogcHJvcHMucHJpdmlsZWdlZCxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICBbUzNfQlVDS0VUX0VOVl06IHsgdmFsdWU6IGFzc2V0LnMzQnVja2V0TmFtZSB9LFxuICAgICAgICBbUzNfS0VZX0VOVl06IHsgdmFsdWU6IGFzc2V0LnMzT2JqZWN0S2V5IH0sXG4gICAgICAgIC4uLnJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50KSxcbiAgICAgICAgLi4ucmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52aXJvbm1lbnRTZWNyZXRzQXNTZWNyZXROYW1lcywgY2J1aWxkLkJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUuU0VDUkVUU19NQU5BR0VSKSxcbiAgICAgICAgLi4ucmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMocHJvcHMuZW52aXJvbm1lbnRQYXJhbWV0ZXJzLCBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5QQVJBTUVURVJfU1RPUkUpLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQsXG4gICAgICBidWlsZFNwZWM6IGNidWlsZC5CdWlsZFNwZWMuZnJvbU9iamVjdCh0aGlzLmJ1aWxkU3BlYy5yZW5kZXIoeyBwcmltYXJ5QXJ0aWZhY3ROYW1lOiB0aGlzLm91dHB1dEFydGlmYWN0TmFtZSB9KSksXG4gICAgICBzc21TZXNzaW9uUGVybWlzc2lvbnM6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvbGUgPSB0aGlzLnByb2plY3Qucm9sZSE7IC8vIG5vdCB1bmRlZmluZWQsIGFzIGl0J3MgYSBuZXcgUHJvamVjdFxuICAgIHRoaXMucm9sZS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUmVhZE9ubHknKSk7XG4gICAgYXNzZXQuZ3JhbnRSZWFkKHRoaXMucm9sZSk7XG5cbiAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byBzZWNyZXRzXG4gICAgT2JqZWN0LmVudHJpZXMocHJvcHMuZW52aXJvbm1lbnRTZWNyZXRzID8/IHt9KS5mb3JFYWNoKChbbmFtZSwgc2VjcmV0QXJuXSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gYXdzX3NlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0Q29tcGxldGVBcm4odGhpcywgYCR7bmFtZX1TZWNyZXRgLCBzZWNyZXRBcm4pO1xuICAgICAgc2VjcmV0LmdyYW50UmVhZCh0aGlzLnJvbGUpO1xuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgcmVhZCBhY2Nlc3MgdG8gcGFyYW1ldGVyc1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzLmVudmlyb25tZW50UGFyYW1ldGVycyA/PyB7fSkuZm9yRWFjaCgoW25hbWUsIHBhcmFtZXRlck5hbWVdKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBhd3Nfc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZSh0aGlzLCBgJHtuYW1lfVBhcmFtZXRlcmAsIHBhcmFtZXRlck5hbWUpO1xuICAgICAgcGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJvbGUpO1xuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmFzc3VtZVJvbGUpIHtcbiAgICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnc3RzOkFzc3VtZVJvbGUnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuYXNzdW1lUm9sZS5yb2xlQXJuXSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB0aGlzLmFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ0FsYXJtJywge1xuICAgICAgbWV0cmljOiB0aGlzLnByb2plY3QubWV0cmljRmFpbGVkQnVpbGRzKHsgcGVyaW9kOiBwcm9wcy5hbGFybVBlcmlvZCB8fCBEdXJhdGlvbi5zZWNvbmRzKDMwMCkgfSksXG4gICAgICB0aHJlc2hvbGQ6IHByb3BzLmFsYXJtVGhyZXNob2xkIHx8IDEsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogcHJvcHMuYWxhcm1FdmFsdWF0aW9uUGVyaW9kcyB8fCAxLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb1BpcGVsaW5lKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlLCBuYW1lOiBzdHJpbmcsIGlucHV0QXJ0aWZhY3Q6IGNwaXBlbGluZS5BcnRpZmFjdCwgcnVuT3JkZXI/OiBudW1iZXIpOlxuICBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24ge1xuICAgIGNvbnN0IGNvZGVCdWlsZEFjdGlvbiA9IG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogbmFtZSxcbiAgICAgIHByb2plY3Q6IHRoaXMucHJvamVjdCxcbiAgICAgIHJ1bk9yZGVyLFxuICAgICAgaW5wdXQ6IGlucHV0QXJ0aWZhY3QsXG4gICAgICB2YXJpYWJsZXNOYW1lc3BhY2U6IHRoaXMucHJvcHMuYWN0aW9uTmFtZXNwYWNlLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHRoaXMucHJvcHMucGlwZWxpbmVFbnZpcm9ubWVudFZhcnNcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGhpcy5wcm9wcy5waXBlbGluZUVudmlyb25tZW50VmFycylcbiAgICAgICAgICAubWFwKChbaywgdl0pID0+IChbaywgeyB0eXBlOiBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5QTEFJTlRFWFQsIHZhbHVlOiB2IH1dIGFzIGNvbnN0KSkpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRBcnRpZmFjdE5hbWVcbiAgICAgICAgPyBbdGhpcy5vdXRwdXRBcnRpZmFjdE5hbWUsIC4uLnRoaXMuYnVpbGRTcGVjLmFkZGl0aW9uYWxBcnRpZmFjdE5hbWVzID8/IFtdXS5tYXAobiA9PiBuZXcgY3BpcGVsaW5lLkFydGlmYWN0KG4pKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBzdGFnZS5hZGRBY3Rpb24oY29kZUJ1aWxkQWN0aW9uKTtcbiAgICByZXR1cm4gY29kZUJ1aWxkQWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250cmFjdCBvZiBgZW52aXJvbm1lbnRTZWNyZXRzYCBpcyB0aGF0IHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlIFNlY3JldCBBUk5zO1xuICAgKiBob3dldmVyLCB0aGUgQ29kZUJ1aWxkIGNvbnN0cnVjdCBleHBlY3RzIHNlY3JldCBuYW1lcyBhcyB0aGUgaW5wdXRzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBlbnZpcm9ubWVudCBzZWNyZXRzIGZyb20gQVJOcyB0byBuYW1lcy5cbiAgICovXG4gIHByaXZhdGUgY29udmVydEVudmlyb25tZW50U2VjcmV0QXJuc1RvU2VjcmV0TmFtZXMoZW52aXJvbm1lbnRTZWNyZXRzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGlmICghZW52aXJvbm1lbnRTZWNyZXRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG91dDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHsgfTtcbiAgICBPYmplY3QuZW50cmllcyhlbnZpcm9ubWVudFNlY3JldHMgPz8ge30pLmZvckVhY2goKFtuYW1lLCBzZWNyZXRBcm5dKSA9PiB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBhd3Nfc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXRDb21wbGV0ZUFybih0aGlzLCBgJHtuYW1lfVNlY3JldEZyb21Bcm5gLCBzZWNyZXRBcm4pO1xuICAgICAgb3V0W25hbWVdID0gc2VjcmV0LnNlY3JldE5hbWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG4vKipcbiAqIFBsYXRmb3JtIGFyY2hldHlwZVxuICovXG5leHBvcnQgZW51bSBQbGF0Zm9ybVR5cGUge1xuICBMaW51eCA9ICdMaW51eCcsXG4gIFdpbmRvd3MgPSAnV2luZG93cycsXG59XG5cbi8qKlxuICogVGhlIHBsYXRmb3JtIHR5cGUgdG8gcnVuIHRoZSBzY3JpcHRzIG9uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaGVsbFBsYXRmb3JtIHtcbiAgLyoqXG4gICAqIFJldHVybiBhIGRlZmF1bHQgVWJ1bnR1IExpbnV4IHBsYXRmb3JtXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBMaW51eFVidW50dSgpOiBTaGVsbFBsYXRmb3JtIHtcbiAgICAvLyBDYW5ub3QgYmUgc3RhdGljIG1lbWJlciBiZWNhdXNlIG9mIGluaXRpYWxpemF0aW9uIG9yZGVyXG4gICAgcmV0dXJuIG5ldyBMaW51eFBsYXRmb3JtKGNidWlsZC5MaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfN18wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBkZWZhdWx0IFdpbmRvd3MgcGxhdGZvcm1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IFdpbmRvd3MoKTogU2hlbGxQbGF0Zm9ybSB7XG4gICAgLy8gQ2Fubm90IGJlIHN0YXRpYyBtZW1iZXIgYmVjYXVzZSBvZiBpbml0aWFsaXphdGlvbiBvcmRlclxuICAgIHJldHVybiBuZXcgV2luZG93c1BsYXRmb3JtKGNidWlsZC5XaW5kb3dzQnVpbGRJbWFnZS5XSU5fU0VSVkVSX0NPUkVfMjAxOV9CQVNFKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBidWlsZEltYWdlOiBjYnVpbGQuSUJ1aWxkSW1hZ2UpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRybiBjb21tYW5kcyB0byBwcmVwYXJlIHRoZSBob3N0IGZvciB0aGUgc2hlbGxhYmxlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGluc3RhbGxDb21tYW5kcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmV0dXJuIGNvbW1hbmRzIHRvIGRvd25sb2FkIHRoZSBzY3JpcHQgYnVuZGxlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcHJlYnVpbGRDb21tYW5kcyhhc3N1bWVSb2xlPzogQXNzdW1lUm9sZSwgdXNlUmVnaW9uYWxTdHNFbmRwb2ludHM/OiBib29sZWFuKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJldHVybiBjb21tYW5kcyB0byBzdGFydCB0aGUgZW50cnlwb2ludCBzY3JpcHRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZENvbW1hbmRzKGVudHJ5cG9pbnQ6IHN0cmluZywgYXJncz86IHN0cmluZ1tdKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgcGxhdGZvcm1cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXQgcGxhdGZvcm1UeXBlKCk6IFBsYXRmb3JtVHlwZTtcbn1cblxuLyoqXG4gKiBBIExpbnV4IFBsYXRmb3JtXG4gKi9cbmV4cG9ydCBjbGFzcyBMaW51eFBsYXRmb3JtIGV4dGVuZHMgU2hlbGxQbGF0Zm9ybSB7XG4gIHB1YmxpYyByZWFkb25seSBwbGF0Zm9ybVR5cGUgPSBQbGF0Zm9ybVR5cGUuTGludXg7XG5cbiAgcHVibGljIGluc3RhbGxDb21tYW5kcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdjb21tYW5kIC12IHlhcm4gPiAvZGV2L251bGwgfHwgbnBtIGluc3RhbGwgLS1nbG9iYWwgeWFybicsXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVidWlsZENvbW1hbmRzKGFzc3VtZVJvbGU/OiBBc3N1bWVSb2xlLCB1c2VSZWdpb25hbFN0c0VuZHBvaW50cz86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIC8vIEJldHRlciBlY2hvIHRoZSBsb2NhdGlvbiBoZXJlOyBpZiB0aGlzIGZhaWxzLCB0aGUgZXJyb3IgbWVzc2FnZSBvbmx5IGNvbnRhaW5zXG4gICAgLy8gdGhlIHVuZXhwYW5kZWQgdmFyaWFibGVzIGJ5IGRlZmF1bHQuIEl0IG1pZ2h0IGZhaWwgaWYgeW91J3JlIHJ1bm5pbmcgYW4gb2xkXG4gICAgLy8gZGVmaW5pdGlvbiBvZiB0aGUgQ29kZUJ1aWxkIHByb2plY3QtLXRoZSBwZXJtaXNzaW9ucyB3aWxsIGhhdmUgYmVlbiBjaGFuZ2VkXG4gICAgLy8gdG8gb25seSBhbGxvdyBkb3dubG9hZGluZyB0aGUgdmVyeSBsYXRlc3QgdmVyc2lvbi5cbiAgICBsaW5lcy5wdXNoKGBlY2hvIFwiRG93bmxvYWRpbmcgc2NyaXB0cyBmcm9tIHMzOi8vXFwkeyR7UzNfQlVDS0VUX0VOVn19L1xcJHske1MzX0tFWV9FTlZ9fVwiYCk7XG4gICAgbGluZXMucHVzaChgYXdzIHMzIGNwIHMzOi8vXFwkeyR7UzNfQlVDS0VUX0VOVn19L1xcJHske1MzX0tFWV9FTlZ9fSAvdG1wYCk7XG4gICAgbGluZXMucHVzaCgnbWtkaXIgLXAgL3RtcC9zY3JpcHRkaXInKTtcbiAgICBsaW5lcy5wdXNoKGB1bnppcCAvdG1wLyQoYmFzZW5hbWUgXFwkJHtTM19LRVlfRU5WfSkgLWQgL3RtcC9zY3JpcHRkaXJgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlKSB7XG5cbiAgICAgIGlmIChhc3N1bWVSb2xlLnJlZnJlc2gpIHtcblxuICAgICAgICBjb25zdCBhd3NIb21lID0gJ34vLmF3cyc7XG5cbiAgICAgICAgY29uc3QgcHJvZmlsZU5hbWUgPSBhc3N1bWVSb2xlLnByb2ZpbGVOYW1lID8/ICdsb25nLXJ1bm5pbmctcHJvZmlsZSc7XG5cbiAgICAgICAgbGluZXMucHVzaChgbWtkaXIgLXAgJHthd3NIb21lfWApO1xuICAgICAgICBsaW5lcy5wdXNoKGB0b3VjaCAke2F3c0hvbWV9L2NyZWRlbnRpYWxzYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYGNvbmZpZz0ke2F3c0hvbWV9L2NvbmZpZ2ApO1xuICAgICAgICBsaW5lcy5wdXNoKGBlY2hvIFtwcm9maWxlICR7cHJvZmlsZU5hbWV9XT4+ICRcXHtjb25maWdcXH1gKTtcbiAgICAgICAgbGluZXMucHVzaCgnZWNobyBjcmVkZW50aWFsX3NvdXJjZSA9IEVjc0NvbnRhaW5lciA+PiAkXFx7Y29uZmlnXFx9Jyk7XG4gICAgICAgIGxpbmVzLnB1c2goYGVjaG8gcm9sZV9zZXNzaW9uX25hbWUgPSAke2Fzc3VtZVJvbGUuc2Vzc2lvbk5hbWV9ID4+ICRcXHtjb25maWdcXH1gKTtcbiAgICAgICAgbGluZXMucHVzaChgZWNobyByb2xlX2FybiA9ICR7YXNzdW1lUm9sZS5yb2xlQXJufSA+PiAkY29uZmlnYCk7XG5cbiAgICAgICAgaWYgKGFzc3VtZVJvbGUuZXh0ZXJuYWxJZCkge1xuICAgICAgICAgIGxpbmVzLnB1c2goYGVjaG8gZXh0ZXJuYWxfaWQgPSAke2Fzc3VtZVJvbGUuZXh0ZXJuYWxJZH0gPj4gJGNvbmZpZ2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGV0IHRoZSBhcHBsaWNhdGlvbiBjb2RlIGtub3cgd2hpY2ggcm9sZSBpcyBiZWluZyB1c2VkLlxuICAgICAgICBsaW5lcy5wdXNoKGBleHBvcnQgQVdTX1BST0ZJTEU9JHtwcm9maWxlTmFtZX1gKTtcblxuICAgICAgICAvLyBmb3JjZSB0aGUgQVdTIFNESyBmb3IgSmF2YVNjcmlwdCB0byBhY3R1YWxseSBsb2FkIHRoZSBjb25maWcgZmlsZSAoZG8gYXV0b21hdGljYWxseSBzbyB1c2VycyBkb24ndCBmb3JnZXQpXG4gICAgICAgIGxpbmVzLnB1c2goJ2V4cG9ydCBBV1NfU0RLX0xPQURfQ09ORklHPTEnKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBjb25zdCBleHRlcm5hbElkID0gYXNzdW1lUm9sZS5leHRlcm5hbElkID8gYC0tZXh0ZXJuYWwtaWQgXCIke2Fzc3VtZVJvbGUuZXh0ZXJuYWxJZH1cImAgOiAnJztcbiAgICAgICAgY29uc3QgU3RzRW5kcG9pbnRzID0gdXNlUmVnaW9uYWxTdHNFbmRwb2ludHMgPyAncmVnaW9uYWwnIDogJ2xlZ2FjeSc7XG5cbiAgICAgICAgbGluZXMucHVzaCgnY3JlZHM9JChta3RlbXAgLWQpL2NyZWRzLmpzb24nKTtcbiAgICAgICAgbGluZXMucHVzaChgQVdTX1NUU19SRUdJT05BTF9FTkRQT0lOVFM9JHtTdHNFbmRwb2ludHN9IGF3cyBzdHMgYXNzdW1lLXJvbGUgLS1yb2xlLWFybiBcIiR7YXNzdW1lUm9sZS5yb2xlQXJufVwiIC0tcm9sZS1zZXNzaW9uLW5hbWUgXCIke2Fzc3VtZVJvbGUuc2Vzc2lvbk5hbWV9XCIgJHtleHRlcm5hbElkfSA+ICRjcmVkc2ApO1xuICAgICAgICBsaW5lcy5wdXNoKCdleHBvcnQgQVdTX0FDQ0VTU19LRVlfSUQ9XCIkKGNhdCAke2NyZWRzfSB8IGdyZXAgXCJBY2Nlc3NLZXlJZFwiIHwgY3V0IC1kXFwnXCJcXCcgLWYgNClcIicpO1xuICAgICAgICBsaW5lcy5wdXNoKCdleHBvcnQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPVwiJChjYXQgJHtjcmVkc30gfCBncmVwIFwiU2VjcmV0QWNjZXNzS2V5XCIgfCBjdXQgLWRcXCdcIlxcJyAtZiA0KVwiJyk7XG4gICAgICAgIGxpbmVzLnB1c2goJ2V4cG9ydCBBV1NfU0VTU0lPTl9UT0tFTj1cIiQoY2F0ICR7Y3JlZHN9IHwgZ3JlcCBcIlNlc3Npb25Ub2tlblwiIHwgY3V0IC1kXFwnXCJcXCcgLWYgNClcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIHB1YmxpYyBidWlsZENvbW1hbmRzKGVudHJ5cG9pbnQ6IHN0cmluZywgYXJncz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnZXhwb3J0IFNDUklQVF9ESVI9L3RtcC9zY3JpcHRkaXInLFxuICAgICAgYGVjaG8gXCJSdW5uaW5nICR7ZW50cnlwb2ludH1cImAsXG4gICAgICBgL2Jpbi9iYXNoIC90bXAvc2NyaXB0ZGlyLyR7ZW50cnlwb2ludH0gJHsoYXJncyA/PyBbXSkuam9pbignICcpfWAudHJpbVJpZ2h0KCksXG4gICAgXTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFdpbmRvd3NQbGF0Zm9ybVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd3NQbGF0Zm9ybU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byB1cGdyYWRlIE5vZGUuanMgdXNpbmcgQ2hvY29sYXRleSBkdXJpbmcgdGhlIGluc3RhbGwgcGhhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGVOb2RlV2l0aENob2NvbGF0ZXk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgV2luZG93cyBQbGF0Zm9ybVxuICovXG5leHBvcnQgY2xhc3MgV2luZG93c1BsYXRmb3JtIGV4dGVuZHMgU2hlbGxQbGF0Zm9ybSB7XG4gIHB1YmxpYyByZWFkb25seSBwbGF0Zm9ybVR5cGUgPSBQbGF0Zm9ybVR5cGUuV2luZG93cztcbiAgcHJpdmF0ZSByZWFkb25seSB1cGdyYWRlTm9kZVdpdGhDaG9jb2xhdGV5OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGJ1aWxkSW1hZ2U6IGNidWlsZC5JQnVpbGRJbWFnZSwgb3B0aW9uczogV2luZG93c1BsYXRmb3JtT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoYnVpbGRJbWFnZSk7XG4gICAgdGhpcy51cGdyYWRlTm9kZVdpdGhDaG9jb2xhdGV5ID0gb3B0aW9ucy51cGdyYWRlTm9kZVdpdGhDaG9jb2xhdGV5ID8/IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaW5zdGFsbENvbW1hbmRzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMudXBncmFkZU5vZGVXaXRoQ2hvY29sYXRleSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgLy8gVXBkYXRlIHRoZSBpbWFnZSdzIG5vZGVqcyB0byB0aGUgbGF0ZXN0IExUUyByZWxlYXNlLlxuICAgICAgJ0ltcG9ydC1Nb2R1bGUgXCJDOlxcXFxQcm9ncmFtRGF0YVxcXFxjaG9jb2xhdGV5XFxcXGhlbHBlcnNcXFxcY2hvY29sYXRleVByb2ZpbGUucHNtMVwiJyxcbiAgICAgICdDOlxcXFxQcm9ncmFtRGF0YVxcXFxjaG9jb2xhdGV5XFxcXGJpblxcXFxjaG9jby5leGUgdXBncmFkZSBub2RlanMtbHRzIC15JyxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIHByZWJ1aWxkQ29tbWFuZHMoYXNzdW1lUm9sZT86IEFzc3VtZVJvbGUsIHVzZVJlZ2lvbmFsU3RzRW5kcG9pbnRzPzogYm9vbGVhbik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsaW5lcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAvLyBEb3dubG9hZCBhbmQgdW5wYWNrIHRoZSBzY3JpcHQgYnVuZGxlIGJlZm9yZSBhbnkgYXNzdW1lLXJvbGUgc3RlcCBiZWxvdy5cbiAgICBsaW5lcy5wdXNoKGBlY2hvIFwiRG93bmxvYWRpbmcgc2NyaXB0cyBmcm9tIHMzOi8vJGVudjoke1MzX0JVQ0tFVF9FTlZ9LyRlbnY6JHtTM19LRVlfRU5WfVwiYCk7XG4gICAgbGluZXMucHVzaChgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtRm9yY2UgLVBhdGggJHtXSU5ET1dTX0JBU0VfRElSfSB8IE91dC1OdWxsYCk7XG4gICAgbGluZXMucHVzaChgYXdzIHMzIGNwIHMzOi8vJGVudjoke1MzX0JVQ0tFVF9FTlZ9LyRlbnY6JHtTM19LRVlfRU5WfSAke1dJTkRPV1NfQkFTRV9ESVJ9XFxcXHNjcmlwdHMuemlwYCk7XG4gICAgbGluZXMucHVzaChgRXhwYW5kLUFyY2hpdmUgLVBhdGggJHtXSU5ET1dTX0JBU0VfRElSfVxcXFxzY3JpcHRzLnppcCAtRGVzdGluYXRpb25QYXRoICR7V0lORE9XU19TQ1JJUFRfRElSfSAtRm9yY2VgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlKSB7XG5cbiAgICAgIGlmIChhc3N1bWVSb2xlLnJlZnJlc2gpIHtcblxuICAgICAgICAvLyBDb25maWd1cmUgYSBuYW1lZCBwcm9maWxlIGluIHRoZSBzaGFyZWQgY29uZmlnIGZpbGUgYW5kIGRlbGVnYXRlIGNyZWRlbnRpYWxcbiAgICAgICAgLy8gcmVmcmVzaGluZyB0byB0aGUgU0RLL0NMSS4gVGhpcyBtaXJyb3JzIHRoZSBMaW51eCBgY3JlZGVudGlhbF9zb3VyY2VgIGFwcHJvYWNoXG4gICAgICAgIC8vIGFuZCBzdXBwb3J0cyBzZXNzaW9ucyBsb25nZXIgdGhhbiBhIHNpbmdsZSBgc3RzIGFzc3VtZS1yb2xlYCBjYWxsLlxuICAgICAgICBjb25zdCBhd3NIb21lID0gJyRlbnY6VVNFUlBST0ZJTEVcXFxcLmF3cyc7XG4gICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBgJHthd3NIb21lfVxcXFxjb25maWdgO1xuICAgICAgICBjb25zdCBwcm9maWxlTmFtZSA9IGFzc3VtZVJvbGUucHJvZmlsZU5hbWUgPz8gJ2xvbmctcnVubmluZy1wcm9maWxlJztcblxuICAgICAgICBsaW5lcy5wdXNoKGBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Gb3JjZSAtUGF0aCAke2F3c0hvbWV9IHwgT3V0LU51bGxgKTtcbiAgICAgICAgbGluZXMucHVzaChgaWYgKC1ub3QgKFRlc3QtUGF0aCAke2F3c0hvbWV9XFxcXGNyZWRlbnRpYWxzKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRmlsZSAtUGF0aCAke2F3c0hvbWV9XFxcXGNyZWRlbnRpYWxzIHwgT3V0LU51bGwgfWApO1xuICAgICAgICBsaW5lcy5wdXNoKGBBZGQtQ29udGVudCAtUGF0aCAke2NvbmZpZ1BhdGh9IC1WYWx1ZSBcIltwcm9maWxlICR7cHJvZmlsZU5hbWV9XVwiYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYEFkZC1Db250ZW50IC1QYXRoICR7Y29uZmlnUGF0aH0gLVZhbHVlIFwiY3JlZGVudGlhbF9zb3VyY2UgPSBFY3NDb250YWluZXJcImApO1xuICAgICAgICBsaW5lcy5wdXNoKGBBZGQtQ29udGVudCAtUGF0aCAke2NvbmZpZ1BhdGh9IC1WYWx1ZSBcInJvbGVfc2Vzc2lvbl9uYW1lID0gJHthc3N1bWVSb2xlLnNlc3Npb25OYW1lfVwiYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYEFkZC1Db250ZW50IC1QYXRoICR7Y29uZmlnUGF0aH0gLVZhbHVlIFwicm9sZV9hcm4gPSAke2Fzc3VtZVJvbGUucm9sZUFybn1cImApO1xuXG4gICAgICAgIGlmIChhc3N1bWVSb2xlLmV4dGVybmFsSWQpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGBBZGQtQ29udGVudCAtUGF0aCAke2NvbmZpZ1BhdGh9IC1WYWx1ZSBcImV4dGVybmFsX2lkID0gJHthc3N1bWVSb2xlLmV4dGVybmFsSWR9XCJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxldCB0aGUgYXBwbGljYXRpb24gY29kZSBrbm93IHdoaWNoIHJvbGUgaXMgYmVpbmcgdXNlZC5cbiAgICAgICAgbGluZXMucHVzaChgJGVudjpBV1NfUFJPRklMRSA9IFwiJHtwcm9maWxlTmFtZX1cImApO1xuXG4gICAgICAgIC8vIGZvcmNlIHRoZSBBV1MgU0RLIGZvciBKYXZhU2NyaXB0IHRvIGFjdHVhbGx5IGxvYWQgdGhlIGNvbmZpZyBmaWxlIChkbyBhdXRvbWF0aWNhbGx5IHNvIHVzZXJzIGRvbid0IGZvcmdldClcbiAgICAgICAgbGluZXMucHVzaCgnJGVudjpBV1NfU0RLX0xPQURfQ09ORklHID0gXCIxXCInKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBjb25zdCBleHRlcm5hbElkID0gYXNzdW1lUm9sZS5leHRlcm5hbElkID8gYCAtLWV4dGVybmFsLWlkIFwiJHthc3N1bWVSb2xlLmV4dGVybmFsSWR9XCJgIDogJyc7XG4gICAgICAgIGNvbnN0IHN0c0VuZHBvaW50cyA9IHVzZVJlZ2lvbmFsU3RzRW5kcG9pbnRzID8gJ3JlZ2lvbmFsJyA6ICdsZWdhY3knO1xuXG4gICAgICAgIC8vIFBvd2VyU2hlbGwgaGFzIG5hdGl2ZSBKU09OIHBhcnNpbmcsIHNvIHdlIGNhbiBhc3N1bWUgdGhlIHJvbGUgYW5kIHJlYWQgdGhlXG4gICAgICAgIC8vIGNyZWRlbnRpYWxzIG9mZiB0aGUgcGFyc2VkIG9iamVjdCByYXRoZXIgdGhhbiBncmVwcGluZyBhIHRlbXAgZmlsZS5cbiAgICAgICAgbGluZXMucHVzaChgJGVudjpBV1NfU1RTX1JFR0lPTkFMX0VORFBPSU5UUyA9IFwiJHtzdHNFbmRwb2ludHN9XCJgKTtcbiAgICAgICAgbGluZXMucHVzaChgJGFzc3VtZWRSb2xlID0gYXdzIHN0cyBhc3N1bWUtcm9sZSAtLXJvbGUtYXJuIFwiJHthc3N1bWVSb2xlLnJvbGVBcm59XCIgLS1yb2xlLXNlc3Npb24tbmFtZSBcIiR7YXNzdW1lUm9sZS5zZXNzaW9uTmFtZX1cIiR7ZXh0ZXJuYWxJZH0gfCBDb252ZXJ0RnJvbS1Kc29uYCk7XG4gICAgICAgIGxpbmVzLnB1c2goJyRlbnY6QVdTX0FDQ0VTU19LRVlfSUQgPSAkYXNzdW1lZFJvbGUuQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQnKTtcbiAgICAgICAgbGluZXMucHVzaCgnJGVudjpBV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAkYXNzdW1lZFJvbGUuQ3JlZGVudGlhbHMuU2VjcmV0QWNjZXNzS2V5Jyk7XG4gICAgICAgIGxpbmVzLnB1c2goJyRlbnY6QVdTX1NFU1NJT05fVE9LRU4gPSAkYXNzdW1lZFJvbGUuQ3JlZGVudGlhbHMuU2Vzc2lvblRva2VuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkQ29tbWFuZHMoZW50cnlwb2ludDogc3RyaW5nLCBhcmdzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAkZW52OlNDUklQVF9ESVIgPSBcIiR7V0lORE9XU19TQ1JJUFRfRElSfVwiYCxcbiAgICAgIGBlY2hvIFwiUnVubmluZyAke2VudHJ5cG9pbnR9XCJgLFxuICAgICAgYCYgJHtXSU5ET1dTX1NDUklQVF9ESVJ9XFxcXCR7ZW50cnlwb2ludH0gJHsoYXJncyA/PyBbXSkuam9pbignICcpfWAudHJpbVJpZ2h0KCksXG4gICAgXTtcbiAgfVxufVxuIl19
|