@rio-cloud/cdk-v2-constructs 6.19.0 → 6.20.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/.jsii +180 -161
- package/docs/API.md +27 -8
- package/docs/changelog.md +15 -0
- package/lib/contributions/team-transport-two/pipeline/datadog-monitors.js +3 -1
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.d.ts +2 -3
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +4 -16
- package/lib/datadogv2/datadog-monitor.d.ts +8 -0
- package/lib/datadogv2/datadog-monitor.js +12 -2
- package/lib/kafka/kafka-topic.d.ts +4 -6
- package/lib/kafka/kafka-topic.js +1 -1
- package/package.json +1 -1
- package/version.json +1 -1
package/docs/API.md
CHANGED
|
@@ -12039,6 +12039,7 @@ const datadogMonitorProps: datadogv2.DatadogMonitorProps = { ... }
|
|
|
12039
12039
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.query">query</a></code> | <code>string</code> | The monitors search query. |
|
|
12040
12040
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.serviceName">serviceName</a></code> | <code>string</code> | The name of the service to which the monitor belongs. |
|
|
12041
12041
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.extraTags">extraTags</a></code> | <code>string[]</code> | Tags to be appended to the monitor in addition to the RIO default tags. |
|
|
12042
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.lowercaseQuery">lowercaseQuery</a></code> | <code>boolean</code> | Convert the query string to lower case. |
|
|
12042
12043
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.notification">notification</a></code> | <code>@rio-cloud/cdk-v2-constructs.datadogv2.INotification</code> | To explicitly disable notifications use {@link NoNotification }. |
|
|
12043
12044
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.optionOverrides">optionOverrides</a></code> | <code>@rio-cloud/cdk-v2-constructs.datadogv2.CfnDatadogMonitorOptions</code> | Specific options to override the default monitor options. |
|
|
12044
12045
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.priority">priority</a></code> | <code>number</code> | The alert priority of the monitor. |
|
|
@@ -12127,6 +12128,24 @@ Tags to be appended to the monitor in addition to the RIO default tags.
|
|
|
12127
12128
|
|
|
12128
12129
|
---
|
|
12129
12130
|
|
|
12131
|
+
##### `lowercaseQuery`<sup>Optional</sup> <a name="lowercaseQuery" id="@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.lowercaseQuery"></a>
|
|
12132
|
+
|
|
12133
|
+
```typescript
|
|
12134
|
+
public readonly lowercaseQuery: boolean;
|
|
12135
|
+
```
|
|
12136
|
+
|
|
12137
|
+
- *Type:* boolean
|
|
12138
|
+
|
|
12139
|
+
Convert the query string to lower case.
|
|
12140
|
+
|
|
12141
|
+
This is useful for passing in AWS resource names into metric queries (metric names are automatically
|
|
12142
|
+
lowercased in Datadog, but the monitor queries not).
|
|
12143
|
+
Defaults to false.
|
|
12144
|
+
|
|
12145
|
+
> [https://github.com/DataDog/datadog-cloudformation-resources/blob/master/datadog-monitors-monitor-handler/docs/cloudformationoptions.md#lowercasequery](https://github.com/DataDog/datadog-cloudformation-resources/blob/master/datadog-monitors-monitor-handler/docs/cloudformationoptions.md#lowercasequery)
|
|
12146
|
+
|
|
12147
|
+
---
|
|
12148
|
+
|
|
12130
12149
|
##### `notification`<sup>Optional</sup> <a name="notification" id="@rio-cloud/cdk-v2-constructs.datadogv2.DatadogMonitorProps.property.notification"></a>
|
|
12131
12150
|
|
|
12132
12151
|
```typescript
|
|
@@ -13280,9 +13299,9 @@ Indicates if the producer will restore the data in case of a disaster or not.
|
|
|
13280
13299
|
|
|
13281
13300
|
### KafkaTopicProps <a name="KafkaTopicProps" id="@rio-cloud/cdk-v2-constructs.KafkaTopicProps"></a>
|
|
13282
13301
|
|
|
13283
|
-
The current service limits
|
|
13302
|
+
The current service limits are configured in the topic manager.
|
|
13284
13303
|
|
|
13285
|
-
|
|
13304
|
+
If you need to increase the limits for your service, please contact CLAID.
|
|
13286
13305
|
|
|
13287
13306
|
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.KafkaTopicProps.Initializer"></a>
|
|
13288
13307
|
|
|
@@ -13451,9 +13470,9 @@ The soft limit is 3 to 30 days but can be increased upon requests.
|
|
|
13451
13470
|
|
|
13452
13471
|
### KafkaTopicProps <a name="KafkaTopicProps" id="@rio-cloud/cdk-v2-constructs.kafka.KafkaTopicProps"></a>
|
|
13453
13472
|
|
|
13454
|
-
The current service limits
|
|
13473
|
+
The current service limits are configured in the topic manager.
|
|
13455
13474
|
|
|
13456
|
-
|
|
13475
|
+
If you need to increase the limits for your service, please contact CLAID.
|
|
13457
13476
|
|
|
13458
13477
|
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.kafka.KafkaTopicProps.Initializer"></a>
|
|
13459
13478
|
|
|
@@ -13622,9 +13641,9 @@ The soft limit is 3 to 30 days but can be increased upon requests.
|
|
|
13622
13641
|
|
|
13623
13642
|
### KafkaTopicV4Props <a name="KafkaTopicV4Props" id="@rio-cloud/cdk-v2-constructs.KafkaTopicV4Props"></a>
|
|
13624
13643
|
|
|
13625
|
-
The current service limits
|
|
13644
|
+
The current service limits are configured in the topic manager.
|
|
13626
13645
|
|
|
13627
|
-
|
|
13646
|
+
If you need to increase the limits for your service, please contact CLAID.
|
|
13628
13647
|
|
|
13629
13648
|
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.KafkaTopicV4Props.Initializer"></a>
|
|
13630
13649
|
|
|
@@ -13809,9 +13828,9 @@ The soft limit is 3 to 30 days but can be increased upon requests.
|
|
|
13809
13828
|
|
|
13810
13829
|
### KafkaTopicV4Props <a name="KafkaTopicV4Props" id="@rio-cloud/cdk-v2-constructs.kafka.KafkaTopicV4Props"></a>
|
|
13811
13830
|
|
|
13812
|
-
The current service limits
|
|
13831
|
+
The current service limits are configured in the topic manager.
|
|
13813
13832
|
|
|
13814
|
-
|
|
13833
|
+
If you need to increase the limits for your service, please contact CLAID.
|
|
13815
13834
|
|
|
13816
13835
|
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.kafka.KafkaTopicV4Props.Initializer"></a>
|
|
13817
13836
|
|
package/docs/changelog.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [6.20.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.19.0&sourceBranch=refs%2Ftags%2Fv6.20.0) (2025-02-27)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* Add lowercaseQuery flag to DatadogMonitor ([b5a3a51](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/b5a3a5101a751890173713a00957173bd198ceb5))
|
|
11
|
+
|
|
12
|
+
## 6.20.0 TODO claid please add release
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* Add `lowercaseQuery` flag to the [`DatadogMonitor`](src/datadogv2/datadog-monitor.ts). This will ensure the `query` parameter is lowercased before creating the datadog monitor.
|
|
17
|
+
This is useful when passing autogenerated names into metric queries, as metric names are lowercased by datadog, but monitor queries are not.
|
|
18
|
+
It is a drop-in replacement for the `upperToLower` lambda function we used before.
|
|
19
|
+
|
|
5
20
|
## [6.19.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.18.3&sourceBranch=refs%2Ftags%2Fv6.19.0) (2025-02-25)
|
|
6
21
|
|
|
7
22
|
|
|
@@ -10,6 +10,7 @@ class DatadogPipelineErrorAlert extends datadogv2_1.DatadogMonitor {
|
|
|
10
10
|
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
|
|
11
11
|
extraTags: ['cicd'],
|
|
12
12
|
query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
|
|
13
|
+
lowercaseQuery: true,
|
|
13
14
|
name: 'CI pipeline status',
|
|
14
15
|
message: '{{#is_alert}}\\nThe CI build is broken\\n{{/is_alert}} \\n\\n{{#is_alert_recovery}}\\nThe CI build works again.\\n{{/is_alert_recovery}}',
|
|
15
16
|
priority: 5,
|
|
@@ -29,6 +30,7 @@ class DataDogPipelineErrorAlertForVulnerabilityChecks extends datadogv2_1.Datado
|
|
|
29
30
|
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
|
|
30
31
|
extraTags: ['cicd'],
|
|
31
32
|
query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
|
|
33
|
+
lowercaseQuery: true,
|
|
32
34
|
name: 'Vulnerability checks',
|
|
33
35
|
message: 'Vulnerabilities detected',
|
|
34
36
|
priority: 3,
|
|
@@ -40,4 +42,4 @@ class DataDogPipelineErrorAlertForVulnerabilityChecks extends datadogv2_1.Datado
|
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
exports.DataDogPipelineErrorAlertForVulnerabilityChecks = DataDogPipelineErrorAlertForVulnerabilityChecks;
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1tb25pdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9kYXRhZG9nLW1vbml0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGtEQUFpSDtBQVNqSCxNQUFhLHlCQUEwQixTQUFRLDBCQUFjO0lBQzNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0Q7UUFDaEcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsWUFBWSxFQUFFLElBQUksMEJBQWMsRUFBRTtZQUNsQyxXQUFXLEVBQUUsd0NBQTRCLENBQUMsV0FBVztZQUNyRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDbkIsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87WUFDbkksY0FBYyxFQUFFLElBQUk7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixPQUFPLEVBQUUsMElBQTBJO1lBQ25KLFFBQVEsRUFBRSxDQUFDO1lBQ1gsZUFBZSxFQUFFO2dCQUNmLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLGVBQWUsRUFBRSxDQUFDO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbEJELDhEQWtCQztBQUVELE1BQWEsK0NBQWdELFNBQVEsMEJBQWM7SUFDakYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQztRQUMxRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsV0FBVyxFQUFFLHdDQUE0QixDQUFDLFdBQVc7WUFDckQsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ25CLEtBQUssRUFBRSxxRUFBcUUsS0FBSyxDQUFDLFlBQVksZUFBZSxLQUFLLENBQUMsU0FBUyxPQUFPO1lBQ25JLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxRQUFRLEVBQUUsQ0FBQztZQUNYLGVBQWUsRUFBRTtnQkFDZixpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixlQUFlLEVBQUUsQ0FBQzthQUNuQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxCRCwwR0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dNb25pdG9yLCBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLCBJTm90aWZpY2F0aW9uLCBOb05vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5cbmludGVyZmFjZSBEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMge1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IFJlZmVyZW5jZTtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIG5vdGlmaWNhdGlvbj86IElOb3RpZmljYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0IGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT21pdDxEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMsICdub3RpZmljYXRpb24nPikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uOiBuZXcgTm9Ob3RpZmljYXRpb24oKSxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgZXh0cmFUYWdzOiBbJ2NpY2QnXSxcbiAgICAgIHF1ZXJ5OiBgbWluKGxhc3RfNW0pOm1pbjpkZXBsb3ltZW50LmNvZGVwaXBlbGluZS5leGVjdXRpb25ze3BpcGVsaW5lX25hbWU6JHtwcm9wcy5waXBlbGluZU5hbWV9LGFjY291bnRfaWQ6JHtwcm9wcy5hY2NvdW50SWR9fSA8IDFgLFxuICAgICAgbG93ZXJjYXNlUXVlcnk6IHRydWUsXG4gICAgICBuYW1lOiAnQ0kgcGlwZWxpbmUgc3RhdHVzJyxcbiAgICAgIG1lc3NhZ2U6ICd7eyNpc19hbGVydH19XFxcXG5UaGUgQ0kgYnVpbGQgaXMgYnJva2VuXFxcXG57ey9pc19hbGVydH19IFxcXFxuXFxcXG57eyNpc19hbGVydF9yZWNvdmVyeX19XFxcXG5UaGUgQ0kgYnVpbGQgd29ya3MgYWdhaW4uXFxcXG57ey9pc19hbGVydF9yZWNvdmVyeX19JyxcbiAgICAgIHByaW9yaXR5OiA1LFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlcXVpcmVGdWxsV2luZG93OiBmYWxzZSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMubm90aWZpY2F0aW9uLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICBleHRyYVRhZ3M6IFsnY2ljZCddLFxuICAgICAgcXVlcnk6IGBtaW4obGFzdF81bSk6bWluOmRlcGxveW1lbnQuY29kZXBpcGVsaW5lLmV4ZWN1dGlvbnN7cGlwZWxpbmVfbmFtZToke3Byb3BzLnBpcGVsaW5lTmFtZX0sYWNjb3VudF9pZDoke3Byb3BzLmFjY291bnRJZH19IDwgMWAsXG4gICAgICBsb3dlcmNhc2VRdWVyeTogdHJ1ZSxcbiAgICAgIG5hbWU6ICdWdWxuZXJhYmlsaXR5IGNoZWNrcycsXG4gICAgICBtZXNzYWdlOiAnVnVsbmVyYWJpbGl0aWVzIGRldGVjdGVkJyxcbiAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlcXVpcmVGdWxsV2luZG93OiBmYWxzZSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as cdk from 'aws-cdk-lib';
|
|
2
1
|
import { Stack, StackProps } from 'aws-cdk-lib';
|
|
3
2
|
import { BuildEnvironment } from 'aws-cdk-lib/aws-codebuild';
|
|
4
3
|
import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
|
|
4
|
+
import * as pipelines from 'aws-cdk-lib/pipelines';
|
|
5
5
|
import { CodeBuildStep } from 'aws-cdk-lib/pipelines';
|
|
6
6
|
import { Construct } from 'constructs';
|
|
7
7
|
import { DatadogAlertType } from '../../../datadog';
|
|
@@ -245,7 +245,7 @@ export declare class PipelineStack extends Stack {
|
|
|
245
245
|
private readonly _nistDataMirrorUrl;
|
|
246
246
|
private readonly _codePipelineType;
|
|
247
247
|
constructor(scope: Construct, id: string, props: PipelineStackProps);
|
|
248
|
-
get mainCodebuildProject():
|
|
248
|
+
get mainCodebuildProject(): pipelines.CodeBuildStep;
|
|
249
249
|
get branchCodeBuildProject(): CodeBuildStep;
|
|
250
250
|
private parseFeatures;
|
|
251
251
|
private createRioCodeBuildProject;
|
|
@@ -258,6 +258,5 @@ export declare class PipelineStack extends Stack {
|
|
|
258
258
|
private createDeployFrontendDeployStep;
|
|
259
259
|
private grantPermissionsForKafkaIntegration;
|
|
260
260
|
private loadBuildSpecFromFile;
|
|
261
|
-
private renamePipelineToLowerCase;
|
|
262
261
|
private tagCodeBuildProject;
|
|
263
262
|
}
|
|
@@ -5,7 +5,6 @@ exports.PipelineStack = exports.PipelineType = void 0;
|
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const fs = require("fs");
|
|
7
7
|
const path = require("path");
|
|
8
|
-
const cdk = require("aws-cdk-lib");
|
|
9
8
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
10
9
|
const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
11
10
|
const codepipeline = require("aws-cdk-lib/aws-codepipeline");
|
|
@@ -26,7 +25,6 @@ const datadog_monitors_1 = require("./datadog-monitors");
|
|
|
26
25
|
const monitoring_deploy_step_1 = require("./monitoring-deploy-step");
|
|
27
26
|
const rio = require("../../../index");
|
|
28
27
|
const index_1 = require("../../../index");
|
|
29
|
-
const watchful_1 = require("../../../watchful");
|
|
30
28
|
var PipelineType;
|
|
31
29
|
(function (PipelineType) {
|
|
32
30
|
/**
|
|
@@ -111,7 +109,7 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
111
109
|
product: index_1.ClaidometerProduct.CDK_CONTRIBUTION,
|
|
112
110
|
packageName,
|
|
113
111
|
feature,
|
|
114
|
-
version: '0.0.
|
|
112
|
+
version: '0.0.27',
|
|
115
113
|
});
|
|
116
114
|
}
|
|
117
115
|
get mainCodebuildProject() {
|
|
@@ -252,7 +250,7 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
252
250
|
if (this._features?.enablePipelineMonitors) {
|
|
253
251
|
new datadog_monitors_1.DatadogPipelineErrorAlert(this, 'DatadogPipelineErrorMonitor', {
|
|
254
252
|
serviceName: props.serviceName,
|
|
255
|
-
pipelineName:
|
|
253
|
+
pipelineName: pipeline.pipelineName,
|
|
256
254
|
accountId: this.account,
|
|
257
255
|
});
|
|
258
256
|
}
|
|
@@ -314,7 +312,7 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
314
312
|
if (this._features?.enablePipelineMonitors) {
|
|
315
313
|
new datadog_monitors_1.DataDogPipelineErrorAlertForVulnerabilityChecks(this, 'DataDogPipelineErrorForVulnerabilityChecksMonitor', {
|
|
316
314
|
serviceName: props.serviceName,
|
|
317
|
-
pipelineName:
|
|
315
|
+
pipelineName: vulnerabilityPipeline.pipelineName,
|
|
318
316
|
accountId: this.account,
|
|
319
317
|
notification: props.vulnerabilityNotification,
|
|
320
318
|
});
|
|
@@ -399,16 +397,6 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
399
397
|
}
|
|
400
398
|
return aws_codebuild_1.BuildSpec.fromObject(yaml.load(fs.readFileSync(buildSpecPath, { encoding: 'utf-8' })));
|
|
401
399
|
}
|
|
402
|
-
renamePipelineToLowerCase(pipeline) {
|
|
403
|
-
const upperToLowerCr = new cdk.CustomResource(this, `${pipeline.node.id}-UpperToLower`, {
|
|
404
|
-
resourceType: 'Custom::UpperToLower',
|
|
405
|
-
serviceToken: watchful_1.UpperToLower.getOrCreate(this).provider.serviceToken,
|
|
406
|
-
properties: {
|
|
407
|
-
Upper: pipeline.pipelineName,
|
|
408
|
-
},
|
|
409
|
-
});
|
|
410
|
-
return upperToLowerCr.getAtt('Lower');
|
|
411
|
-
}
|
|
412
400
|
tagCodeBuildProject(project, key, value) {
|
|
413
401
|
if (project) {
|
|
414
402
|
aws_cdk_lib_1.Tags.of(project.project).add(key, value);
|
|
@@ -418,4 +406,4 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
418
406
|
exports.PipelineStack = PipelineStack;
|
|
419
407
|
_a = JSII_RTTI_SYMBOL_1;
|
|
420
408
|
PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
|
|
421
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1DQUFtQztBQUNuQyw2Q0FBOEY7QUFDOUYsNkRBQTRHO0FBQzVHLDZEQUE2RDtBQUU3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpREFBb0Q7QUFFcEQseUNBQXlDO0FBQ3pDLCtDQUFxRDtBQUNyRCwyQ0FBMkM7QUFFM0MsbURBQW1EO0FBQ25ELHFEQUEwRTtBQUUxRSxnQ0FBZ0M7QUFDaEMsMkRBQWtEO0FBQ2xELG1EQUFzRDtBQUN0RCw2Q0FBaUY7QUFDakYseURBQWdIO0FBQ2hILHFFQUE2RTtBQUc3RSxzQ0FBc0M7QUFDdEMsMENBQWlFO0FBQ2pFLGdEQUFpRDtBQTZMakQsSUFBWSxZQXNDWDtBQXRDRCxXQUFZLFlBQVk7SUFFdEI7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsbURBQW1DLENBQUE7SUFDbkM7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILCtEQUErQyxDQUFBO0lBQy9DOzs7OztPQUtHO0lBQ0gsbUVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQXRDVyxZQUFZLDRCQUFaLFlBQVksUUFzQ3ZCO0FBY0QsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFnQnRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLCtCQUErQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFN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bmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBSZWZlcmVuY2UsIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBTdGFja1Byb3BzLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRTcGVjLCBDb21wdXRlVHlwZSwgTGludXhMYW1iZGFCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgeyBJUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGNvZGVwaXBlbGluZV9hY3Rpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJSG9zdGVkWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBCdWNrZXQsIElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0ICogYXMgcGlwZWxpbmVzIGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb2RlQnVpbGRTdGVwLCBDb2RlUGlwZWxpbmVTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICcuL2FwcGxpY2F0aW9uLXN0YWdlJztcbmltcG9ydCB7IFJpb0NvZGVCdWlsZFByb2plY3QgfSBmcm9tICcuL2J1aWxkLXByb2plY3QnO1xuaW1wb3J0IHsgY3JlYXRlTWFpbkJ1aWxkU3BlYywgY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkU3BlYyB9IGZyb20gJy4vYnVpbGRzcGVjcyc7XG5pbXBvcnQgeyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0LCBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyB9IGZyb20gJy4vZGF0YWRvZy1tb25pdG9ycyc7XG5pbXBvcnQgeyBSaW9DYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAgfSBmcm9tICcuL21vbml0b3JpbmctZGVwbG95LXN0ZXAnO1xuaW1wb3J0IHsgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cnO1xuaW1wb3J0IHsgSU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgKiBhcyByaW8gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ2xhaWRvbWV0ZXIsIENsYWlkb21ldGVyUHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IFVwcGVyVG9Mb3dlciB9IGZyb20gJy4uLy4uLy4uL3dhdGNoZnVsJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU2NoZWR1bGVzUHJvcHMge1xuICByZWFkb25seSBtYWluUGlwZWxpbmU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlQaXBlbGluZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgKiAtIFRoaXMgaGFzIHRvIGJlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHJlcG9zaXRvcnkgYXMgdGhlIHMzIHRyaWdnZXIgZmlsZSBjcmVhdGVkIGJ5IHRoZSBiaXRidWNrZXQtaW50ZWdyYXRpb24gdXNlcyB0aGlzIGFzIGEgcHJlZml4XG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRVJWSUNFX05BTUUgaW4gdGhlIENvZGVCdWlsZFN0ZXBcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnlcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIHN0YWNrTmFtZSBwcm9wZXJ0eSBpbiB0aGUgQXBwU3RhY2tQcm9wcyBpbiB0aGUgYXBwU3RhY2tGYWN0b3J5LiBJLmUuIHRoZSBzdGFjayBpcyBuYW1lZCBhZnRlciB0aGUgc2VydmljZVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBoYW5kZWQgb3ZlciB0byBhbGwgRGF0YWRvZyBtb25pdG9yc1xuICAgKiAtIFJJTyBjb252ZW50aW9uIGlzIHRoYXQgdXBsb2FkZWQgbGljZW5zZS1jaGVjay1maWxlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2UsIGkuZS4gc2VydmljZU5hbWUudHh0XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciBmb3IgYXBwU3RhY2sgdG8gYmUgZGVwbG95ZWQuXG4gICAqXG4gICAqIFRoaXMgYWN0cyBhcyBhIHdyYXBwZXIgZm9yIGFsbCByZXNvdXJjZXMgeW91IHdhbnQgdG8gZGVwbG95IHZpYSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSBhcHBTdGFja0ZhY3Rvcnk6IElBcHBTdGFja0ZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hpY2gga2luZCBvZiBwaXBlbGluZSBpcyBkZXBsb3llZC5cbiAgICpcbiAgICogVXNlIHRoZSBmZWF0dXJlcyB0byBjb21iaW5lIGRpZmZlcmVudCBvcGluaW9uYXRlZCwgUklPLXNwZWNpZmljIHBpcGVsaW5lIGZlYXR1cmVzIHN1Y2ggYXMgYWRkaW5nIGEgYnJhbmNoIHBpcGVsaW5lIG9yIHN1cHBvcnRpbmcgS2Fma2EuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IFBpcGVsaW5lRmVhdHVyZXM7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYGZlYXR1cmVzYCBwcm9wZXJ0eSBpbnN0ZWFkLiBGb3Igbm93LCB0aGUgcGlwZWxpbmUgdHlwZXMgYXJlIG1hcHBlZCB0byB0aGUgZmVhdHVyZXMuXG4gICAqIERlZmluZXMgd2hpY2gga2luZCBvZiBwaXBlbGluZSBpcyBkZXBsb3llZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lVHlwZT86IFBpcGVsaW5lVHlwZTtcblxuICAvKipcbiAgICogRGVmaW5lcyBob3cgb2Z0ZW4gdGhlIHBpcGVsaW5lIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5LiBJcyBkZWZpbmVkIHZpYSBhIGNyb24gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvU2NoZWR1bGVkRXZlbnRzLmh0bWxcbiAgICpcbiAgICogRGVmYXVsdCB2YWx1ZXM6XG4gICAqIC0gbWFpbiBwaXBlbGluZTogY3JvbigwIDkgPyAqIDIjMSAqKVxuICAgKiAtIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmU6IGNyb24oMCA1ID8gKiBNT04tRlJJICopXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVNjaGVkdWxlcz86IFBpcGVsaW5lU2NoZWR1bGVzUHJvcHM7XG5cblxuICAvKipcbiAgICogUGF0aCB0byBzZWNyZXRzIGZpbGUgY29udGFpbmluZyBlbmNyeXB0ZWQgc2VjcmV0cy5cbiAgICpcbiAgICogVGhlIFJpb1NlY3JldHNEZXBsb3lTdGVwIGlzIGFkZGVkIHByaW9yIHRvIGRlcGxveW1lbnQgb2YgdGhlIEFwcFN0YWNrIGlmIGEgcGF0aCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogTm8gc2VjcmV0cyBhcmUgZGVwbG95ZWQgaWYgbm8gcGF0aCBpcyBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHNEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcztcblxuICAvKipcbiAgICogQ29kZUJ1aWxkIG9wdGlvbnMgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUJ1aWxkT3B0aW9ucz86IENvZGVCdWlsZE9wdGlvbnM7XG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB0aGUgY2FwYWJpbGl0eSBtb25pdG9yaW5nIGRlcGxveSBzdGVwIGlzIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgdGhlIGB2dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKiBJZiBgb3BzZ2VuaWVgIGlzIHNwZWNpZmllZCwgYW4gRXhjZXB0aW9uIGlzIHRocm93biwgYXMgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nQWxlcnRUeXBlPzogRGF0YWRvZ0FsZXJ0VHlwZTtcbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiB0eXBlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBtb25pdG9yLiBEZWZhdWx0cyB0byBzbGFjay5cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24/OiBJTm90aWZpY2F0aW9uO1xuICAvKipcbiAgICogQ29kZVBpcGVsaW5lIFBpcGVsaW5lVHlwZSAoVjEgb3IgVjIpLiBEZWZhdWx0cyB0byBWMS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVQaXBlbGluZVR5cGU/OiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiBcXHsgY3JlYXRlOiAoY29uc3RydWN0LCBwcm9wcykgPVxcPiBuZXcgU3RhY2soY29uc3RydWN0LCAnQXBwU3RhY2snLCBwcm9wcykgXFx9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3RvcnkgXFx7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFnZVByb3BzKSBcXHtcbiAqICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAqICAgICAvLyB5b3VyIHN0YWdlIGRlZmluaXRpb25cbiAqICAgXFx9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIFxce1xuICogICAgIC8vIGFwcCBzdGFjayBpbml0aWF0aW9uIGdvZXMgaW4gaGVyZVxuICogICBcXH1cbiAqIFxcfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHBhcmVudCBjb25zdHJ1Y3QgZm9yIHRoZSBhcHAgc3RhY2tcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIGFwcCBzdGFja3MgcHJvcGVydGllc1xuICAgKi9cbiAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXAgXFx7ZGlyZWN0b3J5OiBmaWxlbmFtZXNcXH0gY29udGFpbmluZyAgLmphciBvciAuemlwIGZpbGVzIGNyZWF0ZWQgaW4gbWFpbiBidWlsZCBzdGVwIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBtb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXIgYnVja2V0LCBlLmcuXG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAnYXZhaWxhYmlsaXR5LW1vbml0b3JpbmcvYnVpbGQvbGlicyc6IFsnZm9vLWF2YWlsYWJpbGl0eS5qYXInXSxcbiAgICogICdwZXJmb3JtYW5jZS1tb25pdG9yaW5nL2J1aWxkL2xpYnMnOiBbJ2FwaS1jaGVjay56aXAnLCAnZm9vLXBlcmZvcm1hbmNlLmphciddLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZ0FydGlmYWN0czogeyBbZGlyZWN0b3J5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lRmVhdHVyZXMge1xuICAvKipcbiAgICogQ3JlYXRlIGEgYnJhbmNoIHBpcGVsaW5lIHVzZWQgYnkgcmVub3ZhdGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaFBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUgdG8gc2NhbiBkZXBlbmRlbmNpZXMgZm9yIHZ1bG5lcmFiaWxpdGllcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIGdyYWRsZSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjaGVja0xpY2Vuc2VzXCJcbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXJcbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCJcbiAgICovXG4gIHJlYWRvbmx5IGdyYWRsZUJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIG5wbSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIHJ1biBsaW50ZXIgdmlhIGNvbW1hbmQgXCJucG0gcnVuIGxpbnRcIlxuICAgKiAtIHJ1biB0ZXN0cyB2aWEgY29tbWFuZCBcIm5wbSBydW4gdGVzdDpjaVwiXG4gICAqIC0gcnVuIGEgbGljZW5zZSBjaGVjayBieSBjYWxsaW5nIHRoZSBzY3JpcHQgXCJjaGVjay1vc3MtbGljZW5zZXMuc2hcIiAoZnJvbSB0aGUgUklPIGZyb250ZW5kIHRlbXBsYXRlKVxuICAgKiAtIGJ1aWxkIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQnVpbGQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQWRkIHJlcXVpcmVkIHN0ZXBzIGFuZCBwZXJtaXNzaW9ucyB0byBzdXBwb3J0IEthZmthLiBDdXJyZW50bHksIHRoaXMgcmVxdWlyZXMgYGdyYWRsZUJ1aWxkYCB0byBiZSBzZXQgdG8gYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkga2Fma2FJbnRlZ3JhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTMyBCdWNrZXQgdG8gZGVwbG95IGZyb250ZW5kIHRvLiBSZXF1aXJlcyBgbnBtQnVpbGRgIHRvIGJlIHNldCB0byBgdHJ1ZWAuIElmIHNldCwgdGhlIG91dHB1dCBvZiB0aGUgbnBtIGJ1aWxkIGlzIGRlcGxveWVkIHRvIHRoZSBwcm92aWRlZCBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBmcm9udGVuZEJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGNvbW1hbmRzIGZvciBtYWluIGFuZCBicmFuY2ggcGlwZWxpbmUuIFdpbGwgYmUgYWRkZWQgYWZ0ZXIgYWxsIGJ1aWxkICYgdGVzdCBjb21tYW5kcywgYmVmb3JlIHRoZSBpbmZyYXN0cnVjdHVyZSBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxCdWlsZENvbW1hbmRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gZmFsc2UsIG5vIERhdGFkb2cgbW9uaXRvcnMgZm9yIG1haW4gYW5kIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmVzIHdpbGwgYmUgY3JlYXRlZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBQaXBlbGluZVR5cGUge1xuXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrLiBCZSBhd2FyZTogVGhlIHByb3ZpZGVkIHNlcnZpY2Ugd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gS2Fma2EuXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmb3IgYSBncmFkbGUgcHJvamVjdC4gVGhpcyBidWlsZHNwZWMueWFtbCBpcyB1c2VkIGZvciBib3RoIHRoZSBtYWluIGFuZFxuICAgKiBicmFuY2ggcGlwZWxpbmUgYW5kIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgc3RlcHNcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjaGVja0xpY2Vuc2VzXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGNyZWF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRvIG1ha2UgVExTIGNvbW11bmljYXRpb24gcG9zc2libGUsIGUuZy4gd2l0aCBhIGxvYWRiYWxhbmNlci5cbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKi9cbiAgU1RBTkRBUkRfR1JBRExFID0gJ1NUQU5EQVJEX0dSQURMRScsXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrIHdpdGggYWRkaXRpb25hbCBzdGVwcyBuZWVkZWQgdG8gYWNjZXNzIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2hlY2tMaWNlbnNlc1wiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gcmVxdWVzdCBhIGNlcnRpZmljYXRlIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IEthZmthIHZpYSBtdXR1YWwgVExTXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRV9LQUZLQSA9ICdTVEFOREFSRF9HUkFETEVfS0FGS0EnLFxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIHRvIHN5bnRoZXNpemUgdGhlIEFwcFN0YWNrLlxuICAgKiBObyBicmFuY2ggb3IgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkUgPSAnU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkUnLFxufVxuXG4vKipcbiAqIEBwYXJhbSBwYXJ0aWFsQnVpbGRTcGVjUGF0aCAtIFBhdGggdG8gYSBjdXN0b20gYnVpbGQtc3BlYyBmaWxlIHRvIHVzZSBmb3IgdGhlIG1haW4gYW5kIGJyYW5jaCBwaXBlbGluZS5cbiAqIEEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZml0dGluZyB0aGUgcGlwZWxpbmVUeXBlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIGJ1aWxkRW52aXJvbm1lbnQgLSBDdXN0b20gQ29kZUJ1aWxkIGJ1aWxkIGVudmlyb25tZW50IG92ZXJyaWRpbmcgdGhlIHJpby1zcGVjaWZpYyBkZWZhdWx0cy4gVGhlIGRlZmF1bHRzIGFyZTpcbiAqICAgICAgICAgIGJ1aWxkSW1hZ2U6IEFNQVpPTl9MSU5VWF8yXzVcbiAqICAgICAgICAgIGNvbXB1dGVUeXBlOiBMQVJHRVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGRFbnZpcm9ubWVudD86IEJ1aWxkRW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQaXBlbGluZVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFpbkNvZGVCdWlsZFByb2plY3Q6IENvZGVCdWlsZFN0ZXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JyYW5jaENvZGVCdWlsZFByb2plY3Q6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1Y2tldDogSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVCdWNrZXQ6IElCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RlZFpvbmU6IElIb3N0ZWRab25lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1hc3RlclRyaWdnZXJGaWxlOiBDb2RlUGlwZWxpbmVTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0QnJhbmNoVHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29zc0xpY2Vuc2VzQnVja2V0OiBJQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZDogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWNjb3VudE5hbWVQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25pc3REYXRhTWlycm9yVXJsOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb2RlUGlwZWxpbmVUeXBlOiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuX2ZlYXR1cmVzID0gdGhpcy5wYXJzZUZlYXR1cmVzKHByb3BzKTtcblxuICAgIC8vIHBvcHVsYXRlIGV4dGVybmFsIHBhcmFtZXRlcnNcbiAgICB0aGlzLl9idWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ1RyaWdnZXJCdWNrZXQnLCBGbi5pbXBvcnRWYWx1ZSgnYml0YnVja2V0LWludGVncmF0aW9uLXMzLWJ1Y2tldCcpKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0NhY2hlQnVja2V0Jywge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gICAgICAgICAgYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQWZ0ZXI6IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMuX2hvc3RlZFpvbmUgPSByaW8uUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdEhvc3RlZFpvbmUodGhpcyk7XG4gICAgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczModGhpcy5fYnVja2V0LCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5Lk1BU1RFUl9SRVBPfWAsIHsgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyB9KTtcbiAgICB0aGlzLl9pbnB1dEJyYW5jaFRyaWdnZXJGaWxlID0gcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZS5zMyh0aGlzLl9idWNrZXQsIGAke3Byb3BzLnNlcnZpY2VOYW1lfS90cmlnZ2VyLyR7cmlvLlRyaWdnZXJLZXkuQlJBTkNIX1JFUE99YCwgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH0pO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsIHsgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyB9KTtcbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnT3NzTGljZW5zZXNCdWNrZXQnLCB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5zdHJpbmdWYWx1ZSk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdLZXlzdG9yZVBhc3N3b3JkJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogYC9jb25maWcvJHtwcm9wcy5zZXJ2aWNlTmFtZX0vc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pO1xuICAgIHRoaXMuX2FjY291bnROYW1lUGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZSh0aGlzLCAnQWNjb3VudE5hbWVQYXJhbWV0ZXInLCAnL2NvbmZpZy9hY2NvdW50L25hbWUnKTtcbiAgICB0aGlzLl9uaXN0RGF0YU1pcnJvclVybCA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgJ05pc3REYXRhTWlycm9yVXJsJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvbmlzdC1kYXRhLW1pcnJvci91cmwnLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9KTtcblxuICAgIHRoaXMuX2NvZGVQaXBlbGluZVR5cGUgPSBwcm9wcy5jb2RlUGlwZWxpbmVUeXBlID8/IGNvZGVwaXBlbGluZS5QaXBlbGluZVR5cGUuVjE7XG5cbiAgICB0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdCA9IHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdCgnTWFpbkJ1aWxkJywgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSwgcHJvcHMpO1xuICAgIHRoaXMuYWRkTWFpblBpcGVsaW5lKHByb3BzLCB0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdCk7XG5cbiAgICBpZiAodGhpcy5fZmVhdHVyZXMuYnJhbmNoUGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3QgPSB0aGlzLmNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoJ0JyYW5jaEJ1aWxkJywgdGhpcy5faW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSwgcHJvcHMpO1xuICAgICAgdGhpcy5hZGRCcmFuY2hQaXBlbGluZSh0aGlzLl9icmFuY2hDb2RlQnVpbGRQcm9qZWN0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLnZ1bG5lcmFiaWxpdHlQaXBlbGluZSkge1xuICAgICAgdGhpcy5hZGRWdWxuZXJhYmlsaXR5UGlwZWxpbmUocHJvcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgICBuZXcgQ2xhaWRvbWV0ZXIodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGZlYXR1cmUsXG4gICAgICB2ZXJzaW9uOiAnMC4wLjI1JyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFpbkNvZGVidWlsZFByb2plY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21haW5Db2RlQnVpbGRQcm9qZWN0O1xuICB9XG5cbiAgcHVibGljIGdldCBicmFuY2hDb2RlQnVpbGRQcm9qZWN0KCk6IENvZGVCdWlsZFN0ZXAge1xuICAgIGlmICh0aGlzLl9icmFuY2hDb2RlQnVpbGRQcm9qZWN0ID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBwaXBlbGluZSB0eXBlIHlvdSBoYXZlIHNlbGVjdGVkIGRvZXMgbm90IHN1cHBvcnQgYSBicmFuY2ggY29kZWJ1aWxkIHByb2plY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRmVhdHVyZXMocHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcyk6IFBpcGVsaW5lRmVhdHVyZXMge1xuICAgIGlmIChwcm9wcy5waXBlbGluZVR5cGUgJiYgcHJvcHMuZmVhdHVyZXMpIHtcbiAgICAgIHRocm93IEVycm9yKCdZb3UgY2Fubm90IHByb3ZpZGUgYm90aCBhIHBpcGVsaW5lVHlwZSBhbmQgZmVhdHVyZXMuIFBsZWFzZSB1c2UgZmVhdHVyZXMgb25seS4nKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzPy5rYWZrYUludGVncmF0aW9uICYmICFwcm9wcy5mZWF0dXJlcz8uZ3JhZGxlQnVpbGQpIHtcbiAgICAgIHRocm93IEVycm9yKCdLYWZrYSBpbnRlZ3JhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgcGlwZWxpbmVzIHdpdGggZ3JhZGxlIGJ1aWxkJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcz8uZnJvbnRlbmRCdWNrZXROYW1lICYmICFwcm9wcy5mZWF0dXJlcz8ubnBtQnVpbGQpIHtcbiAgICAgIHRocm93IEVycm9yKCdGcm9udGVuZCBidWNrZXQgbmFtZSBjYW4gb25seSBiZSBzZXQgd2hlbiBucG0gYnVpbGQgaXMgZW5hYmxlZCcpO1xuICAgIH1cbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlKSB7XG4gICAgICBzd2l0Y2ggKHByb3BzLnBpcGVsaW5lVHlwZSkge1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9HUkFETEU6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgZ3JhZGxlQnVpbGQ6IHRydWUsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfR1JBRExFX0tBRktBOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicmFuY2hQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIGdyYWRsZUJ1aWxkOiB0cnVlLFxuICAgICAgICAgICAgbnBtQnVpbGQ6IGZhbHNlLFxuICAgICAgICAgICAga2Fma2FJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkU6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogZmFsc2UsXG4gICAgICAgICAgICBncmFkbGVCdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyYW5jaFBpcGVsaW5lOiBwcm9wcy5mZWF0dXJlcz8uYnJhbmNoUGlwZWxpbmUgPz8gdHJ1ZSxcbiAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogcHJvcHMuZmVhdHVyZXM/LnZ1bG5lcmFiaWxpdHlQaXBlbGluZSA/PyB0cnVlLFxuICAgICAgZ3JhZGxlQnVpbGQ6IHByb3BzLmZlYXR1cmVzPy5ncmFkbGVCdWlsZCA/PyBmYWxzZSxcbiAgICAgIG5wbUJ1aWxkOiBwcm9wcy5mZWF0dXJlcz8ubnBtQnVpbGQgPz8gZmFsc2UsXG4gICAgICBrYWZrYUludGVncmF0aW9uOiBwcm9wcy5mZWF0dXJlcz8ua2Fma2FJbnRlZ3JhdGlvbiA/PyBmYWxzZSxcbiAgICAgIGZyb250ZW5kQnVja2V0TmFtZTogcHJvcHMuZmVhdHVyZXM/LmZyb250ZW5kQnVja2V0TmFtZSxcbiAgICAgIGFkZGl0aW9uYWxCdWlsZENvbW1hbmRzOiBwcm9wcy5mZWF0dXJlcz8uYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHMsXG4gICAgICBlbmFibGVQaXBlbGluZU1vbml0b3JzOiBwcm9wcy5mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycyA/PyB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QobmFtZTogc3RyaW5nLCB0cmlnZ2VyRmlsZTogQ29kZVBpcGVsaW5lU291cmNlLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBSaW9Db2RlQnVpbGRQcm9qZWN0KHRoaXMsIG5hbWUsIHtcbiAgICAgIGlucHV0OiB0cmlnZ2VyRmlsZSxcbiAgICAgIGNka091dERpcmVjdG9yeTogJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB8fCBjcmVhdGVNYWluQnVpbGRTcGVjKHRoaXMuX2ZlYXR1cmVzKSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IHRoaXMuX2hvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZE1haW5QaXBlbGluZShwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzLCBtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXApIHtcbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBjb2RlcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ1BpcGVsaW5lJywge1xuICAgICAgYXJ0aWZhY3RCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgICAgcGlwZWxpbmVUeXBlOiB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvZGVQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHBpcGVsaW5lLCAnQ29kZVBpcGVsaW5lJywge1xuICAgICAgY29kZVBpcGVsaW5lOiBwaXBlbGluZSxcbiAgICAgIHN5bnRoOiBtYWluQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb25Db2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgYnVpbGRJbWFnZTogTGludXhMYW1iZGFCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yMDIzX05PREVfMjAsXG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFRhZ3Mub2YocGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICdidWlsZCcpO1xuXG4gICAgY29uc3Qgc3RyaXBBc3NldHNTdGVwID0gdGhpcy5jcmVhdGVTdHJpcEFzc2V0c1N0ZXAoY29kZVBpcGVsaW5lKTtcbiAgICBjb2RlUGlwZWxpbmUuYWRkV2F2ZSgnQmVmb3JlRGVwbG95JywgeyBwcmU6IFtzdHJpcEFzc2V0c1N0ZXBdIH0pO1xuXG4gICAgY29uc3QgY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwID0gdGhpcy5jcmVhdGVDYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAobWFpbkJ1aWxkLCBwcm9wcyk7XG4gICAgY29uc3Qgc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA9IHRoaXMuY3JlYXRlU2VjcmV0c0RlcGxveVN0ZXAocHJvcHMpO1xuICAgIGNvbnN0IGZyb250ZW5kRGVwbG95U3RlcCA9IHRoaXMuY3JlYXRlRGVwbG95RnJvbnRlbmREZXBsb3lTdGVwKG1haW5CdWlsZCk7XG4gICAgY29uc3QgcG9zdFN0ZXBzID0gW107XG4gICAgaWYgKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCkge1xuICAgICAgcG9zdFN0ZXBzLnB1c2goY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKTtcbiAgICB9XG4gICAgaWYgKGZyb250ZW5kRGVwbG95U3RlcCkge1xuICAgICAgcG9zdFN0ZXBzLnB1c2goZnJvbnRlbmREZXBsb3lTdGVwKTtcbiAgICB9XG5cbiAgICBjb2RlUGlwZWxpbmUuYWRkU3RhZ2UobmV3IEFwcGxpY2F0aW9uKHRoaXMsICdEZXBsb3lBcHBsaWNhdGlvblN0YWNrcycsIHtcbiAgICAgIGFwcFN0YWNrRmFjdG9yeTogcHJvcHMuYXBwU3RhY2tGYWN0b3J5LFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbjogcHJvY2Vzcy5lbnYuUElQRUxJTkVfRVhFQ1VUSU9OX0lEID8/ICdQSVBFTElORV9FWEVDVVRJT05fSUQgbm90IHNldCcsXG4gICAgfSksIHtcbiAgICAgIHByZTogc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA/IFtzZWNyZXRzRGVwbG95U3RlcFByb3BzXSA6IHVuZGVmaW5lZCxcbiAgICAgIHBvc3Q6IHBvc3RTdGVwcyxcbiAgICB9KTtcblxuICAgIGNvZGVQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3Qoc3RyaXBBc3NldHNTdGVwLCAncHJvamVjdF90eXBlJywgJ3N0cmlwX2Fzc2V0cycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChzZWNyZXRzRGVwbG95U3RlcFByb3BzLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9zZWNyZXRzJyk7XG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KG1haW5CdWlsZCwgJ3Byb2plY3RfdHlwZScsICdidWlsZCcpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAsICdwcm9qZWN0X3R5cGUnLCAnZGVwbG95X2NhcGFiaWxpdHlfbW9uaXRvcmluZycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChmcm9udGVuZERlcGxveVN0ZXAsICdwcm9qZWN0X3R5cGUnLCAnZGVwbG95X2Zyb250ZW5kJyk7XG5cbiAgICBpZiAoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKSB7XG4gICAgICBjb25zdCBtb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0ID0gQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdNb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0JywgYG1vbml0b3JpbmctdGVzdHN1aXRlLXJ1bm5lci0ke3RoaXMuYWNjb3VudH1gKTtcbiAgICAgIG1vbml0b3JpbmdUZXN0c3VpdGVSdW5uZXJCdWNrZXQuZ3JhbnRXcml0ZShjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApO1xuICAgIH1cbiAgICBpZiAoZnJvbnRlbmREZXBsb3lTdGVwKSB7XG4gICAgICBjb25zdCBmcm9udGVuZEJ1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnRnJvbnRlbmRCdWNrZXQnLCB0aGlzLl9mZWF0dXJlcy5mcm9udGVuZEJ1Y2tldE5hbWUhISk7XG4gICAgICBmcm9udGVuZEJ1Y2tldC5ncmFudFJlYWRXcml0ZShmcm9udGVuZERlcGxveVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1BpcGVsaW5lU2NoZWR1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24ocHJvcHMucGlwZWxpbmVTY2hlZHVsZXM/Lm1haW5QaXBlbGluZSB8fCAnY3JvbigwIDkgPyAqIDIjMSAqKScpLFxuICAgIH0pO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShjb2RlUGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24pIHtcbiAgICAgIHRoaXMuZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24obWFpbkJ1aWxkLCAnS2Fma2FJbnRlZ3JhdGlvblBvbGljeScpO1xuICAgIH1cbiAgICBjb2RlUGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc3RyaXBBc3NldHNTdGVwLnByb2plY3QpO1xuXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzKSB7XG4gICAgICBuZXcgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCh0aGlzLCAnRGF0YWRvZ1BpcGVsaW5lRXJyb3JNb25pdG9yJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIHBpcGVsaW5lTmFtZTogdGhpcy5yZW5hbWVQaXBlbGluZVRvTG93ZXJDYXNlKHBpcGVsaW5lKSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEJyYW5jaFBpcGVsaW5lKGJyYW5jaEJ1aWxkOiBDb2RlQnVpbGRTdGVwKSB7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdCcmFuY2hQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBicmFuY2hDb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZShicmFuY2hQaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogYnJhbmNoUGlwZWxpbmUsXG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YoYnJhbmNoUGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICdicmFuY2gnKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnQnJhbmNoQnVpbGQnKS5hZGRQb3N0KGJyYW5jaEJ1aWxkKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KGJyYW5jaEJ1aWxkLCAncHJvamVjdF90eXBlJywgJ2JyYW5jaF9idWlsZCcpO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKGJyYW5jaEJ1aWxkLCAnQnJhbmNoS2Fma2FJbnRlZ3JhdGlvblBvbGljeScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVnVsbmVyYWJpbGl0eVBpcGVsaW5lKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5QnVpbGQgPSBuZXcgUmlvQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnVnVsbmVyYWJpbGl0eUNoZWNrcycsIHtcbiAgICAgIGlucHV0OiB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyksXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiB0aGlzLl9ob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSA9IG5ldyBjb2RlcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodnVsbmVyYWJpbGl0eVBpcGVsaW5lLCAnQ29kZVBpcGVsaW5lJywge1xuICAgICAgY29kZVBpcGVsaW5lOiB2dWxuZXJhYmlsaXR5UGlwZWxpbmUsXG4gICAgICBzeW50aDogdnVsbmVyYWJpbGl0eUJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHZ1bG5lcmFiaWxpdHlQaXBlbGluZSkuYWRkKCdwaXBlbGluZV90eXBlJywgJ3Z1bG5lcmFiaWxpdHknKTtcblxuICAgIHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnVnVsbmVyYWJpbGl0eUNoZWNrcycpLmFkZFBvc3QodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcbiAgICBUYWdzLm9mKHZ1bG5lcmFiaWxpdHlCdWlsZC5wcm9qZWN0KS5hZGQoJ3Byb2plY3RfdHlwZScsICd2dWxuZXJhYmlsaXR5X2NoZWNrJyk7XG4gICAgdGhpcy5fbmlzdERhdGFNaXJyb3JVcmwuZ3JhbnRSZWFkKHZ1bG5lcmFiaWxpdHlCdWlsZCk7XG5cbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5UnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lU2NoZWR1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24ocHJvcHMucGlwZWxpbmVTY2hlZHVsZXM/LnZ1bG5lcmFiaWxpdHlQaXBlbGluZSB8fCAnY3JvbigwIDUgPyAqIE1PTi1GUkkgKiknKSxcbiAgICB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIGlmIChwcm9wcy5kYXRhZG9nQWxlcnRUeXBlID09PSAnb3BzZ2VuaWUnKSB7XG4gICAgICB0aHJvdyBFcnJvcignVGhlIE9wc0dlbmllIGFsZXJ0VHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuIFBsZWFzZSB1c2UgdGhlIHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24gcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzKSB7XG4gICAgICBuZXcgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3ModGhpcywgJ0RhdGFEb2dQaXBlbGluZUVycm9yRm9yVnVsbmVyYWJpbGl0eUNoZWNrc01vbml0b3InLCB7XG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLnJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UodnVsbmVyYWJpbGl0eVBpcGVsaW5lKSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMudnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RyaXBBc3NldHNTdGVwKHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgLy8gQ2xvdWRBc3NlbWJseUFydGlmYWN0cyBtdXN0IGJlIHNtYWxsZXIgdGhhbiAyNTZNQi4gRHVlIHRvIHRoZSBncmFkbGUgYXJ0aWZhY3Qgd2UgYXJlIGV4Y2VlZGluZyB0aGlzIGxpbWl0IGFuZCBwaXBlbGluZSBmYWlscyBpbiBkZXBsb3ltZW50IHN0ZXAuXG4gICAgLy8gSXNzdWUgaXMga25vd24gYW5kIG5vdCBmaXhlZCBmb3IgYWxyZWFkeSBzb21lIHllYXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgIC8vIERpcnR5IGZpeDogQXNzZXRzIGFyZSBhbHJlYWR5IHVwbG9hZGVkIGFuZCB0aHVzIG5vdCBuZWVkZWQuIFJlbW92ZSB0aGVtIGZyb20gcGlwZWxpbmUgYXJ0aWZhY3QuXG4gICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRTdGVwKFxuICAgICAgJ1N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5Jywge1xuICAgICAgICBpbnB1dDogcGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICAnWklQX0FSQ0hJVkU9JChiYXNlbmFtZSAkUzNfUEFUSCknLFxuICAgICAgICAgICdybSAtcmZ2IGFzc2V0LionLFxuICAgICAgICAgICd6aXAgLXIgLXEgLUEgJFpJUF9BUkNISVZFIConLFxuICAgICAgICAgICdhd3MgczMgY3AgJFpJUF9BUkNISVZFIHMzOi8vJFMzX1BBVEgnLFxuICAgICAgICBdLFxuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgYnVpbGRJbWFnZTogTGludXhMYW1iZGFCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yMDIzX05PREVfMjAsXG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcChtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXAsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcykge1xuICAgICAgY29uc3QgbW9uaXRvcmluZ0FydGlmYWN0cyA9IE9iamVjdC5rZXlzKHByb3BzLm1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMubW9uaXRvcmluZ0FydGlmYWN0cykubWFwKChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gbWFpbkJ1aWxkLmFkZE91dHB1dERpcmVjdG9yeShrZXkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlucHV0OiBvdXRwdXQsXG4gICAgICAgICAgZmlsZXM6IHByb3BzLm1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMhLm1vbml0b3JpbmdBcnRpZmFjdHNba2V5XSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSaW9DYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAodGhpcywgJ0RlcGxveUNhcGFiaWxpdHlNb25pdG9yaW5nJywge1xuICAgICAgICBtb25pdG9yaW5nQXJ0aWZhY3RzOiBtb25pdG9yaW5nQXJ0aWZhY3RzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWNyZXRzRGVwbG95U3RlcChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKTogcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcykge1xuICAgICAgcmV0dXJuIG5ldyByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXAodGhpcywgJ0RlcGxveVNlY3JldHMnLCB7XG4gICAgICAgIC4uLnByb3BzLnNlY3JldHNEZXBsb3lTdGVwUHJvcHMsXG4gICAgICAgIGlucHV0OiB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBsb3lGcm9udGVuZERlcGxveVN0ZXAobWFpbkJ1aWxkOiBDb2RlQnVpbGRTdGVwKTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9mZWF0dXJlcy5mcm9udGVuZEJ1Y2tldE5hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGZyb250ZW5kQnVpbGRPdXRwdXQgPSBtYWluQnVpbGQuYWRkT3V0cHV0RGlyZWN0b3J5KCdidWlsZCcpO1xuICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkU3RlcCgnRGVwbG95RnJvbnRlbmQnLCB7XG4gICAgICBpbnB1dDogZnJvbnRlbmRCdWlsZE91dHB1dCxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhMYW1iZGFCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yMDIzX05PREVfMjAsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQU1CREFfMUdCLFxuICAgICAgfSxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgIGBhd3MgczMgc3luYyAtLWV4Y2x1ZGUgaW5kZXguaHRtbCAtLWNhY2hlLWNvbnRyb2wgbWF4LWFnZT0zMTUzNjAwMCAuLyAnczM6Ly8ke3RoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZX0nYCxcbiAgICAgICAgYGF3cyBzMyBjcCAtLWNhY2hlLWNvbnRyb2wgbm8tY2FjaGUgaW5kZXguaHRtbCAnczM6Ly8ke3RoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZX0nYCxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKGJ1aWxkUHJvamVjdDogUmlvQ29kZUJ1aWxkUHJvamVjdCwgcG9saWN5SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1aWxkUHJvamVjdFJvbGUgPSBidWlsZFByb2plY3QucHJvamVjdC5yb2xlO1xuICAgIGlmIChidWlsZFByb2plY3RSb2xlKSB7XG4gICAgICBidWlsZFByb2plY3RSb2xlLmFkZE1hbmFnZWRQb2xpY3koXG4gICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4odGhpcyxcbiAgICAgICAgICBwb2xpY3lJZCxcbiAgICAgICAgICBGbi5pbXBvcnRWYWx1ZSgna2Fma2EtaW50ZWdyYXRpb24tcG9saWN5LWFybicpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoYENvdWxkIG5vdCBhZGQgbWFuYWdlZCBwb2xpY3kgZm9yIGthZmthLWludGVncmF0aW9uIHRvIENvZGVCdWlsZCBwcm9qZWN0IG9mICR7YnVpbGRQcm9qZWN0LmlkfSBkdWUgdG8gbWlzc2luZyByb2xlLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEJ1aWxkU3BlY0Zyb21GaWxlKGJ1aWxkU3BlY1BhdGg/OiBzdHJpbmcpOiBCdWlsZFNwZWMgfCB1bmRlZmluZWQge1xuICAgIGlmICghYnVpbGRTcGVjUGF0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHlhbWwubG9hZChmcy5yZWFkRmlsZVN5bmMoYnVpbGRTcGVjUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkgYXMgT2JqZWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lUGlwZWxpbmVUb0xvd2VyQ2FzZShwaXBlbGluZTogSVBpcGVsaW5lKTogUmVmZXJlbmNlIHtcbiAgICBjb25zdCB1cHBlclRvTG93ZXJDciA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgYCR7cGlwZWxpbmUubm9kZS5pZH0tVXBwZXJUb0xvd2VyYCwge1xuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpVcHBlclRvTG93ZXInLFxuICAgICAgc2VydmljZVRva2VuOiBVcHBlclRvTG93ZXIuZ2V0T3JDcmVhdGUodGhpcykucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBVcHBlcjogcGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdXBwZXJUb0xvd2VyQ3IuZ2V0QXR0KCdMb3dlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWdDb2RlQnVpbGRQcm9qZWN0KHByb2plY3Q6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIFRhZ3Mub2YocHJvamVjdC5wcm9qZWN0KS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
409
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZDQUFtRjtBQUNuRiw2REFBNEc7QUFDNUcsNkRBQTZEO0FBQzdELDZFQUE2RTtBQUM3RSxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELGlEQUFvRDtBQUVwRCx5Q0FBeUM7QUFDekMsK0NBQXFEO0FBQ3JELDJDQUEyQztBQUUzQyxtREFBbUQ7QUFDbkQscURBQTBFO0FBRTFFLGdDQUFnQztBQUNoQywyREFBa0Q7QUFDbEQsbURBQXNEO0FBQ3RELDZDQUFpRjtBQUNqRix5REFBZ0g7QUFDaEgscUVBQTZFO0FBRzdFLHNDQUFzQztBQUN0QywwQ0FBaUU7QUE2TGpFLElBQVksWUFzQ1g7QUF0Q0QsV0FBWSxZQUFZO0lBRXRCOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILG1EQUFtQyxDQUFBO0lBQ25DOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCwrREFBK0MsQ0FBQTtJQUMvQzs7Ozs7T0FLRztJQUNILG1FQUFtRCxDQUFBO0FBQ3JELENBQUMsRUF0Q1csWUFBWSw0QkFBWixZQUFZLFFBc0N2QjtBQWNELE1BQWEsYUFBYyxTQUFRLG1CQUFLO0lBZ0J0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQywrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUs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Q0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDcEksQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxhQUFzQjtRQUNsRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8seUJBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFXLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsT0FBa0MsRUFBRSxHQUFXLEVBQUUsS0FBYTtRQUN4RixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osa0JBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7O0FBdllILHNDQXdZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBTdGFja1Byb3BzLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRTcGVjLCBDb21wdXRlVHlwZSwgTGludXhMYW1iZGFCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmVfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgTWFuYWdlZFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgSUhvc3RlZFpvbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQnVja2V0LCBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCwgQ29kZVBpcGVsaW5lU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi1zdGFnZSc7XG5pbXBvcnQgeyBSaW9Db2RlQnVpbGRQcm9qZWN0IH0gZnJvbSAnLi9idWlsZC1wcm9qZWN0JztcbmltcG9ydCB7IGNyZWF0ZU1haW5CdWlsZFNwZWMsIGNyZWF0ZVZ1bG5lcmFiaWxpdHlCdWlsZFNwZWMgfSBmcm9tICcuL2J1aWxkc3BlY3MnO1xuaW1wb3J0IHsgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCwgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MgfSBmcm9tICcuL2RhdGFkb2ctbW9uaXRvcnMnO1xuaW1wb3J0IHsgUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwIH0gZnJvbSAnLi9tb25pdG9yaW5nLWRlcGxveS1zdGVwJztcbmltcG9ydCB7IERhdGFkb2dBbGVydFR5cGUgfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9nJztcbmltcG9ydCB7IElOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9ndjInO1xuaW1wb3J0ICogYXMgcmlvIGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IENsYWlkb21ldGVyLCBDbGFpZG9tZXRlclByb2R1Y3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVNjaGVkdWxlc1Byb3BzIHtcbiAgcmVhZG9ubHkgbWFpblBpcGVsaW5lPzogc3RyaW5nO1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5UGlwZWxpbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2VcbiAgICogLSBUaGlzIGhhcyB0byBiZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSByZXBvc2l0b3J5IGFzIHRoZSBzMyB0cmlnZ2VyIGZpbGUgY3JlYXRlZCBieSB0aGUgYml0YnVja2V0LWludGVncmF0aW9uIHVzZXMgdGhpcyBhcyBhIHByZWZpeFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgU0VSVklDRV9OQU1FIGluIHRoZSBDb2RlQnVpbGRTdGVwXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBpbiB0aGUgQXBwU3RhY2tQcm9wcyBpbiB0aGUgYXBwU3RhY2tGYWN0b3J5XG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBhcyBzdGFja05hbWUgcHJvcGVydHkgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeS4gSS5lLiB0aGUgc3RhY2sgaXMgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2VcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgaGFuZGVkIG92ZXIgdG8gYWxsIERhdGFkb2cgbW9uaXRvcnNcbiAgICogLSBSSU8gY29udmVudGlvbiBpcyB0aGF0IHVwbG9hZGVkIGxpY2Vuc2UtY2hlY2stZmlsZXMgYXJlIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlLCBpLmUuIHNlcnZpY2VOYW1lLnR4dFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdmlkZXIgZm9yIGFwcFN0YWNrIHRvIGJlIGRlcGxveWVkLlxuICAgKlxuICAgKiBUaGlzIGFjdHMgYXMgYSB3cmFwcGVyIGZvciBhbGwgcmVzb3VyY2VzIHlvdSB3YW50IHRvIGRlcGxveSB2aWEgdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwU3RhY2tGYWN0b3J5OiBJQXBwU3RhY2tGYWN0b3J5O1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoaWNoIGtpbmQgb2YgcGlwZWxpbmUgaXMgZGVwbG95ZWQuXG4gICAqXG4gICAqIFVzZSB0aGUgZmVhdHVyZXMgdG8gY29tYmluZSBkaWZmZXJlbnQgb3BpbmlvbmF0ZWQsIFJJTy1zcGVjaWZpYyBwaXBlbGluZSBmZWF0dXJlcyBzdWNoIGFzIGFkZGluZyBhIGJyYW5jaCBwaXBlbGluZSBvciBzdXBwb3J0aW5nIEthZmthLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZXM/OiBQaXBlbGluZUZlYXR1cmVzO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBmZWF0dXJlc2AgcHJvcGVydHkgaW5zdGVhZC4gRm9yIG5vdywgdGhlIHBpcGVsaW5lIHR5cGVzIGFyZSBtYXBwZWQgdG8gdGhlIGZlYXR1cmVzLlxuICAgKiBEZWZpbmVzIHdoaWNoIGtpbmQgb2YgcGlwZWxpbmUgaXMgZGVwbG95ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVR5cGU/OiBQaXBlbGluZVR5cGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgaG93IG9mdGVuIHRoZSBwaXBlbGluZSBpcyB0cmlnZ2VyZWQgYXV0b21hdGljYWxseS4gSXMgZGVmaW5lZCB2aWEgYSBjcm9uIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvZXZlbnRzL1NjaGVkdWxlZEV2ZW50cy5odG1sXG4gICAqXG4gICAqIERlZmF1bHQgdmFsdWVzOlxuICAgKiAtIG1haW4gcGlwZWxpbmU6IGNyb24oMCA5ID8gKiAyIzEgKilcbiAgICogLSB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lOiBjcm9uKDAgNSA/ICogTU9OLUZSSSAqKVxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTY2hlZHVsZXM/OiBQaXBlbGluZVNjaGVkdWxlc1Byb3BzO1xuXG5cbiAgLyoqXG4gICAqIFBhdGggdG8gc2VjcmV0cyBmaWxlIGNvbnRhaW5pbmcgZW5jcnlwdGVkIHNlY3JldHMuXG4gICAqXG4gICAqIFRoZSBSaW9TZWNyZXRzRGVwbG95U3RlcCBpcyBhZGRlZCBwcmlvciB0byBkZXBsb3ltZW50IG9mIHRoZSBBcHBTdGFjayBpZiBhIHBhdGggaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIE5vIHNlY3JldHMgYXJlIGRlcGxveWVkIGlmIG5vIHBhdGggaXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzRGVwbG95U3RlcFByb3BzPzogUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHM7XG5cbiAgLyoqXG4gICAqIENvZGVCdWlsZCBvcHRpb25zIG92ZXJyaWRpbmcgdGhlIHJpby1zcGVjaWZpYyBkZWZhdWx0cy5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVCdWlsZE9wdGlvbnM/OiBDb2RlQnVpbGRPcHRpb25zO1xuICAvKipcbiAgICogSWYgcHJlc2VudCwgdGhlIGNhcGFiaWxpdHkgbW9uaXRvcmluZyBkZXBsb3kgc3RlcCBpcyBhZGRlZCB0byB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSBtb25pdG9yaW5nRGVwbG95U3RlcFByb3BzPzogUGlwZWxpbmVTdGFja1Jpb01vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIHRoZSBgdnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbmAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICogSWYgYG9wc2dlbmllYCBpcyBzcGVjaWZpZWQsIGFuIEV4Y2VwdGlvbiBpcyB0aHJvd24sIGFzIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ0FsZXJ0VHlwZT86IERhdGFkb2dBbGVydFR5cGU7XG4gIC8qKlxuICAgKiBOb3RpZmljYXRpb24gdHlwZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUgbW9uaXRvci4gRGVmYXVsdHMgdG8gc2xhY2suXG4gICAqL1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uPzogSU5vdGlmaWNhdGlvbjtcbiAgLyoqXG4gICAqIENvZGVQaXBlbGluZSBQaXBlbGluZVR5cGUgKFYxIG9yIFYyKS4gRGVmYXVsdHMgdG8gVjEuXG4gICAqL1xuICByZWFkb25seSBjb2RlUGlwZWxpbmVUeXBlPzogY29kZXBpcGVsaW5lLlBpcGVsaW5lVHlwZTtcbn1cblxuLyoqXG4gKiBQcm92aWRlciBpbnRlcmZhY2UgdG8gY3JlYXRlIHRoZSBBcHBTdGFjayB3aXRoaW4gdGhlIHNwZWNpZmljIHNjb3BlXG4gKlxuICogU2ltcGx5IHBsYWNlIHRoZSBBcHBTdGFjayBjcmVhdGlvbiBpbnRvIHRoZSBjcmVhdGUtbWV0aG9kOlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgZS5nLiB3aXRoaW4gQXBwbGljYXRpb25Qcm9wcyBhcyBKU09OT2JqZWN0OlxuICogXFx7IGNyZWF0ZTogKGNvbnN0cnVjdCwgcHJvcHMpID1cXD4gbmV3IFN0YWNrKGNvbnN0cnVjdCwgJ0FwcFN0YWNrJywgcHJvcHMpIFxcfVxuICpcbiAqIC8vIG9yIHNpbXBseSBhcyBjbGFzcyBpbnRlcmZhY2Ugd2l0aGluIHlvdXIgc3RhY2sgaW1wbGVtZW50YXRpb246XG4gKiBjbGFzcyBQaXBlbGluZVN0YWdlIGV4dGVuZHMgU3RhZ2UgaW1wbGVtZW50cyBJQXBwU3RhY2tGYWN0b3J5IFxce1xuICogICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhZ2VQcm9wcykgXFx7XG4gKiAgICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gKiAgICAgLy8geW91ciBzdGFnZSBkZWZpbml0aW9uXG4gKiAgIFxcfVxuICpcbiAqICAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzKTogdm9pZCBcXHtcbiAqICAgICAvLyBhcHAgc3RhY2sgaW5pdGlhdGlvbiBnb2VzIGluIGhlcmVcbiAqICAgXFx9XG4gKiBcXH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXBwU3RhY2tGYWN0b3J5IHtcbiAgLyoqXG4gICAqIEZhY3RvcnkgbWV0aG9kLCBiZWluZyBpbnZva2VkIHdpdGggdGhlIHNwZWNpZmljIHNjb3BlIGR1cmluZyBwaXBlbGluZSBpbnN0YW50aWF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBwYXJlbnQgY29uc3RydWN0IGZvciB0aGUgYXBwIHN0YWNrXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBhcHAgc3RhY2tzIHByb3BlcnRpZXNcbiAgICovXG4gIGNyZWF0ZShzY29wZTogQ29uc3RydWN0LCBwcm9wczogQXBwU3RhY2tQcm9wcyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0ZWQgcHJvcGVydGllcyBiZWluZyBoYW5kZWQgb3ZlciB0byBSaW9TZWNyZXRzRGVwbG95U3RlcC5cbiAqXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFxuICogQHNlZSByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhY2tSaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzIHtcbiAgcmVhZG9ubHkgc2VjcmV0c0ZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb01vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMge1xuICAvKipcbiAgICogTWFwIFxce2RpcmVjdG9yeTogZmlsZW5hbWVzXFx9IGNvbnRhaW5pbmcgIC5qYXIgb3IgLnppcCBmaWxlcyBjcmVhdGVkIGluIG1haW4gYnVpbGQgc3RlcCB0byBiZSB1cGxvYWRlZCB0byB0aGUgbW9uaXRvcmluZy10ZXN0c3VpdGUtcnVubmVyIGJ1Y2tldCwgZS5nLlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgJ2F2YWlsYWJpbGl0eS1tb25pdG9yaW5nL2J1aWxkL2xpYnMnOiBbJ2Zvby1hdmFpbGFiaWxpdHkuamFyJ10sXG4gICAqICAncGVyZm9ybWFuY2UtbW9uaXRvcmluZy9idWlsZC9saWJzJzogWydhcGktY2hlY2suemlwJywgJ2Zvby1wZXJmb3JtYW5jZS5qYXInXSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdBcnRpZmFjdHM6IHsgW2RpcmVjdG9yeTogc3RyaW5nXTogc3RyaW5nW10gfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUZlYXR1cmVzIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJyYW5jaCBwaXBlbGluZSB1c2VkIGJ5IHJlbm92YXRlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSBicmFuY2hQaXBlbGluZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lIHRvIHNjYW4gZGVwZW5kZW5jaWVzIGZvciB2dWxuZXJhYmlsaXRpZXMuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlQaXBlbGluZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSdW4gYSBzdGFuZGFyZCBncmFkbGUgYnVpbGQgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdC4gRGVmYXVsdHMgdG8gYGZhbHNlYDpcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2hlY2tMaWNlbnNlc1wiXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiXG4gICAqL1xuICByZWFkb25seSBncmFkbGVCdWlsZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSdW4gYSBzdGFuZGFyZCBucG0gYnVpbGQgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdC4gRGVmYXVsdHMgdG8gYGZhbHNlYDpcbiAgICogLSBydW4gbGludGVyIHZpYSBjb21tYW5kIFwibnBtIHJ1biBsaW50XCJcbiAgICogLSBydW4gdGVzdHMgdmlhIGNvbW1hbmQgXCJucG0gcnVuIHRlc3Q6Y2lcIlxuICAgKiAtIHJ1biBhIGxpY2Vuc2UgY2hlY2sgYnkgY2FsbGluZyB0aGUgc2NyaXB0IFwiY2hlY2stb3NzLWxpY2Vuc2VzLnNoXCIgKGZyb20gdGhlIFJJTyBmcm9udGVuZCB0ZW1wbGF0ZSlcbiAgICogLSBidWlsZCB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCJucG0gcnVuIGJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IG5wbUJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCByZXF1aXJlZCBzdGVwcyBhbmQgcGVybWlzc2lvbnMgdG8gc3VwcG9ydCBLYWZrYS4gQ3VycmVudGx5LCB0aGlzIHJlcXVpcmVzIGBncmFkbGVCdWlsZGAgdG8gYmUgc2V0IHRvIGB0cnVlYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGthZmthSW50ZWdyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogUzMgQnVja2V0IHRvIGRlcGxveSBmcm9udGVuZCB0by4gUmVxdWlyZXMgYG5wbUJ1aWxkYCB0byBiZSBzZXQgdG8gYHRydWVgLiBJZiBzZXQsIHRoZSBvdXRwdXQgb2YgdGhlIG5wbSBidWlsZCBpcyBkZXBsb3llZCB0byB0aGUgcHJvdmlkZWQgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmRCdWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBidWlsZCBjb21tYW5kcyBmb3IgbWFpbiBhbmQgYnJhbmNoIHBpcGVsaW5lLiBXaWxsIGJlIGFkZGVkIGFmdGVyIGFsbCBidWlsZCAmIHRlc3QgY29tbWFuZHMsIGJlZm9yZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQnVpbGRDb21tYW5kcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogSWYgc2V0IHRvIGZhbHNlLCBubyBEYXRhZG9nIG1vbml0b3JzIGZvciBtYWluIGFuZCB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lcyB3aWxsIGJlIGNyZWF0ZWQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVQaXBlbGluZU1vbml0b3JzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gUGlwZWxpbmVUeXBlIHtcblxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay4gQmUgYXdhcmU6IFRoZSBwcm92aWRlZCBzZXJ2aWNlIHdvbid0IGhhdmUgYWNjZXNzIHRvIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2hlY2tMaWNlbnNlc1wiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRSA9ICdTVEFOREFSRF9HUkFETEUnLFxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjayB3aXRoIGFkZGl0aW9uYWwgc3RlcHMgbmVlZGVkIHRvIGFjY2VzcyBLYWZrYS5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZvciBhIGdyYWRsZSBwcm9qZWN0LiBUaGlzIGJ1aWxkc3BlYy55YW1sIGlzIHVzZWQgZm9yIGJvdGggdGhlIG1haW4gYW5kXG4gICAqIGJyYW5jaCBwaXBlbGluZSBhbmQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBzdGVwc1xuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBsaWNlbnNlLWNoZWNrIGFuZCB1cGxvYWQgb2YgbGljZW5zZS1jaGVjay1maWxlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNoZWNrTGljZW5zZXNcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyLlxuICAgKiAtIHJlcXVlc3QgYSBjZXJ0aWZpY2F0ZSB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCBLYWZrYSB2aWEgbXV0dWFsIFRMU1xuICAgKiAtIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgamliQnVpbGRUYXJcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqL1xuICBTVEFOREFSRF9HUkFETEVfS0FGS0EgPSAnU1RBTkRBUkRfR1JBRExFX0tBRktBJyxcbiAgLyoqXG4gICAqIFNlbGYtbXV0YXRpbmcgY29kZXBpcGVsaW5lIGRlcGxveWluZyB0aGUgcHJvdmlkZWQgQXBwU3RhY2suXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCB0byBzeW50aGVzaXplIHRoZSBBcHBTdGFjay5cbiAgICogTm8gYnJhbmNoIG9yIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUgaXMgY3JlYXRlZC5cbiAgICovXG4gIFNUQU5EQVJEX0lORlJBU1RSVUNUVVJFID0gJ1NUQU5EQVJEX0lORlJBU1RSVUNUVVJFJyxcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGFydGlhbEJ1aWxkU3BlY1BhdGggLSBQYXRoIHRvIGEgY3VzdG9tIGJ1aWxkLXNwZWMgZmlsZSB0byB1c2UgZm9yIHRoZSBtYWluIGFuZCBicmFuY2ggcGlwZWxpbmUuXG4gKiBBIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZpdHRpbmcgdGhlIHBpcGVsaW5lVHlwZSBpcyB1c2VkIGlmIG5vdCBwcm92aWRlZC5cbiAqIEBwYXJhbSBidWlsZEVudmlyb25tZW50IC0gQ3VzdG9tIENvZGVCdWlsZCBidWlsZCBlbnZpcm9ubWVudCBvdmVycmlkaW5nIHRoZSByaW8tc3BlY2lmaWMgZGVmYXVsdHMuIFRoZSBkZWZhdWx0cyBhcmU6XG4gKiAgICAgICAgICBidWlsZEltYWdlOiBBTUFaT05fTElOVVhfMl81XG4gKiAgICAgICAgICBjb21wdXRlVHlwZTogTEFSR0VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGFydGlhbEJ1aWxkU3BlY1BhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ/OiBCdWlsZEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5Db2RlQnVpbGRQcm9qZWN0OiBDb2RlQnVpbGRTdGVwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9icmFuY2hDb2RlQnVpbGRQcm9qZWN0OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWNrZXQ6IElCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlQnVja2V0OiBJQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0ZWRab25lOiBJSG9zdGVkWm9uZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZTogQ29kZVBpcGVsaW5lU291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dEJyYW5jaFRyaWdnZXJGaWxlOiBDb2RlUGlwZWxpbmVTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vc3NMaWNlbnNlc0J1Y2tldDogSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VydmljZUtleXN0b3JlUGFzc3dvcmQ6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjY291bnROYW1lUGFyYW1ldGVyOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uaXN0RGF0YU1pcnJvclVybDogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29kZVBpcGVsaW5lVHlwZTogY29kZXBpcGVsaW5lLlBpcGVsaW5lVHlwZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLl9mZWF0dXJlcyA9IHRoaXMucGFyc2VGZWF0dXJlcyhwcm9wcyk7XG5cbiAgICAvLyBwb3B1bGF0ZSBleHRlcm5hbCBwYXJhbWV0ZXJzXG4gICAgdGhpcy5fYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdUcmlnZ2VyQnVja2V0JywgRm4uaW1wb3J0VmFsdWUoJ2JpdGJ1Y2tldC1pbnRlZ3JhdGlvbi1zMy1idWNrZXQnKSk7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdDYWNoZUJ1Y2tldCcsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgIGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZEFmdGVyOiBEdXJhdGlvbi5kYXlzKDcpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLl9ob3N0ZWRab25lID0gcmlvLlJpb0xhbmRpbmdab25lLmdldERlZmF1bHRIb3N0ZWRab25lKHRoaXMpO1xuICAgIHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKHRoaXMuX2J1Y2tldCwgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5NQVNURVJfUkVQT31gLCB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfSk7XG4gICAgdGhpcy5faW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczModGhpcy5fYnVja2V0LCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5LkJSQU5DSF9SRVBPfWAsIHsgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyB9KTtcblxuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnT3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXInLCB7IHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScgfSk7XG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ09zc0xpY2Vuc2VzQnVja2V0JywgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuc3RyaW5nVmFsdWUpO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnS2V5c3RvcmVQYXNzd29yZCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IGAvY29uZmlnLyR7cHJvcHMuc2VydmljZU5hbWV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9KTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUodGhpcywgJ0FjY291bnROYW1lUGFyYW1ldGVyJywgJy9jb25maWcvYWNjb3VudC9uYW1lJyk7XG4gICAgdGhpcy5fbmlzdERhdGFNaXJyb3JVcmwgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdOaXN0RGF0YU1pcnJvclVybCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlID0gcHJvcHMuY29kZVBpcGVsaW5lVHlwZSA/PyBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlLlYxO1xuXG4gICAgdGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3QgPSB0aGlzLmNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoJ01haW5CdWlsZCcsIHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUsIHByb3BzKTtcbiAgICB0aGlzLmFkZE1haW5QaXBlbGluZShwcm9wcywgdGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3QpO1xuXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmJyYW5jaFBpcGVsaW5lKSB7XG4gICAgICB0aGlzLl9icmFuY2hDb2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVSaW9Db2RlQnVpbGRQcm9qZWN0KCdCcmFuY2hCdWlsZCcsIHRoaXMuX2lucHV0QnJhbmNoVHJpZ2dlckZpbGUsIHByb3BzKTtcbiAgICAgIHRoaXMuYWRkQnJhbmNoUGlwZWxpbmUodGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mZWF0dXJlcy52dWxuZXJhYmlsaXR5UGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuYWRkVnVsbmVyYWJpbGl0eVBpcGVsaW5lKHByb3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCBbZmVhdHVyZSwgcGFja2FnZU5hbWVdID0gX19kaXJuYW1lLnNwbGl0KHBhdGguc2VwKS5yZXZlcnNlKCk7XG4gICAgbmV3IENsYWlkb21ldGVyKHRoaXMsICdDbGFpZG9tZXRlcicsIHtcbiAgICAgIHByb2R1Y3Q6IENsYWlkb21ldGVyUHJvZHVjdC5DREtfQ09OVFJJQlVUSU9OLFxuICAgICAgcGFja2FnZU5hbWUsXG4gICAgICBmZWF0dXJlLFxuICAgICAgdmVyc2lvbjogJzAuMC4yNycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1haW5Db2RlYnVpbGRQcm9qZWN0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCgpOiBDb2RlQnVpbGRTdGVwIHtcbiAgICBpZiAodGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdUaGUgcGlwZWxpbmUgdHlwZSB5b3UgaGF2ZSBzZWxlY3RlZCBkb2VzIG5vdCBzdXBwb3J0IGEgYnJhbmNoIGNvZGVidWlsZCBwcm9qZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9icmFuY2hDb2RlQnVpbGRQcm9qZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUZlYXR1cmVzKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiBQaXBlbGluZUZlYXR1cmVzIHtcbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlICYmIHByb3BzLmZlYXR1cmVzKSB7XG4gICAgICB0aHJvdyBFcnJvcignWW91IGNhbm5vdCBwcm92aWRlIGJvdGggYSBwaXBlbGluZVR5cGUgYW5kIGZlYXR1cmVzLiBQbGVhc2UgdXNlIGZlYXR1cmVzIG9ubHkuJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcz8ua2Fma2FJbnRlZ3JhdGlvbiAmJiAhcHJvcHMuZmVhdHVyZXM/LmdyYWRsZUJ1aWxkKSB7XG4gICAgICB0aHJvdyBFcnJvcignS2Fma2EgaW50ZWdyYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIHBpcGVsaW5lcyB3aXRoIGdyYWRsZSBidWlsZCcpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZmVhdHVyZXM/LmZyb250ZW5kQnVja2V0TmFtZSAmJiAhcHJvcHMuZmVhdHVyZXM/Lm5wbUJ1aWxkKSB7XG4gICAgICB0aHJvdyBFcnJvcignRnJvbnRlbmQgYnVja2V0IG5hbWUgY2FuIG9ubHkgYmUgc2V0IHdoZW4gbnBtIGJ1aWxkIGlzIGVuYWJsZWQnKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnBpcGVsaW5lVHlwZSkge1xuICAgICAgc3dpdGNoIChwcm9wcy5waXBlbGluZVR5cGUpIHtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfR1JBRExFOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicmFuY2hQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIGdyYWRsZUJ1aWxkOiB0cnVlLFxuICAgICAgICAgICAgbnBtQnVpbGQ6IGZhbHNlLFxuICAgICAgICAgICAga2Fma2FJbnRlZ3JhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBlbmFibGVQaXBlbGluZU1vbml0b3JzOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgUGlwZWxpbmVUeXBlLlNUQU5EQVJEX0dSQURMRV9LQUZLQTpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJhbmNoUGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICBncmFkbGVCdWlsZDogdHJ1ZSxcbiAgICAgICAgICAgIG5wbUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIGthZmthSW50ZWdyYXRpb246IHRydWUsXG4gICAgICAgICAgICBlbmFibGVQaXBlbGluZU1vbml0b3JzOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgUGlwZWxpbmVUeXBlLlNUQU5EQVJEX0lORlJBU1RSVUNUVVJFOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicmFuY2hQaXBlbGluZTogZmFsc2UsXG4gICAgICAgICAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgZ3JhZGxlQnVpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgbnBtQnVpbGQ6IGZhbHNlLFxuICAgICAgICAgICAga2Fma2FJbnRlZ3JhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBlbmFibGVQaXBlbGluZU1vbml0b3JzOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBicmFuY2hQaXBlbGluZTogcHJvcHMuZmVhdHVyZXM/LmJyYW5jaFBpcGVsaW5lID8/IHRydWUsXG4gICAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmU6IHByb3BzLmZlYXR1cmVzPy52dWxuZXJhYmlsaXR5UGlwZWxpbmUgPz8gdHJ1ZSxcbiAgICAgIGdyYWRsZUJ1aWxkOiBwcm9wcy5mZWF0dXJlcz8uZ3JhZGxlQnVpbGQgPz8gZmFsc2UsXG4gICAgICBucG1CdWlsZDogcHJvcHMuZmVhdHVyZXM/Lm5wbUJ1aWxkID8/IGZhbHNlLFxuICAgICAga2Fma2FJbnRlZ3JhdGlvbjogcHJvcHMuZmVhdHVyZXM/LmthZmthSW50ZWdyYXRpb24gPz8gZmFsc2UsXG4gICAgICBmcm9udGVuZEJ1Y2tldE5hbWU6IHByb3BzLmZlYXR1cmVzPy5mcm9udGVuZEJ1Y2tldE5hbWUsXG4gICAgICBhZGRpdGlvbmFsQnVpbGRDb21tYW5kczogcHJvcHMuZmVhdHVyZXM/LmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzLFxuICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogcHJvcHMuZmVhdHVyZXM/LmVuYWJsZVBpcGVsaW5lTW9uaXRvcnMgPz8gdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSaW9Db2RlQnVpbGRQcm9qZWN0KG5hbWU6IHN0cmluZywgdHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZSwgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcykge1xuICAgIHJldHVybiBuZXcgUmlvQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCBuYW1lLCB7XG4gICAgICBpbnB1dDogdHJpZ2dlckZpbGUsXG4gICAgICBjZGtPdXREaXJlY3Rvcnk6ICdpbmZyYXN0cnVjdHVyZS9jZGsub3V0JyxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHwgY3JlYXRlTWFpbkJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyksXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiB0aGlzLl9ob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNYWluUGlwZWxpbmUocHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcywgbWFpbkJ1aWxkOiBDb2RlQnVpbGRTdGVwKSB7XG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBjb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZShwaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogcGlwZWxpbmUsXG4gICAgICBzeW50aDogbWFpbkJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uQ29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4TGFtYmRhQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMjAyM19OT0RFXzIwLFxuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQU1CREFfMUdCLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHBpcGVsaW5lKS5hZGQoJ3BpcGVsaW5lX3R5cGUnLCAnYnVpbGQnKTtcblxuICAgIGNvbnN0IHN0cmlwQXNzZXRzU3RlcCA9IHRoaXMuY3JlYXRlU3RyaXBBc3NldHNTdGVwKGNvZGVQaXBlbGluZSk7XG4gICAgY29kZVBpcGVsaW5lLmFkZFdhdmUoJ0JlZm9yZURlcGxveScsIHsgcHJlOiBbc3RyaXBBc3NldHNTdGVwXSB9KTtcblxuICAgIGNvbnN0IGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCA9IHRoaXMuY3JlYXRlQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKG1haW5CdWlsZCwgcHJvcHMpO1xuICAgIGNvbnN0IHNlY3JldHNEZXBsb3lTdGVwUHJvcHMgPSB0aGlzLmNyZWF0ZVNlY3JldHNEZXBsb3lTdGVwKHByb3BzKTtcbiAgICBjb25zdCBmcm9udGVuZERlcGxveVN0ZXAgPSB0aGlzLmNyZWF0ZURlcGxveUZyb250ZW5kRGVwbG95U3RlcChtYWluQnVpbGQpO1xuICAgIGNvbnN0IHBvc3RTdGVwcyA9IFtdO1xuICAgIGlmIChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApIHtcbiAgICAgIHBvc3RTdGVwcy5wdXNoKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCk7XG4gICAgfVxuICAgIGlmIChmcm9udGVuZERlcGxveVN0ZXApIHtcbiAgICAgIHBvc3RTdGVwcy5wdXNoKGZyb250ZW5kRGVwbG95U3RlcCk7XG4gICAgfVxuXG4gICAgY29kZVBpcGVsaW5lLmFkZFN0YWdlKG5ldyBBcHBsaWNhdGlvbih0aGlzLCAnRGVwbG95QXBwbGljYXRpb25TdGFja3MnLCB7XG4gICAgICBhcHBTdGFja0ZhY3Rvcnk6IHByb3BzLmFwcFN0YWNrRmFjdG9yeSxcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb246IHByb2Nlc3MuZW52LlBJUEVMSU5FX0VYRUNVVElPTl9JRCA/PyAnUElQRUxJTkVfRVhFQ1VUSU9OX0lEIG5vdCBzZXQnLFxuICAgIH0pLCB7XG4gICAgICBwcmU6IHNlY3JldHNEZXBsb3lTdGVwUHJvcHMgPyBbc2VjcmV0c0RlcGxveVN0ZXBQcm9wc10gOiB1bmRlZmluZWQsXG4gICAgICBwb3N0OiBwb3N0U3RlcHMsXG4gICAgfSk7XG5cbiAgICBjb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KHN0cmlwQXNzZXRzU3RlcCwgJ3Byb2plY3RfdHlwZScsICdzdHJpcF9hc3NldHMnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3Qoc2VjcmV0c0RlcGxveVN0ZXBQcm9wcywgJ3Byb2plY3RfdHlwZScsICdkZXBsb3lfc2VjcmV0cycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChtYWluQnVpbGQsICdwcm9qZWN0X3R5cGUnLCAnYnVpbGQnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9jYXBhYmlsaXR5X21vbml0b3JpbmcnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoZnJvbnRlbmREZXBsb3lTdGVwLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9mcm9udGVuZCcpO1xuXG4gICAgaWYgKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCkge1xuICAgICAgY29uc3QgbW9uaXRvcmluZ1Rlc3RzdWl0ZVJ1bm5lckJ1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnTW9uaXRvcmluZ1Rlc3RzdWl0ZVJ1bm5lckJ1Y2tldCcsIGBtb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXItJHt0aGlzLmFjY291bnR9YCk7XG4gICAgICBtb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0LmdyYW50V3JpdGUoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKTtcbiAgICB9XG4gICAgaWYgKGZyb250ZW5kRGVwbG95U3RlcCkge1xuICAgICAgY29uc3QgZnJvbnRlbmRCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ0Zyb250ZW5kQnVja2V0JywgdGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lISEpO1xuICAgICAgZnJvbnRlbmRCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZnJvbnRlbmREZXBsb3lTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdQaXBlbGluZVNjaGVkdWxlJywge1xuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnBpcGVsaW5lU2NoZWR1bGVzPy5tYWluUGlwZWxpbmUgfHwgJ2Nyb24oMCA5ID8gKiAyIzEgKiknKSxcbiAgICB9KTtcbiAgICBydWxlLmFkZFRhcmdldChuZXcgdGFyZ2V0cy5Db2RlUGlwZWxpbmUoY29kZVBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZShtYWluQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX2FjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKG1haW5CdWlsZCwgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knKTtcbiAgICB9XG4gICAgY29kZVBpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKHN0cmlwQXNzZXRzU3RlcC5wcm9qZWN0KTtcblxuICAgIGlmICh0aGlzLl9mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycykge1xuICAgICAgbmV3IERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQodGhpcywgJ0RhdGFkb2dQaXBlbGluZUVycm9yTW9uaXRvcicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICBwaXBlbGluZU5hbWU6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEJyYW5jaFBpcGVsaW5lKGJyYW5jaEJ1aWxkOiBDb2RlQnVpbGRTdGVwKSB7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdCcmFuY2hQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBicmFuY2hDb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZShicmFuY2hQaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogYnJhbmNoUGlwZWxpbmUsXG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YoYnJhbmNoUGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICdicmFuY2gnKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnQnJhbmNoQnVpbGQnKS5hZGRQb3N0KGJyYW5jaEJ1aWxkKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KGJyYW5jaEJ1aWxkLCAncHJvamVjdF90eXBlJywgJ2JyYW5jaF9idWlsZCcpO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKGJyYW5jaEJ1aWxkLCAnQnJhbmNoS2Fma2FJbnRlZ3JhdGlvblBvbGljeScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVnVsbmVyYWJpbGl0eVBpcGVsaW5lKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5QnVpbGQgPSBuZXcgUmlvQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnVnVsbmVyYWJpbGl0eUNoZWNrcycsIHtcbiAgICAgIGlucHV0OiB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyksXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiB0aGlzLl9ob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSA9IG5ldyBjb2RlcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodnVsbmVyYWJpbGl0eVBpcGVsaW5lLCAnQ29kZVBpcGVsaW5lJywge1xuICAgICAgY29kZVBpcGVsaW5lOiB2dWxuZXJhYmlsaXR5UGlwZWxpbmUsXG4gICAgICBzeW50aDogdnVsbmVyYWJpbGl0eUJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHZ1bG5lcmFiaWxpdHlQaXBlbGluZSkuYWRkKCdwaXBlbGluZV90eXBlJywgJ3Z1bG5lcmFiaWxpdHknKTtcblxuICAgIHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnVnVsbmVyYWJpbGl0eUNoZWNrcycpLmFkZFBvc3QodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcbiAgICBUYWdzLm9mKHZ1bG5lcmFiaWxpdHlCdWlsZC5wcm9qZWN0KS5hZGQoJ3Byb2plY3RfdHlwZScsICd2dWxuZXJhYmlsaXR5X2NoZWNrJyk7XG4gICAgdGhpcy5fbmlzdERhdGFNaXJyb3JVcmwuZ3JhbnRSZWFkKHZ1bG5lcmFiaWxpdHlCdWlsZCk7XG5cbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5UnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lU2NoZWR1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24ocHJvcHMucGlwZWxpbmVTY2hlZHVsZXM/LnZ1bG5lcmFiaWxpdHlQaXBlbGluZSB8fCAnY3JvbigwIDUgPyAqIE1PTi1GUkkgKiknKSxcbiAgICB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIGlmIChwcm9wcy5kYXRhZG9nQWxlcnRUeXBlID09PSAnb3BzZ2VuaWUnKSB7XG4gICAgICB0aHJvdyBFcnJvcignVGhlIE9wc0dlbmllIGFsZXJ0VHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuIFBsZWFzZSB1c2UgdGhlIHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24gcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzKSB7XG4gICAgICBuZXcgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3ModGhpcywgJ0RhdGFEb2dQaXBlbGluZUVycm9yRm9yVnVsbmVyYWJpbGl0eUNoZWNrc01vbml0b3InLCB7XG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB2dWxuZXJhYmlsaXR5UGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICAgICAgbm90aWZpY2F0aW9uOiBwcm9wcy52dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdHJpcEFzc2V0c1N0ZXAocGlwZWxpbmU6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUpOiBDb2RlQnVpbGRTdGVwIHtcbiAgICAvLyBDbG91ZEFzc2VtYmx5QXJ0aWZhY3RzIG11c3QgYmUgc21hbGxlciB0aGFuIDI1Nk1CLiBEdWUgdG8gdGhlIGdyYWRsZSBhcnRpZmFjdCB3ZSBhcmUgZXhjZWVkaW5nIHRoaXMgbGltaXQgYW5kIHBpcGVsaW5lIGZhaWxzIGluIGRlcGxveW1lbnQgc3RlcC5cbiAgICAvLyBJc3N1ZSBpcyBrbm93biBhbmQgbm90IGZpeGVkIGZvciBhbHJlYWR5IHNvbWUgeWVhcnMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgLy8gRGlydHkgZml4OiBBc3NldHMgYXJlIGFscmVhZHkgdXBsb2FkZWQgYW5kIHRodXMgbm90IG5lZWRlZC4gUmVtb3ZlIHRoZW0gZnJvbSBwaXBlbGluZSBhcnRpZmFjdC5cbiAgICByZXR1cm4gbmV3IENvZGVCdWlsZFN0ZXAoXG4gICAgICAnU3RyaXBBc3NldHNGcm9tQXNzZW1ibHknLCB7XG4gICAgICAgIGlucHV0OiBwaXBlbGluZS5jbG91ZEFzc2VtYmx5RmlsZVNldCxcbiAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAnUzNfUEFUSD0ke0NPREVCVUlMRF9TT1VSQ0VfVkVSU0lPTiNcImFybjphd3M6czM6OjpcIn0nLFxuICAgICAgICAgICdaSVBfQVJDSElWRT0kKGJhc2VuYW1lICRTM19QQVRIKScsXG4gICAgICAgICAgJ3JtIC1yZnYgYXNzZXQuKicsXG4gICAgICAgICAgJ3ppcCAtciAtcSAtQSAkWklQX0FSQ0hJVkUgKicsXG4gICAgICAgICAgJ2F3cyBzMyBjcCAkWklQX0FSQ0hJVkUgczM6Ly8kUzNfUEFUSCcsXG4gICAgICAgIF0sXG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFNQkRBXzFHQixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKG1haW5CdWlsZDogQ29kZUJ1aWxkU3RlcCwgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcyk6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5tb25pdG9yaW5nRGVwbG95U3RlcFByb3BzKSB7XG4gICAgICBjb25zdCBtb25pdG9yaW5nQXJ0aWZhY3RzID0gT2JqZWN0LmtleXMocHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcy5tb25pdG9yaW5nQXJ0aWZhY3RzKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBtYWluQnVpbGQuYWRkT3V0cHV0RGlyZWN0b3J5KGtleSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5wdXQ6IG91dHB1dCxcbiAgICAgICAgICBmaWxlczogcHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyEubW9uaXRvcmluZ0FydGlmYWN0c1trZXldLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95Q2FwYWJpbGl0eU1vbml0b3JpbmcnLCB7XG4gICAgICAgIG1vbml0b3JpbmdBcnRpZmFjdHM6IG1vbml0b3JpbmdBcnRpZmFjdHMsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3JldHNEZXBsb3lTdGVwKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzKSB7XG4gICAgICByZXR1cm4gbmV3IHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95U2VjcmV0cycsIHtcbiAgICAgICAgLi4ucHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyxcbiAgICAgICAgaW5wdXQ6IHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveUZyb250ZW5kRGVwbG95U3RlcChtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXApOiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZnJvbnRlbmRCdWlsZE91dHB1dCA9IG1haW5CdWlsZC5hZGRPdXRwdXREaXJlY3RvcnkoJ2J1aWxkJyk7XG4gICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRTdGVwKCdEZXBsb3lGcm9udGVuZCcsIHtcbiAgICAgIGlucHV0OiBmcm9udGVuZEJ1aWxkT3V0cHV0LFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICB9LFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgYGF3cyBzMyBzeW5jIC0tZXhjbHVkZSBpbmRleC5odG1sIC0tY2FjaGUtY29udHJvbCBtYXgtYWdlPTMxNTM2MDAwIC4vICdzMzovLyR7dGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lfSdgLFxuICAgICAgICBgYXdzIHMzIGNwIC0tY2FjaGUtY29udHJvbCBuby1jYWNoZSBpbmRleC5odG1sICdzMzovLyR7dGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lfSdgLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24oYnVpbGRQcm9qZWN0OiBSaW9Db2RlQnVpbGRQcm9qZWN0LCBwb2xpY3lJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVpbGRQcm9qZWN0Um9sZSA9IGJ1aWxkUHJvamVjdC5wcm9qZWN0LnJvbGU7XG4gICAgaWYgKGJ1aWxkUHJvamVjdFJvbGUpIHtcbiAgICAgIGJ1aWxkUHJvamVjdFJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tTWFuYWdlZFBvbGljeUFybih0aGlzLFxuICAgICAgICAgIHBvbGljeUlkLFxuICAgICAgICAgIEZuLmltcG9ydFZhbHVlKCdrYWZrYS1pbnRlZ3JhdGlvbi1wb2xpY3ktYXJuJyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ291bGQgbm90IGFkZCBtYW5hZ2VkIHBvbGljeSBmb3Iga2Fma2EtaW50ZWdyYXRpb24gdG8gQ29kZUJ1aWxkIHByb2plY3Qgb2YgJHtidWlsZFByb2plY3QuaWR9IGR1ZSB0byBtaXNzaW5nIHJvbGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQnVpbGRTcGVjRnJvbUZpbGUoYnVpbGRTcGVjUGF0aD86IHN0cmluZyk6IEJ1aWxkU3BlYyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFidWlsZFNwZWNQYXRoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3QoeWFtbC5sb2FkKGZzLnJlYWRGaWxlU3luYyhidWlsZFNwZWNQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKSBhcyBPYmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWdDb2RlQnVpbGRQcm9qZWN0KHByb2plY3Q6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIFRhZ3Mub2YocHJvamVjdC5wcm9qZWN0KS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -51,6 +51,14 @@ export interface DatadogMonitorProps {
|
|
|
51
51
|
* @see https://docs.datadoghq.com/monitors/configuration/#define-the-search-query
|
|
52
52
|
*/
|
|
53
53
|
readonly query: string;
|
|
54
|
+
/**
|
|
55
|
+
* Convert the query string to lower case. This is useful for passing in AWS resource names into metric queries (metric names are automatically
|
|
56
|
+
* lowercased in Datadog, but the monitor queries not).
|
|
57
|
+
* Defaults to false.
|
|
58
|
+
*
|
|
59
|
+
* @see https://github.com/DataDog/datadog-cloudformation-resources/blob/master/datadog-monitors-monitor-handler/docs/cloudformationoptions.md#lowercasequery
|
|
60
|
+
*/
|
|
61
|
+
readonly lowercaseQuery?: boolean;
|
|
54
62
|
/**
|
|
55
63
|
* The message pattern for the monitor
|
|
56
64
|
*
|