@pwrdrvr/microapps-cdk 0.3.3-alpha.1 → 0.3.4
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 +240 -123
- package/API.md +109 -40
- package/changelog.md +1 -1
- package/lib/MicroApps.d.ts +33 -4
- package/lib/MicroApps.d.ts.map +1 -1
- package/lib/MicroApps.js +22 -16
- package/lib/MicroAppsAPIGwy.js +1 -1
- package/lib/MicroAppsCF.d.ts +19 -8
- package/lib/MicroAppsCF.d.ts.map +1 -1
- package/lib/MicroAppsCF.js +24 -21
- package/lib/MicroAppsEdgeToOrigin.d.ts +6 -0
- package/lib/MicroAppsEdgeToOrigin.d.ts.map +1 -1
- package/lib/MicroAppsEdgeToOrigin.js +11 -7
- package/lib/MicroAppsS3.d.ts +9 -0
- package/lib/MicroAppsS3.d.ts.map +1 -1
- package/lib/MicroAppsS3.js +4 -3
- package/lib/MicroAppsSvcs.d.ts +1 -1
- package/lib/MicroAppsSvcs.d.ts.map +1 -1
- package/lib/MicroAppsSvcs.js +40 -36
- package/lib/MicroAppsTable.js +1 -1
- package/lib/microapps-edge-to-origin/index.js +43 -43
- package/lib/microapps-edge-to-origin/index.js.map +2 -2
- package/package.json +1 -1
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
package/lib/MicroAppsCF.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ export interface MicroAppsCFProps {
|
|
|
52
52
|
/**
|
|
53
53
|
* API Gateway v2 HTTP API for apps
|
|
54
54
|
*/
|
|
55
|
-
readonly httpApi
|
|
55
|
+
readonly httpApi?: apigwy.HttpApi;
|
|
56
56
|
/**
|
|
57
57
|
* Optional asset name root
|
|
58
58
|
*
|
|
@@ -90,7 +90,7 @@ export interface MicroAppsCFProps {
|
|
|
90
90
|
* When true API routes that contain /api/ in the path will get routed to API Gateway
|
|
91
91
|
* even if they have a period in the path.
|
|
92
92
|
*
|
|
93
|
-
* @default true
|
|
93
|
+
* @default true if httpApi is provided
|
|
94
94
|
*/
|
|
95
95
|
readonly createAPIPathRoute?: boolean;
|
|
96
96
|
/**
|
|
@@ -104,7 +104,7 @@ export interface MicroAppsCFProps {
|
|
|
104
104
|
* When true API routes that contain /_next/data/ in the path will get routed to API Gateway
|
|
105
105
|
* even if they have a period in the path.
|
|
106
106
|
*
|
|
107
|
-
* @default true
|
|
107
|
+
* @default true if httpApi is provided
|
|
108
108
|
*/
|
|
109
109
|
readonly createNextDataPathRoute?: boolean;
|
|
110
110
|
/**
|
|
@@ -113,6 +113,15 @@ export interface MicroAppsCFProps {
|
|
|
113
113
|
* @default - no edge to API Gateway origin functions added
|
|
114
114
|
*/
|
|
115
115
|
readonly edgeLambdas?: cf.EdgeLambda[];
|
|
116
|
+
/**
|
|
117
|
+
* Optional Origin Shield Region
|
|
118
|
+
*
|
|
119
|
+
* This should be the region where the DynamoDB is located so the
|
|
120
|
+
* EdgeToOrigin calls have the lowest latency (~1 ms).
|
|
121
|
+
*
|
|
122
|
+
* @default - none
|
|
123
|
+
*/
|
|
124
|
+
readonly originShieldRegion?: string;
|
|
116
125
|
}
|
|
117
126
|
/**
|
|
118
127
|
* Options for the `CreateAPIOriginPolicy`
|
|
@@ -144,9 +153,11 @@ export interface CreateAPIOriginPolicyOptions {
|
|
|
144
153
|
*/
|
|
145
154
|
export interface AddRoutesOptions {
|
|
146
155
|
/**
|
|
147
|
-
*
|
|
156
|
+
* Default origin (invalid URL or API Gateway)
|
|
157
|
+
*
|
|
158
|
+
* @default invalid URL (never used)
|
|
148
159
|
*/
|
|
149
|
-
readonly
|
|
160
|
+
readonly appOrigin: cf.IOrigin;
|
|
150
161
|
/**
|
|
151
162
|
* S3 Bucket CloudFront Origin for static assets
|
|
152
163
|
*/
|
|
@@ -158,7 +169,7 @@ export interface AddRoutesOptions {
|
|
|
158
169
|
/**
|
|
159
170
|
* Origin Request policy for API Gateway Origin
|
|
160
171
|
*/
|
|
161
|
-
readonly
|
|
172
|
+
readonly appOriginRequestPolicy: cf.IOriginRequestPolicy;
|
|
162
173
|
/**
|
|
163
174
|
* Path prefix on the root of the CloudFront distribution
|
|
164
175
|
*
|
|
@@ -174,7 +185,7 @@ export interface AddRoutesOptions {
|
|
|
174
185
|
* When true API routes that contain /api/ in the path will get routed to API Gateway
|
|
175
186
|
* even if they have a period in the path.
|
|
176
187
|
*
|
|
177
|
-
* @default
|
|
188
|
+
* @default false
|
|
178
189
|
*/
|
|
179
190
|
readonly createAPIPathRoute?: boolean;
|
|
180
191
|
/**
|
|
@@ -188,7 +199,7 @@ export interface AddRoutesOptions {
|
|
|
188
199
|
* When true API routes that contain /_next/data/ in the path will get routed to API Gateway
|
|
189
200
|
* even if they have a period in the path.
|
|
190
201
|
*
|
|
191
|
-
* @default
|
|
202
|
+
* @default false
|
|
192
203
|
*/
|
|
193
204
|
readonly createNextDataPathRoute?: boolean;
|
|
194
205
|
/**
|
package/lib/MicroAppsCF.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicroAppsCF.d.ts","sourceRoot":"","sources":["../src/MicroAppsCF.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAO,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MicroAppsCF.d.ts","sourceRoot":"","sources":["../src/MicroAppsCF.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAO,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAElC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;IAEnC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAEzD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,SAAU,YAAW,YAAY;IAChE;;;;;;;;;;;;OAYG;WACW,qBAAqB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,4BAA4B,GACnC,EAAE,CAAC,oBAAoB;IAqC1B;;;;OAIG;WACW,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB;IAqGlE,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,IAAW,gBAAgB,IAAI,EAAE,CAAC,YAAY,CAE7C;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB;CAmHlE"}
|
package/lib/MicroAppsCF.js
CHANGED
|
@@ -24,8 +24,8 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
24
24
|
(props.r53Zone !== undefined && props.domainNameEdge === undefined)) {
|
|
25
25
|
throw new Error('If either of r53Zone or domainNameEdge are set then the other must be set');
|
|
26
26
|
}
|
|
27
|
-
const { domainNameEdge, domainNameOrigin, httpApi, removalPolicy, certEdge, assetNameRoot, assetNameSuffix, r53Zone, bucketLogs, bucketAppsOrigin, rootPathPrefix, createAPIPathRoute =
|
|
28
|
-
const
|
|
27
|
+
const { domainNameEdge, domainNameOrigin, httpApi, removalPolicy, certEdge, assetNameRoot, assetNameSuffix, r53Zone, bucketLogs, bucketAppsOrigin, rootPathPrefix, createAPIPathRoute = !!props.httpApi, createNextDataPathRoute = !!props.httpApi, edgeLambdas, originShieldRegion, } = props;
|
|
28
|
+
const appOriginRequestPolicy = MicroAppsCF.createAPIOriginPolicy(this, {
|
|
29
29
|
assetNameRoot,
|
|
30
30
|
assetNameSuffix,
|
|
31
31
|
domainNameEdge,
|
|
@@ -37,7 +37,7 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
37
37
|
if (domainNameOrigin !== undefined) {
|
|
38
38
|
httpOriginFQDN = domainNameOrigin;
|
|
39
39
|
}
|
|
40
|
-
else {
|
|
40
|
+
else if (httpApi) {
|
|
41
41
|
httpOriginFQDN = `${httpApi.apiId}.execute-api.${aws_cdk_lib_1.Aws.REGION}.amazonaws.com`;
|
|
42
42
|
}
|
|
43
43
|
//
|
|
@@ -46,10 +46,13 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
46
46
|
//
|
|
47
47
|
// CloudFront Distro
|
|
48
48
|
//
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
const appOrigin = httpApi
|
|
50
|
+
? new cforigins.HttpOrigin(httpOriginFQDN, {
|
|
51
|
+
protocolPolicy: cf.OriginProtocolPolicy.HTTPS_ONLY,
|
|
52
|
+
originSslProtocols: [cf.OriginSslPolicy.TLS_V1_2],
|
|
53
|
+
originShieldRegion,
|
|
54
|
+
})
|
|
55
|
+
: bucketAppsOrigin;
|
|
53
56
|
this._cloudFrontDistro = new cf.Distribution(this, 'cft', {
|
|
54
57
|
comment: assetNameRoot ? `${assetNameRoot}${assetNameSuffix}` : domainNameEdge,
|
|
55
58
|
domainNames: domainNameEdge !== undefined ? [domainNameEdge] : undefined,
|
|
@@ -59,8 +62,8 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
59
62
|
allowedMethods: cf.AllowedMethods.ALLOW_ALL,
|
|
60
63
|
cachePolicy: cf.CachePolicy.CACHING_DISABLED,
|
|
61
64
|
compress: true,
|
|
62
|
-
originRequestPolicy:
|
|
63
|
-
origin:
|
|
65
|
+
originRequestPolicy: appOriginRequestPolicy,
|
|
66
|
+
origin: appOrigin,
|
|
64
67
|
viewerProtocolPolicy: cf.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
65
68
|
edgeLambdas,
|
|
66
69
|
},
|
|
@@ -76,10 +79,10 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
76
79
|
}
|
|
77
80
|
// Add routes to the CloudFront Distribution
|
|
78
81
|
MicroAppsCF.addRoutes(scope, {
|
|
79
|
-
|
|
82
|
+
appOrigin,
|
|
80
83
|
bucketAppsOrigin,
|
|
81
84
|
distro: this._cloudFrontDistro,
|
|
82
|
-
|
|
85
|
+
appOriginRequestPolicy,
|
|
83
86
|
rootPathPrefix,
|
|
84
87
|
createAPIPathRoute,
|
|
85
88
|
createNextDataPathRoute,
|
|
@@ -152,7 +155,7 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
152
155
|
* @param props
|
|
153
156
|
*/
|
|
154
157
|
static addRoutes(_scope, props) {
|
|
155
|
-
const {
|
|
158
|
+
const { appOrigin: defaultOrigin, bucketAppsOrigin, distro, appOriginRequestPolicy, rootPathPrefix = '', createAPIPathRoute = false, createNextDataPathRoute = false, } = props;
|
|
156
159
|
//
|
|
157
160
|
// Add Behaviors
|
|
158
161
|
//
|
|
@@ -163,12 +166,12 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
163
166
|
originRequestPolicy: cf.OriginRequestPolicy.CORS_S3_ORIGIN,
|
|
164
167
|
viewerProtocolPolicy: cf.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
165
168
|
};
|
|
166
|
-
const
|
|
169
|
+
const appBehaviorOptions = {
|
|
167
170
|
allowedMethods: cf.AllowedMethods.ALLOW_ALL,
|
|
168
171
|
// TODO: Caching needs to be set by the app response
|
|
169
172
|
cachePolicy: cf.CachePolicy.CACHING_DISABLED,
|
|
170
173
|
compress: true,
|
|
171
|
-
originRequestPolicy:
|
|
174
|
+
originRequestPolicy: appOriginRequestPolicy,
|
|
172
175
|
viewerProtocolPolicy: cf.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
173
176
|
edgeLambdas: props.edgeLambdas,
|
|
174
177
|
};
|
|
@@ -178,8 +181,8 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
178
181
|
// such as: /release/0.0.0/api/update/default/release/0.0.0
|
|
179
182
|
//
|
|
180
183
|
if (createAPIPathRoute) {
|
|
181
|
-
distro.addBehavior(path_1.posix.join(rootPathPrefix, '*/api/*'),
|
|
182
|
-
distro.addBehavior(path_1.posix.join(rootPathPrefix, 'api/*'),
|
|
184
|
+
distro.addBehavior(path_1.posix.join(rootPathPrefix, '*/api/*'), defaultOrigin, appBehaviorOptions);
|
|
185
|
+
distro.addBehavior(path_1.posix.join(rootPathPrefix, 'api/*'), defaultOrigin, appBehaviorOptions);
|
|
183
186
|
}
|
|
184
187
|
//
|
|
185
188
|
// If a route specifically has `/_next/data/` in it, send it to API Gateway
|
|
@@ -191,12 +194,12 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
191
194
|
// Note: send anything with _next/data after the appName (and optional version)
|
|
192
195
|
// to the app origin as iframe-less will have no version before _next/data
|
|
193
196
|
// in the path
|
|
194
|
-
path_1.posix.join(rootPathPrefix, '*/_next/data/*'),
|
|
197
|
+
path_1.posix.join(rootPathPrefix, '*/_next/data/*'), defaultOrigin, appBehaviorOptions);
|
|
195
198
|
distro.addBehavior(
|
|
196
199
|
// Note: send anything with _next/data after the appName (and optional version)
|
|
197
200
|
// to the app origin as iframe-less will have no version before _next/data
|
|
198
201
|
// in the path
|
|
199
|
-
path_1.posix.join(rootPathPrefix, '_next/data/*'),
|
|
202
|
+
path_1.posix.join(rootPathPrefix, '_next/data/*'), defaultOrigin, appBehaviorOptions);
|
|
200
203
|
}
|
|
201
204
|
//
|
|
202
205
|
// All static assets are assumed to have a dot in them
|
|
@@ -211,7 +214,7 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
211
214
|
// There is no trailing slash because Serverless Next.js wants
|
|
212
215
|
// go load pages at /release/0.0.3 (with no trailing slash).
|
|
213
216
|
//
|
|
214
|
-
distro.addBehavior(path_1.posix.join(rootPathPrefix, '/*'),
|
|
217
|
+
distro.addBehavior(path_1.posix.join(rootPathPrefix, '/*'), defaultOrigin, appBehaviorOptions);
|
|
215
218
|
}
|
|
216
219
|
get cloudFrontDistro() {
|
|
217
220
|
return this._cloudFrontDistro;
|
|
@@ -219,5 +222,5 @@ class MicroAppsCF extends constructs_1.Construct {
|
|
|
219
222
|
}
|
|
220
223
|
exports.MicroAppsCF = MicroAppsCF;
|
|
221
224
|
_a = JSII_RTTI_SYMBOL_1;
|
|
222
|
-
MicroAppsCF[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsCF", version: "0.3.
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQ0YuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWljcm9BcHBzQ0YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBMEM7QUFFMUMsNkNBQWlEO0FBRWpELGlEQUFpRDtBQUNqRCxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLDhEQUE4RDtBQUU5RCwyQ0FBdUM7QUFDdkMseURBQXNEO0FBME50RDs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBcUt4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztZQUNuRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLEVBQ25FO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsTUFBTSxFQUNKLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixRQUFRLEVBQ1IsYUFBYSxFQUNiLGVBQWUsRUFDZixPQUFPLEVBQ1AsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixjQUFjLEVBQ2Qsa0JBQWtCLEdBQUcsSUFBSSxFQUN6Qix1QkFBdUIsR0FBRyxJQUFJLEVBQzlCLFdBQVcsR0FDWixHQUFHLEtBQUssQ0FBQztRQUVWLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRTtZQUN4RSxhQUFhO1lBQ2IsZUFBZTtZQUNm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LEVBQ2hELFlBQVksRUFDWixxQkFBcUIsQ0FDdEIsQ0FBQztZQUVGLE1BQU0sQ0FBQyxXQUFXO1lBQ2hCLCtFQUErRTtZQUMvRSwwRUFBMEU7WUFDMUUsY0FBYztZQUNkLFlBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxFQUM5QyxZQUFZLEVBQ1oscUJBQXFCLENBQ3RCLENBQUM7U0FDSDtRQUVELEVBQUU7UUFDRixzREFBc0Q7UUFDdEQsRUFBRTtRQUNGLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLFlBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxFQUMxQyxnQkFBZ0IsRUFDaEIsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixFQUFFO1FBQ0YsNEJBQTRCO1FBQzVCLEVBQUU7UUFDRixNQUFNLENBQUMsV0FBVyxDQUNoQixZQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFDNUMsZ0JBQWdCLEVBQ2hCLGlCQUFpQixDQUNsQixDQUFDO1FBRUYsRUFBRTtRQUNGLCtEQUErRDtRQUMvRCw4REFBOEQ7UUFDOUQsNERBQTREO1FBQzVELEVBQUU7UUFDRixNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFHRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDOztBQW5LSCxrQ0FvUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCBhcyBwb3NpeFBhdGggfSBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGFwaWd3eSBmcm9tICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWFscGhhJztcbmltcG9ydCB7IEF3cywgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNmIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCAqIGFzIGNmb3JpZ2lucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIHI1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyByNTN0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgcmV2ZXJzZURvbWFpbiB9IGZyb20gJy4vdXRpbHMvUmV2ZXJzZURvbWFpbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIE1pY3JvQXBwcyBDbG91ZEZyb250XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU1pY3JvQXBwc0NGIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udERpc3RybzogY2YuRGlzdHJpYnV0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBgTWljcm9BcHBzQ0ZgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pY3JvQXBwc0NGUHJvcHMge1xuICAvKipcbiAgICogUmVtb3ZhbFBvbGljeSBvdmVycmlkZSBmb3IgY2hpbGQgcmVzb3VyY2VzXG4gICAqXG4gICAqIE5vdGU6IGlmIHNldCB0byBERVNUUk9ZIHRoZSBTMyBidWNrZXMgd2lsbCBoYXZlIGBhdXRvRGVsZXRlT2JqZWN0c2Agc2V0IHRvIGB0cnVlYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBlciByZXNvdXJjZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogUzMgYnVja2V0IG9yaWdpbiBmb3IgZGVwbG95ZWQgYXBwbGljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBidWNrZXRBcHBzT3JpZ2luOiBjZm9yaWdpbnMuUzNPcmlnaW47XG5cbiAgLyoqXG4gICAqIFMzIGJ1Y2tldCBmb3IgQ2xvdWRGcm9udCBsb2dzXG4gICAqL1xuICByZWFkb25seSBidWNrZXRMb2dzPzogczMuSUJ1Y2tldDtcblxuICAvKipcbiAgICogQ2xvdWRGcm9udCBEaXN0cmlidXRpb24gZG9tYWluIG5hbWVcbiAgICpcbiAgICogQGV4YW1wbGUgYXBwcy5wd3JkcnZyLmNvbVxuICAgKiBAZGVmYXVsdCBhdXRvLWFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lRWRnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQVBJIEdhdGV3YXkgY3VzdG9tIG9yaWdpbiBkb21haW4gbmFtZVxuICAgKlxuICAgKiBAZXhhbXBsZSBhcHBzLnB3cmRydnIuY29tXG4gICAqIEBkZWZhdWx0IC0gcmV0cmlldmVkIGZyb20gaHR0cEFwaSwgaWYgcG9zc2libGVcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFQSSBHYXRld2F5IHYyIEhUVFAgQVBJIGZvciBhcHBzXG4gICAqL1xuICByZWFkb25seSBodHRwQXBpOiBhcGlnd3kuSHR0cEFwaTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYXNzZXQgbmFtZSByb290XG4gICAqXG4gICAqIEBleGFtcGxlIG1pY3JvYXBwc1xuICAgKiBAZGVmYXVsdCAtIHJlc291cmNlIG5hbWVzIGF1dG8gYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgc3VmZml4XG4gICAqXG4gICAqIEBleGFtcGxlIC1kZXYtcHItMTJcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBQ00gQ2VydGlmaWNhdGUgdGhhdCBjb3ZlcnMgYGRvbWFpbk5hbWVFZGdlYCBuYW1lXG4gICAqL1xuICByZWFkb25seSBjZXJ0RWRnZT86IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgLyoqXG4gICAqIFJvdXRlNTMgem9uZSBpbiB3aGljaCB0byBjcmVhdGUgb3B0aW9uYWwgYGRvbWFpbk5hbWVFZGdlYCByZWNvcmRcbiAgICovXG4gIHJlYWRvbmx5IHI1M1pvbmU/OiByNTMuSUhvc3RlZFpvbmU7XG5cbiAgLyoqXG4gICAqIFBhdGggcHJlZml4IG9uIHRoZSByb290IG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBAZXhhbXBsZSBkZXYvXG4gICAqL1xuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4dHJhIEJlaGF2aW9yIChSb3V0ZSkgZm9yIC9hcGkvIHRoYXQgYWxsb3dzXG4gICAqIEFQSSByb3V0ZXMgdG8gaGF2ZSBhIHBlcmlvZCBpbiB0aGVtLlxuICAgKlxuICAgKiBXaGVuIGZhbHNlIEFQSSByb3V0ZXMgd2l0aCBhIHBlcmlvZCBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gUzMuXG4gICAqXG4gICAqIFdoZW4gdHJ1ZSBBUEkgcm91dGVzIHRoYXQgY29udGFpbiAvYXBpLyBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gQVBJIEdhdGV3YXlcbiAgICogZXZlbiBpZiB0aGV5IGhhdmUgYSBwZXJpb2QgaW4gdGhlIHBhdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUFQSVBhdGhSb3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBleHRyYSBCZWhhdmlvciAoUm91dGUpIGZvciAvX25leHQvZGF0YS9cbiAgICogVGhpcyByb3V0ZSBpcyB1c2VkIGJ5IE5leHQuanMgdG8gbG9hZCBkYXRhIGZyb20gdGhlIEFQSSBHYXRld2F5XG4gICAqIG9uIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgIGNhbGxzLiAgVGhlIHJlcXVlc3RzIGNhbiBlbmQgaW4gYC5qc29uYCxcbiAgICogd2hpY2ggd291bGQgY2F1c2UgdGhlbSB0byBiZSByb3V0ZWQgdG8gUzMgaWYgdGhpcyByb3V0ZSBpcyBub3QgY3JlYXRlZC5cbiAgICpcbiAgICogV2hlbiBmYWxzZSBBUEkgcm91dGVzIHdpdGggYSBwZXJpb2QgaW4gdGhlIHBhdGggd2lsbCBnZXQgcm91dGVkIHRvIFMzLlxuICAgKlxuICAgKiBXaGVuIHRydWUgQVBJIHJvdXRlcyB0aGF0IGNvbnRhaW4gL19uZXh0L2RhdGEvIGluIHRoZSBwYXRoIHdpbGwgZ2V0IHJvdXRlZCB0byBBUEkgR2F0ZXdheVxuICAgKiBldmVuIGlmIHRoZXkgaGF2ZSBhIHBlcmlvZCBpbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlTmV4dERhdGFQYXRoUm91dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9mIHRoZSBlZGdlIHRvIG9yaWdpbiBsYW1iZGEgZnVuY3Rpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZWRnZSB0byBBUEkgR2F0ZXdheSBvcmlnaW4gZnVuY3Rpb25zIGFkZGVkXG4gICAqL1xuICByZWFkb25seSBlZGdlTGFtYmRhcz86IGNmLkVkZ2VMYW1iZGFbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgYENyZWF0ZUFQSU9yaWdpblBvbGljeWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBUElPcmlnaW5Qb2xpY3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgcm9vdFxuICAgKlxuICAgKiBAZXhhbXBsZSBtaWNyb2FwcHNcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBuYW1lcyBhdXRvIGFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhc3NldCBuYW1lIHN1ZmZpeFxuICAgKlxuICAgKiBAZXhhbXBsZSAtZGV2LXByLTEyXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogRWRnZSBkb21haW4gbmFtZSB1c2VkIGJ5IENsb3VkRnJvbnQgLSBJZiBzZXQgYSBjdXN0b21cbiAgICogT3JpZ2luUmVxdWVzdFBvbGljeSB3aWxsIGJlIGNyZWF0ZWQgdGhhdCBwcmV2ZW50c1xuICAgKiB0aGUgSG9zdCBoZWFkZXIgZnJvbSBiZWluZyBwYXNzZWQgdG8gdGhlIG9yaWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVFZGdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBBZGRSb3V0ZXNgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUm91dGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBDbG91ZEZyb250IE9yaWdpbiBmb3IgQVBJIGNhbGxzXG4gICAqL1xuICByZWFkb25seSBhcGlHd3lPcmlnaW46IGNmLklPcmlnaW47XG5cbiAgLyoqXG4gICAqIFMzIEJ1Y2tldCBDbG91ZEZyb250IE9yaWdpbiBmb3Igc3RhdGljIGFzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0QXBwc09yaWdpbjogY2ZvcmlnaW5zLlMzT3JpZ2luO1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiB0byBhZGQgdGhlIEJlaGF2aW9ycyAoUm91dGVzKSB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJvOiBjZi5EaXN0cmlidXRpb247XG5cbiAgLyoqXG4gICAqIE9yaWdpbiBSZXF1ZXN0IHBvbGljeSBmb3IgQVBJIEdhdGV3YXkgT3JpZ2luXG4gICAqL1xuICByZWFkb25seSBhcGlnd3lPcmlnaW5SZXF1ZXN0UG9saWN5OiBjZi5JT3JpZ2luUmVxdWVzdFBvbGljeTtcblxuICAvKipcbiAgICogUGF0aCBwcmVmaXggb24gdGhlIHJvb3Qgb2YgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlIGRldi9cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RQYXRoUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXh0cmEgQmVoYXZpb3IgKFJvdXRlKSBmb3IgL2FwaS8gdGhhdCBhbGxvd3NcbiAgICogQVBJIHJvdXRlcyB0byBoYXZlIGEgcGVyaW9kIGluIHRoZW0uXG4gICAqXG4gICAqIFdoZW4gZmFsc2UgQVBJIHJvdXRlcyB3aXRoIGEgcGVyaW9kIGluIHRoZSBwYXRoIHdpbGwgZ2V0IHJvdXRlZCB0byBTMy5cbiAgICpcbiAgICogV2hlbiB0cnVlIEFQSSByb3V0ZXMgdGhhdCBjb250YWluIC9hcGkvIGluIHRoZSBwYXRoIHdpbGwgZ2V0IHJvdXRlZCB0byBBUEkgR2F0ZXdheVxuICAgKiBldmVuIGlmIHRoZXkgaGF2ZSBhIHBlcmlvZCBpbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlQVBJUGF0aFJvdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4dHJhIEJlaGF2aW9yIChSb3V0ZSkgZm9yIC9fbmV4dC9kYXRhL1xuICAgKiBUaGlzIHJvdXRlIGlzIHVzZWQgYnkgTmV4dC5qcyB0byBsb2FkIGRhdGEgZnJvbSB0aGUgQVBJIEdhdGV3YXlcbiAgICogb24gYGdldFNlcnZlclNpZGVQcm9wc2AgY2FsbHMuICBUaGUgcmVxdWVzdHMgY2FuIGVuZCBpbiBgLmpzb25gLFxuICAgKiB3aGljaCB3b3VsZCBjYXVzZSB0aGVtIHRvIGJlIHJvdXRlZCB0byBTMyBpZiB0aGlzIHJvdXRlIGlzIG5vdCBjcmVhdGVkLlxuICAgKlxuICAgKiBXaGVuIGZhbHNlIEFQSSByb3V0ZXMgd2l0aCBhIHBlcmlvZCBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gUzMuXG4gICAqXG4gICAqIFdoZW4gdHJ1ZSBBUEkgcm91dGVzIHRoYXQgY29udGFpbiAvX25leHQvZGF0YS8gaW4gdGhlIHBhdGggd2lsbCBnZXQgcm91dGVkIHRvIEFQSSBHYXRld2F5XG4gICAqIGV2ZW4gaWYgdGhleSBoYXZlIGEgcGVyaW9kIGluIHRoZSBwYXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVOZXh0RGF0YVBhdGhSb3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVkZ2UgbGFtYmRhcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQVBJIEdhdGV3YXkgcm91dGVzXG4gICAqL1xuICByZWFkb25seSBlZGdlTGFtYmRhcz86IGNmLkVkZ2VMYW1iZGFbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgTWljcm9BcHBzIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzQ0YgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTWljcm9BcHBzQ0Yge1xuICAvKipcbiAgICogQ3JlYXRlIG9yIGdldCB0aGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5XG4gICAqXG4gICAqIElmIGEgY3VzdG9tIGRvbWFpbiBuYW1lIGlzIE5PVCB1c2VkIGZvciB0aGUgb3JpZ2luIHRoZW4gYSBwb2xpY3lcbiAgICogd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBhIGN1c3RvbSBkb21haW4gbmFtZSBJUyB1c2VkIGZvciB0aGUgb3JpZ2luIHRoZW4gdGhlIEFMTF9WSUVXRVJcbiAgICogcG9saWN5IHdpbGwgYmUgcmV0dXJuZWQuICBUaGlzIHBvbGljeSBwYXNzZXMgdGhlIEhvc3QgaGVhZGVyIHRvIHRoZVxuICAgKiBvcmlnaW4sIHdoaWNoIGlzIGZpbmUgd2hlbiB1c2luZyBhIGN1c3RvbSBkb21haW4gbmFtZSBvbiB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gX3Njb3BlXG4gICAqIEBwYXJhbSBfcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQVBJT3JpZ2luUG9saWN5KFxuICAgIF9zY29wZTogQ29uc3RydWN0LFxuICAgIF9wcm9wczogQ3JlYXRlQVBJT3JpZ2luUG9saWN5T3B0aW9ucyxcbiAgKTogY2YuSU9yaWdpblJlcXVlc3RQb2xpY3kge1xuICAgIC8vIGNvbnN0IHsgYXNzZXROYW1lUm9vdCwgYXNzZXROYW1lU3VmZml4LCBkb21haW5OYW1lRWRnZSB9ID0gcHJvcHM7XG5cbiAgICAvLyBsZXQgYXBpZ3d5T3JpZ2luUmVxdWVzdFBvbGljeTogY2YuSU9yaWdpblJlcXVlc3RQb2xpY3kgPSBjZi5PcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVI7XG4gICAgLy8gaWYgKGRvbWFpbk5hbWVFZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIC8vIFdoZW4gbm90IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHdlIG11c3QgbGltaXQgZG93biB0aGUgb3JpZ2luIHBvbGljeSB0b1xuICAgIC8vICAgLy8gcHJldmVudCBpdCBmcm9tIHBhc3NpbmcgdGhlIEhvc3QgaGVhZGVyIChkaXN0cmlidXRpb25faWQuY2xvdWRmcm9udC5uZXQpIHRvXG4gICAgLy8gICAvLyBhcGlnd3kgd2hpY2ggd2lsbCB0aGVuIHJlamVjdCBpdCB3aXRoIGEgNDAzIGJlY2F1c2UgaXQgZG9lcyBub3QgbWF0Y2ggdGhlXG4gICAgLy8gICAvLyBleGVjdXRlLWFwaSBuYW1lIHRoYXQgYXBpZ3d5IGlzIGV4cGVjdGluZy5cbiAgICAvLyAgIC8vXG4gICAgLy8gICAvLyAyMDIxLTEyLTI4IC0gVGhlcmUgaXMgYSBidWcgaW4gdGhlIG5hbWUgZ2VuZXJhdGlvbiB0aGF0IGNhdXNlcyB0aGUgc2FtZSBhc3NldFxuICAgIC8vICAgLy8gaW4gZGlmZmVyZW50IHN0YWNrcyB0byBoYXZlIHRoZSBzYW1lIGdlbmVyYXRlZCBuYW1lLiAgV2UgaGF2ZSB0byBtYWtlIHRoZSBpZFxuICAgIC8vICAgLy8gaW4gYWxsIGNhc2VzIHRvIGVuc3VyZSB0aGUgZ2VuZXJhdGVkIG5hbWUgaXMgdW5pcXVlLlxuICAgIC8vICAgYXBpZ3d5T3JpZ2luUmVxdWVzdFBvbGljeSA9IG5ldyBjZi5PcmlnaW5SZXF1ZXN0UG9saWN5KFxuICAgIC8vICAgICBzY29wZSxcbiAgICAvLyAgICAgYGFwaWd3eS1vcmlnaW4tcG9saWN5LSR7U3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZX1gLFxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgY29tbWVudDogYXNzZXROYW1lUm9vdCA/IGAke2Fzc2V0TmFtZVJvb3R9LWFwaWd3eSR7YXNzZXROYW1lU3VmZml4fWAgOiB1bmRlZmluZWQsXG5cbiAgICAvLyAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5TmFtZTogYXNzZXROYW1lUm9vdFxuICAgIC8vICAgICAgICAgPyBgJHthc3NldE5hbWVSb290fS1hcGlnd3kke2Fzc2V0TmFtZVN1ZmZpeH1gXG4gICAgLy8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAvLyAgICAgICBjb29raWVCZWhhdmlvcjogY2YuT3JpZ2luUmVxdWVzdENvb2tpZUJlaGF2aW9yLmFsbCgpLFxuICAgIC8vICAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IGNmLk9yaWdpblJlcXVlc3RRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbCgpLFxuICAgIC8vICAgICAgIC8vIFRPRE86IElmIHNpZ25pbmcgaXMgZW5hYmxlZCB0aGlzIHNob3VsZCBmb3J3YXJkIGFsbCBzaWduYXR1cmUgaGVhZGVyc1xuICAgIC8vICAgICAgIC8vIFRPRE86IElmIHNldCB0byBcImNmcm9udC5PcmlnaW5SZXF1ZXN0SGVhZGVyQmVoYXZpb3IuYWxsKClcIiB0aGVuXG4gICAgLy8gICAgICAgLy8gYHJlcGxhY2VIb3N0SGVhZGVyYCBtdXN0IGJlIHNldCB0byB0cnVlIHRvIHByZXZlbnQgQVBJIEdhdGV3YXkgZnJvbSByZWplY3RpbmdcbiAgICAvLyAgICAgICAvLyB0aGUgcmVxdWVzdFxuICAgIC8vICAgICAgIC8vIGhlYWRlckJlaGF2aW9yOiBjZi5PcmlnaW5SZXF1ZXN0SGVhZGVyQmVoYXZpb3IuYWxsb3dMaXN0KCd1c2VyLWFnZW50JywgJ3JlZmVyZXInKSxcbiAgICAvLyAgICAgICBoZWFkZXJCZWhhdmlvcjogY2YuT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLmFsbCgpLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gY2YuT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBBUEkgR2F0ZXdheSBhbmQgUzMgcm91dGVzIHRvIGFuIGV4aXN0aW5nIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uXG4gICAqIEBwYXJhbSBfc2NvcGVcbiAgICogQHBhcmFtIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFkZFJvdXRlcyhfc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFkZFJvdXRlc09wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlHd3lPcmlnaW4sXG4gICAgICBidWNrZXRBcHBzT3JpZ2luLFxuICAgICAgZGlzdHJvLFxuICAgICAgYXBpZ3d5T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHJvb3RQYXRoUHJlZml4ID0gJycsXG4gICAgICBjcmVhdGVBUElQYXRoUm91dGUgPSB0cnVlLFxuICAgICAgY3JlYXRlTmV4dERhdGFQYXRoUm91dGUgPSB0cnVlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIC8vXG4gICAgLy8gQWRkIEJlaGF2aW9yc1xuICAgIC8vXG4gICAgY29uc3QgczNCZWhhdmlvck9wdGlvbnM6IGNmLkFkZEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBjZi5BbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgY2FjaGVQb2xpY3k6IGNmLkNhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBjZi5PcmlnaW5SZXF1ZXN0UG9saWN5LkNPUlNfUzNfT1JJR0lOLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNmLlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgIH07XG4gICAgY29uc3QgYXBpR3d5QmVoYXZpb3JPcHRpb25zOiBjZi5BZGRCZWhhdmlvck9wdGlvbnMgPSB7XG4gICAgICBhbGxvd2VkTWV0aG9kczogY2YuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgLy8gVE9ETzogQ2FjaGluZyBuZWVkcyB0byBiZSBzZXQgYnkgdGhlIGFwcCByZXNwb25zZVxuICAgICAgY2FjaGVQb2xpY3k6IGNmLkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IGFwaWd3eU9yaWdpblJlcXVlc3RQb2xpY3ksXG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2YuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICBlZGdlTGFtYmRhczogcHJvcHMuZWRnZUxhbWJkYXMsXG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gSWYgYSByb3V0ZSBzcGVjaWZpY2FsbHkgaGFzIGAvYXBpL2AgaW4gaXQsIHNlbmQgaXQgdG8gQVBJIEdhdGV3YXlcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBjYXRjaCByb3V0ZXMgdGhhdCBoYXZlIHBlcmlvZHMgaW4gdGhlIEFQSSBwYXRoIGRhdGEsXG4gICAgLy8gc3VjaCBhczogL3JlbGVhc2UvMC4wLjAvYXBpL3VwZGF0ZS9kZWZhdWx0L3JlbGVhc2UvMC4wLjBcbiAgICAvL1xuICAgIGlmIChjcmVhdGVBUElQYXRoUm91dGUpIHtcbiAgICAgIGRpc3Ryby5hZGRCZWhhdmlvcihcbiAgICAgICAgcG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICcqL2FwaS8qJyksXG4gICAgICAgIGFwaUd3eU9yaWdpbixcbiAgICAgICAgYXBpR3d5QmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcblxuICAgICAgZGlzdHJvLmFkZEJlaGF2aW9yKFxuICAgICAgICBwb3NpeFBhdGguam9pbihyb290UGF0aFByZWZpeCwgJ2FwaS8qJyksXG4gICAgICAgIGFwaUd3eU9yaWdpbixcbiAgICAgICAgYXBpR3d5QmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIElmIGEgcm91dGUgc3BlY2lmaWNhbGx5IGhhcyBgL19uZXh0L2RhdGEvYCBpbiBpdCwgc2VuZCBpdCB0byBBUEkgR2F0ZXdheVxuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNhdGNoIHJvdXRlcyB0aGF0IGhhdmUgcGVyaW9kcyBpbiB0aGUgQVBJIHBhdGggZGF0YSxcbiAgICAvLyBzdWNoIGFzOiAvcmVsZWFzZS8wLjAuMC9fbmV4dC9kYXRhL2FwcC5qc29uXG4gICAgLy9cbiAgICBpZiAoY3JlYXRlTmV4dERhdGFQYXRoUm91dGUpIHtcbiAgICAgIGRpc3Ryby5hZGRCZWhhdmlvcihcbiAgICAgICAgLy8gTm90ZTogc2VuZCBhbnl0aGluZyB3aXRoIF9uZXh0L2RhdGEgYWZ0ZXIgdGhlIGFwcE5hbWUgKGFuZCBvcHRpb25hbCB2ZXJzaW9uKVxuICAgICAgICAvLyB0byB0aGUgYXBwIG9yaWdpbiBhcyBpZnJhbWUtbGVzcyB3aWxsIGhhdmUgbm8gdmVyc2lvbiBiZWZvcmUgX25leHQvZGF0YVxuICAgICAgICAvLyBpbiB0aGUgcGF0aFxuICAgICAgICBwb3NpeFBhdGguam9pbihyb290UGF0aFByZWZpeCwgJyovX25leHQvZGF0YS8qJyksXG4gICAgICAgIGFwaUd3eU9yaWdpbixcbiAgICAgICAgYXBpR3d5QmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcblxuICAgICAgZGlzdHJvLmFkZEJlaGF2aW9yKFxuICAgICAgICAvLyBOb3RlOiBzZW5kIGFueXRoaW5nIHdpdGggX25leHQvZGF0YSBhZnRlciB0aGUgYXBwTmFtZSAoYW5kIG9wdGlvbmFsIHZlcnNpb24pXG4gICAgICAgIC8vIHRvIHRoZSBhcHAgb3JpZ2luIGFzIGlmcmFtZS1sZXNzIHdpbGwgaGF2ZSBubyB2ZXJzaW9uIGJlZm9yZSBfbmV4dC9kYXRhXG4gICAgICAgIC8vIGluIHRoZSBwYXRoXG4gICAgICAgIHBvc2l4UGF0aC5qb2luKHJvb3RQYXRoUHJlZml4LCAnX25leHQvZGF0YS8qJyksXG4gICAgICAgIGFwaUd3eU9yaWdpbixcbiAgICAgICAgYXBpR3d5QmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIEFsbCBzdGF0aWMgYXNzZXRzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBkb3QgaW4gdGhlbVxuICAgIC8vXG4gICAgZGlzdHJvLmFkZEJlaGF2aW9yKFxuICAgICAgcG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICcvKi8qLyouKicpLFxuICAgICAgYnVja2V0QXBwc09yaWdpbixcbiAgICAgIHMzQmVoYXZpb3JPcHRpb25zLFxuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIFJvb3QgYXBwIHN0YXRpYyByZXNvdXJjZXNcbiAgICAvL1xuICAgIGRpc3Ryby5hZGRCZWhhdmlvcihcbiAgICAgIHBvc2l4UGF0aC5qb2luKHJvb3RQYXRoUHJlZml4LCAnLyouKi4qLyouKicpLFxuICAgICAgYnVja2V0QXBwc09yaWdpbixcbiAgICAgIHMzQmVoYXZpb3JPcHRpb25zLFxuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIEV2ZXJ5dGhpbmcgdGhhdCBpc24ndCBhIHN0YXRpYyBhc3NldCBpcyBnb2luZyB0byBBUEkgR2F0ZXdheVxuICAgIC8vIFRoZXJlIGlzIG5vIHRyYWlsaW5nIHNsYXNoIGJlY2F1c2UgU2VydmVybGVzcyBOZXh0LmpzIHdhbnRzXG4gICAgLy8gZ28gbG9hZCBwYWdlcyBhdCAvcmVsZWFzZS8wLjAuMyAod2l0aCBubyB0cmFpbGluZyBzbGFzaCkuXG4gICAgLy9cbiAgICBkaXN0cm8uYWRkQmVoYXZpb3IocG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICcvKicpLCBhcGlHd3lPcmlnaW4sIGFwaUd3eUJlaGF2aW9yT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIF9jbG91ZEZyb250RGlzdHJvOiBjZi5EaXN0cmlidXRpb247XG4gIHB1YmxpYyBnZXQgY2xvdWRGcm9udERpc3RybygpOiBjZi5EaXN0cmlidXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9jbG91ZEZyb250RGlzdHJvO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1pY3JvQXBwc0NGUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMucjUzWm9uZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLmRvbWFpbk5hbWVFZGdlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMucjUzWm9uZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRvbWFpbk5hbWVFZGdlID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIGVpdGhlciBvZiByNTNab25lIG9yIGRvbWFpbk5hbWVFZGdlIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBodHRwQXBpLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIGNlcnRFZGdlLFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIHI1M1pvbmUsXG4gICAgICBidWNrZXRMb2dzLFxuICAgICAgYnVja2V0QXBwc09yaWdpbixcbiAgICAgIHJvb3RQYXRoUHJlZml4LFxuICAgICAgY3JlYXRlQVBJUGF0aFJvdXRlID0gdHJ1ZSxcbiAgICAgIGNyZWF0ZU5leHREYXRhUGF0aFJvdXRlID0gdHJ1ZSxcbiAgICAgIGVkZ2VMYW1iZGFzLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IGFwaWd3eU9yaWdpblJlcXVlc3RQb2xpY3kgPSBNaWNyb0FwcHNDRi5jcmVhdGVBUElPcmlnaW5Qb2xpY3kodGhpcywge1xuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBEZXRlcm1pbmUgVVJMIG9mIHRoZSBvcmlnaW4gRlFETlxuICAgIC8vXG4gICAgbGV0IGh0dHBPcmlnaW5GUUROOiBzdHJpbmcgPSAnaW52YWxpZC5wd3JkcnZyLmNvbSc7XG4gICAgaWYgKGRvbWFpbk5hbWVPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaHR0cE9yaWdpbkZRRE4gPSBkb21haW5OYW1lT3JpZ2luO1xuICAgIH0gZWxzZSB7XG4gICAgICBodHRwT3JpZ2luRlFETiA9IGAke2h0dHBBcGkuYXBpSWR9LmV4ZWN1dGUtYXBpLiR7QXdzLlJFR0lPTn0uYW1hem9uYXdzLmNvbWA7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBHZXQgdGhlIEVkZ2UgdG8gT3JpZ2luIExhbWJkYXNcbiAgICAvL1xuXG4gICAgLy9cbiAgICAvLyBDbG91ZEZyb250IERpc3Ryb1xuICAgIC8vXG4gICAgY29uc3QgYXBpR3d5T3JpZ2luID0gbmV3IGNmb3JpZ2lucy5IdHRwT3JpZ2luKGh0dHBPcmlnaW5GUUROLCB7XG4gICAgICBwcm90b2NvbFBvbGljeTogY2YuT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWSxcbiAgICAgIG9yaWdpblNzbFByb3RvY29sczogW2NmLk9yaWdpblNzbFBvbGljeS5UTFNfVjFfMl0sXG4gICAgfSk7XG4gICAgdGhpcy5fY2xvdWRGcm9udERpc3RybyA9IG5ldyBjZi5EaXN0cmlidXRpb24odGhpcywgJ2NmdCcsIHtcbiAgICAgIGNvbW1lbnQ6IGFzc2V0TmFtZVJvb3QgPyBgJHthc3NldE5hbWVSb290fSR7YXNzZXROYW1lU3VmZml4fWAgOiBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVzOiBkb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkID8gW2RvbWFpbk5hbWVFZGdlXSA6IHVuZGVmaW5lZCxcbiAgICAgIGNlcnRpZmljYXRlOiBjZXJ0RWRnZSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjZi5IdHRwVmVyc2lvbi5IVFRQMixcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBhbGxvd2VkTWV0aG9kczogY2YuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICBjYWNoZVBvbGljeTogY2YuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IGFwaWd3eU9yaWdpblJlcXVlc3RQb2xpY3ksXG4gICAgICAgIG9yaWdpbjogYXBpR3d5T3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2YuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGVkZ2VMYW1iZGFzLFxuICAgICAgfSxcbiAgICAgIGVuYWJsZUlwdjY6IHRydWUsXG4gICAgICBwcmljZUNsYXNzOiBjZi5QcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGxvZ0J1Y2tldDogYnVja2V0TG9ncyxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IHByb3BzLmRvbWFpbk5hbWVFZGdlXG4gICAgICAgID8gYCR7cmV2ZXJzZURvbWFpbihwcm9wcy5kb21haW5OYW1lRWRnZSl9L2Nsb3VkZnJvbnQtcmF3L2BcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2xvdWRGcm9udERpc3Ryby5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJvdXRlcyB0byB0aGUgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25cbiAgICBNaWNyb0FwcHNDRi5hZGRSb3V0ZXMoc2NvcGUsIHtcbiAgICAgIGFwaUd3eU9yaWdpbixcbiAgICAgIGJ1Y2tldEFwcHNPcmlnaW4sXG4gICAgICBkaXN0cm86IHRoaXMuX2Nsb3VkRnJvbnREaXN0cm8sXG4gICAgICBhcGlnd3lPcmlnaW5SZXF1ZXN0UG9saWN5OiBhcGlnd3lPcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgICBjcmVhdGVBUElQYXRoUm91dGUsXG4gICAgICBjcmVhdGVOZXh0RGF0YVBhdGhSb3V0ZSxcbiAgICAgIGVkZ2VMYW1iZGFzLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIGVkZ2UgbmFtZSBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJvXG4gICAgLy9cblxuICAgIGlmIChyNTNab25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJyQXBwc0VkZ2UgPSBuZXcgcjUzLlJlY29yZFNldCh0aGlzLCAnZWRnZS1hcmVjb3JkJywge1xuICAgICAgICByZWNvcmROYW1lOiBkb21haW5OYW1lRWRnZSxcbiAgICAgICAgcmVjb3JkVHlwZTogcjUzLlJlY29yZFR5cGUuQSxcbiAgICAgICAgdGFyZ2V0OiByNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgcjUzdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nsb3VkRnJvbnREaXN0cm8pKSxcbiAgICAgICAgem9uZTogcjUzWm9uZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByckFwcHNFZGdlLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
225
|
+
MicroAppsCF[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsCF", version: "0.3.4" };
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQ0YuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWljcm9BcHBzQ0YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBMEM7QUFFMUMsNkNBQWlEO0FBRWpELGlEQUFpRDtBQUNqRCxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLDhEQUE4RDtBQUU5RCwyQ0FBdUM7QUFDdkMseURBQXNEO0FBc090RDs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBcUt4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztZQUNuRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLEVBQ25FO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsTUFBTSxFQUNKLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixRQUFRLEVBQ1IsYUFBYSxFQUNiLGVBQWUsRUFDZixPQUFPLEVBQ1AsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixjQUFjLEVBQ2Qsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQ3BDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUN6QyxXQUFXLEVBQ1gsa0JBQWtCLEdBQ25CLEdBQUcsS0FBSyxDQUFDO1FBRVYsTUFBTSxzQkFBc0IsR0FBRyxXQUFX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RTtRQUNGLElBQUksdUJBQXVCLEVBQUU7WUFDM0IsTUFBTSxDQUFDLFdBQVc7WUFDaEIsK0VBQStFO1lBQy9FLDBFQUEwRTtZQUMxRSxjQUFjO1lBQ2QsWUFBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsRUFDaEQsYUFBYSxFQUNiLGtCQUFrQixDQUNuQixDQUFDO1lBRUYsTUFBTSxDQUFDLFdBQVc7WUFDaEIsK0VBQStFO1lBQy9FLDBFQUEwRTtZQUMxRSxjQUFjO1lBQ2QsWUFBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEVBQzlDLGFBQWEsRUFDYixrQkFBa0IsQ0FDbkIsQ0FBQztTQUNIO1FBRUQsRUFBRTtRQUNGLHNEQUFzRDtRQUN0RCxFQUFFO1FBQ0YsTUFBTSxDQUFDLFdBQVcsQ0FDaEIsWUFBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLEVBQzFDLGdCQUFnQixFQUNoQixpQkFBaUIsQ0FDbEIsQ0FBQztRQUVGLEVBQUU7UUFDRiw0QkFBNEI7UUFDNUIsRUFBRTtRQUNGLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLFlBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUM1QyxnQkFBZ0IsRUFDaEIsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixFQUFFO1FBQ0YsK0RBQStEO1FBQy9ELDhEQUE4RDtRQUM5RCw0REFBNEQ7UUFDNUQsRUFBRTtRQUNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUdELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7O0FBbktILGtDQXdSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBvc2l4IGFzIHBvc2l4UGF0aCB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgYXBpZ3d5IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djItYWxwaGEnO1xuaW1wb3J0IHsgQXdzLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgY2YgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgY2ZvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgcjUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCAqIGFzIHI1M3RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyByZXZlcnNlRG9tYWluIH0gZnJvbSAnLi91dGlscy9SZXZlcnNlRG9tYWluJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgTWljcm9BcHBzIENsb3VkRnJvbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWljcm9BcHBzQ0Yge1xuICAvKipcbiAgICogVGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZyb250RGlzdHJvOiBjZi5EaXN0cmlidXRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIGBNaWNyb0FwcHNDRmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9BcHBzQ0ZQcm9wcyB7XG4gIC8qKlxuICAgKiBSZW1vdmFsUG9saWN5IG92ZXJyaWRlIGZvciBjaGlsZCByZXNvdXJjZXNcbiAgICpcbiAgICogTm90ZTogaWYgc2V0IHRvIERFU1RST1kgdGhlIFMzIGJ1Y2tlcyB3aWxsIGhhdmUgYGF1dG9EZWxldGVPYmplY3RzYCBzZXQgdG8gYHRydWVgXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVyIHJlc291cmNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBTMyBidWNrZXQgb3JpZ2luIGZvciBkZXBsb3llZCBhcHBsaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFwcHNPcmlnaW46IGNmb3JpZ2lucy5TM09yaWdpbjtcblxuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBDbG91ZEZyb250IGxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldExvZ3M/OiBzMy5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBkb21haW4gbmFtZVxuICAgKlxuICAgKiBAZXhhbXBsZSBhcHBzLnB3cmRydnIuY29tXG4gICAqIEBkZWZhdWx0IGF1dG8tYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVFZGdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBjdXN0b20gb3JpZ2luIGRvbWFpbiBuYW1lXG4gICAqXG4gICAqIEBleGFtcGxlIGFwcHMucHdyZHJ2ci5jb21cbiAgICogQGRlZmF1bHQgLSByZXRyaWV2ZWQgZnJvbSBodHRwQXBpLCBpZiBwb3NzaWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZU9yaWdpbj86IHN0cmluZztcblxuICAvKipcbiAgICogQVBJIEdhdGV3YXkgdjIgSFRUUCBBUEkgZm9yIGFwcHNcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBBcGk/OiBhcGlnd3kuSHR0cEFwaTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYXNzZXQgbmFtZSByb290XG4gICAqXG4gICAqIEBleGFtcGxlIG1pY3JvYXBwc1xuICAgKiBAZGVmYXVsdCAtIHJlc291cmNlIG5hbWVzIGF1dG8gYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgc3VmZml4XG4gICAqXG4gICAqIEBleGFtcGxlIC1kZXYtcHItMTJcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBQ00gQ2VydGlmaWNhdGUgdGhhdCBjb3ZlcnMgYGRvbWFpbk5hbWVFZGdlYCBuYW1lXG4gICAqL1xuICByZWFkb25seSBjZXJ0RWRnZT86IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgLyoqXG4gICAqIFJvdXRlNTMgem9uZSBpbiB3aGljaCB0byBjcmVhdGUgb3B0aW9uYWwgYGRvbWFpbk5hbWVFZGdlYCByZWNvcmRcbiAgICovXG4gIHJlYWRvbmx5IHI1M1pvbmU/OiByNTMuSUhvc3RlZFpvbmU7XG5cbiAgLyoqXG4gICAqIFBhdGggcHJlZml4IG9uIHRoZSByb290IG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBAZXhhbXBsZSBkZXYvXG4gICAqL1xuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4dHJhIEJlaGF2aW9yIChSb3V0ZSkgZm9yIC9hcGkvIHRoYXQgYWxsb3dzXG4gICAqIEFQSSByb3V0ZXMgdG8gaGF2ZSBhIHBlcmlvZCBpbiB0aGVtLlxuICAgKlxuICAgKiBXaGVuIGZhbHNlIEFQSSByb3V0ZXMgd2l0aCBhIHBlcmlvZCBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gUzMuXG4gICAqXG4gICAqIFdoZW4gdHJ1ZSBBUEkgcm91dGVzIHRoYXQgY29udGFpbiAvYXBpLyBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gQVBJIEdhdGV3YXlcbiAgICogZXZlbiBpZiB0aGV5IGhhdmUgYSBwZXJpb2QgaW4gdGhlIHBhdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUgaWYgaHR0cEFwaSBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlQVBJUGF0aFJvdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4dHJhIEJlaGF2aW9yIChSb3V0ZSkgZm9yIC9fbmV4dC9kYXRhL1xuICAgKiBUaGlzIHJvdXRlIGlzIHVzZWQgYnkgTmV4dC5qcyB0byBsb2FkIGRhdGEgZnJvbSB0aGUgQVBJIEdhdGV3YXlcbiAgICogb24gYGdldFNlcnZlclNpZGVQcm9wc2AgY2FsbHMuICBUaGUgcmVxdWVzdHMgY2FuIGVuZCBpbiBgLmpzb25gLFxuICAgKiB3aGljaCB3b3VsZCBjYXVzZSB0aGVtIHRvIGJlIHJvdXRlZCB0byBTMyBpZiB0aGlzIHJvdXRlIGlzIG5vdCBjcmVhdGVkLlxuICAgKlxuICAgKiBXaGVuIGZhbHNlIEFQSSByb3V0ZXMgd2l0aCBhIHBlcmlvZCBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gUzMuXG4gICAqXG4gICAqIFdoZW4gdHJ1ZSBBUEkgcm91dGVzIHRoYXQgY29udGFpbiAvX25leHQvZGF0YS8gaW4gdGhlIHBhdGggd2lsbCBnZXQgcm91dGVkIHRvIEFQSSBHYXRld2F5XG4gICAqIGV2ZW4gaWYgdGhleSBoYXZlIGEgcGVyaW9kIGluIHRoZSBwYXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIGlmIGh0dHBBcGkgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZU5leHREYXRhUGF0aFJvdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvZiB0aGUgZWRnZSB0byBvcmlnaW4gbGFtYmRhIGZ1bmN0aW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVkZ2UgdG8gQVBJIEdhdGV3YXkgb3JpZ2luIGZ1bmN0aW9ucyBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZWRnZUxhbWJkYXM/OiBjZi5FZGdlTGFtYmRhW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIE9yaWdpbiBTaGllbGQgUmVnaW9uXG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGJlIHRoZSByZWdpb24gd2hlcmUgdGhlIER5bmFtb0RCIGlzIGxvY2F0ZWQgc28gdGhlXG4gICAqIEVkZ2VUb09yaWdpbiBjYWxscyBoYXZlIHRoZSBsb3dlc3QgbGF0ZW5jeSAofjEgbXMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblNoaWVsZFJlZ2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgYENyZWF0ZUFQSU9yaWdpblBvbGljeWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBUElPcmlnaW5Qb2xpY3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgcm9vdFxuICAgKlxuICAgKiBAZXhhbXBsZSBtaWNyb2FwcHNcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBuYW1lcyBhdXRvIGFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhc3NldCBuYW1lIHN1ZmZpeFxuICAgKlxuICAgKiBAZXhhbXBsZSAtZGV2LXByLTEyXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogRWRnZSBkb21haW4gbmFtZSB1c2VkIGJ5IENsb3VkRnJvbnQgLSBJZiBzZXQgYSBjdXN0b21cbiAgICogT3JpZ2luUmVxdWVzdFBvbGljeSB3aWxsIGJlIGNyZWF0ZWQgdGhhdCBwcmV2ZW50c1xuICAgKiB0aGUgSG9zdCBoZWFkZXIgZnJvbSBiZWluZyBwYXNzZWQgdG8gdGhlIG9yaWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVFZGdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBBZGRSb3V0ZXNgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUm91dGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IG9yaWdpbiAoaW52YWxpZCBVUkwgb3IgQVBJIEdhdGV3YXkpXG4gICAqXG4gICAqIEBkZWZhdWx0IGludmFsaWQgVVJMIChuZXZlciB1c2VkKVxuICAgKi9cbiAgcmVhZG9ubHkgYXBwT3JpZ2luOiBjZi5JT3JpZ2luO1xuXG4gIC8qKlxuICAgKiBTMyBCdWNrZXQgQ2xvdWRGcm9udCBPcmlnaW4gZm9yIHN0YXRpYyBhc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFwcHNPcmlnaW46IGNmb3JpZ2lucy5TM09yaWdpbjtcblxuICAvKipcbiAgICogQ2xvdWRGcm9udCBEaXN0cmlidXRpb24gdG8gYWRkIHRoZSBCZWhhdmlvcnMgKFJvdXRlcykgdG9cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RybzogY2YuRGlzdHJpYnV0aW9uO1xuXG4gIC8qKlxuICAgKiBPcmlnaW4gUmVxdWVzdCBwb2xpY3kgZm9yIEFQSSBHYXRld2F5IE9yaWdpblxuICAgKi9cbiAgcmVhZG9ubHkgYXBwT3JpZ2luUmVxdWVzdFBvbGljeTogY2YuSU9yaWdpblJlcXVlc3RQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFBhdGggcHJlZml4IG9uIHRoZSByb290IG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBAZXhhbXBsZSBkZXYvXG4gICAqL1xuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4dHJhIEJlaGF2aW9yIChSb3V0ZSkgZm9yIC9hcGkvIHRoYXQgYWxsb3dzXG4gICAqIEFQSSByb3V0ZXMgdG8gaGF2ZSBhIHBlcmlvZCBpbiB0aGVtLlxuICAgKlxuICAgKiBXaGVuIGZhbHNlIEFQSSByb3V0ZXMgd2l0aCBhIHBlcmlvZCBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gUzMuXG4gICAqXG4gICAqIFdoZW4gdHJ1ZSBBUEkgcm91dGVzIHRoYXQgY29udGFpbiAvYXBpLyBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gQVBJIEdhdGV3YXlcbiAgICogZXZlbiBpZiB0aGV5IGhhdmUgYSBwZXJpb2QgaW4gdGhlIHBhdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVBUElQYXRoUm91dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXh0cmEgQmVoYXZpb3IgKFJvdXRlKSBmb3IgL19uZXh0L2RhdGEvXG4gICAqIFRoaXMgcm91dGUgaXMgdXNlZCBieSBOZXh0LmpzIHRvIGxvYWQgZGF0YSBmcm9tIHRoZSBBUEkgR2F0ZXdheVxuICAgKiBvbiBgZ2V0U2VydmVyU2lkZVByb3BzYCBjYWxscy4gIFRoZSByZXF1ZXN0cyBjYW4gZW5kIGluIGAuanNvbmAsXG4gICAqIHdoaWNoIHdvdWxkIGNhdXNlIHRoZW0gdG8gYmUgcm91dGVkIHRvIFMzIGlmIHRoaXMgcm91dGUgaXMgbm90IGNyZWF0ZWQuXG4gICAqXG4gICAqIFdoZW4gZmFsc2UgQVBJIHJvdXRlcyB3aXRoIGEgcGVyaW9kIGluIHRoZSBwYXRoIHdpbGwgZ2V0IHJvdXRlZCB0byBTMy5cbiAgICpcbiAgICogV2hlbiB0cnVlIEFQSSByb3V0ZXMgdGhhdCBjb250YWluIC9fbmV4dC9kYXRhLyBpbiB0aGUgcGF0aCB3aWxsIGdldCByb3V0ZWQgdG8gQVBJIEdhdGV3YXlcbiAgICogZXZlbiBpZiB0aGV5IGhhdmUgYSBwZXJpb2QgaW4gdGhlIHBhdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVOZXh0RGF0YVBhdGhSb3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVkZ2UgbGFtYmRhcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQVBJIEdhdGV3YXkgcm91dGVzXG4gICAqL1xuICByZWFkb25seSBlZGdlTGFtYmRhcz86IGNmLkVkZ2VMYW1iZGFbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgTWljcm9BcHBzIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzQ0YgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTWljcm9BcHBzQ0Yge1xuICAvKipcbiAgICogQ3JlYXRlIG9yIGdldCB0aGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5XG4gICAqXG4gICAqIElmIGEgY3VzdG9tIGRvbWFpbiBuYW1lIGlzIE5PVCB1c2VkIGZvciB0aGUgb3JpZ2luIHRoZW4gYSBwb2xpY3lcbiAgICogd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBhIGN1c3RvbSBkb21haW4gbmFtZSBJUyB1c2VkIGZvciB0aGUgb3JpZ2luIHRoZW4gdGhlIEFMTF9WSUVXRVJcbiAgICogcG9saWN5IHdpbGwgYmUgcmV0dXJuZWQuICBUaGlzIHBvbGljeSBwYXNzZXMgdGhlIEhvc3QgaGVhZGVyIHRvIHRoZVxuICAgKiBvcmlnaW4sIHdoaWNoIGlzIGZpbmUgd2hlbiB1c2luZyBhIGN1c3RvbSBkb21haW4gbmFtZSBvbiB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gX3Njb3BlXG4gICAqIEBwYXJhbSBfcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQVBJT3JpZ2luUG9saWN5KFxuICAgIF9zY29wZTogQ29uc3RydWN0LFxuICAgIF9wcm9wczogQ3JlYXRlQVBJT3JpZ2luUG9saWN5T3B0aW9ucyxcbiAgKTogY2YuSU9yaWdpblJlcXVlc3RQb2xpY3kge1xuICAgIC8vIGNvbnN0IHsgYXNzZXROYW1lUm9vdCwgYXNzZXROYW1lU3VmZml4LCBkb21haW5OYW1lRWRnZSB9ID0gcHJvcHM7XG5cbiAgICAvLyBsZXQgYXBpZ3d5T3JpZ2luUmVxdWVzdFBvbGljeTogY2YuSU9yaWdpblJlcXVlc3RQb2xpY3kgPSBjZi5PcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVI7XG4gICAgLy8gaWYgKGRvbWFpbk5hbWVFZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIC8vIFdoZW4gbm90IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHdlIG11c3QgbGltaXQgZG93biB0aGUgb3JpZ2luIHBvbGljeSB0b1xuICAgIC8vICAgLy8gcHJldmVudCBpdCBmcm9tIHBhc3NpbmcgdGhlIEhvc3QgaGVhZGVyIChkaXN0cmlidXRpb25faWQuY2xvdWRmcm9udC5uZXQpIHRvXG4gICAgLy8gICAvLyBhcGlnd3kgd2hpY2ggd2lsbCB0aGVuIHJlamVjdCBpdCB3aXRoIGEgNDAzIGJlY2F1c2UgaXQgZG9lcyBub3QgbWF0Y2ggdGhlXG4gICAgLy8gICAvLyBleGVjdXRlLWFwaSBuYW1lIHRoYXQgYXBpZ3d5IGlzIGV4cGVjdGluZy5cbiAgICAvLyAgIC8vXG4gICAgLy8gICAvLyAyMDIxLTEyLTI4IC0gVGhlcmUgaXMgYSBidWcgaW4gdGhlIG5hbWUgZ2VuZXJhdGlvbiB0aGF0IGNhdXNlcyB0aGUgc2FtZSBhc3NldFxuICAgIC8vICAgLy8gaW4gZGlmZmVyZW50IHN0YWNrcyB0byBoYXZlIHRoZSBzYW1lIGdlbmVyYXRlZCBuYW1lLiAgV2UgaGF2ZSB0byBtYWtlIHRoZSBpZFxuICAgIC8vICAgLy8gaW4gYWxsIGNhc2VzIHRvIGVuc3VyZSB0aGUgZ2VuZXJhdGVkIG5hbWUgaXMgdW5pcXVlLlxuICAgIC8vICAgYXBpZ3d5T3JpZ2luUmVxdWVzdFBvbGljeSA9IG5ldyBjZi5PcmlnaW5SZXF1ZXN0UG9saWN5KFxuICAgIC8vICAgICBzY29wZSxcbiAgICAvLyAgICAgYGFwaWd3eS1vcmlnaW4tcG9saWN5LSR7U3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZX1gLFxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgY29tbWVudDogYXNzZXROYW1lUm9vdCA/IGAke2Fzc2V0TmFtZVJvb3R9LWFwaWd3eSR7YXNzZXROYW1lU3VmZml4fWAgOiB1bmRlZmluZWQsXG5cbiAgICAvLyAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5TmFtZTogYXNzZXROYW1lUm9vdFxuICAgIC8vICAgICAgICAgPyBgJHthc3NldE5hbWVSb290fS1hcGlnd3kke2Fzc2V0TmFtZVN1ZmZpeH1gXG4gICAgLy8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAvLyAgICAgICBjb29raWVCZWhhdmlvcjogY2YuT3JpZ2luUmVxdWVzdENvb2tpZUJlaGF2aW9yLmFsbCgpLFxuICAgIC8vICAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IGNmLk9yaWdpblJlcXVlc3RRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbCgpLFxuICAgIC8vICAgICAgIC8vIFRPRE86IElmIHNpZ25pbmcgaXMgZW5hYmxlZCB0aGlzIHNob3VsZCBmb3J3YXJkIGFsbCBzaWduYXR1cmUgaGVhZGVyc1xuICAgIC8vICAgICAgIC8vIFRPRE86IElmIHNldCB0byBcImNmcm9udC5PcmlnaW5SZXF1ZXN0SGVhZGVyQmVoYXZpb3IuYWxsKClcIiB0aGVuXG4gICAgLy8gICAgICAgLy8gYHJlcGxhY2VIb3N0SGVhZGVyYCBtdXN0IGJlIHNldCB0byB0cnVlIHRvIHByZXZlbnQgQVBJIEdhdGV3YXkgZnJvbSByZWplY3RpbmdcbiAgICAvLyAgICAgICAvLyB0aGUgcmVxdWVzdFxuICAgIC8vICAgICAgIC8vIGhlYWRlckJlaGF2aW9yOiBjZi5PcmlnaW5SZXF1ZXN0SGVhZGVyQmVoYXZpb3IuYWxsb3dMaXN0KCd1c2VyLWFnZW50JywgJ3JlZmVyZXInKSxcbiAgICAvLyAgICAgICBoZWFkZXJCZWhhdmlvcjogY2YuT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLmFsbCgpLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gY2YuT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBBUEkgR2F0ZXdheSBhbmQgUzMgcm91dGVzIHRvIGFuIGV4aXN0aW5nIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uXG4gICAqIEBwYXJhbSBfc2NvcGVcbiAgICogQHBhcmFtIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFkZFJvdXRlcyhfc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFkZFJvdXRlc09wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcHBPcmlnaW46IGRlZmF1bHRPcmlnaW4sXG4gICAgICBidWNrZXRBcHBzT3JpZ2luLFxuICAgICAgZGlzdHJvLFxuICAgICAgYXBwT3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHJvb3RQYXRoUHJlZml4ID0gJycsXG4gICAgICBjcmVhdGVBUElQYXRoUm91dGUgPSBmYWxzZSxcbiAgICAgIGNyZWF0ZU5leHREYXRhUGF0aFJvdXRlID0gZmFsc2UsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy9cbiAgICAvLyBBZGQgQmVoYXZpb3JzXG4gICAgLy9cbiAgICBjb25zdCBzM0JlaGF2aW9yT3B0aW9uczogY2YuQWRkQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgYWxsb3dlZE1ldGhvZHM6IGNmLkFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICBjYWNoZVBvbGljeTogY2YuQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQsXG4gICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IGNmLk9yaWdpblJlcXVlc3RQb2xpY3kuQ09SU19TM19PUklHSU4sXG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2YuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgfTtcbiAgICBjb25zdCBhcHBCZWhhdmlvck9wdGlvbnM6IGNmLkFkZEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBjZi5BbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAvLyBUT0RPOiBDYWNoaW5nIG5lZWRzIHRvIGJlIHNldCBieSB0aGUgYXBwIHJlc3BvbnNlXG4gICAgICBjYWNoZVBvbGljeTogY2YuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogYXBwT3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjZi5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIGVkZ2VMYW1iZGFzOiBwcm9wcy5lZGdlTGFtYmRhcyxcbiAgICB9O1xuXG4gICAgLy9cbiAgICAvLyBJZiBhIHJvdXRlIHNwZWNpZmljYWxseSBoYXMgYC9hcGkvYCBpbiBpdCwgc2VuZCBpdCB0byBBUEkgR2F0ZXdheVxuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNhdGNoIHJvdXRlcyB0aGF0IGhhdmUgcGVyaW9kcyBpbiB0aGUgQVBJIHBhdGggZGF0YSxcbiAgICAvLyBzdWNoIGFzOiAvcmVsZWFzZS8wLjAuMC9hcGkvdXBkYXRlL2RlZmF1bHQvcmVsZWFzZS8wLjAuMFxuICAgIC8vXG4gICAgaWYgKGNyZWF0ZUFQSVBhdGhSb3V0ZSkge1xuICAgICAgZGlzdHJvLmFkZEJlaGF2aW9yKFxuICAgICAgICBwb3NpeFBhdGguam9pbihyb290UGF0aFByZWZpeCwgJyovYXBpLyonKSxcbiAgICAgICAgZGVmYXVsdE9yaWdpbixcbiAgICAgICAgYXBwQmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcblxuICAgICAgZGlzdHJvLmFkZEJlaGF2aW9yKFxuICAgICAgICBwb3NpeFBhdGguam9pbihyb290UGF0aFByZWZpeCwgJ2FwaS8qJyksXG4gICAgICAgIGRlZmF1bHRPcmlnaW4sXG4gICAgICAgIGFwcEJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBJZiBhIHJvdXRlIHNwZWNpZmljYWxseSBoYXMgYC9fbmV4dC9kYXRhL2AgaW4gaXQsIHNlbmQgaXQgdG8gQVBJIEdhdGV3YXlcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBjYXRjaCByb3V0ZXMgdGhhdCBoYXZlIHBlcmlvZHMgaW4gdGhlIEFQSSBwYXRoIGRhdGEsXG4gICAgLy8gc3VjaCBhczogL3JlbGVhc2UvMC4wLjAvX25leHQvZGF0YS9hcHAuanNvblxuICAgIC8vXG4gICAgaWYgKGNyZWF0ZU5leHREYXRhUGF0aFJvdXRlKSB7XG4gICAgICBkaXN0cm8uYWRkQmVoYXZpb3IoXG4gICAgICAgIC8vIE5vdGU6IHNlbmQgYW55dGhpbmcgd2l0aCBfbmV4dC9kYXRhIGFmdGVyIHRoZSBhcHBOYW1lIChhbmQgb3B0aW9uYWwgdmVyc2lvbilcbiAgICAgICAgLy8gdG8gdGhlIGFwcCBvcmlnaW4gYXMgaWZyYW1lLWxlc3Mgd2lsbCBoYXZlIG5vIHZlcnNpb24gYmVmb3JlIF9uZXh0L2RhdGFcbiAgICAgICAgLy8gaW4gdGhlIHBhdGhcbiAgICAgICAgcG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICcqL19uZXh0L2RhdGEvKicpLFxuICAgICAgICBkZWZhdWx0T3JpZ2luLFxuICAgICAgICBhcHBCZWhhdmlvck9wdGlvbnMsXG4gICAgICApO1xuXG4gICAgICBkaXN0cm8uYWRkQmVoYXZpb3IoXG4gICAgICAgIC8vIE5vdGU6IHNlbmQgYW55dGhpbmcgd2l0aCBfbmV4dC9kYXRhIGFmdGVyIHRoZSBhcHBOYW1lIChhbmQgb3B0aW9uYWwgdmVyc2lvbilcbiAgICAgICAgLy8gdG8gdGhlIGFwcCBvcmlnaW4gYXMgaWZyYW1lLWxlc3Mgd2lsbCBoYXZlIG5vIHZlcnNpb24gYmVmb3JlIF9uZXh0L2RhdGFcbiAgICAgICAgLy8gaW4gdGhlIHBhdGhcbiAgICAgICAgcG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICdfbmV4dC9kYXRhLyonKSxcbiAgICAgICAgZGVmYXVsdE9yaWdpbixcbiAgICAgICAgYXBwQmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIEFsbCBzdGF0aWMgYXNzZXRzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBkb3QgaW4gdGhlbVxuICAgIC8vXG4gICAgZGlzdHJvLmFkZEJlaGF2aW9yKFxuICAgICAgcG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICcvKi8qLyouKicpLFxuICAgICAgYnVja2V0QXBwc09yaWdpbixcbiAgICAgIHMzQmVoYXZpb3JPcHRpb25zLFxuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIFJvb3QgYXBwIHN0YXRpYyByZXNvdXJjZXNcbiAgICAvL1xuICAgIGRpc3Ryby5hZGRCZWhhdmlvcihcbiAgICAgIHBvc2l4UGF0aC5qb2luKHJvb3RQYXRoUHJlZml4LCAnLyouKi4qLyouKicpLFxuICAgICAgYnVja2V0QXBwc09yaWdpbixcbiAgICAgIHMzQmVoYXZpb3JPcHRpb25zLFxuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIEV2ZXJ5dGhpbmcgdGhhdCBpc24ndCBhIHN0YXRpYyBhc3NldCBpcyBnb2luZyB0byBBUEkgR2F0ZXdheVxuICAgIC8vIFRoZXJlIGlzIG5vIHRyYWlsaW5nIHNsYXNoIGJlY2F1c2UgU2VydmVybGVzcyBOZXh0LmpzIHdhbnRzXG4gICAgLy8gZ28gbG9hZCBwYWdlcyBhdCAvcmVsZWFzZS8wLjAuMyAod2l0aCBubyB0cmFpbGluZyBzbGFzaCkuXG4gICAgLy9cbiAgICBkaXN0cm8uYWRkQmVoYXZpb3IocG9zaXhQYXRoLmpvaW4ocm9vdFBhdGhQcmVmaXgsICcvKicpLCBkZWZhdWx0T3JpZ2luLCBhcHBCZWhhdmlvck9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xvdWRGcm9udERpc3RybzogY2YuRGlzdHJpYnV0aW9uO1xuICBwdWJsaWMgZ2V0IGNsb3VkRnJvbnREaXN0cm8oKTogY2YuRGlzdHJpYnV0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY2xvdWRGcm9udERpc3RybztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNaWNyb0FwcHNDRlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BzIG11c3QgYmUgc2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHByb3BzLnI1M1pvbmUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgKHByb3BzLnI1M1pvbmUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kb21haW5OYW1lRWRnZSA9PT0gdW5kZWZpbmVkKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJZiBlaXRoZXIgb2YgcjUzWm9uZSBvciBkb21haW5OYW1lRWRnZSBhcmUgc2V0IHRoZW4gdGhlIG90aGVyIG11c3QgYmUgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgICBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgaHR0cEFwaSxcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICBjZXJ0RWRnZSxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICByNTNab25lLFxuICAgICAgYnVja2V0TG9ncyxcbiAgICAgIGJ1Y2tldEFwcHNPcmlnaW4sXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICAgIGNyZWF0ZUFQSVBhdGhSb3V0ZSA9ICEhcHJvcHMuaHR0cEFwaSxcbiAgICAgIGNyZWF0ZU5leHREYXRhUGF0aFJvdXRlID0gISFwcm9wcy5odHRwQXBpLFxuICAgICAgZWRnZUxhbWJkYXMsXG4gICAgICBvcmlnaW5TaGllbGRSZWdpb24sXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgYXBwT3JpZ2luUmVxdWVzdFBvbGljeSA9IE1pY3JvQXBwc0NGLmNyZWF0ZUFQSU9yaWdpblBvbGljeSh0aGlzLCB7XG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgfSk7XG5cbiAgICAvL1xuICAgIC8vIERldGVybWluZSBVUkwgb2YgdGhlIG9yaWdpbiBGUUROXG4gICAgLy9cbiAgICBsZXQgaHR0cE9yaWdpbkZRRE46IHN0cmluZyA9ICdpbnZhbGlkLnB3cmRydnIuY29tJztcbiAgICBpZiAoZG9tYWluTmFtZU9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBodHRwT3JpZ2luRlFETiA9IGRvbWFpbk5hbWVPcmlnaW47XG4gICAgfSBlbHNlIGlmIChodHRwQXBpKSB7XG4gICAgICBodHRwT3JpZ2luRlFETiA9IGAke2h0dHBBcGkuYXBpSWR9LmV4ZWN1dGUtYXBpLiR7QXdzLlJFR0lPTn0uYW1hem9uYXdzLmNvbWA7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBHZXQgdGhlIEVkZ2UgdG8gT3JpZ2luIExhbWJkYXNcbiAgICAvL1xuXG4gICAgLy9cbiAgICAvLyBDbG91ZEZyb250IERpc3Ryb1xuICAgIC8vXG4gICAgY29uc3QgYXBwT3JpZ2luID0gaHR0cEFwaVxuICAgICAgPyBuZXcgY2ZvcmlnaW5zLkh0dHBPcmlnaW4oaHR0cE9yaWdpbkZRRE4sIHtcbiAgICAgICAgcHJvdG9jb2xQb2xpY3k6IGNmLk9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICAgIG9yaWdpblNzbFByb3RvY29sczogW2NmLk9yaWdpblNzbFBvbGljeS5UTFNfVjFfMl0sXG4gICAgICAgIG9yaWdpblNoaWVsZFJlZ2lvbixcbiAgICAgIH0pXG4gICAgICA6IGJ1Y2tldEFwcHNPcmlnaW47XG4gICAgdGhpcy5fY2xvdWRGcm9udERpc3RybyA9IG5ldyBjZi5EaXN0cmlidXRpb24odGhpcywgJ2NmdCcsIHtcbiAgICAgIGNvbW1lbnQ6IGFzc2V0TmFtZVJvb3QgPyBgJHthc3NldE5hbWVSb290fSR7YXNzZXROYW1lU3VmZml4fWAgOiBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVzOiBkb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkID8gW2RvbWFpbk5hbWVFZGdlXSA6IHVuZGVmaW5lZCxcbiAgICAgIGNlcnRpZmljYXRlOiBjZXJ0RWRnZSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjZi5IdHRwVmVyc2lvbi5IVFRQMixcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBhbGxvd2VkTWV0aG9kczogY2YuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICBjYWNoZVBvbGljeTogY2YuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IGFwcE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gICAgICAgIG9yaWdpbjogYXBwT3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2YuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGVkZ2VMYW1iZGFzLFxuICAgICAgfSxcbiAgICAgIGVuYWJsZUlwdjY6IHRydWUsXG4gICAgICBwcmljZUNsYXNzOiBjZi5QcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGxvZ0J1Y2tldDogYnVja2V0TG9ncyxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IHByb3BzLmRvbWFpbk5hbWVFZGdlXG4gICAgICAgID8gYCR7cmV2ZXJzZURvbWFpbihwcm9wcy5kb21haW5OYW1lRWRnZSl9L2Nsb3VkZnJvbnQtcmF3L2BcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2xvdWRGcm9udERpc3Ryby5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJvdXRlcyB0byB0aGUgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25cbiAgICBNaWNyb0FwcHNDRi5hZGRSb3V0ZXMoc2NvcGUsIHtcbiAgICAgIGFwcE9yaWdpbixcbiAgICAgIGJ1Y2tldEFwcHNPcmlnaW4sXG4gICAgICBkaXN0cm86IHRoaXMuX2Nsb3VkRnJvbnREaXN0cm8sXG4gICAgICBhcHBPcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgICBjcmVhdGVBUElQYXRoUm91dGUsXG4gICAgICBjcmVhdGVOZXh0RGF0YVBhdGhSb3V0ZSxcbiAgICAgIGVkZ2VMYW1iZGFzLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIGVkZ2UgbmFtZSBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJvXG4gICAgLy9cblxuICAgIGlmIChyNTNab25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJyQXBwc0VkZ2UgPSBuZXcgcjUzLlJlY29yZFNldCh0aGlzLCAnZWRnZS1hcmVjb3JkJywge1xuICAgICAgICByZWNvcmROYW1lOiBkb21haW5OYW1lRWRnZSxcbiAgICAgICAgcmVjb3JkVHlwZTogcjUzLlJlY29yZFR5cGUuQSxcbiAgICAgICAgdGFyZ2V0OiByNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgcjUzdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nsb3VkRnJvbnREaXN0cm8pKSxcbiAgICAgICAgem9uZTogcjUzWm9uZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByckFwcHNFZGdlLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -97,6 +97,12 @@ export interface MicroAppsEdgeToOriginProps {
|
|
|
97
97
|
* Implies that 2nd generation routing is enabled.
|
|
98
98
|
*/
|
|
99
99
|
readonly tableRulesArn?: string;
|
|
100
|
+
/**
|
|
101
|
+
* Enable invoking API Gateway from the Edge Lambda
|
|
102
|
+
*
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
readonly setupApiGatewayPermissions?: boolean;
|
|
100
106
|
}
|
|
101
107
|
export interface GenerateEdgeToOriginConfigOptions {
|
|
102
108
|
readonly originRegion: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicroAppsEdgeToOrigin.d.ts","sourceRoot":"","sources":["../src/MicroAppsEdgeToOrigin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,aAAa,EAAe,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGjD,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;IAE9E;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;OAQG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;;;;;;;;OASG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAEnD;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MicroAppsEdgeToOrigin.d.ts","sourceRoot":"","sources":["../src/MicroAppsEdgeToOrigin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,aAAa,EAAe,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGjD,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;IAE9E;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;OAQG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;;;;;;;;OASG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAEnD;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,EAAE,CAAC;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,SAAU,YAAW,sBAAsB;IACpF;;;;OAIG;WACW,0BAA0B,CAAC,KAAK,EAAE,iCAAiC;IASjF,OAAO,CAAC,qBAAqB,CAAiD;IAC9E,IAAW,oBAAoB,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAEhF;IAED,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,IAAW,mBAAmB,IAAI,EAAE,CAAC,UAAU,EAAE,CAEhD;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B;IAgL3E;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,kBAAkB;CAoC3B"}
|
|
@@ -25,7 +25,7 @@ class MicroAppsEdgeToOrigin extends constructs_1.Construct {
|
|
|
25
25
|
if (props === undefined) {
|
|
26
26
|
throw new Error('props must be set');
|
|
27
27
|
}
|
|
28
|
-
const { addXForwardedHostHeader = true, assetNameRoot, assetNameSuffix, originRegion, signingMode = 'sign', removalPolicy, rootPathPrefix, replaceHostHeader = true, tableRulesArn, } = props;
|
|
28
|
+
const { addXForwardedHostHeader = true, assetNameRoot, assetNameSuffix, originRegion, setupApiGatewayPermissions = false, signingMode = 'sign', removalPolicy, rootPathPrefix, replaceHostHeader = true, tableRulesArn, } = props;
|
|
29
29
|
// Create the edge function config file from the construct options
|
|
30
30
|
const edgeToOriginConfigYaml = MicroAppsEdgeToOrigin.generateEdgeToOriginConfig({
|
|
31
31
|
originRegion: originRegion || aws_cdk_lib_1.Aws.REGION,
|
|
@@ -56,10 +56,14 @@ class MicroAppsEdgeToOrigin extends constructs_1.Construct {
|
|
|
56
56
|
// to invoke any API Gateway API that we apply a tag to
|
|
57
57
|
// We allow the edge function to sign for all regions since
|
|
58
58
|
// we may use custom closest region in the future.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
...(setupApiGatewayPermissions
|
|
60
|
+
? [
|
|
61
|
+
new iam.PolicyStatement({
|
|
62
|
+
actions: ['execute-api:Invoke'],
|
|
63
|
+
resources: [`arn:aws:execute-api:*:${aws_cdk_lib_1.Aws.ACCOUNT_ID}:*/*/*/*`],
|
|
64
|
+
}),
|
|
65
|
+
]
|
|
66
|
+
: []),
|
|
63
67
|
//
|
|
64
68
|
// Grant permission to invoke tagged Function URLs
|
|
65
69
|
//
|
|
@@ -191,5 +195,5 @@ ${props.rootPathPrefix ? `rootPathPrefix: '${props.rootPathPrefix}'` : ''}`;
|
|
|
191
195
|
}
|
|
192
196
|
exports.MicroAppsEdgeToOrigin = MicroAppsEdgeToOrigin;
|
|
193
197
|
_a = JSII_RTTI_SYMBOL_1;
|
|
194
|
-
MicroAppsEdgeToOrigin[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsEdgeToOrigin", version: "0.3.
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzRWRnZVRvT3JpZ2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0VkZ2VUb09yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUE4QztBQUM5QyxpQ0FBaUM7QUFDakMsMkJBQTZEO0FBQzdELHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsNkNBQXdFO0FBQ3hFLGlEQUFpRDtBQUNqRCxxREFBcUQ7QUFDckQsMkNBQTJDO0FBQzNDLGlEQUFpRDtBQUNqRCw4REFBOEQ7QUFDOUQsNkNBQTZDO0FBQzdDLDJDQUF1QztBQXNIdkM7O0dBRUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBeUJsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sRUFDSix1QkFBdUIsR0FBRyxJQUFJLEVBQzlCLGFBQWEsRUFDYixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsR0FBRyxNQUFNLEVBQ3BCLGFBQWEsRUFDYixjQUFjLEVBQ2QsaUJBQWlCLEdBQUcsSUFBSSxFQUN4QixhQUFhLEdBQ2QsR0FBRyxLQUFLLENBQUM7UUFFVixrRUFBa0U7UUFDbEUsTUFBTSxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQztZQUM5RSxZQUFZLEVBQUUsWUFBWSxJQUFJLGlCQUFHLENBQUMsTUFBTTtZQUN4Qyx1QkFBdUI7WUFDdkIsaUJBQWlCO1lBQ2pCLFdBQVcsRUFBRSxXQUFXLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDdEQsY0FBYztZQUNkLEdBQUcsQ0FBQyxhQUFhO2dCQUNmLENB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RSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRixNQUFNLFNBQVMsU0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLG1DQUFJLEVBQUUsQ0FBQztRQUU3QyxtRUFBbUU7UUFDbkUsNkVBQTZFO1FBQzdFLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLHVCQUF1QixTQUFTLEVBQUUsRUFBRTtZQUN0RixPQUFPLEVBQUUsNEJBQTRCLFNBQVMsRUFBRTtZQUNoRCxJQUFJO1lBQ0osWUFBWSxFQUFFLDRCQUE0QixTQUFTLEVBQUU7WUFDckQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsR0FBRyxxQkFBcUI7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsa0JBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBalBILHNEQWtQQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgY29weUZpbGVTeW5jLCBleGlzdHNTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEF3cywgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2YgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgZHluYW1vZGIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxhbWJkYU5vZGVqcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBNaWNyb0FwcHMgRWRnZSB0byBPcmlnaW4gRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWljcm9BcHBzRWRnZVRvT3JpZ2luIHtcbiAgLyoqXG4gICAqIFRoZSBlZGdlIHRvIG9yaWdpbiBmdW5jdGlvbiBmb3IgQVBJIEdhdGV3YXkgUmVxdWVzdCBPcmlnaW4gRWRnZSBMYW1iZGFcbiAgICpcbiAgICogVGhlIGdlbmVyYXRlZCBgY29uZmlnLnltbGAgaXMgaW5jbHVkZWQgaW4gdGhlIExhbWJkYSdzIGNvZGUuXG4gICAqL1xuICByZWFkb25seSBlZGdlVG9PcmlnaW5GdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uIHwgY2YuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvZiB0aGUgZWRnZSB0byBvcmlnaW4gbGFtYmRhIGZ1bmN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZWRnZVRvT3JpZ2luTGFtYmRhczogY2YuRWRnZUxhbWJkYVtdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBgTWljcm9BcHBzRWRnZVRvT3JpZ2luYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWNyb0FwcHNFZGdlVG9PcmlnaW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBSZW1vdmFsUG9saWN5IG92ZXJyaWRlIGZvciBjaGlsZCByZXNvdXJjZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwZXIgcmVzb3VyY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgcm9vdFxuICAgKlxuICAgKiBAZXhhbXBsZSBtaWNyb2FwcHNcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBuYW1lcyBhdXRvIGFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhc3NldCBuYW1lIHN1ZmZpeFxuICAgKlxuICAgKiBAZXhhbXBsZSAtZGV2LXByLTEyXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBwcmVmaXggb24gdGhlIHJvb3Qgb2YgdGhlIEFQSSBHYXRld2F5IFN0YWdlXG4gICAqXG4gICAqIEBleGFtcGxlIGRldi9cbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdFBhdGhQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gWC1Gb3J3YXJkZWQtSG9zdC1IZWFkZXIgd2hlbiBjYWxsaW5nIEFQSSBHYXRld2F5XG4gICAqXG4gICAqIENhbiBvbmx5IGJlIHRydXN0ZWQgaWYgYHNpZ25pbmdNb2RlYCBpcyBlbmFibGVkLCB3aGljaCByZXN0cmljdHNcbiAgICogYWNjZXNzIHRvIEFQSSBHYXRld2F5IHRvIG9ubHkgSUFNIHNpZ25lZCByZXF1ZXN0cy5cbiAgICpcbiAgICogTm90ZTogaWYgdHJ1ZSwgY3JlYXRlcyBPcmlnaW5SZXF1ZXN0IExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gZm9yIEFQSSBHYXRld2F5IE9yaWdpblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhZGRYRm9yd2FyZGVkSG9zdEhlYWRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIEhvc3QgaGVhZGVyICh3aGljaCB3aWxsIGJlIHRoZSBFZGdlIGRvbWFpbiBuYW1lKSB3aXRoIHRoZSBPcmlnaW4gZG9tYWluIG5hbWVcbiAgICogd2hlbiBlbmFibGVkLiAgVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBBUEkgR2F0ZXdheSBoYXMgbm90IGJlZW4gY29uZmlndXJlZFxuICAgKiB3aXRoIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgbWF0Y2hlcyB0aGUgZXhhY3QgZG9tYWluIG5hbWUgdXNlZCBieSB0aGUgQ2xvdWRGcm9udFxuICAgKiBEaXN0cmlidXRpb24gQU5EIHdoZW4gdGhlIE9yaWdpblJlcXVlc3RQb2xpY3kuSGVhZGVyc0JlaGF2aW9yIGlzIHNldFxuICAgKiB0byBwYXNzIGFsbCBoZWFkZXJzIHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIE5vdGU6IGlmIHRydWUsIGNyZWF0ZXMgT3JpZ2luUmVxdWVzdCBMYW1iZGEgQCBFZGdlIGZ1bmN0aW9uIGZvciBBUEkgR2F0ZXdheSBPcmlnaW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGFjZUhvc3RIZWFkZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBJQU0gYXV0aCBvbiB0aGUgQVBJIEdhdGV3YXkgb3JpZ2luIGlmIG5vdCBzZXQgdG8gJ25vbmUnLlxuICAgKlxuICAgKiAnc2lnbicgLSBVc2VzIHJlcXVlc3QgaGVhZGVycyBmb3IgYXV0aC5cbiAgICogJ3ByZXNpZ24nIC0gVXNlcyBxdWVyeSBzdHJpbmcgZm9yIGF1dGguXG4gICAqXG4gICAqIElmIGVuYWJsZWQsXG4gICAqXG4gICAqIE5vdGU6IGlmICdzaWduJyBvciAncHJlc2lnbicsIGNyZWF0ZXMgT3JpZ2luUmVxdWVzdCBMYW1iZGEgQCBFZGdlIGZ1bmN0aW9uIGZvciBBUEkgR2F0ZXdheSBPcmlnaW5cbiAgICogQGRlZmF1bHQgJ3NpZ24nXG4gICAqL1xuICByZWFkb25seSBzaWduaW5nTW9kZT86ICdzaWduJyB8ICdwcmVzaWduJyB8ICdub25lJztcblxuICAvKipcbiAgICogT3JpZ2luIHJlZ2lvbiB0aGF0IEFQSSBHYXRld2F5IHdpbGwgYmUgZGVwbG95ZWQgdG8sIHVzZWRcbiAgICogZm9yIHRoZSBjb25maWcueW1sIG9uIHRoZSBFZGdlIGZ1bmN0aW9uIHRvIHNpZ24gcmVxdWVzdHMgZm9yXG4gICAqIHRoZSBjb3JyZWN0IHJlZ2lvblxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRHluYW1vREIgVGFibGUgTmFtZSBmb3IgYXBwcy92ZXJzaW9ucy9ydWxlcy5cbiAgICpcbiAgICogTXVzdCBiZSBhIGZ1bGwgQVJOIGFzIHRoaXMgY2FuIGJlIGNyb3NzIHJlZ2lvbi5cbiAgICpcbiAgICogSW1wbGllcyB0aGF0IDJuZCBnZW5lcmF0aW9uIHJvdXRpbmcgaXMgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlUnVsZXNBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVFZGdlVG9PcmlnaW5Db25maWdPcHRpb25zIHtcbiAgcmVhZG9ubHkgb3JpZ2luUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpZ25pbmdNb2RlOiAnc2lnbicgfCAncHJlc2lnbicgfCAnJztcbiAgcmVhZG9ubHkgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXI6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcGxhY2VIb3N0SGVhZGVyOiBib29sZWFuO1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvb3RQYXRoUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBNaWNyb0FwcHMgRWRnZSB0byBPcmlnaW4gRnVuY3Rpb24gdy8gYGNvbmZpZy55bWxgXG4gKi9cbmV4cG9ydCBjbGFzcyBNaWNyb0FwcHNFZGdlVG9PcmlnaW4gZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTWljcm9BcHBzRWRnZVRvT3JpZ2luIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSB5YW1sIGNvbmZpZyBmb3IgdGhlIGVkZ2UgbGFtYmRhXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUVkZ2VUb09yaWdpbkNvbmZpZyhwcm9wczogR2VuZXJhdGVFZGdlVG9PcmlnaW5Db25maWdPcHRpb25zKSB7XG4gICAgcmV0dXJuIGBvcmlnaW5SZWdpb246ICR7cHJvcHMub3JpZ2luUmVnaW9ufVxuJHtwcm9wcy5zaWduaW5nTW9kZSA9PT0gJycgPyAnJyA6IGBzaWduaW5nTW9kZTogJHtwcm9wcy5zaWduaW5nTW9kZX1gfVxuYWRkWEZvcndhcmRlZEhvc3RIZWFkZXI6ICR7cHJvcHMuYWRkWEZvcndhcmRlZEhvc3RIZWFkZXJ9XG5yZXBsYWNlSG9zdEhlYWRlcjogJHtwcm9wcy5yZXBsYWNlSG9zdEhlYWRlcn1cbiR7cHJvcHMudGFibGVOYW1lID8gYHRhYmxlTmFtZTogJyR7cHJvcHMudGFibGVOYW1lfSdgIDogJyd9XG4ke3Byb3BzLnJvb3RQYXRoUHJlZml4ID8gYHJvb3RQYXRoUHJlZml4OiAnJHtwcm9wcy5yb290UGF0aFByZWZpeH0nYCA6ICcnfWA7XG4gIH1cblxuICBwcml2YXRlIF9lZGdlVG9PcmlnaW5GdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uIHwgY2YuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcbiAgcHVibGljIGdldCBlZGdlVG9PcmlnaW5GdW5jdGlvbigpOiBsYW1iZGEuRnVuY3Rpb24gfCBjZi5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZWRnZVRvT3JpZ2luRnVuY3Rpb247XG4gIH1cblxuICBwcml2YXRlIF9lZGdlVG9PcmlnaW5MYW1iZGFzOiBjZi5FZGdlTGFtYmRhW107XG4gIHB1YmxpYyBnZXQgZWRnZVRvT3JpZ2luTGFtYmRhcygpOiBjZi5FZGdlTGFtYmRhW10ge1xuICAgIHJldHVybiB0aGlzLl9lZGdlVG9PcmlnaW5MYW1iZGFzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1pY3JvQXBwc0VkZ2VUb09yaWdpblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BzIG11c3QgYmUgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXIgPSB0cnVlLFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIG9yaWdpblJlZ2lvbixcbiAgICAgIHNpZ25pbmdNb2RlID0gJ3NpZ24nLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIHJvb3RQYXRoUHJlZml4LFxuICAgICAgcmVwbGFjZUhvc3RIZWFkZXIgPSB0cnVlLFxuICAgICAgdGFibGVSdWxlc0FybixcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGVkZ2UgZnVuY3Rpb24gY29uZmlnIGZpbGUgZnJvbSB0aGUgY29uc3RydWN0IG9wdGlvbnNcbiAgICBjb25zdCBlZGdlVG9PcmlnaW5Db25maWdZYW1sID0gTWljcm9BcHBzRWRnZVRvT3JpZ2luLmdlbmVyYXRlRWRnZVRvT3JpZ2luQ29uZmlnKHtcbiAgICAgIG9yaWdpblJlZ2lvbjogb3JpZ2luUmVnaW9uIHx8IEF3cy5SRUdJT04sXG4gICAgICBhZGRYRm9yd2FyZGVkSG9zdEhlYWRlcixcbiAgICAgIHJlcGxhY2VIb3N0SGVhZGVyLFxuICAgICAgc2lnbmluZ01vZGU6IHNpZ25pbmdNb2RlID09PSAnbm9uZScgPyAnJyA6IHNpZ25pbmdNb2RlLFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgICAuLi4odGFibGVSdWxlc0FyblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRhYmxlTmFtZTogdGFibGVSdWxlc0FybixcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIEVkZ2UgdG8gT3JpZ2luIEZ1bmN0aW9uXG4gICAgLy9cbiAgICBjb25zdCBlZGdlVG9PcmlnaW5GdW5jUHJvcHM6IE9taXQ8bGFtYmRhLkZ1bmN0aW9uUHJvcHMsICdoYW5kbGVyJyB8ICdjb2RlJz4gPSB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGFzc2V0TmFtZVJvb3QgPyBgJHthc3NldE5hbWVSb290fS1lZGdlLXRvLW9yaWdpbiR7YXNzZXROYW1lU3VmZml4fWAgOiB1bmRlZmluZWQsXG4gICAgICBtZW1vcnlTaXplOiAxNzY5LFxuICAgICAgbG9nUmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgICAvLyBUaGlzIGNhbid0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGh0dHBBcGkgYmVjYXVzZSBpdCB3b3VsZCBtZWFuXG4gICAgICAgIC8vIHRoZSBwYXJlbnQgc3RhY2sgKHRoaXMgc3RhY2spIGhhcyB0byBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgdXMtZWFzdC0xXG4gICAgICAgIC8vIGNoaWxkIHN0YWNrIGZvciB0aGUgRWRnZSBMYW1iZGEgRnVuY3Rpb24uXG4gICAgICAgIC8vIFRoYXQncyB3aHkgd2UgdXNlIGEgdGFnLWJhc2VkIHBvbGljeSB0byBhbGxvdyB0aGUgRWRnZSBGdW5jdGlvblxuICAgICAgICAvLyB0byBpbnZva2UgYW55IEFQSSBHYXRld2F5IEFQSSB0aGF0IHdlIGFwcGx5IGEgdGFnIHRvXG4gICAgICAgIC8vIFdlIGFsbG93IHRoZSBlZGdlIGZ1bmN0aW9uIHRvIHNpZ24gZm9yIGFsbCByZWdpb25zIHNpbmNlXG4gICAgICAgIC8vIHdlIG1heSB1c2UgY3VzdG9tIGNsb3Nlc3QgcmVnaW9uIGluIHRoZSBmdXR1cmUuXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2V4ZWN1dGUtYXBpOkludm9rZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmV4ZWN1dGUtYXBpOio6JHtBd3MuQUNDT1VOVF9JRH06Ki8qLyovKmBdLFxuICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIEFQSSBHYXRld2F5IGFjY2VzcyBjYW5ub3QgYmUgcmVzdHJpY3RlZCB1c2luZ1xuICAgICAgICAgIC8vIHRhZ3Mgb24gdGhlIHRhcmdldCByZXNvdXJjZVxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9hY2Nlc3NfdGFncy5odG1sXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9hd3Mtc2VydmljZXMtdGhhdC13b3JrLXdpdGgtaWFtLmh0bWwjbmV0d29ya2luZ19zdmNzXG4gICAgICAgICAgLy8gY29uZGl0aW9uczoge1xuICAgICAgICAgIC8vICAgLy8gVE9ETzogU2V0IHRoaXMgdG8gYSBzdHJpbmcgdW5pcXVlIHRvIGVhY2ggc3RhY2tcbiAgICAgICAgICAvLyAgIFN0cmluZ0VxdWFsczogeyAnYXdzOlJlc291cmNlVGFnL21pY3JvYXBwLW1hbmFnZWQnOiAndHJ1ZScgfSxcbiAgICAgICAgICAvLyB9LFxuICAgICAgICB9KSxcbiAgICAgICAgLy9cbiAgICAgICAgLy8gR3JhbnQgcGVybWlzc2lvbiB0byBpbnZva2UgdGFnZ2VkIEZ1bmN0aW9uIFVSTHNcbiAgICAgICAgLy9cbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnbGFtYmRhOkludm9rZUZ1bmN0aW9uVXJsJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6bGFtYmRhOio6JHtBd3MuQUNDT1VOVF9JRH06KmBdLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgIFN0cmluZ0VxdWFsczogeyAnYXdzOlJlc291cmNlVGFnL21pY3JvYXBwLW1hbmFnZWQnOiAndHJ1ZScgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICAuLi4ocmVtb3ZhbFBvbGljeSA/IHsgcmVtb3ZhbFBvbGljeSB9IDoge30pLFxuICAgIH07XG4gICAgY29uc3Qgcm9vdERpc3RQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ21pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbicsICdkaXN0Jyk7XG4gICAgY29uc3Qgcm9vdERpc3RFeGlzdHMgPSBleGlzdHNTeW5jKHBhdGguam9pbihyb290RGlzdFBhdGgsICdpbmRleC5qcycpKTtcbiAgICBjb25zdCBsb2NhbERpc3RQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ21pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbicpO1xuICAgIGNvbnN0IGxvY2FsRGlzdEV4aXN0cyA9IGV4aXN0c1N5bmMocGF0aC5qb2luKGxvY2FsRGlzdFBhdGgsICdpbmRleC5qcycpKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyAmJiByb290RGlzdEV4aXN0cykge1xuICAgICAgLy8gVGhpcyBpcyBmb3IgdGVzdHMgcnVuIHVuZGVyIGplc3QgLSBQcmVmZXIgcm9vdCBkaXN0IGJ1bmRsZVxuICAgICAgLy8gVGhpcyBpcyBhbHNvIGZvciBhbnl0aW1lIHdoZW4gdGhlIGVkZ2UgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBidW5kbGVkXG4gICAgICB0aGlzLl9lZGdlVG9PcmlnaW5GdW5jdGlvbiA9IHRoaXMuY3JlYXRlRWRnZUZ1bmN0aW9uKFxuICAgICAgICByb290RGlzdFBhdGgsXG4gICAgICAgIGVkZ2VUb09yaWdpbkNvbmZpZ1lhbWwsXG4gICAgICAgIGVkZ2VUb09yaWdpbkZ1bmNQcm9wcyxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbERpc3RFeGlzdHMpIHtcbiAgICAgIC8vIFByZWZlciBsb2NhbCBkaXN0IGFib3ZlIHJvb3QgZGlzdCBpZiBib3RoIGV4aXN0ICh3aGVuIGJ1aWxkaW5nIGZvciBkaXN0cmlidXRpb24pXG4gICAgICB0aGlzLl9lZGdlVG9PcmlnaW5GdW5jdGlvbiA9IHRoaXMuY3JlYXRlRWRnZUZ1bmN0aW9uKFxuICAgICAgICBsb2NhbERpc3RQYXRoLFxuICAgICAgICBlZGdlVG9PcmlnaW5Db25maWdZYW1sLFxuICAgICAgICBlZGdlVG9PcmlnaW5GdW5jUHJvcHMsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAocm9vdERpc3RFeGlzdHMpIHtcbiAgICAgIC8vIFVzZSBsb2NhbCBkaXN0IGlmIGl0IGV4aXN0cyAod2hlbiBkZXBsb3lpbmcgZnJvbSBDREsgaW4gdGhpcyByZXBvKVxuICAgICAgdGhpcy5fZWRnZVRvT3JpZ2luRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUVkZ2VGdW5jdGlvbihcbiAgICAgICAgcm9vdERpc3RQYXRoLFxuICAgICAgICBlZGdlVG9PcmlnaW5Db25maWdZYW1sLFxuICAgICAgICBlZGdlVG9PcmlnaW5GdW5jUHJvcHMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiBidW5kbGluZyB0aGUgYXBwIGFuZCBidWlsZGluZyB0aGUgQ0RLIG1vZHVsZVxuICAgICAgLy8gZm9yIGRpc3RyaWJ1dGlvbi5cbiAgICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdtaWNyb2FwcHMtZWRnZS10by1vcmlnaW4nLCAnY29uZmlnLnltbCcpLFxuICAgICAgICBlZGdlVG9PcmlnaW5Db25maWdZYW1sLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29weSB0aGUgYXBwRnJhbWUuaHRtbCB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGJ1bmRsaW5nIHdpbGwgZmluZCBpdFxuICAgICAgY29weUZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnbWljcm9hcHBzLXJvdXRlcicsICdhcHBGcmFtZS5odG1sJyksXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdtaWNyb2FwcHMtZWRnZS10by1vcmlnaW4nLCAnYXBwRnJhbWUuaHRtbCcpLFxuICAgICAgKTtcblxuICAgICAgLy8gVGhpcyBidWlsZHMgdGhlIGZ1bmN0aW9uIGZvciBkaXN0cmlidXRpb24gd2l0aCB0aGUgQ0RLIENvbnN0cnVjdFxuICAgICAgLy8gYW5kIHdpbGwgYmUgdXNlZCBkdXJpbmcgbG9jYWwgYnVpbGRzIGFuZCBQUiBidWlsZHMgb2YgbWljcm9hcHBzLWNvcmVcbiAgICAgIC8vIGlmIHRoZSBtaWNyb2FwcHMtZWRnZS10by1vcmlnaW4gZnVuY3Rpb24gaXMgbm90IGFscmVhZHkgYnVuZGxlZC5cbiAgICAgIC8vIFRoaXMgd2lsbCBmYWlsIHRvIGRlcGxveSBpbiBhbnkgcmVnaW9uIG90aGVyIHRoYW4gdXMtZWFzdC0xXG4gICAgICB0aGlzLl9lZGdlVG9PcmlnaW5GdW5jdGlvbiA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgJ2VkZ2UtdG8tYXBpZ3d5LWZ1bmMnLCB7XG4gICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnbWljcm9hcHBzLWVkZ2UtdG8tb3JpZ2luJywgJ3NyYycsICdpbmRleC50cycpLFxuICAgICAgICBoYW5kbGVyOiAnaGFuZGxlcicsXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgIGJlZm9yZUluc3RhbGw6ICgpID0+IFtdLFxuICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmc6ICgpID0+IFtdLFxuICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZzogKF9pbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAvLyAyMDIyLTEwLTAyIC0gTm90ZSB0aGF0IHRoaXMgaXMgaWdub3JpbmcgdGhlIGdlbmVyYXRlZCBjb25maWdcbiAgICAgICAgICAgICAgLy8gZmlsZSBhYm92ZSBhbmQgaW5jbHVkaW5nIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGNvbmZpZyBmaWxlXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgYCR7b3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJyA/ICdjb3B5JyA6ICdjcCd9ICR7cGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICAgICAgICAgICAgJy4uJyxcbiAgICAgICAgICAgICAgICAgICcuLicsXG4gICAgICAgICAgICAgICAgICAnLi4nLFxuICAgICAgICAgICAgICAgICAgJ2NvbmZpZ3MnLFxuICAgICAgICAgICAgICAgICAgJ21pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbicsXG4gICAgICAgICAgICAgICAgICAnY29uZmlnLnltbCcsXG4gICAgICAgICAgICAgICAgKX0gJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICBgJHtvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInID8gJ2NvcHknIDogJ2NwJ30gJHtwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgICAgICAgICAgICAnLi4nLFxuICAgICAgICAgICAgICAgICAgJy4uJyxcbiAgICAgICAgICAgICAgICAgICdtaWNyb2FwcHMtcm91dGVyJyxcbiAgICAgICAgICAgICAgICAgICdhcHBGcmFtZS5odG1sJyxcbiAgICAgICAgICAgICAgICApfSAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAuLi5lZGdlVG9PcmlnaW5GdW5jUHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9lZGdlVG9PcmlnaW5MYW1iZGFzID0gW1xuICAgICAge1xuICAgICAgICBldmVudFR5cGU6IGNmLkxhbWJkYUVkZ2VFdmVudFR5cGUuT1JJR0lOX1JFUVVFU1QsXG4gICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogdGhpcy5fZWRnZVRvT3JpZ2luRnVuY3Rpb24uY3VycmVudFZlcnNpb24sXG4gICAgICAgIGluY2x1ZGVCb2R5OiB0cnVlLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gR3JhbnQgYWNjZXNzIHRvIHRoZSBydWxlcyB0YWJsZVxuICAgIGlmICh0YWJsZVJ1bGVzQXJuKSB7XG4gICAgICBjb25zdCB0YWJsZVJ1bGVzID0gZHluYW1vZGIuVGFibGUuZnJvbVRhYmxlTmFtZSh0aGlzLCAndGFibGVSdWxlcycsIHRhYmxlUnVsZXNBcm4pO1xuICAgICAgdGFibGVSdWxlcy5ncmFudFJlYWREYXRhKHRoaXMuX2VkZ2VUb09yaWdpbkZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFzaCB0aGUgc3RhY2sgbmFtZSB0byBtYWtlIHRoZSBFZGdlRnVuY3Rpb24gcGFyYW1ldGVyIG5hbWUgdW5pcXVlXG4gICAqXG4gICAqIEBwYXJhbSBzdGFja1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNoU3RhY2tOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgOCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkZ2VGdW5jdGlvbihcbiAgICBkaXN0UGF0aDogc3RyaW5nLFxuICAgIGVkZ2VUb09yaWdpbkNvbmZpZ1lhbWw6IHN0cmluZyxcbiAgICBlZGdlVG9PcmlnaW5GdW5jUHJvcHM6IE9taXQ8bGFtYmRhLkZ1bmN0aW9uUHJvcHMsICdoYW5kbGVyJyB8ICdjb2RlJz4sXG4gICkge1xuICAgIHdyaXRlRmlsZVN5bmMocGF0aC5qb2luKGRpc3RQYXRoLCAnY29uZmlnLnltbCcpLCBlZGdlVG9PcmlnaW5Db25maWdZYW1sKTtcblxuICAgIC8vIFNraXAgdGhlIGNvcHkgb2YgYXBwRnJhbWUuaHRtbCBvbiBkZXBsb3llZCBtb2R1bGVzXG4gICAgaWYgKCFfX2Rpcm5hbWUuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcycpKSB7XG4gICAgICBjb3B5RmlsZVN5bmMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdtaWNyb2FwcHMtcm91dGVyJywgJ2FwcEZyYW1lLmh0bWwnKSxcbiAgICAgICAgcGF0aC5qb2luKGRpc3RQYXRoLCAnYXBwRnJhbWUuaHRtbCcpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhjbHVkZSB2YXJ5aW5nIHBlciBzdGFjayBuYW1lIGlzIGEga2x1ZGdlIHRvIGdldCB0aGUgYXNzZXQgYnVuZGxlZFxuICAgIC8vIHdpdGggdGhlIHN0YWNrLXNwZWNpZmMgY29uZmlnLnltbCBmaWxlLCBvdGhlcndpc2UgdGhleSBhbGwgZ2V0IHRoZSBmaWxlXG4gICAgLy8gZ2VuZXJhdGVkIGZvciB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdCB3aXRoaW4gYW55IHN0YWNrXG4gICAgLy8gaW4gdGhlIGFwcC5cbiAgICBjb25zdCBjb2RlID0gbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGRpc3RQYXRoLCB7IGV4Y2x1ZGU6IFtgKiovJHtTdGFjay5vZih0aGlzKX1gXSB9KTtcblxuICAgIGNvbnN0IHN0YWNrSGFzaCA9IHRoaXMuaGFzaFN0YWNrTmFtZSgpID8/ICcnO1xuXG4gICAgLy8gRWRnZUZ1bmN0aW9uIGhhcyBhIGJ1ZyB3aGVyZSBpdCB3aWxsIGdlbmVyYXRlIHRoZSBzYW1lIHBhcmFtZXRlclxuICAgIC8vIG5hbWUgYWNyb3NzIG11bHRpcGxlIHN0YWNrcyBpbiB0aGUgc2FtZSByZWdpb24gaWYgdGhlIGlkIHBhcmFtIGlzIGNvbnN0YW50XG4gICAgY29uc3QgZWRnZSA9IG5ldyBjZi5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKHRoaXMsIGBlZGdlLXRvLWFwaWd3eS1mdW5jLSR7c3RhY2tIYXNofWAsIHtcbiAgICAgIHN0YWNrSWQ6IGBtaWNyb2FwcHMtZWRnZS10by1vcmlnaW4tJHtzdGFja0hhc2h9YCxcbiAgICAgIGNvZGUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGBtaWNyb2FwcHMtZWRnZS10by1vcmlnaW4tJHtzdGFja0hhc2h9YCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIC4uLmVkZ2VUb09yaWdpbkZ1bmNQcm9wcyxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGVkZ2UpLmFkZCgnTmFtZScsIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSk7XG5cbiAgICByZXR1cm4gZWRnZTtcbiAgfVxufVxuIl19
|
|
198
|
+
MicroAppsEdgeToOrigin[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsEdgeToOrigin", version: "0.3.4" };
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzRWRnZVRvT3JpZ2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0VkZ2VUb09yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUE4QztBQUM5QyxpQ0FBaUM7QUFDakMsMkJBQTZEO0FBQzdELHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsNkNBQXdFO0FBQ3hFLGlEQUFpRDtBQUNqRCxxREFBcUQ7QUFDckQsMkNBQTJDO0FBQzNDLGlEQUFpRDtBQUNqRCw4REFBOEQ7QUFDOUQsNkNBQTZDO0FBQzdDLDJDQUF1QztBQTZIdkM7O0dBRUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBeUJsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sRUFDSix1QkFBdUIsR0FBRyxJQUFJLEVBQzlCLGFBQWEsRUFDYixlQUFlLEVBQ2YsWUFBWSxFQUNaLDBCQUEwQixHQUFHLEtBQUssRUFDbEMsV0FBVyxHQUFHLE1BQU0sRUFDcEIsYUFBYSxFQUNiLGNBQWMsRUFDZCxpQkFBaUIsR0FBRyxJQUFJLEVBQ3hCLGFBQWEsR0FDZCxHQUFHLEtBQUssQ0FBQztRQUVWLGtFQUFrRTtRQUNsRSxNQUFNLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDLDBCQUEwQixDQUFDO1lBQzlFLFlBQVksRUFBRSxZQUFZLElBQUksaUJBQUcsQ0FBQyxNQUFNO1lBQ3hDLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsV0FBVyxFQUFFLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUN0RCxjQUFjO1lBQ2Qs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UUFDMUUsMEVBQTBFO1FBQzFFLHFFQUFxRTtRQUNyRSxjQUFjO1FBQ2QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBGLE1BQU0sU0FBUyxTQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsbUNBQUksRUFBRSxDQUFDO1FBRTdDLG1FQUFtRTtRQUNuRSw2RUFBNkU7UUFDN0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLFNBQVMsRUFBRSxFQUFFO1lBQ3RGLE9BQU8sRUFBRSw0QkFBNEIsU0FBUyxFQUFFO1lBQ2hELElBQUk7WUFDSixZQUFZLEVBQUUsNEJBQTRCLFNBQVMsRUFBRTtZQUNyRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixHQUFHLHFCQUFxQjtTQUN6QixDQUFDLENBQUM7UUFDSCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUF0UEgsc0RBdVBDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBjb3B5RmlsZVN5bmMsIGV4aXN0c1N5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQXdzLCBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2ssIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjZiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbGFtYmRhTm9kZWpzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIE1pY3JvQXBwcyBFZGdlIHRvIE9yaWdpbiBGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNaWNyb0FwcHNFZGdlVG9PcmlnaW4ge1xuICAvKipcbiAgICogVGhlIGVkZ2UgdG8gb3JpZ2luIGZ1bmN0aW9uIGZvciBBUEkgR2F0ZXdheSBSZXF1ZXN0IE9yaWdpbiBFZGdlIExhbWJkYVxuICAgKlxuICAgKiBUaGUgZ2VuZXJhdGVkIGBjb25maWcueW1sYCBpcyBpbmNsdWRlZCBpbiB0aGUgTGFtYmRhJ3MgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IGVkZ2VUb09yaWdpbkZ1bmN0aW9uOiBsYW1iZGEuRnVuY3Rpb24gfCBjZi5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9mIHRoZSBlZGdlIHRvIG9yaWdpbiBsYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBlZGdlVG9PcmlnaW5MYW1iZGFzOiBjZi5FZGdlTGFtYmRhW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIGBNaWNyb0FwcHNFZGdlVG9PcmlnaW5gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pY3JvQXBwc0VkZ2VUb09yaWdpblByb3BzIHtcbiAgLyoqXG4gICAqIFJlbW92YWxQb2xpY3kgb3ZlcnJpZGUgZm9yIGNoaWxkIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBlciByZXNvdXJjZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYXNzZXQgbmFtZSByb290XG4gICAqXG4gICAqIEBleGFtcGxlIG1pY3JvYXBwc1xuICAgKiBAZGVmYXVsdCAtIHJlc291cmNlIG5hbWVzIGF1dG8gYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgc3VmZml4XG4gICAqXG4gICAqIEBleGFtcGxlIC1kZXYtcHItMTJcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHByZWZpeCBvbiB0aGUgcm9vdCBvZiB0aGUgQVBJIEdhdGV3YXkgU3RhZ2VcbiAgICpcbiAgICogQGV4YW1wbGUgZGV2L1xuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkcyBhbiBYLUZvcndhcmRlZC1Ib3N0LUhlYWRlciB3aGVuIGNhbGxpbmcgQVBJIEdhdGV3YXlcbiAgICpcbiAgICogQ2FuIG9ubHkgYmUgdHJ1c3RlZCBpZiBgc2lnbmluZ01vZGVgIGlzIGVuYWJsZWQsIHdoaWNoIHJlc3RyaWN0c1xuICAgKiBhY2Nlc3MgdG8gQVBJIEdhdGV3YXkgdG8gb25seSBJQU0gc2lnbmVkIHJlcXVlc3RzLlxuICAgKlxuICAgKiBOb3RlOiBpZiB0cnVlLCBjcmVhdGVzIE9yaWdpblJlcXVlc3QgTGFtYmRhIEAgRWRnZSBmdW5jdGlvbiBmb3IgQVBJIEdhdGV3YXkgT3JpZ2luXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFkZFhGb3J3YXJkZWRIb3N0SGVhZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVwbGFjZXMgSG9zdCBoZWFkZXIgKHdoaWNoIHdpbGwgYmUgdGhlIEVkZ2UgZG9tYWluIG5hbWUpIHdpdGggdGhlIE9yaWdpbiBkb21haW4gbmFtZVxuICAgKiB3aGVuIGVuYWJsZWQuICBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIEFQSSBHYXRld2F5IGhhcyBub3QgYmVlbiBjb25maWd1cmVkXG4gICAqIHdpdGggYSBjdXN0b20gZG9tYWluIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSBleGFjdCBkb21haW4gbmFtZSB1c2VkIGJ5IHRoZSBDbG91ZEZyb250XG4gICAqIERpc3RyaWJ1dGlvbiBBTkQgd2hlbiB0aGUgT3JpZ2luUmVxdWVzdFBvbGljeS5IZWFkZXJzQmVoYXZpb3IgaXMgc2V0XG4gICAqIHRvIHBhc3MgYWxsIGhlYWRlcnMgdG8gdGhlIG9yaWdpbi5cbiAgICpcbiAgICogTm90ZTogaWYgdHJ1ZSwgY3JlYXRlcyBPcmlnaW5SZXF1ZXN0IExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gZm9yIEFQSSBHYXRld2F5IE9yaWdpblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZXBsYWNlSG9zdEhlYWRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVzIElBTSBhdXRoIG9uIHRoZSBBUEkgR2F0ZXdheSBvcmlnaW4gaWYgbm90IHNldCB0byAnbm9uZScuXG4gICAqXG4gICAqICdzaWduJyAtIFVzZXMgcmVxdWVzdCBoZWFkZXJzIGZvciBhdXRoLlxuICAgKiAncHJlc2lnbicgLSBVc2VzIHF1ZXJ5IHN0cmluZyBmb3IgYXV0aC5cbiAgICpcbiAgICogSWYgZW5hYmxlZCxcbiAgICpcbiAgICogTm90ZTogaWYgJ3NpZ24nIG9yICdwcmVzaWduJywgY3JlYXRlcyBPcmlnaW5SZXF1ZXN0IExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gZm9yIEFQSSBHYXRld2F5IE9yaWdpblxuICAgKiBAZGVmYXVsdCAnc2lnbidcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25pbmdNb2RlPzogJ3NpZ24nIHwgJ3ByZXNpZ24nIHwgJ25vbmUnO1xuXG4gIC8qKlxuICAgKiBPcmlnaW4gcmVnaW9uIHRoYXQgQVBJIEdhdGV3YXkgd2lsbCBiZSBkZXBsb3llZCB0bywgdXNlZFxuICAgKiBmb3IgdGhlIGNvbmZpZy55bWwgb24gdGhlIEVkZ2UgZnVuY3Rpb24gdG8gc2lnbiByZXF1ZXN0cyBmb3JcbiAgICogdGhlIGNvcnJlY3QgcmVnaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luUmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEeW5hbW9EQiBUYWJsZSBOYW1lIGZvciBhcHBzL3ZlcnNpb25zL3J1bGVzLlxuICAgKlxuICAgKiBNdXN0IGJlIGEgZnVsbCBBUk4gYXMgdGhpcyBjYW4gYmUgY3Jvc3MgcmVnaW9uLlxuICAgKlxuICAgKiBJbXBsaWVzIHRoYXQgMm5kIGdlbmVyYXRpb24gcm91dGluZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVSdWxlc0Fybj86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIGludm9raW5nIEFQSSBHYXRld2F5IGZyb20gdGhlIEVkZ2UgTGFtYmRhXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzZXR1cEFwaUdhdGV3YXlQZXJtaXNzaW9ucz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVFZGdlVG9PcmlnaW5Db25maWdPcHRpb25zIHtcbiAgcmVhZG9ubHkgb3JpZ2luUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpZ25pbmdNb2RlOiAnc2lnbicgfCAncHJlc2lnbicgfCAnJztcbiAgcmVhZG9ubHkgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXI6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcGxhY2VIb3N0SGVhZGVyOiBib29sZWFuO1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvb3RQYXRoUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBNaWNyb0FwcHMgRWRnZSB0byBPcmlnaW4gRnVuY3Rpb24gdy8gYGNvbmZpZy55bWxgXG4gKi9cbmV4cG9ydCBjbGFzcyBNaWNyb0FwcHNFZGdlVG9PcmlnaW4gZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTWljcm9BcHBzRWRnZVRvT3JpZ2luIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSB5YW1sIGNvbmZpZyBmb3IgdGhlIGVkZ2UgbGFtYmRhXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUVkZ2VUb09yaWdpbkNvbmZpZyhwcm9wczogR2VuZXJhdGVFZGdlVG9PcmlnaW5Db25maWdPcHRpb25zKSB7XG4gICAgcmV0dXJuIGBvcmlnaW5SZWdpb246ICR7cHJvcHMub3JpZ2luUmVnaW9ufVxuJHtwcm9wcy5zaWduaW5nTW9kZSA9PT0gJycgPyAnJyA6IGBzaWduaW5nTW9kZTogJHtwcm9wcy5zaWduaW5nTW9kZX1gfVxuYWRkWEZvcndhcmRlZEhvc3RIZWFkZXI6ICR7cHJvcHMuYWRkWEZvcndhcmRlZEhvc3RIZWFkZXJ9XG5yZXBsYWNlSG9zdEhlYWRlcjogJHtwcm9wcy5yZXBsYWNlSG9zdEhlYWRlcn1cbiR7cHJvcHMudGFibGVOYW1lID8gYHRhYmxlTmFtZTogJyR7cHJvcHMudGFibGVOYW1lfSdgIDogJyd9XG4ke3Byb3BzLnJvb3RQYXRoUHJlZml4ID8gYHJvb3RQYXRoUHJlZml4OiAnJHtwcm9wcy5yb290UGF0aFByZWZpeH0nYCA6ICcnfWA7XG4gIH1cblxuICBwcml2YXRlIF9lZGdlVG9PcmlnaW5GdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uIHwgY2YuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcbiAgcHVibGljIGdldCBlZGdlVG9PcmlnaW5GdW5jdGlvbigpOiBsYW1iZGEuRnVuY3Rpb24gfCBjZi5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZWRnZVRvT3JpZ2luRnVuY3Rpb247XG4gIH1cblxuICBwcml2YXRlIF9lZGdlVG9PcmlnaW5MYW1iZGFzOiBjZi5FZGdlTGFtYmRhW107XG4gIHB1YmxpYyBnZXQgZWRnZVRvT3JpZ2luTGFtYmRhcygpOiBjZi5FZGdlTGFtYmRhW10ge1xuICAgIHJldHVybiB0aGlzLl9lZGdlVG9PcmlnaW5MYW1iZGFzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1pY3JvQXBwc0VkZ2VUb09yaWdpblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BzIG11c3QgYmUgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXIgPSB0cnVlLFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIG9yaWdpblJlZ2lvbixcbiAgICAgIHNldHVwQXBpR2F0ZXdheVBlcm1pc3Npb25zID0gZmFsc2UsXG4gICAgICBzaWduaW5nTW9kZSA9ICdzaWduJyxcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICAgIHJlcGxhY2VIb3N0SGVhZGVyID0gdHJ1ZSxcbiAgICAgIHRhYmxlUnVsZXNBcm4sXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBlZGdlIGZ1bmN0aW9uIGNvbmZpZyBmaWxlIGZyb20gdGhlIGNvbnN0cnVjdCBvcHRpb25zXG4gICAgY29uc3QgZWRnZVRvT3JpZ2luQ29uZmlnWWFtbCA9IE1pY3JvQXBwc0VkZ2VUb09yaWdpbi5nZW5lcmF0ZUVkZ2VUb09yaWdpbkNvbmZpZyh7XG4gICAgICBvcmlnaW5SZWdpb246IG9yaWdpblJlZ2lvbiB8fCBBd3MuUkVHSU9OLFxuICAgICAgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXIsXG4gICAgICByZXBsYWNlSG9zdEhlYWRlcixcbiAgICAgIHNpZ25pbmdNb2RlOiBzaWduaW5nTW9kZSA9PT0gJ25vbmUnID8gJycgOiBzaWduaW5nTW9kZSxcbiAgICAgIHJvb3RQYXRoUHJlZml4LFxuICAgICAgLi4uKHRhYmxlUnVsZXNBcm5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlUnVsZXNBcm4sXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcblxuICAgIC8vXG4gICAgLy8gQ3JlYXRlIHRoZSBFZGdlIHRvIE9yaWdpbiBGdW5jdGlvblxuICAgIC8vXG4gICAgY29uc3QgZWRnZVRvT3JpZ2luRnVuY1Byb3BzOiBPbWl0PGxhbWJkYS5GdW5jdGlvblByb3BzLCAnaGFuZGxlcicgfCAnY29kZSc+ID0ge1xuICAgICAgZnVuY3Rpb25OYW1lOiBhc3NldE5hbWVSb290ID8gYCR7YXNzZXROYW1lUm9vdH0tZWRnZS10by1vcmlnaW4ke2Fzc2V0TmFtZVN1ZmZpeH1gIDogdW5kZWZpbmVkLFxuICAgICAgbWVtb3J5U2l6ZTogMTc2OSxcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgICAgLy8gVGhpcyBjYW4ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBodHRwQXBpIGJlY2F1c2UgaXQgd291bGQgbWVhblxuICAgICAgICAvLyB0aGUgcGFyZW50IHN0YWNrICh0aGlzIHN0YWNrKSBoYXMgdG8gYmUgY3JlYXRlZCBiZWZvcmUgdGhlIHVzLWVhc3QtMVxuICAgICAgICAvLyBjaGlsZCBzdGFjayBmb3IgdGhlIEVkZ2UgTGFtYmRhIEZ1bmN0aW9uLlxuICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIHVzZSBhIHRhZy1iYXNlZCBwb2xpY3kgdG8gYWxsb3cgdGhlIEVkZ2UgRnVuY3Rpb25cbiAgICAgICAgLy8gdG8gaW52b2tlIGFueSBBUEkgR2F0ZXdheSBBUEkgdGhhdCB3ZSBhcHBseSBhIHRhZyB0b1xuICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZWRnZSBmdW5jdGlvbiB0byBzaWduIGZvciBhbGwgcmVnaW9ucyBzaW5jZVxuICAgICAgICAvLyB3ZSBtYXkgdXNlIGN1c3RvbSBjbG9zZXN0IHJlZ2lvbiBpbiB0aGUgZnV0dXJlLlxuICAgICAgICAuLi4oc2V0dXBBcGlHYXRld2F5UGVybWlzc2lvbnNcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFsnZXhlY3V0ZS1hcGk6SW52b2tlJ10sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6ZXhlY3V0ZS1hcGk6Kjoke0F3cy5BQ0NPVU5UX0lEfToqLyovKi8qYF0sXG4gICAgICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgQVBJIEdhdGV3YXkgYWNjZXNzIGNhbm5vdCBiZSByZXN0cmljdGVkIHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gdGFncyBvbiB0aGUgdGFyZ2V0IHJlc291cmNlXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2FjY2Vzc190YWdzLmh0bWxcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2F3cy1zZXJ2aWNlcy10aGF0LXdvcmstd2l0aC1pYW0uaHRtbCNuZXR3b3JraW5nX3N2Y3NcbiAgICAgICAgICAgICAgICAvLyBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgLy8gICAvLyBUT0RPOiBTZXQgdGhpcyB0byBhIHN0cmluZyB1bmlxdWUgdG8gZWFjaCBzdGFja1xuICAgICAgICAgICAgICAgIC8vICAgU3RyaW5nRXF1YWxzOiB7ICdhd3M6UmVzb3VyY2VUYWcvbWljcm9hcHAtbWFuYWdlZCc6ICd0cnVlJyB9LFxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAvL1xuICAgICAgICAvLyBHcmFudCBwZXJtaXNzaW9uIHRvIGludm9rZSB0YWdnZWQgRnVuY3Rpb24gVVJMc1xuICAgICAgICAvL1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb25VcmwnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpsYW1iZGE6Kjoke0F3cy5BQ0NPVU5UX0lEfToqYF0sXG4gICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7ICdhd3M6UmVzb3VyY2VUYWcvbWljcm9hcHAtbWFuYWdlZCc6ICd0cnVlJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIC4uLihyZW1vdmFsUG9saWN5ID8geyByZW1vdmFsUG9saWN5IH0gOiB7fSksXG4gICAgfTtcbiAgICBjb25zdCByb290RGlzdFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnbWljcm9hcHBzLWVkZ2UtdG8tb3JpZ2luJywgJ2Rpc3QnKTtcbiAgICBjb25zdCByb290RGlzdEV4aXN0cyA9IGV4aXN0c1N5bmMocGF0aC5qb2luKHJvb3REaXN0UGF0aCwgJ2luZGV4LmpzJykpO1xuICAgIGNvbnN0IGxvY2FsRGlzdFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbWljcm9hcHBzLWVkZ2UtdG8tb3JpZ2luJyk7XG4gICAgY29uc3QgbG9jYWxEaXN0RXhpc3RzID0gZXhpc3RzU3luYyhwYXRoLmpvaW4obG9jYWxEaXN0UGF0aCwgJ2luZGV4LmpzJykpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnICYmIHJvb3REaXN0RXhpc3RzKSB7XG4gICAgICAvLyBUaGlzIGlzIGZvciB0ZXN0cyBydW4gdW5kZXIgamVzdCAtIFByZWZlciByb290IGRpc3QgYnVuZGxlXG4gICAgICAvLyBUaGlzIGlzIGFsc28gZm9yIGFueXRpbWUgd2hlbiB0aGUgZWRnZSBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGJ1bmRsZWRcbiAgICAgIHRoaXMuX2VkZ2VUb09yaWdpbkZ1bmN0aW9uID0gdGhpcy5jcmVhdGVFZGdlRnVuY3Rpb24oXG4gICAgICAgIHJvb3REaXN0UGF0aCxcbiAgICAgICAgZWRnZVRvT3JpZ2luQ29uZmlnWWFtbCxcbiAgICAgICAgZWRnZVRvT3JpZ2luRnVuY1Byb3BzLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsRGlzdEV4aXN0cykge1xuICAgICAgLy8gUHJlZmVyIGxvY2FsIGRpc3QgYWJvdmUgcm9vdCBkaXN0IGlmIGJvdGggZXhpc3QgKHdoZW4gYnVpbGRpbmcgZm9yIGRpc3RyaWJ1dGlvbilcbiAgICAgIHRoaXMuX2VkZ2VUb09yaWdpbkZ1bmN0aW9uID0gdGhpcy5jcmVhdGVFZGdlRnVuY3Rpb24oXG4gICAgICAgIGxvY2FsRGlzdFBhdGgsXG4gICAgICAgIGVkZ2VUb09yaWdpbkNvbmZpZ1lhbWwsXG4gICAgICAgIGVkZ2VUb09yaWdpbkZ1bmNQcm9wcyxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyb290RGlzdEV4aXN0cykge1xuICAgICAgLy8gVXNlIGxvY2FsIGRpc3QgaWYgaXQgZXhpc3RzICh3aGVuIGRlcGxveWluZyBmcm9tIENESyBpbiB0aGlzIHJlcG8pXG4gICAgICB0aGlzLl9lZGdlVG9PcmlnaW5GdW5jdGlvbiA9IHRoaXMuY3JlYXRlRWRnZUZ1bmN0aW9uKFxuICAgICAgICByb290RGlzdFBhdGgsXG4gICAgICAgIGVkZ2VUb09yaWdpbkNvbmZpZ1lhbWwsXG4gICAgICAgIGVkZ2VUb09yaWdpbkZ1bmNQcm9wcyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIGJ1bmRsaW5nIHRoZSBhcHAgYW5kIGJ1aWxkaW5nIHRoZSBDREsgbW9kdWxlXG4gICAgICAvLyBmb3IgZGlzdHJpYnV0aW9uLlxuICAgICAgd3JpdGVGaWxlU3luYyhcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ21pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbicsICdjb25maWcueW1sJyksXG4gICAgICAgIGVkZ2VUb09yaWdpbkNvbmZpZ1lhbWwsXG4gICAgICApO1xuXG4gICAgICAvLyBDb3B5IHRoZSBhcHBGcmFtZS5odG1sIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgYnVuZGxpbmcgd2lsbCBmaW5kIGl0XG4gICAgICBjb3B5RmlsZVN5bmMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdtaWNyb2FwcHMtcm91dGVyJywgJ2FwcEZyYW1lLmh0bWwnKSxcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ21pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbicsICdhcHBGcmFtZS5odG1sJyksXG4gICAgICApO1xuXG4gICAgICAvLyBUaGlzIGJ1aWxkcyB0aGUgZnVuY3Rpb24gZm9yIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBDREsgQ29uc3RydWN0XG4gICAgICAvLyBhbmQgd2lsbCBiZSB1c2VkIGR1cmluZyBsb2NhbCBidWlsZHMgYW5kIFBSIGJ1aWxkcyBvZiBtaWNyb2FwcHMtY29yZVxuICAgICAgLy8gaWYgdGhlIG1pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbiBmdW5jdGlvbiBpcyBub3QgYWxyZWFkeSBidW5kbGVkLlxuICAgICAgLy8gVGhpcyB3aWxsIGZhaWwgdG8gZGVwbG95IGluIGFueSByZWdpb24gb3RoZXIgdGhhbiB1cy1lYXN0LTFcbiAgICAgIHRoaXMuX2VkZ2VUb09yaWdpbkZ1bmN0aW9uID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCAnZWRnZS10by1hcGlnd3ktZnVuYycsIHtcbiAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdtaWNyb2FwcHMtZWRnZS10by1vcmlnaW4nLCAnc3JjJywgJ2luZGV4LnRzJyksXG4gICAgICAgIGhhbmRsZXI6ICdoYW5kbGVyJyxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgYmVmb3JlSW5zdGFsbDogKCkgPT4gW10sXG4gICAgICAgICAgICBiZWZvcmVCdW5kbGluZzogKCkgPT4gW10sXG4gICAgICAgICAgICBhZnRlckJ1bmRsaW5nOiAoX2lucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIC8vIDIwMjItMTAtMDIgLSBOb3RlIHRoYXQgdGhpcyBpcyBpZ25vcmluZyB0aGUgZ2VuZXJhdGVkIGNvbmZpZ1xuICAgICAgICAgICAgICAvLyBmaWxlIGFib3ZlIGFuZCBpbmNsdWRpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUgY29uZmlnIGZpbGVcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBgJHtvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInID8gJ2NvcHknIDogJ2NwJ30gJHtwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgICAgICAgICAgICAnLi4nLFxuICAgICAgICAgICAgICAgICAgJy4uJyxcbiAgICAgICAgICAgICAgICAgICcuLicsXG4gICAgICAgICAgICAgICAgICAnY29uZmlncycsXG4gICAgICAgICAgICAgICAgICAnbWljcm9hcHBzLWVkZ2UtdG8tb3JpZ2luJyxcbiAgICAgICAgICAgICAgICAgICdjb25maWcueW1sJyxcbiAgICAgICAgICAgICAgICApfSAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgIGAke29zLnBsYXRmb3JtKCkgPT09ICd3aW4zMicgPyAnY29weScgOiAnY3AnfSAke3BhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgICAgICAgICAgICcuLicsXG4gICAgICAgICAgICAgICAgICAnLi4nLFxuICAgICAgICAgICAgICAgICAgJ21pY3JvYXBwcy1yb3V0ZXInLFxuICAgICAgICAgICAgICAgICAgJ2FwcEZyYW1lLmh0bWwnLFxuICAgICAgICAgICAgICAgICl9ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmVkZ2VUb09yaWdpbkZ1bmNQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2VkZ2VUb09yaWdpbkxhbWJkYXMgPSBbXG4gICAgICB7XG4gICAgICAgIGV2ZW50VHlwZTogY2YuTGFtYmRhRWRnZUV2ZW50VHlwZS5PUklHSU5fUkVRVUVTVCxcbiAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiB0aGlzLl9lZGdlVG9PcmlnaW5GdW5jdGlvbi5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgaW5jbHVkZUJvZHk6IHRydWUsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBHcmFudCBhY2Nlc3MgdG8gdGhlIHJ1bGVzIHRhYmxlXG4gICAgaWYgKHRhYmxlUnVsZXNBcm4pIHtcbiAgICAgIGNvbnN0IHRhYmxlUnVsZXMgPSBkeW5hbW9kYi5UYWJsZS5mcm9tVGFibGVOYW1lKHRoaXMsICd0YWJsZVJ1bGVzJywgdGFibGVSdWxlc0Fybik7XG4gICAgICB0YWJsZVJ1bGVzLmdyYW50UmVhZERhdGEodGhpcy5fZWRnZVRvT3JpZ2luRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoIHRoZSBzdGFjayBuYW1lIHRvIG1ha2UgdGhlIEVkZ2VGdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZSB1bmlxdWVcbiAgICpcbiAgICogQHBhcmFtIHN0YWNrXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcml2YXRlIGhhc2hTdGFja05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoU3RhY2sub2YodGhpcykuc3RhY2tOYW1lKS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCA4KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWRnZUZ1bmN0aW9uKFxuICAgIGRpc3RQYXRoOiBzdHJpbmcsXG4gICAgZWRnZVRvT3JpZ2luQ29uZmlnWWFtbDogc3RyaW5nLFxuICAgIGVkZ2VUb09yaWdpbkZ1bmNQcm9wczogT21pdDxsYW1iZGEuRnVuY3Rpb25Qcm9wcywgJ2hhbmRsZXInIHwgJ2NvZGUnPixcbiAgKSB7XG4gICAgd3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oZGlzdFBhdGgsICdjb25maWcueW1sJyksIGVkZ2VUb09yaWdpbkNvbmZpZ1lhbWwpO1xuXG4gICAgLy8gU2tpcCB0aGUgY29weSBvZiBhcHBGcmFtZS5odG1sIG9uIGRlcGxveWVkIG1vZHVsZXNcbiAgICBpZiAoIV9fZGlybmFtZS5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHtcbiAgICAgIGNvcHlGaWxlU3luYyhcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ21pY3JvYXBwcy1yb3V0ZXInLCAnYXBwRnJhbWUuaHRtbCcpLFxuICAgICAgICBwYXRoLmpvaW4oZGlzdFBhdGgsICdhcHBGcmFtZS5odG1sJyksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGNsdWRlIHZhcnlpbmcgcGVyIHN0YWNrIG5hbWUgaXMgYSBrbHVkZ2UgdG8gZ2V0IHRoZSBhc3NldCBidW5kbGVkXG4gICAgLy8gd2l0aCB0aGUgc3RhY2stc3BlY2lmYyBjb25maWcueW1sIGZpbGUsIG90aGVyd2lzZSB0aGV5IGFsbCBnZXQgdGhlIGZpbGVcbiAgICAvLyBnZW5lcmF0ZWQgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgY29uc3RydWN0IHdpdGhpbiBhbnkgc3RhY2tcbiAgICAvLyBpbiB0aGUgYXBwLlxuICAgIGNvbnN0IGNvZGUgPSBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoZGlzdFBhdGgsIHsgZXhjbHVkZTogW2AqKi8ke1N0YWNrLm9mKHRoaXMpfWBdIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tIYXNoID0gdGhpcy5oYXNoU3RhY2tOYW1lKCkgPz8gJyc7XG5cbiAgICAvLyBFZGdlRnVuY3Rpb24gaGFzIGEgYnVnIHdoZXJlIGl0IHdpbGwgZ2VuZXJhdGUgdGhlIHNhbWUgcGFyYW1ldGVyXG4gICAgLy8gbmFtZSBhY3Jvc3MgbXVsdGlwbGUgc3RhY2tzIGluIHRoZSBzYW1lIHJlZ2lvbiBpZiB0aGUgaWQgcGFyYW0gaXMgY29uc3RhbnRcbiAgICBjb25zdCBlZGdlID0gbmV3IGNmLmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24odGhpcywgYGVkZ2UtdG8tYXBpZ3d5LWZ1bmMtJHtzdGFja0hhc2h9YCwge1xuICAgICAgc3RhY2tJZDogYG1pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbi0ke3N0YWNrSGFzaH1gLFxuICAgICAgY29kZSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogYG1pY3JvYXBwcy1lZGdlLXRvLW9yaWdpbi0ke3N0YWNrSGFzaH1gLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgLi4uZWRnZVRvT3JpZ2luRnVuY1Byb3BzLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YoZWRnZSkuYWRkKCdOYW1lJywgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lKTtcblxuICAgIHJldHVybiBlZGdlO1xuICB9XG59XG4iXX0=
|
package/lib/MicroAppsS3.d.ts
CHANGED
|
@@ -72,6 +72,15 @@ export interface MicroAppsS3Props {
|
|
|
72
72
|
* @default none
|
|
73
73
|
*/
|
|
74
74
|
readonly assetNameSuffix?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Optional Origin Shield Region
|
|
77
|
+
*
|
|
78
|
+
* This should be the region where the DynamoDB is located so the
|
|
79
|
+
* EdgeToOrigin calls have the lowest latency (~1 ms).
|
|
80
|
+
*
|
|
81
|
+
* @default - none
|
|
82
|
+
*/
|
|
83
|
+
readonly originShieldRegion?: string;
|
|
75
84
|
}
|
|
76
85
|
/**
|
|
77
86
|
* Create the durable MicroApps S3 Buckets
|
package/lib/MicroAppsS3.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicroAppsS3.d.ts","sourceRoot":"","sources":["../src/MicroAppsS3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAEhD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MicroAppsS3.d.ts","sourceRoot":"","sources":["../src/MicroAppsS3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAEhD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,SAAU,YAAW,YAAY;IAChE,OAAO,CAAC,WAAW,CAAa;IAChC,IAAW,UAAU,IAAI,EAAE,CAAC,OAAO,CAElC;IAED,OAAO,CAAC,cAAc,CAA0B;IAChD,IAAW,aAAa,IAAI,EAAE,CAAC,oBAAoB,CAElD;IAED,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,IAAW,gBAAgB,IAAI,SAAS,CAAC,QAAQ,CAEhD;IAED,OAAO,CAAC,kBAAkB,CAAa;IACvC,IAAW,iBAAiB,IAAI,EAAE,CAAC,OAAO,CAEzC;IAED,OAAO,CAAC,WAAW,CAAa;IAChC,IAAW,UAAU,IAAI,EAAE,CAAC,OAAO,CAElC;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB;CAiDnE"}
|