@umccr/htsget-lambda 0.9.6 → 0.10.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/docs/config/CONFIG.md +39 -38
- package/lib/config.d.ts +6 -0
- package/lib/config.js +1 -1
- package/lib/config.ts +7 -0
- package/lib/htsget-lambda.js +2 -1
- package/lib/htsget-lambda.ts +1 -0
- package/package.json +12 -8
package/docs/config/CONFIG.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
**@umccr/htsget-lambda**
|
|
2
2
|
|
|
3
3
|
***
|
|
4
4
|
|
|
5
|
-
# htsget-lambda
|
|
5
|
+
# @umccr/htsget-lambda
|
|
6
6
|
|
|
7
7
|
## CorsConifg
|
|
8
8
|
|
|
9
|
-
Defined in: [aws/lib/config.ts:
|
|
9
|
+
Defined in: [aws/lib/config.ts:180](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L180)
|
|
10
10
|
|
|
11
11
|
CORS configuration for the htsget-rs server.
|
|
12
12
|
|
|
@@ -14,18 +14,18 @@ CORS configuration for the htsget-rs server.
|
|
|
14
14
|
|
|
15
15
|
| Property | Type | Default value | Description | Defined in |
|
|
16
16
|
| ------ | ------ | ------ | ------ | ------ |
|
|
17
|
-
| <a id="allowcredentials"></a> `allowCredentials?` | `boolean` | `false` | CORS allow credentials. | [aws/lib/config.ts:
|
|
18
|
-
| <a id="allowheaders"></a> `allowHeaders?` | `string`[] | `["*"]` | CORS allow headers. | [aws/lib/config.ts:
|
|
19
|
-
| <a id="allowmethods"></a> `allowMethods?` | `CorsHttpMethod`[] | `[CorsHttpMethod.ANY]` | CORS allow methods. | [aws/lib/config.ts:
|
|
20
|
-
| <a id="alloworigins"></a> `allowOrigins?` | `string`[] | `["*"]` | CORS allow origins. | [aws/lib/config.ts:
|
|
21
|
-
| <a id="exposeheaders"></a> `exposeHeaders?` | `string`[] | `["*"]` | CORS expose headers. | [aws/lib/config.ts:
|
|
22
|
-
| <a id="maxage"></a> `maxAge?` | `Duration` | `Duration.days(30)` | CORS max age. | [aws/lib/config.ts:
|
|
17
|
+
| <a id="property-allowcredentials"></a> `allowCredentials?` | `boolean` | `false` | CORS allow credentials. | [aws/lib/config.ts:186](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L186) |
|
|
18
|
+
| <a id="property-allowheaders"></a> `allowHeaders?` | `string`[] | `["*"]` | CORS allow headers. | [aws/lib/config.ts:193](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L193) |
|
|
19
|
+
| <a id="property-allowmethods"></a> `allowMethods?` | `CorsHttpMethod`[] | `[CorsHttpMethod.ANY]` | CORS allow methods. | [aws/lib/config.ts:200](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L200) |
|
|
20
|
+
| <a id="property-alloworigins"></a> `allowOrigins?` | `string`[] | `["*"]` | CORS allow origins. | [aws/lib/config.ts:207](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L207) |
|
|
21
|
+
| <a id="property-exposeheaders"></a> `exposeHeaders?` | `string`[] | `["*"]` | CORS expose headers. | [aws/lib/config.ts:214](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L214) |
|
|
22
|
+
| <a id="property-maxage"></a> `maxAge?` | `Duration` | `Duration.days(30)` | CORS max age. | [aws/lib/config.ts:221](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L221) |
|
|
23
23
|
|
|
24
24
|
***
|
|
25
25
|
|
|
26
26
|
## HtsgetConfig
|
|
27
27
|
|
|
28
|
-
Defined in: [aws/lib/config.ts:
|
|
28
|
+
Defined in: [aws/lib/config.ts:228](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L228)
|
|
29
29
|
|
|
30
30
|
Configuration for the htsget-rs server. This allows specifying the options
|
|
31
31
|
available in the htsget-rs config: https://github.com/umccr/htsget-rs/tree/main/htsget-config
|
|
@@ -34,9 +34,9 @@ available in the htsget-rs config: https://github.com/umccr/htsget-rs/tree/main/
|
|
|
34
34
|
|
|
35
35
|
| Property | Type | Default value | Description | Defined in |
|
|
36
36
|
| ------ | ------ | ------ | ------ | ------ |
|
|
37
|
-
| <a id="environment_override"></a> `environment_override?` | `Record`\<`string`, `unknown`\> | `undefined` | Any additional htsget-rs options can be specified here as environment variables. These will override any options set in this construct, and allows using advanced configuration. Options here should contain the `HTSGET_` prefix. | [aws/lib/config.ts:
|
|
38
|
-
| <a id="locations"></a> `locations?` | [`HtsgetLocation`](#htsgetlocation)[] | `[]` | The locations for the htsget-rs server. This is the same as the htsget-rs config locations: https://github.com/umccr/htsget-rs/tree/main/htsget-config#quickstart Any `s3://...` locations will automatically be added to the bucket access policy. | [aws/lib/config.ts:
|
|
39
|
-
| <a id="service_info"></a> `service_info?` | `Record`\<`string`, `unknown`\> | `undefined` | Service info fields to configure for the server. This is the same as the htsget-rs config service_info: https://github.com/umccr/htsget-rs/tree/main/htsget-config#service-info-config | [aws/lib/config.ts:
|
|
37
|
+
| <a id="property-environment_override"></a> `environment_override?` | `Record`\<`string`, `unknown`\> | `undefined` | Any additional htsget-rs options can be specified here as environment variables. These will override any options set in this construct, and allows using advanced configuration. Options here should contain the `HTSGET_` prefix. | [aws/lib/config.ts:254](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L254) |
|
|
38
|
+
| <a id="property-locations"></a> `locations?` | [`HtsgetLocation`](#htsgetlocation)[] | `[]` | The locations for the htsget-rs server. This is the same as the htsget-rs config locations: https://github.com/umccr/htsget-rs/tree/main/htsget-config#quickstart Any `s3://...` locations will automatically be added to the bucket access policy. | [aws/lib/config.ts:237](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L237) |
|
|
39
|
+
| <a id="property-service_info"></a> `service_info?` | `Record`\<`string`, `unknown`\> | `undefined` | Service info fields to configure for the server. This is the same as the htsget-rs config service_info: https://github.com/umccr/htsget-rs/tree/main/htsget-config#service-info-config | [aws/lib/config.ts:245](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L245) |
|
|
40
40
|
|
|
41
41
|
***
|
|
42
42
|
|
|
@@ -50,30 +50,31 @@ Settings related to the htsget lambda construct props.
|
|
|
50
50
|
|
|
51
51
|
| Property | Type | Default value | Description | Defined in |
|
|
52
52
|
| ------ | ------ | ------ | ------ | ------ |
|
|
53
|
-
| <a id="bucketname"></a> `bucketName?` | `string` | `undefined` | The name of the bucket to create when using `copyTestData`. Defaults to the auto-generated CDK construct name. | [aws/lib/config.ts:86](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L86) |
|
|
54
|
-
| <a id="buildenvironment"></a> `buildEnvironment?` | `Record`\<`string`, `string`\> | `undefined` | Override the environment variables used to build htsget. Note that this only adds environment variables that get used to build htsget-rs with `cargo`. It has no effect on the environment variables that htsget-rs has when the Lambda function is deployed. In general, leave this undefined unless there is a specific reason to override the build environment. | [aws/lib/config.ts:148](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L148) |
|
|
55
|
-
| <a id="cargolambdaflags"></a> `cargoLambdaFlags?` | `string`[] | `undefined` | Override any cargo lambda flags for the build. By default, features are resolved automatically based on the config and `HtsgetLocation[]`. This option overrides that and any automatically added flags. | [aws/lib/config.ts:68](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L68) |
|
|
56
|
-
| <a id="certificatearn"></a> `certificateArn?` | `string` | `undefined` | The arn of the certificate to use. This will not create a `Certificate` if specified, and will instead lookup an existing one. | [aws/lib/config.ts:116](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L116) |
|
|
57
|
-
| <a id="copytestdata"></a> `copyTestData?` | `boolean` | `false` | Copy the test data directory to a new bucket: https://github.com/umccr/htsget-rs/tree/main/data Also copies the Crypt4GH keys to Secrets Manager. Automatically the htsget-rs server access to the bucket and secrets using the locations config. | [aws/lib/config.ts:79](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L79) |
|
|
58
|
-
| <a id="cors"></a> `cors?` | [`CorsConifg`](#corsconifg) | same as the `CorsConfig` defaults | CORS configuration for the htsget-rs server. Values here are propagated to CORS options in htsget-rs. | [aws/lib/config.ts:45](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L45) |
|
|
59
|
-
| <a id="domain"></a> `domain?` | `string` | `undefined` | The domain name for the htsget server. This must be specified if `httpApi` is not set. This assumes that a `HostedZone` exists for this domain. | [aws/lib/config.ts:24](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L24) |
|
|
60
|
-
| <a id="functionname"></a> `functionName?` | `string` | `undefined` | The name of the Lambda function. Defaults to the auto-generated CDK construct name. | [aws/lib/config.ts:93](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L93) |
|
|
61
|
-
| <a id="gitforceclone"></a> `gitForceClone?` | `boolean` | `false` | Whether to force a git clone for every build. If this is false, then the git repo is only cloned once for every git reference in a temporary directory. Otherwise, the repo is cloned every time. | [aws/lib/config.ts:60](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L60) |
|
|
62
|
-
| <a id="gitreference"></a> `gitReference?` | `string` | `"main"` | The git reference to fetch from the htsget-rs repo. | [aws/lib/config.ts:52](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L52) |
|
|
63
|
-
| <a id="hostedzone"></a> `hostedZone?` | `IHostedZone` | `undefined` | Use the provided hosted zone instead of looking it up from the domain name. | [aws/lib/config.ts:123](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L123) |
|
|
64
|
-
| <a id="htsgetconfig
|
|
65
|
-
| <a id="httpapi"></a> `httpApi?` | `IHttpApi` | `undefined` | Manually specify an `HttpApi`. This will not create a `HostedZone`, any Route53 records, certificates, or authorizers, and will instead rely on the existing `HttpApi`. | [aws/lib/config.ts:108](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L108) |
|
|
66
|
-
| <a id="jwt"></a> `jwt?` | [`JwtConfig`](#jwtconfig) | `undefined`, defaults to a public deployment | Whether this deployment is gated behind a JWT authorizer, or if its public. | [aws/lib/config.ts:38](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L38) |
|
|
67
|
-
| <a id="role"></a> `role?` | `IRole` | `undefined` | Use the provided role instead of creating one. This will ignore any configuration related to permissions for buckets and secrets, and rely on the existing role. | [aws/lib/config.ts:131](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L131) |
|
|
68
|
-
| <a id="rolename"></a> `roleName?` | `string` | `undefined` | The name of the role for the Lambda function. Defaults to the auto-generated CDK construct name. | [aws/lib/config.ts:138](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L138) |
|
|
69
|
-
| <a id="
|
|
70
|
-
| <a id="
|
|
53
|
+
| <a id="property-bucketname"></a> `bucketName?` | `string` | `undefined` | The name of the bucket to create when using `copyTestData`. Defaults to the auto-generated CDK construct name. | [aws/lib/config.ts:86](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L86) |
|
|
54
|
+
| <a id="property-buildenvironment"></a> `buildEnvironment?` | `Record`\<`string`, `string`\> | `undefined` | Override the environment variables used to build htsget. Note that this only adds environment variables that get used to build htsget-rs with `cargo`. It has no effect on the environment variables that htsget-rs has when the Lambda function is deployed. In general, leave this undefined unless there is a specific reason to override the build environment. | [aws/lib/config.ts:148](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L148) |
|
|
55
|
+
| <a id="property-cargolambdaflags"></a> `cargoLambdaFlags?` | `string`[] | `undefined` | Override any cargo lambda flags for the build. By default, features are resolved automatically based on the config and `HtsgetLocation[]`. This option overrides that and any automatically added flags. | [aws/lib/config.ts:68](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L68) |
|
|
56
|
+
| <a id="property-certificatearn"></a> `certificateArn?` | `string` | `undefined` | The arn of the certificate to use. This will not create a `Certificate` if specified, and will instead lookup an existing one. | [aws/lib/config.ts:116](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L116) |
|
|
57
|
+
| <a id="property-copytestdata"></a> `copyTestData?` | `boolean` | `false` | Copy the test data directory to a new bucket: https://github.com/umccr/htsget-rs/tree/main/data Also copies the Crypt4GH keys to Secrets Manager. Automatically the htsget-rs server access to the bucket and secrets using the locations config. | [aws/lib/config.ts:79](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L79) |
|
|
58
|
+
| <a id="property-cors"></a> `cors?` | [`CorsConifg`](#corsconifg) | same as the `CorsConfig` defaults | CORS configuration for the htsget-rs server. Values here are propagated to CORS options in htsget-rs. | [aws/lib/config.ts:45](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L45) |
|
|
59
|
+
| <a id="property-domain"></a> `domain?` | `string` | `undefined` | The domain name for the htsget server. This must be specified if `httpApi` is not set. This assumes that a `HostedZone` exists for this domain. | [aws/lib/config.ts:24](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L24) |
|
|
60
|
+
| <a id="property-functionname"></a> `functionName?` | `string` | `undefined` | The name of the Lambda function. Defaults to the auto-generated CDK construct name. | [aws/lib/config.ts:93](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L93) |
|
|
61
|
+
| <a id="property-gitforceclone"></a> `gitForceClone?` | `boolean` | `false` | Whether to force a git clone for every build. If this is false, then the git repo is only cloned once for every git reference in a temporary directory. Otherwise, the repo is cloned every time. | [aws/lib/config.ts:60](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L60) |
|
|
62
|
+
| <a id="property-gitreference"></a> `gitReference?` | `string` | `"main"` | The git reference to fetch from the htsget-rs repo. | [aws/lib/config.ts:52](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L52) |
|
|
63
|
+
| <a id="property-hostedzone"></a> `hostedZone?` | `IHostedZone` | `undefined` | Use the provided hosted zone instead of looking it up from the domain name. | [aws/lib/config.ts:123](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L123) |
|
|
64
|
+
| <a id="property-htsgetconfig"></a> `htsgetConfig?` | [`HtsgetConfig`](#htsgetconfig) | `undefined` | The htsget-rs config options. Use this to specify any locations and htsget-rs options. | [aws/lib/config.ts:16](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L16) |
|
|
65
|
+
| <a id="property-httpapi"></a> `httpApi?` | `IHttpApi` | `undefined` | Manually specify an `HttpApi`. This will not create a `HostedZone`, any Route53 records, certificates, or authorizers, and will instead rely on the existing `HttpApi`. | [aws/lib/config.ts:108](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L108) |
|
|
66
|
+
| <a id="property-jwt"></a> `jwt?` | [`JwtConfig`](#jwtconfig) | `undefined`, defaults to a public deployment | Whether this deployment is gated behind a JWT authorizer, or if its public. | [aws/lib/config.ts:38](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L38) |
|
|
67
|
+
| <a id="property-role"></a> `role?` | `IRole` | `undefined` | Use the provided role instead of creating one. This will ignore any configuration related to permissions for buckets and secrets, and rely on the existing role. | [aws/lib/config.ts:131](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L131) |
|
|
68
|
+
| <a id="property-rolename"></a> `roleName?` | `string` | `undefined` | The name of the role for the Lambda function. Defaults to the auto-generated CDK construct name. | [aws/lib/config.ts:138](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L138) |
|
|
69
|
+
| <a id="property-runtime"></a> `runtime?` | `"provided.al2023"` \| `"provided.al2"` | `uses provided.al2023` | Specify the runtime for the deployed htsget Lambda function. | [aws/lib/config.ts:155](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L155) |
|
|
70
|
+
| <a id="property-subdomain"></a> `subDomain?` | `string` | `"htsget"` | The domain name prefix to use for the htsget-rs server. | [aws/lib/config.ts:31](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L31) |
|
|
71
|
+
| <a id="property-vpc"></a> `vpc?` | `IVpc` | `undefined` | Optionally specify a VPC for the Lambda function. | [aws/lib/config.ts:100](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L100) |
|
|
71
72
|
|
|
72
73
|
***
|
|
73
74
|
|
|
74
75
|
## HtsgetLocation
|
|
75
76
|
|
|
76
|
-
Defined in: [aws/lib/config.ts:
|
|
77
|
+
Defined in: [aws/lib/config.ts:260](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L260)
|
|
77
78
|
|
|
78
79
|
Config for locations.
|
|
79
80
|
|
|
@@ -81,15 +82,15 @@ Config for locations.
|
|
|
81
82
|
|
|
82
83
|
| Property | Type | Default value | Description | Defined in |
|
|
83
84
|
| ------ | ------ | ------ | ------ | ------ |
|
|
84
|
-
| <a id="location"></a> `location` | `string` | `undefined` | The location string. | [aws/lib/config.ts:
|
|
85
|
-
| <a id="private_key"></a> `private_key?` | `string` | `undefined` | Optional Crypt4GH private key secret ARN or name. | [aws/lib/config.ts:
|
|
86
|
-
| <a id="public_key"></a> `public_key?` | `string` | `undefined` | Optional Crypt4GH public key secret ARN or name. | [aws/lib/config.ts:
|
|
85
|
+
| <a id="property-location"></a> `location` | `string` | `undefined` | The location string. | [aws/lib/config.ts:264](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L264) |
|
|
86
|
+
| <a id="property-private_key"></a> `private_key?` | `string` | `undefined` | Optional Crypt4GH private key secret ARN or name. | [aws/lib/config.ts:270](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L270) |
|
|
87
|
+
| <a id="property-public_key"></a> `public_key?` | `string` | `undefined` | Optional Crypt4GH public key secret ARN or name. | [aws/lib/config.ts:276](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L276) |
|
|
87
88
|
|
|
88
89
|
***
|
|
89
90
|
|
|
90
91
|
## JwtConfig
|
|
91
92
|
|
|
92
|
-
Defined in: [aws/lib/config.ts:
|
|
93
|
+
Defined in: [aws/lib/config.ts:161](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L161)
|
|
93
94
|
|
|
94
95
|
JWT authorization settings.
|
|
95
96
|
|
|
@@ -97,5 +98,5 @@ JWT authorization settings.
|
|
|
97
98
|
|
|
98
99
|
| Property | Type | Default value | Description | Defined in |
|
|
99
100
|
| ------ | ------ | ------ | ------ | ------ |
|
|
100
|
-
| <a id="audience"></a> `audience?` | `string`[] | `[]` | The JWT audience. | [aws/lib/config.ts:
|
|
101
|
-
| <a id="coguserpoolid"></a> `cogUserPoolId?` | `string` | `undefined`, creates a new user pool | The cognito user pool id for the authorizer. If this is not set, then a new user pool is created. | [aws/lib/config.ts:
|
|
101
|
+
| <a id="property-audience"></a> `audience?` | `string`[] | `[]` | The JWT audience. | [aws/lib/config.ts:167](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L167) |
|
|
102
|
+
| <a id="property-coguserpoolid"></a> `cogUserPoolId?` | `string` | `undefined`, creates a new user pool | The cognito user pool id for the authorizer. If this is not set, then a new user pool is created. | [aws/lib/config.ts:174](https://github.com/umccr/htsget-deploy/blob/main/aws/lib/config.ts#L174) |
|
package/lib/config.d.ts
CHANGED
|
@@ -128,6 +128,12 @@ export interface HtsgetLambdaProps {
|
|
|
128
128
|
* @defaultValue undefined
|
|
129
129
|
*/
|
|
130
130
|
buildEnvironment?: Record<string, string>;
|
|
131
|
+
/**
|
|
132
|
+
* Specify the runtime for the deployed htsget Lambda function.
|
|
133
|
+
*
|
|
134
|
+
* @defaultValue uses provided.al2023
|
|
135
|
+
*/
|
|
136
|
+
runtime?: "provided.al2023" | "provided.al2";
|
|
131
137
|
}
|
|
132
138
|
/**
|
|
133
139
|
* JWT authorization settings.
|
package/lib/config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvcnNIdHRwTWV0aG9kLCBJSHR0cEFwaSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyXCI7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSUhvc3RlZFpvbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcblxuLyoqXG4gKiBTZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBodHNnZXQgbGFtYmRhIGNvbnN0cnVjdCBwcm9wcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHNnZXRMYW1iZGFQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaHRzZ2V0LXJzIGNvbmZpZyBvcHRpb25zLiBVc2UgdGhpcyB0byBzcGVjaWZ5IGFueSBsb2NhdGlvbnMgYW5kIGh0c2dldC1ycyBvcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgaHRzZ2V0Q29uZmlnPzogSHRzZ2V0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgZm9yIHRoZSBodHNnZXQgc2VydmVyLiBUaGlzIG11c3QgYmUgc3BlY2lmaWVkIGlmIGBodHRwQXBpYCBpcyBub3Qgc2V0LiBUaGlzIGFzc3VtZXNcbiAgICogdGhhdCBhIGBIb3N0ZWRab25lYCBleGlzdHMgZm9yIHRoaXMgZG9tYWluLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgcHJlZml4IHRvIHVzZSBmb3IgdGhlIGh0c2dldC1ycyBzZXJ2ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJodHNnZXRcIlxuICAgKi9cbiAgc3ViRG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGVwbG95bWVudCBpcyBnYXRlZCBiZWhpbmQgYSBKV1QgYXV0aG9yaXplciwgb3IgaWYgaXRzIHB1YmxpYy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBgdW5kZWZpbmVkYCwgZGVmYXVsdHMgdG8gYSBwdWJsaWMgZGVwbG95bWVudFxuICAgKi9cbiAgand0PzogSnd0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBDT1JTIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBodHNnZXQtcnMgc2VydmVyLiBWYWx1ZXMgaGVyZSBhcmUgcHJvcGFnYXRlZCB0byBDT1JTIG9wdGlvbnMgaW4gaHRzZ2V0LXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHNhbWUgYXMgdGhlIGBDb3JzQ29uZmlnYCBkZWZhdWx0c1xuICAgKi9cbiAgY29ycz86IENvcnNDb25pZmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnaXQgcmVmZXJlbmNlIHRvIGZldGNoIGZyb20gdGhlIGh0c2dldC1ycyByZXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFwibWFpblwiXG4gICAqL1xuICBnaXRSZWZlcmVuY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgYSBnaXQgY2xvbmUgZm9yIGV2ZXJ5IGJ1aWxkLiBJZiB0aGlzIGlzIGZhbHNlLCB0aGVuIHRoZSBnaXQgcmVwbyBpcyBvbmx5IGNsb25lZCBvbmNlXG4gICAqIGZvciBldmVyeSBnaXQgcmVmZXJlbmNlIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gT3RoZXJ3aXNlLCB0aGUgcmVwbyBpcyBjbG9uZWQgZXZlcnkgdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgZ2l0Rm9yY2VDbG9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGFueSBjYXJnbyBsYW1iZGEgZmxhZ3MgZm9yIHRoZSBidWlsZC4gQnkgZGVmYXVsdCwgZmVhdHVyZXMgYXJlIHJlc29sdmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlXG4gICAqIGNvbmZpZyBhbmQgYEh0c2dldExvY2F0aW9uW11gLiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBhbmQgYW55IGF1dG9tYXRpY2FsbHkgYWRkZWQgZmxhZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBjYXJnb0xhbWJkYUZsYWdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvcHkgdGhlIHRlc3QgZGF0YSBkaXJlY3RvcnkgdG8gYSBuZXcgYnVja2V0OlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdW1jY3IvaHRzZ2V0LXJzL3RyZWUvbWFpbi9kYXRhXG4gICAqXG4gICAqIEFsc28gY29waWVzIHRoZSBDcnlwdDRHSCBrZXlzIHRvIFNlY3JldHMgTWFuYWdlci4gQXV0b21hdGljYWxseSB0aGUgaHRzZ2V0LXJzIHNlcnZlciBhY2Nlc3NcbiAgICogdG8gdGhlIGJ1Y2tldCBhbmQgc2VjcmV0cyB1c2luZyB0aGUgbG9jYXRpb25zIGNvbmZpZy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgY29weVRlc3REYXRhPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCB0byBjcmVhdGUgd2hlbiB1c2luZyBgY29weVRlc3REYXRhYC4gRGVmYXVsdHMgdG8gdGhlIGF1dG8tZ2VuZXJhdGVkIENESyBjb25zdHJ1Y3QgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24uIERlZmF1bHRzIHRvIHRoZSBhdXRvLWdlbmVyYXRlZCBDREsgY29uc3RydWN0IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSBhIFZQQyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHZwYz86IElWcGM7XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IHNwZWNpZnkgYW4gYEh0dHBBcGlgLiBUaGlzIHdpbGwgbm90IGNyZWF0ZSBhIGBIb3N0ZWRab25lYCwgYW55IFJvdXRlNTMgcmVjb3JkcywgY2VydGlmaWNhdGVzLFxuICAgKiBvciBhdXRob3JpemVycywgYW5kIHdpbGwgaW5zdGVhZCByZWx5IG9uIHRoZSBleGlzdGluZyBgSHR0cEFwaWAuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBodHRwQXBpPzogSUh0dHBBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBhcm4gb2YgdGhlIGNlcnRpZmljYXRlIHRvIHVzZS4gVGhpcyB3aWxsIG5vdCBjcmVhdGUgYSBgQ2VydGlmaWNhdGVgIGlmIHNwZWNpZmllZCwgYW5kIHdpbGwgaW5zdGVhZCBsb29rdXBcbiAgICogYW4gZXhpc3Rpbmcgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgY2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgcHJvdmlkZWQgaG9zdGVkIHpvbmUgaW5zdGVhZCBvZiBsb29raW5nIGl0IHVwIGZyb20gdGhlIGRvbWFpbiBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgaG9zdGVkWm9uZT86IElIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIHByb3ZpZGVkIHJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUuIFRoaXMgd2lsbCBpZ25vcmUgYW55IGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBmb3JcbiAgICogYnVja2V0cyBhbmQgc2VjcmV0cywgYW5kIHJlbHkgb24gdGhlIGV4aXN0aW5nIHJvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb2xlIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgYXV0by1nZW5lcmF0ZWQgQ0RLIGNvbnN0cnVjdCBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCB0byBidWlsZCBodHNnZXQuIE5vdGUgdGhhdCB0aGlzIG9ubHkgYWRkcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdFxuICAgKiBnZXQgdXNlZCB0byBidWlsZCBodHNnZXQtcnMgd2l0aCBgY2FyZ29gLiBJdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBodHNnZXQtcnMgaGFzIHdoZW5cbiAgICogdGhlIExhbWJkYSBmdW5jdGlvbiBpcyBkZXBsb3llZC4gSW4gZ2VuZXJhbCwgbGVhdmUgdGhpcyB1bmRlZmluZWQgdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lmaWMgcmVhc29uIHRvIG92ZXJyaWRlXG4gICAqIHRoZSBidWlsZCBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIGJ1aWxkRW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvcnNIdHRwTWV0aG9kLCBJSHR0cEFwaSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyXCI7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSUhvc3RlZFpvbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcblxuLyoqXG4gKiBTZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBodHNnZXQgbGFtYmRhIGNvbnN0cnVjdCBwcm9wcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHNnZXRMYW1iZGFQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaHRzZ2V0LXJzIGNvbmZpZyBvcHRpb25zLiBVc2UgdGhpcyB0byBzcGVjaWZ5IGFueSBsb2NhdGlvbnMgYW5kIGh0c2dldC1ycyBvcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgaHRzZ2V0Q29uZmlnPzogSHRzZ2V0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgZm9yIHRoZSBodHNnZXQgc2VydmVyLiBUaGlzIG11c3QgYmUgc3BlY2lmaWVkIGlmIGBodHRwQXBpYCBpcyBub3Qgc2V0LiBUaGlzIGFzc3VtZXNcbiAgICogdGhhdCBhIGBIb3N0ZWRab25lYCBleGlzdHMgZm9yIHRoaXMgZG9tYWluLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgcHJlZml4IHRvIHVzZSBmb3IgdGhlIGh0c2dldC1ycyBzZXJ2ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJodHNnZXRcIlxuICAgKi9cbiAgc3ViRG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGVwbG95bWVudCBpcyBnYXRlZCBiZWhpbmQgYSBKV1QgYXV0aG9yaXplciwgb3IgaWYgaXRzIHB1YmxpYy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBgdW5kZWZpbmVkYCwgZGVmYXVsdHMgdG8gYSBwdWJsaWMgZGVwbG95bWVudFxuICAgKi9cbiAgand0PzogSnd0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBDT1JTIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBodHNnZXQtcnMgc2VydmVyLiBWYWx1ZXMgaGVyZSBhcmUgcHJvcGFnYXRlZCB0byBDT1JTIG9wdGlvbnMgaW4gaHRzZ2V0LXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHNhbWUgYXMgdGhlIGBDb3JzQ29uZmlnYCBkZWZhdWx0c1xuICAgKi9cbiAgY29ycz86IENvcnNDb25pZmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnaXQgcmVmZXJlbmNlIHRvIGZldGNoIGZyb20gdGhlIGh0c2dldC1ycyByZXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFwibWFpblwiXG4gICAqL1xuICBnaXRSZWZlcmVuY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgYSBnaXQgY2xvbmUgZm9yIGV2ZXJ5IGJ1aWxkLiBJZiB0aGlzIGlzIGZhbHNlLCB0aGVuIHRoZSBnaXQgcmVwbyBpcyBvbmx5IGNsb25lZCBvbmNlXG4gICAqIGZvciBldmVyeSBnaXQgcmVmZXJlbmNlIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gT3RoZXJ3aXNlLCB0aGUgcmVwbyBpcyBjbG9uZWQgZXZlcnkgdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgZ2l0Rm9yY2VDbG9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGFueSBjYXJnbyBsYW1iZGEgZmxhZ3MgZm9yIHRoZSBidWlsZC4gQnkgZGVmYXVsdCwgZmVhdHVyZXMgYXJlIHJlc29sdmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlXG4gICAqIGNvbmZpZyBhbmQgYEh0c2dldExvY2F0aW9uW11gLiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBhbmQgYW55IGF1dG9tYXRpY2FsbHkgYWRkZWQgZmxhZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBjYXJnb0xhbWJkYUZsYWdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvcHkgdGhlIHRlc3QgZGF0YSBkaXJlY3RvcnkgdG8gYSBuZXcgYnVja2V0OlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdW1jY3IvaHRzZ2V0LXJzL3RyZWUvbWFpbi9kYXRhXG4gICAqXG4gICAqIEFsc28gY29waWVzIHRoZSBDcnlwdDRHSCBrZXlzIHRvIFNlY3JldHMgTWFuYWdlci4gQXV0b21hdGljYWxseSB0aGUgaHRzZ2V0LXJzIHNlcnZlciBhY2Nlc3NcbiAgICogdG8gdGhlIGJ1Y2tldCBhbmQgc2VjcmV0cyB1c2luZyB0aGUgbG9jYXRpb25zIGNvbmZpZy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgY29weVRlc3REYXRhPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCB0byBjcmVhdGUgd2hlbiB1c2luZyBgY29weVRlc3REYXRhYC4gRGVmYXVsdHMgdG8gdGhlIGF1dG8tZ2VuZXJhdGVkIENESyBjb25zdHJ1Y3QgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24uIERlZmF1bHRzIHRvIHRoZSBhdXRvLWdlbmVyYXRlZCBDREsgY29uc3RydWN0IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSBhIFZQQyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHZwYz86IElWcGM7XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IHNwZWNpZnkgYW4gYEh0dHBBcGlgLiBUaGlzIHdpbGwgbm90IGNyZWF0ZSBhIGBIb3N0ZWRab25lYCwgYW55IFJvdXRlNTMgcmVjb3JkcywgY2VydGlmaWNhdGVzLFxuICAgKiBvciBhdXRob3JpemVycywgYW5kIHdpbGwgaW5zdGVhZCByZWx5IG9uIHRoZSBleGlzdGluZyBgSHR0cEFwaWAuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBodHRwQXBpPzogSUh0dHBBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBhcm4gb2YgdGhlIGNlcnRpZmljYXRlIHRvIHVzZS4gVGhpcyB3aWxsIG5vdCBjcmVhdGUgYSBgQ2VydGlmaWNhdGVgIGlmIHNwZWNpZmllZCwgYW5kIHdpbGwgaW5zdGVhZCBsb29rdXBcbiAgICogYW4gZXhpc3Rpbmcgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgY2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgcHJvdmlkZWQgaG9zdGVkIHpvbmUgaW5zdGVhZCBvZiBsb29raW5nIGl0IHVwIGZyb20gdGhlIGRvbWFpbiBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgaG9zdGVkWm9uZT86IElIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIHByb3ZpZGVkIHJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUuIFRoaXMgd2lsbCBpZ25vcmUgYW55IGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBmb3JcbiAgICogYnVja2V0cyBhbmQgc2VjcmV0cywgYW5kIHJlbHkgb24gdGhlIGV4aXN0aW5nIHJvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb2xlIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgYXV0by1nZW5lcmF0ZWQgQ0RLIGNvbnN0cnVjdCBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCB0byBidWlsZCBodHNnZXQuIE5vdGUgdGhhdCB0aGlzIG9ubHkgYWRkcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdFxuICAgKiBnZXQgdXNlZCB0byBidWlsZCBodHNnZXQtcnMgd2l0aCBgY2FyZ29gLiBJdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBodHNnZXQtcnMgaGFzIHdoZW5cbiAgICogdGhlIExhbWJkYSBmdW5jdGlvbiBpcyBkZXBsb3llZC4gSW4gZ2VuZXJhbCwgbGVhdmUgdGhpcyB1bmRlZmluZWQgdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lmaWMgcmVhc29uIHRvIG92ZXJyaWRlXG4gICAqIHRoZSBidWlsZCBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIGJ1aWxkRW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBydW50aW1lIGZvciB0aGUgZGVwbG95ZWQgaHRzZ2V0IExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1c2VzIHByb3ZpZGVkLmFsMjAyM1xuICAgKi9cbiAgcnVudGltZT86IFwicHJvdmlkZWQuYWwyMDIzXCIgfCBcInByb3ZpZGVkLmFsMlwiO1xufVxuXG4vKipcbiAqIEpXVCBhdXRob3JpemF0aW9uIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEp3dENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgSldUIGF1ZGllbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFtdXG4gICAqL1xuICBhdWRpZW5jZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29nbml0byB1c2VyIHBvb2wgaWQgZm9yIHRoZSBhdXRob3JpemVyLiBJZiB0aGlzIGlzIG5vdCBzZXQsIHRoZW4gYSBuZXcgdXNlciBwb29sIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYHVuZGVmaW5lZGAsIGNyZWF0ZXMgYSBuZXcgdXNlciBwb29sXG4gICAqL1xuICBjb2dVc2VyUG9vbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENPUlMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGh0c2dldC1ycyBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29yc0NvbmlmZyB7XG4gIC8qKlxuICAgKiBDT1JTIGFsbG93IGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAqL1xuICBhbGxvd0NyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ09SUyBhbGxvdyBoZWFkZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFtcIipcIl1cbiAgICovXG4gIGFsbG93SGVhZGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDT1JTIGFsbG93IG1ldGhvZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgW0NvcnNIdHRwTWV0aG9kLkFOWV1cbiAgICovXG4gIGFsbG93TWV0aG9kcz86IENvcnNIdHRwTWV0aG9kW107XG5cbiAgLyoqXG4gICAqIENPUlMgYWxsb3cgb3JpZ2lucy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBbXCIqXCJdXG4gICAqL1xuICBhbGxvd09yaWdpbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ09SUyBleHBvc2UgaGVhZGVycy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBbXCIqXCJdXG4gICAqL1xuICBleHBvc2VIZWFkZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENPUlMgbWF4IGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBEdXJhdGlvbi5kYXlzKDMwKVxuICAgKi9cbiAgbWF4QWdlPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGh0c2dldC1ycyBzZXJ2ZXIuIFRoaXMgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIG9wdGlvbnNcbiAqIGF2YWlsYWJsZSBpbiB0aGUgaHRzZ2V0LXJzIGNvbmZpZzogaHR0cHM6Ly9naXRodWIuY29tL3VtY2NyL2h0c2dldC1ycy90cmVlL21haW4vaHRzZ2V0LWNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0c2dldENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb25zIGZvciB0aGUgaHRzZ2V0LXJzIHNlcnZlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgaHRzZ2V0LXJzIGNvbmZpZyBsb2NhdGlvbnM6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS91bWNjci9odHNnZXQtcnMvdHJlZS9tYWluL2h0c2dldC1jb25maWcjcXVpY2tzdGFydFxuICAgKlxuICAgKiBBbnkgYHMzOi8vLi4uYCBsb2NhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkZGVkIHRvIHRoZSBidWNrZXQgYWNjZXNzIHBvbGljeS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBbXVxuICAgKi9cbiAgbG9jYXRpb25zPzogSHRzZ2V0TG9jYXRpb25bXTtcblxuICAvKipcbiAgICogU2VydmljZSBpbmZvIGZpZWxkcyB0byBjb25maWd1cmUgZm9yIHRoZSBzZXJ2ZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGh0c2dldC1ycyBjb25maWcgc2VydmljZV9pbmZvOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdW1jY3IvaHRzZ2V0LXJzL3RyZWUvbWFpbi9odHNnZXQtY29uZmlnI3NlcnZpY2UtaW5mby1jb25maWdcbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHNlcnZpY2VfaW5mbz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBBbnkgYWRkaXRpb25hbCBodHNnZXQtcnMgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGhlcmUgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGVzZSB3aWxsIG92ZXJyaWRlXG4gICAqIGFueSBvcHRpb25zIHNldCBpbiB0aGlzIGNvbnN0cnVjdCwgYW5kIGFsbG93cyB1c2luZyBhZHZhbmNlZCBjb25maWd1cmF0aW9uLiBPcHRpb25zIGhlcmUgc2hvdWxkIGNvbnRhaW5cbiAgICogdGhlIGBIVFNHRVRfYCBwcmVmaXguXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICBlbnZpcm9ubWVudF9vdmVycmlkZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENvbmZpZyBmb3IgbG9jYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0c2dldExvY2F0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBzdHJpbmcuXG4gICAqL1xuICBsb2NhdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ3J5cHQ0R0ggcHJpdmF0ZSBrZXkgc2VjcmV0IEFSTiBvciBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZV9rZXk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBDcnlwdDRHSCBwdWJsaWMga2V5IHNlY3JldCBBUk4gb3IgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHB1YmxpY19rZXk/OiBzdHJpbmc7XG59XG4iXX0=
|
package/lib/config.ts
CHANGED
|
@@ -146,6 +146,13 @@ export interface HtsgetLambdaProps {
|
|
|
146
146
|
* @defaultValue undefined
|
|
147
147
|
*/
|
|
148
148
|
buildEnvironment?: Record<string, string>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Specify the runtime for the deployed htsget Lambda function.
|
|
152
|
+
*
|
|
153
|
+
* @defaultValue uses provided.al2023
|
|
154
|
+
*/
|
|
155
|
+
runtime?: "provided.al2023" | "provided.al2";
|
|
149
156
|
}
|
|
150
157
|
|
|
151
158
|
/**
|
package/lib/htsget-lambda.js
CHANGED
|
@@ -72,6 +72,7 @@ class HtsgetLambda extends constructs_1.Construct {
|
|
|
72
72
|
architecture: aws_lambda_1.Architecture.ARM_64,
|
|
73
73
|
role: lambdaRole ?? props.role,
|
|
74
74
|
vpc: props.vpc,
|
|
75
|
+
runtime: props.runtime,
|
|
75
76
|
});
|
|
76
77
|
let bucket = undefined;
|
|
77
78
|
let privateKey = undefined;
|
|
@@ -360,4 +361,4 @@ class HtsgetLambda extends constructs_1.Construct {
|
|
|
360
361
|
}
|
|
361
362
|
}
|
|
362
363
|
exports.HtsgetLambda = HtsgetLambda;
|
|
363
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRzZ2V0LWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0c2dldC1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkJBQWtDO0FBQ2xDLHlDQUFpQztBQUNqQywyQkFBNEI7QUFFNUIsNkNBT3FCO0FBQ3JCLDJDQUF1QztBQUV2Qyx5REFBbUQ7QUFDbkQsaURBSzZCO0FBQzdCLHVEQUFzRDtBQUN0RCwrRUFJNEM7QUFDNUMseURBS2lDO0FBQ2pDLHlFQUErRTtBQUMvRSx1REFBZ0Q7QUFDaEQsZ0RBQXdCO0FBQ3hCLDZGQUFrRjtBQUNsRixtRUFRc0M7QUFDdEMsMkZBQTZFO0FBQzdFLCtDQUk0QjtBQUM1QixxRUFBeUU7QUFDekUsdUVBQXdEO0FBT3hELG9EQUFpRDtBQUVqRDs7O0dBR0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUN6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsS0FBSyxDQUFDLFlBQVksS0FBSztZQUNyQixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFFRixJQUFJLE9BQWlCLENBQUM7UUFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDMUIsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsR0FBRyxFQUNULEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsVUFBVSxF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TSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQ3RCLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDTixnRUFBZ0U7UUFDaEUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksYUFBYSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDckUsQ0FBQztRQUNGLE9BQU8sR0FBNkIsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFuZEQsb0NBbWRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCI7XG5cbmltcG9ydCB7XG4gIEF3cyxcbiAgQ2ZuT3V0cHV0LFxuICBEdXJhdGlvbixcbiAgUmVtb3ZhbFBvbGljeSxcbiAgU2VjcmV0VmFsdWUsXG4gIFN0YWNrLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IFVzZXJQb29sIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2duaXRvXCI7XG5pbXBvcnQge1xuICBNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgQ2VydGlmaWNhdGUsXG4gIENlcnRpZmljYXRlVmFsaWRhdGlvbixcbiAgSUNlcnRpZmljYXRlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQVJlY29yZCxcbiAgSG9zdGVkWm9uZSxcbiAgSUhvc3RlZFpvbmUsXG4gIFJlY29yZFRhcmdldCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBBcGlHYXRld2F5djJEb21haW5Qcm9wZXJ0aWVzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7IFJ1c3RGdW5jdGlvbiB9IGZyb20gXCJjYXJnby1sYW1iZGEtY2RrXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgSHR0cExhbWJkYUludGVncmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djItaW50ZWdyYXRpb25zXCI7XG5pbXBvcnQge1xuICBDb3JzSHR0cE1ldGhvZCxcbiAgRG9tYWluTmFtZSxcbiAgSHR0cEFwaSxcbiAgSHR0cE1ldGhvZCxcbiAgSHR0cFJvdXRlLFxuICBIdHRwUm91dGVLZXksXG4gIElIdHRwQXBpLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2MlwiO1xuaW1wb3J0IHsgSHR0cEp3dEF1dGhvcml6ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyc1wiO1xuaW1wb3J0IHtcbiAgQmxvY2tQdWJsaWNBY2Nlc3MsXG4gIEJ1Y2tldCxcbiAgQnVja2V0RW5jcnlwdGlvbixcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBDb3JzQ29uaWZnLFxuICBIdHNnZXRDb25maWcsXG4gIEh0c2dldExhbWJkYVByb3BzLFxuICBKd3RDb25maWcsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJjYXJnby1sYW1iZGEtY2RrL2xpYi91dGlsXCI7XG5cbi8qKlxuICogQGlnbm9yZVxuICogQ29uc3RydWN0IHVzZWQgdG8gZGVwbG95IGh0c2dldC1sYW1iZGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHNnZXRMYW1iZGEgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSHRzZ2V0TGFtYmRhUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgcHJvcHMuaHRzZ2V0Q29uZmlnID8/PSB7XG4gICAgICBsb2NhdGlvbnM6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgaHR0cEFwaTogSUh0dHBBcGk7XG4gICAgaWYgKHByb3BzLmh0dHBBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaHR0cEFwaSA9IHByb3BzLmh0dHBBcGk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy5kb21haW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcImRvbWFpbiBtdXN0IGJlIGRlZmluZWQgaWYgaHR0cEFwaSBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgICAgfVxuXG4gICAgICBodHRwQXBpID0gdGhpcy5jcmVhdGVIdHRwQXBpKFxuICAgICAgICBwcm9wcy5kb21haW4sXG4gICAgICAgIHByb3BzLmp3dCxcbiAgICAgICAgcHJvcHMuY29ycyxcbiAgICAgICAgcHJvcHMuc3ViRG9tYWluLFxuICAgICAgICBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgICBwcm9wcy5jZXJ0aWZpY2F0ZUFybixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxhbWJkYVJvbGU6IFJvbGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLnJvbGUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsYW1iZGFSb2xlID0gSHRzZ2V0TGFtYmRhLmNyZWF0ZVJvbGUodGhpcywgaWQsIHByb3BzLnJvbGVOYW1lKTtcbiAgICB9XG5cbiAgICBwcm9wcy5idWlsZEVudmlyb25tZW50ID8/PSB7fTtcblxuICAgIGNvbnN0IGh0c2dldExhbWJkYSA9IG5ldyBSdXN0RnVuY3Rpb24odGhpcywgXCJGdW5jdGlvblwiLCB7XG4gICAgICBnaXRSZW1vdGU6IFwiaHR0cHM6Ly9naXRodWIuY29tL3VtY2NyL2h0c2dldC1yc1wiLFxuICAgICAgZ2l0Rm9yY2VDbG9uZTogcHJvcHMuZ2l0Rm9yY2VDbG9uZSxcbiAgICAgIGdpdFJlZmVyZW5jZTogcHJvcHMuZ2l0UmVmZXJlbmNlLFxuICAgICAgZnVuY3Rpb25OYW1lOiBwcm9wcy5mdW5jdGlvbk5hbWUsXG4gICAgICBiaW5hcnlOYW1lOiBcImh0c2dldC1sYW1iZGFcIixcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgUlVTVEZMQUdTOiBcIi1DIHRhcmdldC1jcHU9bmVvdmVyc2UtbjFcIixcbiAgICAgICAgICBDQVJHT19QUk9GSUxFX1JFTEVBU0VfTFRPOiBcInRydWVcIixcbiAgICAgICAgICBDQVJHT19QUk9GSUxFX1JFTEVBU0VfQ09ERUdFTl9VTklUUzogXCIxXCIsXG4gICAgICAgICAgQVdTX0xBTUJEQV9IVFRQX0lHTk9SRV9TVEFHRV9JTl9QQVRIOiBcInRydWVcIixcbiAgICAgICAgICAuLi5wcm9wcy5idWlsZEVudmlyb25tZW50LFxuICAgICAgICB9LFxuICAgICAgICBjYXJnb0xhbWJkYUZsYWdzOiBwcm9wcy5jYXJnb0xhbWJkYUZsYWdzID8/IFtcbiAgICAgICAgICBIdHNnZXRMYW1iZGEucmVzb2x2ZUZlYXR1cmVzKFxuICAgICAgICAgICAgcHJvcHMuaHRzZ2V0Q29uZmlnLFxuICAgICAgICAgICAgcHJvcHMuY29weVRlc3REYXRhID8/IGZhbHNlLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyOCksXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICByb2xlOiBsYW1iZGFSb2xlID8/IHByb3BzLnJvbGUsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KTtcblxuICAgIGxldCBidWNrZXQ6IEJ1Y2tldCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgcHJpdmF0ZUtleTogU2VjcmV0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBwdWJsaWNLZXk6IFNlY3JldCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuY29weVRlc3REYXRhKSB7XG4gICAgICBbYnVja2V0LCBwcml2YXRlS2V5LCBwdWJsaWNLZXldID0gdGhpcy5zZXR1cFRlc3REYXRhKFxuICAgICAgICBwcm9wcy5naXRSZWZlcmVuY2UsXG4gICAgICAgIHByb3BzLmJ1Y2tldE5hbWUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYW1iZGFSb2xlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEh0c2dldExhbWJkYS5zZXRQZXJtaXNzaW9ucyhcbiAgICAgICAgbGFtYmRhUm9sZSxcbiAgICAgICAgcHJvcHMuaHRzZ2V0Q29uZmlnLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIHB1YmxpY0tleSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0gSHRzZ2V0TGFtYmRhLmNvbmZpZ1RvRW52KFxuICAgICAgcHJvcHMuaHRzZ2V0Q29uZmlnLFxuICAgICAgcHJvcHMuY29ycyxcbiAgICAgIGJ1Y2tldCxcbiAgICAgIHByaXZhdGVLZXksXG4gICAgICBwdWJsaWNLZXksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBlbnYpIHtcbiAgICAgIGh0c2dldExhbWJkYS5hZGRFbnZpcm9ubWVudChrZXksIGVudltrZXldKTtcbiAgICB9XG4gICAgaHRzZ2V0TGFtYmRhLmFkZEVudmlyb25tZW50KFwiUlVTVF9MT0dcIiwgXCJ0cmFjZVwiKTtcblxuICAgIGNvbnN0IGh0dHBJbnRlZ3JhdGlvbiA9IG5ldyBIdHRwTGFtYmRhSW50ZWdyYXRpb24oXG4gICAgICBcIkludGVncmF0aW9uXCIsXG4gICAgICBodHNnZXRMYW1iZGEsXG4gICAgKTtcblxuICAgIFtIdHRwTWV0aG9kLkdFVCwgSHR0cE1ldGhvZC5QT1NUXS5tYXAoKG1ldGhvZCkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IFwiL3twcm94eSt9XCI7XG4gICAgICBuZXcgSHR0cFJvdXRlKHRoaXMsIGAke21ldGhvZH0ke3BhdGh9YCwge1xuICAgICAgICBodHRwQXBpOiBodHRwQXBpLFxuICAgICAgICByb3V0ZUtleTogSHR0cFJvdXRlS2V5LndpdGgocGF0aCwgbWV0aG9kKSxcbiAgICAgICAgaW50ZWdyYXRpb246IGh0dHBJbnRlZ3JhdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGh0dHBBcGkuZGVmYXVsdEF1dGhvcml6ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIlRoaXMgd2lsbCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgaHRzZ2V0LXJzIHRoYXQgaXMgcHVibGljISBBbnlvbmUgd2lsbCBiZSBhYmxlIHRvIHF1ZXJ5IHRoZSBzZXJ2ZXIgd2l0aG91dCBhdXRob3JpemF0aW9uLlwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBsb2NhdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlc29sdmVGZWF0dXJlcyhcbiAgICBjb25maWc6IEh0c2dldENvbmZpZyxcbiAgICBidWNrZXRTZXR1cDogYm9vbGVhbixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IFtdO1xuXG4gICAgaWYgKFxuICAgICAgY29uZmlnLmxvY2F0aW9ucz8uc29tZSgobG9jYXRpb24pID0+XG4gICAgICAgIGxvY2F0aW9uLmxvY2F0aW9uLnN0YXJ0c1dpdGgoXCJzMzovL1wiKSxcbiAgICAgICkgfHxcbiAgICAgIGJ1Y2tldFNldHVwXG4gICAgKSB7XG4gICAgICBmZWF0dXJlcy5wdXNoKFwiYXdzXCIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb25maWcubG9jYXRpb25zPy5zb21lKFxuICAgICAgICAobG9jYXRpb24pID0+XG4gICAgICAgICAgbG9jYXRpb24ubG9jYXRpb24uc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgfHxcbiAgICAgICAgICBsb2NhdGlvbi5sb2NhdGlvbi5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIiksXG4gICAgICApXG4gICAgKSB7XG4gICAgICBmZWF0dXJlcy5wdXNoKFwidXJsXCIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb25maWcubG9jYXRpb25zPy5zb21lKFxuICAgICAgICAobG9jYXRpb24pID0+XG4gICAgICAgICAgbG9jYXRpb24ucHJpdmF0ZV9rZXkgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIGxvY2F0aW9uLnB1YmxpY19rZXkgIT09IHVuZGVmaW5lZCxcbiAgICAgICkgfHxcbiAgICAgIGJ1Y2tldFNldHVwXG4gICAgKSB7XG4gICAgICBmZWF0dXJlcy5wdXNoKFwiZXhwZXJpbWVudGFsXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcy5sZW5ndGggPT09IDBcbiAgICAgID8gXCItLWFsbC1mZWF0dXJlc1wiXG4gICAgICA6IGAtLWZlYXR1cmVzICR7ZmVhdHVyZXMuam9pbihcIixcIil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBidWNrZXQgYW5kIGNvcHkgdGVzdCBkYXRhIGlmIGNvbmZpZ3VyZWQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwVGVzdERhdGEoXG4gICAgZ2l0UmVmZXJlbmNlPzogc3RyaW5nLFxuICAgIGJ1Y2tldE5hbWU/OiBzdHJpbmcsXG4gICk6IFtCdWNrZXQsIFNlY3JldCwgU2VjcmV0XSB7XG4gICAgY29uc3QgZ2l0UmVtb3RlID0gXCJodHRwczovL2dpdGh1Yi5jb20vdW1jY3IvaHRzZ2V0LXJzXCI7XG4gICAgY29uc3QgbGF0ZXN0Q29tbWl0ID0gZXhlYyhcImdpdFwiLCBbXG4gICAgICBcImxzLXJlbW90ZVwiLFxuICAgICAgZ2l0UmVtb3RlLFxuICAgICAgZ2l0UmVmZXJlbmNlID8/IFwiSEVBRFwiLFxuICAgIF0pXG4gICAgICAuc3Rkb3V0LnRvU3RyaW5nKClcbiAgICAgIC5zcGxpdCgvKFxccyspLylbMF07XG4gICAgY29uc3QgbG9jYWxQYXRoID0gam9pbih0bXBkaXIoKSwgbGF0ZXN0Q29tbWl0KTtcblxuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBCdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGJ1Y2tldE5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IGRhdGEgZnJvbSB1cHN0cmVhbSBodHNnZXQgcmVwb1xuICAgIGNvbnN0IGxvY2FsRGF0YVBhdGggPSBwYXRoLmpvaW4obG9jYWxQYXRoLCBcImRhdGFcIik7XG4gICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgXCJEZXBsb3lGaWxlc1wiLCB7XG4gICAgICBzb3VyY2VzOiBbXG4gICAgICAgIFNvdXJjZS5hc3NldChwYXRoLmpvaW4obG9jYWxEYXRhUGF0aCwgXCJjNGdoXCIpKSxcbiAgICAgICAgU291cmNlLmFzc2V0KHBhdGguam9pbihsb2NhbERhdGFQYXRoLCBcImJhbVwiKSksXG4gICAgICAgIFNvdXJjZS5hc3NldChwYXRoLmpvaW4obG9jYWxEYXRhUGF0aCwgXCJjcmFtXCIpKSxcbiAgICAgICAgU291cmNlLmFzc2V0KHBhdGguam9pbihsb2NhbERhdGFQYXRoLCBcInZjZlwiKSksXG4gICAgICAgIFNvdXJjZS5hc3NldChwYXRoLmpvaW4obG9jYWxEYXRhUGF0aCwgXCJiY2ZcIikpLFxuICAgICAgXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBidWNrZXQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlEaXIgPSBwYXRoLmpvaW4obG9jYWxQYXRoLCBcImRhdGFcIiwgXCJjNGdoXCIsIFwia2V5c1wiKTtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IFNlY3JldCh0aGlzLCBcIlByaXZhdGVLZXlcIiwge1xuICAgICAgc2VjcmV0U3RyaW5nVmFsdWU6IFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChcbiAgICAgICAgcmVhZEZpbGVTeW5jKHBhdGguam9pbihrZXlEaXIsIFwiYm9iLnNlY1wiKSkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFNlY3JldCh0aGlzLCBcIlB1YmxpY0tleVwiLCB7XG4gICAgICBzZWNyZXRTdHJpbmdWYWx1ZTogU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFxuICAgICAgICByZWFkRmlsZVN5bmMocGF0aC5qb2luKGtleURpciwgXCJhbGljZS5wdWJcIikpLnRvU3RyaW5nKCksXG4gICAgICApLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIkJ1Y2tldE5hbWVcIiwgeyB2YWx1ZTogYnVja2V0LmJ1Y2tldE5hbWUgfSk7XG5cbiAgICByZXR1cm4gW2J1Y2tldCwgcHJpdmF0ZUtleSwgcHVibGljS2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcGVybWlzc2lvbnMgZm9yIHRoZSBMYW1iZGEgcm9sZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0UGVybWlzc2lvbnMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjb25maWc6IEh0c2dldENvbmZpZyxcbiAgICBidWNrZXQ/OiBCdWNrZXQsXG4gICAgcHJpdmF0ZUtleT86IFNlY3JldCxcbiAgICBwdWJsaWNLZXk/OiBTZWNyZXQsXG4gICkge1xuICAgIHJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IGxvY2F0aW9ucyA9IGNvbmZpZy5sb2NhdGlvbnMgPz8gW107XG4gICAgLy8gQWRkIGFueSBcInMzOi8vXCIgbG9jYXRpb25zIHRvIHBvbGljeS5cbiAgICBjb25zdCBidWNrZXRzID0gbG9jYXRpb25zLmZsYXRNYXAoKGxvY2F0aW9uKSA9PiB7XG4gICAgICBpZiAobG9jYXRpb24ubG9jYXRpb24uc3RhcnRzV2l0aChcInMzOi8vXCIpKSB7XG4gICAgICAgIHJldHVybiBbbG9jYXRpb24ubG9jYXRpb24uc3BsaXQoXCIvXCIpWzJdXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoYnVja2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1Y2tldHMucHVzaChidWNrZXQuYnVja2V0TmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVja2V0UG9saWN5ID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbXCJzMzpHZXRPYmplY3RcIl0sXG4gICAgICByZXNvdXJjZXM6IGJ1Y2tldHMubWFwKChidWNrZXQpID0+IGBhcm46YXdzOnMzOjo6JHtidWNrZXR9LypgKSxcbiAgICB9KTtcbiAgICBpZiAoYnVja2V0UG9saWN5LnJlc291cmNlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3koYnVja2V0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYW55IGtleXMgZnJvbSB0aGUgbG9jYXRpb25zLlxuICAgIGNvbnN0IGtleXMgPSBsb2NhdGlvbnMuZmxhdE1hcCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IFtib29sZWFuLCBzdHJpbmddW10gPSBbXTtcbiAgICAgIGlmIChsb2NhdGlvbi5wcml2YXRlX2tleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGtleXMucHVzaChbZmFsc2UsIGxvY2F0aW9uLnByaXZhdGVfa2V5XSk7XG4gICAgICB9XG4gICAgICBpZiAobG9jYXRpb24ucHVibGljX2tleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGtleXMucHVzaChbZmFsc2UsIGxvY2F0aW9uLnB1YmxpY19rZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXlzO1xuICAgIH0pO1xuICAgIGlmIChwcml2YXRlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGtleXMucHVzaChbdHJ1ZSwgcHJpdmF0ZUtleS5zZWNyZXRBcm5dKTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0tleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXlzLnB1c2goW3RydWUsIHB1YmxpY0tleS5zZWNyZXRBcm5dKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWNyZXRQb2xpY3kgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFtcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCJdLFxuICAgICAgcmVzb3VyY2VzOiBrZXlzLm1hcCgoW2Fybiwga2V5XSkgPT4ge1xuICAgICAgICBpZiAoYXJuKSB7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtBd3MuUkVHSU9OfToke0F3cy5BQ0NPVU5UX0lEfTpzZWNyZXQ6JHtrZXl9LSpgO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBpZiAoc2VjcmV0UG9saWN5LnJlc291cmNlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3koc2VjcmV0UG9saWN5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGxhbWJkYSByb2xlIHdpdGggdGhlIGNvbmZpZ3VyZWQgcGVybWlzc2lvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJvbGUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHJvbGVOYW1lPzogc3RyaW5nLFxuICApOiBSb2xlIHtcbiAgICByZXR1cm4gbmV3IFJvbGUoc2NvcGUsIFwiUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMYW1iZGEgZXhlY3V0aW9uIHJvbGUgZm9yIFwiICsgaWQsXG4gICAgICByb2xlTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgc3RhdGVmdWwgY29uZmlnIHJlbGF0ZWQgdG8gdGhlIGh0dHBBcGkgYW5kIHRoZSBBUEkgaXRzZWxmLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVIdHRwQXBpKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGp3dEF1dGhvcml6ZXI/OiBKd3RDb25maWcsXG4gICAgY29uZmlnPzogQ29yc0NvbmlmZyxcbiAgICBzdWJEb21haW4/OiBzdHJpbmcsXG4gICAgaG9zdGVkWm9uZT86IElIb3N0ZWRab25lLFxuICAgIGNlcnRpZmljYXRlQXJuPzogc3RyaW5nLFxuICApOiBIdHRwQXBpIHtcbiAgICAvLyBBZGQgYW4gYXV0aG9yaXplciBpZiBhdXRoIGlzIHJlcXVpcmVkLlxuICAgIGxldCBhdXRob3JpemVyOiBIdHRwSnd0QXV0aG9yaXplciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoand0QXV0aG9yaXplciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiB0aGUgY29nIHVzZXIgcG9vbCBpZCBpcyBub3Qgc3BlY2lmaWVkLCBjcmVhdGUgYSBuZXcgb25lLlxuICAgICAgaWYgKGp3dEF1dGhvcml6ZXIuY29nVXNlclBvb2xJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHBvb2wgPSBuZXcgVXNlclBvb2wodGhpcywgXCJVc2VyUG9vbFwiKTtcbiAgICAgICAgand0QXV0aG9yaXplci5jb2dVc2VyUG9vbElkID0gcG9vbC51c2VyUG9vbElkO1xuICAgICAgfVxuXG4gICAgICBhdXRob3JpemVyID0gbmV3IEh0dHBKd3RBdXRob3JpemVyKFxuICAgICAgICBcIkh0c2dldEF1dGhvcml6ZXJcIixcbiAgICAgICAgYGh0dHBzOi8vY29nbml0by1pZHAuJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmF3cy5jb20vJHtqd3RBdXRob3JpemVyLmNvZ1VzZXJQb29sSWR9YCxcbiAgICAgICAge1xuICAgICAgICAgIGlkZW50aXR5U291cmNlOiBbXCIkcmVxdWVzdC5oZWFkZXIuQXV0aG9yaXphdGlvblwiXSxcbiAgICAgICAgICBqd3RBdWRpZW5jZTogand0QXV0aG9yaXplci5hdWRpZW5jZSA/PyBbXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHpvbmU6IElIb3N0ZWRab25lO1xuICAgIGlmIChob3N0ZWRab25lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHpvbmUgPSBIb3N0ZWRab25lLmZyb21Mb29rdXAodGhpcywgXCJIb3N0ZWRab25lXCIsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvbmUgPSBob3N0ZWRab25lO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3N1YkRvbWFpbiA/PyBcImh0c2dldFwifS4ke2RvbWFpbn1gO1xuICAgIGxldCBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlO1xuICAgIGlmIChjZXJ0aWZpY2F0ZUFybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjZXJ0aWZpY2F0ZSA9IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDZXJ0aWZpY2F0ZVwiLFxuICAgICAgICBjZXJ0aWZpY2F0ZUFybixcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRoaXMsIFwiQ2VydGlmaWNhdGVcIiwge1xuICAgICAgICBkb21haW5OYW1lOiB1cmwsXG4gICAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKGhvc3RlZFpvbmUpLFxuICAgICAgICBjZXJ0aWZpY2F0ZU5hbWU6IHVybCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBuZXcgRG9tYWluTmFtZSh0aGlzLCBcIkRvbWFpbk5hbWVcIiwge1xuICAgICAgY2VydGlmaWNhdGU6IGNlcnRpZmljYXRlLFxuICAgICAgZG9tYWluTmFtZTogdXJsLFxuICAgIH0pO1xuXG4gICAgbmV3IEFSZWNvcmQodGhpcywgXCJBUmVjb3JkXCIsIHtcbiAgICAgIHpvbmUsXG4gICAgICByZWNvcmROYW1lOiBzdWJEb21haW4gPz8gXCJodHNnZXRcIixcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IEFwaUdhdGV3YXl2MkRvbWFpblByb3BlcnRpZXMoXG4gICAgICAgICAgZG9tYWluTmFtZS5yZWdpb25hbERvbWFpbk5hbWUsXG4gICAgICAgICAgZG9tYWluTmFtZS5yZWdpb25hbEhvc3RlZFpvbmVJZCxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEh0dHBBcGkodGhpcywgXCJIdHNHZXRBcGlHYXRld2F5XCIsIHtcbiAgICAgIGRlZmF1bHRBdXRob3JpemVyOiBhdXRob3JpemVyLFxuICAgICAgZGVmYXVsdERvbWFpbk1hcHBpbmc6IHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgIH0sXG4gICAgICBjb3JzUHJlZmxpZ2h0OiB7XG4gICAgICAgIGFsbG93Q3JlZGVudGlhbHM6IGNvbmZpZz8uYWxsb3dDcmVkZW50aWFscyA/PyBmYWxzZSxcbiAgICAgICAgYWxsb3dIZWFkZXJzOiBjb25maWc/LmFsbG93SGVhZGVycyA/PyBbXCIqXCJdLFxuICAgICAgICBhbGxvd01ldGhvZHM6IGNvbmZpZz8uYWxsb3dNZXRob2RzID8/IFtDb3JzSHR0cE1ldGhvZC5BTlldLFxuICAgICAgICBhbGxvd09yaWdpbnM6IGNvbmZpZz8uYWxsb3dPcmlnaW5zID8/IFtcIipcIl0sXG4gICAgICAgIGV4cG9zZUhlYWRlcnM6IGNvbmZpZz8uZXhwb3NlSGVhZGVycyA/PyBbXCIqXCJdLFxuICAgICAgICBtYXhBZ2U6IGNvbmZpZz8ubWF4QWdlID8/IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEpTT04gY29uZmlnIHRvIGh0c2dldC1ycyBlbnYgcmVwcmVzZW50YXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbmZpZ1RvRW52KFxuICAgIGNvbmZpZzogSHRzZ2V0Q29uZmlnLFxuICAgIGNvcnNDb25maWc/OiBDb3JzQ29uaWZnLFxuICAgIGJ1Y2tldD86IEJ1Y2tldCxcbiAgICBwcml2YXRlS2V5PzogU2VjcmV0LFxuICAgIHB1YmxpY0tleT86IFNlY3JldCxcbiAgKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgdG9IdHNnZXRFbnYgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgLnJlcGxhY2VBbGwobmV3IFJlZ0V4cCgvXCIoICkqOiggKSovZyksIFwiPVwiKVxuICAgICAgICAucmVwbGFjZUFsbCgnXCInLCBcIlwiKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge307XG4gICAgY29uc3QgbG9jYXRpb25zID0gY29uZmlnLmxvY2F0aW9ucyA/PyBbXTtcblxuICAgIGlmIChidWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYXRpb25zLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogYHMzOi8vJHtidWNrZXQuYnVja2V0TmFtZX1gLFxuICAgICAgICBwcml2YXRlX2tleTogcHJpdmF0ZUtleT8uc2VjcmV0QXJuLFxuICAgICAgICBwdWJsaWNfa2V5OiBwdWJsaWNLZXk/LnNlY3JldEFybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBsb2NhdGlvbnNFbnY6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGxvY2F0aW9uc1xuICAgICAgLm1hcCgobG9jYXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRvSHRzZ2V0RW52KHtcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24ubG9jYXRpb24sXG4gICAgICAgICAgLi4uKGxvY2F0aW9uLnByaXZhdGVfa2V5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uLnB1YmxpY19rZXkgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgICAgICAgIGtleXM6IHtcbiAgICAgICAgICAgICAgICBraW5kOiBcIlNlY3JldHNNYW5hZ2VyXCIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZTogbG9jYXRpb24ucHJpdmF0ZV9rZXksXG4gICAgICAgICAgICAgICAgcHVibGljOiBsb2NhdGlvbi5wdWJsaWNfa2V5LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiLFwiKTtcbiAgICBsb2NhdGlvbnNFbnYgPSBgWyR7bG9jYXRpb25zRW52fV1gO1xuXG4gICAgaWYgKFxuICAgICAgbG9jYXRpb25zRW52ID09IFwiW11cIiAmJlxuICAgICAgY29uZmlnLmVudmlyb25tZW50X292ZXJyaWRlPy5IVFNHRVRfTE9DQVRJT05TID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGxvY2F0aW9uc0VudiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBvdXQuSFRTR0VUX0xPQ0FUSU9OUyA9IGxvY2F0aW9uc0VudjtcbiAgICBvdXQuSFRTR0VUX1RJQ0tFVF9TRVJWRVJfQ09SU19BTExPV19DUkVERU5USUFMUyA9XG4gICAgICBjb3JzQ29uZmlnPy5hbGxvd0NyZWRlbnRpYWxzPy50b1N0cmluZygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm9uLW51bGxhYmxlLXR5cGUtYXNzZXJ0aW9uLXN0eWxlXG4gICAgb3V0LkhUU0dFVF9USUNLRVRfU0VSVkVSX0NPUlNfQUxMT1dfSEVBREVSUyA9IGBbJHtjb3JzQ29uZmlnPy5hbGxvd0hlYWRlcnM/LmpvaW4oXCIsXCIpIGFzIHN0cmluZ31dYDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vbi1udWxsYWJsZS10eXBlLWFzc2VydGlvbi1zdHlsZVxuICAgIG91dC5IVFNHRVRfVElDS0VUX1NFUlZFUl9DT1JTX0FMTE9XX01FVEhPRFMgPSBgWyR7Y29yc0NvbmZpZz8uYWxsb3dNZXRob2RzPy5qb2luKFwiLFwiKSBhcyBzdHJpbmd9XWA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9ub24tbnVsbGFibGUtdHlwZS1hc3NlcnRpb24tc3R5bGVcbiAgICBvdXQuSFRTR0VUX1RJQ0tFVF9TRVJWRVJfQ09SU19BTExPV19PUklHSU5TID0gYFske2NvcnNDb25maWc/LmFsbG93T3JpZ2lucz8uam9pbihcIixcIikgYXMgc3RyaW5nfV1gO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm9uLW51bGxhYmxlLXR5cGUtYXNzZXJ0aW9uLXN0eWxlXG4gICAgb3V0LkhUU0dFVF9USUNLRVRfU0VSVkVSX0NPUlNfRVhQT1NFX0hFQURFUlMgPSBgWyR7Y29yc0NvbmZpZz8uZXhwb3NlSGVhZGVycz8uam9pbihcIixcIikgYXMgc3RyaW5nfV1gO1xuICAgIG91dC5IVFNHRVRfVElDS0VUX1NFUlZFUl9DT1JTX01BWF9BR0UgPSBjb3JzQ29uZmlnPy5tYXhBZ2VcbiAgICAgID8udG9TZWNvbmRzKClcbiAgICAgIC50b1N0cmluZygpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnLnNlcnZpY2VfaW5mbykge1xuICAgICAgb3V0W2BIVFNHRVRfU0VSVklDRV9JTkZPXyR7a2V5LnRvVXBwZXJDYXNlKCl9YF0gPSB0b0h0c2dldEVudihcbiAgICAgICAgY29uZmlnLnNlcnZpY2VfaW5mb1trZXldLFxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnLmVudmlyb25tZW50X292ZXJyaWRlKSB7XG4gICAgICBvdXRba2V5XSA9IHRvSHRzZ2V0RW52KGNvbmZpZy5lbnZpcm9ubWVudF9vdmVycmlkZVtrZXldKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvdXQpLmZvckVhY2goXG4gICAgICAoa2V5KSA9PlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgIChvdXRba2V5XSA9PSBgW3VuZGVmaW5lZF1gIHx8IG91dFtrZXldID09IFwiW11cIikgJiYgZGVsZXRlIG91dFtrZXldLFxuICAgICk7XG4gICAgcmV0dXJuIG91dCBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9XG59XG4iXX0=
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRzZ2V0LWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0c2dldC1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkJBQWtDO0FBQ2xDLHlDQUFpQztBQUNqQywyQkFBNEI7QUFFNUIsNkNBT3FCO0FBQ3JCLDJDQUF1QztBQUV2Qyx5REFBbUQ7QUFDbkQsaURBSzZCO0FBQzdCLHVEQUFzRDtBQUN0RCwrRUFJNEM7QUFDNUMseURBS2lDO0FBQ2pDLHlFQUErRTtBQUMvRSx1REFBZ0Q7QUFDaEQsZ0RBQXdCO0FBQ3hCLDZGQUFrRjtBQUNsRixtRUFRc0M7QUFDdEMsMkZBQTZFO0FBQzdFLCtDQUk0QjtBQUM1QixxRUFBeUU7QUFDekUsdUVBQXdEO0FBT3hELG9EQUFpRDtBQUVqRDs7O0dBR0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUN6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsS0FBSyxDQUFDLFlBQVksS0FBSztZQUNyQixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFFRixJQUFJLE9BQWlCLENBQUM7UUFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDMUIsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsR0FBRyxFQUNULEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsVUFBVSxF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QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUN0QixDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ04sZ0VBQWdFO1FBQ2hFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ3JFLENBQUM7UUFDRixPQUFPLEdBQTZCLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBcGRELG9DQW9kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuXG5pbXBvcnQge1xuICBBd3MsXG4gIENmbk91dHB1dCxcbiAgRHVyYXRpb24sXG4gIFJlbW92YWxQb2xpY3ksXG4gIFNlY3JldFZhbHVlLFxuICBTdGFjayxcbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBVc2VyUG9vbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiO1xuaW1wb3J0IHtcbiAgTWFuYWdlZFBvbGljeSxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24sXG4gIElDZXJ0aWZpY2F0ZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFSZWNvcmQsXG4gIEhvc3RlZFpvbmUsXG4gIElIb3N0ZWRab25lLFxuICBSZWNvcmRUYXJnZXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQXBpR2F0ZXdheXYyRG9tYWluUHJvcGVydGllcyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCI7XG5pbXBvcnQgeyBSdXN0RnVuY3Rpb24gfSBmcm9tIFwiY2FyZ28tbGFtYmRhLWNka1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEh0dHBMYW1iZGFJbnRlZ3JhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ29yc0h0dHBNZXRob2QsXG4gIERvbWFpbk5hbWUsXG4gIEh0dHBBcGksXG4gIEh0dHBNZXRob2QsXG4gIEh0dHBSb3V0ZSxcbiAgSHR0cFJvdXRlS2V5LFxuICBJSHR0cEFwaSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcbmltcG9ydCB7IEh0dHBKd3RBdXRob3JpemVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djItYXV0aG9yaXplcnNcIjtcbmltcG9ydCB7XG4gIEJsb2NrUHVibGljQWNjZXNzLFxuICBCdWNrZXQsXG4gIEJ1Y2tldEVuY3J5cHRpb24sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQ29yc0NvbmlmZyxcbiAgSHRzZ2V0Q29uZmlnLFxuICBIdHNnZXRMYW1iZGFQcm9wcyxcbiAgSnd0Q29uZmlnLFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiY2FyZ28tbGFtYmRhLWNkay9saWIvdXRpbFwiO1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqIENvbnN0cnVjdCB1c2VkIHRvIGRlcGxveSBodHNnZXQtbGFtYmRhLlxuICovXG5leHBvcnQgY2xhc3MgSHRzZ2V0TGFtYmRhIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEh0c2dldExhbWJkYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHByb3BzLmh0c2dldENvbmZpZyA/Pz0ge1xuICAgICAgbG9jYXRpb25zOiBbXSxcbiAgICB9O1xuXG4gICAgbGV0IGh0dHBBcGk6IElIdHRwQXBpO1xuICAgIGlmIChwcm9wcy5odHRwQXBpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGh0dHBBcGkgPSBwcm9wcy5odHRwQXBpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMuZG9tYWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJkb21haW4gbXVzdCBiZSBkZWZpbmVkIGlmIGh0dHBBcGkgaXMgbm90IHNwZWNpZmllZFwiKTtcbiAgICAgIH1cblxuICAgICAgaHR0cEFwaSA9IHRoaXMuY3JlYXRlSHR0cEFwaShcbiAgICAgICAgcHJvcHMuZG9tYWluLFxuICAgICAgICBwcm9wcy5qd3QsXG4gICAgICAgIHByb3BzLmNvcnMsXG4gICAgICAgIHByb3BzLnN1YkRvbWFpbixcbiAgICAgICAgcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgICAgcHJvcHMuY2VydGlmaWNhdGVBcm4sXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsYW1iZGFSb2xlOiBSb2xlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5yb2xlID09IHVuZGVmaW5lZCkge1xuICAgICAgbGFtYmRhUm9sZSA9IEh0c2dldExhbWJkYS5jcmVhdGVSb2xlKHRoaXMsIGlkLCBwcm9wcy5yb2xlTmFtZSk7XG4gICAgfVxuXG4gICAgcHJvcHMuYnVpbGRFbnZpcm9ubWVudCA/Pz0ge307XG5cbiAgICBjb25zdCBodHNnZXRMYW1iZGEgPSBuZXcgUnVzdEZ1bmN0aW9uKHRoaXMsIFwiRnVuY3Rpb25cIiwge1xuICAgICAgZ2l0UmVtb3RlOiBcImh0dHBzOi8vZ2l0aHViLmNvbS91bWNjci9odHNnZXQtcnNcIixcbiAgICAgIGdpdEZvcmNlQ2xvbmU6IHByb3BzLmdpdEZvcmNlQ2xvbmUsXG4gICAgICBnaXRSZWZlcmVuY2U6IHByb3BzLmdpdFJlZmVyZW5jZSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogcHJvcHMuZnVuY3Rpb25OYW1lLFxuICAgICAgYmluYXJ5TmFtZTogXCJodHNnZXQtbGFtYmRhXCIsXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIFJVU1RGTEFHUzogXCItQyB0YXJnZXQtY3B1PW5lb3ZlcnNlLW4xXCIsXG4gICAgICAgICAgQ0FSR09fUFJPRklMRV9SRUxFQVNFX0xUTzogXCJ0cnVlXCIsXG4gICAgICAgICAgQ0FSR09fUFJPRklMRV9SRUxFQVNFX0NPREVHRU5fVU5JVFM6IFwiMVwiLFxuICAgICAgICAgIEFXU19MQU1CREFfSFRUUF9JR05PUkVfU1RBR0VfSU5fUEFUSDogXCJ0cnVlXCIsXG4gICAgICAgICAgLi4ucHJvcHMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FyZ29MYW1iZGFGbGFnczogcHJvcHMuY2FyZ29MYW1iZGFGbGFncyA/PyBbXG4gICAgICAgICAgSHRzZ2V0TGFtYmRhLnJlc29sdmVGZWF0dXJlcyhcbiAgICAgICAgICAgIHByb3BzLmh0c2dldENvbmZpZyxcbiAgICAgICAgICAgIHByb3BzLmNvcHlUZXN0RGF0YSA/PyBmYWxzZSxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMjgpLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgcm9sZTogbGFtYmRhUm9sZSA/PyBwcm9wcy5yb2xlLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lLFxuICAgIH0pO1xuXG4gICAgbGV0IGJ1Y2tldDogQnVja2V0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBwcml2YXRlS2V5OiBTZWNyZXQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHB1YmxpY0tleTogU2VjcmV0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5jb3B5VGVzdERhdGEpIHtcbiAgICAgIFtidWNrZXQsIHByaXZhdGVLZXksIHB1YmxpY0tleV0gPSB0aGlzLnNldHVwVGVzdERhdGEoXG4gICAgICAgIHByb3BzLmdpdFJlZmVyZW5jZSxcbiAgICAgICAgcHJvcHMuYnVja2V0TmFtZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGxhbWJkYVJvbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgSHRzZ2V0TGFtYmRhLnNldFBlcm1pc3Npb25zKFxuICAgICAgICBsYW1iZGFSb2xlLFxuICAgICAgICBwcm9wcy5odHNnZXRDb25maWcsXG4gICAgICAgIGJ1Y2tldCxcbiAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgcHVibGljS2V5LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSBIdHNnZXRMYW1iZGEuY29uZmlnVG9FbnYoXG4gICAgICBwcm9wcy5odHNnZXRDb25maWcsXG4gICAgICBwcm9wcy5jb3JzLFxuICAgICAgYnVja2V0LFxuICAgICAgcHJpdmF0ZUtleSxcbiAgICAgIHB1YmxpY0tleSxcbiAgICApO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGVudikge1xuICAgICAgaHRzZ2V0TGFtYmRhLmFkZEVudmlyb25tZW50KGtleSwgZW52W2tleV0pO1xuICAgIH1cbiAgICBodHNnZXRMYW1iZGEuYWRkRW52aXJvbm1lbnQoXCJSVVNUX0xPR1wiLCBcInRyYWNlXCIpO1xuXG4gICAgY29uc3QgaHR0cEludGVncmF0aW9uID0gbmV3IEh0dHBMYW1iZGFJbnRlZ3JhdGlvbihcbiAgICAgIFwiSW50ZWdyYXRpb25cIixcbiAgICAgIGh0c2dldExhbWJkYSxcbiAgICApO1xuXG4gICAgW0h0dHBNZXRob2QuR0VULCBIdHRwTWV0aG9kLlBPU1RdLm1hcCgobWV0aG9kKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gXCIve3Byb3h5K31cIjtcbiAgICAgIG5ldyBIdHRwUm91dGUodGhpcywgYCR7bWV0aG9kfSR7cGF0aH1gLCB7XG4gICAgICAgIGh0dHBBcGk6IGh0dHBBcGksXG4gICAgICAgIHJvdXRlS2V5OiBIdHRwUm91dGVLZXkud2l0aChwYXRoLCBtZXRob2QpLFxuICAgICAgICBpbnRlZ3JhdGlvbjogaHR0cEludGVncmF0aW9uLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaHR0cEFwaS5kZWZhdWx0QXV0aG9yaXplciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiVGhpcyB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBodHNnZXQtcnMgdGhhdCBpcyBwdWJsaWMhIEFueW9uZSB3aWxsIGJlIGFibGUgdG8gcXVlcnkgdGhlIHNlcnZlciB3aXRob3V0IGF1dGhvcml6YXRpb24uXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgZmVhdHVyZXMgYmFzZWQgb24gdGhlIGxvY2F0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVzb2x2ZUZlYXR1cmVzKFxuICAgIGNvbmZpZzogSHRzZ2V0Q29uZmlnLFxuICAgIGJ1Y2tldFNldHVwOiBib29sZWFuLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG5cbiAgICBpZiAoXG4gICAgICBjb25maWcubG9jYXRpb25zPy5zb21lKChsb2NhdGlvbikgPT5cbiAgICAgICAgbG9jYXRpb24ubG9jYXRpb24uc3RhcnRzV2l0aChcInMzOi8vXCIpLFxuICAgICAgKSB8fFxuICAgICAgYnVja2V0U2V0dXBcbiAgICApIHtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJhd3NcIik7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvbmZpZy5sb2NhdGlvbnM/LnNvbWUoXG4gICAgICAgIChsb2NhdGlvbikgPT5cbiAgICAgICAgICBsb2NhdGlvbi5sb2NhdGlvbi5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSB8fFxuICAgICAgICAgIGxvY2F0aW9uLmxvY2F0aW9uLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJ1cmxcIik7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvbmZpZy5sb2NhdGlvbnM/LnNvbWUoXG4gICAgICAgIChsb2NhdGlvbikgPT5cbiAgICAgICAgICBsb2NhdGlvbi5wcml2YXRlX2tleSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgbG9jYXRpb24ucHVibGljX2tleSAhPT0gdW5kZWZpbmVkLFxuICAgICAgKSB8fFxuICAgICAgYnVja2V0U2V0dXBcbiAgICApIHtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJleHBlcmltZW50YWxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmVzLmxlbmd0aCA9PT0gMFxuICAgICAgPyBcIi0tYWxsLWZlYXR1cmVzXCJcbiAgICAgIDogYC0tZmVhdHVyZXMgJHtmZWF0dXJlcy5qb2luKFwiLFwiKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJ1Y2tldCBhbmQgY29weSB0ZXN0IGRhdGEgaWYgY29uZmlndXJlZC5cbiAgICovXG4gIHByaXZhdGUgc2V0dXBUZXN0RGF0YShcbiAgICBnaXRSZWZlcmVuY2U/OiBzdHJpbmcsXG4gICAgYnVja2V0TmFtZT86IHN0cmluZyxcbiAgKTogW0J1Y2tldCwgU2VjcmV0LCBTZWNyZXRdIHtcbiAgICBjb25zdCBnaXRSZW1vdGUgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS91bWNjci9odHNnZXQtcnNcIjtcbiAgICBjb25zdCBsYXRlc3RDb21taXQgPSBleGVjKFwiZ2l0XCIsIFtcbiAgICAgIFwibHMtcmVtb3RlXCIsXG4gICAgICBnaXRSZW1vdGUsXG4gICAgICBnaXRSZWZlcmVuY2UgPz8gXCJIRUFEXCIsXG4gICAgXSlcbiAgICAgIC5zdGRvdXQudG9TdHJpbmcoKVxuICAgICAgLnNwbGl0KC8oXFxzKykvKVswXTtcbiAgICBjb25zdCBsb2NhbFBhdGggPSBqb2luKHRtcGRpcigpLCBsYXRlc3RDb21taXQpO1xuXG4gICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCBcIkJ1Y2tldFwiLCB7XG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgYnVja2V0TmFtZSxcbiAgICB9KTtcblxuICAgIC8vIENvcHkgZGF0YSBmcm9tIHVwc3RyZWFtIGh0c2dldCByZXBvXG4gICAgY29uc3QgbG9jYWxEYXRhUGF0aCA9IHBhdGguam9pbihsb2NhbFBhdGgsIFwiZGF0YVwiKTtcbiAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkRlcGxveUZpbGVzXCIsIHtcbiAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgU291cmNlLmFzc2V0KHBhdGguam9pbihsb2NhbERhdGFQYXRoLCBcImM0Z2hcIikpLFxuICAgICAgICBTb3VyY2UuYXNzZXQocGF0aC5qb2luKGxvY2FsRGF0YVBhdGgsIFwiYmFtXCIpKSxcbiAgICAgICAgU291cmNlLmFzc2V0KHBhdGguam9pbihsb2NhbERhdGFQYXRoLCBcImNyYW1cIikpLFxuICAgICAgICBTb3VyY2UuYXNzZXQocGF0aC5qb2luKGxvY2FsRGF0YVBhdGgsIFwidmNmXCIpKSxcbiAgICAgICAgU291cmNlLmFzc2V0KHBhdGguam9pbihsb2NhbERhdGFQYXRoLCBcImJjZlwiKSksXG4gICAgICBdLFxuICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IGJ1Y2tldCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGtleURpciA9IHBhdGguam9pbihsb2NhbFBhdGgsIFwiZGF0YVwiLCBcImM0Z2hcIiwgXCJrZXlzXCIpO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgU2VjcmV0KHRoaXMsIFwiUHJpdmF0ZUtleVwiLCB7XG4gICAgICBzZWNyZXRTdHJpbmdWYWx1ZTogU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFxuICAgICAgICByZWFkRmlsZVN5bmMocGF0aC5qb2luKGtleURpciwgXCJib2Iuc2VjXCIpKS50b1N0cmluZygpLFxuICAgICAgKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgU2VjcmV0KHRoaXMsIFwiUHVibGljS2V5XCIsIHtcbiAgICAgIHNlY3JldFN0cmluZ1ZhbHVlOiBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoXG4gICAgICAgIHJlYWRGaWxlU3luYyhwYXRoLmpvaW4oa2V5RGlyLCBcImFsaWNlLnB1YlwiKSkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiQnVja2V0TmFtZVwiLCB7IHZhbHVlOiBidWNrZXQuYnVja2V0TmFtZSB9KTtcblxuICAgIHJldHVybiBbYnVja2V0LCBwcml2YXRlS2V5LCBwdWJsaWNLZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBwZXJtaXNzaW9ucyBmb3IgdGhlIExhbWJkYSByb2xlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXRQZXJtaXNzaW9ucyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNvbmZpZzogSHRzZ2V0Q29uZmlnLFxuICAgIGJ1Y2tldD86IEJ1Y2tldCxcbiAgICBwcml2YXRlS2V5PzogU2VjcmV0LFxuICAgIHB1YmxpY0tleT86IFNlY3JldCxcbiAgKSB7XG4gICAgcm9sZS5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgbG9jYXRpb25zID0gY29uZmlnLmxvY2F0aW9ucyA/PyBbXTtcbiAgICAvLyBBZGQgYW55IFwiczM6Ly9cIiBsb2NhdGlvbnMgdG8gcG9saWN5LlxuICAgIGNvbnN0IGJ1Y2tldHMgPSBsb2NhdGlvbnMuZmxhdE1hcCgobG9jYXRpb24pID0+IHtcbiAgICAgIGlmIChsb2NhdGlvbi5sb2NhdGlvbi5zdGFydHNXaXRoKFwiczM6Ly9cIikpIHtcbiAgICAgICAgcmV0dXJuIFtsb2NhdGlvbi5sb2NhdGlvbi5zcGxpdChcIi9cIilbMl1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChidWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVja2V0cy5wdXNoKGJ1Y2tldC5idWNrZXROYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBidWNrZXRQb2xpY3kgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdFwiXSxcbiAgICAgIHJlc291cmNlczogYnVja2V0cy5tYXAoKGJ1Y2tldCkgPT4gYGFybjphd3M6czM6Ojoke2J1Y2tldH0vKmApLFxuICAgIH0pO1xuICAgIGlmIChidWNrZXRQb2xpY3kucmVzb3VyY2VzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShidWNrZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8vIEFkZCBhbnkga2V5cyBmcm9tIHRoZSBsb2NhdGlvbnMuXG4gICAgY29uc3Qga2V5cyA9IGxvY2F0aW9ucy5mbGF0TWFwKChsb2NhdGlvbikgPT4ge1xuICAgICAgY29uc3Qga2V5czogW2Jvb2xlYW4sIHN0cmluZ11bXSA9IFtdO1xuICAgICAgaWYgKGxvY2F0aW9uLnByaXZhdGVfa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAga2V5cy5wdXNoKFtmYWxzZSwgbG9jYXRpb24ucHJpdmF0ZV9rZXldKTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2NhdGlvbi5wdWJsaWNfa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAga2V5cy5wdXNoKFtmYWxzZSwgbG9jYXRpb24ucHVibGljX2tleV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfSk7XG4gICAgaWYgKHByaXZhdGVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5cy5wdXNoKFt0cnVlLCBwcml2YXRlS2V5LnNlY3JldEFybl0pO1xuICAgIH1cbiAgICBpZiAocHVibGljS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGtleXMucHVzaChbdHJ1ZSwgcHVibGljS2V5LnNlY3JldEFybl0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3JldFBvbGljeSA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogW1wic2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWVcIl0sXG4gICAgICByZXNvdXJjZXM6IGtleXMubWFwKChbYXJuLCBrZXldKSA9PiB7XG4gICAgICAgIGlmIChhcm4pIHtcbiAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke0F3cy5SRUdJT059OiR7QXdzLkFDQ09VTlRfSUR9OnNlY3JldDoke2tleX0tKmA7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGlmIChzZWNyZXRQb2xpY3kucmVzb3VyY2VzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShzZWNyZXRQb2xpY3kpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGFtYmRhIHJvbGUgd2l0aCB0aGUgY29uZmlndXJlZCBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUm9sZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcm9sZU5hbWU/OiBzdHJpbmcsXG4gICk6IFJvbGUge1xuICAgIHJldHVybiBuZXcgUm9sZShzY29wZSwgXCJSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxhbWJkYSBleGVjdXRpb24gcm9sZSBmb3IgXCIgKyBpZCxcbiAgICAgIHJvbGVOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBzdGF0ZWZ1bCBjb25maWcgcmVsYXRlZCB0byB0aGUgaHR0cEFwaSBhbmQgdGhlIEFQSSBpdHNlbGYuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUh0dHBBcGkoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgand0QXV0aG9yaXplcj86IEp3dENvbmZpZyxcbiAgICBjb25maWc/OiBDb3JzQ29uaWZnLFxuICAgIHN1YkRvbWFpbj86IHN0cmluZyxcbiAgICBob3N0ZWRab25lPzogSUhvc3RlZFpvbmUsXG4gICAgY2VydGlmaWNhdGVBcm4/OiBzdHJpbmcsXG4gICk6IEh0dHBBcGkge1xuICAgIC8vIEFkZCBhbiBhdXRob3JpemVyIGlmIGF1dGggaXMgcmVxdWlyZWQuXG4gICAgbGV0IGF1dGhvcml6ZXI6IEh0dHBKd3RBdXRob3JpemVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChqd3RBdXRob3JpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHRoZSBjb2cgdXNlciBwb29sIGlkIGlzIG5vdCBzcGVjaWZpZWQsIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICBpZiAoand0QXV0aG9yaXplci5jb2dVc2VyUG9vbElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcG9vbCA9IG5ldyBVc2VyUG9vbCh0aGlzLCBcIlVzZXJQb29sXCIpO1xuICAgICAgICBqd3RBdXRob3JpemVyLmNvZ1VzZXJQb29sSWQgPSBwb29sLnVzZXJQb29sSWQ7XG4gICAgICB9XG5cbiAgICAgIGF1dGhvcml6ZXIgPSBuZXcgSHR0cEp3dEF1dGhvcml6ZXIoXG4gICAgICAgIFwiSHRzZ2V0QXV0aG9yaXplclwiLFxuICAgICAgICBgaHR0cHM6Ly9jb2duaXRvLWlkcC4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbS8ke2p3dEF1dGhvcml6ZXIuY29nVXNlclBvb2xJZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgaWRlbnRpdHlTb3VyY2U6IFtcIiRyZXF1ZXN0LmhlYWRlci5BdXRob3JpemF0aW9uXCJdLFxuICAgICAgICAgIGp3dEF1ZGllbmNlOiBqd3RBdXRob3JpemVyLmF1ZGllbmNlID8/IFtdLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgem9uZTogSUhvc3RlZFpvbmU7XG4gICAgaWYgKGhvc3RlZFpvbmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgem9uZSA9IEhvc3RlZFpvbmUuZnJvbUxvb2t1cCh0aGlzLCBcIkhvc3RlZFpvbmVcIiwge1xuICAgICAgICBkb21haW5OYW1lOiBkb21haW4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgem9uZSA9IGhvc3RlZFpvbmU7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7c3ViRG9tYWluID8/IFwiaHRzZ2V0XCJ9LiR7ZG9tYWlufWA7XG4gICAgbGV0IGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGU7XG4gICAgaWYgKGNlcnRpZmljYXRlQXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNlcnRpZmljYXRlID0gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkNlcnRpZmljYXRlXCIsXG4gICAgICAgIGNlcnRpZmljYXRlQXJuLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGhpcywgXCJDZXJ0aWZpY2F0ZVwiLCB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHVybCxcbiAgICAgICAgdmFsaWRhdGlvbjogQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSksXG4gICAgICAgIGNlcnRpZmljYXRlTmFtZTogdXJsLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9tYWluTmFtZSA9IG5ldyBEb21haW5OYW1lKHRoaXMsIFwiRG9tYWluTmFtZVwiLCB7XG4gICAgICBjZXJ0aWZpY2F0ZTogY2VydGlmaWNhdGUsXG4gICAgICBkb21haW5OYW1lOiB1cmwsXG4gICAgfSk7XG5cbiAgICBuZXcgQVJlY29yZCh0aGlzLCBcIkFSZWNvcmRcIiwge1xuICAgICAgem9uZSxcbiAgICAgIHJlY29yZE5hbWU6IHN1YkRvbWFpbiA/PyBcImh0c2dldFwiLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgQXBpR2F0ZXdheXYyRG9tYWluUHJvcGVydGllcyhcbiAgICAgICAgICBkb21haW5OYW1lLnJlZ2lvbmFsRG9tYWluTmFtZSxcbiAgICAgICAgICBkb21haW5OYW1lLnJlZ2lvbmFsSG9zdGVkWm9uZUlkLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgSHR0cEFwaSh0aGlzLCBcIkh0c0dldEFwaUdhdGV3YXlcIiwge1xuICAgICAgZGVmYXVsdEF1dGhvcml6ZXI6IGF1dGhvcml6ZXIsXG4gICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzoge1xuICAgICAgICBkb21haW5OYW1lOiBkb21haW5OYW1lLFxuICAgICAgfSxcbiAgICAgIGNvcnNQcmVmbGlnaHQ6IHtcbiAgICAgICAgYWxsb3dDcmVkZW50aWFsczogY29uZmlnPy5hbGxvd0NyZWRlbnRpYWxzID8/IGZhbHNlLFxuICAgICAgICBhbGxvd0hlYWRlcnM6IGNvbmZpZz8uYWxsb3dIZWFkZXJzID8/IFtcIipcIl0sXG4gICAgICAgIGFsbG93TWV0aG9kczogY29uZmlnPy5hbGxvd01ldGhvZHMgPz8gW0NvcnNIdHRwTWV0aG9kLkFOWV0sXG4gICAgICAgIGFsbG93T3JpZ2luczogY29uZmlnPy5hbGxvd09yaWdpbnMgPz8gW1wiKlwiXSxcbiAgICAgICAgZXhwb3NlSGVhZGVyczogY29uZmlnPy5leHBvc2VIZWFkZXJzID8/IFtcIipcIl0sXG4gICAgICAgIG1heEFnZTogY29uZmlnPy5tYXhBZ2UgPz8gRHVyYXRpb24uZGF5cygzMCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgSlNPTiBjb25maWcgdG8gaHRzZ2V0LXJzIGVudiByZXByZXNlbnRhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlnVG9FbnYoXG4gICAgY29uZmlnOiBIdHNnZXRDb25maWcsXG4gICAgY29yc0NvbmZpZz86IENvcnNDb25pZmcsXG4gICAgYnVja2V0PzogQnVja2V0LFxuICAgIHByaXZhdGVLZXk/OiBTZWNyZXQsXG4gICAgcHVibGljS2V5PzogU2VjcmV0LFxuICApOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCB0b0h0c2dldEVudiA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgICAgICAucmVwbGFjZUFsbChuZXcgUmVnRXhwKC9cIiggKSo6KCApKi9nKSwgXCI9XCIpXG4gICAgICAgIC5yZXBsYWNlQWxsKCdcIicsIFwiXCIpO1xuICAgIH07XG5cbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgICBjb25zdCBsb2NhdGlvbnMgPSBjb25maWcubG9jYXRpb25zID8/IFtdO1xuXG4gICAgaWYgKGJ1Y2tldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhdGlvbnMucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBgczM6Ly8ke2J1Y2tldC5idWNrZXROYW1lfWAsXG4gICAgICAgIHByaXZhdGVfa2V5OiBwcml2YXRlS2V5Py5zZWNyZXRBcm4sXG4gICAgICAgIHB1YmxpY19rZXk6IHB1YmxpY0tleT8uc2VjcmV0QXJuLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2F0aW9uc0Vudjogc3RyaW5nIHwgdW5kZWZpbmVkID0gbG9jYXRpb25zXG4gICAgICAubWFwKChsb2NhdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdG9IdHNnZXRFbnYoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbi5sb2NhdGlvbixcbiAgICAgICAgICAuLi4obG9jYXRpb24ucHJpdmF0ZV9rZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgbG9jYXRpb24ucHVibGljX2tleSAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgICAga2V5czoge1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwiU2VjcmV0c01hbmFnZXJcIixcbiAgICAgICAgICAgICAgICBwcml2YXRlOiBsb2NhdGlvbi5wcml2YXRlX2tleSxcbiAgICAgICAgICAgICAgICBwdWJsaWM6IGxvY2F0aW9uLnB1YmxpY19rZXksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIsXCIpO1xuICAgIGxvY2F0aW9uc0VudiA9IGBbJHtsb2NhdGlvbnNFbnZ9XWA7XG5cbiAgICBpZiAoXG4gICAgICBsb2NhdGlvbnNFbnYgPT0gXCJbXVwiICYmXG4gICAgICBjb25maWcuZW52aXJvbm1lbnRfb3ZlcnJpZGU/LkhUU0dFVF9MT0NBVElPTlMgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgbG9jYXRpb25zRW52ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIG91dC5IVFNHRVRfTE9DQVRJT05TID0gbG9jYXRpb25zRW52O1xuICAgIG91dC5IVFNHRVRfVElDS0VUX1NFUlZFUl9DT1JTX0FMTE9XX0NSRURFTlRJQUxTID1cbiAgICAgIGNvcnNDb25maWc/LmFsbG93Q3JlZGVudGlhbHM/LnRvU3RyaW5nKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9ub24tbnVsbGFibGUtdHlwZS1hc3NlcnRpb24tc3R5bGVcbiAgICBvdXQuSFRTR0VUX1RJQ0tFVF9TRVJWRVJfQ09SU19BTExPV19IRUFERVJTID0gYFske2NvcnNDb25maWc/LmFsbG93SGVhZGVycz8uam9pbihcIixcIikgYXMgc3RyaW5nfV1gO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm9uLW51bGxhYmxlLXR5cGUtYXNzZXJ0aW9uLXN0eWxlXG4gICAgb3V0LkhUU0dFVF9USUNLRVRfU0VSVkVSX0NPUlNfQUxMT1dfTUVUSE9EUyA9IGBbJHtjb3JzQ29uZmlnPy5hbGxvd01ldGhvZHM/LmpvaW4oXCIsXCIpIGFzIHN0cmluZ31dYDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vbi1udWxsYWJsZS10eXBlLWFzc2VydGlvbi1zdHlsZVxuICAgIG91dC5IVFNHRVRfVElDS0VUX1NFUlZFUl9DT1JTX0FMTE9XX09SSUdJTlMgPSBgWyR7Y29yc0NvbmZpZz8uYWxsb3dPcmlnaW5zPy5qb2luKFwiLFwiKSBhcyBzdHJpbmd9XWA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9ub24tbnVsbGFibGUtdHlwZS1hc3NlcnRpb24tc3R5bGVcbiAgICBvdXQuSFRTR0VUX1RJQ0tFVF9TRVJWRVJfQ09SU19FWFBPU0VfSEVBREVSUyA9IGBbJHtjb3JzQ29uZmlnPy5leHBvc2VIZWFkZXJzPy5qb2luKFwiLFwiKSBhcyBzdHJpbmd9XWA7XG4gICAgb3V0LkhUU0dFVF9USUNLRVRfU0VSVkVSX0NPUlNfTUFYX0FHRSA9IGNvcnNDb25maWc/Lm1heEFnZVxuICAgICAgPy50b1NlY29uZHMoKVxuICAgICAgLnRvU3RyaW5nKCk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25maWcuc2VydmljZV9pbmZvKSB7XG4gICAgICBvdXRbYEhUU0dFVF9TRVJWSUNFX0lORk9fJHtrZXkudG9VcHBlckNhc2UoKX1gXSA9IHRvSHRzZ2V0RW52KFxuICAgICAgICBjb25maWcuc2VydmljZV9pbmZvW2tleV0sXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25maWcuZW52aXJvbm1lbnRfb3ZlcnJpZGUpIHtcbiAgICAgIG91dFtrZXldID0gdG9IdHNnZXRFbnYoY29uZmlnLmVudmlyb25tZW50X292ZXJyaWRlW2tleV0pO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG91dCkuZm9yRWFjaChcbiAgICAgIChrZXkpID0+XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgKG91dFtrZXldID09IGBbdW5kZWZpbmVkXWAgfHwgb3V0W2tleV0gPT0gXCJbXVwiKSAmJiBkZWxldGUgb3V0W2tleV0sXG4gICAgKTtcbiAgICByZXR1cm4gb3V0IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH1cbn1cbiJdfQ==
|
package/lib/htsget-lambda.ts
CHANGED
package/package.json
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"htsget_app": "bin/htsget-lambda.js"
|
|
4
4
|
},
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@types/node": "^24.10.
|
|
7
|
-
"aws-cdk": "^2.
|
|
8
|
-
"aws-cdk-lib": "^2.
|
|
9
|
-
"constructs": "10.
|
|
10
|
-
"typedoc": "^0.28.
|
|
11
|
-
"typedoc-plugin-markdown": "^4.
|
|
12
|
-
"typescript": "5.9.3"
|
|
6
|
+
"@types/node": "^24.10.13",
|
|
7
|
+
"aws-cdk": "^2.1107.0",
|
|
8
|
+
"aws-cdk-lib": "^2.240.0",
|
|
9
|
+
"constructs": "^10.5.1",
|
|
10
|
+
"typedoc": "^0.28.17",
|
|
11
|
+
"typedoc-plugin-markdown": "^4.10.0",
|
|
12
|
+
"typescript": "^5.9.3"
|
|
13
13
|
},
|
|
14
14
|
"name": "@umccr/htsget-lambda",
|
|
15
15
|
"peerDependencies": {
|
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"cargo-lambda-cdk": "^0.0.36"
|
|
20
20
|
},
|
|
21
|
-
"version": "0.
|
|
21
|
+
"version": "0.10.0",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/umccr/htsget-deploy"
|
|
25
|
+
},
|
|
22
26
|
"scripts": {
|
|
23
27
|
"build": "tsc",
|
|
24
28
|
"cdk": "cdk",
|