@cdklabs/multi-az-observability 0.0.1-alpha.13 → 0.0.1-alpha.14

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.
@@ -682,7 +682,8 @@ class ApplicationLoadBalancerMetrics {
682
682
  static getTotalAlbLatencyPerZone(albs, statistic, period, azMapper) {
683
683
  let latencyPerZone = {};
684
684
  let keyprefix = MetricsHelper_1.MetricsHelper.nextChar();
685
- let requestCountsPerAZ = {};
685
+ //let requestCountsPerAZ: {[key: string]: IMetric[]} = {};
686
+ let requestCountsPerAZMetricKeys = {};
686
687
  let weightedLatencyPerAZ = {};
687
688
  albs.forEach((alb) => {
688
689
  alb.vpc.availabilityZones.forEach((availabilityZone) => {
@@ -690,8 +691,11 @@ class ApplicationLoadBalancerMetrics {
690
691
  if (!(azLetter in weightedLatencyPerAZ)) {
691
692
  weightedLatencyPerAZ[azLetter] = [];
692
693
  }
693
- if (!(azLetter in requestCountsPerAZ)) {
694
- requestCountsPerAZ[azLetter] = [];
694
+ //if (!(azLetter in requestCountsPerAZ)) {
695
+ // requestCountsPerAZ[azLetter] = [];
696
+ //}
697
+ if (!(azLetter in requestCountsPerAZMetricKeys)) {
698
+ requestCountsPerAZMetricKeys[azLetter] = [];
695
699
  }
696
700
  let availabilityZoneId = azMapper.availabilityZoneIdFromAvailabilityZoneLetter(azLetter);
697
701
  let latency = alb.metrics.targetResponseTime({
@@ -703,7 +707,7 @@ class ApplicationLoadBalancerMetrics {
703
707
  label: availabilityZoneId,
704
708
  period: period,
705
709
  statistic: statistic,
706
- unit: aws_cloudwatch_1.Unit.MILLISECONDS
710
+ unit: aws_cloudwatch_1.Unit.SECONDS
707
711
  });
708
712
  let requestCount = alb.metrics.requestCount({
709
713
  dimensionsMap: {
@@ -726,7 +730,8 @@ class ApplicationLoadBalancerMetrics {
726
730
  label: availabilityZoneId
727
731
  });
728
732
  weightedLatencyPerAZ[azLetter].push(weightedLatency);
729
- requestCountsPerAZ[azLetter].push(requestCount);
733
+ //requestCountsPerAZ[azLetter].push(requestCount);
734
+ requestCountsPerAZMetricKeys[azLetter].push(`${keyprefix}2`);
730
735
  keyprefix = MetricsHelper_1.MetricsHelper.nextChar(keyprefix);
731
736
  });
732
737
  });
@@ -739,12 +744,14 @@ class ApplicationLoadBalancerMetrics {
739
744
  usingMetrics[`${keyprefix}${index}`] = metric;
740
745
  });
741
746
  let numerator = "(" + Object.keys(usingMetrics).join("+") + ")";
742
- let index = Object.keys(usingMetrics).length;
747
+ //let index = Object.keys(usingMetrics).length;
743
748
  keyprefix = MetricsHelper_1.MetricsHelper.nextChar(keyprefix);
744
- requestCountsPerAZ[azLetter].forEach((metric, index) => {
745
- usingMetrics[`${keyprefix}${index}`] = metric;
746
- });
747
- let denominator = "(" + Object.keys(usingMetrics).slice(index).join("+") + ")";
749
+ // TODO: We're duplicating the same metric with 2 different keys for request count
750
+ //requestCountsPerAZ[azLetter].forEach((metric: IMetric, index: number) => {
751
+ // usingMetrics[`${keyprefix}${index}`] = metric;
752
+ //});
753
+ //let denominator: string = "(" + Object.keys(usingMetrics).slice(index).join("+") + ")";
754
+ let denominator = "(" + requestCountsPerAZMetricKeys[azLetter].join("+") + ")";
748
755
  /**
749
756
  * We want to calculate this formula
750
757
  *
@@ -754,7 +761,7 @@ class ApplicationLoadBalancerMetrics {
754
761
  * latency per AZ
755
762
  */
756
763
  latencyPerZone[azLetter] = new aws_cloudwatch_1.MathExpression({
757
- expression: numerator + "/" + denominator,
764
+ expression: "(" + numerator + "/" + denominator + ") * 1000",
758
765
  usingMetrics: usingMetrics,
759
766
  label: availabilityZoneId,
760
767
  period: period
@@ -835,4 +842,4 @@ class ApplicationLoadBalancerMetrics {
835
842
  }
836
843
  }
837
844
  exports.ApplicationLoadBalancerMetrics = ApplicationLoadBalancerMetrics;
838
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJNZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21ldHJpY3MvQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJNZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtEQUFrRjtBQUNsRix1RkFBa0o7QUFDbEosZ0ZBQTZFO0FBRzdFLDZDQUE0QztBQUk1Qyw4REFBMkQ7QUFFM0QsTUFBYSw4QkFBOEI7SUFFdkM7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQ3hCLEtBQXFEO1FBRXJELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQ3ZDO1lBQ0UsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLFlBQVksRUFBRyxLQUFLLENBQUMsR0FBMkM7cUJBQzdELG9CQUFvQjthQUN4QjtZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLHVCQUF1QjtZQUM3RyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLElBQUksRUFBRSxxQkFBSSxDQUFDLE9BQU87U0FDbkIsQ0FDRixDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsd0NBQXdDLENBQzNDLElBQWdDLEVBQ2hDLEtBQTBEO1FBRTFELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FB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T0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLDRCQUE0QixDQUNqQyxHQUE2QixFQUM3QixnQkFBd0IsRUFDeEIsa0JBQTBCLEVBQzFCLE1BQWdCLEVBQ2hCLHlCQUFtQztRQUVuQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsYUFBYSxFQUFDO2dCQUNWLFlBQVksRUFBRyxHQUEyQyxDQUFDLG9CQUFvQjtnQkFDL0UsZ0JBQWdCLEVBQUUsZ0JBQWdCO2FBQ3JDO1lBQ0QsS0FBSyxFQUFFLGtCQUFrQixHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDM0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQywrQkFBK0IsQ0FDbEMsR0FBNkIsRUFDN0IsTUFBZ0IsRUFDaEIsa0JBQTRCO1FBRTVCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDOUIsTUFBTSxFQUFFLE1BQU07WUFDZCxhQUFhLEVBQUM7Z0JBQ1YsWUFBWSxFQUFHLEdBQTJDLENBQUMsb0JBQW9CO2FBQ2xGO1lBQ0QsS0FBSyxFQUFFLGlCQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDNUUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBcGxDRCx3RUFvbENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU1ldHJpYywgTWF0aEV4cHJlc3Npb24sIFN0YXRzLCBVbml0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCI7XG5pbXBvcnQgeyBCYXNlTG9hZEJhbGFuY2VyLCBIdHRwQ29kZUVsYiwgSHR0cENvZGVUYXJnZXQsIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciwgSUxvYWRCYWxhbmNlclYyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9BdmFpbGFiaWxpdHlNZXRyaWNUeXBlXCI7XG5pbXBvcnQgeyBab25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSBcIi4uL2Jhc2ljX29ic2VydmFiaWxpdHkvcHJvcHMvWm9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckxhdGVuY3lNZXRyaWNQcm9wc1wiO1xuaW1wb3J0IHsgWm9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIH0gZnJvbSBcIi4uL2Jhc2ljX29ic2VydmFiaWxpdHkvcHJvcHMvWm9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzXCI7XG5pbXBvcnQgeyBBd3MsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSZWdpb25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMgfSBmcm9tIFwiLi4vYmFzaWNfb2JzZXJ2YWJpbGl0eS9wcm9wcy9SZWdpb25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyQXZhaWxhYmlsaXR5TWV0cmljUHJvcHNcIjtcbmltcG9ydCB7IFJlZ2lvbmFsQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tIFwiLi4vYmFzaWNfb2JzZXJ2YWJpbGl0eS9wcm9wcy9SZWdpb25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyTGF0ZW5jeU1ldHJpY1Byb3BzXCI7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlab25lTWFwcGVyIH0gZnJvbSBcIi4uL2F6bWFwcGVyL0F2YWlsYWJpbGl0eVpvbmVNYXBwZXJcIjtcbmltcG9ydCB7IE1ldHJpY3NIZWxwZXIgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL01ldHJpY3NIZWxwZXJcIjtcblxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyTWV0cmljcyB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBUYXJnZXRSZXNwb25zZVRpbWUgbGF0ZW5jeSBmb3IgdGhlIEFMQlxuICAgICAqIHRhcmdldHNcbiAgICAgKiBAcGFyYW0gcHJvcHMgVGhlIHJlcXVlc3QgcHJvcHNcbiAgICAgKiBAcmV0dXJucyBUaGUgVGFyZ2V0UmVzcG9uc2VUaW1lIG1ldHJpYyBmb3IgdGhlIEFMQiBpbiB0aGUgc3BlY2lmaWVkIEFaXG4gICAgICovXG4gICAgc3RhdGljIGdldFBlckFaTGF0ZW5jeU1ldHJpYyhcbiAgICAgICAgcHJvcHM6IFpvbmFsQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJMYXRlbmN5TWV0cmljUHJvcHNcbiAgICApOiBJTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmFsYi5tZXRyaWNzLnRhcmdldFJlc3BvbnNlVGltZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAocHJvcHMuYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkID8gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkIDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSArIFwiLXRhcmdldC1yZXNwb25zZS10aW1lXCIsXG4gICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IHByb3BzLnN0YXRpc3RpYyxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5TRUNPTkRTXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGVpdGhlciB0aGUgc3VjY2Vzc2Z1bCwgZmF1bHQsIG9yIHRvdGFsIGNvdW50IG1ldHJpY3NcbiAgICAgKiBmb3IgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0cyBhY3Jvc3MgYWxsIG9mIHRoZSBwcm92aWRlZCBcbiAgICAgKiBBTEJzIGluIGVhY2ggQVouXG4gICAgICogQHBhcmFtIGFsYnMgVGhlIEFMQnMgdG8gYWdncmVnYXRlIHRoZSBjb3VudCBvZlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcmVxdWVzdCBwcm9wc1xuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBjb3VudCBvZiBzdWNlc3MsIGZhdWx0cywgb3IgdG90YWwgcmVxdWVzdHMgaW4gdGhlIHNwZWNpZmllZCBBWlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQZXJBWkF2YWlsYWJpbGl0eU1ldHJpY0NvdW50QWdncmVnYXRlKFxuICAgICAgICBhbGJzOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJbXSxcbiAgICAgICAgcHJvcHM6IFpvbmFsQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJBdmFpbGFiaWxpdHlNZXRyaWNQcm9wc1xuICAgICk6IElNZXRyaWMge1xuICAgICAgICBsZXQga2V5cHJlZml4ID0gcHJvcHMua2V5cHJlZml4ID8gcHJvcHMua2V5cHJlZml4IDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcocHJvcHMuYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcblxuICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuICAgICAgICBsZXQgbWV0cmljczogSU1ldHJpY1tdID0gW107XG5cbiAgICAgICAgYWxicy5mb3JFYWNoKChhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikgPT4ge1xuICAgICAgICAgICAgbGV0IHRhcmdldDV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgICAgICAgIEh0dHBDb2RlVGFyZ2V0LlRBUkdFVF81WFhfQ09VTlQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gKyBcIi10YXJnZXQtNXh4XCIsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgbGV0IGVsYjV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl81WFhfQ09VTlQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gKyBcIi1lbGItNXh4XCIsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICBcbiAgICAgICAgICAgICAgbGV0IHJlcXVlc3RDb3VudDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLnJlcXVlc3RDb3VudChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArIFwiLVwiICsgYWxiLmxvYWRCYWxhbmNlckFybiArIFwiLXJlcXVlc3QtY291bnRcIixcbiAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgXG4gICAgICAgICAgICAgIGxldCB0YXJnZXQyeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZVRhcmdldChcbiAgICAgICAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfMlhYX0NPVU5ULFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuICsgXCItdGFyZ2V0LTJ4eFwiLFxuICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICBcbiAgICAgICAgICAgICAgbGV0IGVsYjN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl8zWFhfQ09VTlQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gKyBcIi1lbGItM3h4XCIsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgICAgICAgICBsZXQgdGFyZ2V0M3h4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzNYWF9DT1VOVCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArIFwiLVwiICsgYWxiLmxvYWRCYWxhbmNlckFybiArIFwiLXRhcmdldC0zeHhcIixcbiAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgIFxuICAgICAgICAgICAgICBzd2l0Y2gocHJvcHMubWV0cmljVHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UOlxuICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0NXh4O1xuICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gZWxiNXh4O1xuICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGBGSUxMKCR7a2V5cHJlZml4fTEsIDApICsgRklMTCgke2tleXByZWZpeH0yLCAwKWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuICsgXCItZmF1bHQtY291bnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UOlxuICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0Mnh4O1xuICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gdGFyZ2V0M3h4O1xuICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9M2BdID0gZWxiM3h4O1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLnB1c2gobmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYCR7a2V5cHJlZml4fTErJHtrZXlwcmVmaXh9Miske2tleXByZWZpeH0zYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gKyBcIi1zdWNjZXNzLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlJFUVVFU1RfQ09VTlQ6XG4gICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLnB1c2gocmVxdWVzdENvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBvbmx5IHN1cHBvcnRzIENPVU5UIGF2YWlsYWJpbGl0eSBtZXRyaWNzLlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBrZXlwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKGtleXByZWZpeCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1ldHJpY3MuZm9yRWFjaCgobWV0cmljOiBJTWV0cmljLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fSR7aW5kZXh9YF0gPSBtZXRyaWM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKFwiK1wiKSxcbiAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBHZXRzIGEgc3BlY2lmaWVkIGF2YWlsYWJpbGl0eSBtZXRyaWMgaW4gdGhlIHNwZWNpZmllZCBBWiBmb3IgdGhlIEFMQlxuICAgICAqIEBwYXJhbSBhbGIgVGhlIEFMQlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcmVxdWVzdCBwcm9wc1xuICAgICAqIEByZXR1cm5zIFRoZSBtZXRyaWMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgc3RhdGljIGdldFBlckFaQXZhaWxhYmlsaXR5TWV0cmljKFxuICAgICAgICBhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciwgXG4gICAgICAgIHByb3BzOiBab25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyQXZhaWxhYmlsaXR5TWV0cmljUHJvcHNcbiAgICApOiBJTWV0cmljIHtcbiAgICAgICAgbGV0IGtleXByZWZpeCA9IHByb3BzLmtleXByZWZpeCA/IHByb3BzLmtleXByZWZpeCA6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUuc3Vic3RyaW5nKHByb3BzLmF2YWlsYWJpbGl0eVpvbmUubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgbGV0IHRhcmdldDV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgIEh0dHBDb2RlVGFyZ2V0LlRBUkdFVF81WFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi10YXJnZXQtNXh4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICBcbiAgICAgICAgbGV0IGVsYjV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl81WFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1lbGItNXh4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHJlcXVlc3RDb3VudDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLnJlcXVlc3RDb3VudChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCB0YXJnZXQyeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZVRhcmdldChcbiAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfMlhYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItdGFyZ2V0LTJ4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGVsYjN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl8zWFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1lbGItM3h4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0M3h4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzNYWF9DT1VOVCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArIFwiLXRhcmdldC0zeHhcIixcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCB1c2luZ01ldHJpY3M6IHsgW2tleTogc3RyaW5nXTogSU1ldHJpYyB9ID0ge307XG5cbiAgICAgICAgc3dpdGNoKHByb3BzLm1ldHJpY1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVDpcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IHRhcmdldDV4eDtcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IGVsYjV4eDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBgRklMTCgke2tleXByZWZpeH0xLCAwKSArIEZJTEwoJHtrZXlwcmVmaXh9MiwgMClgLFxuICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX1JBVEU6XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvLyBSZXF1ZXN0IGNvdW50IG9ubHkgaW5jbHVkZXMgcmVxdWVzdHMgd2hlcmUgYSByZXNwb25zZSB3YXMgZ2VuZXJhdGVkIGZyb20gYSB0YXJnZXRcbiAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQ1eHg7XG4gICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gcmVxdWVzdENvdW50O1xuXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYCgke2tleXByZWZpeH0xLyR7a2V5cHJlZml4fTIpKjEwMGAsXG4gICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfQ09VTlQ6XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQyeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSB0YXJnZXQzeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0zYF0gPSBlbGIzeHg7XG4gIFxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBgJHtrZXlwcmVmaXh9MSske2tleXByZWZpeH0yKyR7a2V5cHJlZml4fTNgLFxuICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfUkFURTpcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IHRhcmdldDJ4eDtcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IHRhcmdldDN4eDtcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTNgXSA9IHJlcXVlc3RDb3VudDtcbiAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGAoKCR7a2V5cHJlZml4fTErJHtrZXlwcmVmaXh9MikvJHtrZXlwcmVmaXh9MykqMTAwYCxcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5SRVFVRVNUX0NPVU5UOlxuICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RDb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIEFMQnMgc3BlY2lmaWVkIGF2YWlsYWJpbGl0eSBtZXRyaWMgYXQgdGhlIHJlZ2lvbmFsIGxldmVsIChvbmx5IGxvb2tzXG4gICAgICogYXQgdGhlIHJlZ2lvbmFsIGRpbWVuc2lvbiBmb3IgdGhlIHRhcmdldHMsIG5vdCBwZXIgQVopXG4gICAgICogQHBhcmFtIGFsYiBUaGUgQUxCXG4gICAgICogQHBhcmFtIHByb3BzIFRoZSByZXF1ZXN0IHByb3BzXG4gICAgICogQHJldHVybnMgVGhlIHJlZ2lvbmFsIGF2YWlsYWJpbGl0eSBtZXRyaWMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljKFxuICAgICAgICBhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciwgXG4gICAgICAgIHByb3BzOiBSZWdpb25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyQXZhaWxhYmlsaXR5TWV0cmljUHJvcHNcbiAgICApOiBJTWV0cmljIHtcbiAgICAgICAgbGV0IGtleXByZWZpeCA9IHByb3BzLmtleXByZWZpeCA/IHByb3BzLmtleXByZWZpeCA6IFwiYVwiO1xuXG4gICAgICAgIGxldCB0YXJnZXQ1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZVRhcmdldChcbiAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfNVhYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogXCJ0YXJnZXQtNXh4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICBcbiAgICAgICAgbGV0IGVsYjV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl81WFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBcImVsYi01eHhcIixcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgcmVxdWVzdENvdW50OiBJTWV0cmljID0gYWxiLm1ldHJpY3MucmVxdWVzdENvdW50KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogXCJyZXF1ZXN0LWNvdW50XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0Mnh4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzJYWF9DT1VOVCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IFwidGFyZ2V0LTJ4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGVsYjN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl8zWFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBcImVsYi0zeHhcIixcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCB0YXJnZXQzeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZVRhcmdldChcbiAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfM1hYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogXCJ0YXJnZXQtM3h4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuXG4gICAgICAgIHN3aXRjaChwcm9wcy5tZXRyaWNUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQ6XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQ1eHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSBlbGI1eHg7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYEZJTEwoJHtrZXlwcmVmaXh9MSwgMCkgKyBGSUxMKCR7a2V5cHJlZml4fTIsIDApYCxcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9SQVRFOlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQ1eHg7XG4gICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gcmVxdWVzdENvdW50O1xuXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYCgke2tleXByZWZpeH0xLyR7a2V5cHJlZml4fTIpKjEwMGAsXG4gICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfQ09VTlQ6XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQyeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSB0YXJnZXQzeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0zYF0gPSBlbGIzeHg7XG4gIFxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBgJHtrZXlwcmVmaXh9MSske2tleXByZWZpeH0yKyR7a2V5cHJlZml4fTNgLFxuICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfUkFURTpcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IHRhcmdldDJ4eDtcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IHRhcmdldDN4eDtcbiAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTNgXSA9IHJlcXVlc3RDb3VudDtcbiAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGAoKCR7a2V5cHJlZml4fTErJHtrZXlwcmVmaXh9MikvJHtrZXlwcmVmaXh9MykqMTAwYCxcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5SRVFVRVNUX0NPVU5UOlxuICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RDb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIEFMQidzIFRhcmdldFJlc3BvbnNlVGltZSBtZXRyaWMgYXQgdGhlIHJlZ2lvbmFsIGxldmVsIChvbmx5IGxvb2tzXG4gICAgICogYXQgdGhlIHJlZ2lvbmFsIGRpbWVuc2lvbiBmb3IgdGhlIHRhcmdldHMsIG5vdCBwZXIgQVopXG4gICAgICogQHBhcmFtIHByb3BzICBUaGUgcmVxdWVzdCBwcm9wc1xuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWdpb25hbExhdGVuY3lNZXRyaWMoXG4gICAgICAgIHByb3BzOiBSZWdpb25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyTGF0ZW5jeU1ldHJpY1Byb3BzXG4gICAgKTogSU1ldHJpYyB7XG4gICAgICAgIHJldHVybiBwcm9wcy5hbGIubWV0cmljcy50YXJnZXRSZXNwb25zZVRpbWUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChwcm9wcy5hbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBBd3MuUkVHSU9OLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBwcm9wcy5zdGF0aXN0aWMsXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuU0VDT05EU1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZhdWx0cyBmb3IgYWxsIEFMQnMgY29tYmluZWQgcGVyIEFaXG4gICAgICogQHBhcmFtIGFsYnMgVGhlIEFMQnMgdG8gYWdncmVnYXRlXG4gICAgICogQHBhcmFtIHBlcmlvZCBUaGUgcGVyaW9kIG9mIHRpbWUgdG8gY2FsY3VsYXRlIHRoZSBtZXRyaWNzXG4gICAgICogQHBhcmFtIGF6TWFwcGVyIFRoZSBBWiBtYXBwZXIgZnVuY3Rpb24gc28gdGhlIG1ldHJpY3MgYXJlIGNvcnJlY3RseSBsYWJlbGVkIHdpdGggdGhlaXIgQVogSURcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VG90YWxBbGJGYXVsdENvdW50UGVyWm9uZShcbiAgICAgIGFsYnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgIGF6TWFwcGVyOiBBdmFpbGFiaWxpdHlab25lTWFwcGVyLFxuICAgICAgcHJlZml4Pzogc3RyaW5nXG4gICAgKSA6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfVxuICAgIHtcbiAgICAgIGxldCBmYXVsdHNQZXJab25lOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgIGxldCBtZXRyaWNzUGVyQVo6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljW119ID0ge307XG4gICAgICBsZXQga2V5cHJlZml4OiBzdHJpbmcgPSBwcmVmaXggPyBwcmVmaXggOiBNZXRyaWNzSGVscGVyLm5leHRDaGFyKCk7XG4gIFxuICAgICAgYWxicy5mb3JFYWNoKChhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikgPT4ge1xuICBcbiAgICAgICAgYWxiLnZwYyEuYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGF6TGV0dGVyID0gYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgICAgaWYgKCEoYXpMZXR0ZXIgaW4gbWV0cmljc1BlckFaKSkge1xuICAgICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXSA9IFtdO1xuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgLy8gNXh4IHJlc3BvbnNlcyBmcm9tIHRhcmdldHNcbiAgICAgICAgICBsZXQgdGFyZ2V0NXh4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfNVhYX0NPVU5ULFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgICAvLyA1eHggcmVzcG9uc2VzIGZyb20gRUxCXG4gICAgICAgICAgbGV0IGVsYjV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgICAgSHR0cENvZGVFbGIuRUxCXzVYWF9DT1VOVCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSBlbGI1eHg7XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSB0YXJnZXQ1eHg7XG4gIFxuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmYXVsdHMgcGVyIHpvbmUgZm9yIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgICAgICAgIG1ldHJpY3NQZXJBWlthekxldHRlcl0ucHVzaChuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogYEZJTEwoJHtrZXlwcmVmaXh9MSwgMCkgKyBGSUxMKCR7a2V5cHJlZml4fTIsIDApYCxcbiAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAgICAgICAgfSkpO1xuICBcbiAgICAgICAgICBrZXlwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKGtleXByZWZpeCk7XG4gICAgICAgIH0pOyAgIFxuICAgICAgfSk7XG4gIFxuICAgICAgLy8gV2UgY2FuIGhhdmUgbXVsdGlwbGUgbG9hZCBiYWxhbmNlcnMgcGVyIHpvbmUsIHNvIGFkZCB0aGVpciBmYXVsdCBjb3VudFxuICAgICAgLy8gbWV0cmljcyB0b2dldGhlclxuICAgICAgT2JqZWN0LmtleXMobWV0cmljc1BlckFaKS5mb3JFYWNoKChhekxldHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG5cbiAgICAgICAgaWYgKG1ldHJpY3NQZXJBWlthekxldHRlcl0ubGVuZ3RoID4gMSkge1xuICBcbiAgICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0ke2luZGV4fWBdID0gbWV0cmljO1xuICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgICBmYXVsdHNQZXJab25lW2F6TGV0dGVyXSA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oXCIrXCIpLFxuICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2RcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmYXVsdHNQZXJab25lW2F6TGV0dGVyXSA9IG1ldHJpY3NQZXJBWlthekxldHRlcl1bMF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhdWx0c1BlclpvbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZhdWx0cyBmb3IgYWxsIEFMQnMgY29tYmluZWQgcGVyIEFaXG4gICAgICogQHBhcmFtIGFsYnMgVGhlIEFMQnMgdG8gYWdncmVnYXRlXG4gICAgICogQHBhcmFtIHBlcmlvZCBUaGUgcGVyaW9kIG9mIHRpbWUgdG8gY2FsY3VsYXRlIHRoZSBtZXRyaWNzXG4gICAgICogQHBhcmFtIGF6TWFwcGVyIFRoZSBBWiBtYXBwZXIgZnVuY3Rpb24gc28gdGhlIG1ldHJpY3MgYXJlIGNvcnJlY3RseSBsYWJlbGVkIHdpdGggdGhlaXIgQVogSURcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VG90YWxBbGJTdWNjZXNzQ291bnRQZXJab25lKFxuICAgICAgYWxiczogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyW10sXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgICAgYXpNYXBwZXI6IEF2YWlsYWJpbGl0eVpvbmVNYXBwZXJcbiAgICApIDoge1trZXk6IHN0cmluZ106IElNZXRyaWN9XG4gICAge1xuICAgICAgbGV0IHN1Y2Nlc3NQZXJab25lOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgIGxldCBtZXRyaWNzUGVyQVo6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljW119ID0ge307XG4gICAgICBsZXQga2V5cHJlZml4OiBzdHJpbmcgPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKCk7XG4gIFxuICAgICAgYWxicy5mb3JFYWNoKChhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikgPT4ge1xuICBcbiAgICAgICAgYWxiLnZwYyEuYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGF6TGV0dGVyID0gYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgICAgaWYgKCEoYXpMZXR0ZXIgaW4gbWV0cmljc1BlckFaKSkge1xuICAgICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXSA9IFtdO1xuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgLy8gMnh4IHJlc3BvbnNlcyBmcm9tIHRhcmdldHNcbiAgICAgICAgICBsZXQgdGFyZ2V0Mnh4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfMlhYX0NPVU5ULFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gM3h4IHJlc3BvbnNlcyBmcm9tIHRhcmdldHNcbiAgICAgICAgICBsZXQgdGFyZ2V0M3h4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfM1hYX0NPVU5ULFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgICAvLyAzeHggcmVzcG9uc2VzIGZyb20gRUxCXG4gICAgICAgICAgbGV0IGVsYjN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlRWxiKFxuICAgICAgICAgICAgSHR0cENvZGVFbGIuRUxCXzNYWF9DT1VOVCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSBlbGIzeHg7XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSB0YXJnZXQyeHg7XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0zYF0gPSB0YXJnZXQzeHg7XG4gIFxuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmYXVsdHMgcGVyIHpvbmUgZm9yIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgICAgICAgIG1ldHJpY3NQZXJBWlthekxldHRlcl0ucHVzaChuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogYEZJTEwoJHtrZXlwcmVmaXh9MSwgMCkgKyBGSUxMKCR7a2V5cHJlZml4fTIsIDApICsgRklMTCgke2tleXByZWZpeH0zLCAwKWAsXG4gICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgICAgICAgIH0pKTtcbiAgXG4gICAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuICAgICAgICB9KTsgICBcbiAgICAgIH0pO1xuICBcbiAgICAgIC8vIFdlIGNhbiBoYXZlIG11bHRpcGxlIGxvYWQgYmFsYW5jZXJzIHBlciB6b25lLCBzbyBhZGQgdGhlaXIgc3VjY2VzcyBjb3VudFxuICAgICAgLy8gbWV0cmljcyB0b2dldGhlclxuICAgICAgT2JqZWN0LmtleXMobWV0cmljc1BlckFaKS5mb3JFYWNoKChhekxldHRlcjogc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZCA9IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0ke2luZGV4fWBdID0gbWV0cmljO1xuICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgICBzdWNjZXNzUGVyWm9uZVthekxldHRlcl0gPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKFwiK1wiKSxcbiAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3VjY2Vzc1BlclpvbmVbYXpMZXR0ZXJdID0gbWV0cmljc1BlckFaW2F6TGV0dGVyXVswXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgXG4gICAgICByZXR1cm4gc3VjY2Vzc1BlclpvbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlcyBmb3IgYWxsIEFMQnMgaW4gZWFjaCB6b25lXG4gICAgICogQHBhcmFtIGFsYnMgXG4gICAgICogQHBhcmFtIHBlcmlvZCBcbiAgICAgKiBAcGFyYW0gYXpNYXBwZXIgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGdldFRvdGFsQWxiUmVxdWVzdHNQZXJab25lKFxuICAgICAgYWxiczogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyW10sXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgICAgYXpNYXBwZXI6IEF2YWlsYWJpbGl0eVpvbmVNYXBwZXIsXG4gICAgICBwcmVmaXg/OiBzdHJpbmdcbiAgICApIDoge1trZXk6IHN0cmluZ106IElNZXRyaWN9XG4gICAge1xuICAgICAgbGV0IHJlcXVlc3RzUGVyWm9uZToge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICBsZXQgbWV0cmljc1BlckFaOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY1tdfSA9IHt9O1xuICAgICAgbGV0IGtleXByZWZpeDogc3RyaW5nID0gcHJlZml4ID8gcHJlZml4IDogTWV0cmljc0hlbHBlci5uZXh0Q2hhcigpO1xuXG4gICAgICBhbGJzLmZvckVhY2goKGFsYjogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKSA9PiB7XG4gIFxuICAgICAgICBhbGIudnBjIS5hdmFpbGFiaWxpdHlab25lcy5mb3JFYWNoKChhdmFpbGFiaWxpdHlab25lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBsZXQgYXpMZXR0ZXIgPSBhdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhhdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG5cbiAgICAgICAgICBpZiAoIShhekxldHRlciBpbiBtZXRyaWNzUGVyQVopKSB7XG4gICAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdID0gW107XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBsZXQgcmVxdWVzdENvdW50OiBJTWV0cmljID0gYWxiLm1ldHJpY3MucmVxdWVzdENvdW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICBcbiAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLnB1c2gocmVxdWVzdENvdW50KTtcbiAgICAgICAgfSk7ICAgXG4gICAgICB9KTtcbiAgXG4gICAgICAvLyBXZSBjYW4gaGF2ZSBtdWx0aXBsZSBsb2FkIGJhbGFuY2VycyBwZXIgem9uZSwgc28gYWRkIHRoZWlyIHByb2Nlc3NlZCBieXRlcyB0b2dldGhlclxuICAgICAgT2JqZWN0LmtleXMobWV0cmljc1BlckFaKS5mb3JFYWNoKChhekxldHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG5cbiAgICAgICAgaWYgKG1ldHJpY3NQZXJBWlthekxldHRlcl0ubGVuZ3RoID4gMSkge1xuICBcbiAgICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0ke2luZGV4fWBdID0gbWV0cmljO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuICAgICAgICBcbiAgICAgICAgICByZXF1ZXN0c1BlclpvbmVbYXpMZXR0ZXJdID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbihcIitcIiksXG4gICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3RzUGVyWm9uZVthekxldHRlcl0gPSBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdWzBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgXG4gICAgICByZXR1cm4gcmVxdWVzdHNQZXJab25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMgZm9yIGFsbCBBTEJzIGluIGVhY2ggem9uZVxuICAgICAqIEBwYXJhbSBhbGJzIFxuICAgICAqIEBwYXJhbSBwZXJpb2QgXG4gICAgICogQHBhcmFtIGF6TWFwcGVyIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUb3RhbEFsYlByb2Nlc3NlZEJ5dGVzUGVyWm9uZShcbiAgICAgIGFsYnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgIGF6TWFwcGVyOiBBdmFpbGFiaWxpdHlab25lTWFwcGVyXG4gICAgKSA6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfVxuICAgIHtcbiAgICAgIGxldCBwcm9jZXNzZWRCeXRlc1BlclpvbmU6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgbGV0IG1ldHJpY3NQZXJBWjoge1trZXk6IHN0cmluZ106IElNZXRyaWNbXX0gPSB7fTtcbiAgICAgIGxldCBrZXlwcmVmaXg6IHN0cmluZyA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoKTtcbiAgXG4gICAgICBhbGJzLmZvckVhY2goKGFsYjogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKSA9PiB7XG4gIFxuICAgICAgICBhbGIudnBjIS5hdmFpbGFiaWxpdHlab25lcy5mb3JFYWNoKChhdmFpbGFiaWxpdHlab25lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBsZXQgYXpMZXR0ZXIgPSBhdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhhdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG5cbiAgICAgICAgICBpZiAoIShhekxldHRlciBpbiBtZXRyaWNzUGVyQVopKSB7XG4gICAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdID0gW107XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBsZXQgcHJvY2Vzc2VkQnl0ZXM6IElNZXRyaWMgPSBhbGIubWV0cmljcy5wcm9jZXNzZWRCeXRlcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXS5wdXNoKHByb2Nlc3NlZEJ5dGVzKTtcbiAgICAgICAgfSk7ICAgXG4gICAgICB9KTtcbiAgXG4gICAgICAvLyBXZSBjYW4gaGF2ZSBtdWx0aXBsZSBsb2FkIGJhbGFuY2VycyBwZXIgem9uZSwgc28gYWRkIHRoZWlyIHByb2Nlc3NlZCBieXRlcyB0b2dldGhlclxuICAgICAgT2JqZWN0LmtleXMobWV0cmljc1BlckFaKS5mb3JFYWNoKChhekxldHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG5cbiAgICAgICAgaWYgKG1ldHJpY3NQZXJBWlthekxldHRlcl0ubGVuZ3RoID4gMSkge1xuXG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgXG4gICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXS5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9JHtpbmRleH1gXSA9IG1ldHJpYztcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGtleXByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoa2V5cHJlZml4KTtcbiAgICAgICAgXG4gICAgICAgICAgcHJvY2Vzc2VkQnl0ZXNQZXJab25lW2F6TGV0dGVyXSA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oXCIrXCIpLFxuICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2RcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzZWRCeXRlc1BlclpvbmVbYXpMZXR0ZXJdID0gbWV0cmljc1BlckFaW2F6TGV0dGVyXVswXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIFxuICAgICAgcmV0dXJuIHByb2Nlc3NlZEJ5dGVzUGVyWm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGEgd2VpZ2h0ZWQgYXBwcm94aW1hdGlvbiBvZiB0aGUgbGF0ZW5jeSBhdCB0aGUgcHJvdmlkZWQgc3RhdGlzdGljIGZvciBhbGwgQUxCc1xuICAgICAqIGluIGVhY2ggem9uZS5cbiAgICAgKiBAcGFyYW0gYWxicyBcbiAgICAgKiBAcGFyYW0gc3RhdGlzdGljIFxuICAgICAqIEBwYXJhbSBwZXJpb2QgXG4gICAgICogQHBhcmFtIGF6TWFwcGVyIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUb3RhbEFsYkxhdGVuY3lQZXJab25lKFxuICAgICAgYWxiczogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyW10sXG4gICAgICBzdGF0aXN0aWM6IHN0cmluZyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24sXG4gICAgICBhek1hcHBlcjogQXZhaWxhYmlsaXR5Wm9uZU1hcHBlclxuICAgICkgOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY31cbiAgICB7XG4gICAgICBsZXQgbGF0ZW5jeVBlclpvbmU6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgbGV0IGtleXByZWZpeDogc3RyaW5nID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcigpO1xuXG4gICAgICBsZXQgcmVxdWVzdENvdW50c1BlckFaOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY1tdfSA9IHt9O1xuXG4gICAgICBsZXQgd2VpZ2h0ZWRMYXRlbmN5UGVyQVo6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljW119ID0ge307XG4gIFxuICAgICAgYWxicy5mb3JFYWNoKChhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikgPT4ge1xuICBcbiAgICAgICAgYWxiLnZwYyEuYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICBsZXQgYXpMZXR0ZXIgPSBhdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhhdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgICAgaWYgKCEoYXpMZXR0ZXIgaW4gd2VpZ2h0ZWRMYXRlbmN5UGVyQVopKSB7XG4gICAgICAgICAgICB3ZWlnaHRlZExhdGVuY3lQZXJBWlthekxldHRlcl0gPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIShhekxldHRlciBpbiByZXF1ZXN0Q291bnRzUGVyQVopKSB7XG4gICAgICAgICAgICByZXF1ZXN0Q291bnRzUGVyQVpbYXpMZXR0ZXJdID0gW107XG4gICAgICAgICAgfVxuICAgXG4gICAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZCA9IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcbiAgXG4gICAgICAgICAgbGV0IGxhdGVuY3k6IElNZXRyaWMgPSBhbGIubWV0cmljcy50YXJnZXRSZXNwb25zZVRpbWUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgICAgIHN0YXRpc3RpYzogc3RhdGlzdGljLFxuICAgICAgICAgICAgICB1bml0OiBVbml0Lk1JTExJU0VDT05EU1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgbGV0IHJlcXVlc3RDb3VudDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLnJlcXVlc3RDb3VudChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSBsYXRlbmN5O1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gcmVxdWVzdENvdW50O1xuXG4gICAgICAgICAgbGV0IHdlaWdodGVkTGF0ZW5jeTogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICBleHByZXNzaW9uOiBgJHtrZXlwcmVmaXh9MSoke2tleXByZWZpeH0yYCxcbiAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB3ZWlnaHRlZExhdGVuY3lQZXJBWlthekxldHRlcl0ucHVzaCh3ZWlnaHRlZExhdGVuY3kpO1xuXG4gICAgICAgICAgcmVxdWVzdENvdW50c1BlckFaW2F6TGV0dGVyXS5wdXNoKHJlcXVlc3RDb3VudCk7XG4gIFxuICAgICAgICAgIGtleXByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoa2V5cHJlZml4KTtcbiAgICAgICAgfSk7ICAgXG4gICAgICB9KTtcbiAgXG4gICAgICAvLyBXZSBjYW4gaGF2ZSBtdWx0aXBsZSBsb2FkIGJhbGFuY2VycyBwZXIgem9uZSwgY29tYmluZSB0aGVpciBsYXRlbmN5IHBlciB6b25lXG4gICAgICAvLyB0byBnZXQgYW4gYXZlcmFnZSBsYXRlbmN5IHBlcmNlbnRpbGUgbGF0ZW5jeSwgbGlrZSBhdmVyYWdlIHA5OVxuICAgICAgT2JqZWN0LmtleXMod2VpZ2h0ZWRMYXRlbmN5UGVyQVopLmZvckVhY2goKGF6TGV0dGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZCA9IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcbiAgXG4gICAgICAgIGxldCB1c2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuXG4gICAgICAgIHdlaWdodGVkTGF0ZW5jeVBlckFaW2F6TGV0dGVyXS5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fSR7aW5kZXh9YF0gPSBtZXRyaWM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBudW1lcmF0b3IgPSBcIihcIiArIE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbihcIitcIikgKyBcIilcIjtcbiAgICAgICAgbGV0IGluZGV4ID0gT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5sZW5ndGg7XG5cbiAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuXG4gICAgICAgIHJlcXVlc3RDb3VudHNQZXJBWlthekxldHRlcl0uZm9yRWFjaCgobWV0cmljOiBJTWV0cmljLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0ke2luZGV4fWBdID0gbWV0cmljO1xuICAgICAgICB9KTsgXG5cbiAgICAgICAgbGV0IGRlbm9taW5hdG9yOiBzdHJpbmcgPSBcIihcIiArIE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuc2xpY2UoaW5kZXgpLmpvaW4oXCIrXCIpICsgXCIpXCI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoaXMgZm9ybXVsYVxuICAgICAgICAgKiBcbiAgICAgICAgICogKHA5OV8xICogcmVxdWVzdHNfMSArIHA5OV8yICogcmVxdWVzdHNfMiArIHA5OV8zICogcmVxdWVzdHNfMykgLyAocmVxdWVzdHNfMSArIHJlcXVlc3RzXzIgKyByZXF1ZXN0c18zKVxuICAgICAgICAgKiBcbiAgICAgICAgICogVGhpcyB3aWxsIHByb3ZpZGUgYSByZXF1ZXN0IHdlaWdodGVkIGFwcHJveGltYXRpb24gb2YgdGhlIHA5OVxuICAgICAgICAgKiBsYXRlbmN5IHBlciBBWlxuICAgICAgICAgKi9cbiAgXG4gICAgICAgIGxhdGVuY3lQZXJab25lW2F6TGV0dGVyXSA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgZXhwcmVzc2lvbjogbnVtZXJhdG9yICsgXCIvXCIgKyBkZW5vbWluYXRvcixcbiAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIHBlcmlvZDogcGVyaW9kXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGtleXByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoa2V5cHJlZml4KTtcbiAgICAgIH0pO1xuICBcbiAgICAgIHJldHVybiBsYXRlbmN5UGVyWm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmYXVsdCByYXRlIHBlciBBWlxuICAgICAqIEBwYXJhbSByZXF1ZXN0c1BlclpvbmUgXG4gICAgICogQHBhcmFtIGZhdWx0c1BlclpvbmUgXG4gICAgICogQHBhcmFtIHBlcmlvZCBcbiAgICAgKiBAcGFyYW0gYXpNYXBwZXIgXG4gICAgICogQHJldHVybnMgVGhlIGZhdWx0IHJhdGUgcGVyIEFaIHVzaW5nIHRoZSBBWiBuYW1lIGxldHRlciBhcyB0aGUga2V5IGZvciBlYWNoIG1ldHJpY1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUb3RhbEFsYkZhdWx0UmF0ZVBlclpvbmUoXG4gICAgICBhbGJzOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJbXSxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24sXG4gICAgICBhek1hcHBlcjogQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcixcbiAgICApIDoge1trZXk6IHN0cmluZ106IElNZXRyaWN9IHtcblxuICAgICAgbGV0IGZhdWx0UmF0ZU1ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgbGV0IHJlcXVlc3RzUGVyWm9uZToge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0gdGhpcy5nZXRUb3RhbEFsYlJlcXVlc3RzUGVyWm9uZShhbGJzLCBwZXJpb2QsIGF6TWFwcGVyLCBcImFcIik7XG4gICAgICBsZXQgZmF1bHRzUGVyWm9uZToge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0gdGhpcy5nZXRUb3RhbEFsYkZhdWx0Q291bnRQZXJab25lKGFsYnMsIHBlcmlvZCwgYXpNYXBwZXIsIFwiZVwiKTtcblxuICAgICAgT2JqZWN0LmtleXMocmVxdWVzdHNQZXJab25lKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoa2V5IGluIGZhdWx0c1BlclpvbmUpIHtcbiAgICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgICAgICBsZXQga2V5cHJlZml4ID0gJ3onICsga2V5O1xuICAgICAgICAgXG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSBmYXVsdHNQZXJab25lW2tleV07XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSByZXF1ZXN0c1BlclpvbmVba2V5XTtcblxuICAgICAgICAgIGxldCB6b25hbEZhdWx0UmF0ZTogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICBleHByZXNzaW9uOiBgKCR7a2V5cHJlZml4fTEvJHtrZXlwcmVmaXh9MikgKiAxMDBgLFxuICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgIGxhYmVsOiBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihrZXkpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmYXVsdFJhdGVNZXRyaWNzW2tleV0gPSB6b25hbEZhdWx0UmF0ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgem9uZSBcIiArIGtleSArIFwiIGlzIG5vdCBwcmVzZW50IGluIHRoZSBmYXVsdHNQZXJab25lIHBhcmFtZXRlci5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBPYmplY3Qua2V5cyhmYXVsdHNQZXJab25lKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIShrZXkgaW4gcmVxdWVzdHNQZXJab25lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB6b25lIFwiICsga2V5ICsgXCIgaXMgbm90IHByZXNlbnQgaW4gdGhlIHJlcXVlc3RzUGVyWm9uZSBwYXJhbWV0ZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZhdWx0UmF0ZU1ldHJpY3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHpvbmFsIHByb2Nlc3NlZCBieXRlcyBtZXRyaWMgZm9yIHRoZSBzcGVjaWZpZWQgbG9hZCBiYWxhbmNlclxuICAgICAqIEBwYXJhbSBsb2FkQmFsYW5jZXJGdWxsTmFtZVxuICAgICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lTmFtZVxuICAgICAqIEBwYXJhbSBwZXJpb2RcbiAgICAgKiBAcmV0dXJucyBJTWV0cmljXG4gICAgICovXG4gICAgc3RhdGljIGdldFBlckFaUHJvY2Vzc2VkQnl0ZXNNZXRyaWMoXG4gICAgICBhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZyxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgIGFkZExvYWRCYWxhbmNlckFyblRvTGFiZWw/OiBib29sZWFuXG4gICAgKTogSU1ldHJpYyB7XG4gICAgICByZXR1cm4gYWxiLm1ldHJpY3MucHJvY2Vzc2VkQnl0ZXMoe1xuICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgIGRpbWVuc2lvbnNNYXA6e1xuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCArIChhZGRMb2FkQmFsYW5jZXJBcm5Ub0xhYmVsID8gXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuIDogXCJcIilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB6b25hbCBwcm9jZXNzZWQgYnl0ZXMgbWV0cmljIGZvciB0aGUgc3BlY2lmaWVkIGxvYWQgYmFsYW5jZXJcbiAgICAgKiBAcGFyYW0gbG9hZEJhbGFuY2VyRnVsbE5hbWVcbiAgICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZU5hbWVcbiAgICAgKiBAcGFyYW0gcGVyaW9kXG4gICAgICogQHJldHVybnMgSU1ldHJpY1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWdpb25hbFByb2Nlc3NlZEJ5dGVzTWV0cmljKFxuICAgICAgICBhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgICAgYWRkTG9hZEJhbGFuY2VyQXJuPzogYm9vbGVhblxuICAgICAgKTogSU1ldHJpYyB7XG4gICAgICAgIHJldHVybiBhbGIubWV0cmljcy5wcm9jZXNzZWRCeXRlcyh7XG4gICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6e1xuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcikubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IEF3cy5SRUdJT04gKyAoYWRkTG9hZEJhbGFuY2VyQXJuID8gXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuIDogXCJcIilcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
845
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJNZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21ldHJpY3MvQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJNZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtEQUFrRjtBQUNsRix1RkFBa0o7QUFDbEosZ0ZBQTZFO0FBRzdFLDZDQUE0QztBQUk1Qyw4REFBMkQ7QUFFM0QsTUFBYSw4QkFBOEI7SUFFdkM7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQ3hCLEtBQXFEO1FBRXJELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQ3ZDO1lBQ0UsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLFlBQVksRUFBRyxLQUFLLENBQUMsR0FBMkM7cUJBQzdELG9CQUFvQjthQUN4QjtZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLHVCQUF1QjtZQUM3RyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLElBQUksRUFBRSxxQkFBSSxDQUFDLE9BQU87U0FDbkIsQ0FDRixDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsd0NBQXdDLENBQzNDLElBQWdDLEVBQ2hDLEtBQTBEO1FBRTFELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FB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Z0JBQXdCLEVBQ3hCLGtCQUEwQixFQUMxQixNQUFnQixFQUNoQix5QkFBbUM7UUFFbkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLGFBQWEsRUFBQztnQkFDVixZQUFZLEVBQUcsR0FBMkMsQ0FBQyxvQkFBb0I7Z0JBQy9FLGdCQUFnQixFQUFFLGdCQUFnQjthQUNyQztZQUNELEtBQUssRUFBRSxrQkFBa0IsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsK0JBQStCLENBQ2xDLEdBQTZCLEVBQzdCLE1BQWdCLEVBQ2hCLGtCQUE0QjtRQUU1QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsYUFBYSxFQUFDO2dCQUNWLFlBQVksRUFBRyxHQUEyQyxDQUFDLG9CQUFvQjthQUNsRjtZQUNELEtBQUssRUFBRSxpQkFBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzVFLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTVsQ0Qsd0VBNGxDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElNZXRyaWMsIE1hdGhFeHByZXNzaW9uLCBTdGF0cywgVW5pdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgQmFzZUxvYWRCYWxhbmNlciwgSHR0cENvZGVFbGIsIEh0dHBDb2RlVGFyZ2V0LCBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsIElMb2FkQmFsYW5jZXJWMiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5TWV0cmljVHlwZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvQXZhaWxhYmlsaXR5TWV0cmljVHlwZVwiO1xuaW1wb3J0IHsgWm9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckxhdGVuY3lNZXRyaWNQcm9wcyB9IGZyb20gXCIuLi9iYXNpY19vYnNlcnZhYmlsaXR5L3Byb3BzL1pvbmFsQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJMYXRlbmN5TWV0cmljUHJvcHNcIjtcbmltcG9ydCB7IFpvbmFsQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB9IGZyb20gXCIuLi9iYXNpY19vYnNlcnZhYmlsaXR5L3Byb3BzL1pvbmFsQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJBdmFpbGFiaWxpdHlNZXRyaWNQcm9wc1wiO1xuaW1wb3J0IHsgQXdzLCBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUmVnaW9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIH0gZnJvbSBcIi4uL2Jhc2ljX29ic2VydmFiaWxpdHkvcHJvcHMvUmVnaW9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzXCI7XG5pbXBvcnQgeyBSZWdpb25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSBcIi4uL2Jhc2ljX29ic2VydmFiaWxpdHkvcHJvcHMvUmVnaW9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckxhdGVuY3lNZXRyaWNQcm9wc1wiO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5Wm9uZU1hcHBlciB9IGZyb20gXCIuLi9hem1hcHBlci9BdmFpbGFiaWxpdHlab25lTWFwcGVyXCI7XG5pbXBvcnQgeyBNZXRyaWNzSGVscGVyIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9NZXRyaWNzSGVscGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlck1ldHJpY3Mge1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgVGFyZ2V0UmVzcG9uc2VUaW1lIGxhdGVuY3kgZm9yIHRoZSBBTEJcbiAgICAgKiB0YXJnZXRzXG4gICAgICogQHBhcmFtIHByb3BzIFRoZSByZXF1ZXN0IHByb3BzXG4gICAgICogQHJldHVybnMgVGhlIFRhcmdldFJlc3BvbnNlVGltZSBtZXRyaWMgZm9yIHRoZSBBTEIgaW4gdGhlIHNwZWNpZmllZCBBWlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQZXJBWkxhdGVuY3lNZXRyaWMoXG4gICAgICAgIHByb3BzOiBab25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyTGF0ZW5jeU1ldHJpY1Byb3BzXG4gICAgKTogSU1ldHJpYyB7XG4gICAgICAgIHJldHVybiBwcm9wcy5hbGIubWV0cmljcy50YXJnZXRSZXNwb25zZVRpbWUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKHByb3BzLmFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCA/IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCA6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUgKyBcIi10YXJnZXQtcmVzcG9uc2UtdGltZVwiLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBwcm9wcy5zdGF0aXN0aWMsXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuU0VDT05EU1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBlaXRoZXIgdGhlIHN1Y2Nlc3NmdWwsIGZhdWx0LCBvciB0b3RhbCBjb3VudCBtZXRyaWNzXG4gICAgICogZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldHMgYWNyb3NzIGFsbCBvZiB0aGUgcHJvdmlkZWQgXG4gICAgICogQUxCcyBpbiBlYWNoIEFaLlxuICAgICAqIEBwYXJhbSBhbGJzIFRoZSBBTEJzIHRvIGFnZ3JlZ2F0ZSB0aGUgY291bnQgb2ZcbiAgICAgKiBAcGFyYW0gcHJvcHMgVGhlIHJlcXVlc3QgcHJvcHNcbiAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgY291bnQgb2Ygc3VjZXNzLCBmYXVsdHMsIG9yIHRvdGFsIHJlcXVlc3RzIGluIHRoZSBzcGVjaWZpZWQgQVpcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UGVyQVpBdmFpbGFiaWxpdHlNZXRyaWNDb3VudEFnZ3JlZ2F0ZShcbiAgICAgICAgYWxiczogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyW10sXG4gICAgICAgIHByb3BzOiBab25hbEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyQXZhaWxhYmlsaXR5TWV0cmljUHJvcHNcbiAgICApOiBJTWV0cmljIHtcbiAgICAgICAgbGV0IGtleXByZWZpeCA9IHByb3BzLmtleXByZWZpeCA/IHByb3BzLmtleXByZWZpeCA6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUuc3Vic3RyaW5nKHByb3BzLmF2YWlsYWJpbGl0eVpvbmUubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcbiAgICAgICAgbGV0IG1ldHJpY3M6IElNZXRyaWNbXSA9IFtdO1xuXG4gICAgICAgIGFsYnMuZm9yRWFjaCgoYWxiOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIpID0+IHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQ1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZVRhcmdldChcbiAgICAgICAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfNVhYX0NPVU5ULFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuICsgXCItdGFyZ2V0LTV4eFwiLFxuICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGxldCBlbGI1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICAgICAgICBIdHRwQ29kZUVsYi5FTEJfNVhYX0NPVU5ULFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuICsgXCItZWxiLTV4eFwiLFxuICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgXG4gICAgICAgICAgICAgIGxldCByZXF1ZXN0Q291bnQ6IElNZXRyaWMgPSBhbGIubWV0cmljcy5yZXF1ZXN0Q291bnQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gKyBcIi1yZXF1ZXN0LWNvdW50XCIsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgICAgICAgICBsZXQgdGFyZ2V0Mnh4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzJYWF9DT1VOVCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArIFwiLVwiICsgYWxiLmxvYWRCYWxhbmNlckFybiArIFwiLXRhcmdldC0yeHhcIixcbiAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgXG4gICAgICAgICAgICAgIGxldCBlbGIzeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICAgICAgICBIdHRwQ29kZUVsYi5FTEJfM1hYX0NPVU5ULFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuICsgXCItZWxiLTN4eFwiLFxuICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICBcbiAgICAgICAgICAgICAgbGV0IHRhcmdldDN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgICAgICAgIEh0dHBDb2RlVGFyZ2V0LlRBUkdFVF8zWFhfQ09VTlQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gKyBcIi10YXJnZXQtM3h4XCIsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICBcbiAgICAgICAgICAgICAgc3dpdGNoKHByb3BzLm1ldHJpY1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVDpcbiAgICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IHRhcmdldDV4eDtcbiAgICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IGVsYjV4eDtcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MucHVzaChuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBgRklMTCgke2tleXByZWZpeH0xLCAwKSArIEZJTEwoJHtrZXlwcmVmaXh9MiwgMClgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArIFwiLVwiICsgYWxiLmxvYWRCYWxhbmNlckFybiArIFwiLWZhdWx0LWNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19DT1VOVDpcbiAgICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IHRhcmdldDJ4eDtcbiAgICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IHRhcmdldDN4eDtcbiAgICAgICAgICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTNgXSA9IGVsYjN4eDtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGAke2tleXByZWZpeH0xKyR7a2V5cHJlZml4fTIrJHtrZXlwcmVmaXh9M2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItXCIgKyBhbGIubG9hZEJhbGFuY2VyQXJuICsgXCItc3VjY2Vzcy1jb3VudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5SRVFVRVNUX0NPVU5UOlxuICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKHJlcXVlc3RDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2Qgb25seSBzdXBwb3J0cyBDT1VOVCBhdmFpbGFiaWxpdHkgbWV0cmljcy5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBtZXRyaWNzLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0ke2luZGV4fWBdID0gbWV0cmljO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbihcIitcIiksXG4gICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0cyBhIHNwZWNpZmllZCBhdmFpbGFiaWxpdHkgbWV0cmljIGluIHRoZSBzcGVjaWZpZWQgQVogZm9yIHRoZSBBTEJcbiAgICAgKiBAcGFyYW0gYWxiIFRoZSBBTEJcbiAgICAgKiBAcGFyYW0gcHJvcHMgVGhlIHJlcXVlc3QgcHJvcHNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWV0cmljIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQZXJBWkF2YWlsYWJpbGl0eU1ldHJpYyhcbiAgICAgICAgYWxiOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsIFxuICAgICAgICBwcm9wczogWm9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzXG4gICAgKTogSU1ldHJpYyB7XG4gICAgICAgIGxldCBrZXlwcmVmaXggPSBwcm9wcy5rZXlwcmVmaXggPyBwcm9wcy5rZXlwcmVmaXggOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhwcm9wcy5hdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGxldCB0YXJnZXQ1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZVRhcmdldChcbiAgICAgICAgICBIdHRwQ29kZVRhcmdldC5UQVJHRVRfNVhYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItdGFyZ2V0LTV4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgXG4gICAgICAgIGxldCBlbGI1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICBIdHRwQ29kZUVsYi5FTEJfNVhYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItZWxiLTV4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGxldCByZXF1ZXN0Q291bnQ6IElNZXRyaWMgPSBhbGIubWV0cmljcy5yZXF1ZXN0Q291bnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0Mnh4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzJYWF9DT1VOVCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArIFwiLXRhcmdldC0yeHhcIixcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBlbGIzeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICBIdHRwQ29kZUVsYi5FTEJfM1hYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkICsgXCItZWxiLTN4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHRhcmdldDN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgIEh0dHBDb2RlVGFyZ2V0LlRBUkdFVF8zWFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQgKyBcIi10YXJnZXQtM3h4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuXG4gICAgICAgIHN3aXRjaChwcm9wcy5tZXRyaWNUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQ6XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQ1eHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSBlbGI1eHg7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYEZJTEwoJHtrZXlwcmVmaXh9MSwgMCkgKyBGSUxMKCR7a2V5cHJlZml4fTIsIDApYCxcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9SQVRFOlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gUmVxdWVzdCBjb3VudCBvbmx5IGluY2x1ZGVzIHJlcXVlc3RzIHdoZXJlIGEgcmVzcG9uc2Ugd2FzIGdlbmVyYXRlZCBmcm9tIGEgdGFyZ2V0XG4gICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0NXh4O1xuICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IHJlcXVlc3RDb3VudDtcblxuICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGAoJHtrZXlwcmVmaXh9MS8ke2tleXByZWZpeH0yKSoxMDBgLFxuICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UOlxuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0Mnh4O1xuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gdGFyZ2V0M3h4O1xuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9M2BdID0gZWxiM3h4O1xuICBcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYCR7a2V5cHJlZml4fTErJHtrZXlwcmVmaXh9Miske2tleXByZWZpeH0zYCxcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX1JBVEU6XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQyeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSB0YXJnZXQzeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0zYF0gPSByZXF1ZXN0Q291bnQ7XG4gIFxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBgKCgke2tleXByZWZpeH0xKyR7a2V5cHJlZml4fTIpLyR7a2V5cHJlZml4fTMpKjEwMGAsXG4gICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuUkVRVUVTVF9DT1VOVDpcbiAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0Q291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBBTEJzIHNwZWNpZmllZCBhdmFpbGFiaWxpdHkgbWV0cmljIGF0IHRoZSByZWdpb25hbCBsZXZlbCAob25seSBsb29rc1xuICAgICAqIGF0IHRoZSByZWdpb25hbCBkaW1lbnNpb24gZm9yIHRoZSB0YXJnZXRzLCBub3QgcGVyIEFaKVxuICAgICAqIEBwYXJhbSBhbGIgVGhlIEFMQlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcmVxdWVzdCBwcm9wc1xuICAgICAqIEByZXR1cm5zIFRoZSByZWdpb25hbCBhdmFpbGFiaWxpdHkgbWV0cmljIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpYyhcbiAgICAgICAgYWxiOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsIFxuICAgICAgICBwcm9wczogUmVnaW9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzXG4gICAgKTogSU1ldHJpYyB7XG4gICAgICAgIGxldCBrZXlwcmVmaXggPSBwcm9wcy5rZXlwcmVmaXggPyBwcm9wcy5rZXlwcmVmaXggOiBcImFcIjtcblxuICAgICAgICBsZXQgdGFyZ2V0NXh4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzVYWF9DT1VOVCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IFwidGFyZ2V0LTV4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgXG4gICAgICAgIGxldCBlbGI1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICBIdHRwQ29kZUVsYi5FTEJfNVhYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogXCJlbGItNXh4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHJlcXVlc3RDb3VudDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLnJlcXVlc3RDb3VudChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IFwicmVxdWVzdC1jb3VudFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHRhcmdldDJ4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgIEh0dHBDb2RlVGFyZ2V0LlRBUkdFVF8yWFhfQ09VTlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiBcInRhcmdldC0yeHhcIixcbiAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBlbGIzeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICBIdHRwQ29kZUVsYi5FTEJfM1hYX0NPVU5ULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogXCJlbGItM3h4XCIsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0M3h4OiBJTWV0cmljID0gYWxiLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoXG4gICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzNYWF9DT1VOVCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWw6IFwidGFyZ2V0LTN4eFwiLFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcblxuICAgICAgICBzd2l0Y2gocHJvcHMubWV0cmljVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UOlxuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0NXh4O1xuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gZWxiNXh4O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGBGSUxMKCR7a2V5cHJlZml4fTEsIDApICsgRklMTCgke2tleXByZWZpeH0yLCAwKWAsXG4gICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfUkFURTpcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0NXh4O1xuICAgICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IHJlcXVlc3RDb3VudDtcblxuICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGAoJHtrZXlwcmVmaXh9MS8ke2tleXByZWZpeH0yKSoxMDBgLFxuICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UOlxuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gdGFyZ2V0Mnh4O1xuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gdGFyZ2V0M3h4O1xuICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9M2BdID0gZWxiM3h4O1xuICBcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogYCR7a2V5cHJlZml4fTErJHtrZXlwcmVmaXh9Miske2tleXByZWZpeH0zYCxcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX1JBVEU6XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0xYF0gPSB0YXJnZXQyeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSB0YXJnZXQzeHg7XG4gICAgICAgICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0zYF0gPSByZXF1ZXN0Q291bnQ7XG4gIFxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBgKCgke2tleXByZWZpeH0xKyR7a2V5cHJlZml4fTIpLyR7a2V5cHJlZml4fTMpKjEwMGAsXG4gICAgICAgICAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuUkVRVUVTVF9DT1VOVDpcbiAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0Q291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBBTEIncyBUYXJnZXRSZXNwb25zZVRpbWUgbWV0cmljIGF0IHRoZSByZWdpb25hbCBsZXZlbCAob25seSBsb29rc1xuICAgICAqIGF0IHRoZSByZWdpb25hbCBkaW1lbnNpb24gZm9yIHRoZSB0YXJnZXRzLCBub3QgcGVyIEFaKVxuICAgICAqIEBwYXJhbSBwcm9wcyAgVGhlIHJlcXVlc3QgcHJvcHNcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVnaW9uYWxMYXRlbmN5TWV0cmljKFxuICAgICAgICBwcm9wczogUmVnaW9uYWxBcHBsaWNhdGlvbkxvYWRCYWxhbmNlckxhdGVuY3lNZXRyaWNQcm9wc1xuICAgICk6IElNZXRyaWMge1xuICAgICAgICByZXR1cm4gcHJvcHMuYWxiLm1ldHJpY3MudGFyZ2V0UmVzcG9uc2VUaW1lKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAocHJvcHMuYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogQXdzLlJFR0lPTixcbiAgICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgICAgICAgIHN0YXRpc3RpYzogcHJvcHMuc3RhdGlzdGljLFxuICAgICAgICAgICAgICB1bml0OiBVbml0LlNFQ09ORFNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBmYXVsdHMgZm9yIGFsbCBBTEJzIGNvbWJpbmVkIHBlciBBWlxuICAgICAqIEBwYXJhbSBhbGJzIFRoZSBBTEJzIHRvIGFnZ3JlZ2F0ZVxuICAgICAqIEBwYXJhbSBwZXJpb2QgVGhlIHBlcmlvZCBvZiB0aW1lIHRvIGNhbGN1bGF0ZSB0aGUgbWV0cmljc1xuICAgICAqIEBwYXJhbSBhek1hcHBlciBUaGUgQVogbWFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBtZXRyaWNzIGFyZSBjb3JyZWN0bHkgbGFiZWxlZCB3aXRoIHRoZWlyIEFaIElEXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGdldFRvdGFsQWxiRmF1bHRDb3VudFBlclpvbmUoXG4gICAgICBhbGJzOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJbXSxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24sXG4gICAgICBhek1hcHBlcjogQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcixcbiAgICAgIHByZWZpeD86IHN0cmluZ1xuICAgICkgOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY31cbiAgICB7XG4gICAgICBsZXQgZmF1bHRzUGVyWm9uZToge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICBsZXQgbWV0cmljc1BlckFaOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY1tdfSA9IHt9O1xuICAgICAgbGV0IGtleXByZWZpeDogc3RyaW5nID0gcHJlZml4ID8gcHJlZml4IDogTWV0cmljc0hlbHBlci5uZXh0Q2hhcigpO1xuICBcbiAgICAgIGFsYnMuZm9yRWFjaCgoYWxiOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIpID0+IHtcbiAgXG4gICAgICAgIGFsYi52cGMhLmF2YWlsYWJpbGl0eVpvbmVzLmZvckVhY2goKGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGxldCBhekxldHRlciA9IGF2YWlsYWJpbGl0eVpvbmUuc3Vic3RyaW5nKGF2YWlsYWJpbGl0eVpvbmUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZCA9IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcblxuICAgICAgICAgIGlmICghKGF6TGV0dGVyIGluIG1ldHJpY3NQZXJBWikpIHtcbiAgICAgICAgICAgIG1ldHJpY3NQZXJBWlthekxldHRlcl0gPSBbXTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIC8vIDV4eCByZXNwb25zZXMgZnJvbSB0YXJnZXRzXG4gICAgICAgICAgbGV0IHRhcmdldDV4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzVYWF9DT1VOVCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgICAgLy8gNXh4IHJlc3BvbnNlcyBmcm9tIEVMQlxuICAgICAgICAgIGxldCBlbGI1eHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl81WFhfQ09VTlQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gIFxuICAgICAgICAgIGxldCB1c2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gZWxiNXh4O1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gdGFyZ2V0NXh4O1xuICBcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZmF1bHRzIHBlciB6b25lIGZvciB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLnB1c2gobmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGBGSUxMKCR7a2V5cHJlZml4fTEsIDApICsgRklMTCgke2tleXByZWZpeH0yLCAwKWAsXG4gICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZFxuICAgICAgICAgIH0pKTtcbiAgXG4gICAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuICAgICAgICB9KTsgICBcbiAgICAgIH0pO1xuICBcbiAgICAgIC8vIFdlIGNhbiBoYXZlIG11bHRpcGxlIGxvYWQgYmFsYW5jZXJzIHBlciB6b25lLCBzbyBhZGQgdGhlaXIgZmF1bHQgY291bnRcbiAgICAgIC8vIG1ldHJpY3MgdG9nZXRoZXJcbiAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3NQZXJBWikuZm9yRWFjaCgoYXpMZXR0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgIGlmIChtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmxlbmd0aCA+IDEpIHtcbiAgXG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgXG4gICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXS5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9JHtpbmRleH1gXSA9IG1ldHJpYztcbiAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgICAgZmF1bHRzUGVyWm9uZVthekxldHRlcl0gPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKFwiK1wiKSxcbiAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZmF1bHRzUGVyWm9uZVthekxldHRlcl0gPSBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdWzBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYXVsdHNQZXJab25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBmYXVsdHMgZm9yIGFsbCBBTEJzIGNvbWJpbmVkIHBlciBBWlxuICAgICAqIEBwYXJhbSBhbGJzIFRoZSBBTEJzIHRvIGFnZ3JlZ2F0ZVxuICAgICAqIEBwYXJhbSBwZXJpb2QgVGhlIHBlcmlvZCBvZiB0aW1lIHRvIGNhbGN1bGF0ZSB0aGUgbWV0cmljc1xuICAgICAqIEBwYXJhbSBhek1hcHBlciBUaGUgQVogbWFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBtZXRyaWNzIGFyZSBjb3JyZWN0bHkgbGFiZWxlZCB3aXRoIHRoZWlyIEFaIElEXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGdldFRvdGFsQWxiU3VjY2Vzc0NvdW50UGVyWm9uZShcbiAgICAgIGFsYnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgIGF6TWFwcGVyOiBBdmFpbGFiaWxpdHlab25lTWFwcGVyXG4gICAgKSA6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfVxuICAgIHtcbiAgICAgIGxldCBzdWNjZXNzUGVyWm9uZToge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICBsZXQgbWV0cmljc1BlckFaOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY1tdfSA9IHt9O1xuICAgICAgbGV0IGtleXByZWZpeDogc3RyaW5nID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcigpO1xuICBcbiAgICAgIGFsYnMuZm9yRWFjaCgoYWxiOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIpID0+IHtcbiAgXG4gICAgICAgIGFsYi52cGMhLmF2YWlsYWJpbGl0eVpvbmVzLmZvckVhY2goKGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGxldCBhekxldHRlciA9IGF2YWlsYWJpbGl0eVpvbmUuc3Vic3RyaW5nKGF2YWlsYWJpbGl0eVpvbmUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZCA9IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcblxuICAgICAgICAgIGlmICghKGF6TGV0dGVyIGluIG1ldHJpY3NQZXJBWikpIHtcbiAgICAgICAgICAgIG1ldHJpY3NQZXJBWlthekxldHRlcl0gPSBbXTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIC8vIDJ4eCByZXNwb25zZXMgZnJvbSB0YXJnZXRzXG4gICAgICAgICAgbGV0IHRhcmdldDJ4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzJYWF9DT1VOVCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIDN4eCByZXNwb25zZXMgZnJvbSB0YXJnZXRzXG4gICAgICAgICAgbGV0IHRhcmdldDN4eDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLmh0dHBDb2RlVGFyZ2V0KFxuICAgICAgICAgICAgSHR0cENvZGVUYXJnZXQuVEFSR0VUXzNYWF9DT1VOVCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgICAgLy8gM3h4IHJlc3BvbnNlcyBmcm9tIEVMQlxuICAgICAgICAgIGxldCBlbGIzeHg6IElNZXRyaWMgPSBhbGIubWV0cmljcy5odHRwQ29kZUVsYihcbiAgICAgICAgICAgIEh0dHBDb2RlRWxiLkVMQl8zWFhfQ09VTlQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gIFxuICAgICAgICAgIGxldCB1c2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MWBdID0gZWxiM3h4O1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9MmBdID0gdGFyZ2V0Mnh4O1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9M2BdID0gdGFyZ2V0M3h4O1xuICBcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZmF1bHRzIHBlciB6b25lIGZvciB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICAgICAgICBtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLnB1c2gobmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGBGSUxMKCR7a2V5cHJlZml4fTEsIDApICsgRklMTCgke2tleXByZWZpeH0yLCAwKSArIEZJTEwoJHtrZXlwcmVmaXh9MywgMClgLFxuICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWRcbiAgICAgICAgICB9KSk7XG4gIFxuICAgICAgICAgIGtleXByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoa2V5cHJlZml4KTtcbiAgICAgICAgfSk7ICAgXG4gICAgICB9KTtcbiAgXG4gICAgICAvLyBXZSBjYW4gaGF2ZSBtdWx0aXBsZSBsb2FkIGJhbGFuY2VycyBwZXIgem9uZSwgc28gYWRkIHRoZWlyIHN1Y2Nlc3MgY291bnRcbiAgICAgIC8vIG1ldHJpY3MgdG9nZXRoZXJcbiAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3NQZXJBWikuZm9yRWFjaCgoYXpMZXR0ZXI6IHN0cmluZykgPT4ge1xuXG4gICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG4gICAgICAgIFxuICAgICAgICBpZiAobWV0cmljc1BlckFaW2F6TGV0dGVyXS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgXG4gICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXS5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9JHtpbmRleH1gXSA9IG1ldHJpYztcbiAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgICAgc3VjY2Vzc1BlclpvbmVbYXpMZXR0ZXJdID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbihcIitcIiksXG4gICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHN1Y2Nlc3NQZXJab25lW2F6TGV0dGVyXSA9IG1ldHJpY3NQZXJBWlthekxldHRlcl1bMF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIFxuICAgICAgcmV0dXJuIHN1Y2Nlc3NQZXJab25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMgZm9yIGFsbCBBTEJzIGluIGVhY2ggem9uZVxuICAgICAqIEBwYXJhbSBhbGJzIFxuICAgICAqIEBwYXJhbSBwZXJpb2QgXG4gICAgICogQHBhcmFtIGF6TWFwcGVyIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUb3RhbEFsYlJlcXVlc3RzUGVyWm9uZShcbiAgICAgIGFsYnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgIGF6TWFwcGVyOiBBdmFpbGFiaWxpdHlab25lTWFwcGVyLFxuICAgICAgcHJlZml4Pzogc3RyaW5nXG4gICAgKSA6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfVxuICAgIHtcbiAgICAgIGxldCByZXF1ZXN0c1BlclpvbmU6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgbGV0IG1ldHJpY3NQZXJBWjoge1trZXk6IHN0cmluZ106IElNZXRyaWNbXX0gPSB7fTtcbiAgICAgIGxldCBrZXlwcmVmaXg6IHN0cmluZyA9IHByZWZpeCA/IHByZWZpeCA6IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoKTtcblxuICAgICAgYWxicy5mb3JFYWNoKChhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikgPT4ge1xuICBcbiAgICAgICAgYWxiLnZwYyEuYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGF6TGV0dGVyID0gYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgICAgaWYgKCEoYXpMZXR0ZXIgaW4gbWV0cmljc1BlckFaKSkge1xuICAgICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXSA9IFtdO1xuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgbGV0IHJlcXVlc3RDb3VudDogSU1ldHJpYyA9IGFsYi5tZXRyaWNzLnJlcXVlc3RDb3VudChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAgICAgICAgICAgLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAgICAgICAgIHVuaXQ6IFVuaXQuQ09VTlRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXS5wdXNoKHJlcXVlc3RDb3VudCk7XG4gICAgICAgIH0pOyAgIFxuICAgICAgfSk7XG4gIFxuICAgICAgLy8gV2UgY2FuIGhhdmUgbXVsdGlwbGUgbG9hZCBiYWxhbmNlcnMgcGVyIHpvbmUsIHNvIGFkZCB0aGVpciBwcm9jZXNzZWQgYnl0ZXMgdG9nZXRoZXJcbiAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3NQZXJBWikuZm9yRWFjaCgoYXpMZXR0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgIGlmIChtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmxlbmd0aCA+IDEpIHtcbiAgXG4gICAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICAgICAgXG4gICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXS5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9JHtpbmRleH1gXSA9IG1ldHJpYztcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGtleXByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoa2V5cHJlZml4KTtcbiAgICAgICAgXG4gICAgICAgICAgcmVxdWVzdHNQZXJab25lW2F6TGV0dGVyXSA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oXCIrXCIpLFxuICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2RcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0c1BlclpvbmVbYXpMZXR0ZXJdID0gbWV0cmljc1BlckFaW2F6TGV0dGVyXVswXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIFxuICAgICAgcmV0dXJuIHJlcXVlc3RzUGVyWm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgcHJvY2Vzc2VkIGJ5dGVzIGZvciBhbGwgQUxCcyBpbiBlYWNoIHpvbmVcbiAgICAgKiBAcGFyYW0gYWxicyBcbiAgICAgKiBAcGFyYW0gcGVyaW9kIFxuICAgICAqIEBwYXJhbSBhek1hcHBlciBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VG90YWxBbGJQcm9jZXNzZWRCeXRlc1BlclpvbmUoXG4gICAgICBhbGJzOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJbXSxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24sXG4gICAgICBhek1hcHBlcjogQXZhaWxhYmlsaXR5Wm9uZU1hcHBlclxuICAgICkgOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY31cbiAgICB7XG4gICAgICBsZXQgcHJvY2Vzc2VkQnl0ZXNQZXJab25lOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgIGxldCBtZXRyaWNzUGVyQVo6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljW119ID0ge307XG4gICAgICBsZXQga2V5cHJlZml4OiBzdHJpbmcgPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKCk7XG4gIFxuICAgICAgYWxicy5mb3JFYWNoKChhbGI6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikgPT4ge1xuICBcbiAgICAgICAgYWxiLnZwYyEuYXZhaWxhYmlsaXR5Wm9uZXMuZm9yRWFjaCgoYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGF6TGV0dGVyID0gYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgICAgaWYgKCEoYXpMZXR0ZXIgaW4gbWV0cmljc1BlckFaKSkge1xuICAgICAgICAgICAgbWV0cmljc1BlckFaW2F6TGV0dGVyXSA9IFtdO1xuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgbGV0IHByb2Nlc3NlZEJ5dGVzOiBJTWV0cmljID0gYWxiLm1ldHJpY3MucHJvY2Vzc2VkQnl0ZXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlab25lOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgICAgICAgICAgIC5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgICAgICAgICB1bml0OiBVbml0LkNPVU5UXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gIFxuICAgICAgICAgIG1ldHJpY3NQZXJBWlthekxldHRlcl0ucHVzaChwcm9jZXNzZWRCeXRlcyk7XG4gICAgICAgIH0pOyAgIFxuICAgICAgfSk7XG4gIFxuICAgICAgLy8gV2UgY2FuIGhhdmUgbXVsdGlwbGUgbG9hZCBiYWxhbmNlcnMgcGVyIHpvbmUsIHNvIGFkZCB0aGVpciBwcm9jZXNzZWQgYnl0ZXMgdG9nZXRoZXJcbiAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3NQZXJBWikuZm9yRWFjaCgoYXpMZXR0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICAgIGlmIChtZXRyaWNzUGVyQVpbYXpMZXR0ZXJdLmxlbmd0aCA+IDEpIHtcblxuICAgICAgICAgIGxldCB1c2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIG1ldHJpY3NQZXJBWlthekxldHRlcl0uZm9yRWFjaCgobWV0cmljOiBJTWV0cmljLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fSR7aW5kZXh9YF0gPSBtZXRyaWM7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBrZXlwcmVmaXggPSBNZXRyaWNzSGVscGVyLm5leHRDaGFyKGtleXByZWZpeCk7XG4gICAgICAgIFxuICAgICAgICAgIHByb2Nlc3NlZEJ5dGVzUGVyWm9uZVthekxldHRlcl0gPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKFwiK1wiKSxcbiAgICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgICAgbGFiZWw6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkQnl0ZXNQZXJab25lW2F6TGV0dGVyXSA9IG1ldHJpY3NQZXJBWlthekxldHRlcl1bMF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICBcbiAgICAgIHJldHVybiBwcm9jZXNzZWRCeXRlc1BlclpvbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyBhIHdlaWdodGVkIGFwcHJveGltYXRpb24gb2YgdGhlIGxhdGVuY3kgYXQgdGhlIHByb3ZpZGVkIHN0YXRpc3RpYyBmb3IgYWxsIEFMQnNcbiAgICAgKiBpbiBlYWNoIHpvbmUuXG4gICAgICogQHBhcmFtIGFsYnMgXG4gICAgICogQHBhcmFtIHN0YXRpc3RpYyBcbiAgICAgKiBAcGFyYW0gcGVyaW9kIFxuICAgICAqIEBwYXJhbSBhek1hcHBlciBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VG90YWxBbGJMYXRlbmN5UGVyWm9uZShcbiAgICAgIGFsYnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgICAgc3RhdGlzdGljOiBzdHJpbmcsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgICAgYXpNYXBwZXI6IEF2YWlsYWJpbGl0eVpvbmVNYXBwZXJcbiAgICApIDoge1trZXk6IHN0cmluZ106IElNZXRyaWN9XG4gICAge1xuICAgICAgbGV0IGxhdGVuY3lQZXJab25lOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgIGxldCBrZXlwcmVmaXg6IHN0cmluZyA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoKTtcblxuICAgICAgLy9sZXQgcmVxdWVzdENvdW50c1BlckFaOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY1tdfSA9IHt9O1xuICAgICAgbGV0IHJlcXVlc3RDb3VudHNQZXJBWk1ldHJpY0tleXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmdbXX0gPSB7fTtcblxuICAgICAgbGV0IHdlaWdodGVkTGF0ZW5jeVBlckFaOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY1tdfSA9IHt9O1xuICBcbiAgICAgIGFsYnMuZm9yRWFjaCgoYWxiOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIpID0+IHtcbiAgXG4gICAgICAgIGFsYi52cGMhLmF2YWlsYWJpbGl0eVpvbmVzLmZvckVhY2goKGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZykgPT4ge1xuXG4gICAgICAgICAgbGV0IGF6TGV0dGVyID0gYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcblxuICAgICAgICAgIGlmICghKGF6TGV0dGVyIGluIHdlaWdodGVkTGF0ZW5jeVBlckFaKSkge1xuICAgICAgICAgICAgd2VpZ2h0ZWRMYXRlbmN5UGVyQVpbYXpMZXR0ZXJdID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy9pZiAoIShhekxldHRlciBpbiByZXF1ZXN0Q291bnRzUGVyQVopKSB7XG4gICAgICAgICAgLy8gIHJlcXVlc3RDb3VudHNQZXJBWlthekxldHRlcl0gPSBbXTtcbiAgICAgICAgICAvL31cblxuICAgICAgICAgIGlmICghKGF6TGV0dGVyIGluIHJlcXVlc3RDb3VudHNQZXJBWk1ldHJpY0tleXMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0Q291bnRzUGVyQVpNZXRyaWNLZXlzW2F6TGV0dGVyXSA9IFtdO1xuICAgICAgICAgIH1cbiAgIFxuICAgICAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQgPSBhek1hcHBlci5hdmFpbGFiaWxpdHlab25lSWRGcm9tQXZhaWxhYmlsaXR5Wm9uZUxldHRlcihhekxldHRlcik7XG4gIFxuICAgICAgICAgIGxldCBsYXRlbmN5OiBJTWV0cmljID0gYWxiLm1ldHJpY3MudGFyZ2V0UmVzcG9uc2VUaW1lKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IHN0YXRpc3RpYyxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5TRUNPTkRTXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsZXQgcmVxdWVzdENvdW50OiBJTWV0cmljID0gYWxiLm1ldHJpY3MucmVxdWVzdENvdW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgICAgICBMb2FkQmFsYW5jZXI6IChhbGIgYXMgSUxvYWRCYWxhbmNlclYyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgICAgICAgICAgICAubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgICAgICAgICAgdW5pdDogVW5pdC5DT1VOVFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB7fTtcbiAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IGxhdGVuY3k7XG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleXByZWZpeH0yYF0gPSByZXF1ZXN0Q291bnQ7XG5cbiAgICAgICAgICBsZXQgd2VpZ2h0ZWRMYXRlbmN5OiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGAke2tleXByZWZpeH0xKiR7a2V5cHJlZml4fTJgLFxuICAgICAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHdlaWdodGVkTGF0ZW5jeVBlckFaW2F6TGV0dGVyXS5wdXNoKHdlaWdodGVkTGF0ZW5jeSk7XG5cbiAgICAgICAgICAvL3JlcXVlc3RDb3VudHNQZXJBWlthekxldHRlcl0ucHVzaChyZXF1ZXN0Q291bnQpO1xuICAgICAgICAgIHJlcXVlc3RDb3VudHNQZXJBWk1ldHJpY0tleXNbYXpMZXR0ZXJdLnB1c2goYCR7a2V5cHJlZml4fTJgKTtcbiAgXG4gICAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuICAgICAgICB9KTsgICBcbiAgICAgIH0pO1xuICBcbiAgICAgIC8vIFdlIGNhbiBoYXZlIG11bHRpcGxlIGxvYWQgYmFsYW5jZXJzIHBlciB6b25lLCBjb21iaW5lIHRoZWlyIGxhdGVuY3kgcGVyIHpvbmVcbiAgICAgIC8vIHRvIGdldCBhbiBhdmVyYWdlIGxhdGVuY3kgcGVyY2VudGlsZSBsYXRlbmN5LCBsaWtlIGF2ZXJhZ2UgcDk5XG4gICAgICBPYmplY3Qua2V5cyh3ZWlnaHRlZExhdGVuY3lQZXJBWikuZm9yRWFjaCgoYXpMZXR0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkID0gYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuICBcbiAgICAgICAgbGV0IHVzaW5nTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG5cbiAgICAgICAgd2VpZ2h0ZWRMYXRlbmN5UGVyQVpbYXpMZXR0ZXJdLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9JHtpbmRleH1gXSA9IG1ldHJpYztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IG51bWVyYXRvciA9IFwiKFwiICsgT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKFwiK1wiKSArIFwiKVwiO1xuICAgICAgICAvL2xldCBpbmRleCA9IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykubGVuZ3RoO1xuXG4gICAgICAgIGtleXByZWZpeCA9IE1ldHJpY3NIZWxwZXIubmV4dENoYXIoa2V5cHJlZml4KTtcblxuICAgICAgICAvLyBUT0RPOiBXZSdyZSBkdXBsaWNhdGluZyB0aGUgc2FtZSBtZXRyaWMgd2l0aCAyIGRpZmZlcmVudCBrZXlzIGZvciByZXF1ZXN0IGNvdW50XG4gICAgICAgIC8vcmVxdWVzdENvdW50c1BlckFaW2F6TGV0dGVyXS5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gIHVzaW5nTWV0cmljc1tgJHtrZXlwcmVmaXh9JHtpbmRleH1gXSA9IG1ldHJpYztcbiAgICAgICAgLy99KTsgXG5cbiAgICAgICAgLy9sZXQgZGVub21pbmF0b3I6IHN0cmluZyA9IFwiKFwiICsgT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5zbGljZShpbmRleCkuam9pbihcIitcIikgKyBcIilcIjtcbiAgICAgICAgbGV0IGRlbm9taW5hdG9yOiBzdHJpbmcgPSBcIihcIiArIHJlcXVlc3RDb3VudHNQZXJBWk1ldHJpY0tleXNbYXpMZXR0ZXJdLmpvaW4oXCIrXCIpICsgXCIpXCI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoaXMgZm9ybXVsYVxuICAgICAgICAgKiBcbiAgICAgICAgICogKHA5OV8xICogcmVxdWVzdHNfMSArIHA5OV8yICogcmVxdWVzdHNfMiArIHA5OV8zICogcmVxdWVzdHNfMykgLyAocmVxdWVzdHNfMSArIHJlcXVlc3RzXzIgKyByZXF1ZXN0c18zKVxuICAgICAgICAgKiBcbiAgICAgICAgICogVGhpcyB3aWxsIHByb3ZpZGUgYSByZXF1ZXN0IHdlaWdodGVkIGFwcHJveGltYXRpb24gb2YgdGhlIHA5OVxuICAgICAgICAgKiBsYXRlbmN5IHBlciBBWlxuICAgICAgICAgKi9cbiAgXG4gICAgICAgIGxhdGVuY3lQZXJab25lW2F6TGV0dGVyXSA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgZXhwcmVzc2lvbjogXCIoXCIgKyBudW1lcmF0b3IgKyBcIi9cIiArIGRlbm9taW5hdG9yICsgXCIpICogMTAwMFwiLFxuICAgICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICAgIGxhYmVsOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgcGVyaW9kOiBwZXJpb2RcbiAgICAgICAgfSk7XG5cbiAgICAgICAga2V5cHJlZml4ID0gTWV0cmljc0hlbHBlci5uZXh0Q2hhcihrZXlwcmVmaXgpO1xuICAgICAgfSk7XG4gIFxuICAgICAgcmV0dXJuIGxhdGVuY3lQZXJab25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZhdWx0IHJhdGUgcGVyIEFaXG4gICAgICogQHBhcmFtIHJlcXVlc3RzUGVyWm9uZSBcbiAgICAgKiBAcGFyYW0gZmF1bHRzUGVyWm9uZSBcbiAgICAgKiBAcGFyYW0gcGVyaW9kIFxuICAgICAqIEBwYXJhbSBhek1hcHBlciBcbiAgICAgKiBAcmV0dXJucyBUaGUgZmF1bHQgcmF0ZSBwZXIgQVogdXNpbmcgdGhlIEFaIG5hbWUgbGV0dGVyIGFzIHRoZSBrZXkgZm9yIGVhY2ggbWV0cmljXG4gICAgICovXG4gICAgc3RhdGljIGdldFRvdGFsQWxiRmF1bHRSYXRlUGVyWm9uZShcbiAgICAgIGFsYnM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcltdLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgICAgIGF6TWFwcGVyOiBBdmFpbGFiaWxpdHlab25lTWFwcGVyLFxuICAgICkgOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30ge1xuXG4gICAgICBsZXQgZmF1bHRSYXRlTWV0cmljczoge1trZXk6IHN0cmluZ106IElNZXRyaWN9ID0ge307XG4gICAgICBsZXQgcmVxdWVzdHNQZXJab25lOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB0aGlzLmdldFRvdGFsQWxiUmVxdWVzdHNQZXJab25lKGFsYnMsIHBlcmlvZCwgYXpNYXBwZXIsIFwiYVwiKTtcbiAgICAgIGxldCBmYXVsdHNQZXJab25lOiB7W2tleTogc3RyaW5nXTogSU1ldHJpY30gPSB0aGlzLmdldFRvdGFsQWxiRmF1bHRDb3VudFBlclpvbmUoYWxicywgcGVyaW9kLCBhek1hcHBlciwgXCJlXCIpO1xuXG4gICAgICBPYmplY3Qua2V5cyhyZXF1ZXN0c1BlclpvbmUpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW4gZmF1bHRzUGVyWm9uZSkge1xuICAgICAgICAgIGxldCB1c2luZ01ldHJpY3M6IHtba2V5OiBzdHJpbmddOiBJTWV0cmljfSA9IHt9O1xuICAgICAgICAgIGxldCBrZXlwcmVmaXggPSAneicgKyBrZXk7XG4gICAgICAgICBcbiAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTFgXSA9IGZhdWx0c1BlclpvbmVba2V5XTtcbiAgICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5cHJlZml4fTJgXSA9IHJlcXVlc3RzUGVyWm9uZVtrZXldO1xuXG4gICAgICAgICAgbGV0IHpvbmFsRmF1bHRSYXRlOiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGAoJHtrZXlwcmVmaXh9MS8ke2tleXByZWZpeH0yKSAqIDEwMGAsXG4gICAgICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgbGFiZWw6IGF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGtleSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGZhdWx0UmF0ZU1ldHJpY3Nba2V5XSA9IHpvbmFsRmF1bHRSYXRlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB6b25lIFwiICsga2V5ICsgXCIgaXMgbm90IHByZXNlbnQgaW4gdGhlIGZhdWx0c1BlclpvbmUgcGFyYW1ldGVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdC5rZXlzKGZhdWx0c1BlclpvbmUpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghKGtleSBpbiByZXF1ZXN0c1BlclpvbmUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHpvbmUgXCIgKyBrZXkgKyBcIiBpcyBub3QgcHJlc2VudCBpbiB0aGUgcmVxdWVzdHNQZXJab25lIHBhcmFtZXRlci5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZmF1bHRSYXRlTWV0cmljcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgem9uYWwgcHJvY2Vzc2VkIGJ5dGVzIG1ldHJpYyBmb3IgdGhlIHNwZWNpZmllZCBsb2FkIGJhbGFuY2VyXG4gICAgICogQHBhcmFtIGxvYWRCYWxhbmNlckZ1bGxOYW1lXG4gICAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVOYW1lXG4gICAgICogQHBhcmFtIHBlcmlvZFxuICAgICAqIEByZXR1cm5zIElNZXRyaWNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UGVyQVpQcm9jZXNzZWRCeXRlc01ldHJpYyhcbiAgICAgIGFsYjogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmcsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgICAgYWRkTG9hZEJhbGFuY2VyQXJuVG9MYWJlbD86IGJvb2xlYW5cbiAgICApOiBJTWV0cmljIHtcbiAgICAgIHJldHVybiBhbGIubWV0cmljcy5wcm9jZXNzZWRCeXRlcyh7XG4gICAgICAgICAgcGVyaW9kOiBwZXJpb2QsXG4gICAgICAgICAgZGltZW5zaW9uc01hcDp7XG4gICAgICAgICAgICAgIExvYWRCYWxhbmNlcjogKGFsYiBhcyBJTG9hZEJhbGFuY2VyVjIgYXMgQmFzZUxvYWRCYWxhbmNlcikubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYWJlbDogYXZhaWxhYmlsaXR5Wm9uZUlkICsgKGFkZExvYWRCYWxhbmNlckFyblRvTGFiZWwgPyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gOiBcIlwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHpvbmFsIHByb2Nlc3NlZCBieXRlcyBtZXRyaWMgZm9yIHRoZSBzcGVjaWZpZWQgbG9hZCBiYWxhbmNlclxuICAgICAqIEBwYXJhbSBsb2FkQmFsYW5jZXJGdWxsTmFtZVxuICAgICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lTmFtZVxuICAgICAqIEBwYXJhbSBwZXJpb2RcbiAgICAgKiBAcmV0dXJucyBJTWV0cmljXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlZ2lvbmFsUHJvY2Vzc2VkQnl0ZXNNZXRyaWMoXG4gICAgICAgIGFsYjogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLFxuICAgICAgICBhZGRMb2FkQmFsYW5jZXJBcm4/OiBib29sZWFuXG4gICAgICApOiBJTWV0cmljIHtcbiAgICAgICAgcmV0dXJuIGFsYi5tZXRyaWNzLnByb2Nlc3NlZEJ5dGVzKHtcbiAgICAgICAgICAgIHBlcmlvZDogcGVyaW9kLFxuICAgICAgICAgICAgZGltZW5zaW9uc01hcDp7XG4gICAgICAgICAgICAgICAgTG9hZEJhbGFuY2VyOiAoYWxiIGFzIElMb2FkQmFsYW5jZXJWMiBhcyBCYXNlTG9hZEJhbGFuY2VyKS5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogQXdzLlJFR0lPTiArIChhZGRMb2FkQmFsYW5jZXJBcm4gPyBcIi1cIiArIGFsYi5sb2FkQmFsYW5jZXJBcm4gOiBcIlwiKVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -15,5 +15,5 @@ class CanaryMetrics {
15
15
  }
16
16
  exports.CanaryMetrics = CanaryMetrics;
17
17
  _a = JSII_RTTI_SYMBOL_1;
18
- CanaryMetrics[_a] = { fqn: "@cdklabs/multi-az-observability.CanaryMetrics", version: "0.0.1-alpha.13" };
18
+ CanaryMetrics[_a] = { fqn: "@cdklabs/multi-az-observability.CanaryMetrics", version: "0.0.1-alpha.14" };
19
19
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5TWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9DYW5hcnlNZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUE7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFXeEIsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsK0JBQStCO1lBQ2xDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0lBQ3JFLENBQUM7O0FBZkgsc0NBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgSUNhbmFyeU1ldHJpY3MgfSBmcm9tICcuL0lDYW5hcnlNZXRyaWNzJztcbmltcG9ydCB7IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzIH0gZnJvbSAnLi9JT3BlcmF0aW9uTWV0cmljRGV0YWlscyc7XG5pbXBvcnQgeyBDYW5hcnlNZXRyaWNQcm9wcyB9IGZyb20gJy4vcHJvcHMvQ2FuYXJ5TWV0cmljUHJvcHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgbWV0cmljcyBmb3IgYSBjYW5hcnkgdGVzdGluZyBhIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIENhbmFyeU1ldHJpY3MgaW1wbGVtZW50cyBJQ2FuYXJ5TWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FuYXJ5IGF2YWlsYWJpbGl0eSBtZXRyaWMgZGV0YWlsc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FuYXJ5QXZhaWxhYmlsaXR5TWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBjYW5hcnkgbGF0ZW5jeSBtZXRyaWMgZGV0YWlsc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FuYXJ5TGF0ZW5jeU1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDYW5hcnlNZXRyaWNQcm9wcykge1xuICAgIHRoaXMuY2FuYXJ5QXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyA9XG4gICAgICBwcm9wcy5jYW5hcnlBdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzO1xuICAgIHRoaXMuY2FuYXJ5TGF0ZW5jeU1ldHJpY0RldGFpbHMgPSBwcm9wcy5jYW5hcnlMYXRlbmN5TWV0cmljRGV0YWlscztcbiAgfVxufVxuIl19
@@ -19,5 +19,5 @@ class CanaryTestMetricsOverride {
19
19
  }
20
20
  exports.CanaryTestMetricsOverride = CanaryTestMetricsOverride;
21
21
  _a = JSII_RTTI_SYMBOL_1;
22
- CanaryTestMetricsOverride[_a] = { fqn: "@cdklabs/multi-az-observability.CanaryTestMetricsOverride", version: "0.0.1-alpha.13" };
22
+ CanaryTestMetricsOverride[_a] = { fqn: "@cdklabs/multi-az-observability.CanaryTestMetricsOverride", version: "0.0.1-alpha.14" };
23
23
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5VGVzdE1ldHJpY3NPdmVycmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9DYW5hcnlUZXN0TWV0cmljc092ZXJyaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUE7OztHQUdHO0FBQ0gsTUFBYSx5QkFBeUI7SUFvQ3BDLFlBQVksS0FBcUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0lBQ3ZELENBQUM7O0FBM0NILDhEQTRDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSUNhbmFyeVRlc3RNZXRyaWNzT3ZlcnJpZGUgfSBmcm9tICcuL0lDYW5hcnlUZXN0TWV0cmljc092ZXJyaWRlJztcbmltcG9ydCB7IENhbmFyeVRlc3RNZXRyaWNzT3ZlcnJpZGVQcm9wcyB9IGZyb20gJy4vcHJvcHMvQ2FuYXJ5VGVzdE1ldHJpY3NPdmVycmlkZVByb3BzJztcblxuLyoqXG4gKiBQcm92aWRlcyBvdmVycmlkZXMgZm9yIHRoZSBkZWZhdWx0IG1ldHJpYyBzZXR0aW5nc1xuICogdXNlZCBmb3IgdGhlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBjYW5hcnkgdGVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIENhbmFyeVRlc3RNZXRyaWNzT3ZlcnJpZGUgaW1wbGVtZW50cyBJQ2FuYXJ5VGVzdE1ldHJpY3NPdmVycmlkZSB7XG4gIC8qKlxuICAgKiBUaGUgc3RhdGlzdGljIHVzZWQgZm9yIGFsYXJtcywgZm9yIGF2YWlsYWJpbGl0eSBtZXRyaWNzIHRoaXMgc2hvdWxkXG4gICAqIGJlIFwiU3VtXCIsIGZvciBsYXRlbmN5IG1ldHJpY3MgaXQgY291bGQgc29tZXRoaW5nIGxpa2UgXCJwOTlcIiBvciBcInA5OS45XCJcbiAgICovXG4gIHJlYWRvbmx5IGFsYXJtU3RhdGlzdGljPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyaW9kIGZvciB0aGUgbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgcGVyaW9kPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZXZhbHVhdGlvbiBwZXJpb2RzIGZvciBsYXRlbmN5IGFuZCBhdmFpbGFiaWx0aXkgYWxhcm1zXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0aW9uUGVyaW9kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkYXRhcG9pbnRzIHRvIGFsYXJtIG9uIGZvciBsYXRlbmN5IGFuZCBhdmFpbGFiaWxpdHkgYWxhcm1zXG4gICAqL1xuICByZWFkb25seSBkYXRhcG9pbnRzVG9BbGFybT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRocmVzaG9sZCBmb3IgYWxhcm1zIGFzc29jaWF0ZWQgd2l0aCBzdWNjZXNzIG1ldHJpY3MsIGZvciBleGFtcGxlIGlmIG1lYXN1cmluZ1xuICAgKiBzdWNjZXNzIHJhdGUsIHRoZSB0aHJlc2hvbGQgbWF5IGJlIDk5LCBtZWFuaW5nIHlvdSB3b3VsZCB3YW50IGFuIGFsYXJtIHRoYXQgdHJpZ2dlcnNcbiAgICogaWYgc3VjY2VzcyBkcm9wcyBiZWxvdyA5OSUuXG4gICAqL1xuICByZWFkb25seSBzdWNjZXNzQWxhcm1UaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0aHJlc2hvbGQgZm9yIGFsYXJtcyBhc3NvY2lhdGVkIHdpdGggZmF1bHQgbWV0cmljcywgZm9yIGV4YW1wbGUgaWYgbWVhc3VyaW5nXG4gICAqIGZhdWx0IHJhdGUsIHRoZSB0aHJlc2hvbGQgbWF5IGJlIDEsIG1lYW5pbmcgeW91IHdvdWxkIHdhbnQgYW4gYWxhcm0gdGhhdCB0cmlnZ2Vyc1xuICAgKiBpZiB0aGUgZmF1bHQgcmF0ZSBnb2VzIGFib3ZlIDElLlxuICAgKi9cbiAgcmVhZG9ubHkgZmF1bHRBbGFybVRocmVzaG9sZD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2FuYXJ5VGVzdE1ldHJpY3NPdmVycmlkZVByb3BzKSB7XG4gICAgdGhpcy5hbGFybVN0YXRpc3RpYyA9IHByb3BzLmFsYXJtU3RhdGlzdGljO1xuICAgIHRoaXMucGVyaW9kID0gcHJvcHMucGVyaW9kO1xuICAgIHRoaXMuZXZhbHVhdGlvblBlcmlvZHMgPSBwcm9wcy5ldmFsdWF0aW9uUGVyaW9kcztcbiAgICB0aGlzLmRhdGFwb2ludHNUb0FsYXJtID0gcHJvcHMuZGF0YXBvaW50c1RvQWxhcm07XG4gICAgdGhpcy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQgPSBwcm9wcy5zdWNjZXNzQWxhcm1UaHJlc2hvbGQ7XG4gICAgdGhpcy5mYXVsdEFsYXJtVGhyZXNob2xkID0gcHJvcHMuZmF1bHRBbGFybVRocmVzaG9sZDtcbiAgfVxufVxuIl19
@@ -19,5 +19,5 @@ class ContributorInsightRuleDetails {
19
19
  }
20
20
  exports.ContributorInsightRuleDetails = ContributorInsightRuleDetails;
21
21
  _a = JSII_RTTI_SYMBOL_1;
22
- ContributorInsightRuleDetails[_a] = { fqn: "@cdklabs/multi-az-observability.ContributorInsightRuleDetails", version: "0.0.1-alpha.13" };
22
+ ContributorInsightRuleDetails[_a] = { fqn: "@cdklabs/multi-az-observability.ContributorInsightRuleDetails", version: "0.0.1-alpha.14" };
23
23
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQTs7O0dBR0c7QUFDSCxNQUFhLDZCQUE2QjtJQXdDeEMsWUFBWSxLQUF5QztRQUNuRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDO1FBQ25FLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDckQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztRQUN6RCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDO0lBQ3pFLENBQUM7O0FBL0NILHNFQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IElDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyB9IGZyb20gJy4vSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzJztcbmltcG9ydCB7IENvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzUHJvcHMgfSBmcm9tICcuL3Byb3BzL0NvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzUHJvcHMnO1xuXG4vKipcbiAqIFRoZSBjb250cmlidXRvciBpbnNpZ2h0IHJ1bGUgZGV0YWlscyBmb3IgY3JlYXRpbmcgYW5cbiAqIGluc2lnaHQgcnVsZVxuICovXG5leHBvcnQgY2xhc3MgQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHNcbmltcGxlbWVudHMgSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzIHtcbiAgLyoqXG4gICAqIFRoZSBsb2cgZ3JvdXBzIHdoZXJlIENsb3VkV2F0Y2ggbG9ncyBmb3IgdGhlIG9wZXJhdGlvbiBhcmUgbG9jYXRlZC4gSWZcbiAgICogdGhpcyBpcyBub3QgcHJvdmlkZWQsIENvbnRyaWJ1dG9yIEluc2lnaHQgcnVsZXMgY2Fubm90IGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cHM6IElMb2dHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBpbiB0aGUgbG9nIGZpbGVzIHRvIHRoZSBmaWVsZCB0aGF0IGluZGljYXRlcyB0aGUgbGF0ZW5jeVxuICAgKiBmb3IgdGhlIHJlc3BvbnNlLiBUaGlzIGNvdWxkIGVpdGhlciBiZSBzdWNjZXNzIGxhdGVuY3kgb3IgZmF1bHRcbiAgICogbGF0ZW5jeSBkZXBlbmRpbmcgb24gdGhlIGFsYXJtcyBhbmQgcnVsZXMgeW91IGFyZSBjcmVhdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN1Y2Nlc3NMYXRlbmN5TWV0cmljSnNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggaW4gdGhlIGxvZyBmaWxlcyB0byB0aGUgZmllbGQgdGhhdCBpZGVudGlmaWVzIHRoZSBvcGVyYXRpb25cbiAgICogdGhlIGxvZyBmaWxlIGlzIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbk5hbWVKc29uUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBpbiB0aGUgbG9nIGZpbGVzIHRvIHRoZSBmaWVsZCB0aGF0IGlkZW50aWZpZXMgaWYgdGhlIHJlc3BvbnNlXG4gICAqIHJlc3VsdGVkIGluIGEgZmF1bHQsIGZvciBleGFtcGxlIHsgXCJGYXVsdFwiIDogMSB9IHdvdWxkIGhhdmUgYSBwYXRoIG9mICQuRmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGZhdWx0TWV0cmljSnNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggaW4gdGhlIGxvZyBmaWxlcyB0byB0aGUgZmllbGQgdGhhdCBpZGVudGlmaWVzIHRoZSBBdmFpbGFiaWxpdHkgWm9uZVxuICAgKiBJZCB0aGF0IHRoZSByZXF1ZXN0IHdhcyBoYW5kbGVkIGluLCBmb3IgZXhhbXBsZSB7IFwiQVotSURcIjogXCJ1c2UxLWF6MVwiIH0gd291bGRcbiAgICogaGF2ZSBhIHBhdGggb2YgJC5BWi1JRFxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZUlkSnNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEpTT04gcGF0aCB0byB0aGUgaW5zdGFuY2UgaWQgZmllbGQgaW4gdGhlIGxvZyBmaWxlcywgb25seSByZXF1aXJlZCBmb3Igc2VydmVyLXNpZGVcbiAgICogcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlSWRKc29uUGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlsc1Byb3BzKSB7XG4gICAgdGhpcy5hdmFpbGFiaWxpdHlab25lSWRKc29uUGF0aCA9IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZEpzb25QYXRoO1xuICAgIHRoaXMuZmF1bHRNZXRyaWNKc29uUGF0aCA9IHByb3BzLmZhdWx0TWV0cmljSnNvblBhdGg7XG4gICAgdGhpcy5pbnN0YW5jZUlkSnNvblBhdGggPSBwcm9wcy5pbnN0YW5jZUlkSnNvblBhdGg7XG4gICAgdGhpcy5sb2dHcm91cHMgPSBwcm9wcy5sb2dHcm91cHM7XG4gICAgdGhpcy5vcGVyYXRpb25OYW1lSnNvblBhdGggPSBwcm9wcy5vcGVyYXRpb25OYW1lSnNvblBhdGg7XG4gICAgdGhpcy5zdWNjZXNzTGF0ZW5jeU1ldHJpY0pzb25QYXRoID0gcHJvcHMuc3VjY2Vzc0xhdGVuY3lNZXRyaWNKc29uUGF0aDtcbiAgfVxufVxuIl19