@bluedynamics/cdk8s-monitoring 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/examples/synth.ts CHANGED
@@ -19,6 +19,12 @@ const config = mergeConfig({
19
19
  grafanaSecretStore: 'example-app-secrets-store',
20
20
  grafanaCredentialsKey: 'example-grafana-admin',
21
21
  },
22
+ tempo: {
23
+ enabled: true,
24
+ bucket: 'example-tempo',
25
+ retention: '336h',
26
+ tailSampling: { latencyThresholdMs: 1000, probabilisticPercent: 10 },
27
+ },
22
28
  });
23
29
  new MonitoringChart(app, 'monitoring', config);
24
30
  app.synth();
@@ -0,0 +1,20 @@
1
+ import { Construct } from 'constructs';
2
+ import { MonitoringConfig } from '../types';
3
+ export interface AlloyTracesProps {
4
+ namespace: string;
5
+ config: MonitoringConfig;
6
+ }
7
+ /**
8
+ * Creates a dedicated Alloy deployment as the OTLP traces gateway.
9
+ *
10
+ * Apps send OTLP (gRPC 4317 / HTTP 4318) to the `alloy-traces` service. This
11
+ * single-replica gateway tail-samples (all errors + slow traces + a probabilistic
12
+ * remainder) and exports to Tempo's OTLP distributor. One replica guarantees a
13
+ * single instance sees all spans of a trace, which tail-sampling requires.
14
+ *
15
+ * Sync Wave: 3 (advanced services, alongside Tempo).
16
+ */
17
+ export declare class AlloyTracesConstruct extends Construct {
18
+ constructor(scope: Construct, id: string, props: AlloyTracesProps);
19
+ private generateHelmValues;
20
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlloyTracesConstruct = void 0;
4
+ const cdk8s_1 = require("cdk8s");
5
+ const constructs_1 = require("constructs");
6
+ /**
7
+ * Creates a dedicated Alloy deployment as the OTLP traces gateway.
8
+ *
9
+ * Apps send OTLP (gRPC 4317 / HTTP 4318) to the `alloy-traces` service. This
10
+ * single-replica gateway tail-samples (all errors + slow traces + a probabilistic
11
+ * remainder) and exports to Tempo's OTLP distributor. One replica guarantees a
12
+ * single instance sees all spans of a trace, which tail-sampling requires.
13
+ *
14
+ * Sync Wave: 3 (advanced services, alongside Tempo).
15
+ */
16
+ class AlloyTracesConstruct extends constructs_1.Construct {
17
+ constructor(scope, id, props) {
18
+ super(scope, id);
19
+ const { namespace, config } = props;
20
+ new cdk8s_1.ApiObject(this, 'alloy-traces', {
21
+ apiVersion: 'helm.cattle.io/v1',
22
+ kind: 'HelmChart',
23
+ metadata: {
24
+ name: 'alloy-traces',
25
+ namespace: namespace,
26
+ labels: {
27
+ 'app.kubernetes.io/name': 'alloy-traces',
28
+ 'app.kubernetes.io/component': 'trace-collector',
29
+ 'app.kubernetes.io/managed-by': 'cdk8s',
30
+ 'app.kubernetes.io/part-of': 'monitoring',
31
+ },
32
+ annotations: {
33
+ 'argocd.argoproj.io/sync-wave': '3',
34
+ },
35
+ },
36
+ spec: {
37
+ repo: 'https://grafana.github.io/helm-charts',
38
+ chart: 'alloy',
39
+ version: config.versions.alloy === 'latest' ? undefined : config.versions.alloy,
40
+ targetNamespace: namespace,
41
+ valuesContent: this.generateHelmValues(config),
42
+ },
43
+ });
44
+ }
45
+ generateHelmValues(config) {
46
+ const ts = config.tempo.tailSampling;
47
+ return `controller:
48
+ type: deployment
49
+ replicas: 1
50
+ alloy:
51
+ extraPorts:
52
+ - name: otlp-grpc
53
+ port: 4317
54
+ targetPort: 4317
55
+ protocol: TCP
56
+ - name: otlp-http
57
+ port: 4318
58
+ targetPort: 4318
59
+ protocol: TCP
60
+ configMap:
61
+ content: |-
62
+ otelcol.receiver.otlp "default" {
63
+ grpc { endpoint = "0.0.0.0:4317" }
64
+ http { endpoint = "0.0.0.0:4318" }
65
+ output { traces = [otelcol.processor.tail_sampling.default.input] }
66
+ }
67
+
68
+ otelcol.processor.tail_sampling "default" {
69
+ decision_wait = "10s"
70
+
71
+ policy {
72
+ name = "errors"
73
+ type = "status_code"
74
+ status_code { status_codes = ["ERROR"] }
75
+ }
76
+
77
+ policy {
78
+ name = "slow"
79
+ type = "latency"
80
+ latency { threshold_ms = ${ts.latencyThresholdMs} }
81
+ }
82
+
83
+ policy {
84
+ name = "rest"
85
+ type = "probabilistic"
86
+ probabilistic { sampling_percentage = ${ts.probabilisticPercent} }
87
+ }
88
+
89
+ output { traces = [otelcol.exporter.otlp.tempo.input] }
90
+ }
91
+
92
+ otelcol.exporter.otlp "tempo" {
93
+ client {
94
+ endpoint = "tempo.${config.namespace}.svc.cluster.local:4317"
95
+ tls { insecure = true }
96
+ }
97
+ }
98
+ resources:
99
+ requests:
100
+ cpu: ${config.resources.alloyTraces.requests.cpu}
101
+ memory: ${config.resources.alloyTraces.requests.memory}
102
+ limits:
103
+ cpu: ${config.resources.alloyTraces.limits.cpu}
104
+ memory: ${config.resources.alloyTraces.limits.memory}
105
+ `;
106
+ }
107
+ }
108
+ exports.AlloyTracesConstruct = AlloyTracesConstruct;
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3ktdHJhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvYWxsb3ktdHJhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFrQztBQUNsQywyQ0FBdUM7QUFRdkM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFcEMsSUFBSSxpQkFBUyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDbEMsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixJQUFJLEVBQUUsV0FBVztZQUNqQixRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsY0FBYztvQkFDeEMsNkJBQTZCLEVBQUUsaUJBQWlCO29CQUNoRCw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxLQUFLLEVBQUUsT0FBTztnQkFDZCxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSztnQkFDL0UsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO2FBQy9DO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQXdCO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3JDLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FpQzBCLEVBQUUsQ0FBQyxrQkFBa0I7Ozs7OztrREFNUixFQUFFLENBQUMsb0JBQW9COzs7Ozs7Ozs4QkFRM0MsTUFBTSxDQUFDLFNBQVM7Ozs7OztXQU1uQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRztjQUN0QyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTTs7V0FFL0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUc7Y0FDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU07Q0FDdkQsQ0FBQztJQUNBLENBQUM7Q0FDRjtBQTlGRCxvREE4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1vbml0b3JpbmdDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3lUcmFjZXNQcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZGljYXRlZCBBbGxveSBkZXBsb3ltZW50IGFzIHRoZSBPVExQIHRyYWNlcyBnYXRld2F5LlxuICpcbiAqIEFwcHMgc2VuZCBPVExQIChnUlBDIDQzMTcgLyBIVFRQIDQzMTgpIHRvIHRoZSBgYWxsb3ktdHJhY2VzYCBzZXJ2aWNlLiBUaGlzXG4gKiBzaW5nbGUtcmVwbGljYSBnYXRld2F5IHRhaWwtc2FtcGxlcyAoYWxsIGVycm9ycyArIHNsb3cgdHJhY2VzICsgYSBwcm9iYWJpbGlzdGljXG4gKiByZW1haW5kZXIpIGFuZCBleHBvcnRzIHRvIFRlbXBvJ3MgT1RMUCBkaXN0cmlidXRvci4gT25lIHJlcGxpY2EgZ3VhcmFudGVlcyBhXG4gKiBzaW5nbGUgaW5zdGFuY2Ugc2VlcyBhbGwgc3BhbnMgb2YgYSB0cmFjZSwgd2hpY2ggdGFpbC1zYW1wbGluZyByZXF1aXJlcy5cbiAqXG4gKiBTeW5jIFdhdmU6IDMgKGFkdmFuY2VkIHNlcnZpY2VzLCBhbG9uZ3NpZGUgVGVtcG8pLlxuICovXG5leHBvcnQgY2xhc3MgQWxsb3lUcmFjZXNDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWxsb3lUcmFjZXNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IG5hbWVzcGFjZSwgY29uZmlnIH0gPSBwcm9wcztcblxuICAgIG5ldyBBcGlPYmplY3QodGhpcywgJ2FsbG95LXRyYWNlcycsIHtcbiAgICAgIGFwaVZlcnNpb246ICdoZWxtLmNhdHRsZS5pby92MScsXG4gICAgICBraW5kOiAnSGVsbUNoYXJ0JyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6ICdhbGxveS10cmFjZXMnLFxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAnYWxsb3ktdHJhY2VzJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ3RyYWNlLWNvbGxlY3RvcicsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzMnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgcmVwbzogJ2h0dHBzOi8vZ3JhZmFuYS5naXRodWIuaW8vaGVsbS1jaGFydHMnLFxuICAgICAgICBjaGFydDogJ2FsbG95JyxcbiAgICAgICAgdmVyc2lvbjogY29uZmlnLnZlcnNpb25zLmFsbG95ID09PSAnbGF0ZXN0JyA/IHVuZGVmaW5lZCA6IGNvbmZpZy52ZXJzaW9ucy5hbGxveSxcbiAgICAgICAgdGFyZ2V0TmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgIHZhbHVlc0NvbnRlbnQ6IHRoaXMuZ2VuZXJhdGVIZWxtVmFsdWVzKGNvbmZpZyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUhlbG1WYWx1ZXMoY29uZmlnOiBNb25pdG9yaW5nQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cyA9IGNvbmZpZy50ZW1wby50YWlsU2FtcGxpbmc7XG4gICAgcmV0dXJuIGBjb250cm9sbGVyOlxuICB0eXBlOiBkZXBsb3ltZW50XG4gIHJlcGxpY2FzOiAxXG5hbGxveTpcbiAgZXh0cmFQb3J0czpcbiAgICAtIG5hbWU6IG90bHAtZ3JwY1xuICAgICAgcG9ydDogNDMxN1xuICAgICAgdGFyZ2V0UG9ydDogNDMxN1xuICAgICAgcHJvdG9jb2w6IFRDUFxuICAgIC0gbmFtZTogb3RscC1odHRwXG4gICAgICBwb3J0OiA0MzE4XG4gICAgICB0YXJnZXRQb3J0OiA0MzE4XG4gICAgICBwcm90b2NvbDogVENQXG4gIGNvbmZpZ01hcDpcbiAgICBjb250ZW50OiB8LVxuICAgICAgb3RlbGNvbC5yZWNlaXZlci5vdGxwIFwiZGVmYXVsdFwiIHtcbiAgICAgICAgZ3JwYyB7IGVuZHBvaW50ID0gXCIwLjAuMC4wOjQzMTdcIiB9XG4gICAgICAgIGh0dHAgeyBlbmRwb2ludCA9IFwiMC4wLjAuMDo0MzE4XCIgfVxuICAgICAgICBvdXRwdXQgeyB0cmFjZXMgPSBbb3RlbGNvbC5wcm9jZXNzb3IudGFpbF9zYW1wbGluZy5kZWZhdWx0LmlucHV0XSB9XG4gICAgICB9XG5cbiAgICAgIG90ZWxjb2wucHJvY2Vzc29yLnRhaWxfc2FtcGxpbmcgXCJkZWZhdWx0XCIge1xuICAgICAgICBkZWNpc2lvbl93YWl0ID0gXCIxMHNcIlxuXG4gICAgICAgIHBvbGljeSB7XG4gICAgICAgICAgbmFtZSA9IFwiZXJyb3JzXCJcbiAgICAgICAgICB0eXBlID0gXCJzdGF0dXNfY29kZVwiXG4gICAgICAgICAgc3RhdHVzX2NvZGUgeyBzdGF0dXNfY29kZXMgPSBbXCJFUlJPUlwiXSB9XG4gICAgICAgIH1cblxuICAgICAgICBwb2xpY3kge1xuICAgICAgICAgIG5hbWUgPSBcInNsb3dcIlxuICAgICAgICAgIHR5cGUgPSBcImxhdGVuY3lcIlxuICAgICAgICAgIGxhdGVuY3kgeyB0aHJlc2hvbGRfbXMgPSAke3RzLmxhdGVuY3lUaHJlc2hvbGRNc30gfVxuICAgICAgICB9XG5cbiAgICAgICAgcG9saWN5IHtcbiAgICAgICAgICBuYW1lID0gXCJyZXN0XCJcbiAgICAgICAgICB0eXBlID0gXCJwcm9iYWJpbGlzdGljXCJcbiAgICAgICAgICBwcm9iYWJpbGlzdGljIHsgc2FtcGxpbmdfcGVyY2VudGFnZSA9ICR7dHMucHJvYmFiaWxpc3RpY1BlcmNlbnR9IH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dCB7IHRyYWNlcyA9IFtvdGVsY29sLmV4cG9ydGVyLm90bHAudGVtcG8uaW5wdXRdIH1cbiAgICAgIH1cblxuICAgICAgb3RlbGNvbC5leHBvcnRlci5vdGxwIFwidGVtcG9cIiB7XG4gICAgICAgIGNsaWVudCB7XG4gICAgICAgICAgZW5kcG9pbnQgPSBcInRlbXBvLiR7Y29uZmlnLm5hbWVzcGFjZX0uc3ZjLmNsdXN0ZXIubG9jYWw6NDMxN1wiXG4gICAgICAgICAgdGxzIHsgaW5zZWN1cmUgPSB0cnVlIH1cbiAgICAgICAgfVxuICAgICAgfVxucmVzb3VyY2VzOlxuICByZXF1ZXN0czpcbiAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5hbGxveVRyYWNlcy5yZXF1ZXN0cy5jcHV9XG4gICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxsb3lUcmFjZXMucmVxdWVzdHMubWVtb3J5fVxuICBsaW1pdHM6XG4gICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxsb3lUcmFjZXMubGltaXRzLmNwdX1cbiAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5hbGxveVRyYWNlcy5saW1pdHMubWVtb3J5fVxuYDtcbiAgfVxufVxuIl19
@@ -57,6 +57,22 @@ class PrometheusStackConstruct extends constructs_1.Construct {
57
57
  });
58
58
  }
59
59
  generateHelmValues(config) {
60
+ // Tempo datasource is only provisioned when tracing is enabled. When
61
+ // disabled this is empty, so the Grafana block is byte-identical to before.
62
+ const tempoDatasource = config.tempo.enabled ? `
63
+ - name: Tempo
64
+ type: tempo
65
+ uid: tempo
66
+ access: proxy
67
+ url: http://tempo.${config.namespace}.svc.cluster.local:3200
68
+ jsonData:
69
+ tracesToLogsV2:
70
+ datasourceUid: loki
71
+ spanStartTimeShift: "-1h"
72
+ spanEndTimeShift: "1h"
73
+ filterByTraceID: true
74
+ tracesToMetrics:
75
+ datasourceUid: thanos` : '';
60
76
  return `kubeEtcd:
61
77
  enabled: false
62
78
 
@@ -436,7 +452,7 @@ grafana:
436
452
  access: proxy
437
453
  url: http://loki-gateway.${config.namespace}.svc.cluster.local
438
454
  jsonData:
439
- maxLines: 1000
455
+ maxLines: 1000${tempoDatasource}
440
456
 
441
457
  prometheusOperator:
442
458
  resources:
@@ -479,4 +495,4 @@ kube-state-metrics:
479
495
  }
480
496
  }
481
497
  exports.PrometheusStackConstruct = PrometheusStackConstruct;
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWV0aGV1cy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3Byb21ldGhldXMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWtDO0FBQ2xDLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsc0JBQVM7SUFDckQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXBDLDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkQsa0RBQWtEO1FBQ2xELDJDQUEyQztRQUMzQyxJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzNDLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLFdBQVc7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsdUJBQXVCO29CQUNqRCw2QkFBNkIsRUFBRSxZQUFZO29CQUMzQyw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxLQUFLLEVBQUUsdUJBQXVCO2dCQUM5QixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZTtnQkFDbkcsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLGFBQWEsRUFBRSxVQUFVO2FBQzFCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQXdCO1FBQ2pELE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBZ0hRLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSTt3QkFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7MEJBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVTs0QkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJOzRCQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQTZCeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7O2dCQWFkLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWTs7Ozs7Ozs7eUJBUW5CLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWTs7O2VBR3JDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHO2tCQUNyQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7ZUFFOUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUc7a0JBQ3ZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNOzs7Ozs7OztpQkFROUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUc7b0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztpQkFFbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUc7b0JBQ3ZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzs7Ozs7Ozs7O2lCQVVoRCxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBZ0I1QixNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVU7Ozs7Ozs7Ozt5QkFTakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVOzs7O2VBSW5DLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHO2tCQUNuQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTTs7ZUFFNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUc7a0JBQ3JDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUJBMkI1QyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRztvQkFDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU07O2lCQUVsRCxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUF3Q3ZELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTzs7Ozs7OztZQU9wQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7YUFJckIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQ2hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzthQUV6QyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUF5QjVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQ0FzQkMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7O3VEQVFJLE1BQU0sQ0FBQyxTQUFTOzs7Ozs7OzttQ0FRcEMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUNsRCxDQUFDO0lBQ0EsQ0FBQztDQUNGO0FBMWNELDREQTBjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaU9iamVjdCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9tZXRoZXVzU3RhY2tQcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBrdWJlLXByb21ldGhldXMtc3RhY2sgSGVsbUNoYXJ0IHdpdGggUHJvbWV0aGV1cywgR3JhZmFuYSwgYW5kIEFsZXJ0bWFuYWdlci5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjb3JlIG1vbml0b3Jpbmcgc3RhY2sgdGhhdCBpbmNsdWRlczpcbiAqIC0gUHJvbWV0aGV1cyAobWV0cmljcyBjb2xsZWN0aW9uLCAyIHJlcGxpY2FzLCAzZCByZXRlbnRpb24pXG4gKiAtIEdyYWZhbmEgKHZpc3VhbGl6YXRpb24sIGluZ3Jlc3Mgd2l0aCBMZXQncyBFbmNyeXB0KVxuICogLSBBbGVydG1hbmFnZXIgKGFsZXJ0IHJvdXRpbmcsIFNNVFAgbm90aWZpY2F0aW9ucylcbiAqIC0gUHJvbWV0aGV1cyBPcGVyYXRvciAobWFuYWdlcyBQcm9tZXRoZXVzIENSRHMpXG4gKiAtIE5vZGUgRXhwb3J0ZXIgKHN5c3RlbSBtZXRyaWNzIERhZW1vblNldClcbiAqIC0ga3ViZS1zdGF0ZS1tZXRyaWNzIChLdWJlcm5ldGVzIHJlc291cmNlIG1ldHJpY3MpXG4gKlxuICogUHJlcmVxdWlzaXRlczpcbiAqIC0gTmFtZXNwYWNlIGV4aXN0c1xuICogLSBQcmlvcml0eUNsYXNzICdoaWdoLXByaW9yaXR5JyBleGlzdHNcbiAqIC0gTG9uZ2hvcm4gc3RvcmFnZSBjbGFzcyBhdmFpbGFibGVcbiAqIC0gY2VydC1tYW5hZ2VyIENsdXN0ZXJJc3N1ZXIgY29uZmlndXJlZFxuICogLSBUaGFub3MgUzMgc2VjcmV0IGV4aXN0cyAodGhhbm9zLW9ianN0b3JlLWNvbmZpZylcbiAqXG4gKiBTeW5jIFdhdmU6IDIgKGNvcmUgc2VydmljZXMgLSBhZnRlciBTMyBidWNrZXRzIGFuZCBzZWNyZXRzKVxuICovXG5leHBvcnQgY2xhc3MgUHJvbWV0aGV1c1N0YWNrQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb21ldGhldXNTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcgfSA9IHByb3BzO1xuXG4gICAgLy8gR2VuZXJhdGUgSGVsbSB2YWx1ZXMgWUFNTFxuICAgIGNvbnN0IGhlbG1WYWx1ZXMgPSB0aGlzLmdlbmVyYXRlSGVsbVZhbHVlcyhjb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIEhlbG1DaGFydCByZXNvdXJjZSAoSzNTIEhlbG0gY29udHJvbGxlcilcbiAgICAvLyBXYXZlIDI6IENvcmUgU2VydmljZXMgLSBtb25pdG9yaW5nIHN0YWNrXG4gICAgbmV3IEFwaU9iamVjdCh0aGlzLCAna3ViZS1wcm9tZXRoZXVzLXN0YWNrJywge1xuICAgICAgYXBpVmVyc2lvbjogJ2hlbG0uY2F0dGxlLmlvL3YxJyxcbiAgICAgIGtpbmQ6ICdIZWxtQ2hhcnQnLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbmFtZTogJ2t1YmUtcHJvbWV0aGV1cy1zdGFjaycsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnbW9uaXRvcmluZycsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzInLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgcmVwbzogJ2h0dHBzOi8vcHJvbWV0aGV1cy1jb21tdW5pdHkuZ2l0aHViLmlvL2hlbG0tY2hhcnRzJyxcbiAgICAgICAgY2hhcnQ6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICB2ZXJzaW9uOiBjb25maWcudmVyc2lvbnMucHJvbWV0aGV1c1N0YWNrID09PSAnbGF0ZXN0JyA/IHVuZGVmaW5lZCA6IGNvbmZpZy52ZXJzaW9ucy5wcm9tZXRoZXVzU3RhY2ssXG4gICAgICAgIHRhcmdldE5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB2YWx1ZXNDb250ZW50OiBoZWxtVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIZWxtVmFsdWVzKGNvbmZpZzogTW9uaXRvcmluZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBrdWJlRXRjZDpcbiAgZW5hYmxlZDogZmFsc2VcblxuIyBEaXNhYmxlIGt1YmUtY29udHJvbGxlci1tYW5hZ2VyIGFuZCBrdWJlLXNjaGVkdWxlciBtb25pdG9yaW5nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhYmxlc3BhZ2hldHRpL2szcy1tb25pdG9yaW5nL2lzc3Vlcy8yXG5rdWJlQ29udHJvbGxlck1hbmFnZXI6XG4gIGVuYWJsZWQ6IGZhbHNlXG5rdWJlU2NoZWR1bGVyOlxuICBlbmFibGVkOiBmYWxzZVxuXG4jIERldGVjdCBQb2REaXNydXB0aW9uQnVkZ2V0cyB0aGF0IHdvdWxkIGJsb2NrIGEgbm9kZSBkcmFpbiBkdXJpbmcgazNzIHVwZ3JhZGVzLlxuIyBPcGVyYXRvci1tYW5hZ2VkIFBEQnMgc2l0IGF0IGRpc3J1cHRpb25zQWxsb3dlZD0wIGJ5IGRlc2lnbiAoTG9uZ2hvcm4gaW5zdGFuY2UtbWFuYWdlcnMsXG4jIENOUEcgKi1wcmltYXJ5KSBhbmQgYXJlIGV4Y2x1ZGVkIHNvIHRoZSBhbGVydCBvbmx5IGZpcmVzIG9uIGFub21hbG91cyBhcHAgUERCcy5cbmFkZGl0aW9uYWxQcm9tZXRoZXVzUnVsZXNNYXA6XG4gIHBkYi1kcmFpbi1zYWZldHk6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBuYW1lOiBwZGIucnVsZXNcbiAgICAgICAgaW50ZXJ2YWw6IDFtXG4gICAgICAgIHJ1bGVzOlxuICAgICAgICAgIC0gYWxlcnQ6IFBvZERpc3J1cHRpb25CdWRnZXRVbmRyYWluYWJsZVxuICAgICAgICAgICAgZXhwcjoga3ViZV9wb2RkaXNydXB0aW9uYnVkZ2V0X3N0YXR1c19wb2RfZGlzcnVwdGlvbnNfYWxsb3dlZHtuYW1lc3BhY2UhPVwibG9uZ2hvcm4tc3lzdGVtXCIsIHBvZGRpc3J1cHRpb25idWRnZXQhflwiLiotcHJpbWFyeVwifSA9PSAwXG4gICAgICAgICAgICBmb3I6IDE1bVxuICAgICAgICAgICAgbGFiZWxzOlxuICAgICAgICAgICAgICBzZXZlcml0eTogd2FybmluZ1xuICAgICAgICAgICAgICBjb21wb25lbnQ6IGNsdXN0ZXItdXBncmFkZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IFwiUERCIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fSBhbGxvd3MgMCB2b2x1bnRhcnkgZGlzcnVwdGlvbnNcIlxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogfFxuICAgICAgICAgICAgICAgIFRoZSBQb2REaXNydXB0aW9uQnVkZ2V0IHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fVxuICAgICAgICAgICAgICAgIGhhcyBhbGxvd2VkIDAgdm9sdW50YXJ5IGRpc3J1cHRpb25zIGZvciBvdmVyIDE1IG1pbnV0ZXMuIFRoaXMgd2lsbCBibG9jayBhIG5vZGVcbiAgICAgICAgICAgICAgICBkcmFpbiBkdXJpbmcgazNzIHVwZ3JhZGVzLiBPcGVyYXRvci1tYW5hZ2VkIFBEQnMgKExvbmdob3JuLCBDTlBHIHByaW1hcmllcykgYXJlXG4gICAgICAgICAgICAgICAgZXhjbHVkZWQgZnJvbSB0aGlzIGFsZXJ0LiBMaWtlbHkgYSBkZWdyYWRlZCBkZXBsb3ltZW50ICgwIGhlYWx0aHkgcG9kcykgb3IgYVxuICAgICAgICAgICAgICAgIHNpbmdsZS1yZXBsaWNhIGRlcGxveW1lbnQgd2l0aCBtaW5BdmFpbGFibGU9MS5cbiAgICAgICAgICAgICAgICBDaGVjazoga3ViZWN0bCBnZXQgcGRiIC1uIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19IHt7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fVxuICAgICAgICAgIC0gYWxlcnQ6IFBvZERpc3J1cHRpb25CdWRnZXRVbmRyYWluYWJsZUNyaXRpY2FsXG4gICAgICAgICAgICBleHByOiBrdWJlX3BvZGRpc3J1cHRpb25idWRnZXRfc3RhdHVzX3BvZF9kaXNydXB0aW9uc19hbGxvd2Vke25hbWVzcGFjZSE9XCJsb25naG9ybi1zeXN0ZW1cIiwgcG9kZGlzcnVwdGlvbmJ1ZGdldCF+XCIuKi1wcmltYXJ5XCJ9ID09IDBcbiAgICAgICAgICAgIGZvcjogMWhcbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IGNyaXRpY2FsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogY2x1c3Rlci11cGdyYWRlXG4gICAgICAgICAgICBhbm5vdGF0aW9uczpcbiAgICAgICAgICAgICAgc3VtbWFyeTogXCJQREIge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ve3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19IHVuZHJhaW5hYmxlID4xaFwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgUERCIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fSBoYXMgYmxvY2tlZFxuICAgICAgICAgICAgICAgIHZvbHVudGFyeSBkaXNydXB0aW9ucyBmb3Igb3ZlciBhbiBob3VyLiBBIGszcyBhZ2VudCB1cGdyYWRlIHdvdWxkIHN0YWxsIG9uIHRoaXMgbm9kZS5cbiAgIyBEZXRlY3QgYW4gRVggZGVkaWNhdGVkIHdvcmtlciBzdHVjayBOb3RSZWFkeSDigJQgbGlrZWx5IGEgTWljcm9PUyByZWJvb3QgaGFuZ1xuICAjIChwaW5ncyBidXQgc3NoZC9rdWJlbGV0IGRlYWQpLiBBIGh1bmcgbm9kZSBhbHNvIGhvbGRzIHRoZSBjbHVzdGVyLXdpZGUga3VyZWRcbiAgIyBsb2NrLCBibG9ja2luZyBhbGwgZnVydGhlciBncmFjZWZ1bCByZWJvb3RzLCBzbyB0aGlzIG11c3QgYmUgY2F1Z2h0IGZhc3QuXG4gIGV4LXdvcmtlci1yZWJvb3Q6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBuYW1lOiBleC13b3JrZXIucnVsZXNcbiAgICAgICAgaW50ZXJ2YWw6IDFtXG4gICAgICAgIHJ1bGVzOlxuICAgICAgICAgIC0gYWxlcnQ6IEV4V29ya2VyTm90UmVhZHlcbiAgICAgICAgICAgIGV4cHI6IGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ue2NvbmRpdGlvbj1cIlJlYWR5XCIsc3RhdHVzPVwidHJ1ZVwiLG5vZGU9flwia3VwNnMtZXgtLipcIn0gPT0gMFxuICAgICAgICAgICAgZm9yOiAxNW1cbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IGNyaXRpY2FsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogbm9kZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IFwiRVggd29ya2VyIHt7ICRsYWJlbHMubm9kZSB9fSBOb3RSZWFkeSBmb3IgPjE1bVwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgRVggZGVkaWNhdGVkIHdvcmtlciB7eyAkbGFiZWxzLm5vZGUgfX0gaGFzIGJlZW4gTm90UmVhZHkgZm9yIG92ZXIgMTUgbWludXRlcy5cbiAgICAgICAgICAgICAgICBQb3NzaWJsZSBNaWNyb09TIHJlYm9vdCBoYW5nIChwaW5ncyBidXQgc3NoZC9rdWJlbGV0L2xvbmdob3JuLW1hbmFnZXIgZGVhZCkg4oCUIHRoZVxuICAgICAgICAgICAgICAgIG5vZGUgbWF5IHN0aWxsIGhvbGQgdGhlIGNsdXN0ZXItd2lkZSBrdXJlZCBsb2NrLCBibG9ja2luZyBhbGwgZnVydGhlciByZWJvb3RzLlxuICAgICAgICAgICAgICAgIFJlY292ZXJ5OiBIZXR6bmVyIFJvYm90IGhhcmR3YXJlIHJlc2V0LiBEbyBOT1QgZm9yY2UtZGV0YWNoIExvbmdob3JuIHZvbHVtZXMuXG4gICAgICAgICAgICAgIHJ1bmJvb2tfdXJsOiBcImh0dHBzOi8vZG9jcy5rdXA2cy5jb20vaG93LXRvL3Ryb3VibGVzaG9vdGluZy9leC13b3JrZXItcGluZy1idXQtZGVhZC5odG1sXCJcblxuIyBEcm9wIGhpZ2gtY2FyZGluYWxpdHkgQVBJIHNlcnZlciBhbmQgZXRjZCBoaXN0b2dyYW0gYnVja2V0cyB0byByZWR1Y2UgbWVtb3J5IHVzYWdlXG4jIFRoZXNlIG1ldHJpY3MgYWxvbmUgYWNjb3VudCBmb3IgfjIwMGsgc2VyaWVzICg0NyUgb2YgdG90YWwgY2FyZGluYWxpdHkpXG4jIFdlIGtlZXAgX3N1bSBhbmQgX2NvdW50IHN1ZmZpeGVzIHdoaWNoIGFyZSBzdWZmaWNpZW50IGZvciByYXRlIGNhbGN1bGF0aW9uc1xua3ViZUFwaVNlcnZlcjpcbiAgc2VydmljZU1vbml0b3I6XG4gICAgbWV0cmljUmVsYWJlbGluZ3M6XG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXF1ZXN0X2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3Rfc2xpX2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfYm9keV9zaXplX2J5dGVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXNwb25zZV9zaXplc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdldGNkX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuXG4jIEt1YmVsZXQgYWxzbyBleHBvc2VzIGFwaXNlcnZlciBtZXRyaWNzIC0gYXBwbHkgc2FtZSBmaWx0ZXJzXG5rdWJlbGV0OlxuICBzZXJ2aWNlTW9uaXRvcjpcbiAgICBtZXRyaWNSZWxhYmVsaW5nczpcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9zbGlfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9ib2R5X3NpemVfYnl0ZXNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3Jlc3BvbnNlX3NpemVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2V0Y2RfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG5cbmFsZXJ0bWFuYWdlcjpcbiAgY29uZmlnOlxuICAgIGdsb2JhbDpcbiAgICAgIHNtdHBfZnJvbTogJHtjb25maWcuc210cC5mcm9tfVxuICAgICAgc210cF9zbWFydGhvc3Q6ICR7Y29uZmlnLnNtdHAuaG9zdH06JHtjb25maWcuc210cC5wb3J0fVxuICAgICAgc210cF9yZXF1aXJlX3RsczogJHtjb25maWcuc210cC5yZXF1aXJlVGxzfVxuICAgICAgc210cF9hdXRoX3VzZXJuYW1lOiAke2NvbmZpZy5zbXRwLnVzZXJuYW1lIHx8IGNvbmZpZy5zbXRwLmZyb219XG4gICAgICBzbXRwX2F1dGhfcGFzc3dvcmQ6ICR7Y29uZmlnLnNtdHAucGFzc3dvcmQgfHwgJyd9XG4gICAgcm91dGU6XG4gICAgICBncm91cF9ieTogWydqb2InXVxuICAgICAgZ3JvdXBfd2FpdDogMzBzXG4gICAgICBncm91cF9pbnRlcnZhbDogNW1cbiAgICAgIHJlcGVhdF9pbnRlcnZhbDogMWhcbiAgICAgIHJlY2VpdmVyOiBlbWFpbFxuICAgICAgcm91dGVzOlxuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IFdhdGNoZG9nXG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBDUFVUaHJvdHRsaW5nSGlnaFxuICAgICAgICByZWNlaXZlcjogJ251bGwnXG4gICAgICAtIG1hdGNoOlxuICAgICAgICAgIGFsZXJ0bmFtZTogS3ViZU1lbW9yeU92ZXJjb21taXRcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IEt1YmVDUFVPdmVyY29tbWl0XG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBLdWJlbGV0VG9vTWFueVBvZHNcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuXG4gICAgcmVjZWl2ZXJzOlxuICAgIC0gbmFtZTogJ251bGwnXG4gICAgLSBuYW1lOiBlbWFpbFxuICAgICAgZW1haWxfY29uZmlnczpcbiAgICAgIC0gc2VuZF9yZXNvbHZlZDogdHJ1ZVxuICAgICAgICB0bzogJHtjb25maWcuc210cC5mcm9tfVxuXG4gICAgIyBJbmhpYml0aW9uIHJ1bGVzIGFsbG93IHRvIG11dGUgYSBzZXQgb2YgYWxlcnRzIGdpdmVuIHRoYXQgYW5vdGhlciBhbGVydCBpcyBmaXJpbmcuXG4gICAgIyBXZSB1c2UgdGhpcyB0byBtdXRlIGFueSB3YXJuaW5nLWxldmVsIG5vdGlmaWNhdGlvbnMgaWYgdGhlIHNhbWUgYWxlcnQgaXMgYWxyZWFkeSBjcml0aWNhbC5cbiAgICBpbmhpYml0X3J1bGVzOlxuICAgIC0gc291cmNlX21hdGNoOlxuICAgICAgICBzZXZlcml0eTogJ2NyaXRpY2FsJ1xuICAgICAgdGFyZ2V0X21hdGNoOlxuICAgICAgICBzZXZlcml0eTogJ3dhcm5pbmcnXG4gICAgICAjIEFwcGx5IGluaGliaXRpb24gaWYgdGhlIGFsZXJ0bmFtZSBpcyB0aGUgc2FtZS5cbiAgICAgIGVxdWFsOiBbJ2FsZXJ0bmFtZScsICduYW1lc3BhY2UnXVxuXG4gIGFsZXJ0bWFuYWdlclNwZWM6XG4gICAgcmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLmFsZXJ0bWFuYWdlcn1cbiAgICBwb2RBbnRpQWZmaW5pdHk6IFwic29mdFwiXG4gICAgc3RvcmFnZTpcbiAgICAgIHZvbHVtZUNsYWltVGVtcGxhdGU6XG4gICAgICAgIHNwZWM6XG4gICAgICAgICAgYWNjZXNzTW9kZXM6IFtcIlJlYWRXcml0ZU9uY2VcIl1cbiAgICAgICAgICByZXNvdXJjZXM6XG4gICAgICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICAgICAgc3RvcmFnZTogJHtjb25maWcuc3RvcmFnZS5hbGVydG1hbmFnZXJ9XG4gICAgcmVzb3VyY2VzOlxuICAgICAgbGltaXRzOlxuICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5hbGVydG1hbmFnZXIubGltaXRzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLmxpbWl0cy5tZW1vcnl9XG4gICAgICByZXF1ZXN0czpcbiAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLnJlcXVlc3RzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLnJlcXVlc3RzLm1lbW9yeX1cbiAgICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG4gICAgIyBTaWRlY2FyIGNvbnRhaW5lcnMgcmVzb3VyY2UgcmVxdWVzdHMgKGFkZGVkIDIwMjUtMTEtMTgpXG4gICAgY29udGFpbmVyczpcbiAgICAtIG5hbWU6IGNvbmZpZy1yZWxvYWRlclxuICAgICAgcmVzb3VyY2VzOlxuICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5jcHV9XG4gICAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIucmVxdWVzdHMubWVtb3J5fVxuICAgICAgICBsaW1pdHM6XG4gICAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIubGltaXRzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMubWVtb3J5fVxuXG5cbnByb21ldGhldXM6XG4gICMgRW5hYmxlIFRoYW5vcyBzZXJ2aWNlIGZvciBnUlBDIGNvbW11bmljYXRpb25cbiAgIyBSZXF1aXJlZCBmb3IgSGVsbSBjaGFydCB0byBwcm9wZXJseSByZW5kZXIgVGhhbm9zIHNpZGVjYXIgY29uZmlndXJhdGlvblxuICB0aGFub3NTZXJ2aWNlOlxuICAgIGVuYWJsZWQ6IHRydWVcblxuICBwcm9tZXRoZXVzU3BlYzpcbiAgICByZXRlbnRpb246ICR7Y29uZmlnLnJldGVudGlvbi5wcm9tZXRoZXVzfSAgIyBSZWR1Y2VkIGZyb20gN2QgLSBUaGFub3MgcHJvdmlkZXMgbG9uZy10ZXJtIHN0b3JhZ2UgaW4gUzNcblxuICAgICMgRGlzY292ZXIgQUxMIFNlcnZpY2VNb25pdG9ycywgUG9kTW9uaXRvcnMgYW5kIFByb21ldGhldXNSdWxlcyBpbiBBTEwgbmFtZXNwYWNlc1xuICAgICMgU2V0dGluZyBOaWxVc2VzSGVsbVZhbHVlczogZmFsc2UgbWVhbnMgbmlsIHNlbGVjdG9ycyA9IFwic2VsZWN0IGFsbFwiXG4gICAgIyBFbXB0eSBuYW1lc3BhY2Ugc2VsZWN0b3JzIHt9IG1lYW4gXCJzZWFyY2ggYWxsIG5hbWVzcGFjZXNcIlxuICAgICMgV2l0aG91dCB0aGUgcnVsZSogc2V0dGluZ3MsIHJ1bGVTZWxlY3RvciBrZWVwcyB0aGUgY2hhcnQgZGVmYXVsdFxuICAgICMgKG1hdGNoTGFiZWxzOiB7cmVsZWFzZTogPG5hbWU+fSkgYW5kIGhhbmQtYXV0aG9yZWQgUHJvbWV0aGV1c1J1bGVzIHRoYXRcbiAgICAjIGxhY2sgdGhlIHJlbGVhc2UgbGFiZWwgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gICAgIyBOb3RlOiBUaGlzIGRvZXMgTk9UIGFmZmVjdCBUaGFub3Mgc2lkZWNhciAtIGNvbnRyb2xsZWQgYnkgdGhhbm9zLm9iamVjdFN0b3JhZ2VDb25maWdcbiAgICBzZXJ2aWNlTW9uaXRvclNlbGVjdG9yTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlXG4gICAgcG9kTW9uaXRvclNlbGVjdG9yTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlXG4gICAgcnVsZVNlbGVjdG9yTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlXG4gICAgc2VydmljZU1vbml0b3JOYW1lc3BhY2VTZWxlY3Rvcjoge31cbiAgICBwb2RNb25pdG9yTmFtZXNwYWNlU2VsZWN0b3I6IHt9XG4gICAgcnVsZU5hbWVzcGFjZVNlbGVjdG9yOiB7fVxuXG4gICAgcmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLnByb21ldGhldXN9XG4gICAgcG9kQW50aUFmZmluaXR5OiBcImhhcmRcIlxuICAgIHN0b3JhZ2VTcGVjOlxuICAgICAgdm9sdW1lQ2xhaW1UZW1wbGF0ZTpcbiAgICAgICAgc3BlYzpcbiAgICAgICAgICBzdG9yYWdlQ2xhc3NOYW1lOiBsb25naG9yblxuICAgICAgICAgIGFjY2Vzc01vZGVzOiBbXCJSZWFkV3JpdGVPbmNlXCJdXG4gICAgICAgICAgcmVzb3VyY2VzOlxuICAgICAgICAgICAgcmVxdWVzdHM6XG4gICAgICAgICAgICAgIHN0b3JhZ2U6ICR7Y29uZmlnLnN0b3JhZ2UucHJvbWV0aGV1c30gICMgUmVkdWNlZCBmcm9tIDZHaSAoM2QgcmV0ZW50aW9uIG5lZWRzIGxlc3Mgc3BhY2UpXG5cbiAgICByZXNvdXJjZXM6XG4gICAgICBsaW1pdHM6XG4gICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLnByb21ldGhldXMubGltaXRzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMucHJvbWV0aGV1cy5saW1pdHMubWVtb3J5fVxuICAgICAgcmVxdWVzdHM6XG4gICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLnByb21ldGhldXMucmVxdWVzdHMuY3B1fVxuICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5wcm9tZXRoZXVzLnJlcXVlc3RzLm1lbW9yeX1cbiAgICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG4gICAgIyBFeHRlcm5hbCBsYWJlbHMgZm9yIG11bHRpLWNsdXN0ZXIgaWRlbnRpZmljYXRpb24gYW5kIFRoYW5vc1xuICAgIGV4dGVybmFsTGFiZWxzOlxuICAgICAgY2x1c3Rlcjoga3VwNnNcbiAgICAgIHJlcGxpY2E6IFwiJChQT0RfTkFNRSlcIlxuXG4gICAgIyBUaGFub3Mgc2lkZWNhciBmb3IgbG9uZy10ZXJtIG1ldHJpY3Mgc3RvcmFnZSBpbiBTM1xuICAgICMgTk9URTogY2hhcnQgPj04NS54IHJlcXVpcmVzIHRoZSBleGlzdGluZ1NlY3JldCBzaGFwZS4gVGhlIGxlZ2FjeSBmbGF0XG4gICAgIyB7bmFtZSwga2V5fSBmb3JtIGlzIHNpbGVudGx5IGRyb3BwZWQgYnkgdGhlIGNoYXJ0LCB3aGljaCByZW1vdmVzIHRoZVxuICAgICMgc2lkZWNhciBhbmQgc3RvcHMgYWxsIFMzIGJsb2NrIHVwbG9hZHMgKHJlZ3Jlc3Npb24gc2VlbiAyMDI2LTAzLTMxKS5cbiAgICB0aGFub3M6XG4gICAgICBvYmplY3RTdG9yYWdlQ29uZmlnOlxuICAgICAgICBleGlzdGluZ1NlY3JldDpcbiAgICAgICAgICBuYW1lOiB0aGFub3Mtb2Jqc3RvcmUtY29uZmlnICAjIEVTTy1tYW5hZ2VkIHNlY3JldFxuICAgICAgICAgIGtleTogb2Jqc3RvcmUueW1sXG5cbiAgICAjIFNpZGVjYXIgY29udGFpbmVycyByZXNvdXJjZSByZXF1ZXN0cyAoYWRkZWQgMjAyNS0xMS0xOClcbiAgICAjIE5PVEU6IHRoYW5vcy1zaWRlY2FyIGlzIE5PVCBsaXN0ZWQgaGVyZSAtIGl0J3MgYXV0b21hdGljYWxseSBpbmplY3RlZCBieSBQcm9tZXRoZXVzIE9wZXJhdG9yXG4gICAgIyB3aGVuIHRoYW5vcy5vYmplY3RTdG9yYWdlQ29uZmlnIGlzIHNldC4gU3BlY2lmeWluZyBpdCBpbiBjb250YWluZXJzW10gd291bGQgb3ZlcnJpZGVcbiAgICAjIHRoZSBvcGVyYXRvcidzIGRlZmluaXRpb24gYW5kIHJlcXVpcmUgdXMgdG8gbWFudWFsbHkgc3BlY2lmeSB0aGUgaW1hZ2UsIHdoaWNoIGJyZWFrc1xuICAgICMgd2hlbiB0aGUgb3BlcmF0b3IgdXBkYXRlcyB0aGUgdGhhbm9zIHZlcnNpb24uXG4gICAgY29udGFpbmVyczpcbiAgICAtIG5hbWU6IGNvbmZpZy1yZWxvYWRlclxuICAgICAgcmVzb3VyY2VzOlxuICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5jcHV9XG4gICAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIucmVxdWVzdHMubWVtb3J5fVxuICAgICAgICBsaW1pdHM6XG4gICAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIubGltaXRzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMubWVtb3J5fVxuXG4gICAgc2VydmljZTpcbiAgICAgIHNlc3Npb25BZmZpbml0eTogXCJDbGllbnRJUFwiXG5cblxuZ3JhZmFuYTpcbiAgIyBSZWNyZWF0ZSBzdHJhdGVneSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBzdG9yYWdlIFBWQyBpcyBSV086XG4gICMgYSBSb2xsaW5nVXBkYXRlIHdvdWxkIHN1cmdlIGEgc2Vjb25kIHBvZCB0aGF0IGNhbm5vdCBtb3VudCB0aGVcbiAgIyB2b2x1bWUgKEZhaWxlZEF0dGFjaFZvbHVtZSksIGJsb2NraW5nIHRoZSByb2xsb3V0IGluZGVmaW5pdGVseS5cbiAgZGVwbG95bWVudFN0cmF0ZWd5OlxuICAgIHR5cGU6IFJlY3JlYXRlXG5cbiAgIyBVc2UgZXhpc3Rpbmcgc2VjcmV0IGZvciBhZG1pbiBjcmVkZW50aWFscyAobWFuYWdlZCBieSBFU08pXG4gICMgVGhpcyBwcmV2ZW50cyBwYXNzd29yZCByZWdlbmVyYXRpb24gb24gSGVsbSB1cGdyYWRlc1xuICBhZG1pbjpcbiAgICBleGlzdGluZ1NlY3JldDogXCJncmFmYW5hLWFkbWluLWNyZWRlbnRpYWxzXCJcbiAgICB1c2VyS2V5OiBcImFkbWluLXVzZXJcIlxuICAgIHBhc3N3b3JkS2V5OiBcImFkbWluLXBhc3N3b3JkXCJcblxuICAjIERpc2FibGUgZGVmYXVsdCBQcm9tZXRoZXVzIGRhdGFzb3VyY2UgKHdlIHByb3ZpZGUgb3VyIG93biBwb2ludGluZyB0byBUaGFub3MgUXVlcnkpXG4gIGRlZmF1bHREYXRhc291cmNlRW5hYmxlZDogZmFsc2VcblxuICAjIFNpZGVjYXIgY29udGFpbmVycyBmb3IgZGFzaGJvYXJkL2RhdGFzb3VyY2UgcHJvdmlzaW9uaW5nXG4gIHNpZGVjYXI6XG4gICAgcmVzb3VyY2VzOlxuICAgICAgcmVxdWVzdHM6XG4gICAgICAgIGNwdTogMTBtXG4gICAgICAgIG1lbW9yeTogMjU2TWlcbiAgICAgIGxpbWl0czpcbiAgICAgICAgY3B1OiAxMDBtXG4gICAgICAgIG1lbW9yeTogNTEyTWlcbiAgICBkYXNoYm9hcmRzOlxuICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgIGRhdGFzb3VyY2VzOlxuICAgICAgZW5hYmxlZDogZmFsc2UgICMgV2UgbWFudWFsbHkgcHJvdmlzaW9uIGRhdGFzb3VyY2VzIChQcm9tZXRoZXVz4oaSVGhhbm9zLCBMb2tpKVxuXG4gIGluZ3Jlc3M6XG4gICAgZW5hYmxlZDogdHJ1ZVxuICAgIGhvc3RzOlxuICAgICAgLSAke2NvbmZpZy5kb21haW5zLmdyYWZhbmF9XG4gICAgYW5ub3RhdGlvbnM6XG4gICAgICBjZXJ0LW1hbmFnZXIuaW8vY2x1c3Rlci1pc3N1ZXI6IFwibGV0c2VuY3J5cHQtY2x1c3Rlci1pc3N1ZXJcIlxuICAgICAgdHJhZWZpay5pbmdyZXNzLmt1YmVybmV0ZXMuaW8vcm91dGVyLmVudHJ5cG9pbnRzOiB3ZWJzZWN1cmVcbiAgICB0bHM6XG4gICAgICAtIHNlY3JldE5hbWU6IGdyYWZhbmEtZ2VuZXJhbC10bHNcbiAgICAgICAgaG9zdHM6XG4gICAgICAgIC0gJHtjb25maWcuZG9tYWlucy5ncmFmYW5hfVxuXG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLmxpbWl0cy5jcHV9XG4gICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLmxpbWl0cy5tZW1vcnl9XG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLnJlcXVlc3RzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmdyYWZhbmEucmVxdWVzdHMubWVtb3J5fVxuXG4gIHJlYWRpbmVzc1Byb2JlOlxuICAgIGh0dHBHZXQ6XG4gICAgICBwYXRoOiAvYXBpL2hlYWx0aFxuICAgICAgcG9ydDogMzAwMFxuICAgIGluaXRpYWxEZWxheVNlY29uZHM6IDMwXG4gICAgcGVyaW9kU2Vjb25kczogMTBcbiAgICB0aW1lb3V0U2Vjb25kczogNVxuICAgIGZhaWx1cmVUaHJlc2hvbGQ6IDNcblxuICBsaXZlbmVzc1Byb2JlOlxuICAgIGh0dHBHZXQ6XG4gICAgICBwYXRoOiAvYXBpL2hlYWx0aFxuICAgICAgcG9ydDogMzAwMFxuICAgIGluaXRpYWxEZWxheVNlY29uZHM6IDYwXG4gICAgcGVyaW9kU2Vjb25kczogMTBcbiAgICB0aW1lb3V0U2Vjb25kczogMzBcbiAgICBmYWlsdXJlVGhyZXNob2xkOiAxMFxuXG4gIHBlcnNpc3RlbmNlOlxuICAgIGVuYWJsZWQ6IHRydWVcbiAgICBzdG9yYWdlQ2xhc3NOYW1lOiBsb25naG9yblxuICAgIGFjY2Vzc01vZGVzOlxuICAgICAgLSBSZWFkV3JpdGVPbmNlXG4gICAgc2l6ZTogJHtjb25maWcuc3RvcmFnZS5ncmFmYW5hfVxuXG4gICMgTWFudWFsIGRhdGFzb3VyY2UgcHJvdmlzaW9uaW5nIChzaWRlY2FyIGRpc2FibGVkKVxuICAjIFRoYW5vcyBRdWVyeSDihpIgbG9uZy10ZXJtL2hpc3RvcmljYWwgbWV0cmljcyAoUzMgdmlhIFN0b3JlICsgbGl2ZSBzaWRlY2FyKSwgZGVmYXVsdFxuICAjIFByb21ldGhldXMg4oaSIGxvY2FsLCByZWNlbnQvaGlnaC1yZXMgb25seSAoa2VwdCBmb3IgbG93LWxhdGVuY3kgcmVjZW50IHF1ZXJpZXMpXG4gICMgTG9raSBmb3IgbG9nIGFnZ3JlZ2F0aW9uXG4gIGRhdGFzb3VyY2VzOlxuICAgIGRhdGFzb3VyY2VzLnlhbWw6XG4gICAgICBhcGlWZXJzaW9uOiAxXG4gICAgICAjIERlbGV0ZSBhbnkgcHJlLWV4aXN0aW5nIExva2kgZGF0YXNvdXJjZSAoZS5nLiBvbmUgY3JlYXRlZCB3aXRoIGFcbiAgICAgICMgcmFuZG9tbHkgZ2VuZXJhdGVkIFVJRCBiZWZvcmUgd2UgcGlubmVkIHVpZDogbG9raSkuIFdpdGhvdXQgdGhpcyxcbiAgICAgICMgR3JhZmFuYSBmYWlscyBwcm92aXNpb25pbmcgd2l0aCBcImRhdGEgc291cmNlIG5vdCBmb3VuZFwiIGJlY2F1c2VcbiAgICAgICMgdGhlIHVwc2VydCBjb2xsaWRlcyB3aXRoIHRoZSBleGlzdGluZyBlbnRyeS5cbiAgICAgIGRlbGV0ZURhdGFzb3VyY2VzOlxuICAgICAgLSBuYW1lOiBMb2tpXG4gICAgICAgIG9yZ0lkOiAxXG4gICAgICBkYXRhc291cmNlczpcbiAgICAgIC0gbmFtZTogVGhhbm9zXG4gICAgICAgIHR5cGU6IHByb21ldGhldXNcbiAgICAgICAgdWlkOiB0aGFub3NcbiAgICAgICAgYWNjZXNzOiBwcm94eVxuICAgICAgICAjIHRoYW5vcy1xdWVyeSBTZXJ2aWNlOiBodHRwIHBvcnQgOTA5MCAtPiBjb250YWluZXIgaHR0cCAxMDkwMlxuICAgICAgICB1cmw6IGh0dHA6Ly90aGFub3MtcXVlcnkuJHtjb25maWcubmFtZXNwYWNlfS5zdmMuY2x1c3Rlci5sb2NhbDo5MDkwXG4gICAgICAgIGlzRGVmYXVsdDogdHJ1ZVxuICAgICAgICBqc29uRGF0YTpcbiAgICAgICAgICB0aW1lSW50ZXJ2YWw6IDMwc1xuICAgICAgLSBuYW1lOiBQcm9tZXRoZXVzXG4gICAgICAgIHR5cGU6IHByb21ldGhldXNcbiAgICAgICAgdWlkOiBwcm9tZXRoZXVzXG4gICAgICAgIGFjY2VzczogcHJveHlcbiAgICAgICAgdXJsOiBodHRwOi8va3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMuJHtjb25maWcubmFtZXNwYWNlfS5zdmMuY2x1c3Rlci5sb2NhbDo5MDkwXG4gICAgICAgIGlzRGVmYXVsdDogZmFsc2VcbiAgICAgICAganNvbkRhdGE6XG4gICAgICAgICAgdGltZUludGVydmFsOiAzMHNcbiAgICAgIC0gbmFtZTogTG9raVxuICAgICAgICB0eXBlOiBsb2tpXG4gICAgICAgIHVpZDogbG9raVxuICAgICAgICBhY2Nlc3M6IHByb3h5XG4gICAgICAgIHVybDogaHR0cDovL2xva2ktZ2F0ZXdheS4ke2NvbmZpZy5uYW1lc3BhY2V9LnN2Yy5jbHVzdGVyLmxvY2FsXG4gICAgICAgIGpzb25EYXRhOlxuICAgICAgICAgIG1heExpbmVzOiAxMDAwXG5cbnByb21ldGhldXNPcGVyYXRvcjpcbiAgcmVzb3VyY2VzOlxuICAgIGxpbWl0czpcbiAgICAgIGNwdTogMVxuICAgICAgbWVtb3J5OiA1MTJNaVxuICAgIHJlcXVlc3RzOlxuICAgICAgY3B1OiA1MG1cbiAgICAgIG1lbW9yeTogMTI4TWlcbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxucHJvbWV0aGV1cy1ub2RlLWV4cG9ydGVyOlxuICAjIEJpbmQgOjkxMDAgdG8gdGhlIG5vZGUgSW50ZXJuYWxJUCBvbmx5LCBub3QgMC4wLjAuMC4gV2l0aCBrdWJlUkJBQ1Byb3h5XG4gICMgZGlzYWJsZWQgdGhlIHN1Yi1jaGFydCBzZXRzIEhPU1RfSVAgZnJvbSBmaWVsZFJlZiBzdGF0dXMuaG9zdElQLCB3aGljaCBpc1xuICAjIHRoZSBub2RlJ3MgSW50ZXJuYWxJUCAoRVg6IHZTd2l0Y2ggMTAuNi4wLnggdmlhIC0tbm9kZS1pcDsgY2xvdWQ6IGhjbG91ZFxuICAjIHByaXZhdGUgSVApLiBub2RlLWV4cG9ydGVyIGlzIGhvc3ROZXR3b3JrLCBzbyBQcm9tZXRoZXVzIGFscmVhZHkgc2NyYXBlc1xuICAjIHRoYXQgSW50ZXJuYWxJUCBlbmRwb2ludCAtPiBzY3JhcGluZyBpcyB1bmFmZmVjdGVkLCBvbmx5IHRoZSBwdWJsaWMtTklDXG4gICMgZXhwb3N1cmUgb2YgdGhlIHVuYXV0aGVudGljYXRlZCBtZXRyaWNzIG9uIHRoZSBFWCBwdWJsaWMgSVBzIGdvZXMgYXdheS5cbiAgc2VydmljZTpcbiAgICBsaXN0ZW5PbkFsbEludGVyZmFjZXM6IGZhbHNlXG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6IDUwbVxuICAgICAgbWVtb3J5OiA1ME1pXG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6IDVtXG4gICAgICBtZW1vcnk6IDE2TWlcbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxua3ViZS1zdGF0ZS1tZXRyaWNzOlxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1OiAxXG4gICAgICBtZW1vcnk6IDUxMk1pXG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6IDVtXG4gICAgICBtZW1vcnk6IDEyOE1pXG4gIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5gO1xuICB9XG59XG4iXX0=
498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWV0aGV1cy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3Byb21ldGhldXMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWtDO0FBQ2xDLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsc0JBQVM7SUFDckQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXBDLDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkQsa0RBQWtEO1FBQ2xELDJDQUEyQztRQUMzQyxJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzNDLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLFdBQVc7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsdUJBQXVCO29CQUNqRCw2QkFBNkIsRUFBRSxZQUFZO29CQUMzQyw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxLQUFLLEVBQUUsdUJBQXVCO2dCQUM5QixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZTtnQkFDbkcsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLGFBQWEsRUFBRSxVQUFVO2FBQzFCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQXdCO1FBQ2pELHFFQUFxRTtRQUNyRSw0RUFBNEU7UUFDNUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7Ozs0QkFLdkIsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7O2tDQVFWLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQWdIUSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7d0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJOzBCQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVU7NEJBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSTs0QkFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0E2QnhDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSTs7Ozs7Ozs7Ozs7OztnQkFhZCxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVk7Ozs7Ozs7O3lCQVFuQixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVk7OztlQUdyQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRztrQkFDckMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU07O2VBRTlDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHO2tCQUN2QyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTTs7Ozs7Ozs7aUJBUTlDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHO29CQUN6QyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTTs7aUJBRWxELE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHO29CQUN2QyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTTs7Ozs7Ozs7OztpQkFVaEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7O2dCQWdCNUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVOzs7Ozs7Ozs7eUJBU2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVTs7OztlQUluQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRztrQkFDbkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU07O2VBRTVDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHO2tCQUNyQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQTJCNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUc7b0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztpQkFFbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUc7b0JBQ3ZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBd0N2RCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7Ozs7WUFPcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPOzs7O2FBSXJCLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHO2dCQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTTs7YUFFekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7Z0JBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBeUI1QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUNBc0JDLE1BQU0sQ0FBQyxTQUFTOzs7Ozs7Ozt1REFRSSxNQUFNLENBQUMsU0FBUzs7Ozs7Ozs7bUNBUXBDLE1BQU0sQ0FBQyxTQUFTOzswQkFFekIsZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUN4QyxDQUFDO0lBQ0EsQ0FBQztDQUNGO0FBMWRELDREQTBkQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaU9iamVjdCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9tZXRoZXVzU3RhY2tQcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBrdWJlLXByb21ldGhldXMtc3RhY2sgSGVsbUNoYXJ0IHdpdGggUHJvbWV0aGV1cywgR3JhZmFuYSwgYW5kIEFsZXJ0bWFuYWdlci5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjb3JlIG1vbml0b3Jpbmcgc3RhY2sgdGhhdCBpbmNsdWRlczpcbiAqIC0gUHJvbWV0aGV1cyAobWV0cmljcyBjb2xsZWN0aW9uLCAyIHJlcGxpY2FzLCAzZCByZXRlbnRpb24pXG4gKiAtIEdyYWZhbmEgKHZpc3VhbGl6YXRpb24sIGluZ3Jlc3Mgd2l0aCBMZXQncyBFbmNyeXB0KVxuICogLSBBbGVydG1hbmFnZXIgKGFsZXJ0IHJvdXRpbmcsIFNNVFAgbm90aWZpY2F0aW9ucylcbiAqIC0gUHJvbWV0aGV1cyBPcGVyYXRvciAobWFuYWdlcyBQcm9tZXRoZXVzIENSRHMpXG4gKiAtIE5vZGUgRXhwb3J0ZXIgKHN5c3RlbSBtZXRyaWNzIERhZW1vblNldClcbiAqIC0ga3ViZS1zdGF0ZS1tZXRyaWNzIChLdWJlcm5ldGVzIHJlc291cmNlIG1ldHJpY3MpXG4gKlxuICogUHJlcmVxdWlzaXRlczpcbiAqIC0gTmFtZXNwYWNlIGV4aXN0c1xuICogLSBQcmlvcml0eUNsYXNzICdoaWdoLXByaW9yaXR5JyBleGlzdHNcbiAqIC0gTG9uZ2hvcm4gc3RvcmFnZSBjbGFzcyBhdmFpbGFibGVcbiAqIC0gY2VydC1tYW5hZ2VyIENsdXN0ZXJJc3N1ZXIgY29uZmlndXJlZFxuICogLSBUaGFub3MgUzMgc2VjcmV0IGV4aXN0cyAodGhhbm9zLW9ianN0b3JlLWNvbmZpZylcbiAqXG4gKiBTeW5jIFdhdmU6IDIgKGNvcmUgc2VydmljZXMgLSBhZnRlciBTMyBidWNrZXRzIGFuZCBzZWNyZXRzKVxuICovXG5leHBvcnQgY2xhc3MgUHJvbWV0aGV1c1N0YWNrQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb21ldGhldXNTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcgfSA9IHByb3BzO1xuXG4gICAgLy8gR2VuZXJhdGUgSGVsbSB2YWx1ZXMgWUFNTFxuICAgIGNvbnN0IGhlbG1WYWx1ZXMgPSB0aGlzLmdlbmVyYXRlSGVsbVZhbHVlcyhjb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIEhlbG1DaGFydCByZXNvdXJjZSAoSzNTIEhlbG0gY29udHJvbGxlcilcbiAgICAvLyBXYXZlIDI6IENvcmUgU2VydmljZXMgLSBtb25pdG9yaW5nIHN0YWNrXG4gICAgbmV3IEFwaU9iamVjdCh0aGlzLCAna3ViZS1wcm9tZXRoZXVzLXN0YWNrJywge1xuICAgICAgYXBpVmVyc2lvbjogJ2hlbG0uY2F0dGxlLmlvL3YxJyxcbiAgICAgIGtpbmQ6ICdIZWxtQ2hhcnQnLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbmFtZTogJ2t1YmUtcHJvbWV0aGV1cy1zdGFjaycsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnbW9uaXRvcmluZycsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzInLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgcmVwbzogJ2h0dHBzOi8vcHJvbWV0aGV1cy1jb21tdW5pdHkuZ2l0aHViLmlvL2hlbG0tY2hhcnRzJyxcbiAgICAgICAgY2hhcnQ6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICB2ZXJzaW9uOiBjb25maWcudmVyc2lvbnMucHJvbWV0aGV1c1N0YWNrID09PSAnbGF0ZXN0JyA/IHVuZGVmaW5lZCA6IGNvbmZpZy52ZXJzaW9ucy5wcm9tZXRoZXVzU3RhY2ssXG4gICAgICAgIHRhcmdldE5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB2YWx1ZXNDb250ZW50OiBoZWxtVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIZWxtVmFsdWVzKGNvbmZpZzogTW9uaXRvcmluZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgLy8gVGVtcG8gZGF0YXNvdXJjZSBpcyBvbmx5IHByb3Zpc2lvbmVkIHdoZW4gdHJhY2luZyBpcyBlbmFibGVkLiBXaGVuXG4gICAgLy8gZGlzYWJsZWQgdGhpcyBpcyBlbXB0eSwgc28gdGhlIEdyYWZhbmEgYmxvY2sgaXMgYnl0ZS1pZGVudGljYWwgdG8gYmVmb3JlLlxuICAgIGNvbnN0IHRlbXBvRGF0YXNvdXJjZSA9IGNvbmZpZy50ZW1wby5lbmFibGVkID8gYFxuICAgICAgLSBuYW1lOiBUZW1wb1xuICAgICAgICB0eXBlOiB0ZW1wb1xuICAgICAgICB1aWQ6IHRlbXBvXG4gICAgICAgIGFjY2VzczogcHJveHlcbiAgICAgICAgdXJsOiBodHRwOi8vdGVtcG8uJHtjb25maWcubmFtZXNwYWNlfS5zdmMuY2x1c3Rlci5sb2NhbDozMjAwXG4gICAgICAgIGpzb25EYXRhOlxuICAgICAgICAgIHRyYWNlc1RvTG9nc1YyOlxuICAgICAgICAgICAgZGF0YXNvdXJjZVVpZDogbG9raVxuICAgICAgICAgICAgc3BhblN0YXJ0VGltZVNoaWZ0OiBcIi0xaFwiXG4gICAgICAgICAgICBzcGFuRW5kVGltZVNoaWZ0OiBcIjFoXCJcbiAgICAgICAgICAgIGZpbHRlckJ5VHJhY2VJRDogdHJ1ZVxuICAgICAgICAgIHRyYWNlc1RvTWV0cmljczpcbiAgICAgICAgICAgIGRhdGFzb3VyY2VVaWQ6IHRoYW5vc2AgOiAnJztcbiAgICByZXR1cm4gYGt1YmVFdGNkOlxuICBlbmFibGVkOiBmYWxzZVxuXG4jIERpc2FibGUga3ViZS1jb250cm9sbGVyLW1hbmFnZXIgYW5kIGt1YmUtc2NoZWR1bGVyIG1vbml0b3JpbmcuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2FibGVzcGFnaGV0dGkvazNzLW1vbml0b3JpbmcvaXNzdWVzLzJcbmt1YmVDb250cm9sbGVyTWFuYWdlcjpcbiAgZW5hYmxlZDogZmFsc2Vcbmt1YmVTY2hlZHVsZXI6XG4gIGVuYWJsZWQ6IGZhbHNlXG5cbiMgRGV0ZWN0IFBvZERpc3J1cHRpb25CdWRnZXRzIHRoYXQgd291bGQgYmxvY2sgYSBub2RlIGRyYWluIGR1cmluZyBrM3MgdXBncmFkZXMuXG4jIE9wZXJhdG9yLW1hbmFnZWQgUERCcyBzaXQgYXQgZGlzcnVwdGlvbnNBbGxvd2VkPTAgYnkgZGVzaWduIChMb25naG9ybiBpbnN0YW5jZS1tYW5hZ2VycyxcbiMgQ05QRyAqLXByaW1hcnkpIGFuZCBhcmUgZXhjbHVkZWQgc28gdGhlIGFsZXJ0IG9ubHkgZmlyZXMgb24gYW5vbWFsb3VzIGFwcCBQREJzLlxuYWRkaXRpb25hbFByb21ldGhldXNSdWxlc01hcDpcbiAgcGRiLWRyYWluLXNhZmV0eTpcbiAgICBncm91cHM6XG4gICAgICAtIG5hbWU6IHBkYi5ydWxlc1xuICAgICAgICBpbnRlcnZhbDogMW1cbiAgICAgICAgcnVsZXM6XG4gICAgICAgICAgLSBhbGVydDogUG9kRGlzcnVwdGlvbkJ1ZGdldFVuZHJhaW5hYmxlXG4gICAgICAgICAgICBleHByOiBrdWJlX3BvZGRpc3J1cHRpb25idWRnZXRfc3RhdHVzX3BvZF9kaXNydXB0aW9uc19hbGxvd2Vke25hbWVzcGFjZSE9XCJsb25naG9ybi1zeXN0ZW1cIiwgcG9kZGlzcnVwdGlvbmJ1ZGdldCF+XCIuKi1wcmltYXJ5XCJ9ID09IDBcbiAgICAgICAgICAgIGZvcjogMTVtXG4gICAgICAgICAgICBsYWJlbHM6XG4gICAgICAgICAgICAgIHNldmVyaXR5OiB3YXJuaW5nXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogY2x1c3Rlci11cGdyYWRlXG4gICAgICAgICAgICBhbm5vdGF0aW9uczpcbiAgICAgICAgICAgICAgc3VtbWFyeTogXCJQREIge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ve3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19IGFsbG93cyAwIHZvbHVudGFyeSBkaXNydXB0aW9uc1wiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgVGhlIFBvZERpc3J1cHRpb25CdWRnZXQge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ve3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19XG4gICAgICAgICAgICAgICAgaGFzIGFsbG93ZWQgMCB2b2x1bnRhcnkgZGlzcnVwdGlvbnMgZm9yIG92ZXIgMTUgbWludXRlcy4gVGhpcyB3aWxsIGJsb2NrIGEgbm9kZVxuICAgICAgICAgICAgICAgIGRyYWluIGR1cmluZyBrM3MgdXBncmFkZXMuIE9wZXJhdG9yLW1hbmFnZWQgUERCcyAoTG9uZ2hvcm4sIENOUEcgcHJpbWFyaWVzKSBhcmVcbiAgICAgICAgICAgICAgICBleGNsdWRlZCBmcm9tIHRoaXMgYWxlcnQuIExpa2VseSBhIGRlZ3JhZGVkIGRlcGxveW1lbnQgKDAgaGVhbHRoeSBwb2RzKSBvciBhXG4gICAgICAgICAgICAgICAgc2luZ2xlLXJlcGxpY2EgZGVwbG95bWVudCB3aXRoIG1pbkF2YWlsYWJsZT0xLlxuICAgICAgICAgICAgICAgIENoZWNrOiBrdWJlY3RsIGdldCBwZGIgLW4ge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ge3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19XG4gICAgICAgICAgLSBhbGVydDogUG9kRGlzcnVwdGlvbkJ1ZGdldFVuZHJhaW5hYmxlQ3JpdGljYWxcbiAgICAgICAgICAgIGV4cHI6IGt1YmVfcG9kZGlzcnVwdGlvbmJ1ZGdldF9zdGF0dXNfcG9kX2Rpc3J1cHRpb25zX2FsbG93ZWR7bmFtZXNwYWNlIT1cImxvbmdob3JuLXN5c3RlbVwiLCBwb2RkaXNydXB0aW9uYnVkZ2V0IX5cIi4qLXByaW1hcnlcIn0gPT0gMFxuICAgICAgICAgICAgZm9yOiAxaFxuICAgICAgICAgICAgbGFiZWxzOlxuICAgICAgICAgICAgICBzZXZlcml0eTogY3JpdGljYWxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBjbHVzdGVyLXVwZ3JhZGVcbiAgICAgICAgICAgIGFubm90YXRpb25zOlxuICAgICAgICAgICAgICBzdW1tYXJ5OiBcIlBEQiB7eyAkbGFiZWxzLm5hbWVzcGFjZSB9fS97eyAkbGFiZWxzLnBvZGRpc3J1cHRpb25idWRnZXQgfX0gdW5kcmFpbmFibGUgPjFoXCJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHxcbiAgICAgICAgICAgICAgICBQREIge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ve3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19IGhhcyBibG9ja2VkXG4gICAgICAgICAgICAgICAgdm9sdW50YXJ5IGRpc3J1cHRpb25zIGZvciBvdmVyIGFuIGhvdXIuIEEgazNzIGFnZW50IHVwZ3JhZGUgd291bGQgc3RhbGwgb24gdGhpcyBub2RlLlxuICAjIERldGVjdCBhbiBFWCBkZWRpY2F0ZWQgd29ya2VyIHN0dWNrIE5vdFJlYWR5IOKAlCBsaWtlbHkgYSBNaWNyb09TIHJlYm9vdCBoYW5nXG4gICMgKHBpbmdzIGJ1dCBzc2hkL2t1YmVsZXQgZGVhZCkuIEEgaHVuZyBub2RlIGFsc28gaG9sZHMgdGhlIGNsdXN0ZXItd2lkZSBrdXJlZFxuICAjIGxvY2ssIGJsb2NraW5nIGFsbCBmdXJ0aGVyIGdyYWNlZnVsIHJlYm9vdHMsIHNvIHRoaXMgbXVzdCBiZSBjYXVnaHQgZmFzdC5cbiAgZXgtd29ya2VyLXJlYm9vdDpcbiAgICBncm91cHM6XG4gICAgICAtIG5hbWU6IGV4LXdvcmtlci5ydWxlc1xuICAgICAgICBpbnRlcnZhbDogMW1cbiAgICAgICAgcnVsZXM6XG4gICAgICAgICAgLSBhbGVydDogRXhXb3JrZXJOb3RSZWFkeVxuICAgICAgICAgICAgZXhwcjoga3ViZV9ub2RlX3N0YXR1c19jb25kaXRpb257Y29uZGl0aW9uPVwiUmVhZHlcIixzdGF0dXM9XCJ0cnVlXCIsbm9kZT1+XCJrdXA2cy1leC0uKlwifSA9PSAwXG4gICAgICAgICAgICBmb3I6IDE1bVxuICAgICAgICAgICAgbGFiZWxzOlxuICAgICAgICAgICAgICBzZXZlcml0eTogY3JpdGljYWxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBub2RlXG4gICAgICAgICAgICBhbm5vdGF0aW9uczpcbiAgICAgICAgICAgICAgc3VtbWFyeTogXCJFWCB3b3JrZXIge3sgJGxhYmVscy5ub2RlIH19IE5vdFJlYWR5IGZvciA+MTVtXCJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHxcbiAgICAgICAgICAgICAgICBFWCBkZWRpY2F0ZWQgd29ya2VyIHt7ICRsYWJlbHMubm9kZSB9fSBoYXMgYmVlbiBOb3RSZWFkeSBmb3Igb3ZlciAxNSBtaW51dGVzLlxuICAgICAgICAgICAgICAgIFBvc3NpYmxlIE1pY3JvT1MgcmVib290IGhhbmcgKHBpbmdzIGJ1dCBzc2hkL2t1YmVsZXQvbG9uZ2hvcm4tbWFuYWdlciBkZWFkKSDigJQgdGhlXG4gICAgICAgICAgICAgICAgbm9kZSBtYXkgc3RpbGwgaG9sZCB0aGUgY2x1c3Rlci13aWRlIGt1cmVkIGxvY2ssIGJsb2NraW5nIGFsbCBmdXJ0aGVyIHJlYm9vdHMuXG4gICAgICAgICAgICAgICAgUmVjb3Zlcnk6IEhldHpuZXIgUm9ib3QgaGFyZHdhcmUgcmVzZXQuIERvIE5PVCBmb3JjZS1kZXRhY2ggTG9uZ2hvcm4gdm9sdW1lcy5cbiAgICAgICAgICAgICAgcnVuYm9va191cmw6IFwiaHR0cHM6Ly9kb2NzLmt1cDZzLmNvbS9ob3ctdG8vdHJvdWJsZXNob290aW5nL2V4LXdvcmtlci1waW5nLWJ1dC1kZWFkLmh0bWxcIlxuXG4jIERyb3AgaGlnaC1jYXJkaW5hbGl0eSBBUEkgc2VydmVyIGFuZCBldGNkIGhpc3RvZ3JhbSBidWNrZXRzIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2VcbiMgVGhlc2UgbWV0cmljcyBhbG9uZSBhY2NvdW50IGZvciB+MjAwayBzZXJpZXMgKDQ3JSBvZiB0b3RhbCBjYXJkaW5hbGl0eSlcbiMgV2Uga2VlcCBfc3VtIGFuZCBfY291bnQgc3VmZml4ZXMgd2hpY2ggYXJlIHN1ZmZpY2llbnQgZm9yIHJhdGUgY2FsY3VsYXRpb25zXG5rdWJlQXBpU2VydmVyOlxuICBzZXJ2aWNlTW9uaXRvcjpcbiAgICBtZXRyaWNSZWxhYmVsaW5nczpcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9zbGlfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9ib2R5X3NpemVfYnl0ZXNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3Jlc3BvbnNlX3NpemVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2V0Y2RfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG5cbiMgS3ViZWxldCBhbHNvIGV4cG9zZXMgYXBpc2VydmVyIG1ldHJpY3MgLSBhcHBseSBzYW1lIGZpbHRlcnNcbmt1YmVsZXQ6XG4gIHNlcnZpY2VNb25pdG9yOlxuICAgIG1ldHJpY1JlbGFiZWxpbmdzOlxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXF1ZXN0X3NsaV9kdXJhdGlvbl9zZWNvbmRzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXF1ZXN0X2JvZHlfc2l6ZV9ieXRlc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVzcG9uc2Vfc2l6ZXNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnZXRjZF9yZXF1ZXN0X2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcblxuYWxlcnRtYW5hZ2VyOlxuICBjb25maWc6XG4gICAgZ2xvYmFsOlxuICAgICAgc210cF9mcm9tOiAke2NvbmZpZy5zbXRwLmZyb219XG4gICAgICBzbXRwX3NtYXJ0aG9zdDogJHtjb25maWcuc210cC5ob3N0fToke2NvbmZpZy5zbXRwLnBvcnR9XG4gICAgICBzbXRwX3JlcXVpcmVfdGxzOiAke2NvbmZpZy5zbXRwLnJlcXVpcmVUbHN9XG4gICAgICBzbXRwX2F1dGhfdXNlcm5hbWU6ICR7Y29uZmlnLnNtdHAudXNlcm5hbWUgfHwgY29uZmlnLnNtdHAuZnJvbX1cbiAgICAgIHNtdHBfYXV0aF9wYXNzd29yZDogJHtjb25maWcuc210cC5wYXNzd29yZCB8fCAnJ31cbiAgICByb3V0ZTpcbiAgICAgIGdyb3VwX2J5OiBbJ2pvYiddXG4gICAgICBncm91cF93YWl0OiAzMHNcbiAgICAgIGdyb3VwX2ludGVydmFsOiA1bVxuICAgICAgcmVwZWF0X2ludGVydmFsOiAxaFxuICAgICAgcmVjZWl2ZXI6IGVtYWlsXG4gICAgICByb3V0ZXM6XG4gICAgICAtIG1hdGNoOlxuICAgICAgICAgIGFsZXJ0bmFtZTogV2F0Y2hkb2dcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IENQVVRocm90dGxpbmdIaWdoXG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBLdWJlTWVtb3J5T3ZlcmNvbW1pdFxuICAgICAgICByZWNlaXZlcjogJ251bGwnXG4gICAgICAtIG1hdGNoOlxuICAgICAgICAgIGFsZXJ0bmFtZTogS3ViZUNQVU92ZXJjb21taXRcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IEt1YmVsZXRUb29NYW55UG9kc1xuICAgICAgICByZWNlaXZlcjogJ251bGwnXG5cbiAgICByZWNlaXZlcnM6XG4gICAgLSBuYW1lOiAnbnVsbCdcbiAgICAtIG5hbWU6IGVtYWlsXG4gICAgICBlbWFpbF9jb25maWdzOlxuICAgICAgLSBzZW5kX3Jlc29sdmVkOiB0cnVlXG4gICAgICAgIHRvOiAke2NvbmZpZy5zbXRwLmZyb219XG5cbiAgICAjIEluaGliaXRpb24gcnVsZXMgYWxsb3cgdG8gbXV0ZSBhIHNldCBvZiBhbGVydHMgZ2l2ZW4gdGhhdCBhbm90aGVyIGFsZXJ0IGlzIGZpcmluZy5cbiAgICAjIFdlIHVzZSB0aGlzIHRvIG11dGUgYW55IHdhcm5pbmctbGV2ZWwgbm90aWZpY2F0aW9ucyBpZiB0aGUgc2FtZSBhbGVydCBpcyBhbHJlYWR5IGNyaXRpY2FsLlxuICAgIGluaGliaXRfcnVsZXM6XG4gICAgLSBzb3VyY2VfbWF0Y2g6XG4gICAgICAgIHNldmVyaXR5OiAnY3JpdGljYWwnXG4gICAgICB0YXJnZXRfbWF0Y2g6XG4gICAgICAgIHNldmVyaXR5OiAnd2FybmluZydcbiAgICAgICMgQXBwbHkgaW5oaWJpdGlvbiBpZiB0aGUgYWxlcnRuYW1lIGlzIHRoZSBzYW1lLlxuICAgICAgZXF1YWw6IFsnYWxlcnRuYW1lJywgJ25hbWVzcGFjZSddXG5cbiAgYWxlcnRtYW5hZ2VyU3BlYzpcbiAgICByZXBsaWNhczogJHtjb25maWcucmVwbGljYXMuYWxlcnRtYW5hZ2VyfVxuICAgIHBvZEFudGlBZmZpbml0eTogXCJzb2Z0XCJcbiAgICBzdG9yYWdlOlxuICAgICAgdm9sdW1lQ2xhaW1UZW1wbGF0ZTpcbiAgICAgICAgc3BlYzpcbiAgICAgICAgICBhY2Nlc3NNb2RlczogW1wiUmVhZFdyaXRlT25jZVwiXVxuICAgICAgICAgIHJlc291cmNlczpcbiAgICAgICAgICAgIHJlcXVlc3RzOlxuICAgICAgICAgICAgICBzdG9yYWdlOiAke2NvbmZpZy5zdG9yYWdlLmFsZXJ0bWFuYWdlcn1cbiAgICByZXNvdXJjZXM6XG4gICAgICBsaW1pdHM6XG4gICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmFsZXJ0bWFuYWdlci5saW1pdHMuY3B1fVxuICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5hbGVydG1hbmFnZXIubGltaXRzLm1lbW9yeX1cbiAgICAgIHJlcXVlc3RzOlxuICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5hbGVydG1hbmFnZXIucmVxdWVzdHMuY3B1fVxuICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5hbGVydG1hbmFnZXIucmVxdWVzdHMubWVtb3J5fVxuICAgIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5cbiAgICAjIFNpZGVjYXIgY29udGFpbmVycyByZXNvdXJjZSByZXF1ZXN0cyAoYWRkZWQgMjAyNS0xMS0xOClcbiAgICBjb250YWluZXJzOlxuICAgIC0gbmFtZTogY29uZmlnLXJlbG9hZGVyXG4gICAgICByZXNvdXJjZXM6XG4gICAgICAgIHJlcXVlc3RzOlxuICAgICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmNvbmZpZ1JlbG9hZGVyLnJlcXVlc3RzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5tZW1vcnl9XG4gICAgICAgIGxpbWl0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMuY3B1fVxuICAgICAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmNvbmZpZ1JlbG9hZGVyLmxpbWl0cy5tZW1vcnl9XG5cblxucHJvbWV0aGV1czpcbiAgIyBFbmFibGUgVGhhbm9zIHNlcnZpY2UgZm9yIGdSUEMgY29tbXVuaWNhdGlvblxuICAjIFJlcXVpcmVkIGZvciBIZWxtIGNoYXJ0IHRvIHByb3Blcmx5IHJlbmRlciBUaGFub3Mgc2lkZWNhciBjb25maWd1cmF0aW9uXG4gIHRoYW5vc1NlcnZpY2U6XG4gICAgZW5hYmxlZDogdHJ1ZVxuXG4gIHByb21ldGhldXNTcGVjOlxuICAgIHJldGVudGlvbjogJHtjb25maWcucmV0ZW50aW9uLnByb21ldGhldXN9ICAjIFJlZHVjZWQgZnJvbSA3ZCAtIFRoYW5vcyBwcm92aWRlcyBsb25nLXRlcm0gc3RvcmFnZSBpbiBTM1xuXG4gICAgIyBEaXNjb3ZlciBBTEwgU2VydmljZU1vbml0b3JzLCBQb2RNb25pdG9ycyBhbmQgUHJvbWV0aGV1c1J1bGVzIGluIEFMTCBuYW1lc3BhY2VzXG4gICAgIyBTZXR0aW5nIE5pbFVzZXNIZWxtVmFsdWVzOiBmYWxzZSBtZWFucyBuaWwgc2VsZWN0b3JzID0gXCJzZWxlY3QgYWxsXCJcbiAgICAjIEVtcHR5IG5hbWVzcGFjZSBzZWxlY3RvcnMge30gbWVhbiBcInNlYXJjaCBhbGwgbmFtZXNwYWNlc1wiXG4gICAgIyBXaXRob3V0IHRoZSBydWxlKiBzZXR0aW5ncywgcnVsZVNlbGVjdG9yIGtlZXBzIHRoZSBjaGFydCBkZWZhdWx0XG4gICAgIyAobWF0Y2hMYWJlbHM6IHtyZWxlYXNlOiA8bmFtZT59KSBhbmQgaGFuZC1hdXRob3JlZCBQcm9tZXRoZXVzUnVsZXMgdGhhdFxuICAgICMgbGFjayB0aGUgcmVsZWFzZSBsYWJlbCBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAgICAjIE5vdGU6IFRoaXMgZG9lcyBOT1QgYWZmZWN0IFRoYW5vcyBzaWRlY2FyIC0gY29udHJvbGxlZCBieSB0aGFub3Mub2JqZWN0U3RvcmFnZUNvbmZpZ1xuICAgIHNlcnZpY2VNb25pdG9yU2VsZWN0b3JOaWxVc2VzSGVsbVZhbHVlczogZmFsc2VcbiAgICBwb2RNb25pdG9yU2VsZWN0b3JOaWxVc2VzSGVsbVZhbHVlczogZmFsc2VcbiAgICBydWxlU2VsZWN0b3JOaWxVc2VzSGVsbVZhbHVlczogZmFsc2VcbiAgICBzZXJ2aWNlTW9uaXRvck5hbWVzcGFjZVNlbGVjdG9yOiB7fVxuICAgIHBvZE1vbml0b3JOYW1lc3BhY2VTZWxlY3Rvcjoge31cbiAgICBydWxlTmFtZXNwYWNlU2VsZWN0b3I6IHt9XG5cbiAgICByZXBsaWNhczogJHtjb25maWcucmVwbGljYXMucHJvbWV0aGV1c31cbiAgICBwb2RBbnRpQWZmaW5pdHk6IFwiaGFyZFwiXG4gICAgc3RvcmFnZVNwZWM6XG4gICAgICB2b2x1bWVDbGFpbVRlbXBsYXRlOlxuICAgICAgICBzcGVjOlxuICAgICAgICAgIHN0b3JhZ2VDbGFzc05hbWU6IGxvbmdob3JuXG4gICAgICAgICAgYWNjZXNzTW9kZXM6IFtcIlJlYWRXcml0ZU9uY2VcIl1cbiAgICAgICAgICByZXNvdXJjZXM6XG4gICAgICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICAgICAgc3RvcmFnZTogJHtjb25maWcuc3RvcmFnZS5wcm9tZXRoZXVzfSAgIyBSZWR1Y2VkIGZyb20gNkdpICgzZCByZXRlbnRpb24gbmVlZHMgbGVzcyBzcGFjZSlcblxuICAgIHJlc291cmNlczpcbiAgICAgIGxpbWl0czpcbiAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMucHJvbWV0aGV1cy5saW1pdHMuY3B1fVxuICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5wcm9tZXRoZXVzLmxpbWl0cy5tZW1vcnl9XG4gICAgICByZXF1ZXN0czpcbiAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMucHJvbWV0aGV1cy5yZXF1ZXN0cy5jcHV9XG4gICAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLnByb21ldGhldXMucmVxdWVzdHMubWVtb3J5fVxuICAgIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5cbiAgICAjIEV4dGVybmFsIGxhYmVscyBmb3IgbXVsdGktY2x1c3RlciBpZGVudGlmaWNhdGlvbiBhbmQgVGhhbm9zXG4gICAgZXh0ZXJuYWxMYWJlbHM6XG4gICAgICBjbHVzdGVyOiBrdXA2c1xuICAgICAgcmVwbGljYTogXCIkKFBPRF9OQU1FKVwiXG5cbiAgICAjIFRoYW5vcyBzaWRlY2FyIGZvciBsb25nLXRlcm0gbWV0cmljcyBzdG9yYWdlIGluIFMzXG4gICAgIyBOT1RFOiBjaGFydCA+PTg1LnggcmVxdWlyZXMgdGhlIGV4aXN0aW5nU2VjcmV0IHNoYXBlLiBUaGUgbGVnYWN5IGZsYXRcbiAgICAjIHtuYW1lLCBrZXl9IGZvcm0gaXMgc2lsZW50bHkgZHJvcHBlZCBieSB0aGUgY2hhcnQsIHdoaWNoIHJlbW92ZXMgdGhlXG4gICAgIyBzaWRlY2FyIGFuZCBzdG9wcyBhbGwgUzMgYmxvY2sgdXBsb2FkcyAocmVncmVzc2lvbiBzZWVuIDIwMjYtMDMtMzEpLlxuICAgIHRoYW5vczpcbiAgICAgIG9iamVjdFN0b3JhZ2VDb25maWc6XG4gICAgICAgIGV4aXN0aW5nU2VjcmV0OlxuICAgICAgICAgIG5hbWU6IHRoYW5vcy1vYmpzdG9yZS1jb25maWcgICMgRVNPLW1hbmFnZWQgc2VjcmV0XG4gICAgICAgICAga2V5OiBvYmpzdG9yZS55bWxcblxuICAgICMgU2lkZWNhciBjb250YWluZXJzIHJlc291cmNlIHJlcXVlc3RzIChhZGRlZCAyMDI1LTExLTE4KVxuICAgICMgTk9URTogdGhhbm9zLXNpZGVjYXIgaXMgTk9UIGxpc3RlZCBoZXJlIC0gaXQncyBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IFByb21ldGhldXMgT3BlcmF0b3JcbiAgICAjIHdoZW4gdGhhbm9zLm9iamVjdFN0b3JhZ2VDb25maWcgaXMgc2V0LiBTcGVjaWZ5aW5nIGl0IGluIGNvbnRhaW5lcnNbXSB3b3VsZCBvdmVycmlkZVxuICAgICMgdGhlIG9wZXJhdG9yJ3MgZGVmaW5pdGlvbiBhbmQgcmVxdWlyZSB1cyB0byBtYW51YWxseSBzcGVjaWZ5IHRoZSBpbWFnZSwgd2hpY2ggYnJlYWtzXG4gICAgIyB3aGVuIHRoZSBvcGVyYXRvciB1cGRhdGVzIHRoZSB0aGFub3MgdmVyc2lvbi5cbiAgICBjb250YWluZXJzOlxuICAgIC0gbmFtZTogY29uZmlnLXJlbG9hZGVyXG4gICAgICByZXNvdXJjZXM6XG4gICAgICAgIHJlcXVlc3RzOlxuICAgICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmNvbmZpZ1JlbG9hZGVyLnJlcXVlc3RzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5tZW1vcnl9XG4gICAgICAgIGxpbWl0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMuY3B1fVxuICAgICAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmNvbmZpZ1JlbG9hZGVyLmxpbWl0cy5tZW1vcnl9XG5cbiAgICBzZXJ2aWNlOlxuICAgICAgc2Vzc2lvbkFmZmluaXR5OiBcIkNsaWVudElQXCJcblxuXG5ncmFmYW5hOlxuICAjIFJlY3JlYXRlIHN0cmF0ZWd5IGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIHN0b3JhZ2UgUFZDIGlzIFJXTzpcbiAgIyBhIFJvbGxpbmdVcGRhdGUgd291bGQgc3VyZ2UgYSBzZWNvbmQgcG9kIHRoYXQgY2Fubm90IG1vdW50IHRoZVxuICAjIHZvbHVtZSAoRmFpbGVkQXR0YWNoVm9sdW1lKSwgYmxvY2tpbmcgdGhlIHJvbGxvdXQgaW5kZWZpbml0ZWx5LlxuICBkZXBsb3ltZW50U3RyYXRlZ3k6XG4gICAgdHlwZTogUmVjcmVhdGVcblxuICAjIFVzZSBleGlzdGluZyBzZWNyZXQgZm9yIGFkbWluIGNyZWRlbnRpYWxzIChtYW5hZ2VkIGJ5IEVTTylcbiAgIyBUaGlzIHByZXZlbnRzIHBhc3N3b3JkIHJlZ2VuZXJhdGlvbiBvbiBIZWxtIHVwZ3JhZGVzXG4gIGFkbWluOlxuICAgIGV4aXN0aW5nU2VjcmV0OiBcImdyYWZhbmEtYWRtaW4tY3JlZGVudGlhbHNcIlxuICAgIHVzZXJLZXk6IFwiYWRtaW4tdXNlclwiXG4gICAgcGFzc3dvcmRLZXk6IFwiYWRtaW4tcGFzc3dvcmRcIlxuXG4gICMgRGlzYWJsZSBkZWZhdWx0IFByb21ldGhldXMgZGF0YXNvdXJjZSAod2UgcHJvdmlkZSBvdXIgb3duIHBvaW50aW5nIHRvIFRoYW5vcyBRdWVyeSlcbiAgZGVmYXVsdERhdGFzb3VyY2VFbmFibGVkOiBmYWxzZVxuXG4gICMgU2lkZWNhciBjb250YWluZXJzIGZvciBkYXNoYm9hcmQvZGF0YXNvdXJjZSBwcm92aXNpb25pbmdcbiAgc2lkZWNhcjpcbiAgICByZXNvdXJjZXM6XG4gICAgICByZXF1ZXN0czpcbiAgICAgICAgY3B1OiAxMG1cbiAgICAgICAgbWVtb3J5OiAyNTZNaVxuICAgICAgbGltaXRzOlxuICAgICAgICBjcHU6IDEwMG1cbiAgICAgICAgbWVtb3J5OiA1MTJNaVxuICAgIGRhc2hib2FyZHM6XG4gICAgICBlbmFibGVkOiB0cnVlXG4gICAgZGF0YXNvdXJjZXM6XG4gICAgICBlbmFibGVkOiBmYWxzZSAgIyBXZSBtYW51YWxseSBwcm92aXNpb24gZGF0YXNvdXJjZXMgKFByb21ldGhldXPihpJUaGFub3MsIExva2kpXG5cbiAgaW5ncmVzczpcbiAgICBlbmFibGVkOiB0cnVlXG4gICAgaG9zdHM6XG4gICAgICAtICR7Y29uZmlnLmRvbWFpbnMuZ3JhZmFuYX1cbiAgICBhbm5vdGF0aW9uczpcbiAgICAgIGNlcnQtbWFuYWdlci5pby9jbHVzdGVyLWlzc3VlcjogXCJsZXRzZW5jcnlwdC1jbHVzdGVyLWlzc3VlclwiXG4gICAgICB0cmFlZmlrLmluZ3Jlc3Mua3ViZXJuZXRlcy5pby9yb3V0ZXIuZW50cnlwb2ludHM6IHdlYnNlY3VyZVxuICAgIHRsczpcbiAgICAgIC0gc2VjcmV0TmFtZTogZ3JhZmFuYS1nZW5lcmFsLXRsc1xuICAgICAgICBob3N0czpcbiAgICAgICAgLSAke2NvbmZpZy5kb21haW5zLmdyYWZhbmF9XG5cbiAgcmVzb3VyY2VzOlxuICAgIGxpbWl0czpcbiAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmdyYWZhbmEubGltaXRzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmdyYWZhbmEubGltaXRzLm1lbW9yeX1cbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmdyYWZhbmEucmVxdWVzdHMuY3B1fVxuICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuZ3JhZmFuYS5yZXF1ZXN0cy5tZW1vcnl9XG5cbiAgcmVhZGluZXNzUHJvYmU6XG4gICAgaHR0cEdldDpcbiAgICAgIHBhdGg6IC9hcGkvaGVhbHRoXG4gICAgICBwb3J0OiAzMDAwXG4gICAgaW5pdGlhbERlbGF5U2Vjb25kczogMzBcbiAgICBwZXJpb2RTZWNvbmRzOiAxMFxuICAgIHRpbWVvdXRTZWNvbmRzOiA1XG4gICAgZmFpbHVyZVRocmVzaG9sZDogM1xuXG4gIGxpdmVuZXNzUHJvYmU6XG4gICAgaHR0cEdldDpcbiAgICAgIHBhdGg6IC9hcGkvaGVhbHRoXG4gICAgICBwb3J0OiAzMDAwXG4gICAgaW5pdGlhbERlbGF5U2Vjb25kczogNjBcbiAgICBwZXJpb2RTZWNvbmRzOiAxMFxuICAgIHRpbWVvdXRTZWNvbmRzOiAzMFxuICAgIGZhaWx1cmVUaHJlc2hvbGQ6IDEwXG5cbiAgcGVyc2lzdGVuY2U6XG4gICAgZW5hYmxlZDogdHJ1ZVxuICAgIHN0b3JhZ2VDbGFzc05hbWU6IGxvbmdob3JuXG4gICAgYWNjZXNzTW9kZXM6XG4gICAgICAtIFJlYWRXcml0ZU9uY2VcbiAgICBzaXplOiAke2NvbmZpZy5zdG9yYWdlLmdyYWZhbmF9XG5cbiAgIyBNYW51YWwgZGF0YXNvdXJjZSBwcm92aXNpb25pbmcgKHNpZGVjYXIgZGlzYWJsZWQpXG4gICMgVGhhbm9zIFF1ZXJ5IOKGkiBsb25nLXRlcm0vaGlzdG9yaWNhbCBtZXRyaWNzIChTMyB2aWEgU3RvcmUgKyBsaXZlIHNpZGVjYXIpLCBkZWZhdWx0XG4gICMgUHJvbWV0aGV1cyDihpIgbG9jYWwsIHJlY2VudC9oaWdoLXJlcyBvbmx5IChrZXB0IGZvciBsb3ctbGF0ZW5jeSByZWNlbnQgcXVlcmllcylcbiAgIyBMb2tpIGZvciBsb2cgYWdncmVnYXRpb25cbiAgZGF0YXNvdXJjZXM6XG4gICAgZGF0YXNvdXJjZXMueWFtbDpcbiAgICAgIGFwaVZlcnNpb246IDFcbiAgICAgICMgRGVsZXRlIGFueSBwcmUtZXhpc3RpbmcgTG9raSBkYXRhc291cmNlIChlLmcuIG9uZSBjcmVhdGVkIHdpdGggYVxuICAgICAgIyByYW5kb21seSBnZW5lcmF0ZWQgVUlEIGJlZm9yZSB3ZSBwaW5uZWQgdWlkOiBsb2tpKS4gV2l0aG91dCB0aGlzLFxuICAgICAgIyBHcmFmYW5hIGZhaWxzIHByb3Zpc2lvbmluZyB3aXRoIFwiZGF0YSBzb3VyY2Ugbm90IGZvdW5kXCIgYmVjYXVzZVxuICAgICAgIyB0aGUgdXBzZXJ0IGNvbGxpZGVzIHdpdGggdGhlIGV4aXN0aW5nIGVudHJ5LlxuICAgICAgZGVsZXRlRGF0YXNvdXJjZXM6XG4gICAgICAtIG5hbWU6IExva2lcbiAgICAgICAgb3JnSWQ6IDFcbiAgICAgIGRhdGFzb3VyY2VzOlxuICAgICAgLSBuYW1lOiBUaGFub3NcbiAgICAgICAgdHlwZTogcHJvbWV0aGV1c1xuICAgICAgICB1aWQ6IHRoYW5vc1xuICAgICAgICBhY2Nlc3M6IHByb3h5XG4gICAgICAgICMgdGhhbm9zLXF1ZXJ5IFNlcnZpY2U6IGh0dHAgcG9ydCA5MDkwIC0+IGNvbnRhaW5lciBodHRwIDEwOTAyXG4gICAgICAgIHVybDogaHR0cDovL3RoYW5vcy1xdWVyeS4ke2NvbmZpZy5uYW1lc3BhY2V9LnN2Yy5jbHVzdGVyLmxvY2FsOjkwOTBcbiAgICAgICAgaXNEZWZhdWx0OiB0cnVlXG4gICAgICAgIGpzb25EYXRhOlxuICAgICAgICAgIHRpbWVJbnRlcnZhbDogMzBzXG4gICAgICAtIG5hbWU6IFByb21ldGhldXNcbiAgICAgICAgdHlwZTogcHJvbWV0aGV1c1xuICAgICAgICB1aWQ6IHByb21ldGhldXNcbiAgICAgICAgYWNjZXNzOiBwcm94eVxuICAgICAgICB1cmw6IGh0dHA6Ly9rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy4ke2NvbmZpZy5uYW1lc3BhY2V9LnN2Yy5jbHVzdGVyLmxvY2FsOjkwOTBcbiAgICAgICAgaXNEZWZhdWx0OiBmYWxzZVxuICAgICAgICBqc29uRGF0YTpcbiAgICAgICAgICB0aW1lSW50ZXJ2YWw6IDMwc1xuICAgICAgLSBuYW1lOiBMb2tpXG4gICAgICAgIHR5cGU6IGxva2lcbiAgICAgICAgdWlkOiBsb2tpXG4gICAgICAgIGFjY2VzczogcHJveHlcbiAgICAgICAgdXJsOiBodHRwOi8vbG9raS1nYXRld2F5LiR7Y29uZmlnLm5hbWVzcGFjZX0uc3ZjLmNsdXN0ZXIubG9jYWxcbiAgICAgICAganNvbkRhdGE6XG4gICAgICAgICAgbWF4TGluZXM6IDEwMDAke3RlbXBvRGF0YXNvdXJjZX1cblxucHJvbWV0aGV1c09wZXJhdG9yOlxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1OiAxXG4gICAgICBtZW1vcnk6IDUxMk1pXG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6IDUwbVxuICAgICAgbWVtb3J5OiAxMjhNaVxuICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG5wcm9tZXRoZXVzLW5vZGUtZXhwb3J0ZXI6XG4gICMgQmluZCA6OTEwMCB0byB0aGUgbm9kZSBJbnRlcm5hbElQIG9ubHksIG5vdCAwLjAuMC4wLiBXaXRoIGt1YmVSQkFDUHJveHlcbiAgIyBkaXNhYmxlZCB0aGUgc3ViLWNoYXJ0IHNldHMgSE9TVF9JUCBmcm9tIGZpZWxkUmVmIHN0YXR1cy5ob3N0SVAsIHdoaWNoIGlzXG4gICMgdGhlIG5vZGUncyBJbnRlcm5hbElQIChFWDogdlN3aXRjaCAxMC42LjAueCB2aWEgLS1ub2RlLWlwOyBjbG91ZDogaGNsb3VkXG4gICMgcHJpdmF0ZSBJUCkuIG5vZGUtZXhwb3J0ZXIgaXMgaG9zdE5ldHdvcmssIHNvIFByb21ldGhldXMgYWxyZWFkeSBzY3JhcGVzXG4gICMgdGhhdCBJbnRlcm5hbElQIGVuZHBvaW50IC0+IHNjcmFwaW5nIGlzIHVuYWZmZWN0ZWQsIG9ubHkgdGhlIHB1YmxpYy1OSUNcbiAgIyBleHBvc3VyZSBvZiB0aGUgdW5hdXRoZW50aWNhdGVkIG1ldHJpY3Mgb24gdGhlIEVYIHB1YmxpYyBJUHMgZ29lcyBhd2F5LlxuICBzZXJ2aWNlOlxuICAgIGxpc3Rlbk9uQWxsSW50ZXJmYWNlczogZmFsc2VcbiAgcmVzb3VyY2VzOlxuICAgIGxpbWl0czpcbiAgICAgIGNwdTogNTBtXG4gICAgICBtZW1vcnk6IDUwTWlcbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogNW1cbiAgICAgIG1lbW9yeTogMTZNaVxuICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG5rdWJlLXN0YXRlLW1ldHJpY3M6XG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6IDFcbiAgICAgIG1lbW9yeTogNTEyTWlcbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogNW1cbiAgICAgIG1lbW9yeTogMTI4TWlcbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcbmA7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { Construct } from 'constructs';
2
+ import { MonitoringConfig } from '../types';
3
+ export interface TempoS3BucketProps {
4
+ config: MonitoringConfig;
5
+ }
6
+ /**
7
+ * Creates Crossplane Bucket resources for Tempo trace storage.
8
+ *
9
+ * This construct generates:
10
+ * - S3 Bucket (via Crossplane Upbound provider-aws-s3)
11
+ * - BucketVersioning (for recovery of accidentally deleted blocks)
12
+ * - BucketLifecycleConfiguration (retention buffer)
13
+ *
14
+ * Prerequisites:
15
+ * - Crossplane operator installed
16
+ * - Upbound provider-aws-s3 installed
17
+ * - Crossplane ProviderConfig named by config.integrations.s3ProviderConfig exists
18
+ * - Hetzner S3 credentials secret exists in crossplane-system
19
+ *
20
+ * Sync Wave: 1 (external dependencies - must exist before pods access S3)
21
+ */
22
+ export declare class TempoS3BucketConstruct extends Construct {
23
+ constructor(scope: Construct, id: string, props: TempoS3BucketProps);
24
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TempoS3BucketConstruct = void 0;
4
+ const cdk8s_1 = require("cdk8s");
5
+ const constructs_1 = require("constructs");
6
+ const s3_aws_upbound_io_1 = require("../imports/s3.aws.upbound.io");
7
+ /**
8
+ * Creates Crossplane Bucket resources for Tempo trace storage.
9
+ *
10
+ * This construct generates:
11
+ * - S3 Bucket (via Crossplane Upbound provider-aws-s3)
12
+ * - BucketVersioning (for recovery of accidentally deleted blocks)
13
+ * - BucketLifecycleConfiguration (retention buffer)
14
+ *
15
+ * Prerequisites:
16
+ * - Crossplane operator installed
17
+ * - Upbound provider-aws-s3 installed
18
+ * - Crossplane ProviderConfig named by config.integrations.s3ProviderConfig exists
19
+ * - Hetzner S3 credentials secret exists in crossplane-system
20
+ *
21
+ * Sync Wave: 1 (external dependencies - must exist before pods access S3)
22
+ */
23
+ class TempoS3BucketConstruct extends constructs_1.Construct {
24
+ constructor(scope, id, props) {
25
+ super(scope, id);
26
+ const { config } = props;
27
+ const bucketName = config.tempo.bucket;
28
+ const region = config.s3.region;
29
+ // Create Bucket
30
+ // Wave 1: External Dependencies - S3 bucket provisioned by Crossplane
31
+ new cdk8s_1.ApiObject(this, 'bucket', {
32
+ apiVersion: 's3.aws.upbound.io/v1beta2',
33
+ kind: 'Bucket',
34
+ metadata: {
35
+ name: bucketName,
36
+ namespace: 'crossplane-system',
37
+ labels: {
38
+ 'app.kubernetes.io/name': 'tempo',
39
+ 'app.kubernetes.io/component': 'storage',
40
+ 'app.kubernetes.io/managed-by': 'cdk8s',
41
+ 'app.kubernetes.io/part-of': 'monitoring',
42
+ },
43
+ annotations: {
44
+ 'argocd.argoproj.io/sync-wave': '1',
45
+ 'crossplane.io/external-name': bucketName,
46
+ 'description': 'Tempo trace storage',
47
+ },
48
+ },
49
+ spec: {
50
+ deletionPolicy: 'Delete',
51
+ managementPolicies: [
52
+ 'Observe',
53
+ 'Create',
54
+ 'Delete',
55
+ // Skip Update to avoid tagging operations (not supported by Hetzner S3)
56
+ ],
57
+ forProvider: {
58
+ region: region, // Production region (endpoint determines actual location)
59
+ },
60
+ providerConfigRef: {
61
+ name: config.integrations.s3ProviderConfig,
62
+ },
63
+ },
64
+ });
65
+ // Create BucketVersioning
66
+ new cdk8s_1.ApiObject(this, 'versioning', {
67
+ apiVersion: 's3.aws.upbound.io/v1beta2',
68
+ kind: 'BucketVersioning',
69
+ metadata: {
70
+ name: 'tempo-traces-versioning',
71
+ namespace: 'crossplane-system',
72
+ labels: {
73
+ 'app.kubernetes.io/name': 'tempo',
74
+ 'app.kubernetes.io/component': 'storage',
75
+ 'app.kubernetes.io/managed-by': 'cdk8s',
76
+ 'app.kubernetes.io/part-of': 'monitoring',
77
+ },
78
+ annotations: {
79
+ 'argocd.argoproj.io/sync-wave': '1',
80
+ },
81
+ },
82
+ spec: {
83
+ forProvider: {
84
+ region: region,
85
+ bucketRef: {
86
+ name: bucketName,
87
+ },
88
+ versioningConfiguration: {
89
+ status: 'Enabled',
90
+ },
91
+ },
92
+ providerConfigRef: {
93
+ name: config.integrations.s3ProviderConfig,
94
+ },
95
+ },
96
+ });
97
+ // Create BucketLifecycleConfiguration
98
+ // Lifecycle policy: delete trace blocks older than the buffer window.
99
+ // Tempo's own compactor enforces tempo.retention; this is a storage-side safety net.
100
+ new s3_aws_upbound_io_1.BucketLifecycleConfiguration(this, 'lifecycle', {
101
+ metadata: {
102
+ name: 'tempo-traces-lifecycle',
103
+ namespace: 'crossplane-system',
104
+ labels: {
105
+ 'app.kubernetes.io/name': 'tempo',
106
+ 'app.kubernetes.io/component': 'storage',
107
+ 'app.kubernetes.io/managed-by': 'cdk8s',
108
+ 'app.kubernetes.io/part-of': 'monitoring',
109
+ },
110
+ annotations: {
111
+ 'argocd.argoproj.io/sync-wave': '1',
112
+ },
113
+ },
114
+ spec: {
115
+ managementPolicies: [
116
+ s3_aws_upbound_io_1.BucketLifecycleConfigurationSpecManagementPolicies.OBSERVE,
117
+ s3_aws_upbound_io_1.BucketLifecycleConfigurationSpecManagementPolicies.CREATE,
118
+ s3_aws_upbound_io_1.BucketLifecycleConfigurationSpecManagementPolicies.DELETE,
119
+ ],
120
+ forProvider: {
121
+ region: region,
122
+ bucketRef: {
123
+ name: bucketName,
124
+ },
125
+ rule: [
126
+ {
127
+ id: 'delete-old-traces',
128
+ status: 'Enabled',
129
+ expiration: [
130
+ {
131
+ days: 30, // storage-side safety net beyond Tempo's block retention
132
+ },
133
+ ],
134
+ },
135
+ ],
136
+ },
137
+ providerConfigRef: {
138
+ name: config.integrations.s3ProviderConfig,
139
+ },
140
+ },
141
+ });
142
+ }
143
+ }
144
+ exports.TempoS3BucketConstruct = TempoS3BucketConstruct;
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8tczMtYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvdGVtcG8tczMtYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFrQztBQUNsQywyQ0FBdUM7QUFDdkMsb0VBQWdJO0FBT2hJOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFDbkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFaEMsZ0JBQWdCO1FBQ2hCLHNFQUFzRTtRQUN0RSxJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUM1QixVQUFVLEVBQUUsMkJBQTJCO1lBQ3ZDLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsT0FBTztvQkFDakMsNkJBQTZCLEVBQUUsU0FBUztvQkFDeEMsOEJBQThCLEVBQUUsT0FBTztvQkFDdkMsMkJBQTJCLEVBQUUsWUFBWTtpQkFDMUM7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLDhCQUE4QixFQUFFLEdBQUc7b0JBQ25DLDZCQUE2QixFQUFFLFVBQVU7b0JBQ3pDLGFBQWEsRUFBRSxxQkFBcUI7aUJBQ3JDO2FBQ0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osY0FBYyxFQUFFLFFBQVE7Z0JBQ3hCLGtCQUFrQixFQUFFO29CQUNsQixTQUFTO29CQUNULFFBQVE7b0JBQ1IsUUFBUTtvQkFDUix3RUFBd0U7aUJBQ3pFO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxNQUFNLEVBQUUsTUFBTSxFQUFFLDBEQUEwRDtpQkFDM0U7Z0JBQ0QsaUJBQWlCLEVBQUU7b0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtpQkFDM0M7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILDBCQUEwQjtRQUMxQixJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNoQyxVQUFVLEVBQUUsMkJBQTJCO1lBQ3ZDLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLFNBQVMsRUFBRSxtQkFBbUI7Z0JBQzlCLE1BQU0sRUFBRTtvQkFDTix3QkFBd0IsRUFBRSxPQUFPO29CQUNqQyw2QkFBNkIsRUFBRSxTQUFTO29CQUN4Qyw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLE1BQU07b0JBQ2QsU0FBUyxFQUFFO3dCQUNULElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCx1QkFBdUIsRUFBRTt3QkFDdkIsTUFBTSxFQUFFLFNBQVM7cUJBQ2xCO2lCQUNGO2dCQUNELGlCQUFpQixFQUFFO29CQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7aUJBQzNDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxzQ0FBc0M7UUFDdEMsc0VBQXNFO1FBQ3RFLHFGQUFxRjtRQUNyRixJQUFJLGdEQUE0QixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDbEQsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLFNBQVMsRUFBRSxtQkFBbUI7Z0JBQzlCLE1BQU0sRUFBRTtvQkFDTix3QkFBd0IsRUFBRSxPQUFPO29CQUNqQyw2QkFBNkIsRUFBRSxTQUFTO29CQUN4Qyw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixrQkFBa0IsRUFBRTtvQkFDbEIsc0VBQWtELENBQUMsT0FBTztvQkFDMUQsc0VBQWtELENBQUMsTUFBTTtvQkFDekQsc0VBQWtELENBQUMsTUFBTTtpQkFDMUQ7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxNQUFNO29CQUNkLFNBQVMsRUFBRTt3QkFDVCxJQUFJLEVBQUUsVUFBVTtxQkFDakI7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKOzRCQUNFLEVBQUUsRUFBRSxtQkFBbUI7NEJBQ3ZCLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixVQUFVLEVBQUU7Z0NBQ1Y7b0NBQ0UsSUFBSSxFQUFFLEVBQUUsRUFBRSx5REFBeUQ7aUNBQ3BFOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELGlCQUFpQixFQUFFO29CQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7aUJBQzNDO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE1SEQsd0RBNEhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCdWNrZXRMaWZlY3ljbGVDb25maWd1cmF0aW9uLCBCdWNrZXRMaWZlY3ljbGVDb25maWd1cmF0aW9uU3BlY01hbmFnZW1lbnRQb2xpY2llcyB9IGZyb20gJy4uL2ltcG9ydHMvczMuYXdzLnVwYm91bmQuaW8nO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZW1wb1MzQnVja2V0UHJvcHMge1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBDcm9zc3BsYW5lIEJ1Y2tldCByZXNvdXJjZXMgZm9yIFRlbXBvIHRyYWNlIHN0b3JhZ2UuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgZ2VuZXJhdGVzOlxuICogLSBTMyBCdWNrZXQgKHZpYSBDcm9zc3BsYW5lIFVwYm91bmQgcHJvdmlkZXItYXdzLXMzKVxuICogLSBCdWNrZXRWZXJzaW9uaW5nIChmb3IgcmVjb3Zlcnkgb2YgYWNjaWRlbnRhbGx5IGRlbGV0ZWQgYmxvY2tzKVxuICogLSBCdWNrZXRMaWZlY3ljbGVDb25maWd1cmF0aW9uIChyZXRlbnRpb24gYnVmZmVyKVxuICpcbiAqIFByZXJlcXVpc2l0ZXM6XG4gKiAtIENyb3NzcGxhbmUgb3BlcmF0b3IgaW5zdGFsbGVkXG4gKiAtIFVwYm91bmQgcHJvdmlkZXItYXdzLXMzIGluc3RhbGxlZFxuICogLSBDcm9zc3BsYW5lIFByb3ZpZGVyQ29uZmlnIG5hbWVkIGJ5IGNvbmZpZy5pbnRlZ3JhdGlvbnMuczNQcm92aWRlckNvbmZpZyBleGlzdHNcbiAqIC0gSGV0em5lciBTMyBjcmVkZW50aWFscyBzZWNyZXQgZXhpc3RzIGluIGNyb3NzcGxhbmUtc3lzdGVtXG4gKlxuICogU3luYyBXYXZlOiAxIChleHRlcm5hbCBkZXBlbmRlbmNpZXMgLSBtdXN0IGV4aXN0IGJlZm9yZSBwb2RzIGFjY2VzcyBTMylcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBvUzNCdWNrZXRDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVGVtcG9TM0J1Y2tldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBwcm9wcztcbiAgICBjb25zdCBidWNrZXROYW1lID0gY29uZmlnLnRlbXBvLmJ1Y2tldDtcbiAgICBjb25zdCByZWdpb24gPSBjb25maWcuczMucmVnaW9uO1xuXG4gICAgLy8gQ3JlYXRlIEJ1Y2tldFxuICAgIC8vIFdhdmUgMTogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzIC0gUzMgYnVja2V0IHByb3Zpc2lvbmVkIGJ5IENyb3NzcGxhbmVcbiAgICBuZXcgQXBpT2JqZWN0KHRoaXMsICdidWNrZXQnLCB7XG4gICAgICBhcGlWZXJzaW9uOiAnczMuYXdzLnVwYm91bmQuaW8vdjFiZXRhMicsXG4gICAgICBraW5kOiAnQnVja2V0JyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6IGJ1Y2tldE5hbWUsXG4gICAgICAgIG5hbWVzcGFjZTogJ2Nyb3NzcGxhbmUtc3lzdGVtJyxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAndGVtcG8nLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc3RvcmFnZScsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzEnLFxuICAgICAgICAgICdjcm9zc3BsYW5lLmlvL2V4dGVybmFsLW5hbWUnOiBidWNrZXROYW1lLFxuICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdUZW1wbyB0cmFjZSBzdG9yYWdlJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIGRlbGV0aW9uUG9saWN5OiAnRGVsZXRlJyxcbiAgICAgICAgbWFuYWdlbWVudFBvbGljaWVzOiBbXG4gICAgICAgICAgJ09ic2VydmUnLFxuICAgICAgICAgICdDcmVhdGUnLFxuICAgICAgICAgICdEZWxldGUnLFxuICAgICAgICAgIC8vIFNraXAgVXBkYXRlIHRvIGF2b2lkIHRhZ2dpbmcgb3BlcmF0aW9ucyAobm90IHN1cHBvcnRlZCBieSBIZXR6bmVyIFMzKVxuICAgICAgICBdLFxuICAgICAgICBmb3JQcm92aWRlcjoge1xuICAgICAgICAgIHJlZ2lvbjogcmVnaW9uLCAvLyBQcm9kdWN0aW9uIHJlZ2lvbiAoZW5kcG9pbnQgZGV0ZXJtaW5lcyBhY3R1YWwgbG9jYXRpb24pXG4gICAgICAgIH0sXG4gICAgICAgIHByb3ZpZGVyQ29uZmlnUmVmOiB7XG4gICAgICAgICAgbmFtZTogY29uZmlnLmludGVncmF0aW9ucy5zM1Byb3ZpZGVyQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBCdWNrZXRWZXJzaW9uaW5nXG4gICAgbmV3IEFwaU9iamVjdCh0aGlzLCAndmVyc2lvbmluZycsIHtcbiAgICAgIGFwaVZlcnNpb246ICdzMy5hd3MudXBib3VuZC5pby92MWJldGEyJyxcbiAgICAgIGtpbmQ6ICdCdWNrZXRWZXJzaW9uaW5nJyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6ICd0ZW1wby10cmFjZXMtdmVyc2lvbmluZycsXG4gICAgICAgIG5hbWVzcGFjZTogJ2Nyb3NzcGxhbmUtc3lzdGVtJyxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAndGVtcG8nLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc3RvcmFnZScsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgZm9yUHJvdmlkZXI6IHtcbiAgICAgICAgICByZWdpb246IHJlZ2lvbixcbiAgICAgICAgICBidWNrZXRSZWY6IHtcbiAgICAgICAgICAgIG5hbWU6IGJ1Y2tldE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZXJzaW9uaW5nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgc3RhdHVzOiAnRW5hYmxlZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvdmlkZXJDb25maWdSZWY6IHtcbiAgICAgICAgICBuYW1lOiBjb25maWcuaW50ZWdyYXRpb25zLnMzUHJvdmlkZXJDb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIEJ1Y2tldExpZmVjeWNsZUNvbmZpZ3VyYXRpb25cbiAgICAvLyBMaWZlY3ljbGUgcG9saWN5OiBkZWxldGUgdHJhY2UgYmxvY2tzIG9sZGVyIHRoYW4gdGhlIGJ1ZmZlciB3aW5kb3cuXG4gICAgLy8gVGVtcG8ncyBvd24gY29tcGFjdG9yIGVuZm9yY2VzIHRlbXBvLnJldGVudGlvbjsgdGhpcyBpcyBhIHN0b3JhZ2Utc2lkZSBzYWZldHkgbmV0LlxuICAgIG5ldyBCdWNrZXRMaWZlY3ljbGVDb25maWd1cmF0aW9uKHRoaXMsICdsaWZlY3ljbGUnLCB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiAndGVtcG8tdHJhY2VzLWxpZmVjeWNsZScsXG4gICAgICAgIG5hbWVzcGFjZTogJ2Nyb3NzcGxhbmUtc3lzdGVtJyxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAndGVtcG8nLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc3RvcmFnZScsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgbWFuYWdlbWVudFBvbGljaWVzOiBbXG4gICAgICAgICAgQnVja2V0TGlmZWN5Y2xlQ29uZmlndXJhdGlvblNwZWNNYW5hZ2VtZW50UG9saWNpZXMuT0JTRVJWRSxcbiAgICAgICAgICBCdWNrZXRMaWZlY3ljbGVDb25maWd1cmF0aW9uU3BlY01hbmFnZW1lbnRQb2xpY2llcy5DUkVBVEUsXG4gICAgICAgICAgQnVja2V0TGlmZWN5Y2xlQ29uZmlndXJhdGlvblNwZWNNYW5hZ2VtZW50UG9saWNpZXMuREVMRVRFLFxuICAgICAgICBdLFxuICAgICAgICBmb3JQcm92aWRlcjoge1xuICAgICAgICAgIHJlZ2lvbjogcmVnaW9uLFxuICAgICAgICAgIGJ1Y2tldFJlZjoge1xuICAgICAgICAgICAgbmFtZTogYnVja2V0TmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1bGU6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdkZWxldGUtb2xkLXRyYWNlcycsXG4gICAgICAgICAgICAgIHN0YXR1czogJ0VuYWJsZWQnLFxuICAgICAgICAgICAgICBleHBpcmF0aW9uOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGF5czogMzAsIC8vIHN0b3JhZ2Utc2lkZSBzYWZldHkgbmV0IGJleW9uZCBUZW1wbydzIGJsb2NrIHJldGVudGlvblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHByb3ZpZGVyQ29uZmlnUmVmOiB7XG4gICAgICAgICAgbmFtZTogY29uZmlnLmludGVncmF0aW9ucy5zM1Byb3ZpZGVyQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { Construct } from 'constructs';
2
+ import { MonitoringConfig } from '../types';
3
+ export interface TempoS3CredentialsProps {
4
+ namespace: string;
5
+ config: MonitoringConfig;
6
+ }
7
+ /**
8
+ * Creates ExternalSecret for Tempo S3 credentials.
9
+ *
10
+ * Replicates the S3 credentials (same store/key as Loki and Thanos) into the
11
+ * monitoring namespace for Tempo's object storage.
12
+ *
13
+ * Prerequisites:
14
+ * - External Secrets Operator installed
15
+ * - ClusterSecretStore named by config.integrations.s3SecretStore exists
16
+ * - Source secret addressed by config.integrations.s3CredentialsKey exists in that store
17
+ *
18
+ * Generated Secret:
19
+ * - Name: tempo-s3-credentials
20
+ * - Keys: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
21
+ *
22
+ * Sync Wave: 1 (external dependencies - must exist before Tempo starts)
23
+ */
24
+ export declare class TempoS3CredentialsConstruct extends Construct {
25
+ readonly secretName = "tempo-s3-credentials";
26
+ constructor(scope: Construct, id: string, props: TempoS3CredentialsProps);
27
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TempoS3CredentialsConstruct = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const external_secrets_io_1 = require("../imports/external-secrets.io");
6
+ /**
7
+ * Creates ExternalSecret for Tempo S3 credentials.
8
+ *
9
+ * Replicates the S3 credentials (same store/key as Loki and Thanos) into the
10
+ * monitoring namespace for Tempo's object storage.
11
+ *
12
+ * Prerequisites:
13
+ * - External Secrets Operator installed
14
+ * - ClusterSecretStore named by config.integrations.s3SecretStore exists
15
+ * - Source secret addressed by config.integrations.s3CredentialsKey exists in that store
16
+ *
17
+ * Generated Secret:
18
+ * - Name: tempo-s3-credentials
19
+ * - Keys: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
20
+ *
21
+ * Sync Wave: 1 (external dependencies - must exist before Tempo starts)
22
+ */
23
+ class TempoS3CredentialsConstruct extends constructs_1.Construct {
24
+ constructor(scope, id, props) {
25
+ super(scope, id);
26
+ this.secretName = 'tempo-s3-credentials';
27
+ const { namespace, config } = props;
28
+ // Create ExternalSecret that replicates S3 credentials
29
+ // Wave 1: External Dependencies - credentials must exist before Tempo
30
+ new external_secrets_io_1.ExternalSecret(this, 'tempo-s3-external-secret', {
31
+ metadata: {
32
+ name: 'tempo-s3-credentials-es',
33
+ namespace: namespace,
34
+ labels: {
35
+ 'app.kubernetes.io/name': 'tempo',
36
+ 'app.kubernetes.io/component': 's3-credentials',
37
+ 'app.kubernetes.io/managed-by': 'cdk8s',
38
+ 'app.kubernetes.io/part-of': 'monitoring',
39
+ },
40
+ annotations: {
41
+ 'argocd.argoproj.io/sync-wave': '1',
42
+ },
43
+ },
44
+ spec: {
45
+ refreshInterval: '1h0m0s',
46
+ secretStoreRef: {
47
+ name: config.integrations.s3SecretStore,
48
+ kind: external_secrets_io_1.ExternalSecretSpecSecretStoreRefKind.CLUSTER_SECRET_STORE,
49
+ },
50
+ target: {
51
+ name: this.secretName,
52
+ creationPolicy: external_secrets_io_1.ExternalSecretSpecTargetCreationPolicy.OWNER,
53
+ },
54
+ dataFrom: [
55
+ {
56
+ extract: {
57
+ key: config.integrations.s3CredentialsKey,
58
+ },
59
+ },
60
+ ],
61
+ },
62
+ });
63
+ }
64
+ }
65
+ exports.TempoS3CredentialsConstruct = TempoS3CredentialsConstruct;
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8tczMtY3JlZGVudGlhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy90ZW1wby1zMy1jcmVkZW50aWFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsd0VBSXdDO0FBUXhDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxzQkFBUztJQUd4RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFISCxlQUFVLEdBQUcsc0JBQXNCLENBQUM7UUFLbEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFcEMsdURBQXVEO1FBQ3ZELHNFQUFzRTtRQUN0RSxJQUFJLG9DQUFjLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ25ELFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUseUJBQXlCO2dCQUMvQixTQUFTLEVBQUUsU0FBUztnQkFDcEIsTUFBTSxFQUFFO29CQUNOLHdCQUF3QixFQUFFLE9BQU87b0JBQ2pDLDZCQUE2QixFQUFFLGdCQUFnQjtvQkFDL0MsOEJBQThCLEVBQUUsT0FBTztvQkFDdkMsMkJBQTJCLEVBQUUsWUFBWTtpQkFDMUM7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLDhCQUE4QixFQUFFLEdBQUc7aUJBQ3BDO2FBQ0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhO29CQUN2QyxJQUFJLEVBQUUsMERBQW9DLENBQUMsb0JBQW9CO2lCQUNoRTtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO29CQUNyQixjQUFjLEVBQUUsNERBQXNDLENBQUMsS0FBSztpQkFDN0Q7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSO3dCQUNFLE9BQU8sRUFBRTs0QkFDUCxHQUFHLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7eUJBQzFDO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE1Q0Qsa0VBNENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlcm5hbFNlY3JldCxcbiAgRXh0ZXJuYWxTZWNyZXRTcGVjVGFyZ2V0Q3JlYXRpb25Qb2xpY3ksXG4gIEV4dGVybmFsU2VjcmV0U3BlY1NlY3JldFN0b3JlUmVmS2luZCxcbn0gZnJvbSAnLi4vaW1wb3J0cy9leHRlcm5hbC1zZWNyZXRzLmlvJztcbmltcG9ydCB7IE1vbml0b3JpbmdDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcG9TM0NyZWRlbnRpYWxzUHJvcHMge1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgY29uZmlnOiBNb25pdG9yaW5nQ29uZmlnO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgRXh0ZXJuYWxTZWNyZXQgZm9yIFRlbXBvIFMzIGNyZWRlbnRpYWxzLlxuICpcbiAqIFJlcGxpY2F0ZXMgdGhlIFMzIGNyZWRlbnRpYWxzIChzYW1lIHN0b3JlL2tleSBhcyBMb2tpIGFuZCBUaGFub3MpIGludG8gdGhlXG4gKiBtb25pdG9yaW5nIG5hbWVzcGFjZSBmb3IgVGVtcG8ncyBvYmplY3Qgc3RvcmFnZS5cbiAqXG4gKiBQcmVyZXF1aXNpdGVzOlxuICogLSBFeHRlcm5hbCBTZWNyZXRzIE9wZXJhdG9yIGluc3RhbGxlZFxuICogLSBDbHVzdGVyU2VjcmV0U3RvcmUgbmFtZWQgYnkgY29uZmlnLmludGVncmF0aW9ucy5zM1NlY3JldFN0b3JlIGV4aXN0c1xuICogLSBTb3VyY2Ugc2VjcmV0IGFkZHJlc3NlZCBieSBjb25maWcuaW50ZWdyYXRpb25zLnMzQ3JlZGVudGlhbHNLZXkgZXhpc3RzIGluIHRoYXQgc3RvcmVcbiAqXG4gKiBHZW5lcmF0ZWQgU2VjcmV0OlxuICogLSBOYW1lOiB0ZW1wby1zMy1jcmVkZW50aWFsc1xuICogLSBLZXlzOiBBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXG4gKlxuICogU3luYyBXYXZlOiAxIChleHRlcm5hbCBkZXBlbmRlbmNpZXMgLSBtdXN0IGV4aXN0IGJlZm9yZSBUZW1wbyBzdGFydHMpXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wb1MzQ3JlZGVudGlhbHNDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0TmFtZSA9ICd0ZW1wby1zMy1jcmVkZW50aWFscyc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFRlbXBvUzNDcmVkZW50aWFsc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcgfSA9IHByb3BzO1xuXG4gICAgLy8gQ3JlYXRlIEV4dGVybmFsU2VjcmV0IHRoYXQgcmVwbGljYXRlcyBTMyBjcmVkZW50aWFsc1xuICAgIC8vIFdhdmUgMTogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzIC0gY3JlZGVudGlhbHMgbXVzdCBleGlzdCBiZWZvcmUgVGVtcG9cbiAgICBuZXcgRXh0ZXJuYWxTZWNyZXQodGhpcywgJ3RlbXBvLXMzLWV4dGVybmFsLXNlY3JldCcsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6ICd0ZW1wby1zMy1jcmVkZW50aWFscy1lcycsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICd0ZW1wbycsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdzMy1jcmVkZW50aWFscycsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgcmVmcmVzaEludGVydmFsOiAnMWgwbTBzJyxcbiAgICAgICAgc2VjcmV0U3RvcmVSZWY6IHtcbiAgICAgICAgICBuYW1lOiBjb25maWcuaW50ZWdyYXRpb25zLnMzU2VjcmV0U3RvcmUsXG4gICAgICAgICAga2luZDogRXh0ZXJuYWxTZWNyZXRTcGVjU2VjcmV0U3RvcmVSZWZLaW5kLkNMVVNURVJfU0VDUkVUX1NUT1JFLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLnNlY3JldE5hbWUsXG4gICAgICAgICAgY3JlYXRpb25Qb2xpY3k6IEV4dGVybmFsU2VjcmV0U3BlY1RhcmdldENyZWF0aW9uUG9saWN5Lk9XTkVSLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhRnJvbTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4dHJhY3Q6IHtcbiAgICAgICAgICAgICAga2V5OiBjb25maWcuaW50ZWdyYXRpb25zLnMzQ3JlZGVudGlhbHNLZXksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Construct } from 'constructs';
2
+ import { MonitoringConfig } from '../types';
3
+ export interface TempoProps {
4
+ namespace: string;
5
+ config: MonitoringConfig;
6
+ s3CredentialsSecretName: string;
7
+ }
8
+ /**
9
+ * Creates the Grafana Tempo (monolithic) HelmChart for trace storage on S3.
10
+ *
11
+ * Single-binary Tempo backed by object storage, exposing an OTLP receiver that
12
+ * the Alloy traces gateway forwards to. Block retention is enforced by Tempo's
13
+ * compactor (config.tempo.retention).
14
+ *
15
+ * Sync Wave: 3 (advanced services, after core stack).
16
+ */
17
+ export declare class TempoConstruct extends Construct {
18
+ constructor(scope: Construct, id: string, props: TempoProps);
19
+ private generateHelmValues;
20
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TempoConstruct = void 0;
4
+ const cdk8s_1 = require("cdk8s");
5
+ const constructs_1 = require("constructs");
6
+ /**
7
+ * Creates the Grafana Tempo (monolithic) HelmChart for trace storage on S3.
8
+ *
9
+ * Single-binary Tempo backed by object storage, exposing an OTLP receiver that
10
+ * the Alloy traces gateway forwards to. Block retention is enforced by Tempo's
11
+ * compactor (config.tempo.retention).
12
+ *
13
+ * Sync Wave: 3 (advanced services, after core stack).
14
+ */
15
+ class TempoConstruct extends constructs_1.Construct {
16
+ constructor(scope, id, props) {
17
+ super(scope, id);
18
+ const { namespace, config, s3CredentialsSecretName } = props;
19
+ new cdk8s_1.ApiObject(this, 'tempo', {
20
+ apiVersion: 'helm.cattle.io/v1',
21
+ kind: 'HelmChart',
22
+ metadata: {
23
+ name: 'tempo',
24
+ namespace: namespace,
25
+ labels: {
26
+ 'app.kubernetes.io/name': 'tempo',
27
+ 'app.kubernetes.io/component': 'tracing',
28
+ 'app.kubernetes.io/managed-by': 'cdk8s',
29
+ 'app.kubernetes.io/part-of': 'monitoring',
30
+ },
31
+ annotations: {
32
+ 'argocd.argoproj.io/sync-wave': '3',
33
+ },
34
+ },
35
+ spec: {
36
+ repo: 'https://grafana.github.io/helm-charts',
37
+ chart: 'tempo',
38
+ version: config.versions.tempo === 'latest' ? undefined : config.versions.tempo,
39
+ targetNamespace: namespace,
40
+ valuesContent: this.generateHelmValues(config, s3CredentialsSecretName),
41
+ },
42
+ });
43
+ }
44
+ generateHelmValues(config, s3CredentialsSecretName) {
45
+ return `tempo:
46
+ retention: ${config.tempo.retention}
47
+ storage:
48
+ trace:
49
+ backend: s3
50
+ s3:
51
+ bucket: ${config.tempo.bucket}
52
+ endpoint: ${config.s3.endpointNoProtocol}
53
+ region: ${config.s3.region}
54
+ forcepathstyle: false
55
+ access_key: \${AWS_ACCESS_KEY_ID}
56
+ secret_key: \${AWS_SECRET_ACCESS_KEY}
57
+ receivers:
58
+ otlp:
59
+ protocols:
60
+ grpc:
61
+ endpoint: 0.0.0.0:4317
62
+ http:
63
+ endpoint: 0.0.0.0:4318
64
+ tempoQuery:
65
+ enabled: false
66
+ replicas: ${config.replicas.tempo}
67
+ extraArgs:
68
+ - -config.expand-env=true
69
+ extraEnv:
70
+ - name: AWS_ACCESS_KEY_ID
71
+ valueFrom:
72
+ secretKeyRef:
73
+ name: ${s3CredentialsSecretName}
74
+ key: AWS_ACCESS_KEY_ID
75
+ - name: AWS_SECRET_ACCESS_KEY
76
+ valueFrom:
77
+ secretKeyRef:
78
+ name: ${s3CredentialsSecretName}
79
+ key: AWS_SECRET_ACCESS_KEY
80
+ persistence:
81
+ enabled: true
82
+ storageClassName: longhorn
83
+ size: ${config.storage.tempo}
84
+ resources:
85
+ requests:
86
+ cpu: ${config.resources.tempo.requests.cpu}
87
+ memory: ${config.resources.tempo.requests.memory}
88
+ limits:
89
+ cpu: ${config.resources.tempo.limits.cpu}
90
+ memory: ${config.resources.tempo.limits.memory}
91
+ `;
92
+ }
93
+ }
94
+ exports.TempoConstruct = TempoConstruct;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy90ZW1wby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBa0M7QUFDbEMsMkNBQXVDO0FBU3ZDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFDM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQjtRQUN6RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRTdELElBQUksaUJBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzNCLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLFdBQVc7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxPQUFPO2dCQUNiLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsT0FBTztvQkFDakMsNkJBQTZCLEVBQUUsU0FBUztvQkFDeEMsOEJBQThCLEVBQUUsT0FBTztvQkFDdkMsMkJBQTJCLEVBQUUsWUFBWTtpQkFDMUM7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLDhCQUE4QixFQUFFLEdBQUc7aUJBQ3BDO2FBQ0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUs7Z0JBQy9FLGVBQWUsRUFBRSxTQUFTO2dCQUMxQixhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQzthQUN4RTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUF3QixFQUFFLHVCQUErQjtRQUNsRixPQUFPO2VBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTOzs7OztrQkFLbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLGtCQUFrQjtrQkFDOUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNOzs7Ozs7Ozs7Ozs7O1lBYXRCLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSzs7Ozs7OztnQkFPakIsdUJBQXVCOzs7OztnQkFLdkIsdUJBQXVCOzs7OztVQUs3QixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUs7OztXQUduQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRztjQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTs7V0FFekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUc7Y0FDOUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07Q0FDakQsQ0FBQztJQUNBLENBQUM7Q0FDRjtBQWpGRCx3Q0FpRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1vbml0b3JpbmdDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcG9Qcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG4gIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgR3JhZmFuYSBUZW1wbyAobW9ub2xpdGhpYykgSGVsbUNoYXJ0IGZvciB0cmFjZSBzdG9yYWdlIG9uIFMzLlxuICpcbiAqIFNpbmdsZS1iaW5hcnkgVGVtcG8gYmFja2VkIGJ5IG9iamVjdCBzdG9yYWdlLCBleHBvc2luZyBhbiBPVExQIHJlY2VpdmVyIHRoYXRcbiAqIHRoZSBBbGxveSB0cmFjZXMgZ2F0ZXdheSBmb3J3YXJkcyB0by4gQmxvY2sgcmV0ZW50aW9uIGlzIGVuZm9yY2VkIGJ5IFRlbXBvJ3NcbiAqIGNvbXBhY3RvciAoY29uZmlnLnRlbXBvLnJldGVudGlvbikuXG4gKlxuICogU3luYyBXYXZlOiAzIChhZHZhbmNlZCBzZXJ2aWNlcywgYWZ0ZXIgY29yZSBzdGFjaykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wb0NvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUZW1wb1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcsIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lIH0gPSBwcm9wcztcblxuICAgIG5ldyBBcGlPYmplY3QodGhpcywgJ3RlbXBvJywge1xuICAgICAgYXBpVmVyc2lvbjogJ2hlbG0uY2F0dGxlLmlvL3YxJyxcbiAgICAgIGtpbmQ6ICdIZWxtQ2hhcnQnLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbmFtZTogJ3RlbXBvJyxcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3RlbXBvJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ3RyYWNpbmcnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5JzogJ2NkazhzJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZic6ICdtb25pdG9yaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAnYXJnb2NkLmFyZ29wcm9qLmlvL3N5bmMtd2F2ZSc6ICczJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIHJlcG86ICdodHRwczovL2dyYWZhbmEuZ2l0aHViLmlvL2hlbG0tY2hhcnRzJyxcbiAgICAgICAgY2hhcnQ6ICd0ZW1wbycsXG4gICAgICAgIHZlcnNpb246IGNvbmZpZy52ZXJzaW9ucy50ZW1wbyA9PT0gJ2xhdGVzdCcgPyB1bmRlZmluZWQgOiBjb25maWcudmVyc2lvbnMudGVtcG8sXG4gICAgICAgIHRhcmdldE5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB2YWx1ZXNDb250ZW50OiB0aGlzLmdlbmVyYXRlSGVsbVZhbHVlcyhjb25maWcsIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlSGVsbVZhbHVlcyhjb25maWc6IE1vbml0b3JpbmdDb25maWcsIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdGVtcG86XG4gIHJldGVudGlvbjogJHtjb25maWcudGVtcG8ucmV0ZW50aW9ufVxuICBzdG9yYWdlOlxuICAgIHRyYWNlOlxuICAgICAgYmFja2VuZDogczNcbiAgICAgIHMzOlxuICAgICAgICBidWNrZXQ6ICR7Y29uZmlnLnRlbXBvLmJ1Y2tldH1cbiAgICAgICAgZW5kcG9pbnQ6ICR7Y29uZmlnLnMzLmVuZHBvaW50Tm9Qcm90b2NvbH1cbiAgICAgICAgcmVnaW9uOiAke2NvbmZpZy5zMy5yZWdpb259XG4gICAgICAgIGZvcmNlcGF0aHN0eWxlOiBmYWxzZVxuICAgICAgICBhY2Nlc3Nfa2V5OiBcXCR7QVdTX0FDQ0VTU19LRVlfSUR9XG4gICAgICAgIHNlY3JldF9rZXk6IFxcJHtBV1NfU0VDUkVUX0FDQ0VTU19LRVl9XG4gIHJlY2VpdmVyczpcbiAgICBvdGxwOlxuICAgICAgcHJvdG9jb2xzOlxuICAgICAgICBncnBjOlxuICAgICAgICAgIGVuZHBvaW50OiAwLjAuMC4wOjQzMTdcbiAgICAgICAgaHR0cDpcbiAgICAgICAgICBlbmRwb2ludDogMC4wLjAuMDo0MzE4XG50ZW1wb1F1ZXJ5OlxuICBlbmFibGVkOiBmYWxzZVxucmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLnRlbXBvfVxuZXh0cmFBcmdzOlxuICAtIC1jb25maWcuZXhwYW5kLWVudj10cnVlXG5leHRyYUVudjpcbiAgLSBuYW1lOiBBV1NfQUNDRVNTX0tFWV9JRFxuICAgIHZhbHVlRnJvbTpcbiAgICAgIHNlY3JldEtleVJlZjpcbiAgICAgICAgbmFtZTogJHtzM0NyZWRlbnRpYWxzU2VjcmV0TmFtZX1cbiAgICAgICAga2V5OiBBV1NfQUNDRVNTX0tFWV9JRFxuICAtIG5hbWU6IEFXU19TRUNSRVRfQUNDRVNTX0tFWVxuICAgIHZhbHVlRnJvbTpcbiAgICAgIHNlY3JldEtleVJlZjpcbiAgICAgICAgbmFtZTogJHtzM0NyZWRlbnRpYWxzU2VjcmV0TmFtZX1cbiAgICAgICAga2V5OiBBV1NfU0VDUkVUX0FDQ0VTU19LRVlcbnBlcnNpc3RlbmNlOlxuICBlbmFibGVkOiB0cnVlXG4gIHN0b3JhZ2VDbGFzc05hbWU6IGxvbmdob3JuXG4gIHNpemU6ICR7Y29uZmlnLnN0b3JhZ2UudGVtcG99XG5yZXNvdXJjZXM6XG4gIHJlcXVlc3RzOlxuICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLnRlbXBvLnJlcXVlc3RzLmNwdX1cbiAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy50ZW1wby5yZXF1ZXN0cy5tZW1vcnl9XG4gIGxpbWl0czpcbiAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy50ZW1wby5saW1pdHMuY3B1fVxuICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLnRlbXBvLmxpbWl0cy5tZW1vcnl9XG5gO1xuICB9XG59XG4iXX0=
@@ -14,6 +14,7 @@ exports.DEFAULT_CONFIG = {
14
14
  loki: '7.0.0',
15
15
  alloy: '1.10.0',
16
16
  thanos: 'v0.41.0',
17
+ tempo: '1.24.4', // grafana/tempo chart (Tempo app 2.9.0)
17
18
  },
18
19
  retention: {
19
20
  prometheus: '2d',
@@ -30,6 +31,7 @@ exports.DEFAULT_CONFIG = {
30
31
  lokiWrite: '3Gi',
31
32
  thanosStore: '10Gi',
32
33
  thanosCompactor: '20Gi',
34
+ tempo: '5Gi',
33
35
  },
34
36
  replicas: {
35
37
  prometheus: 2,
@@ -40,6 +42,7 @@ exports.DEFAULT_CONFIG = {
40
42
  lokiWrite: 2,
41
43
  thanosQuery: 2,
42
44
  thanosStore: 2,
45
+ tempo: 1,
43
46
  },
44
47
  resources: {
45
48
  prometheus: { requests: { cpu: '100m', memory: '1500Mi' }, limits: { cpu: '2', memory: '3000Mi' } },
@@ -55,6 +58,14 @@ exports.DEFAULT_CONFIG = {
55
58
  thanosCompactor: { requests: { cpu: '500m', memory: '2Gi' }, limits: { cpu: '2000m', memory: '4Gi' } },
56
59
  configReloader: { requests: { cpu: '10m', memory: '50Mi' }, limits: { cpu: '50m', memory: '100Mi' } },
57
60
  thanosSidecar: { requests: { cpu: '10m', memory: '50Mi' }, limits: { cpu: '100m', memory: '100Mi' } },
61
+ tempo: { requests: { cpu: '100m', memory: '256Mi' }, limits: { cpu: '1', memory: '1Gi' } },
62
+ alloyTraces: { requests: { cpu: '100m', memory: '256Mi' }, limits: { cpu: '500m', memory: '512Mi' } },
63
+ },
64
+ tempo: {
65
+ enabled: false,
66
+ bucket: '',
67
+ retention: '336h',
68
+ tailSampling: { latencyThresholdMs: 1000, probabilisticPercent: 10 },
58
69
  },
59
70
  };
60
71
  /**
@@ -62,6 +73,10 @@ exports.DEFAULT_CONFIG = {
62
73
  * DEFAULT_CONFIG. Required cluster values are passed through verbatim.
63
74
  */
64
75
  function mergeConfig(input) {
76
+ const tempo = (0, deepmerge_ts_1.deepmerge)(exports.DEFAULT_CONFIG.tempo, input.tempo ?? {});
77
+ if (tempo.enabled && !tempo.bucket) {
78
+ throw new Error('tempo.bucket is required when tempo.enabled is true');
79
+ }
65
80
  return {
66
81
  namespace: input.namespace,
67
82
  domains: input.domains,
@@ -73,6 +88,7 @@ function mergeConfig(input) {
73
88
  storage: (0, deepmerge_ts_1.deepmerge)(exports.DEFAULT_CONFIG.storage, input.storage ?? {}),
74
89
  replicas: (0, deepmerge_ts_1.deepmerge)(exports.DEFAULT_CONFIG.replicas, input.replicas ?? {}),
75
90
  resources: (0, deepmerge_ts_1.deepmerge)(exports.DEFAULT_CONFIG.resources, input.resources ?? {}),
91
+ tempo,
76
92
  };
77
93
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUVBLGtDQWFDO0FBOUVELCtDQUF5QztBQU16Qzs7OztHQUlHO0FBQ1UsUUFBQSxjQUFjLEdBQXNCO0lBQy9DLFFBQVEsRUFBRTtRQUNSLGVBQWUsRUFBRSxRQUFRO1FBQ3pCLElBQUksRUFBRSxPQUFPO1FBQ2IsS0FBSyxFQUFFLFFBQVE7UUFDZixNQUFNLEVBQUUsU0FBUztLQUNsQjtJQUNELFNBQVMsRUFBRTtRQUNULFVBQVUsRUFBRSxJQUFJO1FBQ2hCLGVBQWUsRUFBRSxFQUFFO1FBQ25CLGNBQWMsRUFBRSxHQUFHO1FBQ25CLGNBQWMsRUFBRSxHQUFHO1FBQ25CLElBQUksRUFBRSxNQUFNO0tBQ2I7SUFDRCxPQUFPLEVBQUU7UUFDUCxVQUFVLEVBQUUsTUFBTTtRQUNsQixPQUFPLEVBQUUsS0FBSztRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxNQUFNO1FBQ25CLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFdBQVcsRUFBRSxNQUFNO1FBQ25CLGVBQWUsRUFBRSxNQUFNO0tBQ3hCO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsVUFBVSxFQUFFLENBQUM7UUFDYixZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1YsV0FBVyxFQUFFLENBQUM7UUFDZCxRQUFRLEVBQUUsQ0FBQztRQUNYLFNBQVMsRUFBRSxDQUFDO1FBQ1osV0FBVyxFQUFFLENBQUM7UUFDZCxXQUFXLEVBQUUsQ0FBQztLQUNmO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDbkcsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUYsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDckcsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDckcsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDbEcsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUYsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDcEcsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDL0YsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDcEcsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDbEcsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdEcsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDckcsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7S0FDdEc7Q0FDRixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQTRCO0lBQ3RELE9BQU87UUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNaLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7UUFDaEMsUUFBUSxFQUFFLElBQUEsd0JBQVMsRUFBQyxzQkFBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBa0I7UUFDbkYsU0FBUyxFQUFFLElBQUEsd0JBQVMsRUFBQyxzQkFBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBb0I7UUFDeEYsT0FBTyxFQUFFLElBQUEsd0JBQVMsRUFBQyxzQkFBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBa0I7UUFDaEYsUUFBUSxFQUFFLElBQUEsd0JBQVMsRUFBQyxzQkFBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBa0I7UUFDbkYsU0FBUyxFQUFFLElBQUEsd0JBQVMsRUFBQyxzQkFBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBbUI7S0FDeEYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdkZWVwbWVyZ2UtdHMnO1xuaW1wb3J0IHtcbiAgRGVmYXVsdGFibGVDb25maWcsIE1vbml0b3JpbmdDb25maWcsIE1vbml0b3JpbmdDb25maWdJbnB1dCxcbiAgVmVyc2lvbkNvbmZpZywgUmV0ZW50aW9uQ29uZmlnLCBTdG9yYWdlQ29uZmlnLCBSZXBsaWNhQ29uZmlnLCBSZXNvdXJjZUNvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUGFja2FnZS1zaGlwcGVkIGRlZmF1bHRzIGZvciBldmVyeXRoaW5nIHRoYXQgaGFzIGEgc2Vuc2libGUgdW5pdmVyc2FsIHZhbHVlLlxuICogVmFsdWVzIG1pcnJvciB0aGUga3VwNnMgcHJvZHVjdGlvbiBjb25maWcgYXQgdGhlIHRpbWUgb2YgZXh0cmFjdGlvbjsgaW50ZWdyYXRpb25cbiAqIGNoYXJ0cyBvdmVycmlkZSBvbmx5IHdoYXQgdGhleSBuZWVkIHZpYSB7QGxpbmsgbWVyZ2VDb25maWd9LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05GSUc6IERlZmF1bHRhYmxlQ29uZmlnID0ge1xuICB2ZXJzaW9uczoge1xuICAgIHByb21ldGhldXNTdGFjazogJzg3LjAuMCcsXG4gICAgbG9raTogJzcuMC4wJyxcbiAgICBhbGxveTogJzEuMTAuMCcsXG4gICAgdGhhbm9zOiAndjAuNDEuMCcsXG4gIH0sXG4gIHJldGVudGlvbjoge1xuICAgIHByb21ldGhldXM6ICcyZCcsXG4gICAgcHJvbWV0aGV1c1MzUmF3OiAzMCxcbiAgICBwcm9tZXRoZXVzUzM1bTogMTgwLFxuICAgIHByb21ldGhldXNTMzFoOiA3MzAsXG4gICAgbG9raTogJzc0NGgnLFxuICB9LFxuICBzdG9yYWdlOiB7XG4gICAgcHJvbWV0aGV1czogJzE1R2knLFxuICAgIGdyYWZhbmE6ICc1R2knLFxuICAgIGFsZXJ0bWFuYWdlcjogJzFHaScsXG4gICAgbG9raUJhY2tlbmQ6ICcxMEdpJyxcbiAgICBsb2tpV3JpdGU6ICczR2knLFxuICAgIHRoYW5vc1N0b3JlOiAnMTBHaScsXG4gICAgdGhhbm9zQ29tcGFjdG9yOiAnMjBHaScsXG4gIH0sXG4gIHJlcGxpY2FzOiB7XG4gICAgcHJvbWV0aGV1czogMixcbiAgICBhbGVydG1hbmFnZXI6IDIsXG4gICAgZ3JhZmFuYTogMSxcbiAgICBsb2tpQmFja2VuZDogMixcbiAgICBsb2tpUmVhZDogMixcbiAgICBsb2tpV3JpdGU6IDIsXG4gICAgdGhhbm9zUXVlcnk6IDIsXG4gICAgdGhhbm9zU3RvcmU6IDIsXG4gIH0sXG4gIHJlc291cmNlczoge1xuICAgIHByb21ldGhldXM6IHsgcmVxdWVzdHM6IHsgY3B1OiAnMTAwbScsIG1lbW9yeTogJzE1MDBNaScgfSwgbGltaXRzOiB7IGNwdTogJzInLCBtZW1vcnk6ICczMDAwTWknIH0gfSxcbiAgICBncmFmYW5hOiB7IHJlcXVlc3RzOiB7IGNwdTogJzUwbScsIG1lbW9yeTogJzUxMk1pJyB9LCBsaW1pdHM6IHsgY3B1OiAnMjAwbScsIG1lbW9yeTogJzFHaScgfSB9LFxuICAgIGFsZXJ0bWFuYWdlcjogeyByZXF1ZXN0czogeyBjcHU6ICcyNW0nLCBtZW1vcnk6ICcxMDBNaScgfSwgbGltaXRzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICcyMDBNaScgfSB9LFxuICAgIGxva2lCYWNrZW5kOiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICcyNTZNaScgfSwgbGltaXRzOiB7IGNwdTogJzUwMG0nLCBtZW1vcnk6ICc1MTJNaScgfSB9LFxuICAgIGxva2lSZWFkOiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICcyNTZNaScgfSwgbGltaXRzOiB7IGNwdTogJzUwMG0nLCBtZW1vcnk6ICc1MTJNaScgfSB9LFxuICAgIGxva2lXcml0ZTogeyByZXF1ZXN0czogeyBjcHU6ICcxMDBtJywgbWVtb3J5OiAnNTEyTWknIH0sIGxpbWl0czogeyBjcHU6ICcxJywgbWVtb3J5OiAnMUdpJyB9IH0sXG4gICAgbG9raUdhdGV3YXk6IHsgcmVxdWVzdHM6IHsgY3B1OiAnNTBtJywgbWVtb3J5OiAnMTI4TWknIH0sIGxpbWl0czogeyBjcHU6ICcyMDBtJywgbWVtb3J5OiAnMjU2TWknIH0gfSxcbiAgICBhbGxveTogeyByZXF1ZXN0czogeyBjcHU6ICcxMDBtJywgbWVtb3J5OiAnMTI4TWknIH0sIGxpbWl0czogeyBjcHU6ICcyMDBtJywgbWVtb3J5OiAnMjU2TWknIH0gfSxcbiAgICB0aGFub3NRdWVyeTogeyByZXF1ZXN0czogeyBjcHU6ICcyMDBtJywgbWVtb3J5OiAnNTEyTWknIH0sIGxpbWl0czogeyBjcHU6ICcxMDAwbScsIG1lbW9yeTogJzFHaScgfSB9LFxuICAgIHRoYW5vc1N0b3JlOiB7IHJlcXVlc3RzOiB7IGNwdTogJzIwMG0nLCBtZW1vcnk6ICcxR2knIH0sIGxpbWl0czogeyBjcHU6ICcxMDAwbScsIG1lbW9yeTogJzJHaScgfSB9LFxuICAgIHRoYW5vc0NvbXBhY3RvcjogeyByZXF1ZXN0czogeyBjcHU6ICc1MDBtJywgbWVtb3J5OiAnMkdpJyB9LCBsaW1pdHM6IHsgY3B1OiAnMjAwMG0nLCBtZW1vcnk6ICc0R2knIH0gfSxcbiAgICBjb25maWdSZWxvYWRlcjogeyByZXF1ZXN0czogeyBjcHU6ICcxMG0nLCBtZW1vcnk6ICc1ME1pJyB9LCBsaW1pdHM6IHsgY3B1OiAnNTBtJywgbWVtb3J5OiAnMTAwTWknIH0gfSxcbiAgICB0aGFub3NTaWRlY2FyOiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwbScsIG1lbW9yeTogJzUwTWknIH0sIGxpbWl0czogeyBjcHU6ICcxMDBtJywgbWVtb3J5OiAnMTAwTWknIH0gfSxcbiAgfSxcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBhIGZ1bGwgTW9uaXRvcmluZ0NvbmZpZyBieSBkZWVwLW1lcmdpbmcgdGhlIGNhbGxlcidzIG92ZXJyaWRlcyBvdmVyXG4gKiBERUZBVUxUX0NPTkZJRy4gUmVxdWlyZWQgY2x1c3RlciB2YWx1ZXMgYXJlIHBhc3NlZCB0aHJvdWdoIHZlcmJhdGltLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDb25maWcoaW5wdXQ6IE1vbml0b3JpbmdDb25maWdJbnB1dCk6IE1vbml0b3JpbmdDb25maWcge1xuICByZXR1cm4ge1xuICAgIG5hbWVzcGFjZTogaW5wdXQubmFtZXNwYWNlLFxuICAgIGRvbWFpbnM6IGlucHV0LmRvbWFpbnMsXG4gICAgczM6IGlucHV0LnMzLFxuICAgIHNtdHA6IGlucHV0LnNtdHAsXG4gICAgaW50ZWdyYXRpb25zOiBpbnB1dC5pbnRlZ3JhdGlvbnMsXG4gICAgdmVyc2lvbnM6IGRlZXBtZXJnZShERUZBVUxUX0NPTkZJRy52ZXJzaW9ucywgaW5wdXQudmVyc2lvbnMgPz8ge30pIGFzIFZlcnNpb25Db25maWcsXG4gICAgcmV0ZW50aW9uOiBkZWVwbWVyZ2UoREVGQVVMVF9DT05GSUcucmV0ZW50aW9uLCBpbnB1dC5yZXRlbnRpb24gPz8ge30pIGFzIFJldGVudGlvbkNvbmZpZyxcbiAgICBzdG9yYWdlOiBkZWVwbWVyZ2UoREVGQVVMVF9DT05GSUcuc3RvcmFnZSwgaW5wdXQuc3RvcmFnZSA/PyB7fSkgYXMgU3RvcmFnZUNvbmZpZyxcbiAgICByZXBsaWNhczogZGVlcG1lcmdlKERFRkFVTFRfQ09ORklHLnJlcGxpY2FzLCBpbnB1dC5yZXBsaWNhcyA/PyB7fSkgYXMgUmVwbGljYUNvbmZpZyxcbiAgICByZXNvdXJjZXM6IGRlZXBtZXJnZShERUZBVUxUX0NPTkZJRy5yZXNvdXJjZXMsIGlucHV0LnJlc291cmNlcyA/PyB7fSkgYXMgUmVzb3VyY2VDb25maWcsXG4gIH07XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNEVBLGtDQWtCQztBQTlGRCwrQ0FBeUM7QUFNekM7Ozs7R0FJRztBQUNVLFFBQUEsY0FBYyxHQUFzQjtJQUMvQyxRQUFRLEVBQUU7UUFDUixlQUFlLEVBQUUsUUFBUTtRQUN6QixJQUFJLEVBQUUsT0FBTztRQUNiLEtBQUssRUFBRSxRQUFRO1FBQ2YsTUFBTSxFQUFFLFNBQVM7UUFDakIsS0FBSyxFQUFFLFFBQVEsRUFBRSx3Q0FBd0M7S0FDMUQ7SUFDRCxTQUFTLEVBQUU7UUFDVCxVQUFVLEVBQUUsSUFBSTtRQUNoQixlQUFlLEVBQUUsRUFBRTtRQUNuQixjQUFjLEVBQUUsR0FBRztRQUNuQixjQUFjLEVBQUUsR0FBRztRQUNuQixJQUFJLEVBQUUsTUFBTTtLQUNiO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsVUFBVSxFQUFFLE1BQU07UUFDbEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixXQUFXLEVBQUUsTUFBTTtRQUNuQixTQUFTLEVBQUUsS0FBSztRQUNoQixXQUFXLEVBQUUsTUFBTTtRQUNuQixlQUFlLEVBQUUsTUFBTTtRQUN2QixLQUFLLEVBQUUsS0FBSztLQUNiO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsVUFBVSxFQUFFLENBQUM7UUFDYixZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1YsV0FBVyxFQUFFLENBQUM7UUFDZCxRQUFRLEVBQUUsQ0FBQztRQUNYLFNBQVMsRUFBRSxDQUFDO1FBQ1osV0FBVyxFQUFFLENBQUM7UUFDZCxXQUFXLEVBQUUsQ0FBQztRQUNkLEtBQUssRUFBRSxDQUFDO0tBQ1Q7SUFDRCxTQUFTLEVBQUU7UUFDVCxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUNuRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM5RixZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyRyxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyRyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNsRyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM5RixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNwRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMvRixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNwRyxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNsRyxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN0RyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyRyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMxRixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtLQUN0RztJQUNELEtBQUssRUFBRTtRQUNMLE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFFLEVBQUU7UUFDVixTQUFTLEVBQUUsTUFBTTtRQUNqQixZQUFZLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFO0tBQ3JFO0NBQ0YsQ0FBQztBQUVGOzs7R0FHRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUE0QjtJQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFBLHdCQUFTLEVBQUMsc0JBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQWdCLENBQUM7SUFDaEYsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTztRQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtRQUNoQyxRQUFRLEVBQUUsSUFBQSx3QkFBUyxFQUFDLHNCQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFrQjtRQUNuRixTQUFTLEVBQUUsSUFBQSx3QkFBUyxFQUFDLHNCQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFvQjtRQUN4RixPQUFPLEVBQUUsSUFBQSx3QkFBUyxFQUFDLHNCQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFrQjtRQUNoRixRQUFRLEVBQUUsSUFBQSx3QkFBUyxFQUFDLHNCQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFrQjtRQUNuRixTQUFTLEVBQUUsSUFBQSx3QkFBUyxFQUFDLHNCQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFtQjtRQUN2RixLQUFLO0tBQ04sQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdkZWVwbWVyZ2UtdHMnO1xuaW1wb3J0IHtcbiAgRGVmYXVsdGFibGVDb25maWcsIE1vbml0b3JpbmdDb25maWcsIE1vbml0b3JpbmdDb25maWdJbnB1dCxcbiAgVmVyc2lvbkNvbmZpZywgUmV0ZW50aW9uQ29uZmlnLCBTdG9yYWdlQ29uZmlnLCBSZXBsaWNhQ29uZmlnLCBSZXNvdXJjZUNvbmZpZywgVGVtcG9Db25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFBhY2thZ2Utc2hpcHBlZCBkZWZhdWx0cyBmb3IgZXZlcnl0aGluZyB0aGF0IGhhcyBhIHNlbnNpYmxlIHVuaXZlcnNhbCB2YWx1ZS5cbiAqIFZhbHVlcyBtaXJyb3IgdGhlIGt1cDZzIHByb2R1Y3Rpb24gY29uZmlnIGF0IHRoZSB0aW1lIG9mIGV4dHJhY3Rpb247IGludGVncmF0aW9uXG4gKiBjaGFydHMgb3ZlcnJpZGUgb25seSB3aGF0IHRoZXkgbmVlZCB2aWEge0BsaW5rIG1lcmdlQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09ORklHOiBEZWZhdWx0YWJsZUNvbmZpZyA9IHtcbiAgdmVyc2lvbnM6IHtcbiAgICBwcm9tZXRoZXVzU3RhY2s6ICc4Ny4wLjAnLFxuICAgIGxva2k6ICc3LjAuMCcsXG4gICAgYWxsb3k6ICcxLjEwLjAnLFxuICAgIHRoYW5vczogJ3YwLjQxLjAnLFxuICAgIHRlbXBvOiAnMS4yNC40JywgLy8gZ3JhZmFuYS90ZW1wbyBjaGFydCAoVGVtcG8gYXBwIDIuOS4wKVxuICB9LFxuICByZXRlbnRpb246IHtcbiAgICBwcm9tZXRoZXVzOiAnMmQnLFxuICAgIHByb21ldGhldXNTM1JhdzogMzAsXG4gICAgcHJvbWV0aGV1c1MzNW06IDE4MCxcbiAgICBwcm9tZXRoZXVzUzMxaDogNzMwLFxuICAgIGxva2k6ICc3NDRoJyxcbiAgfSxcbiAgc3RvcmFnZToge1xuICAgIHByb21ldGhldXM6ICcxNUdpJyxcbiAgICBncmFmYW5hOiAnNUdpJyxcbiAgICBhbGVydG1hbmFnZXI6ICcxR2knLFxuICAgIGxva2lCYWNrZW5kOiAnMTBHaScsXG4gICAgbG9raVdyaXRlOiAnM0dpJyxcbiAgICB0aGFub3NTdG9yZTogJzEwR2knLFxuICAgIHRoYW5vc0NvbXBhY3RvcjogJzIwR2knLFxuICAgIHRlbXBvOiAnNUdpJyxcbiAgfSxcbiAgcmVwbGljYXM6IHtcbiAgICBwcm9tZXRoZXVzOiAyLFxuICAgIGFsZXJ0bWFuYWdlcjogMixcbiAgICBncmFmYW5hOiAxLFxuICAgIGxva2lCYWNrZW5kOiAyLFxuICAgIGxva2lSZWFkOiAyLFxuICAgIGxva2lXcml0ZTogMixcbiAgICB0aGFub3NRdWVyeTogMixcbiAgICB0aGFub3NTdG9yZTogMixcbiAgICB0ZW1wbzogMSxcbiAgfSxcbiAgcmVzb3VyY2VzOiB7XG4gICAgcHJvbWV0aGV1czogeyByZXF1ZXN0czogeyBjcHU6ICcxMDBtJywgbWVtb3J5OiAnMTUwME1pJyB9LCBsaW1pdHM6IHsgY3B1OiAnMicsIG1lbW9yeTogJzMwMDBNaScgfSB9LFxuICAgIGdyYWZhbmE6IHsgcmVxdWVzdHM6IHsgY3B1OiAnNTBtJywgbWVtb3J5OiAnNTEyTWknIH0sIGxpbWl0czogeyBjcHU6ICcyMDBtJywgbWVtb3J5OiAnMUdpJyB9IH0sXG4gICAgYWxlcnRtYW5hZ2VyOiB7IHJlcXVlc3RzOiB7IGNwdTogJzI1bScsIG1lbW9yeTogJzEwME1pJyB9LCBsaW1pdHM6IHsgY3B1OiAnMTAwbScsIG1lbW9yeTogJzIwME1pJyB9IH0sXG4gICAgbG9raUJhY2tlbmQ6IHsgcmVxdWVzdHM6IHsgY3B1OiAnMTAwbScsIG1lbW9yeTogJzI1Nk1pJyB9LCBsaW1pdHM6IHsgY3B1OiAnNTAwbScsIG1lbW9yeTogJzUxMk1pJyB9IH0sXG4gICAgbG9raVJlYWQ6IHsgcmVxdWVzdHM6IHsgY3B1OiAnMTAwbScsIG1lbW9yeTogJzI1Nk1pJyB9LCBsaW1pdHM6IHsgY3B1OiAnNTAwbScsIG1lbW9yeTogJzUxMk1pJyB9IH0sXG4gICAgbG9raVdyaXRlOiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICc1MTJNaScgfSwgbGltaXRzOiB7IGNwdTogJzEnLCBtZW1vcnk6ICcxR2knIH0gfSxcbiAgICBsb2tpR2F0ZXdheTogeyByZXF1ZXN0czogeyBjcHU6ICc1MG0nLCBtZW1vcnk6ICcxMjhNaScgfSwgbGltaXRzOiB7IGNwdTogJzIwMG0nLCBtZW1vcnk6ICcyNTZNaScgfSB9LFxuICAgIGFsbG95OiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICcxMjhNaScgfSwgbGltaXRzOiB7IGNwdTogJzIwMG0nLCBtZW1vcnk6ICcyNTZNaScgfSB9LFxuICAgIHRoYW5vc1F1ZXJ5OiB7IHJlcXVlc3RzOiB7IGNwdTogJzIwMG0nLCBtZW1vcnk6ICc1MTJNaScgfSwgbGltaXRzOiB7IGNwdTogJzEwMDBtJywgbWVtb3J5OiAnMUdpJyB9IH0sXG4gICAgdGhhbm9zU3RvcmU6IHsgcmVxdWVzdHM6IHsgY3B1OiAnMjAwbScsIG1lbW9yeTogJzFHaScgfSwgbGltaXRzOiB7IGNwdTogJzEwMDBtJywgbWVtb3J5OiAnMkdpJyB9IH0sXG4gICAgdGhhbm9zQ29tcGFjdG9yOiB7IHJlcXVlc3RzOiB7IGNwdTogJzUwMG0nLCBtZW1vcnk6ICcyR2knIH0sIGxpbWl0czogeyBjcHU6ICcyMDAwbScsIG1lbW9yeTogJzRHaScgfSB9LFxuICAgIGNvbmZpZ1JlbG9hZGVyOiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwbScsIG1lbW9yeTogJzUwTWknIH0sIGxpbWl0czogeyBjcHU6ICc1MG0nLCBtZW1vcnk6ICcxMDBNaScgfSB9LFxuICAgIHRoYW5vc1NpZGVjYXI6IHsgcmVxdWVzdHM6IHsgY3B1OiAnMTBtJywgbWVtb3J5OiAnNTBNaScgfSwgbGltaXRzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICcxMDBNaScgfSB9LFxuICAgIHRlbXBvOiB7IHJlcXVlc3RzOiB7IGNwdTogJzEwMG0nLCBtZW1vcnk6ICcyNTZNaScgfSwgbGltaXRzOiB7IGNwdTogJzEnLCBtZW1vcnk6ICcxR2knIH0gfSxcbiAgICBhbGxveVRyYWNlczogeyByZXF1ZXN0czogeyBjcHU6ICcxMDBtJywgbWVtb3J5OiAnMjU2TWknIH0sIGxpbWl0czogeyBjcHU6ICc1MDBtJywgbWVtb3J5OiAnNTEyTWknIH0gfSxcbiAgfSxcbiAgdGVtcG86IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBidWNrZXQ6ICcnLFxuICAgIHJldGVudGlvbjogJzMzNmgnLFxuICAgIHRhaWxTYW1wbGluZzogeyBsYXRlbmN5VGhyZXNob2xkTXM6IDEwMDAsIHByb2JhYmlsaXN0aWNQZXJjZW50OiAxMCB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBSZXNvbHZlIGEgZnVsbCBNb25pdG9yaW5nQ29uZmlnIGJ5IGRlZXAtbWVyZ2luZyB0aGUgY2FsbGVyJ3Mgb3ZlcnJpZGVzIG92ZXJcbiAqIERFRkFVTFRfQ09ORklHLiBSZXF1aXJlZCBjbHVzdGVyIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggdmVyYmF0aW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhpbnB1dDogTW9uaXRvcmluZ0NvbmZpZ0lucHV0KTogTW9uaXRvcmluZ0NvbmZpZyB7XG4gIGNvbnN0IHRlbXBvID0gZGVlcG1lcmdlKERFRkFVTFRfQ09ORklHLnRlbXBvLCBpbnB1dC50ZW1wbyA/PyB7fSkgYXMgVGVtcG9Db25maWc7XG4gIGlmICh0ZW1wby5lbmFibGVkICYmICF0ZW1wby5idWNrZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RlbXBvLmJ1Y2tldCBpcyByZXF1aXJlZCB3aGVuIHRlbXBvLmVuYWJsZWQgaXMgdHJ1ZScpO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZXNwYWNlOiBpbnB1dC5uYW1lc3BhY2UsXG4gICAgZG9tYWluczogaW5wdXQuZG9tYWlucyxcbiAgICBzMzogaW5wdXQuczMsXG4gICAgc210cDogaW5wdXQuc210cCxcbiAgICBpbnRlZ3JhdGlvbnM6IGlucHV0LmludGVncmF0aW9ucyxcbiAgICB2ZXJzaW9uczogZGVlcG1lcmdlKERFRkFVTFRfQ09ORklHLnZlcnNpb25zLCBpbnB1dC52ZXJzaW9ucyA/PyB7fSkgYXMgVmVyc2lvbkNvbmZpZyxcbiAgICByZXRlbnRpb246IGRlZXBtZXJnZShERUZBVUxUX0NPTkZJRy5yZXRlbnRpb24sIGlucHV0LnJldGVudGlvbiA/PyB7fSkgYXMgUmV0ZW50aW9uQ29uZmlnLFxuICAgIHN0b3JhZ2U6IGRlZXBtZXJnZShERUZBVUxUX0NPTkZJRy5zdG9yYWdlLCBpbnB1dC5zdG9yYWdlID8/IHt9KSBhcyBTdG9yYWdlQ29uZmlnLFxuICAgIHJlcGxpY2FzOiBkZWVwbWVyZ2UoREVGQVVMVF9DT05GSUcucmVwbGljYXMsIGlucHV0LnJlcGxpY2FzID8/IHt9KSBhcyBSZXBsaWNhQ29uZmlnLFxuICAgIHJlc291cmNlczogZGVlcG1lcmdlKERFRkFVTFRfQ09ORklHLnJlc291cmNlcywgaW5wdXQucmVzb3VyY2VzID8/IHt9KSBhcyBSZXNvdXJjZUNvbmZpZyxcbiAgICB0ZW1wbyxcbiAgfTtcbn1cbiJdfQ==
package/lib/index.d.ts CHANGED
@@ -15,3 +15,7 @@ export * from './constructs/alloy';
15
15
  export * from './constructs/thanos-query';
16
16
  export * from './constructs/thanos-store';
17
17
  export * from './constructs/thanos-compactor';
18
+ export * from './constructs/tempo-s3-bucket';
19
+ export * from './constructs/tempo-s3-credentials';
20
+ export * from './constructs/tempo';
21
+ export * from './constructs/alloy-traces';
package/lib/index.js CHANGED
@@ -35,4 +35,8 @@ __exportStar(require("./constructs/alloy"), exports);
35
35
  __exportStar(require("./constructs/thanos-query"), exports);
36
36
  __exportStar(require("./constructs/thanos-store"), exports);
37
37
  __exportStar(require("./constructs/thanos-compactor"), exports);
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsbURBQWlDO0FBQ2pDLHFEQUFtQztBQUNuQyw2RUFBNkU7QUFDN0UsbUZBQW1GO0FBQ25GLHFDQUE4QztBQUFyQyxvR0FBQSxhQUFhLE9BQUE7QUFDdEIseURBQXVDO0FBQ3ZDLDhEQUE0QztBQUM1QyxnRUFBOEM7QUFDOUMsOERBQTRDO0FBQzVDLHFFQUFtRDtBQUNuRCxtRUFBaUQ7QUFDakQsdUVBQXFEO0FBQ3JELGdFQUE4QztBQUM5QyxvREFBa0M7QUFDbEMscURBQW1DO0FBQ25DLDREQUEwQztBQUMxQyw0REFBMEM7QUFDMUMsZ0VBQThDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbW9uaXRvcmluZy1jaGFydCc7XG4vLyBDb252ZW5pZW5jZSByZS1leHBvcnQgc28gaW50ZWdyYXRpb24gY2hhcnRzIGNhbiBidWlsZCBkYXNoYm9hcmQgQ29uZmlnTWFwc1xuLy8gKEdyYWZhbmEgc2lkZWNhciBkaXNjb3ZlcnkpIHdpdGhvdXQgZGVwZW5kaW5nIG9uIHRoZSBnZW5lcmF0ZWQgaW1wb3J0cyBkaXJlY3RseS5cbmV4cG9ydCB7IEt1YmVDb25maWdNYXAgfSBmcm9tICcuL2ltcG9ydHMvazhzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9uYW1lc3BhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL3ByaW9yaXR5LWNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy90aGFub3MtczMtYnVja2V0JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9sb2tpLXMzLWJ1Y2tldCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLXMzLWNyZWRlbnRpYWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9sb2tpLXMzLWNyZWRlbnRpYWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9ncmFmYW5hLXBhc3N3b3JkLXNlY3JldCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvcHJvbWV0aGV1cy1zdGFjayc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvbG9raSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvYWxsb3knO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL3RoYW5vcy1xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy90aGFub3MtY29tcGFjdG9yJztcbiJdfQ==
38
+ __exportStar(require("./constructs/tempo-s3-bucket"), exports);
39
+ __exportStar(require("./constructs/tempo-s3-credentials"), exports);
40
+ __exportStar(require("./constructs/tempo"), exports);
41
+ __exportStar(require("./constructs/alloy-traces"), exports);
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsbURBQWlDO0FBQ2pDLHFEQUFtQztBQUNuQyw2RUFBNkU7QUFDN0UsbUZBQW1GO0FBQ25GLHFDQUE4QztBQUFyQyxvR0FBQSxhQUFhLE9BQUE7QUFDdEIseURBQXVDO0FBQ3ZDLDhEQUE0QztBQUM1QyxnRUFBOEM7QUFDOUMsOERBQTRDO0FBQzVDLHFFQUFtRDtBQUNuRCxtRUFBaUQ7QUFDakQsdUVBQXFEO0FBQ3JELGdFQUE4QztBQUM5QyxvREFBa0M7QUFDbEMscURBQW1DO0FBQ25DLDREQUEwQztBQUMxQyw0REFBMEM7QUFDMUMsZ0VBQThDO0FBQzlDLCtEQUE2QztBQUM3QyxvRUFBa0Q7QUFDbEQscURBQW1DO0FBQ25DLDREQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL21vbml0b3JpbmctY2hhcnQnO1xuLy8gQ29udmVuaWVuY2UgcmUtZXhwb3J0IHNvIGludGVncmF0aW9uIGNoYXJ0cyBjYW4gYnVpbGQgZGFzaGJvYXJkIENvbmZpZ01hcHNcbi8vIChHcmFmYW5hIHNpZGVjYXIgZGlzY292ZXJ5KSB3aXRob3V0IGRlcGVuZGluZyBvbiB0aGUgZ2VuZXJhdGVkIGltcG9ydHMgZGlyZWN0bHkuXG5leHBvcnQgeyBLdWJlQ29uZmlnTWFwIH0gZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvbmFtZXNwYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9wcmlvcml0eS1jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLXMzLWJ1Y2tldCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvbG9raS1zMy1idWNrZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL3RoYW5vcy1zMy1jcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvbG9raS1zMy1jcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvZ3JhZmFuYS1wYXNzd29yZC1zZWNyZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL3Byb21ldGhldXMtc3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL2xva2knO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL2FsbG95JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy90aGFub3MtcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL3RoYW5vcy1zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLWNvbXBhY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvdGVtcG8tczMtYnVja2V0JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy90ZW1wby1zMy1jcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvdGVtcG8nO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RzL2FsbG95LXRyYWNlcyc7XG4iXX0=
@@ -4,6 +4,7 @@ exports.MonitoringChart = void 0;
4
4
  const cdk8s_1 = require("cdk8s");
5
5
  // Import all constructs
6
6
  const alloy_1 = require("./constructs/alloy");
7
+ const alloy_traces_1 = require("./constructs/alloy-traces");
7
8
  const grafana_password_secret_1 = require("./constructs/grafana-password-secret");
8
9
  const loki_1 = require("./constructs/loki");
9
10
  const loki_s3_bucket_1 = require("./constructs/loki-s3-bucket");
@@ -11,6 +12,9 @@ const loki_s3_credentials_1 = require("./constructs/loki-s3-credentials");
11
12
  const namespace_1 = require("./constructs/namespace");
12
13
  const priority_class_1 = require("./constructs/priority-class");
13
14
  const prometheus_stack_1 = require("./constructs/prometheus-stack");
15
+ const tempo_1 = require("./constructs/tempo");
16
+ const tempo_s3_bucket_1 = require("./constructs/tempo-s3-bucket");
17
+ const tempo_s3_credentials_1 = require("./constructs/tempo-s3-credentials");
14
18
  const thanos_compactor_1 = require("./constructs/thanos-compactor");
15
19
  const thanos_query_1 = require("./constructs/thanos-query");
16
20
  const thanos_s3_bucket_1 = require("./constructs/thanos-s3-bucket");
@@ -122,7 +126,25 @@ class MonitoringChart extends cdk8s_1.Chart {
122
126
  namespace,
123
127
  config,
124
128
  });
129
+ // =========================================================================
130
+ // Tempo tracing (opt-in)
131
+ // =========================================================================
132
+ // Only created when config.tempo.enabled is true. Apps send OTLP to the
133
+ // alloy-traces gateway, which tail-samples and forwards to Tempo (S3-backed).
134
+ if (config.tempo.enabled) {
135
+ new tempo_s3_bucket_1.TempoS3BucketConstruct(this, 'tempo-s3-bucket', { config });
136
+ const tempoCreds = new tempo_s3_credentials_1.TempoS3CredentialsConstruct(this, 'tempo-s3-credentials', {
137
+ namespace,
138
+ config,
139
+ });
140
+ new tempo_1.TempoConstruct(this, 'tempo', {
141
+ namespace,
142
+ config,
143
+ s3CredentialsSecretName: tempoCreds.secretName,
144
+ });
145
+ new alloy_traces_1.AlloyTracesConstruct(this, 'alloy-traces', { namespace, config });
146
+ }
125
147
  }
126
148
  }
127
149
  exports.MonitoringChart = MonitoringChart;
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy1jaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tb25pdG9yaW5nLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUEwQztBQUcxQyx3QkFBd0I7QUFDeEIsOENBQW9EO0FBQ3BELGtGQUE2RTtBQUM3RSw0Q0FBa0Q7QUFDbEQsZ0VBQW9FO0FBQ3BFLDBFQUE4RTtBQUM5RSxzREFBNEQ7QUFDNUQsZ0VBQXFFO0FBQ3JFLG9FQUF5RTtBQUN6RSxvRUFBeUU7QUFDekUsNERBQWlFO0FBQ2pFLG9FQUF3RTtBQUN4RSw4RUFBa0Y7QUFDbEYsNERBQWlFO0FBR2pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLGFBQUs7SUFDeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVyxNQUF3QixFQUFFLFFBQW9CLEVBQUU7UUFDakcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEeUIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFHekUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUVuQyw0RUFBNEU7UUFDNUUscUJBQXFCO1FBQ3JCLDRFQUE0RTtRQUM1RSx3Q0FBd0M7UUFDeEMsSUFBSSw4QkFBa0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3hDLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksdUNBQXNCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFbkQsNEVBQTRFO1FBQzVFLGdDQUFnQztRQUNoQyw0RUFBNEU7UUFDNUUsNERBQTREO1FBQzVELElBQUksMENBQXVCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCxJQUFJLHNDQUFxQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO1FBQzVDLElBQUksb0RBQTRCLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzlELFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGdEQUEwQixDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNwRixTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxJQUFJLCtDQUFxQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNsRCxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILDRFQUE0RTtRQUM1RSx3QkFBd0I7UUFDeEIsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSxJQUFJLDJDQUF3QixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNyRCxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILHlCQUF5QjtRQUN6QixJQUFJLG9CQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUM5QixTQUFTO1lBQ1QsTUFBTTtZQUNOLHVCQUF1QixFQUFFLGlCQUFpQixDQUFDLFVBQVU7U0FDdEQsQ0FBQyxDQUFDO1FBRUgsNEVBQTRFO1FBQzVFLDRCQUE0QjtRQUM1Qiw0RUFBNEU7UUFDNUUsK0NBQStDO1FBQy9DLElBQUksc0JBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ2hDLFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLElBQUksbUNBQW9CLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM3QyxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILDhEQUE4RDtRQUM5RCxJQUFJLG1DQUFvQixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDN0MsU0FBUztZQUNULE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCxvRUFBb0U7UUFDcEUsSUFBSSwyQ0FBd0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDckQsU0FBUztZQUNULE1BQU07U0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4RkQsMENBd0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhcnQsIENoYXJ0UHJvcHMgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLy8gSW1wb3J0IGFsbCBjb25zdHJ1Y3RzXG5pbXBvcnQgeyBBbGxveUNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9hbGxveSc7XG5pbXBvcnQgeyBHcmFmYW5hUGFzc3dvcmRTZWNyZXQgfSBmcm9tICcuL2NvbnN0cnVjdHMvZ3JhZmFuYS1wYXNzd29yZC1zZWNyZXQnO1xuaW1wb3J0IHsgTG9raUNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9sb2tpJztcbmltcG9ydCB7IExva2lTM0J1Y2tldENvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9sb2tpLXMzLWJ1Y2tldCc7XG5pbXBvcnQgeyBMb2tpUzNDcmVkZW50aWFsc0NvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9sb2tpLXMzLWNyZWRlbnRpYWxzJztcbmltcG9ydCB7IE5hbWVzcGFjZUNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9uYW1lc3BhY2UnO1xuaW1wb3J0IHsgUHJpb3JpdHlDbGFzc0NvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9wcmlvcml0eS1jbGFzcyc7XG5pbXBvcnQgeyBQcm9tZXRoZXVzU3RhY2tDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvcHJvbWV0aGV1cy1zdGFjayc7XG5pbXBvcnQgeyBUaGFub3NDb21wYWN0b3JDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLWNvbXBhY3Rvcic7XG5pbXBvcnQgeyBUaGFub3NRdWVyeUNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy90aGFub3MtcXVlcnknO1xuaW1wb3J0IHsgVGhhbm9zUzNCdWNrZXRDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLXMzLWJ1Y2tldCc7XG5pbXBvcnQgeyBUaGFub3NTM0NyZWRlbnRpYWxzQ29uc3RydWN0IH0gZnJvbSAnLi9jb25zdHJ1Y3RzL3RoYW5vcy1zMy1jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBUaGFub3NTdG9yZUNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy90aGFub3Mtc3RvcmUnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE1vbml0b3JpbmdDaGFydCBvcmNoZXN0cmF0ZXMgdGhlIGNvbXBsZXRlIG1vbml0b3Jpbmcgc3RhY2suXG4gKlxuICogVGhpcyBjaGFydCBjcmVhdGVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgdXNpbmcgQXJnb0NEIHN5bmMtd2F2ZXM6XG4gKlxuICogV2F2ZSAwOiBGb3VuZGF0aW9uXG4gKiAtIE5hbWVzcGFjZVxuICogLSBQcmlvcml0eUNsYXNzXG4gKlxuICogV2F2ZSAxOiBFeHRlcm5hbCBEZXBlbmRlbmNpZXNcbiAqIC0gUzMgQnVja2V0cyAoQ3Jvc3NwbGFuZSlcbiAqIC0gUzMgQ3JlZGVudGlhbHMgKEV4dGVybmFsU2VjcmV0KVxuICpcbiAqIFdhdmUgMjogQ29yZSBTZXJ2aWNlc1xuICogLSBQcm9tZXRoZXVzIFN0YWNrIChQcm9tZXRoZXVzLCBHcmFmYW5hLCBBbGVydG1hbmFnZXIpXG4gKiAtIExva2kgKGxvZyBhZ2dyZWdhdGlvbilcbiAqXG4gKiBXYXZlIDM6IEFkdmFuY2VkIFNlcnZpY2VzXG4gKiAtIEFsbG95IChsb2cgY29sbGVjdGlvbilcbiAqIC0gVGhhbm9zIFF1ZXJ5ICh1bmlmaWVkIG1ldHJpY3MgcXVlcnkpXG4gKiAtIFRoYW5vcyBTdG9yZSAoUzMgZ2F0ZXdheSlcbiAqIC0gVGhhbm9zIENvbXBhY3RvciAoZG93bnNhbXBsaW5nKVxuICpcbiAqIEFwcC1zcGVjaWZpYyBkYXNoYm9hcmRzIGFuZCBhbGVydCBydWxlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgcGFydCBvZiB0aGlzXG4gKiBjaGFydC4gSW50ZWdyYXRpb24gY2hhcnRzIGF0dGFjaCB0aGVpciBvd24gZGFzaGJvYXJkL2FsZXJ0IGNvbnN0cnVjdHMgYmVzaWRlXG4gKiB0aGlzIG9uZSAodGhlIEdyYWZhbmEgc2lkZWNhciBkaXNjb3ZlcnMgQ29uZmlnTWFwcyBsYWJlbGVkXG4gKiBgZ3JhZmFuYV9kYXNoYm9hcmQ6IFwiMVwiYCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UpLlxuICpcbiAqIENvbmZpZ3VyYXRpb24gaXMgcHJvdmlkZWQgdmlhIHRoZSBNb25pdG9yaW5nQ29uZmlnIGludGVyZmFjZSwgd2hpY2ggY29tYmluZXM6XG4gKiAtIGNvbmZpZy55YW1sIChkZWZhdWx0IHZhbHVlcylcbiAqIC0gRW52aXJvbm1lbnQgdmFyaWFibGVzIChvdmVycmlkZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25pdG9yaW5nQ2hhcnQgZXh0ZW5kcyBDaGFydCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHJlYWRvbmx5IGNvbmZpZzogTW9uaXRvcmluZ0NvbmZpZywgcHJvcHM6IENoYXJ0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgbmFtZXNwYWNlID0gY29uZmlnLm5hbWVzcGFjZTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBXYXZlIDA6IEZvdW5kYXRpb25cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTXVzdCBleGlzdCBiZWZvcmUgYW55IG90aGVyIHJlc291cmNlc1xuICAgIG5ldyBOYW1lc3BhY2VDb25zdHJ1Y3QodGhpcywgJ25hbWVzcGFjZScsIHtcbiAgICAgIG5hbWU6IG5hbWVzcGFjZSxcbiAgICB9KTtcblxuICAgIG5ldyBQcmlvcml0eUNsYXNzQ29uc3RydWN0KHRoaXMsICdwcmlvcml0eS1jbGFzcycpO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFdhdmUgMTogRXh0ZXJuYWwgRGVwZW5kZW5jaWVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFMzIGJ1Y2tldHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBwb2RzIHRyeSB0byBhY2Nlc3MgdGhlbVxuICAgIG5ldyBUaGFub3NTM0J1Y2tldENvbnN0cnVjdCh0aGlzLCAndGhhbm9zLXMzLWJ1Y2tldCcsIHtcbiAgICAgIGNvbmZpZyxcbiAgICB9KTtcblxuICAgIG5ldyBMb2tpUzNCdWNrZXRDb25zdHJ1Y3QodGhpcywgJ2xva2ktczMtYnVja2V0Jywge1xuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gU2VjcmV0cyBtdXN0IGV4aXN0IGJlZm9yZSBwb2RzIG1vdW50IHRoZW1cbiAgICBuZXcgVGhhbm9zUzNDcmVkZW50aWFsc0NvbnN0cnVjdCh0aGlzLCAndGhhbm9zLXMzLWNyZWRlbnRpYWxzJywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbG9raVMzQ3JlZGVudGlhbHMgPSBuZXcgTG9raVMzQ3JlZGVudGlhbHNDb25zdHJ1Y3QodGhpcywgJ2xva2ktczMtY3JlZGVudGlhbHMnLCB7XG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICAvLyBHcmFmYW5hIGFkbWluIGNyZWRlbnRpYWxzIChzdGFibGUgcGFzc3dvcmQgYWNyb3NzIEhlbG0gdXBncmFkZXMpXG4gICAgbmV3IEdyYWZhbmFQYXNzd29yZFNlY3JldCh0aGlzLCAnZ3JhZmFuYS1wYXNzd29yZCcsIHtcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIGNvbmZpZyxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBXYXZlIDI6IENvcmUgU2VydmljZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUHJvbWV0aGV1cyBTdGFjayAoaW5jbHVkZXMgUHJvbWV0aGV1cywgR3JhZmFuYSwgQWxlcnRtYW5hZ2VyLCBvcGVyYXRvcnMpXG4gICAgbmV3IFByb21ldGhldXNTdGFja0NvbnN0cnVjdCh0aGlzLCAncHJvbWV0aGV1cy1zdGFjaycsIHtcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIGNvbmZpZyxcbiAgICB9KTtcblxuICAgIC8vIExva2kgKGxvZyBhZ2dyZWdhdGlvbilcbiAgICBuZXcgTG9raUNvbnN0cnVjdCh0aGlzLCAnbG9raScsIHtcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lOiBsb2tpUzNDcmVkZW50aWFscy5zZWNyZXROYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFdhdmUgMzogQWR2YW5jZWQgU2VydmljZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQWxsb3kgKGxvZyBjb2xsZWN0aW9uIC0gYWZ0ZXIgTG9raSBpcyByZWFkeSlcbiAgICBuZXcgQWxsb3lDb25zdHJ1Y3QodGhpcywgJ2FsbG95Jywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gVGhhbm9zIFF1ZXJ5ICh1bmlmaWVkIHF1ZXJ5IGludGVyZmFjZSAtIGFmdGVyIFByb21ldGhldXMgaXMgcmVhZHkpXG4gICAgbmV3IFRoYW5vc1F1ZXJ5Q29uc3RydWN0KHRoaXMsICd0aGFub3MtcXVlcnknLCB7XG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICAvLyBUaGFub3MgU3RvcmUgKFMzIGdhdGV3YXkgLSBhZnRlciBTMyBidWNrZXQgYW5kIGNyZWRlbnRpYWxzKVxuICAgIG5ldyBUaGFub3NTdG9yZUNvbnN0cnVjdCh0aGlzLCAndGhhbm9zLXN0b3JlJywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gVGhhbm9zIENvbXBhY3RvciAoZG93bnNhbXBsaW5nIC0gYWZ0ZXIgUzMgYnVja2V0IGFuZCBjcmVkZW50aWFscylcbiAgICBuZXcgVGhhbm9zQ29tcGFjdG9yQ29uc3RydWN0KHRoaXMsICd0aGFub3MtY29tcGFjdG9yJywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy1jaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tb25pdG9yaW5nLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUEwQztBQUcxQyx3QkFBd0I7QUFDeEIsOENBQW9EO0FBQ3BELDREQUFpRTtBQUNqRSxrRkFBNkU7QUFDN0UsNENBQWtEO0FBQ2xELGdFQUFvRTtBQUNwRSwwRUFBOEU7QUFDOUUsc0RBQTREO0FBQzVELGdFQUFxRTtBQUNyRSxvRUFBeUU7QUFDekUsOENBQW9EO0FBQ3BELGtFQUFzRTtBQUN0RSw0RUFBZ0Y7QUFDaEYsb0VBQXlFO0FBQ3pFLDREQUFpRTtBQUNqRSxvRUFBd0U7QUFDeEUsOEVBQWtGO0FBQ2xGLDREQUFpRTtBQUdqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxhQUFLO0lBQ3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQVcsTUFBd0IsRUFBRSxRQUFvQixFQUFFO1FBQ2pHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRHlCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBR3pFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFFbkMsNEVBQTRFO1FBQzVFLHFCQUFxQjtRQUNyQiw0RUFBNEU7UUFDNUUsd0NBQXdDO1FBQ3hDLElBQUksOEJBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN4QyxJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQUM7UUFFSCxJQUFJLHVDQUFzQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRW5ELDRFQUE0RTtRQUM1RSxnQ0FBZ0M7UUFDaEMsNEVBQTRFO1FBQzVFLDREQUE0RDtRQUM1RCxJQUFJLDBDQUF1QixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsSUFBSSxzQ0FBcUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEQsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLG9EQUE0QixDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRTtZQUM5RCxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxnREFBMEIsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDcEYsU0FBUztZQUNULE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCxtRUFBbUU7UUFDbkUsSUFBSSwrQ0FBcUIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDbEQsU0FBUztZQUNULE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsd0JBQXdCO1FBQ3hCLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0UsSUFBSSwyQ0FBd0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDckQsU0FBUztZQUNULE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsSUFBSSxvQkFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDOUIsU0FBUztZQUNULE1BQU07WUFDTix1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVO1NBQ3RELENBQUMsQ0FBQztRQUVILDRFQUE0RTtRQUM1RSw0QkFBNEI7UUFDNUIsNEVBQTRFO1FBQzVFLCtDQUErQztRQUMvQyxJQUFJLHNCQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUNoQyxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxJQUFJLG1DQUFvQixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDN0MsU0FBUztZQUNULE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsSUFBSSxtQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQzdDLFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLElBQUksMkNBQXdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3JELFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsNEVBQTRFO1FBQzVFLHlCQUF5QjtRQUN6Qiw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLDhFQUE4RTtRQUM5RSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsSUFBSSx3Q0FBc0IsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLElBQUksa0RBQTJCLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO2dCQUMvRSxTQUFTO2dCQUNULE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxJQUFJLHNCQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDaEMsU0FBUztnQkFDVCxNQUFNO2dCQUNOLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxVQUFVO2FBQy9DLENBQUMsQ0FBQztZQUNILElBQUksbUNBQW9CLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEzR0QsMENBMkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhcnQsIENoYXJ0UHJvcHMgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLy8gSW1wb3J0IGFsbCBjb25zdHJ1Y3RzXG5pbXBvcnQgeyBBbGxveUNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9hbGxveSc7XG5pbXBvcnQgeyBBbGxveVRyYWNlc0NvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy9hbGxveS10cmFjZXMnO1xuaW1wb3J0IHsgR3JhZmFuYVBhc3N3b3JkU2VjcmV0IH0gZnJvbSAnLi9jb25zdHJ1Y3RzL2dyYWZhbmEtcGFzc3dvcmQtc2VjcmV0JztcbmltcG9ydCB7IExva2lDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvbG9raSc7XG5pbXBvcnQgeyBMb2tpUzNCdWNrZXRDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvbG9raS1zMy1idWNrZXQnO1xuaW1wb3J0IHsgTG9raVMzQ3JlZGVudGlhbHNDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvbG9raS1zMy1jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBOYW1lc3BhY2VDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvbmFtZXNwYWNlJztcbmltcG9ydCB7IFByaW9yaXR5Q2xhc3NDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvcHJpb3JpdHktY2xhc3MnO1xuaW1wb3J0IHsgUHJvbWV0aGV1c1N0YWNrQ29uc3RydWN0IH0gZnJvbSAnLi9jb25zdHJ1Y3RzL3Byb21ldGhldXMtc3RhY2snO1xuaW1wb3J0IHsgVGVtcG9Db25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvdGVtcG8nO1xuaW1wb3J0IHsgVGVtcG9TM0J1Y2tldENvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy90ZW1wby1zMy1idWNrZXQnO1xuaW1wb3J0IHsgVGVtcG9TM0NyZWRlbnRpYWxzQ29uc3RydWN0IH0gZnJvbSAnLi9jb25zdHJ1Y3RzL3RlbXBvLXMzLWNyZWRlbnRpYWxzJztcbmltcG9ydCB7IFRoYW5vc0NvbXBhY3RvckNvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy90aGFub3MtY29tcGFjdG9yJztcbmltcG9ydCB7IFRoYW5vc1F1ZXJ5Q29uc3RydWN0IH0gZnJvbSAnLi9jb25zdHJ1Y3RzL3RoYW5vcy1xdWVyeSc7XG5pbXBvcnQgeyBUaGFub3NTM0J1Y2tldENvbnN0cnVjdCB9IGZyb20gJy4vY29uc3RydWN0cy90aGFub3MtczMtYnVja2V0JztcbmltcG9ydCB7IFRoYW5vc1MzQ3JlZGVudGlhbHNDb25zdHJ1Y3QgfSBmcm9tICcuL2NvbnN0cnVjdHMvdGhhbm9zLXMzLWNyZWRlbnRpYWxzJztcbmltcG9ydCB7IFRoYW5vc1N0b3JlQ29uc3RydWN0IH0gZnJvbSAnLi9jb25zdHJ1Y3RzL3RoYW5vcy1zdG9yZSc7XG5pbXBvcnQgeyBNb25pdG9yaW5nQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTW9uaXRvcmluZ0NoYXJ0IG9yY2hlc3RyYXRlcyB0aGUgY29tcGxldGUgbW9uaXRvcmluZyBzdGFjay5cbiAqXG4gKiBUaGlzIGNoYXJ0IGNyZWF0ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgY29ycmVjdCBvcmRlciB1c2luZyBBcmdvQ0Qgc3luYy13YXZlczpcbiAqXG4gKiBXYXZlIDA6IEZvdW5kYXRpb25cbiAqIC0gTmFtZXNwYWNlXG4gKiAtIFByaW9yaXR5Q2xhc3NcbiAqXG4gKiBXYXZlIDE6IEV4dGVybmFsIERlcGVuZGVuY2llc1xuICogLSBTMyBCdWNrZXRzIChDcm9zc3BsYW5lKVxuICogLSBTMyBDcmVkZW50aWFscyAoRXh0ZXJuYWxTZWNyZXQpXG4gKlxuICogV2F2ZSAyOiBDb3JlIFNlcnZpY2VzXG4gKiAtIFByb21ldGhldXMgU3RhY2sgKFByb21ldGhldXMsIEdyYWZhbmEsIEFsZXJ0bWFuYWdlcilcbiAqIC0gTG9raSAobG9nIGFnZ3JlZ2F0aW9uKVxuICpcbiAqIFdhdmUgMzogQWR2YW5jZWQgU2VydmljZXNcbiAqIC0gQWxsb3kgKGxvZyBjb2xsZWN0aW9uKVxuICogLSBUaGFub3MgUXVlcnkgKHVuaWZpZWQgbWV0cmljcyBxdWVyeSlcbiAqIC0gVGhhbm9zIFN0b3JlIChTMyBnYXRld2F5KVxuICogLSBUaGFub3MgQ29tcGFjdG9yIChkb3duc2FtcGxpbmcpXG4gKlxuICogQXBwLXNwZWNpZmljIGRhc2hib2FyZHMgYW5kIGFsZXJ0IHJ1bGVzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBwYXJ0IG9mIHRoaXNcbiAqIGNoYXJ0LiBJbnRlZ3JhdGlvbiBjaGFydHMgYXR0YWNoIHRoZWlyIG93biBkYXNoYm9hcmQvYWxlcnQgY29uc3RydWN0cyBiZXNpZGVcbiAqIHRoaXMgb25lICh0aGUgR3JhZmFuYSBzaWRlY2FyIGRpc2NvdmVycyBDb25maWdNYXBzIGxhYmVsZWRcbiAqIGBncmFmYW5hX2Rhc2hib2FyZDogXCIxXCJgIGluIHRoZSBzYW1lIG5hbWVzcGFjZSkuXG4gKlxuICogQ29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCB2aWEgdGhlIE1vbml0b3JpbmdDb25maWcgaW50ZXJmYWNlLCB3aGljaCBjb21iaW5lczpcbiAqIC0gY29uZmlnLnlhbWwgKGRlZmF1bHQgdmFsdWVzKVxuICogLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKG92ZXJyaWRlcylcbiAqL1xuZXhwb3J0IGNsYXNzIE1vbml0b3JpbmdDaGFydCBleHRlbmRzIENoYXJ0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcmVhZG9ubHkgY29uZmlnOiBNb25pdG9yaW5nQ29uZmlnLCBwcm9wczogQ2hhcnRQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBuYW1lc3BhY2UgPSBjb25maWcubmFtZXNwYWNlO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFdhdmUgMDogRm91bmRhdGlvblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBNdXN0IGV4aXN0IGJlZm9yZSBhbnkgb3RoZXIgcmVzb3VyY2VzXG4gICAgbmV3IE5hbWVzcGFjZUNvbnN0cnVjdCh0aGlzLCAnbmFtZXNwYWNlJywge1xuICAgICAgbmFtZTogbmFtZXNwYWNlLFxuICAgIH0pO1xuXG4gICAgbmV3IFByaW9yaXR5Q2xhc3NDb25zdHJ1Y3QodGhpcywgJ3ByaW9yaXR5LWNsYXNzJyk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gV2F2ZSAxOiBFeHRlcm5hbCBEZXBlbmRlbmNpZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUzMgYnVja2V0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHBvZHMgdHJ5IHRvIGFjY2VzcyB0aGVtXG4gICAgbmV3IFRoYW5vc1MzQnVja2V0Q29uc3RydWN0KHRoaXMsICd0aGFub3MtczMtYnVja2V0Jywge1xuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgbmV3IExva2lTM0J1Y2tldENvbnN0cnVjdCh0aGlzLCAnbG9raS1zMy1idWNrZXQnLCB7XG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICAvLyBTZWNyZXRzIG11c3QgZXhpc3QgYmVmb3JlIHBvZHMgbW91bnQgdGhlbVxuICAgIG5ldyBUaGFub3NTM0NyZWRlbnRpYWxzQ29uc3RydWN0KHRoaXMsICd0aGFub3MtczMtY3JlZGVudGlhbHMnLCB7XG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2tpUzNDcmVkZW50aWFscyA9IG5ldyBMb2tpUzNDcmVkZW50aWFsc0NvbnN0cnVjdCh0aGlzLCAnbG9raS1zMy1jcmVkZW50aWFscycsIHtcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIGNvbmZpZyxcbiAgICB9KTtcblxuICAgIC8vIEdyYWZhbmEgYWRtaW4gY3JlZGVudGlhbHMgKHN0YWJsZSBwYXNzd29yZCBhY3Jvc3MgSGVsbSB1cGdyYWRlcylcbiAgICBuZXcgR3JhZmFuYVBhc3N3b3JkU2VjcmV0KHRoaXMsICdncmFmYW5hLXBhc3N3b3JkJywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFdhdmUgMjogQ29yZSBTZXJ2aWNlc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQcm9tZXRoZXVzIFN0YWNrIChpbmNsdWRlcyBQcm9tZXRoZXVzLCBHcmFmYW5hLCBBbGVydG1hbmFnZXIsIG9wZXJhdG9ycylcbiAgICBuZXcgUHJvbWV0aGV1c1N0YWNrQ29uc3RydWN0KHRoaXMsICdwcm9tZXRoZXVzLXN0YWNrJywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gTG9raSAobG9nIGFnZ3JlZ2F0aW9uKVxuICAgIG5ldyBMb2tpQ29uc3RydWN0KHRoaXMsICdsb2tpJywge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgY29uZmlnLFxuICAgICAgczNDcmVkZW50aWFsc1NlY3JldE5hbWU6IGxva2lTM0NyZWRlbnRpYWxzLnNlY3JldE5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gV2F2ZSAzOiBBZHZhbmNlZCBTZXJ2aWNlc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBBbGxveSAobG9nIGNvbGxlY3Rpb24gLSBhZnRlciBMb2tpIGlzIHJlYWR5KVxuICAgIG5ldyBBbGxveUNvbnN0cnVjdCh0aGlzLCAnYWxsb3knLCB7XG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICAvLyBUaGFub3MgUXVlcnkgKHVuaWZpZWQgcXVlcnkgaW50ZXJmYWNlIC0gYWZ0ZXIgUHJvbWV0aGV1cyBpcyByZWFkeSlcbiAgICBuZXcgVGhhbm9zUXVlcnlDb25zdHJ1Y3QodGhpcywgJ3RoYW5vcy1xdWVyeScsIHtcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIGNvbmZpZyxcbiAgICB9KTtcblxuICAgIC8vIFRoYW5vcyBTdG9yZSAoUzMgZ2F0ZXdheSAtIGFmdGVyIFMzIGJ1Y2tldCBhbmQgY3JlZGVudGlhbHMpXG4gICAgbmV3IFRoYW5vc1N0b3JlQ29uc3RydWN0KHRoaXMsICd0aGFub3Mtc3RvcmUnLCB7XG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICAvLyBUaGFub3MgQ29tcGFjdG9yIChkb3duc2FtcGxpbmcgLSBhZnRlciBTMyBidWNrZXQgYW5kIGNyZWRlbnRpYWxzKVxuICAgIG5ldyBUaGFub3NDb21wYWN0b3JDb25zdHJ1Y3QodGhpcywgJ3RoYW5vcy1jb21wYWN0b3InLCB7XG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVGVtcG8gdHJhY2luZyAob3B0LWluKVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBPbmx5IGNyZWF0ZWQgd2hlbiBjb25maWcudGVtcG8uZW5hYmxlZCBpcyB0cnVlLiBBcHBzIHNlbmQgT1RMUCB0byB0aGVcbiAgICAvLyBhbGxveS10cmFjZXMgZ2F0ZXdheSwgd2hpY2ggdGFpbC1zYW1wbGVzIGFuZCBmb3J3YXJkcyB0byBUZW1wbyAoUzMtYmFja2VkKS5cbiAgICBpZiAoY29uZmlnLnRlbXBvLmVuYWJsZWQpIHtcbiAgICAgIG5ldyBUZW1wb1MzQnVja2V0Q29uc3RydWN0KHRoaXMsICd0ZW1wby1zMy1idWNrZXQnLCB7IGNvbmZpZyB9KTtcbiAgICAgIGNvbnN0IHRlbXBvQ3JlZHMgPSBuZXcgVGVtcG9TM0NyZWRlbnRpYWxzQ29uc3RydWN0KHRoaXMsICd0ZW1wby1zMy1jcmVkZW50aWFscycsIHtcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBjb25maWcsXG4gICAgICB9KTtcbiAgICAgIG5ldyBUZW1wb0NvbnN0cnVjdCh0aGlzLCAndGVtcG8nLCB7XG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBzM0NyZWRlbnRpYWxzU2VjcmV0TmFtZTogdGVtcG9DcmVkcy5zZWNyZXROYW1lLFxuICAgICAgfSk7XG4gICAgICBuZXcgQWxsb3lUcmFjZXNDb25zdHJ1Y3QodGhpcywgJ2FsbG95LXRyYWNlcycsIHsgbmFtZXNwYWNlLCBjb25maWcgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
package/lib/types.d.ts CHANGED
@@ -74,6 +74,7 @@ export interface StorageConfig {
74
74
  lokiWrite: string;
75
75
  thanosStore: string;
76
76
  thanosCompactor: string;
77
+ tempo: string;
77
78
  }
78
79
  /**
79
80
  * Replica counts for high availability
@@ -87,6 +88,7 @@ export interface ReplicaConfig {
87
88
  lokiWrite: number;
88
89
  thanosQuery: number;
89
90
  thanosStore: number;
91
+ tempo: number;
90
92
  }
91
93
  /**
92
94
  * Resource requirements for all components
@@ -105,6 +107,8 @@ export interface ResourceConfig {
105
107
  thanosCompactor: ResourceRequirements;
106
108
  configReloader: ResourceRequirements;
107
109
  thanosSidecar: ResourceRequirements;
110
+ tempo: ResourceRequirements;
111
+ alloyTraces: ResourceRequirements;
108
112
  }
109
113
  /**
110
114
  * Helm chart version configuration
@@ -114,6 +118,23 @@ export interface VersionConfig {
114
118
  loki: string;
115
119
  alloy: string;
116
120
  thanos: string;
121
+ tempo: string;
122
+ }
123
+ /**
124
+ * Tail-sampling policy for the Alloy traces gateway.
125
+ */
126
+ export interface TempoTailSamplingConfig {
127
+ latencyThresholdMs: number;
128
+ probabilisticPercent: number;
129
+ }
130
+ /**
131
+ * Grafana Tempo tracing configuration (opt-in).
132
+ */
133
+ export interface TempoConfig {
134
+ enabled: boolean;
135
+ bucket: string;
136
+ retention: string;
137
+ tailSampling: TempoTailSamplingConfig;
117
138
  }
118
139
  /**
119
140
  * Configuration the package ships sensible defaults for.
@@ -125,6 +146,7 @@ export interface DefaultableConfig {
125
146
  storage: StorageConfig;
126
147
  replicas: ReplicaConfig;
127
148
  resources: ResourceConfig;
149
+ tempo: TempoConfig;
128
150
  }
129
151
  /**
130
152
  * Cluster-specific configuration with no sensible universal default.
package/lib/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgYWxsb2NhdGlvbiBmb3IgYSBjb21wb25lbnQgKENQVSBhbmQgbWVtb3J5KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQWxsb2NhdGlvbiB7XG4gIGNwdTogc3RyaW5nO1xuICBtZW1vcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNvdXJjZSByZXF1ZXN0cyBhbmQgbGltaXRzIGZvciBhIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUmVxdWlyZW1lbnRzIHtcbiAgcmVxdWVzdHM6IFJlc291cmNlQWxsb2NhdGlvbjtcbiAgbGltaXRzOiBSZXNvdXJjZUFsbG9jYXRpb247XG59XG5cbi8qKlxuICogUzMgY29uZmlndXJhdGlvbiBmb3Igb2JqZWN0IHN0b3JhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0NvbmZpZyB7XG4gIGVuZHBvaW50OiBzdHJpbmc7IC8vIEZ1bGwgZW5kcG9pbnQgd2l0aCBwcm90b2NvbCAoZS5nLiwgaHR0cHM6Ly9mc24xLnlvdXItb2JqZWN0c3RvcmFnZS5jb20pXG4gIGVuZHBvaW50Tm9Qcm90b2NvbDogc3RyaW5nOyAvLyBFbmRwb2ludCB3aXRob3V0IHByb3RvY29sIChmb3IgVGhhbm9zKVxuICByZWdpb246IHN0cmluZzsgLy8gUzMgcmVnaW9uIChlLmcuLCBmc24xKVxuICBidWNrZXRzOiB7XG4gICAgdGhhbm9zOiBzdHJpbmc7IC8vIFRoYW5vcyBtZXRyaWNzIGJ1Y2tldFxuICAgIGxva2k6IHN0cmluZzsgLy8gTG9raSBsb2dzIGJ1Y2tldFxuICB9O1xufVxuXG4vKipcbiAqIFNNVFAgY29uZmlndXJhdGlvbiBmb3IgYWxlcnRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbXRwQ29uZmlnIHtcbiAgaG9zdDogc3RyaW5nOyAvLyBTTVRQIHNlcnZlciBob3N0bmFtZVxuICBwb3J0OiBudW1iZXI7IC8vIFNNVFAgc2VydmVyIHBvcnRcbiAgZnJvbTogc3RyaW5nOyAvLyBGcm9tIGVtYWlsIGFkZHJlc3NcbiAgdXNlcm5hbWU/OiBzdHJpbmc7IC8vIFNNVFAgdXNlcm5hbWUgKG9wdGlvbmFsKVxuICBwYXNzd29yZD86IHN0cmluZzsgLy8gU01UUCBwYXNzd29yZCAob3B0aW9uYWwpXG4gIHJlcXVpcmVUbHM6IGJvb2xlYW47IC8vIFJlcXVpcmUgVExTIGZvciBTTVRQXG59XG5cbi8qKlxuICogRG9tYWluIGNvbmZpZ3VyYXRpb24gZm9yIGluZ3Jlc3Nlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkNvbmZpZyB7XG4gIGdyYWZhbmE6IHN0cmluZzsgLy8gR3JhZmFuYSBkb21haW4gKGUuZy4sIGdyYWZhbmEub3BzLmt1cDZzLm5ldClcbn1cblxuLyoqXG4gKiBOYW1lcyBvZiB0aGUgZXh0ZXJuYWwgQ3Jvc3NwbGFuZSBhbmQgRXh0ZXJuYWwgU2VjcmV0cyBPcGVyYXRvciByZXNvdXJjZXMgdGhpc1xuICogc3RhY2sgcmVmZXJlbmNlcy4gVGhlc2UgYXJlIG5vdCBjcmVhdGVkIGJ5IHRoZSBsaWJyYXJ5OyB0aGV5IG11c3QgYWxyZWFkeSBleGlzdFxuICogaW4geW91ciBjbHVzdGVyLiBUaGVyZSBhcmUgbm8gZGVmYXVsdHMg4oCUIGV2ZXJ5IGNvbnN1bWVyIHdpcmVzIGl0cyBvd24gbmFtZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25zQ29uZmlnIHtcbiAgczNQcm92aWRlckNvbmZpZzogc3RyaW5nOyAvLyBDcm9zc3BsYW5lIFByb3ZpZGVyQ29uZmlnIG5hbWUgdGhlIEJ1Y2tldCByZXNvdXJjZXMgcmVjb25jaWxlIGFnYWluc3RcbiAgczNTZWNyZXRTdG9yZTogc3RyaW5nOyAvLyBFU08gQ2x1c3RlclNlY3JldFN0b3JlIG5hbWUgaG9sZGluZyB0aGUgUzMgY3JlZGVudGlhbHNcbiAgczNDcmVkZW50aWFsc0tleTogc3RyaW5nOyAvLyBSZW1vdGUga2V5IGluIHRoZSBzdG9yZSB0byBleHRyYWN0IFMzIGNyZWRlbnRpYWxzIGZyb20gKHByb3ZpZGVzIEFXU19BQ0NFU1NfS0VZX0lEIC8gQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZKVxuICBncmFmYW5hU2VjcmV0U3RvcmU6IHN0cmluZzsgLy8gRVNPIENsdXN0ZXJTZWNyZXRTdG9yZSBuYW1lIGhvbGRpbmcgdGhlIEdyYWZhbmEgYWRtaW4gY3JlZGVudGlhbHNcbiAgZ3JhZmFuYUNyZWRlbnRpYWxzS2V5OiBzdHJpbmc7IC8vIFJlbW90ZSBrZXkgaW4gdGhlIHN0b3JlIHRvIGV4dHJhY3QgdGhlIEdyYWZhbmEgYWRtaW4gY3JlZGVudGlhbHMgZnJvbVxufVxuXG4vKipcbiAqIFJldGVudGlvbiBwb2xpY2llcyBmb3IgbWV0cmljcyBhbmQgbG9nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldGVudGlvbkNvbmZpZyB7XG4gIHByb21ldGhldXM6IHN0cmluZzsgLy8gUHJvbWV0aGV1cyBsb2NhbCByZXRlbnRpb24gKGUuZy4sIFwiM2RcIilcbiAgcHJvbWV0aGV1c1MzUmF3OiBudW1iZXI7IC8vIFRoYW5vcyByYXcgZGF0YSByZXRlbnRpb24gKGRheXMpXG4gIHByb21ldGhldXNTMzVtOiBudW1iZXI7IC8vIFRoYW5vcyA1LW1pbnV0ZSBkb3duc2FtcGxlZCByZXRlbnRpb24gKGRheXMpXG4gIHByb21ldGhldXNTMzFoOiBudW1iZXI7IC8vIFRoYW5vcyAxLWhvdXIgZG93bnNhbXBsZWQgcmV0ZW50aW9uIChkYXlzKVxuICBsb2tpOiBzdHJpbmc7IC8vIExva2kgcmV0ZW50aW9uIChlLmcuLCBcIjc0NGhcIiBmb3IgMzEgZGF5cylcbn1cblxuLyoqXG4gKiBTdG9yYWdlIHNpemVzIGZvciBwZXJzaXN0ZW50IHZvbHVtZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQ29uZmlnIHtcbiAgcHJvbWV0aGV1czogc3RyaW5nOyAvLyBQcm9tZXRoZXVzIFBWQyBzaXplXG4gIGdyYWZhbmE6IHN0cmluZzsgLy8gR3JhZmFuYSBQVkMgc2l6ZVxuICBhbGVydG1hbmFnZXI6IHN0cmluZzsgLy8gQWxlcnRtYW5hZ2VyIFBWQyBzaXplXG4gIGxva2lCYWNrZW5kOiBzdHJpbmc7IC8vIExva2kgYmFja2VuZCBQVkMgc2l6ZVxuICBsb2tpV3JpdGU6IHN0cmluZzsgLy8gTG9raSB3cml0ZSBQVkMgc2l6ZVxuICB0aGFub3NTdG9yZTogc3RyaW5nOyAvLyBUaGFub3Mgc3RvcmUgUFZDIHNpemUgKHBlciByZXBsaWNhKVxuICB0aGFub3NDb21wYWN0b3I6IHN0cmluZzsgLy8gVGhhbm9zIGNvbXBhY3RvciBQVkMgc2l6ZVxufVxuXG4vKipcbiAqIFJlcGxpY2EgY291bnRzIGZvciBoaWdoIGF2YWlsYWJpbGl0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2FDb25maWcge1xuICBwcm9tZXRoZXVzOiBudW1iZXI7IC8vIFByb21ldGhldXMgcmVwbGljYXNcbiAgYWxlcnRtYW5hZ2VyOiBudW1iZXI7IC8vIEFsZXJ0bWFuYWdlciByZXBsaWNhc1xuICBncmFmYW5hOiBudW1iZXI7IC8vIEdyYWZhbmEgcmVwbGljYXMgKHVzdWFsbHkgMSlcbiAgbG9raUJhY2tlbmQ6IG51bWJlcjsgLy8gTG9raSBiYWNrZW5kIHJlcGxpY2FzXG4gIGxva2lSZWFkOiBudW1iZXI7IC8vIExva2kgcmVhZCByZXBsaWNhc1xuICBsb2tpV3JpdGU6IG51bWJlcjsgLy8gTG9raSB3cml0ZSByZXBsaWNhc1xuICB0aGFub3NRdWVyeTogbnVtYmVyOyAvLyBUaGFub3MgUXVlcnkgcmVwbGljYXNcbiAgdGhhbm9zU3RvcmU6IG51bWJlcjsgLy8gVGhhbm9zIFN0b3JlIHJlcGxpY2FzXG59XG5cbi8qKlxuICogUmVzb3VyY2UgcmVxdWlyZW1lbnRzIGZvciBhbGwgY29tcG9uZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ29uZmlnIHtcbiAgcHJvbWV0aGV1czogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIGdyYWZhbmE6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICBhbGVydG1hbmFnZXI6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICBsb2tpQmFja2VuZDogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIGxva2lSZWFkOiBSZXNvdXJjZVJlcXVpcmVtZW50cztcbiAgbG9raVdyaXRlOiBSZXNvdXJjZVJlcXVpcmVtZW50cztcbiAgbG9raUdhdGV3YXk6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICBhbGxveTogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIHRoYW5vc1F1ZXJ5OiBSZXNvdXJjZVJlcXVpcmVtZW50cztcbiAgdGhhbm9zU3RvcmU6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICB0aGFub3NDb21wYWN0b3I6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICAvLyBTaWRlY2FyIGNvbnRhaW5lcnMgKGFkZGVkIDIwMjUtMTEtMTgpXG4gIGNvbmZpZ1JlbG9hZGVyOiBSZXNvdXJjZVJlcXVpcmVtZW50czsgLy8gY29uZmlnLXJlbG9hZGVyIHNpZGVjYXIgKFByb21ldGhldXMsIEFsZXJ0bWFuYWdlciwgQWxsb3kpXG4gIHRoYW5vc1NpZGVjYXI6IFJlc291cmNlUmVxdWlyZW1lbnRzOyAvLyB0aGFub3Mtc2lkZWNhciBmb3IgUHJvbWV0aGV1c1xufVxuXG4vKipcbiAqIEhlbG0gY2hhcnQgdmVyc2lvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkNvbmZpZyB7XG4gIHByb21ldGhldXNTdGFjazogc3RyaW5nOyAvLyBrdWJlLXByb21ldGhldXMtc3RhY2sgY2hhcnQgdmVyc2lvbiAoZS5nLiwgXCJsYXRlc3RcIiBvciBcIjY1LjAuMFwiKVxuICBsb2tpOiBzdHJpbmc7IC8vIExva2kgY2hhcnQgdmVyc2lvblxuICBhbGxveTogc3RyaW5nOyAvLyBBbGxveSBjaGFydCB2ZXJzaW9uXG4gIHRoYW5vczogc3RyaW5nOyAvLyBUaGFub3MgaW1hZ2UgdmVyc2lvbiAoZS5nLiwgXCJ2MC4zNi4xXCIpXG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiB0aGUgcGFja2FnZSBzaGlwcyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IuXG4gKiBJbnRlZ3JhdGlvbiBjaGFydHMgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSAoZGVlcC1tZXJnZWQgb3ZlciBERUZBVUxUX0NPTkZJRykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdGFibGVDb25maWcge1xuICB2ZXJzaW9uczogVmVyc2lvbkNvbmZpZzsgLy8gQ2hhcnQgYW5kIGltYWdlIHZlcnNpb25zXG4gIHJldGVudGlvbjogUmV0ZW50aW9uQ29uZmlnOyAvLyBEYXRhIHJldGVudGlvbiBwb2xpY2llc1xuICBzdG9yYWdlOiBTdG9yYWdlQ29uZmlnOyAvLyBQVkMgc3RvcmFnZSBzaXplc1xuICByZXBsaWNhczogUmVwbGljYUNvbmZpZzsgLy8gUmVwbGljYSBjb3VudHNcbiAgcmVzb3VyY2VzOiBSZXNvdXJjZUNvbmZpZzsgLy8gUmVzb3VyY2UgcmVxdWVzdHMgYW5kIGxpbWl0c1xufVxuXG4vKipcbiAqIENsdXN0ZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiB3aXRoIG5vIHNlbnNpYmxlIHVuaXZlcnNhbCBkZWZhdWx0LlxuICogSW50ZWdyYXRpb24gY2hhcnRzIG11c3QgcHJvdmlkZSB0aGVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlZENsdXN0ZXJDb25maWcge1xuICBuYW1lc3BhY2U6IHN0cmluZzsgLy8gS3ViZXJuZXRlcyBuYW1lc3BhY2VcbiAgZG9tYWluczogRG9tYWluQ29uZmlnOyAvLyBEb21haW4gbmFtZXMgZm9yIGluZ3Jlc3Nlc1xuICBzMzogUzNDb25maWc7IC8vIFMzIG9iamVjdCBzdG9yYWdlIGNvbmZpZ3VyYXRpb25cbiAgc210cDogU210cENvbmZpZzsgLy8gU01UUCBhbGVydGluZyBjb25maWd1cmF0aW9uXG4gIGludGVncmF0aW9uczogSW50ZWdyYXRpb25zQ29uZmlnOyAvLyBOYW1lcyBvZiBleHRlcm5hbCBDcm9zc3BsYW5lL0VTTyByZXNvdXJjZXMgdG8gcmVmZXJlbmNlXG59XG5cbi8qKlxuICogUmVjdXJzaXZlIHBhcnRpYWwg4oCUIGV2ZXJ5IHByb3BlcnR5IChpbmNsdWRpbmcgbmVzdGVkIG9uZXMpIGJlY29tZXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXT86IFRbUF0gZXh0ZW5kcyBvYmplY3QgPyBEZWVwUGFydGlhbDxUW1BdPiA6IFRbUF07XG59O1xuXG4vKipcbiAqIElucHV0IGFjY2VwdGVkIGJ5IG1lcmdlQ29uZmlnOiByZXF1aXJlZCBjbHVzdGVyIHZhbHVlcyBwbHVzIG9wdGlvbmFsLFxuICogZGVlcGx5LXBhcnRpYWwgb3ZlcnJpZGVzIG9mIHRoZSBwYWNrYWdlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgdHlwZSBNb25pdG9yaW5nQ29uZmlnSW5wdXQgPSBSZXF1aXJlZENsdXN0ZXJDb25maWcgJiBEZWVwUGFydGlhbDxEZWZhdWx0YWJsZUNvbmZpZz47XG5cbi8qKlxuICogQ29tcGxldGUsIHJlc29sdmVkIG1vbml0b3Jpbmcgc3RhY2sgY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBNb25pdG9yaW5nQ2hhcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9uaXRvcmluZ0NvbmZpZyBleHRlbmRzIFJlcXVpcmVkQ2x1c3RlckNvbmZpZywgRGVmYXVsdGFibGVDb25maWcge31cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgYWxsb2NhdGlvbiBmb3IgYSBjb21wb25lbnQgKENQVSBhbmQgbWVtb3J5KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQWxsb2NhdGlvbiB7XG4gIGNwdTogc3RyaW5nO1xuICBtZW1vcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNvdXJjZSByZXF1ZXN0cyBhbmQgbGltaXRzIGZvciBhIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUmVxdWlyZW1lbnRzIHtcbiAgcmVxdWVzdHM6IFJlc291cmNlQWxsb2NhdGlvbjtcbiAgbGltaXRzOiBSZXNvdXJjZUFsbG9jYXRpb247XG59XG5cbi8qKlxuICogUzMgY29uZmlndXJhdGlvbiBmb3Igb2JqZWN0IHN0b3JhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0NvbmZpZyB7XG4gIGVuZHBvaW50OiBzdHJpbmc7IC8vIEZ1bGwgZW5kcG9pbnQgd2l0aCBwcm90b2NvbCAoZS5nLiwgaHR0cHM6Ly9mc24xLnlvdXItb2JqZWN0c3RvcmFnZS5jb20pXG4gIGVuZHBvaW50Tm9Qcm90b2NvbDogc3RyaW5nOyAvLyBFbmRwb2ludCB3aXRob3V0IHByb3RvY29sIChmb3IgVGhhbm9zKVxuICByZWdpb246IHN0cmluZzsgLy8gUzMgcmVnaW9uIChlLmcuLCBmc24xKVxuICBidWNrZXRzOiB7XG4gICAgdGhhbm9zOiBzdHJpbmc7IC8vIFRoYW5vcyBtZXRyaWNzIGJ1Y2tldFxuICAgIGxva2k6IHN0cmluZzsgLy8gTG9raSBsb2dzIGJ1Y2tldFxuICB9O1xufVxuXG4vKipcbiAqIFNNVFAgY29uZmlndXJhdGlvbiBmb3IgYWxlcnRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbXRwQ29uZmlnIHtcbiAgaG9zdDogc3RyaW5nOyAvLyBTTVRQIHNlcnZlciBob3N0bmFtZVxuICBwb3J0OiBudW1iZXI7IC8vIFNNVFAgc2VydmVyIHBvcnRcbiAgZnJvbTogc3RyaW5nOyAvLyBGcm9tIGVtYWlsIGFkZHJlc3NcbiAgdXNlcm5hbWU/OiBzdHJpbmc7IC8vIFNNVFAgdXNlcm5hbWUgKG9wdGlvbmFsKVxuICBwYXNzd29yZD86IHN0cmluZzsgLy8gU01UUCBwYXNzd29yZCAob3B0aW9uYWwpXG4gIHJlcXVpcmVUbHM6IGJvb2xlYW47IC8vIFJlcXVpcmUgVExTIGZvciBTTVRQXG59XG5cbi8qKlxuICogRG9tYWluIGNvbmZpZ3VyYXRpb24gZm9yIGluZ3Jlc3Nlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkNvbmZpZyB7XG4gIGdyYWZhbmE6IHN0cmluZzsgLy8gR3JhZmFuYSBkb21haW4gKGUuZy4sIGdyYWZhbmEub3BzLmt1cDZzLm5ldClcbn1cblxuLyoqXG4gKiBOYW1lcyBvZiB0aGUgZXh0ZXJuYWwgQ3Jvc3NwbGFuZSBhbmQgRXh0ZXJuYWwgU2VjcmV0cyBPcGVyYXRvciByZXNvdXJjZXMgdGhpc1xuICogc3RhY2sgcmVmZXJlbmNlcy4gVGhlc2UgYXJlIG5vdCBjcmVhdGVkIGJ5IHRoZSBsaWJyYXJ5OyB0aGV5IG11c3QgYWxyZWFkeSBleGlzdFxuICogaW4geW91ciBjbHVzdGVyLiBUaGVyZSBhcmUgbm8gZGVmYXVsdHMg4oCUIGV2ZXJ5IGNvbnN1bWVyIHdpcmVzIGl0cyBvd24gbmFtZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25zQ29uZmlnIHtcbiAgczNQcm92aWRlckNvbmZpZzogc3RyaW5nOyAvLyBDcm9zc3BsYW5lIFByb3ZpZGVyQ29uZmlnIG5hbWUgdGhlIEJ1Y2tldCByZXNvdXJjZXMgcmVjb25jaWxlIGFnYWluc3RcbiAgczNTZWNyZXRTdG9yZTogc3RyaW5nOyAvLyBFU08gQ2x1c3RlclNlY3JldFN0b3JlIG5hbWUgaG9sZGluZyB0aGUgUzMgY3JlZGVudGlhbHNcbiAgczNDcmVkZW50aWFsc0tleTogc3RyaW5nOyAvLyBSZW1vdGUga2V5IGluIHRoZSBzdG9yZSB0byBleHRyYWN0IFMzIGNyZWRlbnRpYWxzIGZyb20gKHByb3ZpZGVzIEFXU19BQ0NFU1NfS0VZX0lEIC8gQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZKVxuICBncmFmYW5hU2VjcmV0U3RvcmU6IHN0cmluZzsgLy8gRVNPIENsdXN0ZXJTZWNyZXRTdG9yZSBuYW1lIGhvbGRpbmcgdGhlIEdyYWZhbmEgYWRtaW4gY3JlZGVudGlhbHNcbiAgZ3JhZmFuYUNyZWRlbnRpYWxzS2V5OiBzdHJpbmc7IC8vIFJlbW90ZSBrZXkgaW4gdGhlIHN0b3JlIHRvIGV4dHJhY3QgdGhlIEdyYWZhbmEgYWRtaW4gY3JlZGVudGlhbHMgZnJvbVxufVxuXG4vKipcbiAqIFJldGVudGlvbiBwb2xpY2llcyBmb3IgbWV0cmljcyBhbmQgbG9nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldGVudGlvbkNvbmZpZyB7XG4gIHByb21ldGhldXM6IHN0cmluZzsgLy8gUHJvbWV0aGV1cyBsb2NhbCByZXRlbnRpb24gKGUuZy4sIFwiM2RcIilcbiAgcHJvbWV0aGV1c1MzUmF3OiBudW1iZXI7IC8vIFRoYW5vcyByYXcgZGF0YSByZXRlbnRpb24gKGRheXMpXG4gIHByb21ldGhldXNTMzVtOiBudW1iZXI7IC8vIFRoYW5vcyA1LW1pbnV0ZSBkb3duc2FtcGxlZCByZXRlbnRpb24gKGRheXMpXG4gIHByb21ldGhldXNTMzFoOiBudW1iZXI7IC8vIFRoYW5vcyAxLWhvdXIgZG93bnNhbXBsZWQgcmV0ZW50aW9uIChkYXlzKVxuICBsb2tpOiBzdHJpbmc7IC8vIExva2kgcmV0ZW50aW9uIChlLmcuLCBcIjc0NGhcIiBmb3IgMzEgZGF5cylcbn1cblxuLyoqXG4gKiBTdG9yYWdlIHNpemVzIGZvciBwZXJzaXN0ZW50IHZvbHVtZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQ29uZmlnIHtcbiAgcHJvbWV0aGV1czogc3RyaW5nOyAvLyBQcm9tZXRoZXVzIFBWQyBzaXplXG4gIGdyYWZhbmE6IHN0cmluZzsgLy8gR3JhZmFuYSBQVkMgc2l6ZVxuICBhbGVydG1hbmFnZXI6IHN0cmluZzsgLy8gQWxlcnRtYW5hZ2VyIFBWQyBzaXplXG4gIGxva2lCYWNrZW5kOiBzdHJpbmc7IC8vIExva2kgYmFja2VuZCBQVkMgc2l6ZVxuICBsb2tpV3JpdGU6IHN0cmluZzsgLy8gTG9raSB3cml0ZSBQVkMgc2l6ZVxuICB0aGFub3NTdG9yZTogc3RyaW5nOyAvLyBUaGFub3Mgc3RvcmUgUFZDIHNpemUgKHBlciByZXBsaWNhKVxuICB0aGFub3NDb21wYWN0b3I6IHN0cmluZzsgLy8gVGhhbm9zIGNvbXBhY3RvciBQVkMgc2l6ZVxuICB0ZW1wbzogc3RyaW5nOyAvLyBUZW1wbyBXQUwvbG9jYWwtYmxvY2tzIFBWQyBzaXplXG59XG5cbi8qKlxuICogUmVwbGljYSBjb3VudHMgZm9yIGhpZ2ggYXZhaWxhYmlsaXR5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYUNvbmZpZyB7XG4gIHByb21ldGhldXM6IG51bWJlcjsgLy8gUHJvbWV0aGV1cyByZXBsaWNhc1xuICBhbGVydG1hbmFnZXI6IG51bWJlcjsgLy8gQWxlcnRtYW5hZ2VyIHJlcGxpY2FzXG4gIGdyYWZhbmE6IG51bWJlcjsgLy8gR3JhZmFuYSByZXBsaWNhcyAodXN1YWxseSAxKVxuICBsb2tpQmFja2VuZDogbnVtYmVyOyAvLyBMb2tpIGJhY2tlbmQgcmVwbGljYXNcbiAgbG9raVJlYWQ6IG51bWJlcjsgLy8gTG9raSByZWFkIHJlcGxpY2FzXG4gIGxva2lXcml0ZTogbnVtYmVyOyAvLyBMb2tpIHdyaXRlIHJlcGxpY2FzXG4gIHRoYW5vc1F1ZXJ5OiBudW1iZXI7IC8vIFRoYW5vcyBRdWVyeSByZXBsaWNhc1xuICB0aGFub3NTdG9yZTogbnVtYmVyOyAvLyBUaGFub3MgU3RvcmUgcmVwbGljYXNcbiAgdGVtcG86IG51bWJlcjsgLy8gVGVtcG8gcmVwbGljYXNcbn1cblxuLyoqXG4gKiBSZXNvdXJjZSByZXF1aXJlbWVudHMgZm9yIGFsbCBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDb25maWcge1xuICBwcm9tZXRoZXVzOiBSZXNvdXJjZVJlcXVpcmVtZW50cztcbiAgZ3JhZmFuYTogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIGFsZXJ0bWFuYWdlcjogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIGxva2lCYWNrZW5kOiBSZXNvdXJjZVJlcXVpcmVtZW50cztcbiAgbG9raVJlYWQ6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICBsb2tpV3JpdGU6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICBsb2tpR2F0ZXdheTogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIGFsbG95OiBSZXNvdXJjZVJlcXVpcmVtZW50cztcbiAgdGhhbm9zUXVlcnk6IFJlc291cmNlUmVxdWlyZW1lbnRzO1xuICB0aGFub3NTdG9yZTogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIHRoYW5vc0NvbXBhY3RvcjogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIC8vIFNpZGVjYXIgY29udGFpbmVycyAoYWRkZWQgMjAyNS0xMS0xOClcbiAgY29uZmlnUmVsb2FkZXI6IFJlc291cmNlUmVxdWlyZW1lbnRzOyAvLyBjb25maWctcmVsb2FkZXIgc2lkZWNhciAoUHJvbWV0aGV1cywgQWxlcnRtYW5hZ2VyLCBBbGxveSlcbiAgdGhhbm9zU2lkZWNhcjogUmVzb3VyY2VSZXF1aXJlbWVudHM7IC8vIHRoYW5vcy1zaWRlY2FyIGZvciBQcm9tZXRoZXVzXG4gIHRlbXBvOiBSZXNvdXJjZVJlcXVpcmVtZW50czsgLy8gVGVtcG8gKG1vbm9saXRoaWMpXG4gIGFsbG95VHJhY2VzOiBSZXNvdXJjZVJlcXVpcmVtZW50czsgLy8gQWxsb3kgdHJhY2VzIE9UTFAgZ2F0ZXdheVxufVxuXG4vKipcbiAqIEhlbG0gY2hhcnQgdmVyc2lvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkNvbmZpZyB7XG4gIHByb21ldGhldXNTdGFjazogc3RyaW5nOyAvLyBrdWJlLXByb21ldGhldXMtc3RhY2sgY2hhcnQgdmVyc2lvbiAoZS5nLiwgXCJsYXRlc3RcIiBvciBcIjY1LjAuMFwiKVxuICBsb2tpOiBzdHJpbmc7IC8vIExva2kgY2hhcnQgdmVyc2lvblxuICBhbGxveTogc3RyaW5nOyAvLyBBbGxveSBjaGFydCB2ZXJzaW9uXG4gIHRoYW5vczogc3RyaW5nOyAvLyBUaGFub3MgaW1hZ2UgdmVyc2lvbiAoZS5nLiwgXCJ2MC4zNi4xXCIpXG4gIHRlbXBvOiBzdHJpbmc7IC8vIGdyYWZhbmEvdGVtcG8gY2hhcnQgdmVyc2lvblxufVxuXG4vKipcbiAqIFRhaWwtc2FtcGxpbmcgcG9saWN5IGZvciB0aGUgQWxsb3kgdHJhY2VzIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcG9UYWlsU2FtcGxpbmdDb25maWcge1xuICBsYXRlbmN5VGhyZXNob2xkTXM6IG51bWJlcjsgLy8ga2VlcCB0cmFjZXMgc2xvd2VyIHRoYW4gdGhpc1xuICBwcm9iYWJpbGlzdGljUGVyY2VudDogbnVtYmVyOyAvLyBrZWVwIHRoaXMgJSBvZiB0aGUgcmVtYWluaW5nIChcIm5vcm1hbFwiKSB0cmFjZXNcbn1cblxuLyoqXG4gKiBHcmFmYW5hIFRlbXBvIHRyYWNpbmcgY29uZmlndXJhdGlvbiAob3B0LWluKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wb0NvbmZpZyB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47IC8vIGRlZmF1bHQgZmFsc2Ug4oCUIHdoZW4gZmFsc2UsIG5vIFRlbXBvIHJlc291cmNlcyBhcmUgY3JlYXRlZFxuICBidWNrZXQ6IHN0cmluZzsgLy8gUzMgYnVja2V0IGZvciB0cmFjZXMgKHJlcXVpcmVkIHdoZW4gZW5hYmxlZClcbiAgcmV0ZW50aW9uOiBzdHJpbmc7IC8vIGJsb2NrIHJldGVudGlvbiwgZS5nLiAnMzM2aCcgKDE0IGRheXMpXG4gIHRhaWxTYW1wbGluZzogVGVtcG9UYWlsU2FtcGxpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiB0aGUgcGFja2FnZSBzaGlwcyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IuXG4gKiBJbnRlZ3JhdGlvbiBjaGFydHMgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSAoZGVlcC1tZXJnZWQgb3ZlciBERUZBVUxUX0NPTkZJRykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdGFibGVDb25maWcge1xuICB2ZXJzaW9uczogVmVyc2lvbkNvbmZpZzsgLy8gQ2hhcnQgYW5kIGltYWdlIHZlcnNpb25zXG4gIHJldGVudGlvbjogUmV0ZW50aW9uQ29uZmlnOyAvLyBEYXRhIHJldGVudGlvbiBwb2xpY2llc1xuICBzdG9yYWdlOiBTdG9yYWdlQ29uZmlnOyAvLyBQVkMgc3RvcmFnZSBzaXplc1xuICByZXBsaWNhczogUmVwbGljYUNvbmZpZzsgLy8gUmVwbGljYSBjb3VudHNcbiAgcmVzb3VyY2VzOiBSZXNvdXJjZUNvbmZpZzsgLy8gUmVzb3VyY2UgcmVxdWVzdHMgYW5kIGxpbWl0c1xuICB0ZW1wbzogVGVtcG9Db25maWc7IC8vIEdyYWZhbmEgVGVtcG8gdHJhY2luZyAob3B0LWluKVxufVxuXG4vKipcbiAqIENsdXN0ZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiB3aXRoIG5vIHNlbnNpYmxlIHVuaXZlcnNhbCBkZWZhdWx0LlxuICogSW50ZWdyYXRpb24gY2hhcnRzIG11c3QgcHJvdmlkZSB0aGVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlZENsdXN0ZXJDb25maWcge1xuICBuYW1lc3BhY2U6IHN0cmluZzsgLy8gS3ViZXJuZXRlcyBuYW1lc3BhY2VcbiAgZG9tYWluczogRG9tYWluQ29uZmlnOyAvLyBEb21haW4gbmFtZXMgZm9yIGluZ3Jlc3Nlc1xuICBzMzogUzNDb25maWc7IC8vIFMzIG9iamVjdCBzdG9yYWdlIGNvbmZpZ3VyYXRpb25cbiAgc210cDogU210cENvbmZpZzsgLy8gU01UUCBhbGVydGluZyBjb25maWd1cmF0aW9uXG4gIGludGVncmF0aW9uczogSW50ZWdyYXRpb25zQ29uZmlnOyAvLyBOYW1lcyBvZiBleHRlcm5hbCBDcm9zc3BsYW5lL0VTTyByZXNvdXJjZXMgdG8gcmVmZXJlbmNlXG59XG5cbi8qKlxuICogUmVjdXJzaXZlIHBhcnRpYWwg4oCUIGV2ZXJ5IHByb3BlcnR5IChpbmNsdWRpbmcgbmVzdGVkIG9uZXMpIGJlY29tZXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXT86IFRbUF0gZXh0ZW5kcyBvYmplY3QgPyBEZWVwUGFydGlhbDxUW1BdPiA6IFRbUF07XG59O1xuXG4vKipcbiAqIElucHV0IGFjY2VwdGVkIGJ5IG1lcmdlQ29uZmlnOiByZXF1aXJlZCBjbHVzdGVyIHZhbHVlcyBwbHVzIG9wdGlvbmFsLFxuICogZGVlcGx5LXBhcnRpYWwgb3ZlcnJpZGVzIG9mIHRoZSBwYWNrYWdlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgdHlwZSBNb25pdG9yaW5nQ29uZmlnSW5wdXQgPSBSZXF1aXJlZENsdXN0ZXJDb25maWcgJiBEZWVwUGFydGlhbDxEZWZhdWx0YWJsZUNvbmZpZz47XG5cbi8qKlxuICogQ29tcGxldGUsIHJlc29sdmVkIG1vbml0b3Jpbmcgc3RhY2sgY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBNb25pdG9yaW5nQ2hhcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9uaXRvcmluZ0NvbmZpZyBleHRlbmRzIFJlcXVpcmVkQ2x1c3RlckNvbmZpZywgRGVmYXVsdGFibGVDb25maWcge31cbiJdfQ==
package/package.json CHANGED
@@ -66,7 +66,7 @@
66
66
  "publishConfig": {
67
67
  "access": "public"
68
68
  },
69
- "version": "0.1.2",
69
+ "version": "0.2.0",
70
70
  "jest": {
71
71
  "coverageProvider": "v8",
72
72
  "testMatch": [