@cdklabs/multi-az-observability 0.0.1-alpha.41 → 0.0.1-alpha.43

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.
Files changed (37) hide show
  1. package/.jsii +155 -37
  2. package/API.md +120 -17
  3. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +2 -1
  4. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +4 -3
  5. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +3 -2
  6. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +3 -2
  7. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +10 -0
  8. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +1 -1
  9. package/lib/azmapper/AvailabilityZoneMapper.js +1 -1
  10. package/lib/basic_observability/BasicServiceMultiAZObservability.js +1 -1
  11. package/lib/canaries/src/canary.zip +0 -0
  12. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +85 -13
  13. package/lib/index.d.ts +1 -0
  14. package/lib/index.js +4 -2
  15. package/lib/monitoring/src/monitoring-layer.zip +0 -0
  16. package/lib/outlier-detection/LatencyOutlierMetricAggregation.d.ts +22 -0
  17. package/lib/outlier-detection/LatencyOutlierMetricAggregation.js +27 -0
  18. package/lib/outlier-detection/src/outlier-detection.zip +0 -0
  19. package/lib/outlier-detection/src/scipy-layer.zip +0 -0
  20. package/lib/services/CanaryMetrics.js +1 -1
  21. package/lib/services/CanaryTestAvailabilityMetricsOverride.js +1 -1
  22. package/lib/services/CanaryTestLatencyMetricsOverride.js +1 -1
  23. package/lib/services/CanaryTestMetricsOverride.js +1 -1
  24. package/lib/services/ContributorInsightRuleDetails.js +1 -1
  25. package/lib/services/InstrumentedServiceMultiAZObservability.js +63 -29
  26. package/lib/services/Operation.js +1 -1
  27. package/lib/services/OperationAvailabilityMetricDetails.js +1 -1
  28. package/lib/services/OperationLatencyMetricDetails.js +1 -1
  29. package/lib/services/OperationMetricDetails.js +1 -1
  30. package/lib/services/Service.js +1 -1
  31. package/lib/services/ServiceAvailabilityMetricDetails.js +1 -1
  32. package/lib/services/ServiceLatencyMetricDetails.js +1 -1
  33. package/lib/services/ServiceMetricDetails.js +1 -1
  34. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +49 -4
  35. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +1 -1
  36. package/lib/services/props/MetricDimensions.js +1 -1
  37. package/package.json +8 -8
@@ -343,7 +343,7 @@ class AvailabilityAndLatencyAlarmsAndRules {
343
343
  datapointsToAlarm: datapointsToAlarm,
344
344
  });
345
345
  }
346
- static createZonalHighLatencyOutlierAlarm(scope, metricDetails, availabilityZoneId, allAvailabilityZoneIds, outlierThreshold, outlierDetectionFunction, outlierDetectionAlgorithm, counter, nameSuffix) {
346
+ static createZonalHighLatencyOutlierAlarm(scope, metricDetails, availabilityZoneId, allAvailabilityZoneIds, outlierThreshold, outlierDetectionFunction, outlierMetric, outlierDetectionAlgorithm, counter, nameSuffix) {
347
347
  let metricDimensions = {};
348
348
  allAvailabilityZoneIds.forEach((azId) => {
349
349
  metricDimensions[azId] = [
@@ -359,6 +359,8 @@ class AvailabilityAndLatencyAlarmsAndRules {
359
359
  .replace(/[\n]/g, '\\n')
360
360
  .replace(/[\r]/g, '\\r')
361
361
  .replace(/[\t]/g, '\\t');
362
+ // TODO: Incorporate this into the Lambda function logic
363
+ outlierMetric;
362
364
  let outlierMetrics = new aws_cloudwatch_1.MathExpression({
363
365
  expression: `MAX(LAMBDA("${outlierDetectionFunction.functionName}",` +
364
366
  `"${outlierDetectionAlgorithm.toString()}",` +
@@ -367,7 +369,6 @@ class AvailabilityAndLatencyAlarmsAndRules {
367
369
  `"${str}",` +
368
370
  `"${metricDetails.metricNamespace}",` +
369
371
  `"${metricDetails.successMetricNames.join(':')}",` +
370
- // TODO: Convert to metric math IF() statement
371
372
  `"TC(${MetricsHelper_1.MetricsHelper.convertDurationByUnit(metricDetails.successAlarmThreshold, metricDetails.unit)}:)"` +
372
373
  '"Milliseconds"' +
373
374
  '))',
@@ -890,4 +891,4 @@ class AvailabilityAndLatencyAlarmsAndRules {
890
891
  }
891
892
  }
892
893
  exports.AvailabilityAndLatencyAlarmsAndRules = AvailabilityAndLatencyAlarmsAndRules;
893
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL0F2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLDZDQUE0QztBQUM1QywrREFVb0M7QUFTcEMsdURBQTZFO0FBRTdFLHdGQUFxRjtBQUNyRiw4RUFBMkU7QUFDM0Usd0VBQXFFO0FBSXJFLGdGQUE2RTtBQUM3RSxzRUFBbUU7QUFFbkUsOERBQTJEO0FBQzNELDRGQUF5RjtBQUl6Rjs7R0FFRztBQUNILE1BQWEsb0NBQW9DO0lBQy9DOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLDRCQUE0QixDQUNqQyxLQUFnQixFQUNoQixhQUFrRCxFQUNsRCxnQkFBd0IsRUFDeEIsa0JBQTBCLEVBQzFCLE9BQWUsRUFDZixVQUFtQjtRQUVuQixPQUFPLElBQUksc0JBQUssQ0FDZCxLQUFLLEVBQ0wsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsT0FBTyxHQUFHLG1CQUFtQixFQUNsRTtZQUNFLFNBQVMsRUFDUCxrQkFBa0I7Z0JBQ2xCLEdBQUc7Z0JBQ0gsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pDLGVBQWU7Z0JBQ2YsVUFBVTtZQUNaLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxpQkFBaUI7WUFDbEQsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGlCQUFpQjtZQUNsRCxrQkFBa0IsRUFBRSxtQ0FBa0IsQ0FBQyxtQkFBbUI7WUFDMUQsU0FBUyxFQUFFLGFBQWEsQ0FBQyxxQkFBcUI7WUFDOUMsY0FBYyxFQUFFLEtBQUs7WUFDckIsZ0JBQWdCLEVBQUUsaUNBQWdCLENBQUMsTUFBTTtZQUN6QyxNQUFNLEVBQUUsNkRBQTZCLENBQUMsNkJBQTZCLENBQUM7Z0JB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QUFFLFdBQVcsQ0FBQyxxQkFBcUI7b0JBQ3hDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQ2xDO2FBQ0Y7U0FDb0MsQ0FBQztRQUV4QyxPQUFPLElBQUksK0JBQWMsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLEVBQUU7WUFDN0QsUUFBUSxFQUNQLGlCQUFHLENBQUMsTUFBTTtnQkFDVCxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLDZCQUE2QjtZQUM1RSxTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4d0NELG9GQXd3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBBd3MsIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgSUFsYXJtLFxuICBBbGFybSxcbiAgSU1ldHJpYyxcbiAgQ29tcG9zaXRlQWxhcm0sXG4gIEFsYXJtUnVsZSxcbiAgTWF0aEV4cHJlc3Npb24sXG4gIENmbkluc2lnaHRSdWxlLFxuICBDb21wYXJpc29uT3BlcmF0b3IsXG4gIFRyZWF0TWlzc2luZ0RhdGFcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgQ2ZuTmF0R2F0ZXdheSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHtcbiAgQmFzZUxvYWRCYWxhbmNlcixcbiAgSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICBJTG9hZEJhbGFuY2VyVjIsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyJztcbmltcG9ydCB7IElGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQ29udHJpYnV0aW9uRGVmaW5pdGlvbiwgSW5zaWdodFJ1bGVCb2R5IH0gZnJvbSAnLi9JbnNpZ2h0UnVsZUJvZHknO1xuaW1wb3J0IHsgSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXIgfSBmcm9tICcuLi9hem1hcHBlci9JQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcic7XG5pbXBvcnQgeyBSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpY3MgfSBmcm9tICcuLi9tZXRyaWNzL1JlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljcyc7XG5pbXBvcnQgeyBSZWdpb25hbExhdGVuY3lNZXRyaWNzIH0gZnJvbSAnLi4vbWV0cmljcy9SZWdpb25hbExhdGVuY3lNZXRyaWNzJztcbmltcG9ydCB7IFpvbmFsTGF0ZW5jeU1ldHJpY3MgfSBmcm9tICcuLi9tZXRyaWNzL1pvbmFsTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzIH0gZnJvbSAnLi4vc2VydmljZXMvSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzJztcbmltcG9ydCB7IElPcGVyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9JT3BlcmF0aW9uJztcbmltcG9ydCB7IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzIH0gZnJvbSAnLi4vc2VydmljZXMvSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMnO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5TWV0cmljVHlwZSB9IGZyb20gJy4uL3V0aWxpdGllcy9BdmFpbGFiaWxpdHlNZXRyaWNUeXBlJztcbmltcG9ydCB7IExhdGVuY3lNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0xhdGVuY3lNZXRyaWNUeXBlJztcbmltcG9ydCB7IE91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0gfSBmcm9tICcuLi91dGlsaXRpZXMvT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSc7XG5pbXBvcnQgeyBNZXRyaWNzSGVscGVyIH0gZnJvbSAnLi4vdXRpbGl0aWVzL01ldHJpY3NIZWxwZXInO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MgfSBmcm9tICcuLi9tZXRyaWNzL0F2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzJztcbmltcG9ydCB7IElPcGVyYXRpb25BdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzIH0gZnJvbSAnLi4vc2VydmljZXMvSU9wZXJhdGlvbkF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMnO1xuaW1wb3J0IHsgSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzIH0gZnJvbSAnLi4vc2VydmljZXMvSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzJztcblxuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBhdmFpbGFiaWxpdHkgYW5kIGxhdGVuY3kgYWxhcm1zIGFuZCBDb250cmlidXRvciBJbnNpZ2h0IHJ1bGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHpvbmFsIGF2YWlsYWJpbGl0eSBhbGFybVxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG1ldHJpY0RldGFpbHNcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVpvbmFsQXZhaWxhYmlsaXR5QWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uQXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICsgJ0FaJyArIGNvdW50ZXIgKyAnQXZhaWxhYmlsaXR5QWxhcm0nLFxuICAgICAge1xuICAgICAgICBhbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnLXN1Y2Nlc3MtcmF0ZScgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgdGhyZXNob2xkOiBtZXRyaWNEZXRhaWxzLnN1Y2Nlc3NBbGFybVRocmVzaG9sZCxcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICAgICAgbWV0cmljOiBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVab25hbEF2YWlsYWJpbGl0eU1ldHJpYyh7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIG1ldHJpY1R5cGU6IEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19SQVRFLFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmVcbiAgICAgICAgfSxcbiAgICAgICAgbWV0cmljRGV0YWlscy5tZXRyaWNEaW1lbnNpb25zLnpvbmFsRGltZW5zaW9ucyhcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgQXdzLlJFR0lPTlxuICAgICAgICApKVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB6b25hbCBsYXRlbmN5IGFsYXJtXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlWm9uYWxMYXRlbmN5QWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSArICdBWicgKyBjb3VudGVyICsgJ0xhdGVuY3lBbGFybScsXG4gICAgICB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICctc3VjY2Vzcy1sYXRlbmN5JyArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICB0aHJlc2hvbGQ6IE1ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuSUdOT1JFLFxuICAgICAgICBtZXRyaWM6IFpvbmFsTGF0ZW5jeU1ldHJpY3MuY3JlYXRlWm9uYWxBdmVyYWdlTGF0ZW5jeU1ldHJpYyh7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgbWV0cmljRGV0YWlscy5hbGFybVN0YXRpc3RpYyArXG4gICAgICAgICAgICAnIGxhdGVuY3knLFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZLFxuICAgICAgICAgIHN0YXRpc3RpYzogbWV0cmljRGV0YWlscy5hbGFybVN0YXRpc3RpYyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSBhbGFybSB3aGVuIGVpdGhlciBsYXRlbmN5IG9yIGF2YWlsYWJpbGl0eSBpcyBicmVhY2hlZCBpbiB0aGUgQXZhaWxhYmlsdGl5IFpvbmVcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBvcGVyYXRpb25cbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcGFyYW0gem9uYWxBdmFpbGFiaWxpdHlBbGFybVxuICAgKiBAcGFyYW0gem9uYWxMYXRlbmN5QWxhcm1cbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbEF2YWlsYWJpbGl0eU9yTGF0ZW5jeUNvbXBvc2l0ZUFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgb3BlcmF0aW9uTmFtZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICB6b25hbEF2YWlsYWJpbGl0eUFsYXJtOiBJQWxhcm0sXG4gICAgem9uYWxMYXRlbmN5QWxhcm06IElBbGFybSxcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQWxhcm0oc2NvcGUsICdBWicgKyBjb3VudGVyICsgJ1pvbmFsSW1wYWN0QWxhcm0nLCB7XG4gICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOlxuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAnIGhhcyBsYXRlbmN5IG9yIGF2YWlsYWJpbGl0eSBpbXBhY3QuIFRoaXMgZG9lcyBub3QgaW5kaWNhdGUgaXQgaXMgYW4gb3V0bGllciBhbmQgc2hvd3MgaXNvbGF0ZWQgaW1wYWN0LicsXG4gICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgIGAtJHtvcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LWltcGFjdC1hZ2dyZWdhdGUtYWxhcm1gICtcbiAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKHpvbmFsQXZhaWxhYmlsaXR5QWxhcm0sIHpvbmFsTGF0ZW5jeUFsYXJtKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBhbGFybSB0aGF0IGNvbXBhcmVzIGVycm9yIHJhdGUgaW4gdGhpcyBBWiB0byB0aGUgb3ZlcmFsbCByZWdpb24gZXJyb3IgYmFzZWQgb25seSBvbiBtZXRyaWMgZGF0YVxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG1ldHJpY0RldGFpbHNcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcGFyYW0gb3V0bGllclRocmVzaG9sZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVpvbmFsRmF1bHRSYXRlU3RhdGljT3V0bGllckFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBvdXRsaWVyVGhyZXNob2xkOiBudW1iZXIsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICBsZXQgem9uYWxGYXVsdHM6IElNZXRyaWMgPVxuICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWMoe1xuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgbWV0cmljRGV0YWlsczogbWV0cmljRGV0YWlscyxcbiAgICAgICAgbWV0cmljVHlwZTogQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVFxuICAgICAgfSxcbiAgICAgIG1ldHJpY0RldGFpbHMubWV0cmljRGltZW5zaW9ucy56b25hbERpbWVuc2lvbnMoXG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgQXdzLlJFR0lPTlxuICAgICAgKSk7XG5cbiAgICAvLyBGb3Igc2VydmVyLXNpZGUsIHRoaXMgbWV0cmljIGlzIG9rLCBiZWNhdXNlIHRoZSBBWiBzcGVjaWZpYyBtZXRyaWNzIGFyZSBkdWFsLXJlcG9ydGVkXG4gICAgLy8gd2l0aCBkaW1lbnNpb25zIGZvciBib3RoIHRoZSBBWiBhbmQgUmVnaW9uLiBCdXQgZm9yIHRoZSBjYW5hcnksIGl0IHByb2R1Y2VzIDEgbWV0cmljXG4gICAgLy8gZm9yIHRlc3RpbmcgdGhlIHJlZ2lvbmFsIGVuZHBvaW50IGFuZCBhIHNlcGFyYXRlIG1ldHJpYyBmb3IgZWFjaCBBWi4gU28gaW4gdGhhdCBjYXNlXG4gICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBkaXZpZGUgYnkgdGhlIHJlZ2lvbmFsIG1ldHJpYywgdXNlIHBlci1BWlxuICAgIGxldCByZWdpb25hbEZhdWx0czogSU1ldHJpYyA9XG4gICAgICBSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpY3MuY3JlYXRlUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWMoe1xuICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICBtZXRyaWNUeXBlOiBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5ULFxuICAgICAgICBrZXlQcmVmaXg6ICdiJyxcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBBbGFybShzY29wZSwgJ0FaJyArIGNvdW50ZXIgKyAnSXNvbGF0ZWRJbXBhY3RBbGFybVN0YXRpYycsIHtcbiAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1zdGF0aWMtbWFqb3JpdHktZXJyb3JzLWltcGFjdGAgK1xuICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgbWV0cmljOiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiAnSUYobTIgPiAwLCAobTEgLyBtMiksIDApJyxcbiAgICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgICAgbTE6IHpvbmFsRmF1bHRzLFxuICAgICAgICAgIG0yOiByZWdpb25hbEZhdWx0cyxcbiAgICAgICAgfSxcbiAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCArICcgcGVyY2VudCBmYXVsdHMnLFxuICAgICAgfSksXG4gICAgICB0aHJlc2hvbGQ6IG91dGxpZXJUaHJlc2hvbGQsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICB9KTtcbiAgfVxuXG4gICAgLyoqXG4gICAqIEFuIGFsYXJtIHRoYXQgY29tcGFyZXMgZXJyb3IgcmF0ZSBpbiB0aGlzIEFaIHRvIHRoZSBvdmVyYWxsIHJlZ2lvbiBlcnJvciBiYXNlZCBvbmx5IG9uIG1ldHJpYyBkYXRhLlxuICAgKiBUaGlzIGlzIGRpZmZlcmVudCBmb3IgY2FuYXJpZXMgYmVjYXVzZSB0aGUgbWV0cmljcyB0aGV5IHRlc3QgYXQgdGhlIHJlZ2lvbmFsIGxldmVsIGFyZSBkaWZmZXJlbnRcbiAgICogcmVxdWVzdHMgdGhhbiB0aGUgb25lcyBzZW50IHRvIHRoZSB6b25hbCBlbmRwb2ludHMuIFNvIHlvdSBoYXZlIHRvIGFkZCBhbGwgb2YgdGhlIHpvbmFsIHJlcXVlc3RzIHRvZ2V0aGVyXG4gICAqIHRvIGNvbXBhcmUgb25lIEFaIHRvIHRoZSBvdGhlcnMgKHlvdSBjYW4ndCBjb21wYXJlIGEgem9uZSB0byB0aGUgcmVnaW9uYWwgbWV0cmljcykuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBvdXRsaWVyVGhyZXNob2xkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlWm9uYWxGYXVsdFJhdGVTdGF0aWNPdXRsaWVyQWxhcm1Gb3JDYW5hcmllcyhcbiAgICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTWV0cmljRGV0YWlscyxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZyxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkczogc3RyaW5nW10sXG4gICAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgICBvdXRsaWVyVGhyZXNob2xkOiBudW1iZXIsXG4gICAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICAgICk6IElBbGFybSB7XG4gICAgICBsZXQgem9uYWxGYXVsdHM6IElNZXRyaWMgPVxuICAgICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVab25hbEF2YWlsYWJpbGl0eU1ldHJpYyh7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIG1ldHJpY1R5cGU6IEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlRcbiAgICAgICAgfSxcbiAgICAgICAgbWV0cmljRGV0YWlscy5tZXRyaWNEaW1lbnNpb25zLnpvbmFsRGltZW5zaW9ucyhcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgQXdzLlJFR0lPTlxuICAgICAgICApKTtcblxuICAgICAgbGV0IHByZWZpeCA9ICdiJztcblxuICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG5cbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZHMuZm9yRWFjaCgoYXo6IHN0cmluZykgPT4ge1xuICAgICAgICBwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKHByZWZpeCk7XG4gICAgICAgIFxuICAgICAgICBsZXQgYXpGYXVsdHM6IElNZXRyaWMgPSBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVab25hbEF2YWlsYWJpbGl0eU1ldHJpYyh7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBheixcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVFxuICAgICAgICB9LFxuICAgICAgICBtZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMuem9uYWxEaW1lbnNpb25zKFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBBd3MuUkVHSU9OXG4gICAgICAgICkpO1xuXG4gICAgICAgIHByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcblxuICAgICAgICB1c2luZ01ldHJpY3NbYCR7cHJlZml4fTFgXSA9IGF6RmF1bHRzO1xuICAgICAgfSk7XG5cbiAgICAgIHByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcblxuICAgICAgbGV0IHJlZ2lvbmFsRmF1bHRDb3VudDogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbihcIitcIiksXG4gICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kXG4gICAgICB9KTtcbiAgXG4gICAgICByZXR1cm4gbmV3IEFsYXJtKHNjb3BlLCAnQVonICsgY291bnRlciArICdJc29sYXRlZEltcGFjdEFsYXJtU3RhdGljJywge1xuICAgICAgICBhbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXN0YXRpYy1tYWpvcml0eS1lcnJvcnMtaW1wYWN0YCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgbWV0cmljOiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgIGV4cHJlc3Npb246ICdJRihtMiA+IDAsIChtMSAvIG0yKSwgMCknLFxuICAgICAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICAgICAgbTE6IHpvbmFsRmF1bHRzLFxuICAgICAgICAgICAgbTI6IHJlZ2lvbmFsRmF1bHRDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBlcmlvZDogbWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCArICcgcGVyY2VudCBmYXVsdHMnLFxuICAgICAgICB9KSxcbiAgICAgICAgdGhyZXNob2xkOiBvdXRsaWVyVGhyZXNob2xkLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVpvbmFsRmF1bHRSYXRlT3V0bGllckFsYXJtKFxuICAgIHNjb3BlOiBJQ29uc3RydWN0LFxuICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGFsbEF2YWlsYWJpbGl0eVpvbmVJZHM6IHN0cmluZ1tdLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb246IElGdW5jdGlvbixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtOiBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIGxldCBtZXRyaWNEaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1bXSB9ID0ge307XG5cbiAgICBhbGxBdmFpbGFiaWxpdHlab25lSWRzLmZvckVhY2goKGF6SWQ6IHN0cmluZykgPT4ge1xuICAgICAgbWV0cmljRGltZW5zaW9uc1theklkXSA9IFtcbiAgICAgICAgbWV0cmljRGV0YWlscy5tZXRyaWNEaW1lbnNpb25zLnpvbmFsRGltZW5zaW9ucyhcbiAgICAgICAgICBheklkLFxuICAgICAgICAgQXdzLlJFR0lPTixcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBsZXQgc3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShtZXRyaWNEaW1lbnNpb25zKVxuICAgICAgLnJlcGxhY2UoL1tcXFxcXS9nLCAnXFxcXFxcXFwnKVxuICAgICAgLnJlcGxhY2UoL1tcXFwiXS9nLCAnXFxcXFwiJylcbiAgICAgIC5yZXBsYWNlKC9bXFwvXS9nLCAnXFxcXC8nKVxuICAgICAgLnJlcGxhY2UoL1tcXGJdL2csICdcXFxcYicpXG4gICAgICAucmVwbGFjZSgvW1xcZl0vZywgJ1xcXFxmJylcbiAgICAgIC5yZXBsYWNlKC9bXFxuXS9nLCAnXFxcXG4nKVxuICAgICAgLnJlcGxhY2UoL1tcXHJdL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xcdF0vZywgJ1xcXFx0Jyk7XG5cbiAgICBsZXQgb3V0bGllck1ldHJpY3M6IElNZXRyaWMgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgYE1BWChMQU1CREEoXCIke291dGxpZXJEZXRlY3Rpb25GdW5jdGlvbi5mdW5jdGlvbk5hbWV9XCIsYCArXG4gICAgICAgIGBcIiR7b3V0bGllckRldGVjdGlvbkFsZ29yaXRobS50b1N0cmluZygpfVwiLGAgK1xuICAgICAgICBgXCIke291dGxpZXJUaHJlc2hvbGR9XCIsYCArXG4gICAgICAgIGBcIiR7YXZhaWxhYmlsaXR5Wm9uZUlkfVwiLGAgK1xuICAgICAgICBgXCIke3N0cn1cIixgICtcbiAgICAgICAgYFwiJHttZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZX1cIixgICtcbiAgICAgICAgYFwiJHttZXRyaWNEZXRhaWxzLmZhdWx0TWV0cmljTmFtZXMuam9pbignOicpfVwiLGAgK1xuICAgICAgICAnXCJTdW1cIiwnICtcbiAgICAgICAgJ1wiQ291bnRcIicgK1xuICAgICAgICAnKSknLFxuICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgJ0FaJyArIGNvdW50ZXIgKyAnRmF1bHRJc29sYXRlZEltcGFjdEFsYXJtT3V0bGllcicsXG4gICAgICB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tbWFqb3JpdHktZXJyb3JzLWltcGFjdGAgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIG1ldHJpYzogb3V0bGllck1ldHJpY3MsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVab25hbEZhdWx0UmF0ZU91dGxpZXJBbGFybUZvckFsYihcbiAgICBzY29wZTogSUNvbnN0cnVjdCxcbiAgICBsb2FkQmFsYW5jZXJzOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJbXSxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBvdXRsaWVyVGhyZXNob2xkOiBudW1iZXIsXG4gICAgb3V0bGllckRldGVjdGlvbkZ1bmN0aW9uOiBJRnVuY3Rpb24sXG4gICAgb3V0bGllckRldGVjdGlvbkFsZ29yaXRobTogT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSxcbiAgICBhek1hcHBlcjogSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXIsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIGV2YWx1YXRpb25QZXJpb2RzOiBudW1iZXIsXG4gICAgZGF0YXBvaW50c1RvQWxhcm06IG51bWJlcixcbiAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgbGV0IG1ldHJpY0RpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIH0gPSB7fTtcblxuICAgIGxvYWRCYWxhbmNlcnMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgeC52cGM/LmF2YWlsYWJpbGl0eVpvbmVzLmZvckVhY2goKGF6KSA9PiB7XG4gICAgICAgIGxldCBheklkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoXG4gICAgICAgICAgYXouc3Vic3RyaW5nKGF6Lmxlbmd0aCAtIDEpLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIShheklkIGluIG1ldHJpY0RpbWVuc2lvbnMpKSB7XG4gICAgICAgICAgbWV0cmljRGltZW5zaW9uc1theklkXSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbWV0cmljRGltZW5zaW9uc1theklkXS5wdXNoKHtcbiAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBheixcbiAgICAgICAgICBMb2FkQmFsYW5jZXI6ICh4IGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkobWV0cmljRGltZW5zaW9ucylcbiAgICAgIC5yZXBsYWNlKC9bXFxcXF0vZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9bXFxcIl0vZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvW1xcL10vZywgJ1xcXFwvJylcbiAgICAgIC5yZXBsYWNlKC9bXFxiXS9nLCAnXFxcXGInKVxuICAgICAgLnJlcGxhY2UoL1tcXGZdL2csICdcXFxcZicpXG4gICAgICAucmVwbGFjZSgvW1xcbl0vZywgJ1xcXFxuJylcbiAgICAgIC5yZXBsYWNlKC9bXFxyXS9nLCAnXFxcXHInKVxuICAgICAgLnJlcGxhY2UoL1tcXHRdL2csICdcXFxcdCcpO1xuXG4gICAgbGV0IG91dGxpZXJNZXRyaWNzOiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIGV4cHJlc3Npb246XG4gICAgICAgIGBNQVgoTEFNQkRBKFwiJHtvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb24uZnVuY3Rpb25OYW1lfVwiLGAgK1xuICAgICAgICBgXCIke291dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0udG9TdHJpbmcoKX1cIixgICtcbiAgICAgICAgYFwiJHtvdXRsaWVyVGhyZXNob2xkfVwiLGAgK1xuICAgICAgICBgXCIke2F2YWlsYWJpbGl0eVpvbmVJZH1cIixgICtcbiAgICAgICAgYFwiJHtzdHJ9XCIsYCArXG4gICAgICAgICdcIkFXUy9BcHBsaWNhdGlvbkVMQlwiLCcgK1xuICAgICAgICAnXCJIVFRQQ29kZV9FTEJfNVhYX0NvdW50OkhUVFBDb2RlX1RhcmdldF81WFhfQ291bnRcIiwnICtcbiAgICAgICAgJ1wiU3VtXCIsJyArXG4gICAgICAgICdcIkNvdW50XCInICtcbiAgICAgICAgJykpJyxcbiAgICAgIHBlcmlvZDogcGVyaW9kXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFsYXJtKHNjb3BlLCAnQVonICsgY291bnRlciArICdBbGJJc29sYXRlZEltcGFjdEFsYXJtT3V0bGllcicsIHtcbiAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICsgJy1hbGItbWFqb3JpdHktZXJyb3JzLWltcGFjdCcgKyBuYW1lU3VmZml4LFxuICAgICAgbWV0cmljOiBvdXRsaWVyTWV0cmljcyxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICBkYXRhcG9pbnRzVG9BbGFybTogZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlWm9uYWxGYXVsdFJhdGVPdXRsaWVyQWxhcm1Gb3JOYXRHVyhcbiAgICBzY29wZTogSUNvbnN0cnVjdCxcbiAgICBuYXRHYXRld2F5czogeyBba2V5OiBzdHJpbmddOiBDZm5OYXRHYXRld2F5W10gfSxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBvdXRsaWVyVGhyZXNob2xkOiBudW1iZXIsXG4gICAgb3V0bGllckRldGVjdGlvbkZ1bmN0aW9uOiBJRnVuY3Rpb24sXG4gICAgb3V0bGllckRldGVjdGlvbkFsZ29yaXRobTogT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSxcbiAgICBhek1hcHBlcjogSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXIsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIGV2YWx1YXRpb25QZXJpb2RzOiBudW1iZXIsXG4gICAgZGF0YXBvaW50c1RvQWxhcm06IG51bWJlcixcbiAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgbGV0IG1ldHJpY0RpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIH0gPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKG5hdEdhdGV3YXlzKS5mb3JFYWNoKChheikgPT4ge1xuICAgICAgbGV0IGF6SWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihcbiAgICAgICAgYXouc3Vic3RyaW5nKGF6Lmxlbmd0aCAtIDEpLFxuICAgICAgKTtcblxuICAgICAgaWYgKCEoYXpJZCBpbiBtZXRyaWNEaW1lbnNpb25zKSkge1xuICAgICAgICBtZXRyaWNEaW1lbnNpb25zW2F6SWRdID0gW107XG4gICAgICB9XG5cbiAgICAgIG5hdEdhdGV3YXlzW2F6XS5mb3JFYWNoKChuYXRndykgPT4ge1xuICAgICAgICBtZXRyaWNEaW1lbnNpb25zW2F6SWRdLnB1c2goe1xuICAgICAgICAgIE5hdEdhdGV3YXlJZDogbmF0Z3cuYXR0ck5hdEdhdGV3YXlJZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGxldCBzdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KG1ldHJpY0RpbWVuc2lvbnMpXG4gICAgICAucmVwbGFjZSgvW1xcXFxdL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvW1xcXCJdL2csICdcXFxcXCInKVxuICAgICAgLnJlcGxhY2UoL1tcXC9dL2csICdcXFxcLycpXG4gICAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAgIC5yZXBsYWNlKC9bXFxmXS9nLCAnXFxcXGYnKVxuICAgICAgLnJlcGxhY2UoL1tcXG5dL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvW1xccl0vZywgJ1xcXFxyJylcbiAgICAgIC5yZXBsYWNlKC9bXFx0XS9nLCAnXFxcXHQnKTtcblxuICAgIGxldCBvdXRsaWVyTWV0cmljczogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICBleHByZXNzaW9uOlxuICAgICAgICBgTUFYKExBTUJEQShcIiR7b3V0bGllckRldGVjdGlvbkZ1bmN0aW9uLmZ1bmN0aW9uTmFtZX1cIixgICtcbiAgICAgICAgYFwiJHtvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLnRvU3RyaW5nKCl9XCIsYCArXG4gICAgICAgIGBcIiR7b3V0bGllclRocmVzaG9sZH1cIixgICtcbiAgICAgICAgYFwiJHthdmFpbGFiaWxpdHlab25lSWR9XCIsYCArXG4gICAgICAgIGBcIiR7c3RyfVwiLGAgK1xuICAgICAgICAnXCJBV1MvTkFUR2F0ZXdheVwiLCcgK1xuICAgICAgICAnXCJQYWNrZXRzRHJvcENvdW50XCIsJyArXG4gICAgICAgICdcIlN1bVwiLCcgK1xuICAgICAgICAnXCJDb3VudFwiJyArXG4gICAgICAgICcpKScsXG4gICAgICBwZXJpb2Q6IHBlcmlvZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgJ0FaJyArIGNvdW50ZXIgKyAnTmF0R1dJc29sYXRlZEltcGFjdEFsYXJtT3V0bGllcicsXG4gICAgICB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgKyAnLW5hdC1ndy1tYWpvcml0eS1lcnJvcnMtaW1wYWN0JyArIG5hbWVTdWZmaXgsXG4gICAgICAgIG1ldHJpYzogb3V0bGllck1ldHJpY3MsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IGRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVpvbmFsSGlnaExhdGVuY3lPdXRsaWVyQWxhcm0oXG4gICAgc2NvcGU6IElDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGFsbEF2YWlsYWJpbGl0eVpvbmVJZHM6IHN0cmluZ1tdLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb246IElGdW5jdGlvbixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtOiBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIGxldCBtZXRyaWNEaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1bXSB9ID0ge307XG5cbiAgICBhbGxBdmFpbGFiaWxpdHlab25lSWRzLmZvckVhY2goKGF6SWQ6IHN0cmluZykgPT4ge1xuICAgICAgbWV0cmljRGltZW5zaW9uc1theklkXSA9IFtcbiAgICAgICAgbWV0cmljRGV0YWlscy5tZXRyaWNEaW1lbnNpb25zLnpvbmFsRGltZW5zaW9ucyhcbiAgICAgICAgICBheklkLFxuICAgICAgICAgQXdzLlJFR0lPTixcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBsZXQgc3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShtZXRyaWNEaW1lbnNpb25zKVxuICAgICAgLnJlcGxhY2UoL1tcXFxcXS9nLCAnXFxcXFxcXFwnKVxuICAgICAgLnJlcGxhY2UoL1tcXFwiXS9nLCAnXFxcXFwiJylcbiAgICAgIC5yZXBsYWNlKC9bXFwvXS9nLCAnXFxcXC8nKVxuICAgICAgLnJlcGxhY2UoL1tcXGJdL2csICdcXFxcYicpXG4gICAgICAucmVwbGFjZSgvW1xcZl0vZywgJ1xcXFxmJylcbiAgICAgIC5yZXBsYWNlKC9bXFxuXS9nLCAnXFxcXG4nKVxuICAgICAgLnJlcGxhY2UoL1tcXHJdL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xcdF0vZywgJ1xcXFx0Jyk7XG5cbiAgICBsZXQgb3V0bGllck1ldHJpY3M6IElNZXRyaWMgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgYE1BWChMQU1CREEoXCIke291dGxpZXJEZXRlY3Rpb25GdW5jdGlvbi5mdW5jdGlvbk5hbWV9XCIsYCArXG4gICAgICAgIGBcIiR7b3V0bGllckRldGVjdGlvbkFsZ29yaXRobS50b1N0cmluZygpfVwiLGAgK1xuICAgICAgICBgXCIke291dGxpZXJUaHJlc2hvbGR9XCIsYCArXG4gICAgICAgIGBcIiR7YXZhaWxhYmlsaXR5Wm9uZUlkfVwiLGAgK1xuICAgICAgICBgXCIke3N0cn1cIixgICtcbiAgICAgICAgYFwiJHttZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZX1cIixgICtcbiAgICAgICAgYFwiJHttZXRyaWNEZXRhaWxzLnN1Y2Nlc3NNZXRyaWNOYW1lcy5qb2luKCc6Jyl9XCIsYCArXG4gICAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gbWV0cmljIG1hdGggSUYoKSBzdGF0ZW1lbnRcbiAgICAgICAgYFwiVEMoJHtNZXRyaWNzSGVscGVyLmNvbnZlcnREdXJhdGlvbkJ5VW5pdChtZXRyaWNEZXRhaWxzLnN1Y2Nlc3NBbGFybVRocmVzaG9sZCwgbWV0cmljRGV0YWlscy51bml0KX06KVwiYCtcbiAgICAgICAgJ1wiTWlsbGlzZWNvbmRzXCInICtcbiAgICAgICAgJykpJyxcbiAgICAgIHBlcmlvZDogbWV0cmljRGV0YWlscy5wZXJpb2RcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSArXG4gICAgICAgICdBWicgK1xuICAgICAgICBjb3VudGVyICtcbiAgICAgICAgJ0xhdGVuY3lJc29sYXRlZEltcGFjdEFsYXJtT3V0bGllcicsXG4gICAgICB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tbWFqb3JpdHktaGlnaC1sYXRlbmN5LWltcGFjdGAgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIG1ldHJpYzogb3V0bGllck1ldHJpY3MsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVab25hbEhpZ2hMYXRlbmN5U3RhdGljT3V0bGllckFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgb3V0bGllclRocmVzaG9sZDogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgbGV0IHpvbmFsTGF0ZW5jeTogSU1ldHJpYyA9XG4gICAgICBab25hbExhdGVuY3lNZXRyaWNzLmNyZWF0ZVpvbmFsQ291bnRMYXRlbmN5TWV0cmljKHtcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICctaGlnaC1sYXRlbmN5LXJlcXVlc3RzJyxcbiAgICAgICAgbWV0cmljRGV0YWlsczogbWV0cmljRGV0YWlscyxcbiAgICAgICAgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZLFxuICAgICAgICBzdGF0aXN0aWM6IGBUQygke01ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpfTopYFxuICAgICAgfSk7XG5cbiAgICBsZXQgcmVnaW9uYWxMYXRlbmN5OiBJTWV0cmljID1cbiAgICAgIFJlZ2lvbmFsTGF0ZW5jeU1ldHJpY3MuY3JlYXRlUmVnaW9uYWxMYXRlbmN5Q291bnRNZXRyaWMoe1xuICAgICAgICBsYWJlbDpcbiAgICAgICAgIEF3cy5SRUdJT04gK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgICAnLWhpZ2gtbGF0ZW5jeS1yZXF1ZXN0cycsXG4gICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgIG1ldHJpY1R5cGU6IExhdGVuY3lNZXRyaWNUeXBlLlNVQ0NFU1NfTEFURU5DWSxcbiAgICAgICAgc3RhdGlzdGljOiBgVEMoJHtNZXRyaWNzSGVscGVyLmNvbnZlcnREdXJhdGlvbkJ5VW5pdChtZXRyaWNEZXRhaWxzLnN1Y2Nlc3NBbGFybVRocmVzaG9sZCwgbWV0cmljRGV0YWlscy51bml0KX06KWAsXG4gICAgICAgIGtleVByZWZpeDogJ2InLFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAnQVonICtcbiAgICAgICAgY291bnRlciArXG4gICAgICAgICdJc29sYXRlZEltcGFjdEFsYXJtU3RhdGljJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1zdGF0aWMtbWFqb3JpdHktaGlnaC1sYXRlbmN5LWltcGFjdGAgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIG1ldHJpYzogbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICBleHByZXNzaW9uOiAnSUYobTIgPiAwLCAobTEgLyBtMiksIDApJyxcbiAgICAgICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgICAgIG0xOiB6b25hbExhdGVuY3ksXG4gICAgICAgICAgICBtMjogcmVnaW9uYWxMYXRlbmN5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkICsgJyBwZXJjZW50IGhpZ2ggbGF0ZW5jeSByZXF1ZXN0cycsXG4gICAgICAgIH0pLFxuICAgICAgICB0aHJlc2hvbGQ6IG91dGxpZXJUaHJlc2hvbGQsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IG1ldHJpY0RldGFpbHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlWm9uYWxIaWdoTGF0ZW5jeVN0YXRpY091dGxpZXJBbGFybUZvckNhbmFyaWVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lczogc3RyaW5nW10sXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIGxldCB6b25hbExhdGVuY3k6IElNZXRyaWMgPVxuICAgICAgWm9uYWxMYXRlbmN5TWV0cmljcy5jcmVhdGVab25hbENvdW50TGF0ZW5jeU1ldHJpYyh7XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICBsYWJlbDpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgICAnLWhpZ2gtbGF0ZW5jeS1yZXF1ZXN0cycsXG4gICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgIG1ldHJpY1R5cGU6IExhdGVuY3lNZXRyaWNUeXBlLlNVQ0NFU1NfTEFURU5DWSxcbiAgICAgICAgc3RhdGlzdGljOiBgVEMoJHtNZXRyaWNzSGVscGVyLmNvbnZlcnREdXJhdGlvbkJ5VW5pdChtZXRyaWNEZXRhaWxzLnN1Y2Nlc3NBbGFybVRocmVzaG9sZCwgbWV0cmljRGV0YWlscy51bml0KX06KWBcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcHJlZml4ID0gJ2InO1xuXG4gICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcblxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXo6IHN0cmluZykgPT4ge1xuICAgICAgICBwcmVmaXggPU1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcbiAgICAgICAgXG4gICAgICAgIGxldCBhekxhdGVuY3lNZXRyaWNzOiBJTWV0cmljW10gPSBab25hbExhdGVuY3lNZXRyaWNzLmNyZWF0ZVpvbmFsTGF0ZW5jeU1ldHJpY3Moe1xuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogYXosXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIG1ldHJpY1R5cGU6IExhdGVuY3lNZXRyaWNUeXBlLlNVQ0NFU1NfTEFURU5DWSxcbiAgICAgICAgICBrZXlQcmVmaXg6IHByZWZpeCxcbiAgICAgICAgICBzdGF0aXN0aWM6IGBUQygke01ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpfTopYFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKHByZWZpeCk7XG5cbiAgICAgICAgbGV0IGlubmVyVXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcblxuICAgICAgICBhekxhdGVuY3lNZXRyaWNzLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlubmVyVXNpbmdNZXRyaWNzW2Ake3ByZWZpeH0ke2luZGV4fWBdID0gbWV0cmljXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBhekxhdGVuY3lDb3VudDogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXMoaW5uZXJVc2luZ01ldHJpY3MpLmpvaW4oXCIrXCIpLFxuICAgICAgICAgIHVzaW5nTWV0cmljczogaW5uZXJVc2luZ01ldHJpY3MsXG4gICAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKHByZWZpeCk7XG5cbiAgICAgICAgdXNpbmdNZXRyaWNzW2Ake3ByZWZpeH0xYF0gPSBhekxhdGVuY3lDb3VudDtcbiAgICAgIH0pO1xuXG4gICAgICBwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKHByZWZpeCk7XG5cbiAgICAgIGxldCByZWdpb25hbExhdGVuY3k6IElNZXRyaWMgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oXCIrXCIpLFxuICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAnQVonICtcbiAgICAgICAgY291bnRlciArXG4gICAgICAgICdJc29sYXRlZEltcGFjdEFsYXJtU3RhdGljJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1zdGF0aWMtbWFqb3JpdHktaGlnaC1sYXRlbmN5LWltcGFjdGAgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIG1ldHJpYzogbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICBleHByZXNzaW9uOiAnSUYobTIgPiAwLCAobTEgLyBtMiksIDApJyxcbiAgICAgICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgICAgIG0xOiB6b25hbExhdGVuY3ksXG4gICAgICAgICAgICBtMjogcmVnaW9uYWxMYXRlbmN5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkICsgJyBwZXJjZW50IGhpZ2ggbGF0ZW5jeSByZXF1ZXN0cycsXG4gICAgICAgIH0pLFxuICAgICAgICB0aHJlc2hvbGQ6IG91dGxpZXJUaHJlc2hvbGQsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IG1ldHJpY0RldGFpbHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW5zaWdodCBydWxlIHRoYXQgY2FsY3VsYXRlcyBob3cgbWFueSBpbnN0YW5jZXMgYXJlIHJlc3BvbmRpbmcgdG8gcmVxdWVzdHMgaW5cbiAgICogdGhlIHNwZWNpZmllZCBBWi4gT25seSB1c2VmdWwgZm9yIHNlcnZlci1zaWRlIG1ldHJpY3Mgc2luY2UgdGhlIGNhbmFyeSBkb2Vzbid0IHJlY29yZCBpbnN0YW5jZSBpZCBtZXRyaWNzLlxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG1ldHJpY0RldGFpbHNcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gbG9nR3JvdXBzXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkUGF0aFxuICAgKiBAcGFyYW0gb3BlcmF0aW9uTmFtZVBhdGhcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFBhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTZXJ2ZXJTaWRlSW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaUnVsZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wZXJhdGlvbk5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBydWxlRGV0YWlsczogSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBDZm5JbnNpZ2h0UnVsZSB7XG4gICAgbGV0IHJ1bGVCb2R5ID0gbmV3IEluc2lnaHRSdWxlQm9keSgpO1xuICAgIHJ1bGVCb2R5LmxvZ0dyb3VwTmFtZXMgPSBydWxlRGV0YWlscy5sb2dHcm91cHMubWFwKCh4KSA9PiB4LmxvZ0dyb3VwTmFtZSk7XG4gICAgcnVsZUJvZHkuYWdncmVnYXRlT24gPSAnQ291bnQnO1xuICAgIHJ1bGVCb2R5LmxvZ0Zvcm1hdCA9ICdKU09OJztcblxuICAgIHJ1bGVCb2R5LmNvbnRyaWJ1dGlvbiA9IHtcbiAgICAgIGtleXM6IFtydWxlRGV0YWlscy5pbnN0YW5jZUlkSnNvblBhdGhdLFxuICAgICAgZmlsdGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLmF2YWlsYWJpbGl0eVpvbmVJZEpzb25QYXRoLFxuICAgICAgICAgIEluOiBbYXZhaWxhYmlsaXR5Wm9uZUlkXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5vcGVyYXRpb25OYW1lSnNvblBhdGgsXG4gICAgICAgICAgSW46IFtvcGVyYXRpb25OYW1lXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIElDb250cmlidXRpb25EZWZpbml0aW9uO1xuXG4gICAgcmV0dXJuIG5ldyBDZm5JbnNpZ2h0UnVsZShzY29wZSwgJ0FaJyArIGNvdW50ZXIgKyAnSW5zdGFuY2VzSW5UaGVBWlJ1bGUnLCB7XG4gICAgICBydWxlTmFtZTpcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgYC0ke29wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0taW5zdGFuY2VzLWluLXRoZS1hemAgK1xuICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgcnVsZVN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICBydWxlQm9keTogcnVsZUJvZHkudG9Kc29uKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW5zaWdodCBydWxlIHRoYXQgY2FsY3VsYXRlcyB0aGUgaW5zdGFuY2VzIGNvbnRyaWJ1dGluZyB0byBlcnJvcnNcbiAgICogaW4gdGhpcyBBWi4gT25seSB1c2VmdWwgZm9yIHNlcnZlci1zaWRlIG1ldHJpY3Mgc2luY2UgdGhlIGNhbmFyeSBkb2Vzbid0IHJlY29yZCBpbnN0YW5jZSBpZCBtZXRyaWNzLlxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBsb2dHcm91cHNcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHBhcmFtIGluc3RhbmNlSWRQYXRoXG4gICAqIEBwYXJhbSBvcGVyYXRpb25OYW1lUGF0aFxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkUGF0aFxuICAgKiBAcGFyYW0gZXJyb3JNZXRyaWNQYXRoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU2VydmVyU2lkZUluc3RhbmNlRmF1bHRDb250cmlidXRvcnNJblRoaXNBWlJ1bGUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBvcGVyYXRpb25OYW1lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgcnVsZURldGFpbHM6IElDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogQ2ZuSW5zaWdodFJ1bGUge1xuICAgIGxldCBydWxlQm9keSA9IG5ldyBJbnNpZ2h0UnVsZUJvZHkoKTtcbiAgICBydWxlQm9keS5sb2dHcm91cE5hbWVzID0gcnVsZURldGFpbHMubG9nR3JvdXBzLm1hcCgoeCkgPT4geC5sb2dHcm91cE5hbWUpO1xuICAgIHJ1bGVCb2R5LmFnZ3JlZ2F0ZU9uID0gJ0NvdW50JztcbiAgICBydWxlQm9keS5sb2dGb3JtYXQgPSAnSlNPTic7XG4gICAgcnVsZUJvZHkuY29udHJpYnV0aW9uID0ge1xuICAgICAga2V5czogW3J1bGVEZXRhaWxzLmluc3RhbmNlSWRKc29uUGF0aF0sXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuYXZhaWxhYmlsaXR5Wm9uZUlkSnNvblBhdGgsXG4gICAgICAgICAgSW46IFthdmFpbGFiaWxpdHlab25lSWRdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLm9wZXJhdGlvbk5hbWVKc29uUGF0aCxcbiAgICAgICAgICBJbjogW29wZXJhdGlvbk5hbWVdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLmZhdWx0TWV0cmljSnNvblBhdGgsXG4gICAgICAgICAgR3JlYXRlclRoYW46IDAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQ29udHJpYnV0aW9uRGVmaW5pdGlvbjtcblxuICAgIHJldHVybiBuZXcgQ2ZuSW5zaWdodFJ1bGUoXG4gICAgICBzY29wZSxcbiAgICAgICdBWicgKyBjb3VudGVyICsgJ0luc3RhbmNlRXJyb3JDb250cmlidXRpb25SdWxlJyxcbiAgICAgIHtcbiAgICAgICAgcnVsZU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7b3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1wZXItaW5zdGFuY2UtZmF1bHRzYCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgcnVsZVN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgIHJ1bGVCb2R5OiBydWxlQm9keS50b0pzb24oKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbnNpZ2h0IHJ1bGUgdGhhdCBjYWxjdWxhdGVzIGluc3RhbmNlcyBjb250cmlidXRpbmcgdG8gaGlnaCBsYXRlbmN5IGluIHRoaXMgQVouIE9ubHlcbiAgICogdXNlZnVsIGZvciBzZXJ2ZXItc2lkZSBtZXRyaWNzIHNpbmNlIHRoZSBjYW5hcnkgZG9lc24ndCByZWNvcmQgaW5zdGFuY2UgaWQgbWV0cmljcy5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBtZXRyaWNEZXRhaWxzXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIGxvZ0dyb3Vwc1xuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZlclNpZGVJbnN0YW5jZUhpZ2hMYXRlbmN5Q29udHJpYnV0b3JzSW5UaGlzQVpSdWxlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIHJ1bGVEZXRhaWxzOiBJQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IENmbkluc2lnaHRSdWxlIHtcbiAgICBsZXQgcnVsZUJvZHkgPSBuZXcgSW5zaWdodFJ1bGVCb2R5KCk7XG4gICAgcnVsZUJvZHkubG9nR3JvdXBOYW1lcyA9IHJ1bGVEZXRhaWxzLmxvZ0dyb3Vwcy5tYXAoKHgpID0+IHgubG9nR3JvdXBOYW1lKTtcbiAgICBydWxlQm9keS5hZ2dyZWdhdGVPbiA9ICdDb3VudCc7XG4gICAgcnVsZUJvZHkubG9nRm9ybWF0ID0gJ0pTT04nO1xuICAgIHJ1bGVCb2R5LmNvbnRyaWJ1dGlvbiA9IHtcbiAgICAgIGtleXM6IFtydWxlRGV0YWlscy5pbnN0YW5jZUlkSnNvblBhdGhdLFxuICAgICAgZmlsdGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLmF2YWlsYWJpbGl0eVpvbmVJZEpzb25QYXRoLFxuICAgICAgICAgIEluOiBbYXZhaWxhYmlsaXR5Wm9uZUlkXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5vcGVyYXRpb25OYW1lSnNvblBhdGgsXG4gICAgICAgICAgSW46IFttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWVdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLnN1Y2Nlc3NMYXRlbmN5TWV0cmljSnNvblBhdGgsXG4gICAgICAgICAgR3JlYXRlclRoYW46IE1ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgSUNvbnRyaWJ1dGlvbkRlZmluaXRpb247XG5cbiAgICByZXR1cm4gbmV3IENmbkluc2lnaHRSdWxlKFxuICAgICAgc2NvcGUsXG4gICAgICAnQVonICsgY291bnRlciArICdMYXRlbmN5Q29udHJpYnV0b3JzUnVsZScsXG4gICAgICB7XG4gICAgICAgIHJ1bGVOYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1wZXItaW5zdGFuY2UtaGlnaC1sYXRlbmN5YCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgcnVsZVN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgIHJ1bGVCb2R5OiBydWxlQm9keS50b0pzb24oKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBhbGFybSB0aGF0IGluZGljYXRlcyBzb21lIHBlcmNlbnRhZ2Ugb2YgdGhlIGluc3RhbmNlcyBpbiB0aGlzIEFaIGFyZSBwcm9kdWNpbmcgZXJyb3JzLiBPbmx5XG4gICAqIHVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgbWV0cmljcyBzaW5jZSB0aGUgY2FuYXJ5IGRvZXNuJ3QgcmVjb3JkIGluc3RhbmNlIGlkIG1ldHJpY3MuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBvdXRsaWVyVGhyZXNob2xkXG4gICAqIEBwYXJhbSBpbnN0YW5jZUZhdWx0UmF0ZUNvbnRyaWJ1dG9yc0luVGhpc0FaXG4gICAqIEBwYXJhbSBpbnN0YW5jZXNIYW5kbGluZ1JlcXVlc3RzSW5UaGlzQVpcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTZXJ2ZXJTaWRlWm9uYWxNb3JlVGhhbk9uZUluc3RhbmNlUHJvZHVjaW5nRmF1bHRzQWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTWV0cmljRGV0YWlscyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgb3V0bGllclRocmVzaG9sZDogbnVtYmVyLFxuICAgIGluc3RhbmNlRmF1bHRSYXRlQ29udHJpYnV0b3JzSW5UaGlzQVo6IENmbkluc2lnaHRSdWxlLFxuICAgIGluc3RhbmNlc0hhbmRsaW5nUmVxdWVzdHNJblRoaXNBWjogQ2ZuSW5zaWdodFJ1bGUsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IEFsYXJtKHNjb3BlLCAnQVonICsgY291bnRlciArICdNb3JlVGhhbk9uZUFsYXJtRm9yRXJyb3JzJywge1xuICAgICAgYWxhcm1OYW1lOlxuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LW11bHRpcGxlLWluc3RhbmNlcy1mYXVsdHNgICtcbiAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgIG1ldHJpYzogbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgZXhwcmVzc2lvbjogYElOU0lHSFRfUlVMRV9NRVRSSUMoXFxcIiR7aW5zdGFuY2VGYXVsdFJhdGVDb250cmlidXRvcnNJblRoaXNBWi5hdHRyUnVsZU5hbWV9XFxcIiwgXFxcIlVuaXF1ZUNvbnRyaWJ1dG9yc1xcXCIpIC8gSU5TSUdIVF9SVUxFX01FVFJJQyhcXFwiJHtpbnN0YW5jZXNIYW5kbGluZ1JlcXVlc3RzSW5UaGlzQVouYXR0clJ1bGVOYW1lfVxcXCIsIFxcXCJVbmlxdWVDb250cmlidXRvcnNcXFwiKWAsXG4gICAgICAgIHBlcmlvZDogbWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICB9KSxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgdGhyZXNob2xkOiBvdXRsaWVyVGhyZXNob2xkLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gYWxhcm0gaW5kaWNhdGluZyBtb3JlIHRoYW4gc29tZSBwZXJjZW50YWdlIG9mIGluc3RhbmNlcyBpbiB0aGlzIEFaXG4gICAqIGFyZSBjb250cmlidXRpbmcgdG8gaGlnaCBsYXRlbmN5LiBPbmx5IHVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgbWV0cmljcyBzaW5jZVxuICAgKiB0aGUgY2FuYXJ5IGRvZXNuJ3QgcmVjb3JkIGluc3RhbmNlIGlkIG1ldHJpY3MuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBvdXRsaWVyVGhyZXNob2xkXG4gICAqIEBwYXJhbSBpbnN0YW5jZUhpZ2hMYXRlbmN5Q29udHJpYnV0b3JzSW5UaGlzQVpcbiAgICogQHBhcmFtIGluc3RhbmNlc0hhbmRsaW5nUmVxdWVzdHNJblRoaXNBWlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZlclNpZGVab25hbE1vcmVUaGFuT25lSW5zdGFuY2VQcm9kdWNpbmdIaWdoTGF0ZW5jeUFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBpbnN0YW5jZUhpZ2hMYXRlbmN5Q29udHJpYnV0b3JzSW5UaGlzQVo6IENmbkluc2lnaHRSdWxlLFxuICAgIGluc3RhbmNlc0hhbmRsaW5nUmVxdWVzdHNJblRoaXNBWjogQ2ZuSW5zaWdodFJ1bGUsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IEFsYXJtKHNjb3BlLCAnQVonICsgY291bnRlciArICdNb3JlVGhhbk9uZUFsYXJtRm9ySGlnaExhdGVuY3knLCB7XG4gICAgICBhbGFybU5hbWU6XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgIGAtJHttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tbXVsdGlwbGUtaW5zdGFuY2VzLWhpZ2gtbGF0ZW5jeWAgK1xuICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgbWV0cmljOiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiBgSU5TSUdIVF9SVUxFX01FVFJJQyhcXFwiJHtpbnN0YW5jZUhpZ2hMYXRlbmN5Q29udHJpYnV0b3JzSW5UaGlzQVouYXR0clJ1bGVOYW1lfVxcXCIsIFxcXCJVbmlxdWVDb250cmlidXRvcnNcXFwiKSAvIElOU0lHSFRfUlVMRV9NRVRSSUMoXFxcIiR7aW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaLmF0dHJSdWxlTmFtZX1cXFwiLCBcXFwiVW5pcXVlQ29udHJpYnV0b3JzXFxcIilgLFxuICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgfSksXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgIHRocmVzaG9sZDogb3V0bGllclRocmVzaG9sZCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuSUdOT1JFLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIHRoYXQgaW5kaWNhdGVzIHRoaXMgQVogYXMgYW4gb3V0bGllclxuICAgKiBmb3IgYXZhaWxhYmlsaXR5IG9yIGxhdGVuY3kuIFRoaXMgZG9lcyBub3QgZW5zdXJlIHRoYXQgdGhlIGVycm9yc1xuICAgKiBvciBsYXRlbmN5IG9yaWdpbmF0ZSBmcm9tIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIGxvZ0dyb3Vwc1xuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcGFyYW0gYXpJc091dGxpZXJGb3JGYXVsdHNBbGFybVxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5SW1wYWN0QWxhcm1cbiAgICogQHBhcmFtIGF6SXNPdXRsaWVyRm9yTGF0ZW5jeUFsYXJtXG4gICAqIEBwYXJhbSBsYXRlbmN5SW1wYWN0QWxhcm1cbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDYW5hcnlJc29sYXRlZEFaSW1wYWN0QWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBvcGVyYXRpb25OYW1lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIGF6SXNPdXRsaWVyRm9yRmF1bHRzQWxhcm06IElBbGFybSxcbiAgICBhdmFpbGFiaWxpdHlJbXBhY3RBbGFybTogSUFsYXJtLFxuICAgIGF6SXNPdXRsaWVyRm9yTGF0ZW5jeUFsYXJtOiBJQWxhcm0sXG4gICAgbGF0ZW5jeUltcGFjdEFsYXJtOiBJQWxhcm0sXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBvcGVyYXRpb25OYW1lICsgJ0FaJyArIGNvdW50ZXIgKyAnSXNvbGF0ZWRJbXBhY3RBbGFybScgKyBuYW1lU3VmZml4LFxuICAgICAge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7b3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1pc29sYXRlZC1pbXBhY3QtYWxhcm1gICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICBBbGFybVJ1bGUuYWxsT2YoYXpJc091dGxpZXJGb3JGYXVsdHNBbGFybSwgYXZhaWxhYmlsaXR5SW1wYWN0QWxhcm0pLFxuICAgICAgICAgIEFsYXJtUnVsZS5hbGxPZihheklzT3V0bGllckZvckxhdGVuY3lBbGFybSwgbGF0ZW5jeUltcGFjdEFsYXJtKSxcbiAgICAgICAgKSxcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHNlcnZlciBzaWRlIGFsYXJtIHRvIGlkZW50aWZ5IGlzb2xhdGVkIHNpbmdsZSBBWlxuICAgKiBpbXBhY3QgbWVhbmluZyB0aGF0IHRoaXMgb25lIEFaIGlzIGFmZmVjdGVkIGFuZCB0aGUgb3RoZXJzIGFyZW4ndFxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBheklzT3V0bGllckZvckZhdWx0c0FsYXJtXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlJbXBhY3RBbGFybVxuICAgKiBAcGFyYW0gbW9yZVRoYW5PbmVJbnN0YW5jZUNvbnRyaWJ1dGluZ1RvRmF1bHRzXG4gICAqIEBwYXJhbSBheklzT3V0bGllckZvckxhdGVuY3lBbGFybVxuICAgKiBAcGFyYW0gbGF0ZW5jeUltcGFjdEFsYXJtXG4gICAqIEBwYXJhbSBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9MYXRlbmN5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU2VydmVyU2lkZUlzb2xhdGVkQVpJbXBhY3RBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wZXJhdGlvbk5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgYXpJc091dGxpZXJGb3JGYXVsdHNBbGFybTogSUFsYXJtLFxuICAgIGF2YWlsYWJpbGl0eUltcGFjdEFsYXJtOiBJQWxhcm0sXG4gICAgbW9yZVRoYW5PbmVJbnN0YW5jZUNvbnRyaWJ1dGluZ1RvRmF1bHRzOiBJQWxhcm0sXG4gICAgYXpJc091dGxpZXJGb3JMYXRlbmN5QWxhcm06IElBbGFybSxcbiAgICBsYXRlbmN5SW1wYWN0QWxhcm06IElBbGFybSxcbiAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9MYXRlbmN5OiBJQWxhcm0sXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBvcGVyYXRpb25OYW1lICsgJ0FaJyArIGNvdW50ZXIgKyAnSXNvbGF0ZWRJbXBhY3RBbGFybScgKyBuYW1lU3VmZml4LFxuICAgICAge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7b3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1pc29sYXRlZC1pbXBhY3QtYWxhcm1gICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9GYXVsdHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgbW9yZVRoYW5PbmVJbnN0YW5jZUNvbnRyaWJ1dGluZ1RvRmF1bHRzID09IG51bGxcbiAgICAgICAgICAgID8gQWxhcm1SdWxlLmFsbE9mKFxuICAgICAgICAgICAgICBheklzT3V0bGllckZvckZhdWx0c0FsYXJtLFxuICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlJbXBhY3RBbGFybSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogQWxhcm1SdWxlLmFsbE9mKFxuICAgICAgICAgICAgICBheklzT3V0bGllckZvckZhdWx0c0FsYXJtLFxuICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlJbXBhY3RBbGFybSxcbiAgICAgICAgICAgICAgbW9yZVRoYW5PbmVJbnN0YW5jZUNvbnRyaWJ1dGluZ1RvRmF1bHRzLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9MYXRlbmN5ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG1vcmVUaGFuT25lSW5zdGFuY2VDb250cmlidXRpbmdUb0xhdGVuY3kgPT0gbnVsbFxuICAgICAgICAgICAgPyBBbGFybVJ1bGUuYWxsT2YoYXpJc091dGxpZXJGb3JMYXRlbmN5QWxhcm0sIGxhdGVuY3lJbXBhY3RBbGFybSlcbiAgICAgICAgICAgIDogQWxhcm1SdWxlLmFsbE9mKFxuICAgICAgICAgICAgICBheklzT3V0bGllckZvckxhdGVuY3lBbGFybSxcbiAgICAgICAgICAgICAgbGF0ZW5jeUltcGFjdEFsYXJtLFxuICAgICAgICAgICAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9MYXRlbmN5LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYWxhcm0gdGhhdCBmaXJlcyBpZiBlaXRoZXIgdGhlIGNhbmFyeSBvciB0aGVcbiAgICogc2VydmVyIHNpZGUgZGV0ZWN0IHNpbmdsZSBBWiBpc29sYXRlZCBpbXBhY3RcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBvcGVyYXRpb25cbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcGFyYW0gc2VydmVyU2lkZUFsYXJtXG4gICAqIEBwYXJhbSBjYW5hcnlBbGFybVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUFnZ3JlZ2F0ZUlzb2xhdGVkQVpJbXBhY3RBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wZXJhdGlvbjogSU9wZXJhdGlvbixcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgc2VydmVyU2lkZUFsYXJtOiBJQWxhcm0sXG4gICAgY2FuYXJ5QWxhcm06IElBbGFybSxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBvcGVyYXRpb24ub3BlcmF0aW9uTmFtZSArICdBWicgKyBjb3VudGVyICsgJ0FnZ3JlZ2F0ZUlzb2xhdGVkSW1wYWN0QWxhcm0nLFxuICAgICAge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7b3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tYWdncmVnYXRlLWlzb2xhdGVkLWltcGFjdC1hbGFybWAsXG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKHNlcnZlclNpZGVBbGFybSwgY2FuYXJ5QWxhcm0pLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlZ2lvbmFsIGF2YWlsYWJpbGl0eSBhbGFybSBmb3IgdGhlIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG1ldHJpY0RldGFpbHNcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVSZWdpb25hbEF2YWlsYWJpbGl0eUFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbkF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMsXG4gICAgbmFtZVN1ZmZpeDogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSArICdSZWdpb25hbEF2YWlsYWJpbGl0eUFsYXJtJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgQXdzLlJFR0lPTiArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgJy1zdWNjZXNzLXJhdGUnICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IG1ldHJpY0RldGFpbHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIHRocmVzaG9sZDogbWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsXG4gICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgICAgIG1ldHJpYzogUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzLmNyZWF0ZVJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljKHtcbiAgICAgICAgICBsYWJlbDogQXdzLlJFR0lPTixcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIG1ldHJpY1R5cGU6IEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19SQVRFLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVnaW9uYWwgbGF0ZW5jeSBhbGFybSBmb3IgdGhlIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG1ldHJpY0RldGFpbHNcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVSZWdpb25hbExhdGVuY3lBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25MYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICBuYW1lU3VmZml4OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICsgJ1JlZ2lvbmFsTGF0ZW5jeUFsYXJtJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIEF3cy5SRUdJT04gK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICctc3VjY2Vzcy1sYXRlbmN5JyArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICB0aHJlc2hvbGQ6IE1ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuSUdOT1JFLFxuICAgICAgICBtZXRyaWM6IFJlZ2lvbmFsTGF0ZW5jeU1ldHJpY3MuY3JlYXRlUmVnaW9uYWxBdmVyYWdlTGF0ZW5jeU1ldHJpYyh7XG4gICAgICAgICAgbGFiZWw6IEF3cy5SRUdJT04sICAgICAgICBcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIG1ldHJpY1R5cGU6IExhdGVuY3lNZXRyaWNUeXBlLlNVQ0NFU1NfTEFURU5DWSxcbiAgICAgICAgICBzdGF0aXN0aWM6IG1ldHJpY0RldGFpbHMuYWxhcm1TdGF0aXN0aWMsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY29tcG9zaXRlIGFsYXJtIGNvbWJpbmluZyBsYXRlbmN5IGFuZCBhdmFpbGFiaWxpdHkgYWxhcm1zIGZvciB0aGlzIG9wZXJhdGlvbiBpbiB0aGUgcmVnaW9uXG4gICAqIGFzIG1lYXN1cmVkIGZyb20gZWl0aGVyIHRoZSBzZXJ2ZXIgc2lkZSBvciBjYW5hcnlcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBvcGVyYXRpb25cbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIHJlZ2lvbmFsQXZhaWxhYmlsaXR5QWxhcm1cbiAgICogQHBhcmFtIHJlZ2lvbmFsTGF0ZW5jeUFsYXJtXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUmVnaW9uYWxBdmFpbGFiaWxpdHlPckxhdGVuY3lJbXBhY3RBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wZXJhdGlvbk5hbWU6IHN0cmluZyxcbiAgICBuYW1lU3VmZml4OiBzdHJpbmcsXG4gICAgcmVnaW9uYWxBdmFpbGFiaWxpdHlBbGFybTogSUFsYXJtLFxuICAgIHJlZ2lvbmFsTGF0ZW5jeUFsYXJtOiBJQWxhcm0sXG4gICk6IElBbGFybSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb3NpdGVBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgb3BlcmF0aW9uTmFtZSArICdSZWdpb25hbEN1c3RvbWVyRXhwZXJpZW5jZUFsYXJtJyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOlxuICAgICAgICAgQXdzLlJFR0lPTiArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBvcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICctY3VzdG9tZXItZXhwZXJpZW5jZS1pbWFjdCcgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgIHJlZ2lvbmFsQXZhaWxhYmlsaXR5QWxhcm0sXG4gICAgICAgICAgcmVnaW9uYWxMYXRlbmN5QWxhcm0sXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUmVnaW9uYWxJbnN0YW5jZUNvbnRyaWJ1dG9yc1RvSGlnaExhdGVuY3koXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgcnVsZURldGFpbHM6IElDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgKTogQ2ZuSW5zaWdodFJ1bGUge1xuICAgIGxldCBydWxlQm9keSA9IG5ldyBJbnNpZ2h0UnVsZUJvZHkoKTtcbiAgICBydWxlQm9keS5sb2dHcm91cE5hbWVzID0gcnVsZURldGFpbHMubG9nR3JvdXBzLm1hcCgoeCkgPT4geC5sb2dHcm91cE5hbWUpO1xuICAgIHJ1bGVCb2R5LmFnZ3JlZ2F0ZU9uID0gJ0NvdW50JztcbiAgICBydWxlQm9keS5sb2dGb3JtYXQgPSAnSlNPTic7XG4gICAgcnVsZUJvZHkuY29udHJpYnV0aW9uID0ge1xuICAgICAga2V5czogW3J1bGVEZXRhaWxzLmluc3RhbmNlSWRKc29uUGF0aF0sXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuc3VjY2Vzc0xhdGVuY3lNZXRyaWNKc29uUGF0aCxcbiAgICAgICAgICBHcmVhdGVyVGhhbjogTWV0cmljc0hlbHBlci5jb252ZXJ0RHVyYXRpb25CeVVuaXQobWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsIG1ldHJpY0RldGFpbHMudW5pdCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMub3BlcmF0aW9uTmFtZUpzb25QYXRoLFxuICAgICAgICAgIEluOiBbbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIElDb250cmlidXRpb25EZWZpbml0aW9uO1xuXG4gICAgcmV0dXJuIG5ldyBDZm5JbnNpZ2h0UnVsZShzY29wZSwgJ1JlZ2lvblBlckluc3RhbmNlSGlnaExhdGVuY3lSdWxlJywge1xuICAgICAgcnVsZU5hbWU6XG4gICAgICAgQXdzLlJFR0lPTiArXG4gICAgICAgIGAtJHttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tcGVyLWluc3RhbmNlLWhpZ2gtbGF0ZW5jeS1zZXJ2ZXJgLFxuICAgICAgcnVsZVN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICBydWxlQm9keTogcnVsZUJvZHkudG9Kc29uKCksXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUmVnaW9uYWxJbnN0YW5jZUNvbnRyaWJ1dG9yc1RvRmF1bHRzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMsXG4gICAgcnVsZURldGFpbHM6IElDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgKTogQ2ZuSW5zaWdodFJ1bGUge1xuICAgIGxldCBydWxlQm9keSA9IG5ldyBJbnNpZ2h0UnVsZUJvZHkoKTtcbiAgICBydWxlQm9keS5sb2dHcm91cE5hbWVzID0gcnVsZURldGFpbHMubG9nR3JvdXBzLm1hcCgoeCkgPT4geC5sb2dHcm91cE5hbWUpO1xuICAgIHJ1bGVCb2R5LmFnZ3JlZ2F0ZU9uID0gJ0NvdW50JztcbiAgICBydWxlQm9keS5sb2dGb3JtYXQgPSAnSlNPTic7XG4gICAgcnVsZUJvZHkuY29udHJpYnV0aW9uID0ge1xuICAgICAga2V5czogW3J1bGVEZXRhaWxzLmluc3RhbmNlSWRKc29uUGF0aF0sXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuZmF1bHRNZXRyaWNKc29uUGF0aCxcbiAgICAgICAgICBHcmVhdGVyVGhhbjogMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5vcGVyYXRpb25OYW1lSnNvblBhdGgsXG4gICAgICAgICAgSW46IFttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWVdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgSUNvbnRyaWJ1dGlvbkRlZmluaXRpb247XG5cbiAgICByZXR1cm4gbmV3IENmbkluc2lnaHRSdWxlKHNjb3BlLCAnUmVnaW9uUGVySW5zdGFuY2VFcnJvclJ1bGUnLCB7XG4gICAgICBydWxlTmFtZTpcbiAgICAgICBBd3MuUkVHSU9OICtcbiAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1wZXItaW5zdGFuY2UtZmF1bHRzLXNlcnZlcmAsXG4gICAgICBydWxlU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgIHJ1bGVCb2R5OiBydWxlQm9keS50b0pzb24oKSxcbiAgICB9KTtcbiAgfVxufVxuIl19
894
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL0F2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLDZDQUE0QztBQUM1QywrREFVb0M7QUFTcEMsdURBQTZFO0FBRTdFLHdGQUFxRjtBQUNyRiw4RUFBMkU7QUFDM0Usd0VBQXFFO0FBSXJFLGdGQUE2RTtBQUM3RSxzRUFBbUU7QUFFbkUsOERBQTJEO0FBQzNELDRGQUF5RjtBQUt6Rjs7R0FFRztBQUNILE1BQWEsb0NBQW9DO0lBQy9DOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLDRCQUE0QixDQUNqQyxLQUFnQixFQUNoQixhQUFrRCxFQUNsRCxnQkFBd0IsRUFDeEIsa0JBQTBCLEVBQzFCLE9BQWUsRUFDZixVQUFtQjtRQUVuQixPQUFPLElBQUksc0JBQUssQ0FDZCxLQUFLLEVBQ0wsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsT0FBTyxHQUFHLG1CQUFtQixFQUNsRTtZQUNFLFNBQVMsRUFDUCxrQkFBa0I7Z0JBQ2xCLEdBQUc7Z0JBQ0gsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pDLGVBQWU7Z0JBQ2YsVUFBVTtZQUNaLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxpQkFBaUI7WUFDbEQsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGlCQUFpQjtZQUNsRCxrQkFBa0IsRUFBRSxtQ0FBa0IsQ0FBQyxtQkFBbUI7WUFDMUQsU0FBUyxFQUFFLGFBQWEsQ0FBQyxxQkFBcUI7WUFDOUMsY0FBYyxFQUFFLEtBQUs7WUFDckIsZ0JBQWdCLEVBQUUsaUNBQWdCLENBQUMsTUFBTTtZQUN6QyxNQUFNLEVBQUUsNkRBQTZCLENBQUMsNkJBQTZCLENBQUM7Z0JB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QztpQkFDZjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsV0FBVyxDQUFDLHFCQUFxQjtvQkFDeEMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztpQkFDbEM7YUFDRjtTQUNvQyxDQUFDO1FBRXhDLE9BQU8sSUFBSSwrQkFBYyxDQUFDLEtBQUssRUFBRSw0QkFBNEIsRUFBRTtZQUM3RCxRQUFRLEVBQ1AsaUJBQUcsQ0FBQyxNQUFNO2dCQUNULElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsNkJBQTZCO1lBQzVFLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTN3Q0Qsb0ZBMndDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEF3cywgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBJQWxhcm0sXG4gIEFsYXJtLFxuICBJTWV0cmljLFxuICBDb21wb3NpdGVBbGFybSxcbiAgQWxhcm1SdWxlLFxuICBNYXRoRXhwcmVzc2lvbixcbiAgQ2ZuSW5zaWdodFJ1bGUsXG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgVHJlYXRNaXNzaW5nRGF0YVxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBDZm5OYXRHYXRld2F5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQge1xuICBCYXNlTG9hZEJhbGFuY2VyLFxuICBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsXG4gIElMb2FkQmFsYW5jZXJWMixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjInO1xuaW1wb3J0IHsgSUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElDb250cmlidXRpb25EZWZpbml0aW9uLCBJbnNpZ2h0UnVsZUJvZHkgfSBmcm9tICcuL0luc2lnaHRSdWxlQm9keSc7XG5pbXBvcnQgeyBJQXZhaWxhYmlsaXR5Wm9uZU1hcHBlciB9IGZyb20gJy4uL2F6bWFwcGVyL0lBdmFpbGFiaWxpdHlab25lTWFwcGVyJztcbmltcG9ydCB7IFJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljcyB9IGZyb20gJy4uL21ldHJpY3MvUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzJztcbmltcG9ydCB7IFJlZ2lvbmFsTGF0ZW5jeU1ldHJpY3MgfSBmcm9tICcuLi9tZXRyaWNzL1JlZ2lvbmFsTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgWm9uYWxMYXRlbmN5TWV0cmljcyB9IGZyb20gJy4uL21ldHJpY3MvWm9uYWxMYXRlbmN5TWV0cmljcyc7XG5pbXBvcnQgeyBJQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9JQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMnO1xuaW1wb3J0IHsgSU9wZXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL0lPcGVyYXRpb24nO1xuaW1wb3J0IHsgSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9JT3BlcmF0aW9uTWV0cmljRGV0YWlscyc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0F2YWlsYWJpbGl0eU1ldHJpY1R5cGUnO1xuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1R5cGUgfSBmcm9tICcuLi91dGlsaXRpZXMvTGF0ZW5jeU1ldHJpY1R5cGUnO1xuaW1wb3J0IHsgT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSB9IGZyb20gJy4uL3V0aWxpdGllcy9PdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtJztcbmltcG9ydCB7IE1ldHJpY3NIZWxwZXIgfSBmcm9tICcuLi91dGlsaXRpZXMvTWV0cmljc0hlbHBlcic7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcyB9IGZyb20gJy4uL21ldHJpY3MvQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgSU9wZXJhdGlvbkF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9JT3BlcmF0aW9uQXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9JT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMnO1xuaW1wb3J0IHsgTGF0ZW5jeU91dGxpZXJNZXRyaWNBZ2dyZWdhdGlvbiB9IGZyb20gJy4uL291dGxpZXItZGV0ZWN0aW9uL0xhdGVuY3lPdXRsaWVyTWV0cmljQWdncmVnYXRpb24nO1xuXG4vKipcbiAqIENsYXNzIHVzZWQgdG8gY3JlYXRlIGF2YWlsYWJpbGl0eSBhbmQgbGF0ZW5jeSBhbGFybXMgYW5kIENvbnRyaWJ1dG9yIEluc2lnaHQgcnVsZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgem9uYWwgYXZhaWxhYmlsaXR5IGFsYXJtXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlWm9uYWxBdmFpbGFiaWxpdHlBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25BdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IEFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgKyAnQVonICsgY291bnRlciArICdBdmFpbGFiaWxpdHlBbGFybScsXG4gICAgICB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICctc3VjY2Vzcy1yYXRlJyArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICB0aHJlc2hvbGQ6IG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuSUdOT1JFLFxuICAgICAgICBtZXRyaWM6IEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZVpvbmFsQXZhaWxhYmlsaXR5TWV0cmljKHtcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX1JBVEUsXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZVxuICAgICAgICB9LFxuICAgICAgICBtZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMuem9uYWxEaW1lbnNpb25zKFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBBd3MuUkVHSU9OXG4gICAgICAgICkpXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHpvbmFsIGxhdGVuY3kgYWxhcm1cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBtZXRyaWNEZXRhaWxzXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbExhdGVuY3lBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25MYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICsgJ0FaJyArIGNvdW50ZXIgKyAnTGF0ZW5jeUFsYXJtJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgJy1zdWNjZXNzLWxhdGVuY3knICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IG1ldHJpY0RldGFpbHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIHRocmVzaG9sZDogTWV0cmljc0hlbHBlci5jb252ZXJ0RHVyYXRpb25CeVVuaXQobWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsIG1ldHJpY0RldGFpbHMudW5pdCksXG4gICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgICAgIG1ldHJpYzogWm9uYWxMYXRlbmN5TWV0cmljcy5jcmVhdGVab25hbEF2ZXJhZ2VMYXRlbmN5TWV0cmljKHtcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICBtZXRyaWNEZXRhaWxzLmFsYXJtU3RhdGlzdGljICtcbiAgICAgICAgICAgICcgbGF0ZW5jeScsXG4gICAgICAgICAgbWV0cmljRGV0YWlsczogbWV0cmljRGV0YWlscyxcbiAgICAgICAgICBtZXRyaWNUeXBlOiBMYXRlbmN5TWV0cmljVHlwZS5TVUNDRVNTX0xBVEVOQ1ksXG4gICAgICAgICAgc3RhdGlzdGljOiBtZXRyaWNEZXRhaWxzLmFsYXJtU3RhdGlzdGljLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGFsYXJtIHdoZW4gZWl0aGVyIGxhdGVuY3kgb3IgYXZhaWxhYmlsaXR5IGlzIGJyZWFjaGVkIGluIHRoZSBBdmFpbGFiaWx0aXkgWm9uZVxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSB6b25hbEF2YWlsYWJpbGl0eUFsYXJtXG4gICAqIEBwYXJhbSB6b25hbExhdGVuY3lBbGFybVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVpvbmFsQXZhaWxhYmlsaXR5T3JMYXRlbmN5Q29tcG9zaXRlQWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBvcGVyYXRpb25OYW1lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIHpvbmFsQXZhaWxhYmlsaXR5QWxhcm06IElBbGFybSxcbiAgICB6b25hbExhdGVuY3lBbGFybTogSUFsYXJtLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb3NpdGVBbGFybShzY29wZSwgJ0FaJyArIGNvdW50ZXIgKyAnWm9uYWxJbXBhY3RBbGFybScsIHtcbiAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICcgaGFzIGxhdGVuY3kgb3IgYXZhaWxhYmlsaXR5IGltcGFjdC4gVGhpcyBkb2VzIG5vdCBpbmRpY2F0ZSBpdCBpcyBhbiBvdXRsaWVyIGFuZCBzaG93cyBpc29sYXRlZCBpbXBhY3QuJyxcbiAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgYC0ke29wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0taW1wYWN0LWFnZ3JlZ2F0ZS1hbGFybWAgK1xuICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgYWxhcm1SdWxlOiBBbGFybVJ1bGUuYW55T2Yoem9uYWxBdmFpbGFiaWxpdHlBbGFybSwgem9uYWxMYXRlbmN5QWxhcm0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIHRoYXQgY29tcGFyZXMgZXJyb3IgcmF0ZSBpbiB0aGlzIEFaIHRvIHRoZSBvdmVyYWxsIHJlZ2lvbiBlcnJvciBiYXNlZCBvbmx5IG9uIG1ldHJpYyBkYXRhXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBvdXRsaWVyVGhyZXNob2xkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlWm9uYWxGYXVsdFJhdGVTdGF0aWNPdXRsaWVyQWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTWV0cmljRGV0YWlscyxcbiAgICBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIGxldCB6b25hbEZhdWx0czogSU1ldHJpYyA9XG4gICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVab25hbEF2YWlsYWJpbGl0eU1ldHJpYyh7XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICBtZXRyaWNUeXBlOiBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UXG4gICAgICB9LFxuICAgICAgbWV0cmljRGV0YWlscy5tZXRyaWNEaW1lbnNpb25zLnpvbmFsRGltZW5zaW9ucyhcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICBBd3MuUkVHSU9OXG4gICAgICApKTtcblxuICAgIC8vIEZvciBzZXJ2ZXItc2lkZSwgdGhpcyBtZXRyaWMgaXMgb2ssIGJlY2F1c2UgdGhlIEFaIHNwZWNpZmljIG1ldHJpY3MgYXJlIGR1YWwtcmVwb3J0ZWRcbiAgICAvLyB3aXRoIGRpbWVuc2lvbnMgZm9yIGJvdGggdGhlIEFaIGFuZCBSZWdpb24uIEJ1dCBmb3IgdGhlIGNhbmFyeSwgaXQgcHJvZHVjZXMgMSBtZXRyaWNcbiAgICAvLyBmb3IgdGVzdGluZyB0aGUgcmVnaW9uYWwgZW5kcG9pbnQgYW5kIGEgc2VwYXJhdGUgbWV0cmljIGZvciBlYWNoIEFaLiBTbyBpbiB0aGF0IGNhc2VcbiAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGRpdmlkZSBieSB0aGUgcmVnaW9uYWwgbWV0cmljLCB1c2UgcGVyLUFaXG4gICAgbGV0IHJlZ2lvbmFsRmF1bHRzOiBJTWV0cmljID1cbiAgICAgIFJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljcy5jcmVhdGVSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpYyh7XG4gICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgIG1ldHJpY1R5cGU6IEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQsXG4gICAgICAgIGtleVByZWZpeDogJ2InLFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFsYXJtKHNjb3BlLCAnQVonICsgY291bnRlciArICdJc29sYXRlZEltcGFjdEFsYXJtU3RhdGljJywge1xuICAgICAgYWxhcm1OYW1lOlxuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXN0YXRpYy1tYWpvcml0eS1lcnJvcnMtaW1wYWN0YCArXG4gICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICBtZXRyaWM6IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246ICdJRihtMiA+IDAsIChtMSAvIG0yKSwgMCknLFxuICAgICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgICBtMTogem9uYWxGYXVsdHMsXG4gICAgICAgICAgbTI6IHJlZ2lvbmFsRmF1bHRzLFxuICAgICAgICB9LFxuICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkICsgJyBwZXJjZW50IGZhdWx0cycsXG4gICAgICB9KSxcbiAgICAgIHRocmVzaG9sZDogb3V0bGllclRocmVzaG9sZCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgIH0pO1xuICB9XG5cbiAgICAvKipcbiAgICogQW4gYWxhcm0gdGhhdCBjb21wYXJlcyBlcnJvciByYXRlIGluIHRoaXMgQVogdG8gdGhlIG92ZXJhbGwgcmVnaW9uIGVycm9yIGJhc2VkIG9ubHkgb24gbWV0cmljIGRhdGEuXG4gICAqIFRoaXMgaXMgZGlmZmVyZW50IGZvciBjYW5hcmllcyBiZWNhdXNlIHRoZSBtZXRyaWNzIHRoZXkgdGVzdCBhdCB0aGUgcmVnaW9uYWwgbGV2ZWwgYXJlIGRpZmZlcmVudFxuICAgKiByZXF1ZXN0cyB0aGFuIHRoZSBvbmVzIHNlbnQgdG8gdGhlIHpvbmFsIGVuZHBvaW50cy4gU28geW91IGhhdmUgdG8gYWRkIGFsbCBvZiB0aGUgem9uYWwgcmVxdWVzdHMgdG9nZXRoZXJcbiAgICogdG8gY29tcGFyZSBvbmUgQVogdG8gdGhlIG90aGVycyAoeW91IGNhbid0IGNvbXBhcmUgYSB6b25lIHRvIHRoZSByZWdpb25hbCBtZXRyaWNzKS5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBtZXRyaWNEZXRhaWxzXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHBhcmFtIG91dGxpZXJUaHJlc2hvbGRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbEZhdWx0UmF0ZVN0YXRpY091dGxpZXJBbGFybUZvckNhbmFyaWVzKFxuICAgICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgICBhdmFpbGFiaWxpdHlab25lSWRzOiBzdHJpbmdbXSxcbiAgICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICAgKTogSUFsYXJtIHtcbiAgICAgIGxldCB6b25hbEZhdWx0czogSU1ldHJpYyA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZVpvbmFsQXZhaWxhYmlsaXR5TWV0cmljKHtcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVFxuICAgICAgICB9LFxuICAgICAgICBtZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMuem9uYWxEaW1lbnNpb25zKFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBBd3MuUkVHSU9OXG4gICAgICAgICkpO1xuXG4gICAgICBsZXQgcHJlZml4ID0gJ2InO1xuXG4gICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcblxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkcy5mb3JFYWNoKChhejogc3RyaW5nKSA9PiB7XG4gICAgICAgIHByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcbiAgICAgICAgXG4gICAgICAgIGxldCBhekZhdWx0czogSU1ldHJpYyA9IEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZVpvbmFsQXZhaWxhYmlsaXR5TWV0cmljKHtcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF6LFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgbWV0cmljRGV0YWlsczogbWV0cmljRGV0YWlscyxcbiAgICAgICAgICBtZXRyaWNUeXBlOiBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UXG4gICAgICAgIH0sXG4gICAgICAgIG1ldHJpY0RldGFpbHMubWV0cmljRGltZW5zaW9ucy56b25hbERpbWVuc2lvbnMoXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIEF3cy5SRUdJT05cbiAgICAgICAgKSk7XG5cbiAgICAgICAgcHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihwcmVmaXgpO1xuXG4gICAgICAgIHVzaW5nTWV0cmljc1tgJHtwcmVmaXh9MWBdID0gYXpGYXVsdHM7XG4gICAgICB9KTtcblxuICAgICAgcHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihwcmVmaXgpO1xuXG4gICAgICBsZXQgcmVnaW9uYWxGYXVsdENvdW50OiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKFwiK1wiKSxcbiAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgIHBlcmlvZDogbWV0cmljRGV0YWlscy5wZXJpb2RcbiAgICAgIH0pO1xuICBcbiAgICAgIHJldHVybiBuZXcgQWxhcm0oc2NvcGUsICdBWicgKyBjb3VudGVyICsgJ0lzb2xhdGVkSW1wYWN0QWxhcm1TdGF0aWMnLCB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tc3RhdGljLW1ham9yaXR5LWVycm9ycy1pbXBhY3RgICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBtZXRyaWM6IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgZXhwcmVzc2lvbjogJ0lGKG0yID4gMCwgKG0xIC8gbTIpLCAwKScsXG4gICAgICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgICAgICBtMTogem9uYWxGYXVsdHMsXG4gICAgICAgICAgICBtMjogcmVnaW9uYWxGYXVsdENvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkICsgJyBwZXJjZW50IGZhdWx0cycsXG4gICAgICAgIH0pLFxuICAgICAgICB0aHJlc2hvbGQ6IG91dGxpZXJUaHJlc2hvbGQsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlWm9uYWxGYXVsdFJhdGVPdXRsaWVyQWxhcm0oXG4gICAgc2NvcGU6IElDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgYWxsQXZhaWxhYmlsaXR5Wm9uZUlkczogc3RyaW5nW10sXG4gICAgb3V0bGllclRocmVzaG9sZDogbnVtYmVyLFxuICAgIG91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbjogSUZ1bmN0aW9uLFxuICAgIG91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG06IE91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0sXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgbGV0IG1ldHJpY0RpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIH0gPSB7fTtcblxuICAgIGFsbEF2YWlsYWJpbGl0eVpvbmVJZHMuZm9yRWFjaCgoYXpJZDogc3RyaW5nKSA9PiB7XG4gICAgICBtZXRyaWNEaW1lbnNpb25zW2F6SWRdID0gW1xuICAgICAgICBtZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMuem9uYWxEaW1lbnNpb25zKFxuICAgICAgICAgIGF6SWQsXG4gICAgICAgICBBd3MuUkVHSU9OLFxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9KTtcblxuICAgIGxldCBzdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KG1ldHJpY0RpbWVuc2lvbnMpXG4gICAgICAucmVwbGFjZSgvW1xcXFxdL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvW1xcXCJdL2csICdcXFxcXCInKVxuICAgICAgLnJlcGxhY2UoL1tcXC9dL2csICdcXFxcLycpXG4gICAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAgIC5yZXBsYWNlKC9bXFxmXS9nLCAnXFxcXGYnKVxuICAgICAgLnJlcGxhY2UoL1tcXG5dL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvW1xccl0vZywgJ1xcXFxyJylcbiAgICAgIC5yZXBsYWNlKC9bXFx0XS9nLCAnXFxcXHQnKTtcblxuICAgIGxldCBvdXRsaWVyTWV0cmljczogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICBleHByZXNzaW9uOlxuICAgICAgICBgTUFYKExBTUJEQShcIiR7b3V0bGllckRldGVjdGlvbkZ1bmN0aW9uLmZ1bmN0aW9uTmFtZX1cIixgICtcbiAgICAgICAgYFwiJHtvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLnRvU3RyaW5nKCl9XCIsYCArXG4gICAgICAgIGBcIiR7b3V0bGllclRocmVzaG9sZH1cIixgICtcbiAgICAgICAgYFwiJHthdmFpbGFiaWxpdHlab25lSWR9XCIsYCArXG4gICAgICAgIGBcIiR7c3RyfVwiLGAgK1xuICAgICAgICBgXCIke21ldHJpY0RldGFpbHMubWV0cmljTmFtZXNwYWNlfVwiLGAgK1xuICAgICAgICBgXCIke21ldHJpY0RldGFpbHMuZmF1bHRNZXRyaWNOYW1lcy5qb2luKCc6Jyl9XCIsYCArXG4gICAgICAgICdcIlN1bVwiLCcgK1xuICAgICAgICAnXCJDb3VudFwiJyArXG4gICAgICAgICcpKScsXG4gICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICAnQVonICsgY291bnRlciArICdGYXVsdElzb2xhdGVkSW1wYWN0QWxhcm1PdXRsaWVyJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1tYWpvcml0eS1lcnJvcnMtaW1wYWN0YCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgbWV0cmljOiBvdXRsaWVyTWV0cmljcyxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVpvbmFsRmF1bHRSYXRlT3V0bGllckFsYXJtRm9yQWxiKFxuICAgIHNjb3BlOiBJQ29uc3RydWN0LFxuICAgIGxvYWRCYWxhbmNlcnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb246IElGdW5jdGlvbixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtOiBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLFxuICAgIGF6TWFwcGVyOiBJQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcixcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgZXZhbHVhdGlvblBlcmlvZHM6IG51bWJlcixcbiAgICBkYXRhcG9pbnRzVG9BbGFybTogbnVtYmVyLFxuICAgIHBlcmlvZDogRHVyYXRpb24sXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICBsZXQgbWV0cmljRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9W10gfSA9IHt9O1xuXG4gICAgbG9hZEJhbGFuY2Vycy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICB4LnZwYz8uYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXopID0+IHtcbiAgICAgICAgbGV0IGF6SWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihcbiAgICAgICAgICBhei5zdWJzdHJpbmcoYXoubGVuZ3RoIC0gMSksXG4gICAgICAgICk7XG4gICAgICAgIGlmICghKGF6SWQgaW4gbWV0cmljRGltZW5zaW9ucykpIHtcbiAgICAgICAgICBtZXRyaWNEaW1lbnNpb25zW2F6SWRdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBtZXRyaWNEaW1lbnNpb25zW2F6SWRdLnB1c2goe1xuICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF6LFxuICAgICAgICAgIExvYWRCYWxhbmNlcjogKHggYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgc3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShtZXRyaWNEaW1lbnNpb25zKVxuICAgICAgLnJlcGxhY2UoL1tcXFxcXS9nLCAnXFxcXFxcXFwnKVxuICAgICAgLnJlcGxhY2UoL1tcXFwiXS9nLCAnXFxcXFwiJylcbiAgICAgIC5yZXBsYWNlKC9bXFwvXS9nLCAnXFxcXC8nKVxuICAgICAgLnJlcGxhY2UoL1tcXGJdL2csICdcXFxcYicpXG4gICAgICAucmVwbGFjZSgvW1xcZl0vZywgJ1xcXFxmJylcbiAgICAgIC5yZXBsYWNlKC9bXFxuXS9nLCAnXFxcXG4nKVxuICAgICAgLnJlcGxhY2UoL1tcXHJdL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xcdF0vZywgJ1xcXFx0Jyk7XG5cbiAgICBsZXQgb3V0bGllck1ldHJpY3M6IElNZXRyaWMgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgYE1BWChMQU1CREEoXCIke291dGxpZXJEZXRlY3Rpb25GdW5jdGlvbi5mdW5jdGlvbk5hbWV9XCIsYCArXG4gICAgICAgIGBcIiR7b3V0bGllckRldGVjdGlvbkFsZ29yaXRobS50b1N0cmluZygpfVwiLGAgK1xuICAgICAgICBgXCIke291dGxpZXJUaHJlc2hvbGR9XCIsYCArXG4gICAgICAgIGBcIiR7YXZhaWxhYmlsaXR5Wm9uZUlkfVwiLGAgK1xuICAgICAgICBgXCIke3N0cn1cIixgICtcbiAgICAgICAgJ1wiQVdTL0FwcGxpY2F0aW9uRUxCXCIsJyArXG4gICAgICAgICdcIkhUVFBDb2RlX0VMQl81WFhfQ291bnQ6SFRUUENvZGVfVGFyZ2V0XzVYWF9Db3VudFwiLCcgK1xuICAgICAgICAnXCJTdW1cIiwnICtcbiAgICAgICAgJ1wiQ291bnRcIicgK1xuICAgICAgICAnKSknLFxuICAgICAgcGVyaW9kOiBwZXJpb2RcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgQWxhcm0oc2NvcGUsICdBWicgKyBjb3VudGVyICsgJ0FsYklzb2xhdGVkSW1wYWN0QWxhcm1PdXRsaWVyJywge1xuICAgICAgYWxhcm1OYW1lOlxuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgKyAnLWFsYi1tYWpvcml0eS1lcnJvcnMtaW1wYWN0JyArIG5hbWVTdWZmaXgsXG4gICAgICBtZXRyaWM6IG91dGxpZXJNZXRyaWNzLFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBkYXRhcG9pbnRzVG9BbGFybSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVab25hbEZhdWx0UmF0ZU91dGxpZXJBbGFybUZvck5hdEdXKFxuICAgIHNjb3BlOiBJQ29uc3RydWN0LFxuICAgIG5hdEdhdGV3YXlzOiB7IFtrZXk6IHN0cmluZ106IENmbk5hdEdhdGV3YXlbXSB9LFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIG91dGxpZXJUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb246IElGdW5jdGlvbixcbiAgICBvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtOiBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLFxuICAgIGF6TWFwcGVyOiBJQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcixcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgZXZhbHVhdGlvblBlcmlvZHM6IG51bWJlcixcbiAgICBkYXRhcG9pbnRzVG9BbGFybTogbnVtYmVyLFxuICAgIHBlcmlvZDogRHVyYXRpb24sXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICBsZXQgbWV0cmljRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9W10gfSA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMobmF0R2F0ZXdheXMpLmZvckVhY2goKGF6KSA9PiB7XG4gICAgICBsZXQgYXpJZCA9IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKFxuICAgICAgICBhei5zdWJzdHJpbmcoYXoubGVuZ3RoIC0gMSksXG4gICAgICApO1xuXG4gICAgICBpZiAoIShheklkIGluIG1ldHJpY0RpbWVuc2lvbnMpKSB7XG4gICAgICAgIG1ldHJpY0RpbWVuc2lvbnNbYXpJZF0gPSBbXTtcbiAgICAgIH1cblxuICAgICAgbmF0R2F0ZXdheXNbYXpdLmZvckVhY2goKG5hdGd3KSA9PiB7XG4gICAgICAgIG1ldHJpY0RpbWVuc2lvbnNbYXpJZF0ucHVzaCh7XG4gICAgICAgICAgTmF0R2F0ZXdheUlkOiBuYXRndy5hdHRyTmF0R2F0ZXdheUlkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkobWV0cmljRGltZW5zaW9ucylcbiAgICAgIC5yZXBsYWNlKC9bXFxcXF0vZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9bXFxcIl0vZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvW1xcL10vZywgJ1xcXFwvJylcbiAgICAgIC5yZXBsYWNlKC9bXFxiXS9nLCAnXFxcXGInKVxuICAgICAgLnJlcGxhY2UoL1tcXGZdL2csICdcXFxcZicpXG4gICAgICAucmVwbGFjZSgvW1xcbl0vZywgJ1xcXFxuJylcbiAgICAgIC5yZXBsYWNlKC9bXFxyXS9nLCAnXFxcXHInKVxuICAgICAgLnJlcGxhY2UoL1tcXHRdL2csICdcXFxcdCcpO1xuXG4gICAgbGV0IG91dGxpZXJNZXRyaWNzOiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIGV4cHJlc3Npb246XG4gICAgICAgIGBNQVgoTEFNQkRBKFwiJHtvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb24uZnVuY3Rpb25OYW1lfVwiLGAgK1xuICAgICAgICBgXCIke291dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0udG9TdHJpbmcoKX1cIixgICtcbiAgICAgICAgYFwiJHtvdXRsaWVyVGhyZXNob2xkfVwiLGAgK1xuICAgICAgICBgXCIke2F2YWlsYWJpbGl0eVpvbmVJZH1cIixgICtcbiAgICAgICAgYFwiJHtzdHJ9XCIsYCArXG4gICAgICAgICdcIkFXUy9OQVRHYXRld2F5XCIsJyArXG4gICAgICAgICdcIlBhY2tldHNEcm9wQ291bnRcIiwnICtcbiAgICAgICAgJ1wiU3VtXCIsJyArXG4gICAgICAgICdcIkNvdW50XCInICtcbiAgICAgICAgJykpJyxcbiAgICAgIHBlcmlvZDogcGVyaW9kXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICAnQVonICsgY291bnRlciArICdOYXRHV0lzb2xhdGVkSW1wYWN0QWxhcm1PdXRsaWVyJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArICctbmF0LWd3LW1ham9yaXR5LWVycm9ycy1pbXBhY3QnICsgbmFtZVN1ZmZpeCxcbiAgICAgICAgbWV0cmljOiBvdXRsaWVyTWV0cmljcyxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IGV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlWm9uYWxIaWdoTGF0ZW5jeU91dGxpZXJBbGFybShcbiAgICBzY29wZTogSUNvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgYWxsQXZhaWxhYmlsaXR5Wm9uZUlkczogc3RyaW5nW10sXG4gICAgb3V0bGllclRocmVzaG9sZDogbnVtYmVyLFxuICAgIG91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbjogSUZ1bmN0aW9uLFxuICAgIG91dGxpZXJNZXRyaWM6IExhdGVuY3lPdXRsaWVyTWV0cmljQWdncmVnYXRpb24sXG4gICAgb3V0bGllckRldGVjdGlvbkFsZ29yaXRobTogT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICBsZXQgbWV0cmljRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9W10gfSA9IHt9O1xuXG4gICAgYWxsQXZhaWxhYmlsaXR5Wm9uZUlkcy5mb3JFYWNoKChheklkOiBzdHJpbmcpID0+IHtcbiAgICAgIG1ldHJpY0RpbWVuc2lvbnNbYXpJZF0gPSBbXG4gICAgICAgIG1ldHJpY0RldGFpbHMubWV0cmljRGltZW5zaW9ucy56b25hbERpbWVuc2lvbnMoXG4gICAgICAgICAgYXpJZCxcbiAgICAgICAgIEF3cy5SRUdJT04sXG4gICAgICAgICksXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgbGV0IHN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkobWV0cmljRGltZW5zaW9ucylcbiAgICAgIC5yZXBsYWNlKC9bXFxcXF0vZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9bXFxcIl0vZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvW1xcL10vZywgJ1xcXFwvJylcbiAgICAgIC5yZXBsYWNlKC9bXFxiXS9nLCAnXFxcXGInKVxuICAgICAgLnJlcGxhY2UoL1tcXGZdL2csICdcXFxcZicpXG4gICAgICAucmVwbGFjZSgvW1xcbl0vZywgJ1xcXFxuJylcbiAgICAgIC5yZXBsYWNlKC9bXFxyXS9nLCAnXFxcXHInKVxuICAgICAgLnJlcGxhY2UoL1tcXHRdL2csICdcXFxcdCcpO1xuXG4gICAgLy8gVE9ETzogSW5jb3Jwb3JhdGUgdGhpcyBpbnRvIHRoZSBMYW1iZGEgZnVuY3Rpb24gbG9naWNcbiAgICBvdXRsaWVyTWV0cmljO1xuXG4gICAgbGV0IG91dGxpZXJNZXRyaWNzOiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIGV4cHJlc3Npb246XG4gICAgICAgIGBNQVgoTEFNQkRBKFwiJHtvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb24uZnVuY3Rpb25OYW1lfVwiLGAgK1xuICAgICAgICBgXCIke291dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0udG9TdHJpbmcoKX1cIixgICtcbiAgICAgICAgYFwiJHtvdXRsaWVyVGhyZXNob2xkfVwiLGAgK1xuICAgICAgICBgXCIke2F2YWlsYWJpbGl0eVpvbmVJZH1cIixgICtcbiAgICAgICAgYFwiJHtzdHJ9XCIsYCArXG4gICAgICAgIGBcIiR7bWV0cmljRGV0YWlscy5tZXRyaWNOYW1lc3BhY2V9XCIsYCArXG4gICAgICAgIGBcIiR7bWV0cmljRGV0YWlscy5zdWNjZXNzTWV0cmljTmFtZXMuam9pbignOicpfVwiLGAgK1xuICAgICAgICBgXCJUQygke01ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpfTopXCJgK1xuICAgICAgICAnXCJNaWxsaXNlY29uZHNcIicgK1xuICAgICAgICAnKSknLFxuICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgJ0FaJyArXG4gICAgICAgIGNvdW50ZXIgK1xuICAgICAgICAnTGF0ZW5jeUlzb2xhdGVkSW1wYWN0QWxhcm1PdXRsaWVyJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1tYWpvcml0eS1oaWdoLWxhdGVuY3ktaW1wYWN0YCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgbWV0cmljOiBvdXRsaWVyTWV0cmljcyxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVpvbmFsSGlnaExhdGVuY3lTdGF0aWNPdXRsaWVyQWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBvdXRsaWVyVGhyZXNob2xkOiBudW1iZXIsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICBsZXQgem9uYWxMYXRlbmN5OiBJTWV0cmljID1cbiAgICAgIFpvbmFsTGF0ZW5jeU1ldHJpY3MuY3JlYXRlWm9uYWxDb3VudExhdGVuY3lNZXRyaWMoe1xuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgbGFiZWw6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSArXG4gICAgICAgICAgJy1oaWdoLWxhdGVuY3ktcmVxdWVzdHMnLFxuICAgICAgICBtZXRyaWNEZXRhaWxzOiBtZXRyaWNEZXRhaWxzLFxuICAgICAgICBtZXRyaWNUeXBlOiBMYXRlbmN5TWV0cmljVHlwZS5TVUNDRVNTX0xBVEVOQ1ksXG4gICAgICAgIHN0YXRpc3RpYzogYFRDKCR7TWV0cmljc0hlbHBlci5jb252ZXJ0RHVyYXRpb25CeVVuaXQobWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsIG1ldHJpY0RldGFpbHMudW5pdCl9OilgXG4gICAgICB9KTtcblxuICAgIGxldCByZWdpb25hbExhdGVuY3k6IElNZXRyaWMgPVxuICAgICAgUmVnaW9uYWxMYXRlbmN5TWV0cmljcy5jcmVhdGVSZWdpb25hbExhdGVuY3lDb3VudE1ldHJpYyh7XG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgQXdzLlJFR0lPTiArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICctaGlnaC1sYXRlbmN5LXJlcXVlc3RzJyxcbiAgICAgICAgbWV0cmljRGV0YWlsczogbWV0cmljRGV0YWlscyxcbiAgICAgICAgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZLFxuICAgICAgICBzdGF0aXN0aWM6IGBUQygke01ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpfTopYCxcbiAgICAgICAga2V5UHJlZml4OiAnYicsXG4gICAgICB9KTtcblxuICAgIHJldHVybiBuZXcgQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSArXG4gICAgICAgICdBWicgK1xuICAgICAgICBjb3VudGVyICtcbiAgICAgICAgJ0lzb2xhdGVkSW1wYWN0QWxhcm1TdGF0aWMnLFxuICAgICAge1xuICAgICAgICBhbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXN0YXRpYy1tYWpvcml0eS1oaWdoLWxhdGVuY3ktaW1wYWN0YCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgbWV0cmljOiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgIGV4cHJlc3Npb246ICdJRihtMiA+IDAsIChtMSAvIG0yKSwgMCknLFxuICAgICAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICAgICAgbTE6IHpvbmFsTGF0ZW5jeSxcbiAgICAgICAgICAgIG0yOiByZWdpb25hbExhdGVuY3ksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQgKyAnIHBlcmNlbnQgaGlnaCBsYXRlbmN5IHJlcXVlc3RzJyxcbiAgICAgICAgfSksXG4gICAgICAgIHRocmVzaG9sZDogb3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVab25hbEhpZ2hMYXRlbmN5U3RhdGljT3V0bGllckFsYXJtRm9yQ2FuYXJpZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBzdHJpbmdbXSxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgb3V0bGllclRocmVzaG9sZDogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgbGV0IHpvbmFsTGF0ZW5jeTogSU1ldHJpYyA9XG4gICAgICBab25hbExhdGVuY3lNZXRyaWNzLmNyZWF0ZVpvbmFsQ291bnRMYXRlbmN5TWV0cmljKHtcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICctaGlnaC1sYXRlbmN5LXJlcXVlc3RzJyxcbiAgICAgICAgbWV0cmljRGV0YWlsczogbWV0cmljRGV0YWlscyxcbiAgICAgICAgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZLFxuICAgICAgICBzdGF0aXN0aWM6IGBUQygke01ldHJpY3NIZWxwZXIuY29udmVydER1cmF0aW9uQnlVbml0KG1ldHJpY0RldGFpbHMuc3VjY2Vzc0FsYXJtVGhyZXNob2xkLCBtZXRyaWNEZXRhaWxzLnVuaXQpfTopYFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcmVmaXggPSAnYic7XG5cbiAgICAgIGxldCB1c2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuXG4gICAgICBhdmFpbGFiaWxpdHlab25lcy5mb3JFYWNoKChhejogc3RyaW5nKSA9PiB7XG4gICAgICAgIHByZWZpeCA9TWV0cmljc0hlbHBlci5uZXh0Q2hhcihwcmVmaXgpO1xuICAgICAgICBcbiAgICAgICAgbGV0IGF6TGF0ZW5jeU1ldHJpY3M6IElNZXRyaWNbXSA9IFpvbmFsTGF0ZW5jeU1ldHJpY3MuY3JlYXRlWm9uYWxMYXRlbmN5TWV0cmljcyh7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBheixcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZLFxuICAgICAgICAgIGtleVByZWZpeDogcHJlZml4LFxuICAgICAgICAgIHN0YXRpc3RpYzogYFRDKCR7TWV0cmljc0hlbHBlci5jb252ZXJ0RHVyYXRpb25CeVVuaXQobWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsIG1ldHJpY0RldGFpbHMudW5pdCl9OilgXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcblxuICAgICAgICBsZXQgaW5uZXJVc2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuXG4gICAgICAgIGF6TGF0ZW5jeU1ldHJpY3MuZm9yRWFjaCgobWV0cmljOiBJTWV0cmljLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaW5uZXJVc2luZ01ldHJpY3NbYCR7cHJlZml4fSR7aW5kZXh9YF0gPSBtZXRyaWNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGF6TGF0ZW5jeUNvdW50OiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyhpbm5lclVzaW5nTWV0cmljcykuam9pbihcIitcIiksXG4gICAgICAgICAgdXNpbmdNZXRyaWNzOiBpbm5lclVzaW5nTWV0cmljcyxcbiAgICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcblxuICAgICAgICB1c2luZ01ldHJpY3NbYCR7cHJlZml4fTFgXSA9IGF6TGF0ZW5jeUNvdW50O1xuICAgICAgfSk7XG5cbiAgICAgIHByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIocHJlZml4KTtcblxuICAgICAgbGV0IHJlZ2lvbmFsTGF0ZW5jeTogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbihcIitcIiksXG4gICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kXG4gICAgICB9KTtcblxuICAgIHJldHVybiBuZXcgQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSArXG4gICAgICAgICdBWicgK1xuICAgICAgICBjb3VudGVyICtcbiAgICAgICAgJ0lzb2xhdGVkSW1wYWN0QWxhcm1TdGF0aWMnLFxuICAgICAge1xuICAgICAgICBhbGFybU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXN0YXRpYy1tYWpvcml0eS1oaWdoLWxhdGVuY3ktaW1wYWN0YCArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgbWV0cmljOiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgIGV4cHJlc3Npb246ICdJRihtMiA+IDAsIChtMSAvIG0yKSwgMCknLFxuICAgICAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICAgICAgbTE6IHpvbmFsTGF0ZW5jeSxcbiAgICAgICAgICAgIG0yOiByZWdpb25hbExhdGVuY3ksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJpb2Q6IG1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQgKyAnIHBlcmNlbnQgaGlnaCBsYXRlbmN5IHJlcXVlc3RzJyxcbiAgICAgICAgfSksXG4gICAgICAgIHRocmVzaG9sZDogb3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbnNpZ2h0IHJ1bGUgdGhhdCBjYWxjdWxhdGVzIGhvdyBtYW55IGluc3RhbmNlcyBhcmUgcmVzcG9uZGluZyB0byByZXF1ZXN0cyBpblxuICAgKiB0aGUgc3BlY2lmaWVkIEFaLiBPbmx5IHVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgbWV0cmljcyBzaW5jZSB0aGUgY2FuYXJ5IGRvZXNuJ3QgcmVjb3JkIGluc3RhbmNlIGlkIG1ldHJpY3MuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBsb2dHcm91cHNcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHBhcmFtIGluc3RhbmNlSWRQYXRoXG4gICAqIEBwYXJhbSBvcGVyYXRpb25OYW1lUGF0aFxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkUGF0aFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZlclNpZGVJbnN0YW5jZXNIYW5kbGluZ1JlcXVlc3RzSW5UaGlzQVpSdWxlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgb3BlcmF0aW9uTmFtZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIHJ1bGVEZXRhaWxzOiBJQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMsXG4gICAgY291bnRlcjogbnVtYmVyLFxuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmcsXG4gICk6IENmbkluc2lnaHRSdWxlIHtcbiAgICBsZXQgcnVsZUJvZHkgPSBuZXcgSW5zaWdodFJ1bGVCb2R5KCk7XG4gICAgcnVsZUJvZHkubG9nR3JvdXBOYW1lcyA9IHJ1bGVEZXRhaWxzLmxvZ0dyb3Vwcy5tYXAoKHgpID0+IHgubG9nR3JvdXBOYW1lKTtcbiAgICBydWxlQm9keS5hZ2dyZWdhdGVPbiA9ICdDb3VudCc7XG4gICAgcnVsZUJvZHkubG9nRm9ybWF0ID0gJ0pTT04nO1xuXG4gICAgcnVsZUJvZHkuY29udHJpYnV0aW9uID0ge1xuICAgICAga2V5czogW3J1bGVEZXRhaWxzLmluc3RhbmNlSWRKc29uUGF0aF0sXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuYXZhaWxhYmlsaXR5Wm9uZUlkSnNvblBhdGgsXG4gICAgICAgICAgSW46IFthdmFpbGFiaWxpdHlab25lSWRdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLm9wZXJhdGlvbk5hbWVKc29uUGF0aCxcbiAgICAgICAgICBJbjogW29wZXJhdGlvbk5hbWVdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgSUNvbnRyaWJ1dGlvbkRlZmluaXRpb247XG5cbiAgICByZXR1cm4gbmV3IENmbkluc2lnaHRSdWxlKHNjb3BlLCAnQVonICsgY291bnRlciArICdJbnN0YW5jZXNJblRoZUFaUnVsZScsIHtcbiAgICAgIHJ1bGVOYW1lOlxuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICBgLSR7b3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1pbnN0YW5jZXMtaW4tdGhlLWF6YCArXG4gICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICBydWxlU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgIHJ1bGVCb2R5OiBydWxlQm9keS50b0pzb24oKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbnNpZ2h0IHJ1bGUgdGhhdCBjYWxjdWxhdGVzIHRoZSBpbnN0YW5jZXMgY29udHJpYnV0aW5nIHRvIGVycm9yc1xuICAgKiBpbiB0aGlzIEFaLiBPbmx5IHVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgbWV0cmljcyBzaW5jZSB0aGUgY2FuYXJ5IGRvZXNuJ3QgcmVjb3JkIGluc3RhbmNlIGlkIG1ldHJpY3MuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIGxvZ0dyb3Vwc1xuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZFBhdGhcbiAgICogQHBhcmFtIG9wZXJhdGlvbk5hbWVQYXRoXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRQYXRoXG4gICAqIEBwYXJhbSBlcnJvck1ldHJpY1BhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTZXJ2ZXJTaWRlSW5zdGFuY2VGYXVsdENvbnRyaWJ1dG9yc0luVGhpc0FaUnVsZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wZXJhdGlvbk5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBydWxlRGV0YWlsczogSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBDZm5JbnNpZ2h0UnVsZSB7XG4gICAgbGV0IHJ1bGVCb2R5ID0gbmV3IEluc2lnaHRSdWxlQm9keSgpO1xuICAgIHJ1bGVCb2R5LmxvZ0dyb3VwTmFtZXMgPSBydWxlRGV0YWlscy5sb2dHcm91cHMubWFwKCh4KSA9PiB4LmxvZ0dyb3VwTmFtZSk7XG4gICAgcnVsZUJvZHkuYWdncmVnYXRlT24gPSAnQ291bnQnO1xuICAgIHJ1bGVCb2R5LmxvZ0Zvcm1hdCA9ICdKU09OJztcbiAgICBydWxlQm9keS5jb250cmlidXRpb24gPSB7XG4gICAgICBrZXlzOiBbcnVsZURldGFpbHMuaW5zdGFuY2VJZEpzb25QYXRoXSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5hdmFpbGFiaWxpdHlab25lSWRKc29uUGF0aCxcbiAgICAgICAgICBJbjogW2F2YWlsYWJpbGl0eVpvbmVJZF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMub3BlcmF0aW9uTmFtZUpzb25QYXRoLFxuICAgICAgICAgIEluOiBbb3BlcmF0aW9uTmFtZV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuZmF1bHRNZXRyaWNKc29uUGF0aCxcbiAgICAgICAgICBHcmVhdGVyVGhhbjogMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIElDb250cmlidXRpb25EZWZpbml0aW9uO1xuXG4gICAgcmV0dXJuIG5ldyBDZm5JbnNpZ2h0UnVsZShcbiAgICAgIHNjb3BlLFxuICAgICAgJ0FaJyArIGNvdW50ZXIgKyAnSW5zdGFuY2VFcnJvckNvbnRyaWJ1dGlvblJ1bGUnLFxuICAgICAge1xuICAgICAgICBydWxlTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHtvcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXBlci1pbnN0YW5jZS1mYXVsdHNgICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBydWxlU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgcnVsZUJvZHk6IHJ1bGVCb2R5LnRvSnNvbigpLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGluc2lnaHQgcnVsZSB0aGF0IGNhbGN1bGF0ZXMgaW5zdGFuY2VzIGNvbnRyaWJ1dGluZyB0byBoaWdoIGxhdGVuY3kgaW4gdGhpcyBBWi4gT25seVxuICAgKiB1c2VmdWwgZm9yIHNlcnZlci1zaWRlIG1ldHJpY3Mgc2luY2UgdGhlIGNhbmFyeSBkb2Vzbid0IHJlY29yZCBpbnN0YW5jZSBpZCBtZXRyaWNzLlxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG1ldHJpY0RldGFpbHNcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gbG9nR3JvdXBzXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU2VydmVyU2lkZUluc3RhbmNlSGlnaExhdGVuY3lDb250cmlidXRvcnNJblRoaXNBWlJ1bGUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgcnVsZURldGFpbHM6IElDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgbmFtZVN1ZmZpeD86IHN0cmluZyxcbiAgKTogQ2ZuSW5zaWdodFJ1bGUge1xuICAgIGxldCBydWxlQm9keSA9IG5ldyBJbnNpZ2h0UnVsZUJvZHkoKTtcbiAgICBydWxlQm9keS5sb2dHcm91cE5hbWVzID0gcnVsZURldGFpbHMubG9nR3JvdXBzLm1hcCgoeCkgPT4geC5sb2dHcm91cE5hbWUpO1xuICAgIHJ1bGVCb2R5LmFnZ3JlZ2F0ZU9uID0gJ0NvdW50JztcbiAgICBydWxlQm9keS5sb2dGb3JtYXQgPSAnSlNPTic7XG4gICAgcnVsZUJvZHkuY29udHJpYnV0aW9uID0ge1xuICAgICAga2V5czogW3J1bGVEZXRhaWxzLmluc3RhbmNlSWRKc29uUGF0aF0sXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuYXZhaWxhYmlsaXR5Wm9uZUlkSnNvblBhdGgsXG4gICAgICAgICAgSW46IFthdmFpbGFiaWxpdHlab25lSWRdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLm9wZXJhdGlvbk5hbWVKc29uUGF0aCxcbiAgICAgICAgICBJbjogW21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBNYXRjaDogcnVsZURldGFpbHMuc3VjY2Vzc0xhdGVuY3lNZXRyaWNKc29uUGF0aCxcbiAgICAgICAgICBHcmVhdGVyVGhhbjogTWV0cmljc0hlbHBlci5jb252ZXJ0RHVyYXRpb25CeVVuaXQobWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsIG1ldHJpY0RldGFpbHMudW5pdCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQ29udHJpYnV0aW9uRGVmaW5pdGlvbjtcblxuICAgIHJldHVybiBuZXcgQ2ZuSW5zaWdodFJ1bGUoXG4gICAgICBzY29wZSxcbiAgICAgICdBWicgKyBjb3VudGVyICsgJ0xhdGVuY3lDb250cmlidXRvcnNSdWxlJyxcbiAgICAgIHtcbiAgICAgICAgcnVsZU5hbWU6XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXBlci1pbnN0YW5jZS1oaWdoLWxhdGVuY3lgICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBydWxlU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgcnVsZUJvZHk6IHJ1bGVCb2R5LnRvSnNvbigpLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIHRoYXQgaW5kaWNhdGVzIHNvbWUgcGVyY2VudGFnZSBvZiB0aGUgaW5zdGFuY2VzIGluIHRoaXMgQVogYXJlIHByb2R1Y2luZyBlcnJvcnMuIE9ubHlcbiAgICogdXNlZnVsIGZvciBzZXJ2ZXItc2lkZSBtZXRyaWNzIHNpbmNlIHRoZSBjYW5hcnkgZG9lc24ndCByZWNvcmQgaW5zdGFuY2UgaWQgbWV0cmljcy5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBtZXRyaWNEZXRhaWxzXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHBhcmFtIG91dGxpZXJUaHJlc2hvbGRcbiAgICogQHBhcmFtIGluc3RhbmNlRmF1bHRSYXRlQ29udHJpYnV0b3JzSW5UaGlzQVpcbiAgICogQHBhcmFtIGluc3RhbmNlc0hhbmRsaW5nUmVxdWVzdHNJblRoaXNBWlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZlclNpZGVab25hbE1vcmVUaGFuT25lSW5zdGFuY2VQcm9kdWNpbmdGYXVsdHNBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBvdXRsaWVyVGhyZXNob2xkOiBudW1iZXIsXG4gICAgaW5zdGFuY2VGYXVsdFJhdGVDb250cmlidXRvcnNJblRoaXNBWjogQ2ZuSW5zaWdodFJ1bGUsXG4gICAgaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaOiBDZm5JbnNpZ2h0UnVsZSxcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQWxhcm0oc2NvcGUsICdBWicgKyBjb3VudGVyICsgJ01vcmVUaGFuT25lQWxhcm1Gb3JFcnJvcnMnLCB7XG4gICAgICBhbGFybU5hbWU6XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgIGAtJHttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tbXVsdGlwbGUtaW5zdGFuY2VzLWZhdWx0c2AgK1xuICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgbWV0cmljOiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiBgSU5TSUdIVF9SVUxFX01FVFJJQyhcXFwiJHtpbnN0YW5jZUZhdWx0UmF0ZUNvbnRyaWJ1dG9yc0luVGhpc0FaLmF0dHJSdWxlTmFtZX1cXFwiLCBcXFwiVW5pcXVlQ29udHJpYnV0b3JzXFxcIikgLyBJTlNJR0hUX1JVTEVfTUVUUklDKFxcXCIke2luc3RhbmNlc0hhbmRsaW5nUmVxdWVzdHNJblRoaXNBWi5hdHRyUnVsZU5hbWV9XFxcIiwgXFxcIlVuaXF1ZUNvbnRyaWJ1dG9yc1xcXCIpYCxcbiAgICAgICAgcGVyaW9kOiBtZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgIH0pLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IG1ldHJpY0RldGFpbHMuZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICB0aHJlc2hvbGQ6IG91dGxpZXJUaHJlc2hvbGQsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgZGF0YXBvaW50c1RvQWxhcm06IG1ldHJpY0RldGFpbHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBhbGFybSBpbmRpY2F0aW5nIG1vcmUgdGhhbiBzb21lIHBlcmNlbnRhZ2Ugb2YgaW5zdGFuY2VzIGluIHRoaXMgQVpcbiAgICogYXJlIGNvbnRyaWJ1dGluZyB0byBoaWdoIGxhdGVuY3kuIE9ubHkgdXNlZnVsIGZvciBzZXJ2ZXItc2lkZSBtZXRyaWNzIHNpbmNlXG4gICAqIHRoZSBjYW5hcnkgZG9lc24ndCByZWNvcmQgaW5zdGFuY2UgaWQgbWV0cmljcy5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBtZXRyaWNEZXRhaWxzXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHBhcmFtIG91dGxpZXJUaHJlc2hvbGRcbiAgICogQHBhcmFtIGluc3RhbmNlSGlnaExhdGVuY3lDb250cmlidXRvcnNJblRoaXNBWlxuICAgKiBAcGFyYW0gaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU2VydmVyU2lkZVpvbmFsTW9yZVRoYW5PbmVJbnN0YW5jZVByb2R1Y2luZ0hpZ2hMYXRlbmN5QWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTWV0cmljRGV0YWlscyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgb3V0bGllclRocmVzaG9sZDogbnVtYmVyLFxuICAgIGluc3RhbmNlSGlnaExhdGVuY3lDb250cmlidXRvcnNJblRoaXNBWjogQ2ZuSW5zaWdodFJ1bGUsXG4gICAgaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaOiBDZm5JbnNpZ2h0UnVsZSxcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQWxhcm0oc2NvcGUsICdBWicgKyBjb3VudGVyICsgJ01vcmVUaGFuT25lQWxhcm1Gb3JIaWdoTGF0ZW5jeScsIHtcbiAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1tdWx0aXBsZS1pbnN0YW5jZXMtaGlnaC1sYXRlbmN5YCArXG4gICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICBtZXRyaWM6IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246IGBJTlNJR0hUX1JVTEVfTUVUUklDKFxcXCIke2luc3RhbmNlSGlnaExhdGVuY3lDb250cmlidXRvcnNJblRoaXNBWi5hdHRyUnVsZU5hbWV9XFxcIiwgXFxcIlVuaXF1ZUNvbnRyaWJ1dG9yc1xcXCIpIC8gSU5TSUdIVF9SVUxFX01FVFJJQyhcXFwiJHtpbnN0YW5jZXNIYW5kbGluZ1JlcXVlc3RzSW5UaGlzQVouYXR0clJ1bGVOYW1lfVxcXCIsIFxcXCJVbmlxdWVDb250cmlidXRvcnNcXFwiKWAsXG4gICAgICAgIHBlcmlvZDogbWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICB9KSxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgdGhyZXNob2xkOiBvdXRsaWVyVGhyZXNob2xkLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBtZXRyaWNEZXRhaWxzLmRhdGFwb2ludHNUb0FsYXJtLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gYWxhcm0gdGhhdCBpbmRpY2F0ZXMgdGhpcyBBWiBhcyBhbiBvdXRsaWVyXG4gICAqIGZvciBhdmFpbGFiaWxpdHkgb3IgbGF0ZW5jeS4gVGhpcyBkb2VzIG5vdCBlbnN1cmUgdGhhdCB0aGUgZXJyb3JzXG4gICAqIG9yIGxhdGVuY3kgb3JpZ2luYXRlIGZyb20gbW9yZSB0aGFuIG9uZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBvcGVyYXRpb25cbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgKiBAcGFyYW0gbG9nR3JvdXBzXG4gICAqIEBwYXJhbSBuYW1lU3VmZml4XG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBheklzT3V0bGllckZvckZhdWx0c0FsYXJtXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlJbXBhY3RBbGFybVxuICAgKiBAcGFyYW0gYXpJc091dGxpZXJGb3JMYXRlbmN5QWxhcm1cbiAgICogQHBhcmFtIGxhdGVuY3lJbXBhY3RBbGFybVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUNhbmFyeUlzb2xhdGVkQVpJbXBhY3RBbGFybShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wZXJhdGlvbk5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyxcbiAgICBjb3VudGVyOiBudW1iZXIsXG4gICAgYXpJc091dGxpZXJGb3JGYXVsdHNBbGFybTogSUFsYXJtLFxuICAgIGF2YWlsYWJpbGl0eUltcGFjdEFsYXJtOiBJQWxhcm0sXG4gICAgYXpJc091dGxpZXJGb3JMYXRlbmN5QWxhcm06IElBbGFybSxcbiAgICBsYXRlbmN5SW1wYWN0QWxhcm06IElBbGFybSxcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG9wZXJhdGlvbk5hbWUgKyAnQVonICsgY291bnRlciArICdJc29sYXRlZEltcGFjdEFsYXJtJyArIG5hbWVTdWZmaXgsXG4gICAgICB7XG4gICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHtvcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LWlzb2xhdGVkLWltcGFjdC1hbGFybWAgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgIEFsYXJtUnVsZS5hbGxPZihheklzT3V0bGllckZvckZhdWx0c0FsYXJtLCBhdmFpbGFiaWxpdHlJbXBhY3RBbGFybSksXG4gICAgICAgICAgQWxhcm1SdWxlLmFsbE9mKGF6SXNPdXRsaWVyRm9yTGF0ZW5jeUFsYXJtLCBsYXRlbmN5SW1wYWN0QWxhcm0pLFxuICAgICAgICApLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgc2VydmVyIHNpZGUgYWxhcm0gdG8gaWRlbnRpZnkgaXNvbGF0ZWQgc2luZ2xlIEFaXG4gICAqIGltcGFjdCBtZWFuaW5nIHRoYXQgdGhpcyBvbmUgQVogaXMgYWZmZWN0ZWQgYW5kIHRoZSBvdGhlcnMgYXJlbid0XG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHBhcmFtIG5hbWVTdWZmaXhcbiAgICogQHBhcmFtIGNvdW50ZXJcbiAgICogQHBhcmFtIGF6SXNPdXRsaWVyRm9yRmF1bHRzQWxhcm1cbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eUltcGFjdEFsYXJtXG4gICAqIEBwYXJhbSBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9GYXVsdHNcbiAgICogQHBhcmFtIGF6SXNPdXRsaWVyRm9yTGF0ZW5jeUFsYXJtXG4gICAqIEBwYXJhbSBsYXRlbmN5SW1wYWN0QWxhcm1cbiAgICogQHBhcmFtIG1vcmVUaGFuT25lSW5zdGFuY2VDb250cmlidXRpbmdUb0xhdGVuY3lcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTZXJ2ZXJTaWRlSXNvbGF0ZWRBWkltcGFjdEFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgb3BlcmF0aW9uTmFtZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBheklzT3V0bGllckZvckZhdWx0c0FsYXJtOiBJQWxhcm0sXG4gICAgYXZhaWxhYmlsaXR5SW1wYWN0QWxhcm06IElBbGFybSxcbiAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9GYXVsdHM6IElBbGFybSxcbiAgICBheklzT3V0bGllckZvckxhdGVuY3lBbGFybTogSUFsYXJtLFxuICAgIGxhdGVuY3lJbXBhY3RBbGFybTogSUFsYXJtLFxuICAgIG1vcmVUaGFuT25lSW5zdGFuY2VDb250cmlidXRpbmdUb0xhdGVuY3k6IElBbGFybSxcbiAgICBuYW1lU3VmZml4Pzogc3RyaW5nLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG9wZXJhdGlvbk5hbWUgKyAnQVonICsgY291bnRlciArICdJc29sYXRlZEltcGFjdEFsYXJtJyArIG5hbWVTdWZmaXgsXG4gICAgICB7XG4gICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHtvcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LWlzb2xhdGVkLWltcGFjdC1hbGFybWAgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgIG1vcmVUaGFuT25lSW5zdGFuY2VDb250cmlidXRpbmdUb0ZhdWx0cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9GYXVsdHMgPT0gbnVsbFxuICAgICAgICAgICAgPyBBbGFybVJ1bGUuYWxsT2YoXG4gICAgICAgICAgICAgIGF6SXNPdXRsaWVyRm9yRmF1bHRzQWxhcm0sXG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUltcGFjdEFsYXJtLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBBbGFybVJ1bGUuYWxsT2YoXG4gICAgICAgICAgICAgIGF6SXNPdXRsaWVyRm9yRmF1bHRzQWxhcm0sXG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUltcGFjdEFsYXJtLFxuICAgICAgICAgICAgICBtb3JlVGhhbk9uZUluc3RhbmNlQ29udHJpYnV0aW5nVG9GYXVsdHMsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIG1vcmVUaGFuT25lSW5zdGFuY2VDb250cmlidXRpbmdUb0xhdGVuY3kgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgbW9yZVRoYW5PbmVJbnN0YW5jZUNvbnRyaWJ1dGluZ1RvTGF0ZW5jeSA9PSBudWxsXG4gICAgICAgICAgICA/IEFsYXJtUnVsZS5hbGxPZihheklzT3V0bGllckZvckxhdGVuY3lBbGFybSwgbGF0ZW5jeUltcGFjdEFsYXJtKVxuICAgICAgICAgICAgOiBBbGFybVJ1bGUuYWxsT2YoXG4gICAgICAgICAgICAgIGF6SXNPdXRsaWVyRm9yTGF0ZW5jeUFsYXJtLFxuICAgICAgICAgICAgICBsYXRlbmN5SW1wYWN0QWxhcm0sXG4gICAgICAgICAgICAgIG1vcmVUaGFuT25lSW5zdGFuY2VDb250cmlidXRpbmdUb0xhdGVuY3ksXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhbGFybSB0aGF0IGZpcmVzIGlmIGVpdGhlciB0aGUgY2FuYXJ5IG9yIHRoZVxuICAgKiBzZXJ2ZXIgc2lkZSBkZXRlY3Qgc2luZ2xlIEFaIGlzb2xhdGVkIGltcGFjdFxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEBwYXJhbSBjb3VudGVyXG4gICAqIEBwYXJhbSBzZXJ2ZXJTaWRlQWxhcm1cbiAgICogQHBhcmFtIGNhbmFyeUFsYXJtXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQWdncmVnYXRlSXNvbGF0ZWRBWkltcGFjdEFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgb3BlcmF0aW9uOiBJT3BlcmF0aW9uLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgIGNvdW50ZXI6IG51bWJlcixcbiAgICBzZXJ2ZXJTaWRlQWxhcm06IElBbGFybSxcbiAgICBjYW5hcnlBbGFybTogSUFsYXJtLFxuICApOiBJQWxhcm0ge1xuICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICBzY29wZSxcbiAgICAgIG9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICsgJ0FaJyArIGNvdW50ZXIgKyAnQWdncmVnYXRlSXNvbGF0ZWRJbXBhY3RBbGFybScsXG4gICAgICB7XG4gICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgIGAtJHtvcGVyYXRpb24ub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1hZ2dyZWdhdGUtaXNvbGF0ZWQtaW1wYWN0LWFsYXJtYCxcbiAgICAgICAgYWxhcm1SdWxlOiBBbGFybVJ1bGUuYW55T2Yoc2VydmVyU2lkZUFsYXJtLCBjYW5hcnlBbGFybSksXG4gICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVnaW9uYWwgYXZhaWxhYmlsaXR5IGFsYXJtIGZvciB0aGUgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsQXZhaWxhYmlsaXR5QWxhcm0oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uQXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICBuYW1lU3VmZml4OiBzdHJpbmcsXG4gICk6IElBbGFybSB7XG4gICAgcmV0dXJuIG5ldyBBbGFybShcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lICsgJ1JlZ2lvbmFsQXZhaWxhYmlsaXR5QWxhcm0nLFxuICAgICAge1xuICAgICAgICBhbGFybU5hbWU6XG4gICAgICAgICBBd3MuUkVHSU9OICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIG1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnLXN1Y2Nlc3MtcmF0ZScgK1xuICAgICAgICAgIG5hbWVTdWZmaXgsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBtZXRyaWNEZXRhaWxzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogbWV0cmljRGV0YWlscy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgdGhyZXNob2xkOiBtZXRyaWNEZXRhaWxzLnN1Y2Nlc3NBbGFybVRocmVzaG9sZCxcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICAgICAgbWV0cmljOiBSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpY3MuY3JlYXRlUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWMoe1xuICAgICAgICAgIGxhYmVsOiBBd3MuUkVHSU9OLFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX1JBVEUsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZWdpb25hbCBsYXRlbmN5IGFsYXJtIGZvciB0aGUgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gbWV0cmljRGV0YWlsc1xuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gY291bnRlclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsTGF0ZW5jeUFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbkxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgIG5hbWVTdWZmaXg6IHN0cmluZyxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IEFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUgKyAnUmVnaW9uYWxMYXRlbmN5QWxhcm0nLFxuICAgICAge1xuICAgICAgICBhbGFybU5hbWU6XG4gICAgICAgICAgQXdzLlJFR0lPTiArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBtZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgJy1zdWNjZXNzLWxhdGVuY3knICtcbiAgICAgICAgICBuYW1lU3VmZml4LFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogbWV0cmljRGV0YWlscy5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IG1ldHJpY0RldGFpbHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIHRocmVzaG9sZDogTWV0cmljc0hlbHBlci5jb252ZXJ0RHVyYXRpb25CeVVuaXQobWV0cmljRGV0YWlscy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQsIG1ldHJpY0RldGFpbHMudW5pdCksXG4gICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgICAgIG1ldHJpYzogUmVnaW9uYWxMYXRlbmN5TWV0cmljcy5jcmVhdGVSZWdpb25hbEF2ZXJhZ2VMYXRlbmN5TWV0cmljKHtcbiAgICAgICAgICBsYWJlbDogQXdzLlJFR0lPTiwgICAgICAgIFxuICAgICAgICAgIG1ldHJpY0RldGFpbHM6IG1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZLFxuICAgICAgICAgIHN0YXRpc3RpYzogbWV0cmljRGV0YWlscy5hbGFybVN0YXRpc3RpYyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQSBjb21wb3NpdGUgYWxhcm0gY29tYmluaW5nIGxhdGVuY3kgYW5kIGF2YWlsYWJpbGl0eSBhbGFybXMgZm9yIHRoaXMgb3BlcmF0aW9uIGluIHRoZSByZWdpb25cbiAgICogYXMgbWVhc3VyZWQgZnJvbSBlaXRoZXIgdGhlIHNlcnZlciBzaWRlIG9yIGNhbmFyeVxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gbmFtZVN1ZmZpeFxuICAgKiBAcGFyYW0gcmVnaW9uYWxBdmFpbGFiaWxpdHlBbGFybVxuICAgKiBAcGFyYW0gcmVnaW9uYWxMYXRlbmN5QWxhcm1cbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVSZWdpb25hbEF2YWlsYWJpbGl0eU9yTGF0ZW5jeUltcGFjdEFsYXJtKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgb3BlcmF0aW9uTmFtZTogc3RyaW5nLFxuICAgIG5hbWVTdWZmaXg6IHN0cmluZyxcbiAgICByZWdpb25hbEF2YWlsYWJpbGl0eUFsYXJtOiBJQWxhcm0sXG4gICAgcmVnaW9uYWxMYXRlbmN5QWxhcm06IElBbGFybSxcbiAgKTogSUFsYXJtIHtcbiAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgc2NvcGUsXG4gICAgICBvcGVyYXRpb25OYW1lICsgJ1JlZ2lvbmFsQ3VzdG9tZXJFeHBlcmllbmNlQWxhcm0nLFxuICAgICAge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICBBd3MuUkVHSU9OICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIG9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgJy1jdXN0b21lci1leHBlcmllbmNlLWltYWN0JyArXG4gICAgICAgICAgbmFtZVN1ZmZpeCxcbiAgICAgICAgYWxhcm1SdWxlOiBBbGFybVJ1bGUuYW55T2YoXG4gICAgICAgICAgcmVnaW9uYWxBdmFpbGFiaWxpdHlBbGFybSxcbiAgICAgICAgICByZWdpb25hbExhdGVuY3lBbGFybSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVSZWdpb25hbEluc3RhbmNlQ29udHJpYnV0b3JzVG9IaWdoTGF0ZW5jeShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25MYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICBydWxlRGV0YWlsczogSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICApOiBDZm5JbnNpZ2h0UnVsZSB7XG4gICAgbGV0IHJ1bGVCb2R5ID0gbmV3IEluc2lnaHRSdWxlQm9keSgpO1xuICAgIHJ1bGVCb2R5LmxvZ0dyb3VwTmFtZXMgPSBydWxlRGV0YWlscy5sb2dHcm91cHMubWFwKCh4KSA9PiB4LmxvZ0dyb3VwTmFtZSk7XG4gICAgcnVsZUJvZHkuYWdncmVnYXRlT24gPSAnQ291bnQnO1xuICAgIHJ1bGVCb2R5LmxvZ0Zvcm1hdCA9ICdKU09OJztcbiAgICBydWxlQm9keS5jb250cmlidXRpb24gPSB7XG4gICAgICBrZXlzOiBbcnVsZURldGFpbHMuaW5zdGFuY2VJZEpzb25QYXRoXSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5zdWNjZXNzTGF0ZW5jeU1ldHJpY0pzb25QYXRoLFxuICAgICAgICAgIEdyZWF0ZXJUaGFuOiBNZXRyaWNzSGVscGVyLmNvbnZlcnREdXJhdGlvbkJ5VW5pdChtZXRyaWNEZXRhaWxzLnN1Y2Nlc3NBbGFybVRocmVzaG9sZCwgbWV0cmljRGV0YWlscy51bml0KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5vcGVyYXRpb25OYW1lSnNvblBhdGgsXG4gICAgICAgICAgSW46IFttZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWVdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgSUNvbnRyaWJ1dGlvbkRlZmluaXRpb247XG5cbiAgICByZXR1cm4gbmV3IENmbkluc2lnaHRSdWxlKHNjb3BlLCAnUmVnaW9uUGVySW5zdGFuY2VIaWdoTGF0ZW5jeVJ1bGUnLCB7XG4gICAgICBydWxlTmFtZTpcbiAgICAgICBBd3MuUkVHSU9OICtcbiAgICAgICAgYC0ke21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1wZXItaW5zdGFuY2UtaGlnaC1sYXRlbmN5LXNlcnZlcmAsXG4gICAgICBydWxlU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgIHJ1bGVCb2R5OiBydWxlQm9keS50b0pzb24oKSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVSZWdpb25hbEluc3RhbmNlQ29udHJpYnV0b3JzVG9GYXVsdHMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBtZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTWV0cmljRGV0YWlscyxcbiAgICBydWxlRGV0YWlsczogSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICApOiBDZm5JbnNpZ2h0UnVsZSB7XG4gICAgbGV0IHJ1bGVCb2R5ID0gbmV3IEluc2lnaHRSdWxlQm9keSgpO1xuICAgIHJ1bGVCb2R5LmxvZ0dyb3VwTmFtZXMgPSBydWxlRGV0YWlscy5sb2dHcm91cHMubWFwKCh4KSA9PiB4LmxvZ0dyb3VwTmFtZSk7XG4gICAgcnVsZUJvZHkuYWdncmVnYXRlT24gPSAnQ291bnQnO1xuICAgIHJ1bGVCb2R5LmxvZ0Zvcm1hdCA9ICdKU09OJztcbiAgICBydWxlQm9keS5jb250cmlidXRpb24gPSB7XG4gICAgICBrZXlzOiBbcnVsZURldGFpbHMuaW5zdGFuY2VJZEpzb25QYXRoXSxcbiAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE1hdGNoOiBydWxlRGV0YWlscy5mYXVsdE1ldHJpY0pzb25QYXRoLFxuICAgICAgICAgIEdyZWF0ZXJUaGFuOiAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgTWF0Y2g6IHJ1bGVEZXRhaWxzLm9wZXJhdGlvbk5hbWVKc29uUGF0aCxcbiAgICAgICAgICBJbjogW21ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQ29udHJpYnV0aW9uRGVmaW5pdGlvbjtcblxuICAgIHJldHVybiBuZXcgQ2ZuSW5zaWdodFJ1bGUoc2NvcGUsICdSZWdpb25QZXJJbnN0YW5jZUVycm9yUnVsZScsIHtcbiAgICAgIHJ1bGVOYW1lOlxuICAgICAgIEF3cy5SRUdJT04gK1xuICAgICAgICBgLSR7bWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXBlci1pbnN0YW5jZS1mYXVsdHMtc2VydmVyYCxcbiAgICAgIHJ1bGVTdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgcnVsZUJvZHk6IHJ1bGVCb2R5LnRvSnNvbigpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -4,6 +4,7 @@ exports.CanaryOperationZonalAlarmsAndRules = void 0;
4
4
  const AvailabilityAndLatencyAlarmsAndRules_1 = require("./AvailabilityAndLatencyAlarmsAndRules");
5
5
  const BaseOperationZonalAlarmsAndRules_1 = require("./BaseOperationZonalAlarmsAndRules");
6
6
  const OutlierDetectionAlgorithm_1 = require("../utilities/OutlierDetectionAlgorithm");
7
+ const LatencyOutlierMetricAggregation_1 = require("../outlier-detection/LatencyOutlierMetricAggregation");
7
8
  /**
8
9
  * Creates the alarms and rules for a particular operation as measured by the canary
9
10
  */
@@ -35,11 +36,11 @@ class CanaryOperationZonalAlarmsAndRules extends BaseOperationZonalAlarmsAndRule
35
36
  this.availabilityZoneIsOutlierForLatency =
36
37
  AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createZonalHighLatencyOutlierAlarm(this, operation.canaryMetricDetails.canaryLatencyMetricDetails, availabilityZoneId, operation.service.availabilityZoneNames.map((az) => {
37
38
  return props.operationAlarmsAndRulesProps.azMapper.availabilityZoneIdFromAvailabilityZoneLetter(az.substring(az.length - 1));
38
- }), props.operationAlarmsAndRulesProps.latencyOutlierThreshold, props.operationAlarmsAndRulesProps.outlierDetectionFunction, props.operationAlarmsAndRulesProps.latencyOutlierDetectionAlgorithm, props.counter, props.nameSuffix);
39
+ }), props.operationAlarmsAndRulesProps.latencyOutlierThreshold, props.operationAlarmsAndRulesProps.outlierDetectionFunction, props.operationAlarmsAndRulesProps.latencyOutlierMetricAggregation || LatencyOutlierMetricAggregation_1.LatencyOutlierMetricAggregation.COUNT, props.operationAlarmsAndRulesProps.latencyOutlierDetectionAlgorithm, props.counter, props.nameSuffix);
39
40
  }
40
41
  this.isolatedImpactAlarm =
41
42
  AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createCanaryIsolatedAZImpactAlarm(this, operation.operationName, availabilityZoneId, props.counter, this.availabilityZoneIsOutlierForFaults, this.availabilityAlarm, this.availabilityZoneIsOutlierForLatency, this.latencyAlarm, props.nameSuffix);
42
43
  }
43
44
  }
44
45
  exports.CanaryOperationZonalAlarmsAndRules = CanaryOperationZonalAlarmsAndRules;
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9DYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLGlHQUE4RjtBQUM5Rix5RkFBc0Y7QUFHdEYsc0ZBQW1GO0FBR25GOztHQUVHO0FBQ0gsTUFBYSxrQ0FDWCxTQUFRLG1FQUFnQztJQTZCeEMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBOEM7UUFFOUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFFBQVEsR0FBVyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUNuRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDcEMsQ0FBQztRQUNGLElBQUksa0JBQWtCLEdBQ3BCLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsNENBQTRDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckcsSUFBSSxTQUFTLEdBQWUsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQztRQUV6RSxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLDJFQUFvQyxDQUFDLDRCQUE0QixDQUMvRCxJQUFJLEVBQ0osU0FBUyxDQUFDLG1CQUFvQixDQUFDLCtCQUErQixFQUM5RCxLQUFLLENBQUMsZ0JBQWdCLEVBQ3RCLGtCQUFrQixFQUNsQixLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7UUFDSixJQUFJLENBQUMsWUFBWTtZQUNmLDJFQUFvQyxDQUFDLHVCQUF1QixDQUMxRCxJQUFJLEVBQ0osU0FBUyxDQUFDLG1CQUFvQixDQUFDLDBCQUEwQixFQUN6RCxLQUFLLENBQUMsZ0JBQWdCLEVBQ3RCLGtCQUFrQixFQUNsQixLQUFLLENBQUMsT0FB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dkMsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsbUNBQW1DLEVBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUEzSUQsZ0ZBMklDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgSUFsYXJtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0F2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBCYXNlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSUNhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IENhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB9IGZyb20gJy4vcHJvcHMvQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzJztcbmltcG9ydCB7IE91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0gfSBmcm9tICcuLi91dGlsaXRpZXMvT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvSU9wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYWxhcm1zIGFuZCBydWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG9wZXJhdGlvbiBhcyBtZWFzdXJlZCBieSB0aGUgY2FuYXJ5XG4gKi9cbmV4cG9ydCBjbGFzcyBDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzXG4gIGV4dGVuZHMgQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNcbiAgaW1wbGVtZW50cyBJQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyB7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJpbGl0eSBhbGFybSBmb3IgdGhpcyBvcGVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eUFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIExhdGVuY3kgYWxhcm0gZm9yIHRoaXMgb3BlcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBsYXRlbmN5QWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogQWxhcm0gdGhhdCB0cmlnZ2VycyBpZiBlaXRoZXIgbGF0ZW5jeSBvciBhdmFpbGFiaWxpdHkgYnJlYWNoIHRoZSBzcGVjaWZpZWRcbiAgICogdGhyZXNob2xkIGluIHRoaXMgQVogYW5kIHRoZSBBWiBpcyBhbiBvdXRsaWVyIGZvciBmYXVsdHMgb3IgbGF0ZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgaXNvbGF0ZWRJbXBhY3RBbGFybTogSUFsYXJtO1xuXG4gIC8qKlxuICAgKiBBbGFybSB0aGF0IGluZGljYXRlcyB0aGF0IHRoaXMgQVogaXMgYW4gb3V0bGllciBmb3IgZmF1bHQgcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckZhdWx0czogSUFsYXJtO1xuXG4gIC8qKlxuICAgKiBBbGFybSB0aGF0IGluZGljYXRlcyB0aGlzIEFaIGlzIGFuIG91dGxpZXIgZm9yIGhpZ2ggbGF0ZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckxhdGVuY3k6IElBbGFybTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGxldCBhekxldHRlcjogc3RyaW5nID0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoXG4gICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUubGVuZ3RoIC0gMSxcbiAgICApO1xuICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyA9XG4gICAgICBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcbiAgICBcbiAgICBsZXQgb3BlcmF0aW9uOiBJT3BlcmF0aW9uID0gcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5vcGVyYXRpb247XG5cbiAgICB0aGlzLmF2YWlsYWJpbGl0eUFsYXJtID1cbiAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlWm9uYWxBdmFpbGFiaWxpdHlBbGFybShcbiAgICAgIHRoaXMsXG4gICAgICBvcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscyEuY2FuYXJ5QXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICApO1xuICB0aGlzLmxhdGVuY3lBbGFybSA9XG4gICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmNyZWF0ZVpvbmFsTGF0ZW5jeUFsYXJtKFxuICAgICAgdGhpcyxcbiAgICAgIG9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzIS5jYW5hcnlMYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICApO1xuICAgIFxuICAgIGlmIChwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmF2YWlsYWJpbGl0eU91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0gPT0gT3V0bGllckRldGVjdGlvbkFsZ29yaXRobS5TVEFUSUMpIHtcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckZhdWx0cyA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVab25hbEZhdWx0UmF0ZVN0YXRpY091dGxpZXJBbGFybUZvckNhbmFyaWVzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgb3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHMhLmNhbmFyeUF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgb3BlcmF0aW9uLnNlcnZpY2UuYXZhaWxhYmlsaXR5Wm9uZU5hbWVzLFxuICAgICAgICAgIHByb3BzLmNvdW50ZXIsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5hdmFpbGFiaWxpdHlPdXRsaWVyVGhyZXNob2xkLFxuICAgICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckZhdWx0cyA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVab25hbEZhdWx0UmF0ZU91dGxpZXJBbGFybShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzIS5jYW5hcnlBdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBvcGVyYXRpb24uc2VydmljZS5hdmFpbGFiaWxpdHlab25lTmFtZXMubWFwKChheikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMuYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoXG4gICAgICAgICAgICAgIGF6LnN1YnN0cmluZyhhei5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5hdmFpbGFiaWxpdHlPdXRsaWVyVGhyZXNob2xkLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMub3V0bGllckRldGVjdGlvbkZ1bmN0aW9uISxcbiAgICAgICAgICBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmF2YWlsYWJpbGl0eU91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0sXG4gICAgICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgICAgICBwcm9wcy5uYW1lU3VmZml4LFxuICAgICAgICApOyAgXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMubGF0ZW5jeU91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0gPT0gT3V0bGllckRldGVjdGlvbkFsZ29yaXRobS5TVEFUSUMpIHtcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckxhdGVuY3kgPVxuICAgICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlWm9uYWxIaWdoTGF0ZW5jeVN0YXRpY091dGxpZXJBbGFybUZvckNhbmFyaWVzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgb3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHMhLmNhbmFyeUxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIG9wZXJhdGlvbi5zZXJ2aWNlLmF2YWlsYWJpbGl0eVpvbmVOYW1lcyxcbiAgICAgICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMubGF0ZW5jeU91dGxpZXJUaHJlc2hvbGQsXG4gICAgICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdmFpbGFiaWxpdHlab25lSXNPdXRsaWVyRm9yTGF0ZW5jeSA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVab25hbEhpZ2hMYXRlbmN5T3V0bGllckFsYXJtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgb3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHMhLmNhbmFyeUxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBvcGVyYXRpb24uc2VydmljZS5hdmFpbGFiaWxpdHlab25lTmFtZXMubWFwKChheikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMuYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoXG4gICAgICAgICAgICAgIGF6LnN1YnN0cmluZyhhei5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5sYXRlbmN5T3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgICBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLm91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbiEsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5sYXRlbmN5T3V0bGllckRldGVjdGlvbkFsZ29yaXRobSxcbiAgICAgICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pc29sYXRlZEltcGFjdEFsYXJtID1cbiAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVDYW5hcnlJc29sYXRlZEFaSW1wYWN0QWxhcm0oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG9wZXJhdGlvbi5vcGVyYXRpb25OYW1lLFxuICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgIHByb3BzLmNvdW50ZXIsXG4gICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckZhdWx0cyxcbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlBbGFybSxcbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlab25lSXNPdXRsaWVyRm9yTGF0ZW5jeSxcbiAgICAgICAgdGhpcy5sYXRlbmN5QWxhcm0sXG4gICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICApO1xuICB9XG59XG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9DYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLGlHQUE4RjtBQUM5Rix5RkFBc0Y7QUFHdEYsc0ZBQW1GO0FBRW5GLDBHQUF1RztBQUV2Rzs7R0FFRztBQUNILE1BQWEsa0NBQ1gsU0FBUSxtRUFBZ0M7SUE2QnhDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQThDO1FBRTlDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxRQUFRLEdBQVcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FDbkQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3BDLENBQUM7UUFDRixJQUFJLGtCQUFrQixHQUNwQixLQUFLLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJHLElBQUksU0FBUyxHQUFlLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUM7UUFFekUsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QiwyRUFBb0MsQ0FBQyw0QkFBNEIsQ0FDL0QsSUFBSSxFQUNKLFNBQVMsQ0FBQyxtQkFBb0IsQ0FBQywrQkFBK0IsRUFDOUQsS0FBSyxDQUFDLGdCQUFnQixFQUN0QixrQkFBa0IsRUFDbEIsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsVUFBVSxDQUNqQixDQUFDO1FBQ0osSUFBSSxDQUFDLFlBQVk7WUFDZiwyRUFBb0MsQ0FBQyx1QkFBdUIsQ0FDMUQsSUFBSSxFQUNKLFNBQVMsQ0FBQyxtQkFBb0IsQ0FBQywwQkFBMEIsRUFDekQsS0FBSyxDQUFDLGdCQUFnQixFQUN0QixrQkFBa0IsRUFDbEIs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LENBQUMsYUFBYSxFQUN2QixrQkFBa0IsRUFDbEIsS0FBSyxDQUFDLE9BQU8sRUFDYixJQUFJLENBQUMsa0NBQWtDLEVBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLG1DQUFtQyxFQUN4QyxJQUFJLENBQUMsWUFBWSxFQUNqQixLQUFLLENBQUMsVUFBVSxDQUNqQixDQUFDO0lBQ04sQ0FBQztDQUNGO0FBNUlELGdGQTRJQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElBbGFybSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9BdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0Jhc2VPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzUHJvcHMgfSBmcm9tICcuL3Byb3BzL0NhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyc7XG5pbXBvcnQgeyBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtIH0gZnJvbSAnLi4vdXRpbGl0aWVzL091dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0nO1xuaW1wb3J0IHsgSU9wZXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL0lPcGVyYXRpb24nO1xuaW1wb3J0IHsgTGF0ZW5jeU91dGxpZXJNZXRyaWNBZ2dyZWdhdGlvbiB9IGZyb20gJy4uL291dGxpZXItZGV0ZWN0aW9uL0xhdGVuY3lPdXRsaWVyTWV0cmljQWdncmVnYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGFsYXJtcyBhbmQgcnVsZXMgZm9yIGEgcGFydGljdWxhciBvcGVyYXRpb24gYXMgbWVhc3VyZWQgYnkgdGhlIGNhbmFyeVxuICovXG5leHBvcnQgY2xhc3MgQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1xuICBleHRlbmRzIEJhc2VPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzXG4gIGltcGxlbWVudHMgSUNhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMge1xuXG4gIC8qKlxuICAgKiBBdmFpbGFiaWxpdHkgYWxhcm0gZm9yIHRoaXMgb3BlcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlBbGFybTogSUFsYXJtO1xuXG4gIC8qKlxuICAgKiBMYXRlbmN5IGFsYXJtIGZvciB0aGlzIG9wZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbGF0ZW5jeUFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRoYXQgdHJpZ2dlcnMgaWYgZWl0aGVyIGxhdGVuY3kgb3IgYXZhaWxhYmlsaXR5IGJyZWFjaCB0aGUgc3BlY2lmaWVkXG4gICAqIHRocmVzaG9sZCBpbiB0aGlzIEFaIGFuZCB0aGUgQVogaXMgYW4gb3V0bGllciBmb3IgZmF1bHRzIG9yIGxhdGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGlzb2xhdGVkSW1wYWN0QWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogQWxhcm0gdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIEFaIGlzIGFuIG91dGxpZXIgZm9yIGZhdWx0IHJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JGYXVsdHM6IElBbGFybTtcblxuICAvKipcbiAgICogQWxhcm0gdGhhdCBpbmRpY2F0ZXMgdGhpcyBBWiBpcyBhbiBvdXRsaWVyIGZvciBoaWdoIGxhdGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JMYXRlbmN5OiBJQWxhcm07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgYXpMZXR0ZXI6IHN0cmluZyA9IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUuc3Vic3RyaW5nKFxuICAgICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEsXG4gICAgKTtcbiAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcgPVxuICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5hek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG4gICAgXG4gICAgbGV0IG9wZXJhdGlvbjogSU9wZXJhdGlvbiA9IHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMub3BlcmF0aW9uO1xuXG4gICAgdGhpcy5hdmFpbGFiaWxpdHlBbGFybSA9XG4gICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmNyZWF0ZVpvbmFsQXZhaWxhYmlsaXR5QWxhcm0oXG4gICAgICB0aGlzLFxuICAgICAgb3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHMhLmNhbmFyeUF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMsXG4gICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgKTtcbiAgdGhpcy5sYXRlbmN5QWxhcm0gPVxuICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVab25hbExhdGVuY3lBbGFybShcbiAgICAgIHRoaXMsXG4gICAgICBvcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscyEuY2FuYXJ5TGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgKTtcbiAgICBcbiAgICBpZiAocHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5hdmFpbGFiaWxpdHlPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtID09IE91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0uU1RBVElDKSB7XG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JGYXVsdHMgPVxuICAgICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlWm9uYWxGYXVsdFJhdGVTdGF0aWNPdXRsaWVyQWxhcm1Gb3JDYW5hcmllcyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzIS5jYW5hcnlBdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIG9wZXJhdGlvbi5zZXJ2aWNlLmF2YWlsYWJpbGl0eVpvbmVOYW1lcyxcbiAgICAgICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMuYXZhaWxhYmlsaXR5T3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgICBwcm9wcy5uYW1lU3VmZml4LFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JGYXVsdHMgPVxuICAgICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlWm9uYWxGYXVsdFJhdGVPdXRsaWVyQWxhcm0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBvcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscyEuY2FuYXJ5QXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgb3BlcmF0aW9uLnNlcnZpY2UuYXZhaWxhYmlsaXR5Wm9uZU5hbWVzLm1hcCgoYXopID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKFxuICAgICAgICAgICAgICBhei5zdWJzdHJpbmcoYXoubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMuYXZhaWxhYmlsaXR5T3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgICBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLm91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbiEsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5hdmFpbGFiaWxpdHlPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtLFxuICAgICAgICAgIHByb3BzLmNvdW50ZXIsXG4gICAgICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICAgICAgKTsgIFxuICAgIH1cblxuICAgIGlmIChwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmxhdGVuY3lPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtID09IE91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0uU1RBVElDKSB7XG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JMYXRlbmN5ID1cbiAgICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmNyZWF0ZVpvbmFsSGlnaExhdGVuY3lTdGF0aWNPdXRsaWVyQWxhcm1Gb3JDYW5hcmllcyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzIS5jYW5hcnlMYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBvcGVyYXRpb24uc2VydmljZS5hdmFpbGFiaWxpdHlab25lTmFtZXMsXG4gICAgICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgICAgICBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmxhdGVuY3lPdXRsaWVyVGhyZXNob2xkLFxuICAgICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckxhdGVuY3kgPVxuICAgICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlWm9uYWxIaWdoTGF0ZW5jeU91dGxpZXJBbGFybShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzIS5jYW5hcnlMYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgb3BlcmF0aW9uLnNlcnZpY2UuYXZhaWxhYmlsaXR5Wm9uZU5hbWVzLm1hcCgoYXopID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy5vcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLmF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKFxuICAgICAgICAgICAgICBhei5zdWJzdHJpbmcoYXoubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMubGF0ZW5jeU91dGxpZXJUaHJlc2hvbGQsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5vdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb24hLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMubGF0ZW5jeU91dGxpZXJNZXRyaWNBZ2dyZWdhdGlvbiB8fCBMYXRlbmN5T3V0bGllck1ldHJpY0FnZ3JlZ2F0aW9uLkNPVU5ULFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMubGF0ZW5jeU91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0sXG4gICAgICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgICAgICBwcm9wcy5uYW1lU3VmZml4LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaXNvbGF0ZWRJbXBhY3RBbGFybSA9XG4gICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlQ2FuYXJ5SXNvbGF0ZWRBWkltcGFjdEFsYXJtKFxuICAgICAgICB0aGlzLFxuICAgICAgICBvcGVyYXRpb24ub3BlcmF0aW9uTmFtZSxcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JGYXVsdHMsXG4gICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5QWxhcm0sXG4gICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckxhdGVuY3ksXG4gICAgICAgIHRoaXMubGF0ZW5jeUFsYXJtLFxuICAgICAgICBwcm9wcy5uYW1lU3VmZml4LFxuICAgICAgKTtcbiAgfVxufVxuIl19