terraform-cdk-serverless-github-actions-runner-controller 0.0.7 → 0.0.8

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/lib/lib/aws.js CHANGED
@@ -23,180 +23,180 @@ const variables_1 = require("./variables");
23
23
  class Aws extends constructs_1.Construct {
24
24
  constructor(scope, id, props) {
25
25
  super(scope, id);
26
- new provider_1.AwsProvider(this, 'aws', {});
27
- const identity = new data_aws_caller_identity_1.DataAwsCallerIdentity(this, 'Identity', {});
28
- const region = new data_aws_region_1.DataAwsRegion(this, 'Region', {});
26
+ new provider_1.AwsProvider(this, "aws", {});
27
+ const identity = new data_aws_caller_identity_1.DataAwsCallerIdentity(this, "Identity", {});
28
+ const region = new data_aws_region_1.DataAwsRegion(this, "Region", {});
29
29
  const { pat, githubConfigUrl, autoscalerImage } = (0, variables_1.commonVariables)(this);
30
- const cluster = new ecs_cluster_1.EcsCluster(this, 'Cluster', {
30
+ const cluster = new ecs_cluster_1.EcsCluster(this, "Cluster", {
31
31
  name: props.clusterName,
32
32
  });
33
- const subnets = new data_aws_subnets_1.DataAwsSubnets(this, 'Subnets', {
33
+ const subnets = new data_aws_subnets_1.DataAwsSubnets(this, "Subnets", {
34
34
  filter: props.subnetFilters,
35
35
  });
36
- const securityGroups = new data_aws_security_groups_1.DataAwsSecurityGroups(this, 'SecurityGroups', {
36
+ const securityGroups = new data_aws_security_groups_1.DataAwsSecurityGroups(this, "SecurityGroups", {
37
37
  filter: props.securityGroupFilters,
38
38
  });
39
- const autoscalerRole = new iam_role_1.IamRole(this, 'AutoscalerRole', {
39
+ const autoscalerRole = new iam_role_1.IamRole(this, "AutoscalerRole", {
40
40
  assumeRolePolicy: cdktf_1.Fn.jsonencode({
41
- Version: '2012-10-17',
41
+ Version: "2012-10-17",
42
42
  Statement: [
43
43
  {
44
- Effect: 'Allow',
44
+ Effect: "Allow",
45
45
  Principal: {
46
- Service: 'ecs-tasks.amazonaws.com',
46
+ Service: "ecs-tasks.amazonaws.com",
47
47
  },
48
- Action: 'sts:AssumeRole',
48
+ Action: "sts:AssumeRole",
49
49
  },
50
50
  ],
51
51
  }),
52
52
  });
53
- const runnerRole = new iam_role_1.IamRole(this, 'RunnerRole', {
53
+ const runnerRole = new iam_role_1.IamRole(this, "RunnerRole", {
54
54
  assumeRolePolicy: cdktf_1.Fn.jsonencode({
55
- Version: '2012-10-17',
55
+ Version: "2012-10-17",
56
56
  Statement: [
57
57
  {
58
- Effect: 'Allow',
58
+ Effect: "Allow",
59
59
  Principal: {
60
- Service: 'ecs-tasks.amazonaws.com',
60
+ Service: "ecs-tasks.amazonaws.com",
61
61
  },
62
- Action: 'sts:AssumeRole',
62
+ Action: "sts:AssumeRole",
63
63
  },
64
64
  ],
65
65
  }),
66
66
  });
67
- const ecsTaskExecutionRole = new iam_role_1.IamRole(this, 'TaskExecutionRole', {
67
+ const ecsTaskExecutionRole = new iam_role_1.IamRole(this, "TaskExecutionRole", {
68
68
  assumeRolePolicy: cdktf_1.Fn.jsonencode({
69
- Version: '2012-10-17',
69
+ Version: "2012-10-17",
70
70
  Statement: [
71
71
  {
72
- Effect: 'Allow',
72
+ Effect: "Allow",
73
73
  Principal: {
74
- Service: 'ecs-tasks.amazonaws.com',
74
+ Service: "ecs-tasks.amazonaws.com",
75
75
  },
76
- Action: 'sts:AssumeRole',
76
+ Action: "sts:AssumeRole",
77
77
  },
78
78
  ],
79
79
  }),
80
80
  });
81
- new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'TeskExecutionRoleAttachment', {
82
- policyArn: 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy',
81
+ new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, "TeskExecutionRoleAttachment", {
82
+ policyArn: "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy",
83
83
  role: ecsTaskExecutionRole.name,
84
84
  });
85
- const runnerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'RunnerLogGroup', {
86
- name: '/ecs/GHA',
85
+ const runnerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, "RunnerLogGroup", {
86
+ name: "/ecs/GHA",
87
87
  });
88
- const autoscalerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'AutoscalerLogGroup', {
89
- name: '/ecs/Autoscaler',
88
+ const autoscalerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, "AutoscalerLogGroup", {
89
+ name: "/ecs/Autoscaler",
90
90
  });
91
91
  const autoscalerContainerDefinition = {
92
- name: 'autoscaler',
92
+ name: "autoscaler",
93
93
  image: autoscalerImage.stringValue,
94
94
  essential: true,
95
95
  environment: [
96
96
  {
97
- name: 'PAT',
97
+ name: "PAT",
98
98
  value: pat.value,
99
99
  },
100
100
  {
101
- name: 'GITHUB_CONFIG_URL',
101
+ name: "GITHUB_CONFIG_URL",
102
102
  value: githubConfigUrl.value,
103
103
  },
104
104
  {
105
- name: 'ECS_CLUSTER',
105
+ name: "ECS_CLUSTER",
106
106
  value: cluster.arn,
107
107
  },
108
108
  {
109
- name: 'ECS_SUBNETS',
110
- value: cdktf_1.Fn.join(',', subnets.ids),
109
+ name: "ECS_SUBNETS",
110
+ value: cdktf_1.Fn.join(",", subnets.ids),
111
111
  },
112
112
  {
113
- name: 'ECS_SECURITY_GROUPS',
114
- value: cdktf_1.Fn.join(',', securityGroups.ids),
113
+ name: "ECS_SECURITY_GROUPS",
114
+ value: cdktf_1.Fn.join(",", securityGroups.ids),
115
115
  },
116
116
  {
117
- name: 'SCALE_SET_NAME',
118
- value: 'ecs-runner-set',
117
+ name: "SCALE_SET_NAME",
118
+ value: "ecs-runner-set",
119
119
  },
120
120
  ],
121
121
  logConfiguration: {
122
- logDriver: 'awslogs',
122
+ logDriver: "awslogs",
123
123
  options: {
124
- 'awslogs-group': autoscalerLogGroup.name,
125
- 'awslogs-region': region.name,
126
- 'awslogs-stream-prefix': 'ecs',
124
+ "awslogs-group": autoscalerLogGroup.name,
125
+ "awslogs-region": region.name,
126
+ "awslogs-stream-prefix": "ecs",
127
127
  },
128
128
  },
129
129
  };
130
130
  const runnerVolume = [];
131
131
  const runnerContainerDefinition = {
132
- name: 'runner',
133
- image: 'ghcr.io/actions/actions-runner:2.323.0',
132
+ name: "runner",
133
+ image: "ghcr.io/actions/actions-runner:2.323.0",
134
134
  essential: true,
135
- entryPoint: ['/home/runner/run.sh'],
135
+ entryPoint: ["/home/runner/run.sh"],
136
136
  environment: [
137
137
  {
138
- name: 'ECS_CLUSTER_NAME',
138
+ name: "ECS_CLUSTER_NAME",
139
139
  value: cluster.name,
140
140
  },
141
141
  {
142
- name: 'ACTIONS_RUNNER_POD_NAME',
143
- value: 'gha-pod',
142
+ name: "ACTIONS_RUNNER_POD_NAME",
143
+ value: "gha-pod",
144
144
  },
145
145
  {
146
- name: 'ECS_SUBNETS',
147
- value: cdktf_1.Fn.join(',', subnets.ids),
146
+ name: "ECS_SUBNETS",
147
+ value: cdktf_1.Fn.join(",", subnets.ids),
148
148
  },
149
149
  {
150
- name: 'ECS_SECURITY_GROUPS',
151
- value: cdktf_1.Fn.join(',', securityGroups.ids),
150
+ name: "ECS_SECURITY_GROUPS",
151
+ value: cdktf_1.Fn.join(",", securityGroups.ids),
152
152
  },
153
153
  {
154
- name: 'ECS_TASK_ROLE',
154
+ name: "ECS_TASK_ROLE",
155
155
  value: runnerRole.arn,
156
156
  },
157
157
  {
158
- name: 'ECS_EXECUTION_ROLE',
158
+ name: "ECS_EXECUTION_ROLE",
159
159
  value: ecsTaskExecutionRole.arn,
160
160
  },
161
161
  ],
162
162
  mountPoints: [],
163
163
  logConfiguration: {
164
- logDriver: 'awslogs',
164
+ logDriver: "awslogs",
165
165
  options: {
166
- 'awslogs-group': runnerLogGroup.name,
167
- 'awslogs-region': region.name,
168
- 'awslogs-stream-prefix': 'ecs',
166
+ "awslogs-group": runnerLogGroup.name,
167
+ "awslogs-region": region.name,
168
+ "awslogs-stream-prefix": "ecs",
169
169
  },
170
170
  },
171
171
  };
172
172
  if (props.containerSupport) {
173
173
  // EFS volume to allow sharing data between tasks
174
- const efs = new efs_file_system_1.EfsFileSystem(this, 'efs', {
175
- throughputMode: 'elastic',
174
+ const efs = new efs_file_system_1.EfsFileSystem(this, "efs", {
175
+ throughputMode: "elastic",
176
176
  tags: {
177
- Name: 'work',
177
+ Name: "work",
178
178
  },
179
179
  });
180
- const externalsEfs = new efs_file_system_1.EfsFileSystem(this, 'externalsEfs', {
181
- throughputMode: 'elastic',
180
+ const externalsEfs = new efs_file_system_1.EfsFileSystem(this, "externalsEfs", {
181
+ throughputMode: "elastic",
182
182
  tags: {
183
- Name: 'externals',
183
+ Name: "externals",
184
184
  },
185
185
  });
186
186
  // Each subnet in VPC are on different AZs, so creating mountpoint to each
187
187
  const iterator = cdktf_1.TerraformIterator.fromList(subnets.ids);
188
- new efs_mount_target_1.EfsMountTarget(this, 'EfsMountTarget', {
188
+ new efs_mount_target_1.EfsMountTarget(this, "EfsMountTarget", {
189
189
  forEach: iterator,
190
190
  fileSystemId: efs.id,
191
191
  subnetId: iterator.value,
192
192
  });
193
- new efs_mount_target_1.EfsMountTarget(this, 'ExternalsEfsMountTarget', {
193
+ new efs_mount_target_1.EfsMountTarget(this, "ExternalsEfsMountTarget", {
194
194
  forEach: iterator,
195
195
  fileSystemId: externalsEfs.id,
196
196
  subnetId: iterator.value,
197
197
  });
198
- const runnerVolumeName = 'work';
199
- const externalsVolumeName = 'externals';
198
+ const runnerVolumeName = "work";
199
+ const externalsVolumeName = "externals";
200
200
  runnerVolume.push({
201
201
  name: runnerVolumeName,
202
202
  efsVolumeConfiguration: {
@@ -212,87 +212,87 @@ class Aws extends constructs_1.Construct {
212
212
  });
213
213
  runnerContainerDefinition.mountPoints?.push({
214
214
  sourceVolume: runnerVolumeName,
215
- containerPath: '/tmp/_work',
215
+ containerPath: "/tmp/_work",
216
216
  }, {
217
217
  sourceVolume: externalsVolumeName,
218
- containerPath: '/tmp/externals',
218
+ containerPath: "/tmp/externals",
219
219
  });
220
220
  runnerContainerDefinition.environment?.push({
221
- name: 'EFS_ID',
221
+ name: "EFS_ID",
222
222
  value: efs.id,
223
223
  }, {
224
- name: 'EXTERNALS_EFS_ID',
224
+ name: "EXTERNALS_EFS_ID",
225
225
  value: externalsEfs.id,
226
226
  }, {
227
- name: 'ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER',
228
- value: 'false',
227
+ name: "ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER",
228
+ value: "false",
229
229
  });
230
230
  runnerContainerDefinition.command = [
231
- '/bin/sh',
232
- '-c',
233
- 'export EXECID=$(cat /proc/sys/kernel/random/uuid) && sudo mkdir -p /tmp/_work/$EXECID && sudo chown runner:runner /tmp/_work/$EXECID && ln -s /tmp/_work/$EXECID _work && sudo chown runner:runner /tmp/externals && /home/runner/run.sh ; sudo rm -r /tmp/_work/$EXECID',
231
+ "/bin/sh",
232
+ "-c",
233
+ "export EXECID=$(cat /proc/sys/kernel/random/uuid) && sudo mkdir -p /tmp/_work/$EXECID && sudo chown runner:runner /tmp/_work/$EXECID && ln -s /tmp/_work/$EXECID _work && sudo chown runner:runner /tmp/externals && /home/runner/run.sh ; sudo rm -r /tmp/_work/$EXECID",
234
234
  ];
235
- runnerContainerDefinition.image = 'ghcr.io/hi-fi/actions-runner:ecs';
235
+ runnerContainerDefinition.image = "ghcr.io/hi-fi/actions-runner:ecs";
236
236
  }
237
237
  // TODO: Images through caching: https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html (requires authentication)
238
238
  // TODO: Pass Execution role to job task: https://www.ernestchiang.com/en/posts/2021/using-amazon-ecs-exec/#1-grant-permissions-ecs-task-iam-role
239
239
  // TODO: Pass Task role to job task
240
- const runnerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, 'RunnerTaskDefinition', {
241
- family: 'GHA',
240
+ const runnerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, "RunnerTaskDefinition", {
241
+ family: "GHA",
242
242
  taskRoleArn: runnerRole.arn,
243
243
  executionRoleArn: ecsTaskExecutionRole.arn,
244
244
  containerDefinitions: cdktf_1.Fn.jsonencode([runnerContainerDefinition]),
245
- cpu: '1024',
246
- memory: '2048',
247
- requiresCompatibilities: ['FARGATE'],
245
+ cpu: "1024",
246
+ memory: "2048",
247
+ requiresCompatibilities: ["FARGATE"],
248
248
  runtimePlatform: {
249
- cpuArchitecture: 'X86_64',
250
- operatingSystemFamily: 'LINUX',
249
+ cpuArchitecture: "X86_64",
250
+ operatingSystemFamily: "LINUX",
251
251
  },
252
- networkMode: 'awsvpc',
252
+ networkMode: "awsvpc",
253
253
  volume: runnerVolume,
254
254
  });
255
255
  autoscalerContainerDefinition.environment?.push({
256
- name: 'TASK_DEFINITION_ARN',
256
+ name: "TASK_DEFINITION_ARN",
257
257
  value: runnerTaskDefinition.arn,
258
258
  });
259
- const autoscalerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, 'AutoscalerTaskDefinition', {
260
- family: 'Autoscaler',
259
+ const autoscalerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, "AutoscalerTaskDefinition", {
260
+ family: "Autoscaler",
261
261
  taskRoleArn: autoscalerRole.arn,
262
262
  executionRoleArn: ecsTaskExecutionRole.arn,
263
263
  containerDefinitions: cdktf_1.Fn.jsonencode([autoscalerContainerDefinition]),
264
- cpu: '256',
265
- memory: '512',
266
- requiresCompatibilities: ['FARGATE'],
264
+ cpu: "256",
265
+ memory: "512",
266
+ requiresCompatibilities: ["FARGATE"],
267
267
  runtimePlatform: {
268
- cpuArchitecture: 'X86_64',
269
- operatingSystemFamily: 'LINUX',
268
+ cpuArchitecture: "X86_64",
269
+ operatingSystemFamily: "LINUX",
270
270
  },
271
- networkMode: 'awsvpc',
271
+ networkMode: "awsvpc",
272
272
  });
273
273
  const runnerPolicyDefinition = {
274
- Version: '2012-10-17',
274
+ Version: "2012-10-17",
275
275
  Statement: [
276
276
  {
277
- Sid: 'StartandMonitorTask',
278
- Effect: 'Allow',
277
+ Sid: "StartandMonitorTask",
278
+ Effect: "Allow",
279
279
  Action: [
280
- 'ecs:RunTask',
281
- 'ecs:TagResource',
282
- 'ecs:ListTaskDefinitions',
283
- 'ecs:ListTasks',
284
- 'ecs:StopTask',
285
- 'ecs:RegisterTaskDefinition',
286
- 'ecs:DescribeTaskDefinition',
287
- 'ecs:DeregisterTaskDefinition',
288
- 'ecs:DeleteTaskDefinitions',
289
- 'ecs:ExecuteCommand',
280
+ "ecs:RunTask",
281
+ "ecs:TagResource",
282
+ "ecs:ListTaskDefinitions",
283
+ "ecs:ListTasks",
284
+ "ecs:StopTask",
285
+ "ecs:RegisterTaskDefinition",
286
+ "ecs:DescribeTaskDefinition",
287
+ "ecs:DeregisterTaskDefinition",
288
+ "ecs:DeleteTaskDefinitions",
289
+ "ecs:ExecuteCommand",
290
290
  // Needed for waiting
291
- 'ecs:DescribeTasks',
292
- 'logs:GetLogEvents',
293
- 'iam:PassRole',
294
- 'logs:StartLiveTail',
295
- 'logs:CreateLogStream',
291
+ "ecs:DescribeTasks",
292
+ "logs:GetLogEvents",
293
+ "iam:PassRole",
294
+ "logs:StartLiveTail",
295
+ "logs:CreateLogStream",
296
296
  ],
297
297
  Resource: [
298
298
  `arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
@@ -302,48 +302,48 @@ class Aws extends constructs_1.Construct {
302
302
  runnerRole.arn,
303
303
  `arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
304
304
  //TODO: reorder rights so that listing is only one with star
305
- '*',
305
+ "*",
306
306
  ],
307
307
  },
308
308
  {
309
- Sid: 'GetVpcInfo',
310
- Effect: 'Allow',
311
- Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
312
- Resource: '*',
309
+ Sid: "GetVpcInfo",
310
+ Effect: "Allow",
311
+ Action: ["ec2:DescribeSubnets", "ec2:DescribeSecurityGroups"],
312
+ Resource: "*",
313
313
  },
314
314
  {
315
- Sid: 'ExecCommands',
316
- Effect: 'Allow',
315
+ Sid: "ExecCommands",
316
+ Effect: "Allow",
317
317
  Action: [
318
- 'ssmmessages:CreateControlChannel',
319
- 'ssmmessages:CreateDataChannel',
320
- 'ssmmessages:OpenControlChannel',
321
- 'ssmmessages:OpenDataChannel',
318
+ "ssmmessages:CreateControlChannel",
319
+ "ssmmessages:CreateDataChannel",
320
+ "ssmmessages:OpenControlChannel",
321
+ "ssmmessages:OpenDataChannel",
322
322
  ],
323
- Resource: '*',
323
+ Resource: "*",
324
324
  },
325
325
  ],
326
326
  };
327
- const runnerPolicy = new iam_policy_1.IamPolicy(this, 'RunnerPolicy', {
327
+ const runnerPolicy = new iam_policy_1.IamPolicy(this, "RunnerPolicy", {
328
328
  policy: cdktf_1.Fn.jsonencode(runnerPolicyDefinition),
329
329
  });
330
- new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'RunnerPolicyAttachment', {
330
+ new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, "RunnerPolicyAttachment", {
331
331
  policyArn: runnerPolicy.arn,
332
332
  role: runnerRole.name,
333
333
  });
334
- const autoscalerPolicy = new iam_policy_1.IamPolicy(this, 'AutoscalerPolicy', {
334
+ const autoscalerPolicy = new iam_policy_1.IamPolicy(this, "AutoscalerPolicy", {
335
335
  policy: cdktf_1.Fn.jsonencode({
336
- Version: '2012-10-17',
336
+ Version: "2012-10-17",
337
337
  Statement: [
338
338
  {
339
- Sid: 'StartandMonitorTask',
340
- Effect: 'Allow',
339
+ Sid: "StartandMonitorTask",
340
+ Effect: "Allow",
341
341
  Action: [
342
- 'ecs:RunTask',
342
+ "ecs:RunTask",
343
343
  // Needed for waiting
344
- 'ecs:DescribeTasks',
345
- 'logs:GetLogEvents',
346
- 'iam:PassRole',
344
+ "ecs:DescribeTasks",
345
+ "logs:GetLogEvents",
346
+ "iam:PassRole",
347
347
  ],
348
348
  Resource: [
349
349
  `${runnerTaskDefinition.arnWithoutRevision}:*`,
@@ -355,23 +355,23 @@ class Aws extends constructs_1.Construct {
355
355
  ],
356
356
  },
357
357
  {
358
- Sid: 'GetVpcInfo',
359
- Effect: 'Allow',
360
- Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
361
- Resource: '*',
358
+ Sid: "GetVpcInfo",
359
+ Effect: "Allow",
360
+ Action: ["ec2:DescribeSubnets", "ec2:DescribeSecurityGroups"],
361
+ Resource: "*",
362
362
  },
363
363
  ],
364
364
  }),
365
365
  });
366
- new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'AutoscalerPolicyAttachment', {
366
+ new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, "AutoscalerPolicyAttachment", {
367
367
  policyArn: autoscalerPolicy.arn,
368
368
  role: autoscalerRole.name,
369
369
  });
370
- new ecs_service_1.EcsService(this, 'AutoscalerService', {
370
+ new ecs_service_1.EcsService(this, "AutoscalerService", {
371
371
  cluster: cluster.arn,
372
- name: 'autoscaler-service',
372
+ name: "autoscaler-service",
373
373
  desiredCount: 1,
374
- launchType: 'FARGATE',
374
+ launchType: "FARGATE",
375
375
  taskDefinition: autoscalerTaskDefinition.arnWithoutRevision,
376
376
  networkConfiguration: {
377
377
  assignPublicIp: true,
@@ -379,12 +379,12 @@ class Aws extends constructs_1.Construct {
379
379
  securityGroups: securityGroups.ids,
380
380
  },
381
381
  lifecycle: {
382
- ignoreChanges: ['desired_count'],
382
+ ignoreChanges: ["desired_count"],
383
383
  },
384
384
  });
385
385
  }
386
386
  }
387
387
  exports.Aws = Aws;
388
388
  _a = JSII_RTTI_SYMBOL_1;
389
- Aws[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Aws", version: "0.0.7" };
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RkFBaUY7QUFDakYsK0ZBQXdGO0FBQ3hGLDZFQUF1RTtBQUN2RSwrRkFHeUQ7QUFDekQsK0VBR2lEO0FBQ2pELHFFQUFnRTtBQUNoRSxxRUFBZ0U7QUFDaEUscUZBR29EO0FBQ3BELDZFQUF1RTtBQUN2RSwrRUFBeUU7QUFDekUsbUVBQThEO0FBQzlELCtEQUEwRDtBQUMxRCxtR0FBNEY7QUFDNUYsK0RBQThEO0FBQzlELGlDQUEwRDtBQUMxRCwyQ0FBc0M7QUFDdEMsMkNBQTZDO0FBaUI3QyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUNoQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLHNCQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdEQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBQSwyQkFBZSxFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXZFLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztTQUN4QixDQUFDLENBQUE7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNsRCxNQUFNLEVBQUUsS0FBSyxD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RSxtQkFBbUIsRUFBRTtZQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixZQUFZLEVBQUUsQ0FBQztZQUNmLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDM0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ3BCLGNBQWMsRUFBRSxjQUFjLENBQUMsR0FBRzthQUNuQztZQUNELFNBQVMsRUFBRTtnQkFDVCxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDakM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOztBQWxhSCxrQkFtYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJ1xuaW1wb3J0IHsgQ2xvdWR3YXRjaExvZ0dyb3VwIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvY2xvdWR3YXRjaC1sb2ctZ3JvdXAnXG5pbXBvcnQgeyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1jYWxsZXItaWRlbnRpdHknXG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtcmVnaW9uJ1xuaW1wb3J0IHtcbiAgRGF0YUF3c1NlY3VyaXR5R3JvdXBzLFxuICBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXIsXG59IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3VwcydcbmltcG9ydCB7XG4gIERhdGFBd3NTdWJuZXRzLFxuICBEYXRhQXdzU3VibmV0c0ZpbHRlcixcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3Mtc3VibmV0cydcbmltcG9ydCB7IEVjc0NsdXN0ZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3MtY2x1c3RlcidcbmltcG9ydCB7IEVjc1NlcnZpY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3Mtc2VydmljZSdcbmltcG9ydCB7XG4gIEVjc1Rhc2tEZWZpbml0aW9uLFxuICBFY3NUYXNrRGVmaW5pdGlvblZvbHVtZSxcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWNzLXRhc2stZGVmaW5pdGlvbidcbmltcG9ydCB7IEVmc0ZpbGVTeXN0ZW0gfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtZmlsZS1zeXN0ZW0nXG5pbXBvcnQgeyBFZnNNb3VudFRhcmdldCB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vmcy1tb3VudC10YXJnZXQnXG5pbXBvcnQgeyBJYW1Qb2xpY3kgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcG9saWN5J1xuaW1wb3J0IHsgSWFtUm9sZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2lhbS1yb2xlJ1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZS1wb2xpY3ktYXR0YWNobWVudCdcbmltcG9ydCB7IEF3c1Byb3ZpZGVyIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvcHJvdmlkZXInXG5pbXBvcnQgeyBGbiwgSVJlc29sdmFibGUsIFRlcnJhZm9ybUl0ZXJhdG9yIH0gZnJvbSAnY2RrdGYnXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJ1xuaW1wb3J0IHsgY29tbW9uVmFyaWFibGVzIH0gZnJvbSAnLi92YXJpYWJsZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUHJvcHMge1xuICAvLyBOYW1lIG9mIHRoZSBFQ1MgY2x1c3RlciB0byBjcmVhdGUgYW5kIHVzZS5cbiAgcmVhZG9ubHkgY2x1c3Rlck5hbWU6IHN0cmluZ1xuICAvLyBVdGlsaXplIHJ1bm5lci1jb250YWluZXItaG9va3MgdG8gYWxsb3cgc3VwcG9ydCBmb3Igc2VydmljZSBhbmQgYnVpbGQgY29udGFpbmVyIGFzIHdlbGwgYXMgY29udGFpbmVyIGFjdGlvbnMgYW5kIHN0ZXBzLlxuICByZWFkb25seSBjb250YWluZXJTdXBwb3J0OiBib29sZWFuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVTdWJuZXRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldEZpbHRlcnM/OiBEYXRhQXdzU3VibmV0c0ZpbHRlcltdIHwgSVJlc29sdmFibGVcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvcmVmZXJlbmNlL2VjMi9kZXNjcmliZS1zZWN1cml0eS1ncm91cHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cEZpbHRlcnM/OiBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXJbXSB8IElSZXNvbHZhYmxlXG59XG5cbmV4cG9ydCBjbGFzcyBBd3MgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBuZXcgQXdzUHJvdmlkZXIodGhpcywgJ2F3cycsIHt9KVxuXG4gICAgY29uc3QgaWRlbnRpdHkgPSBuZXcgRGF0YUF3c0NhbGxlcklkZW50aXR5KHRoaXMsICdJZGVudGl0eScsIHt9KVxuXG4gICAgY29uc3QgcmVnaW9uID0gbmV3IERhdGFBd3NSZWdpb24odGhpcywgJ1JlZ2lvbicsIHt9KVxuXG4gICAgY29uc3QgeyBwYXQsIGdpdGh1YkNvbmZpZ1VybCwgYXV0b3NjYWxlckltYWdlIH0gPSBjb21tb25WYXJpYWJsZXModGhpcylcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgRWNzQ2x1c3Rlcih0aGlzLCAnQ2x1c3RlcicsIHtcbiAgICAgIG5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdWJuZXRzID0gbmV3IERhdGFBd3NTdWJuZXRzKHRoaXMsICdTdWJuZXRzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zdWJuZXRGaWx0ZXJzLFxuICAgIH0pXG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IG5ldyBEYXRhQXdzU2VjdXJpdHlHcm91cHModGhpcywgJ1NlY3VyaXR5R3JvdXBzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zZWN1cml0eUdyb3VwRmlsdGVycyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXV0b3NjYWxlclJvbGUgPSBuZXcgSWFtUm9sZSh0aGlzLCAnQXV0b3NjYWxlclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBydW5uZXJSb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ1J1bm5lclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdUYXNrRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBTZXJ2aWNlOiAnZWNzLXRhc2tzLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSlcblxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnVGVza0V4ZWN1dGlvblJvbGVBdHRhY2htZW50Jywge1xuICAgICAgcG9saWN5QXJuOlxuICAgICAgICAnYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5JyxcbiAgICAgIHJvbGU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHJ1bm5lckxvZ0dyb3VwID0gbmV3IENsb3Vkd2F0Y2hMb2dHcm91cCh0aGlzLCAnUnVubmVyTG9nR3JvdXAnLCB7XG4gICAgICBuYW1lOiAnL2Vjcy9HSEEnLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyTG9nR3JvdXAgPSBuZXcgQ2xvdWR3YXRjaExvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgICdBdXRvc2NhbGVyTG9nR3JvdXAnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnL2Vjcy9BdXRvc2NhbGVyJyxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgY29uc3QgYXV0b3NjYWxlckNvbnRhaW5lckRlZmluaXRpb246IENvbnRhaW5lckRlZmluaXRpb24gPSB7XG4gICAgICBuYW1lOiAnYXV0b3NjYWxlcicsXG4gICAgICBpbWFnZTogYXV0b3NjYWxlckltYWdlLnN0cmluZ1ZhbHVlLFxuICAgICAgZXNzZW50aWFsOiB0cnVlLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQQVQnLFxuICAgICAgICAgIHZhbHVlOiBwYXQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnR0lUSFVCX0NPTkZJR19VUkwnLFxuICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX0NMVVNURVInLFxuICAgICAgICAgIHZhbHVlOiBjbHVzdGVyLmFybixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU1VCTkVUUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzdWJuZXRzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1NFQ1VSSVRZX0dST1VQUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2Vjcy1ydW5uZXItc2V0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBhdXRvc2NhbGVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1yZWdpb24nOiByZWdpb24ubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1zdHJlYW0tcHJlZml4JzogJ2VjcycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5lclZvbHVtZTogRWNzVGFza0RlZmluaXRpb25Wb2x1bWVbXSA9IFtdXG5cbiAgICBjb25zdCBydW5uZXJDb250YWluZXJEZWZpbml0aW9uOiBDb250YWluZXJEZWZpbml0aW9uID0ge1xuICAgICAgbmFtZTogJ3J1bm5lcicsXG4gICAgICBpbWFnZTogJ2doY3IuaW8vYWN0aW9ucy9hY3Rpb25zLXJ1bm5lcjoyLjMyMy4wJyxcbiAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgIGVudHJ5UG9pbnQ6IFsnL2hvbWUvcnVubmVyL3J1bi5zaCddLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfQ0xVU1RFUl9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5uYW1lLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1BPRF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2doYS1wb2QnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19TVUJORVRTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHN1Ym5ldHMuaWRzKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHNlY3VyaXR5R3JvdXBzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1RBU0tfUk9MRScsXG4gICAgICAgICAgdmFsdWU6IHJ1bm5lclJvbGUuYXJuLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19FWEVDVVRJT05fUk9MRScsXG4gICAgICAgICAgdmFsdWU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBtb3VudFBvaW50czogW10sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBydW5uZXJMb2dHcm91cC5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXJlZ2lvbic6IHJlZ2lvbi5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXN0cmVhbS1wcmVmaXgnOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclN1cHBvcnQpIHtcbiAgICAgIC8vIEVGUyB2b2x1bWUgdG8gYWxsb3cgc2hhcmluZyBkYXRhIGJldHdlZW4gdGFza3NcbiAgICAgIGNvbnN0IGVmcyA9IG5ldyBFZnNGaWxlU3lzdGVtKHRoaXMsICdlZnMnLCB7XG4gICAgICAgIHRocm91Z2hwdXRNb2RlOiAnZWxhc3RpYycsXG4gICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICBOYW1lOiAnd29yaycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBleHRlcm5hbHNFZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZXh0ZXJuYWxzRWZzJywge1xuICAgICAgICB0aHJvdWdocHV0TW9kZTogJ2VsYXN0aWMnLFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgTmFtZTogJ2V4dGVybmFscycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICAvLyBFYWNoIHN1Ym5ldCBpbiBWUEMgYXJlIG9uIGRpZmZlcmVudCBBWnMsIHNvIGNyZWF0aW5nIG1vdW50cG9pbnQgdG8gZWFjaFxuICAgICAgY29uc3QgaXRlcmF0b3IgPSBUZXJyYWZvcm1JdGVyYXRvci5mcm9tTGlzdChzdWJuZXRzLmlkcylcblxuICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgZm9yRWFjaDogaXRlcmF0b3IsXG4gICAgICAgIGZpbGVTeXN0ZW1JZDogZWZzLmlkLFxuICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWUsXG4gICAgICB9KVxuXG4gICAgICBuZXcgRWZzTW91bnRUYXJnZXQodGhpcywgJ0V4dGVybmFsc0Vmc01vdW50VGFyZ2V0Jywge1xuICAgICAgICBmb3JFYWNoOiBpdGVyYXRvcixcbiAgICAgICAgZmlsZVN5c3RlbUlkOiBleHRlcm5hbHNFZnMuaWQsXG4gICAgICAgIHN1Ym5ldElkOiBpdGVyYXRvci52YWx1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJ1bm5lclZvbHVtZU5hbWUgPSAnd29yaydcbiAgICAgIGNvbnN0IGV4dGVybmFsc1ZvbHVtZU5hbWUgPSAnZXh0ZXJuYWxzJ1xuXG4gICAgICBydW5uZXJWb2x1bWUucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHJ1bm5lclZvbHVtZU5hbWUsXG4gICAgICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBzYW1lIHZvbHVtZSwgYXMgdm9sdW1lIGlzIGluaXRpYWxseSBlbXB0eSBzbyBpdCBjYW4ndCBtYXAgdG8gaXQncyBcImV4dGVybmFsc1wiIGRpcmVjdG9yeVxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLm1vdW50UG9pbnRzPy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlVm9sdW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvdG1wL193b3JrJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZVZvbHVtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9leHRlcm5hbHMnLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLmVudmlyb25tZW50Py5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VGU19JRCcsXG4gICAgICAgICAgdmFsdWU6IGVmcy5pZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFWFRFUk5BTFNfRUZTX0lEJyxcbiAgICAgICAgICB2YWx1ZTogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1JFUVVJUkVfSk9CX0NPTlRBSU5FUicsXG4gICAgICAgICAgdmFsdWU6ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uY29tbWFuZCA9IFtcbiAgICAgICAgJy9iaW4vc2gnLFxuICAgICAgICAnLWMnLFxuICAgICAgICAnZXhwb3J0IEVYRUNJRD0kKGNhdCAvcHJvYy9zeXMva2VybmVsL3JhbmRvbS91dWlkKSAmJiBzdWRvIG1rZGlyIC1wIC90bXAvX3dvcmsvJEVYRUNJRCAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9fd29yay8kRVhFQ0lEICYmIGxuIC1zIC90bXAvX3dvcmsvJEVYRUNJRCBfd29yayAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9leHRlcm5hbHMgJiYgL2hvbWUvcnVubmVyL3J1bi5zaCA7IHN1ZG8gcm0gLXIgL3RtcC9fd29yay8kRVhFQ0lEJyxcbiAgICAgIF1cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uaW1hZ2UgPSAnZ2hjci5pby9oaS1maS9hY3Rpb25zLXJ1bm5lcjplY3MnXG4gICAgfVxuXG4gICAgLy8gVE9ETzogSW1hZ2VzIHRocm91Z2ggY2FjaGluZzogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUi9sYXRlc3QvdXNlcmd1aWRlL3B1bGwtdGhyb3VnaC1jYWNoZS5odG1sIChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbilcbiAgICAvLyBUT0RPOiBQYXNzIEV4ZWN1dGlvbiByb2xlIHRvIGpvYiB0YXNrOiBodHRwczovL3d3dy5lcm5lc3RjaGlhbmcuY29tL2VuL3Bvc3RzLzIwMjEvdXNpbmctYW1hem9uLWVjcy1leGVjLyMxLWdyYW50LXBlcm1pc3Npb25zLWVjcy10YXNrLWlhbS1yb2xlXG4gICAgLy8gVE9ETzogUGFzcyBUYXNrIHJvbGUgdG8gam9iIHRhc2tcbiAgICBjb25zdCBydW5uZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBFY3NUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnUnVubmVyVGFza0RlZmluaXRpb24nLFxuICAgICAge1xuICAgICAgICBmYW1pbHk6ICdHSEEnLFxuICAgICAgICB0YXNrUm9sZUFybjogcnVubmVyUm9sZS5hcm4sXG4gICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbnM6IEZuLmpzb25lbmNvZGUoW3J1bm5lckNvbnRhaW5lckRlZmluaXRpb25dKSxcbiAgICAgICAgY3B1OiAnMTAyNCcsXG4gICAgICAgIG1lbW9yeTogJzIwNDgnLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICAgIHZvbHVtZTogcnVubmVyVm9sdW1lLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBhdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbi5lbnZpcm9ubWVudD8ucHVzaCh7XG4gICAgICBuYW1lOiAnVEFTS19ERUZJTklUSU9OX0FSTicsXG4gICAgICB2YWx1ZTogcnVubmVyVGFza0RlZmluaXRpb24uYXJuLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ0F1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICB7XG4gICAgICAgIGZhbWlseTogJ0F1dG9zY2FsZXInLFxuICAgICAgICB0YXNrUm9sZUFybjogYXV0b3NjYWxlclJvbGUuYXJuLFxuICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKFthdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbl0pLFxuICAgICAgICBjcHU6ICcyNTYnLFxuICAgICAgICBtZW1vcnk6ICc1MTInLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IHJ1bm5lclBvbGljeURlZmluaXRpb24gPSB7XG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ1N0YXJ0YW5kTW9uaXRvclRhc2snLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdlY3M6UnVuVGFzaycsXG4gICAgICAgICAgICAnZWNzOlRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucycsXG4gICAgICAgICAgICAnZWNzOkxpc3RUYXNrcycsXG4gICAgICAgICAgICAnZWNzOlN0b3BUYXNrJyxcbiAgICAgICAgICAgICdlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZWxldGVUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgJ2VjczpFeGVjdXRlQ29tbWFuZCcsXG4gICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICAnbG9nczpTdGFydExpdmVUYWlsJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLWRlZmluaXRpb24vZ2hhLXBvZC13b3JrZmxvdzoqYCxcbiAgICAgICAgICAgIGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAvL1RPRE86IHJlb3JkZXIgcmlnaHRzIHNvIHRoYXQgbGlzdGluZyBpcyBvbmx5IG9uZSB3aXRoIHN0YXJcbiAgICAgICAgICAgICcqJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgU2lkOiAnR2V0VnBjSW5mbycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ0V4ZWNDb21tYW5kcycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbCcsXG4gICAgICAgICAgICAnc3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWwnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcnVubmVyUG9saWN5ID0gbmV3IElhbVBvbGljeSh0aGlzLCAnUnVubmVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHJ1bm5lclBvbGljeURlZmluaXRpb24pLFxuICAgIH0pXG5cbiAgICBuZXcgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQodGhpcywgJ1J1bm5lclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IHJ1bm5lclBvbGljeS5hcm4sXG4gICAgICByb2xlOiBydW5uZXJSb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdBdXRvc2NhbGVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tzJyxcbiAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgYCR7cnVubmVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9ufToqYCxcbiAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAgIGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9KVxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IGF1dG9zY2FsZXJQb2xpY3kuYXJuLFxuICAgICAgcm9sZTogYXV0b3NjYWxlclJvbGUubmFtZSxcbiAgICB9KVxuXG4gICAgbmV3IEVjc1NlcnZpY2UodGhpcywgJ0F1dG9zY2FsZXJTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogY2x1c3Rlci5hcm4sXG4gICAgICBuYW1lOiAnYXV0b3NjYWxlci1zZXJ2aWNlJyxcbiAgICAgIGRlc2lyZWRDb3VudDogMSxcbiAgICAgIGxhdW5jaFR5cGU6ICdGQVJHQVRFJyxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICAgIHN1Ym5ldHM6IHN1Ym5ldHMuaWRzLFxuICAgICAgICBzZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHMuaWRzLFxuICAgICAgfSxcbiAgICAgIGxpZmVjeWNsZToge1xuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbJ2Rlc2lyZWRfY291bnQnXSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19
389
+ Aws[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Aws", version: "0.0.8" };
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RkFBa0Y7QUFDbEYsK0ZBQXlGO0FBQ3pGLDZFQUF3RTtBQUN4RSwrRkFHMEQ7QUFDMUQsK0VBR2tEO0FBQ2xELHFFQUFpRTtBQUNqRSxxRUFBaUU7QUFDakUscUZBR3FEO0FBQ3JELDZFQUF3RTtBQUN4RSwrRUFBMEU7QUFDMUUsbUVBQStEO0FBQy9ELCtEQUEyRDtBQUMzRCxtR0FBNkY7QUFDN0YsK0RBQStEO0FBQy9ELGlDQUFnRTtBQUNoRSwyQ0FBdUM7QUFDdkMsMkNBQThDO0FBaUI5QyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUNqQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDeEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLHNCQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdEQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakUsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckQsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBQSwyQkFBZSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhFLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQy9DLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztTQUN2QixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNuRCxNQUFNLEVBQUUsS0FBSyxD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RUFBRSxtQkFBbUIsRUFBRTtZQUN6QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixZQUFZLEVBQUUsQ0FBQztZQUNmLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDM0Qsb0JBQW9CLEVBQUU7Z0JBQ3JCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ3BCLGNBQWMsRUFBRSxjQUFjLENBQUMsR0FBRzthQUNsQztZQUNELFNBQVMsRUFBRTtnQkFDVixhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDaEM7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDOztBQWxhRixrQkFtYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWVjc1wiO1xuaW1wb3J0IHsgQ2xvdWR3YXRjaExvZ0dyb3VwIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Nsb3Vkd2F0Y2gtbG9nLWdyb3VwXCI7XG5pbXBvcnQgeyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtY2FsbGVyLWlkZW50aXR5XCI7XG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXJlZ2lvblwiO1xuaW1wb3J0IHtcblx0RGF0YUF3c1NlY3VyaXR5R3JvdXBzLFxuXHR0eXBlIERhdGFBd3NTZWN1cml0eUdyb3Vwc0ZpbHRlcixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3Vwc1wiO1xuaW1wb3J0IHtcblx0RGF0YUF3c1N1Ym5ldHMsXG5cdHR5cGUgRGF0YUF3c1N1Ym5ldHNGaWx0ZXIsXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1zdWJuZXRzXCI7XG5pbXBvcnQgeyBFY3NDbHVzdGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy1jbHVzdGVyXCI7XG5pbXBvcnQgeyBFY3NTZXJ2aWNlIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy1zZXJ2aWNlXCI7XG5pbXBvcnQge1xuXHRFY3NUYXNrRGVmaW5pdGlvbixcblx0dHlwZSBFY3NUYXNrRGVmaW5pdGlvblZvbHVtZSxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy10YXNrLWRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVmc0ZpbGVTeXN0ZW0gfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWZzLWZpbGUtc3lzdGVtXCI7XG5pbXBvcnQgeyBFZnNNb3VudFRhcmdldCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtbW91bnQtdGFyZ2V0XCI7XG5pbXBvcnQgeyBJYW1Qb2xpY3kgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXBvbGljeVwiO1xuaW1wb3J0IHsgSWFtUm9sZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZVwiO1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXJvbGUtcG9saWN5LWF0dGFjaG1lbnRcIjtcbmltcG9ydCB7IEF3c1Byb3ZpZGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3MvbGliL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBGbiwgdHlwZSBJUmVzb2x2YWJsZSwgVGVycmFmb3JtSXRlcmF0b3IgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBjb21tb25WYXJpYWJsZXMgfSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBd3NQcm9wcyB7XG5cdC8vIE5hbWUgb2YgdGhlIEVDUyBjbHVzdGVyIHRvIGNyZWF0ZSBhbmQgdXNlLlxuXHRyZWFkb25seSBjbHVzdGVyTmFtZTogc3RyaW5nO1xuXHQvLyBVdGlsaXplIHJ1bm5lci1jb250YWluZXItaG9va3MgdG8gYWxsb3cgc3VwcG9ydCBmb3Igc2VydmljZSBhbmQgYnVpbGQgY29udGFpbmVyIGFzIHdlbGwgYXMgY29udGFpbmVyIGFjdGlvbnMgYW5kIHN0ZXBzLlxuXHRyZWFkb25seSBjb250YWluZXJTdXBwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlU3VibmV0cy5odG1sXG5cdCAqL1xuXHRyZWFkb25seSBzdWJuZXRGaWx0ZXJzPzogRGF0YUF3c1N1Ym5ldHNGaWx0ZXJbXSB8IElSZXNvbHZhYmxlO1xuXHQvKipcblx0ICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC9yZWZlcmVuY2UvZWMyL2Rlc2NyaWJlLXNlY3VyaXR5LWdyb3Vwcy5odG1sXG5cdCAqL1xuXHRyZWFkb25seSBzZWN1cml0eUdyb3VwRmlsdGVycz86IERhdGFBd3NTZWN1cml0eUdyb3Vwc0ZpbHRlcltdIHwgSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBjbGFzcyBBd3MgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXHRjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzUHJvcHMpIHtcblx0XHRzdXBlcihzY29wZSwgaWQpO1xuXG5cdFx0bmV3IEF3c1Byb3ZpZGVyKHRoaXMsIFwiYXdzXCIsIHt9KTtcblxuXHRcdGNvbnN0IGlkZW50aXR5ID0gbmV3IERhdGFBd3NDYWxsZXJJZGVudGl0eSh0aGlzLCBcIklkZW50aXR5XCIsIHt9KTtcblxuXHRcdGNvbnN0IHJlZ2lvbiA9IG5ldyBEYXRhQXdzUmVnaW9uKHRoaXMsIFwiUmVnaW9uXCIsIHt9KTtcblxuXHRcdGNvbnN0IHsgcGF0LCBnaXRodWJDb25maWdVcmwsIGF1dG9zY2FsZXJJbWFnZSB9ID0gY29tbW9uVmFyaWFibGVzKHRoaXMpO1xuXG5cdFx0Y29uc3QgY2x1c3RlciA9IG5ldyBFY3NDbHVzdGVyKHRoaXMsIFwiQ2x1c3RlclwiLCB7XG5cdFx0XHRuYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHN1Ym5ldHMgPSBuZXcgRGF0YUF3c1N1Ym5ldHModGhpcywgXCJTdWJuZXRzXCIsIHtcblx0XHRcdGZpbHRlcjogcHJvcHMuc3VibmV0RmlsdGVycyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHNlY3VyaXR5R3JvdXBzID0gbmV3IERhdGFBd3NTZWN1cml0eUdyb3Vwcyh0aGlzLCBcIlNlY3VyaXR5R3JvdXBzXCIsIHtcblx0XHRcdGZpbHRlcjogcHJvcHMuc2VjdXJpdHlHcm91cEZpbHRlcnMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBhdXRvc2NhbGVyUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsIFwiQXV0b3NjYWxlclJvbGVcIiwge1xuXHRcdFx0YXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG5cdFx0XHRcdFZlcnNpb246IFwiMjAxMi0xMC0xN1wiLFxuXHRcdFx0XHRTdGF0ZW1lbnQ6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRFZmZlY3Q6IFwiQWxsb3dcIixcblx0XHRcdFx0XHRcdFByaW5jaXBhbDoge1xuXHRcdFx0XHRcdFx0XHRTZXJ2aWNlOiBcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0QWN0aW9uOiBcInN0czpBc3N1bWVSb2xlXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgcnVubmVyUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsIFwiUnVubmVyUm9sZVwiLCB7XG5cdFx0XHRhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcblx0XHRcdFx0VmVyc2lvbjogXCIyMDEyLTEwLTE3XCIsXG5cdFx0XHRcdFN0YXRlbWVudDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdEVmZmVjdDogXCJBbGxvd1wiLFxuXHRcdFx0XHRcdFx0UHJpbmNpcGFsOiB7XG5cdFx0XHRcdFx0XHRcdFNlcnZpY2U6IFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIixcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRBY3Rpb246IFwic3RzOkFzc3VtZVJvbGVcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSksXG5cdFx0fSk7XG5cblx0XHRjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsIFwiVGFza0V4ZWN1dGlvblJvbGVcIiwge1xuXHRcdFx0YXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG5cdFx0XHRcdFZlcnNpb246IFwiMjAxMi0xMC0xN1wiLFxuXHRcdFx0XHRTdGF0ZW1lbnQ6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRFZmZlY3Q6IFwiQWxsb3dcIixcblx0XHRcdFx0XHRcdFByaW5jaXBhbDoge1xuXHRcdFx0XHRcdFx0XHRTZXJ2aWNlOiBcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0QWN0aW9uOiBcInN0czpBc3N1bWVSb2xlXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pLFxuXHRcdH0pO1xuXG5cdFx0bmV3IElhbVJvbGVQb2xpY3lBdHRhY2htZW50KHRoaXMsIFwiVGVza0V4ZWN1dGlvblJvbGVBdHRhY2htZW50XCIsIHtcblx0XHRcdHBvbGljeUFybjpcblx0XHRcdFx0XCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3lcIixcblx0XHRcdHJvbGU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLm5hbWUsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBydW5uZXJMb2dHcm91cCA9IG5ldyBDbG91ZHdhdGNoTG9nR3JvdXAodGhpcywgXCJSdW5uZXJMb2dHcm91cFwiLCB7XG5cdFx0XHRuYW1lOiBcIi9lY3MvR0hBXCIsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBhdXRvc2NhbGVyTG9nR3JvdXAgPSBuZXcgQ2xvdWR3YXRjaExvZ0dyb3VwKFxuXHRcdFx0dGhpcyxcblx0XHRcdFwiQXV0b3NjYWxlckxvZ0dyb3VwXCIsXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiL2Vjcy9BdXRvc2NhbGVyXCIsXG5cdFx0XHR9LFxuXHRcdCk7XG5cblx0XHRjb25zdCBhdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbjogQ29udGFpbmVyRGVmaW5pdGlvbiA9IHtcblx0XHRcdG5hbWU6IFwiYXV0b3NjYWxlclwiLFxuXHRcdFx0aW1hZ2U6IGF1dG9zY2FsZXJJbWFnZS5zdHJpbmdWYWx1ZSxcblx0XHRcdGVzc2VudGlhbDogdHJ1ZSxcblx0XHRcdGVudmlyb25tZW50OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcIlBBVFwiLFxuXHRcdFx0XHRcdHZhbHVlOiBwYXQudmFsdWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcIkdJVEhVQl9DT05GSUdfVVJMXCIsXG5cdFx0XHRcdFx0dmFsdWU6IGdpdGh1YkNvbmZpZ1VybC52YWx1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiRUNTX0NMVVNURVJcIixcblx0XHRcdFx0XHR2YWx1ZTogY2x1c3Rlci5hcm4sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcIkVDU19TVUJORVRTXCIsXG5cdFx0XHRcdFx0dmFsdWU6IEZuLmpvaW4oXCIsXCIsIHN1Ym5ldHMuaWRzKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiRUNTX1NFQ1VSSVRZX0dST1VQU1wiLFxuXHRcdFx0XHRcdHZhbHVlOiBGbi5qb2luKFwiLFwiLCBzZWN1cml0eUdyb3Vwcy5pZHMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJTQ0FMRV9TRVRfTkFNRVwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcImVjcy1ydW5uZXItc2V0XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0bG9nQ29uZmlndXJhdGlvbjoge1xuXHRcdFx0XHRsb2dEcml2ZXI6IFwiYXdzbG9nc1wiLFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XCJhd3Nsb2dzLWdyb3VwXCI6IGF1dG9zY2FsZXJMb2dHcm91cC5uYW1lLFxuXHRcdFx0XHRcdFwiYXdzbG9ncy1yZWdpb25cIjogcmVnaW9uLm5hbWUsXG5cdFx0XHRcdFx0XCJhd3Nsb2dzLXN0cmVhbS1wcmVmaXhcIjogXCJlY3NcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fTtcblxuXHRcdGNvbnN0IHJ1bm5lclZvbHVtZTogRWNzVGFza0RlZmluaXRpb25Wb2x1bWVbXSA9IFtdO1xuXG5cdFx0Y29uc3QgcnVubmVyQ29udGFpbmVyRGVmaW5pdGlvbjogQ29udGFpbmVyRGVmaW5pdGlvbiA9IHtcblx0XHRcdG5hbWU6IFwicnVubmVyXCIsXG5cdFx0XHRpbWFnZTogXCJnaGNyLmlvL2FjdGlvbnMvYWN0aW9ucy1ydW5uZXI6Mi4zMjMuMFwiLFxuXHRcdFx0ZXNzZW50aWFsOiB0cnVlLFxuXHRcdFx0ZW50cnlQb2ludDogW1wiL2hvbWUvcnVubmVyL3J1bi5zaFwiXSxcblx0XHRcdGVudmlyb25tZW50OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcIkVDU19DTFVTVEVSX05BTUVcIixcblx0XHRcdFx0XHR2YWx1ZTogY2x1c3Rlci5uYW1lLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJBQ1RJT05TX1JVTk5FUl9QT0RfTkFNRVwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcImdoYS1wb2RcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiRUNTX1NVQk5FVFNcIixcblx0XHRcdFx0XHR2YWx1ZTogRm4uam9pbihcIixcIiwgc3VibmV0cy5pZHMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJFQ1NfU0VDVVJJVFlfR1JPVVBTXCIsXG5cdFx0XHRcdFx0dmFsdWU6IEZuLmpvaW4oXCIsXCIsIHNlY3VyaXR5R3JvdXBzLmlkcyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcIkVDU19UQVNLX1JPTEVcIixcblx0XHRcdFx0XHR2YWx1ZTogcnVubmVyUm9sZS5hcm4sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcIkVDU19FWEVDVVRJT05fUk9MRVwiLFxuXHRcdFx0XHRcdHZhbHVlOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0bW91bnRQb2ludHM6IFtdLFxuXHRcdFx0bG9nQ29uZmlndXJhdGlvbjoge1xuXHRcdFx0XHRsb2dEcml2ZXI6IFwiYXdzbG9nc1wiLFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XCJhd3Nsb2dzLWdyb3VwXCI6IHJ1bm5lckxvZ0dyb3VwLm5hbWUsXG5cdFx0XHRcdFx0XCJhd3Nsb2dzLXJlZ2lvblwiOiByZWdpb24ubmFtZSxcblx0XHRcdFx0XHRcImF3c2xvZ3Mtc3RyZWFtLXByZWZpeFwiOiBcImVjc1wiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0aWYgKHByb3BzLmNvbnRhaW5lclN1cHBvcnQpIHtcblx0XHRcdC8vIEVGUyB2b2x1bWUgdG8gYWxsb3cgc2hhcmluZyBkYXRhIGJldHdlZW4gdGFza3Ncblx0XHRcdGNvbnN0IGVmcyA9IG5ldyBFZnNGaWxlU3lzdGVtKHRoaXMsIFwiZWZzXCIsIHtcblx0XHRcdFx0dGhyb3VnaHB1dE1vZGU6IFwiZWxhc3RpY1wiLFxuXHRcdFx0XHR0YWdzOiB7XG5cdFx0XHRcdFx0TmFtZTogXCJ3b3JrXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgZXh0ZXJuYWxzRWZzID0gbmV3IEVmc0ZpbGVTeXN0ZW0odGhpcywgXCJleHRlcm5hbHNFZnNcIiwge1xuXHRcdFx0XHR0aHJvdWdocHV0TW9kZTogXCJlbGFzdGljXCIsXG5cdFx0XHRcdHRhZ3M6IHtcblx0XHRcdFx0XHROYW1lOiBcImV4dGVybmFsc1wiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEVhY2ggc3VibmV0IGluIFZQQyBhcmUgb24gZGlmZmVyZW50IEFacywgc28gY3JlYXRpbmcgbW91bnRwb2ludCB0byBlYWNoXG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21MaXN0KHN1Ym5ldHMuaWRzKTtcblxuXHRcdFx0bmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsIFwiRWZzTW91bnRUYXJnZXRcIiwge1xuXHRcdFx0XHRmb3JFYWNoOiBpdGVyYXRvcixcblx0XHRcdFx0ZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG5cdFx0XHRcdHN1Ym5ldElkOiBpdGVyYXRvci52YWx1ZSxcblx0XHRcdH0pO1xuXG5cdFx0XHRuZXcgRWZzTW91bnRUYXJnZXQodGhpcywgXCJFeHRlcm5hbHNFZnNNb3VudFRhcmdldFwiLCB7XG5cdFx0XHRcdGZvckVhY2g6IGl0ZXJhdG9yLFxuXHRcdFx0XHRmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcblx0XHRcdFx0c3VibmV0SWQ6IGl0ZXJhdG9yLnZhbHVlLFxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJ1bm5lclZvbHVtZU5hbWUgPSBcIndvcmtcIjtcblx0XHRcdGNvbnN0IGV4dGVybmFsc1ZvbHVtZU5hbWUgPSBcImV4dGVybmFsc1wiO1xuXG5cdFx0XHRydW5uZXJWb2x1bWUucHVzaChcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IHJ1bm5lclZvbHVtZU5hbWUsXG5cdFx0XHRcdFx0ZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuXHRcdFx0XHRcdFx0ZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBzYW1lIHZvbHVtZSwgYXMgdm9sdW1lIGlzIGluaXRpYWxseSBlbXB0eSBzbyBpdCBjYW4ndCBtYXAgdG8gaXQncyBcImV4dGVybmFsc1wiIGRpcmVjdG9yeVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcblx0XHRcdFx0XHRlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG5cdFx0XHRcdFx0XHRmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblxuXHRcdFx0cnVubmVyQ29udGFpbmVyRGVmaW5pdGlvbi5tb3VudFBvaW50cz8ucHVzaChcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNvdXJjZVZvbHVtZTogcnVubmVyVm9sdW1lTmFtZSxcblx0XHRcdFx0XHRjb250YWluZXJQYXRoOiBcIi90bXAvX3dvcmtcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNvdXJjZVZvbHVtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcblx0XHRcdFx0XHRjb250YWluZXJQYXRoOiBcIi90bXAvZXh0ZXJuYWxzXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXG5cdFx0XHRydW5uZXJDb250YWluZXJEZWZpbml0aW9uLmVudmlyb25tZW50Py5wdXNoKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJFRlNfSURcIixcblx0XHRcdFx0XHR2YWx1ZTogZWZzLmlkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJFWFRFUk5BTFNfRUZTX0lEXCIsXG5cdFx0XHRcdFx0dmFsdWU6IGV4dGVybmFsc0Vmcy5pZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiQUNUSU9OU19SVU5ORVJfUkVRVUlSRV9KT0JfQ09OVEFJTkVSXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwiZmFsc2VcIixcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cblx0XHRcdHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uY29tbWFuZCA9IFtcblx0XHRcdFx0XCIvYmluL3NoXCIsXG5cdFx0XHRcdFwiLWNcIixcblx0XHRcdFx0XCJleHBvcnQgRVhFQ0lEPSQoY2F0IC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tL3V1aWQpICYmIHN1ZG8gbWtkaXIgLXAgL3RtcC9fd29yay8kRVhFQ0lEICYmIHN1ZG8gY2hvd24gcnVubmVyOnJ1bm5lciAvdG1wL193b3JrLyRFWEVDSUQgJiYgbG4gLXMgL3RtcC9fd29yay8kRVhFQ0lEIF93b3JrICYmIHN1ZG8gY2hvd24gcnVubmVyOnJ1bm5lciAvdG1wL2V4dGVybmFscyAmJiAvaG9tZS9ydW5uZXIvcnVuLnNoIDsgc3VkbyBybSAtciAvdG1wL193b3JrLyRFWEVDSURcIixcblx0XHRcdF07XG5cdFx0XHRydW5uZXJDb250YWluZXJEZWZpbml0aW9uLmltYWdlID0gXCJnaGNyLmlvL2hpLWZpL2FjdGlvbnMtcnVubmVyOmVjc1wiO1xuXHRcdH1cblxuXHRcdC8vIFRPRE86IEltYWdlcyB0aHJvdWdoIGNhY2hpbmc6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1IvbGF0ZXN0L3VzZXJndWlkZS9wdWxsLXRocm91Z2gtY2FjaGUuaHRtbCAocmVxdWlyZXMgYXV0aGVudGljYXRpb24pXG5cdFx0Ly8gVE9ETzogUGFzcyBFeGVjdXRpb24gcm9sZSB0byBqb2IgdGFzazogaHR0cHM6Ly93d3cuZXJuZXN0Y2hpYW5nLmNvbS9lbi9wb3N0cy8yMDIxL3VzaW5nLWFtYXpvbi1lY3MtZXhlYy8jMS1ncmFudC1wZXJtaXNzaW9ucy1lY3MtdGFzay1pYW0tcm9sZVxuXHRcdC8vIFRPRE86IFBhc3MgVGFzayByb2xlIHRvIGpvYiB0YXNrXG5cdFx0Y29uc3QgcnVubmVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24oXG5cdFx0XHR0aGlzLFxuXHRcdFx0XCJSdW5uZXJUYXNrRGVmaW5pdGlvblwiLFxuXHRcdFx0e1xuXHRcdFx0XHRmYW1pbHk6IFwiR0hBXCIsXG5cdFx0XHRcdHRhc2tSb2xlQXJuOiBydW5uZXJSb2xlLmFybixcblx0XHRcdFx0ZXhlY3V0aW9uUm9sZUFybjogZWNzVGFza0V4ZWN1dGlvblJvbGUuYXJuLFxuXHRcdFx0XHRjb250YWluZXJEZWZpbml0aW9uczogRm4uanNvbmVuY29kZShbcnVubmVyQ29udGFpbmVyRGVmaW5pdGlvbl0pLFxuXHRcdFx0XHRjcHU6IFwiMTAyNFwiLFxuXHRcdFx0XHRtZW1vcnk6IFwiMjA0OFwiLFxuXHRcdFx0XHRyZXF1aXJlc0NvbXBhdGliaWxpdGllczogW1wiRkFSR0FURVwiXSxcblx0XHRcdFx0cnVudGltZVBsYXRmb3JtOiB7XG5cdFx0XHRcdFx0Y3B1QXJjaGl0ZWN0dXJlOiBcIlg4Nl82NFwiLFxuXHRcdFx0XHRcdG9wZXJhdGluZ1N5c3RlbUZhbWlseTogXCJMSU5VWFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuZXR3b3JrTW9kZTogXCJhd3N2cGNcIixcblx0XHRcdFx0dm9sdW1lOiBydW5uZXJWb2x1bWUsXG5cdFx0XHR9LFxuXHRcdCk7XG5cblx0XHRhdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbi5lbnZpcm9ubWVudD8ucHVzaCh7XG5cdFx0XHRuYW1lOiBcIlRBU0tfREVGSU5JVElPTl9BUk5cIixcblx0XHRcdHZhbHVlOiBydW5uZXJUYXNrRGVmaW5pdGlvbi5hcm4sXG5cdFx0fSk7XG5cblx0XHRjb25zdCBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24oXG5cdFx0XHR0aGlzLFxuXHRcdFx0XCJBdXRvc2NhbGVyVGFza0RlZmluaXRpb25cIixcblx0XHRcdHtcblx0XHRcdFx0ZmFtaWx5OiBcIkF1dG9zY2FsZXJcIixcblx0XHRcdFx0dGFza1JvbGVBcm46IGF1dG9zY2FsZXJSb2xlLmFybixcblx0XHRcdFx0ZXhlY3V0aW9uUm9sZUFybjogZWNzVGFza0V4ZWN1dGlvblJvbGUuYXJuLFxuXHRcdFx0XHRjb250YWluZXJEZWZpbml0aW9uczogRm4uanNvbmVuY29kZShbYXV0b3NjYWxlckNvbnRhaW5lckRlZmluaXRpb25dKSxcblx0XHRcdFx0Y3B1OiBcIjI1NlwiLFxuXHRcdFx0XHRtZW1vcnk6IFwiNTEyXCIsXG5cdFx0XHRcdHJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzOiBbXCJGQVJHQVRFXCJdLFxuXHRcdFx0XHRydW50aW1lUGxhdGZvcm06IHtcblx0XHRcdFx0XHRjcHVBcmNoaXRlY3R1cmU6IFwiWDg2XzY0XCIsXG5cdFx0XHRcdFx0b3BlcmF0aW5nU3lzdGVtRmFtaWx5OiBcIkxJTlVYXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5ldHdvcmtNb2RlOiBcImF3c3ZwY1wiLFxuXHRcdFx0fSxcblx0XHQpO1xuXG5cdFx0Y29uc3QgcnVubmVyUG9saWN5RGVmaW5pdGlvbiA9IHtcblx0XHRcdFZlcnNpb246IFwiMjAxMi0xMC0xN1wiLFxuXHRcdFx0U3RhdGVtZW50OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRTaWQ6IFwiU3RhcnRhbmRNb25pdG9yVGFza1wiLFxuXHRcdFx0XHRcdEVmZmVjdDogXCJBbGxvd1wiLFxuXHRcdFx0XHRcdEFjdGlvbjogW1xuXHRcdFx0XHRcdFx0XCJlY3M6UnVuVGFza1wiLFxuXHRcdFx0XHRcdFx0XCJlY3M6VGFnUmVzb3VyY2VcIixcblx0XHRcdFx0XHRcdFwiZWNzOkxpc3RUYXNrRGVmaW5pdGlvbnNcIixcblx0XHRcdFx0XHRcdFwiZWNzOkxpc3RUYXNrc1wiLFxuXHRcdFx0XHRcdFx0XCJlY3M6U3RvcFRhc2tcIixcblx0XHRcdFx0XHRcdFwiZWNzOlJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcblx0XHRcdFx0XHRcdFwiZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb25cIixcblx0XHRcdFx0XHRcdFwiZWNzOkRlcmVnaXN0ZXJUYXNrRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRcdFx0XCJlY3M6RGVsZXRlVGFza0RlZmluaXRpb25zXCIsXG5cdFx0XHRcdFx0XHRcImVjczpFeGVjdXRlQ29tbWFuZFwiLFxuXHRcdFx0XHRcdFx0Ly8gTmVlZGVkIGZvciB3YWl0aW5nXG5cdFx0XHRcdFx0XHRcImVjczpEZXNjcmliZVRhc2tzXCIsXG5cdFx0XHRcdFx0XHRcImxvZ3M6R2V0TG9nRXZlbnRzXCIsXG5cdFx0XHRcdFx0XHRcImlhbTpQYXNzUm9sZVwiLFxuXHRcdFx0XHRcdFx0XCJsb2dzOlN0YXJ0TGl2ZVRhaWxcIixcblx0XHRcdFx0XHRcdFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFJlc291cmNlOiBbXG5cdFx0XHRcdFx0XHRgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2stZGVmaW5pdGlvbi9naGEtcG9kLXdvcmtmbG93OipgLFxuXHRcdFx0XHRcdFx0Y2x1c3Rlci5hcm4sXG5cdFx0XHRcdFx0XHQvLyBUcmlnZ2VyZXIgaGFzIHRvIGJlIGFsbG93ZWQgdG8gcGFzcyBib3RoIHRhc2sgYW5kIHRhc2sgZXhlY3V0aW9uIHJvbGVcblx0XHRcdFx0XHRcdGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcblx0XHRcdFx0XHRcdHJ1bm5lclJvbGUuYXJuLFxuXHRcdFx0XHRcdFx0YGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLyR7Y2x1c3Rlci5uYW1lfS8qYCxcblx0XHRcdFx0XHRcdC8vVE9ETzogcmVvcmRlciByaWdodHMgc28gdGhhdCBsaXN0aW5nIGlzIG9ubHkgb25lIHdpdGggc3RhclxuXHRcdFx0XHRcdFx0XCIqXCIsXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFNpZDogXCJHZXRWcGNJbmZvXCIsXG5cdFx0XHRcdFx0RWZmZWN0OiBcIkFsbG93XCIsXG5cdFx0XHRcdFx0QWN0aW9uOiBbXCJlYzI6RGVzY3JpYmVTdWJuZXRzXCIsIFwiZWMyOkRlc2NyaWJlU2VjdXJpdHlHcm91cHNcIl0sXG5cdFx0XHRcdFx0UmVzb3VyY2U6IFwiKlwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0U2lkOiBcIkV4ZWNDb21tYW5kc1wiLFxuXHRcdFx0XHRcdEVmZmVjdDogXCJBbGxvd1wiLFxuXHRcdFx0XHRcdEFjdGlvbjogW1xuXHRcdFx0XHRcdFx0XCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuXHRcdFx0XHRcdFx0XCJzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbFwiLFxuXHRcdFx0XHRcdFx0XCJzc21tZXNzYWdlczpPcGVuQ29udHJvbENoYW5uZWxcIixcblx0XHRcdFx0XHRcdFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCIsXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRSZXNvdXJjZTogXCIqXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH07XG5cblx0XHRjb25zdCBydW5uZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsIFwiUnVubmVyUG9saWN5XCIsIHtcblx0XHRcdHBvbGljeTogRm4uanNvbmVuY29kZShydW5uZXJQb2xpY3lEZWZpbml0aW9uKSxcblx0XHR9KTtcblxuXHRcdG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCBcIlJ1bm5lclBvbGljeUF0dGFjaG1lbnRcIiwge1xuXHRcdFx0cG9saWN5QXJuOiBydW5uZXJQb2xpY3kuYXJuLFxuXHRcdFx0cm9sZTogcnVubmVyUm9sZS5uYW1lLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgYXV0b3NjYWxlclBvbGljeSA9IG5ldyBJYW1Qb2xpY3kodGhpcywgXCJBdXRvc2NhbGVyUG9saWN5XCIsIHtcblx0XHRcdHBvbGljeTogRm4uanNvbmVuY29kZSh7XG5cdFx0XHRcdFZlcnNpb246IFwiMjAxMi0xMC0xN1wiLFxuXHRcdFx0XHRTdGF0ZW1lbnQ6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRTaWQ6IFwiU3RhcnRhbmRNb25pdG9yVGFza1wiLFxuXHRcdFx0XHRcdFx0RWZmZWN0OiBcIkFsbG93XCIsXG5cdFx0XHRcdFx0XHRBY3Rpb246IFtcblx0XHRcdFx0XHRcdFx0XCJlY3M6UnVuVGFza1wiLFxuXHRcdFx0XHRcdFx0XHQvLyBOZWVkZWQgZm9yIHdhaXRpbmdcblx0XHRcdFx0XHRcdFx0XCJlY3M6RGVzY3JpYmVUYXNrc1wiLFxuXHRcdFx0XHRcdFx0XHRcImxvZ3M6R2V0TG9nRXZlbnRzXCIsXG5cdFx0XHRcdFx0XHRcdFwiaWFtOlBhc3NSb2xlXCIsXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0UmVzb3VyY2U6IFtcblx0XHRcdFx0XHRcdFx0YCR7cnVubmVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9ufToqYCxcblx0XHRcdFx0XHRcdFx0Ly8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG5cdFx0XHRcdFx0XHRcdGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcblx0XHRcdFx0XHRcdFx0cnVubmVyUm9sZS5hcm4sXG5cdFx0XHRcdFx0XHRcdGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG5cdFx0XHRcdFx0XHRcdGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRTaWQ6IFwiR2V0VnBjSW5mb1wiLFxuXHRcdFx0XHRcdFx0RWZmZWN0OiBcIkFsbG93XCIsXG5cdFx0XHRcdFx0XHRBY3Rpb246IFtcImVjMjpEZXNjcmliZVN1Ym5ldHNcIiwgXCJlYzI6RGVzY3JpYmVTZWN1cml0eUdyb3Vwc1wiXSxcblx0XHRcdFx0XHRcdFJlc291cmNlOiBcIipcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSksXG5cdFx0fSk7XG5cdFx0bmV3IElhbVJvbGVQb2xpY3lBdHRhY2htZW50KHRoaXMsIFwiQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnRcIiwge1xuXHRcdFx0cG9saWN5QXJuOiBhdXRvc2NhbGVyUG9saWN5LmFybixcblx0XHRcdHJvbGU6IGF1dG9zY2FsZXJSb2xlLm5hbWUsXG5cdFx0fSk7XG5cblx0XHRuZXcgRWNzU2VydmljZSh0aGlzLCBcIkF1dG9zY2FsZXJTZXJ2aWNlXCIsIHtcblx0XHRcdGNsdXN0ZXI6IGNsdXN0ZXIuYXJuLFxuXHRcdFx0bmFtZTogXCJhdXRvc2NhbGVyLXNlcnZpY2VcIixcblx0XHRcdGRlc2lyZWRDb3VudDogMSxcblx0XHRcdGxhdW5jaFR5cGU6IFwiRkFSR0FURVwiLFxuXHRcdFx0dGFza0RlZmluaXRpb246IGF1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbi5hcm5XaXRob3V0UmV2aXNpb24sXG5cdFx0XHRuZXR3b3JrQ29uZmlndXJhdGlvbjoge1xuXHRcdFx0XHRhc3NpZ25QdWJsaWNJcDogdHJ1ZSxcblx0XHRcdFx0c3VibmV0czogc3VibmV0cy5pZHMsXG5cdFx0XHRcdHNlY3VyaXR5R3JvdXBzOiBzZWN1cml0eUdyb3Vwcy5pZHMsXG5cdFx0XHR9LFxuXHRcdFx0bGlmZWN5Y2xlOiB7XG5cdFx0XHRcdGlnbm9yZUNoYW5nZXM6IFtcImRlc2lyZWRfY291bnRcIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG59XG4iXX0=