@fjall/components-infrastructure 0.61.8 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/app.js +7 -4
- package/dist/lib/patterns/aws/buildkite.js +1 -1
- package/dist/lib/patterns/aws/compute.js +13 -11
- package/dist/lib/patterns/aws/freeTierApp.js +1 -1
- package/dist/lib/patterns/aws/managedOrganisation.js +1 -1
- package/dist/lib/patterns/aws/spotInstanceApp.js +1 -1
- package/dist/lib/resources/aws/compute/ecs.js +1 -1
- package/dist/lib/resources/aws/compute/lambda.js +1 -1
- package/dist/lib/resources/aws/secrets/secret.js +1 -1
- package/dist/lib/resources/aws/utilities/cfnOutput.js +2 -2
- package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
- package/dist/lib/resources/aws/utilities/resourceShare.d.ts +1 -1
- package/dist/lib/resources/aws/utilities/resourceShare.js +2 -2
- package/dist/lib/utils/standardTagsAspect.js +351 -351
- package/dist/lib/utils/tagResource.js +2 -2
- package/package.json +7 -4
|
@@ -28,407 +28,407 @@ class StandardTagsAspect {
|
|
|
28
28
|
}
|
|
29
29
|
processCfnResource(resource) {
|
|
30
30
|
// Skip SecretRotation resources as they create nested stacks with different tag requirements
|
|
31
|
-
if (resource.node.path.includes(
|
|
31
|
+
if (resource.node.path.includes("SecretRotation")) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
// Comprehensive list of CloudFormation resource types that don't support tags
|
|
35
35
|
// This list is based on AWS CloudFormation documentation and known limitations
|
|
36
36
|
const unsupportedTypes = [
|
|
37
37
|
// ACM
|
|
38
|
-
|
|
38
|
+
"AWS::CertificateManager::Account",
|
|
39
39
|
// API Gateway
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
40
|
+
"AWS::ApiGateway::Account",
|
|
41
|
+
"AWS::ApiGateway::BasePathMapping",
|
|
42
|
+
"AWS::ApiGateway::Deployment",
|
|
43
|
+
"AWS::ApiGateway::DocumentationPart",
|
|
44
|
+
"AWS::ApiGateway::DocumentationVersion",
|
|
45
|
+
"AWS::ApiGateway::GatewayResponse",
|
|
46
|
+
"AWS::ApiGateway::Method",
|
|
47
|
+
"AWS::ApiGateway::Model",
|
|
48
|
+
"AWS::ApiGateway::RequestValidator",
|
|
49
|
+
"AWS::ApiGateway::Resource",
|
|
50
|
+
"AWS::ApiGatewayV2::ApiMapping",
|
|
51
|
+
"AWS::ApiGatewayV2::Authorizer",
|
|
52
|
+
"AWS::ApiGatewayV2::Deployment",
|
|
53
|
+
"AWS::ApiGatewayV2::Integration",
|
|
54
|
+
"AWS::ApiGatewayV2::IntegrationResponse",
|
|
55
|
+
"AWS::ApiGatewayV2::Model",
|
|
56
|
+
"AWS::ApiGatewayV2::Route",
|
|
57
|
+
"AWS::ApiGatewayV2::RouteResponse",
|
|
58
58
|
// AppSync
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
"AWS::AppSync::DataSource",
|
|
60
|
+
"AWS::AppSync::FunctionConfiguration",
|
|
61
|
+
"AWS::AppSync::Resolver",
|
|
62
62
|
// Athena
|
|
63
|
-
|
|
63
|
+
"AWS::Athena::PreparedStatement",
|
|
64
64
|
// CloudFormation
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
"AWS::CloudFormation::CustomResource",
|
|
66
|
+
"AWS::CloudFormation::Macro",
|
|
67
|
+
"AWS::CloudFormation::ModuleDefaultVersion",
|
|
68
|
+
"AWS::CloudFormation::ModuleVersion",
|
|
69
|
+
"AWS::CloudFormation::PublicTypeVersion",
|
|
70
|
+
"AWS::CloudFormation::Publisher",
|
|
71
|
+
"AWS::CloudFormation::ResourceDefaultVersion",
|
|
72
|
+
"AWS::CloudFormation::ResourceVersion",
|
|
73
|
+
"AWS::CloudFormation::TypeActivation",
|
|
74
|
+
"AWS::CloudFormation::WaitCondition",
|
|
75
|
+
"AWS::CloudFormation::WaitConditionHandle",
|
|
76
76
|
// CloudWatch
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
"AWS::CloudWatch::Alarm",
|
|
78
|
+
"AWS::CloudWatch::AnomalyDetector",
|
|
79
|
+
"AWS::CloudWatch::CompositeAlarm",
|
|
80
|
+
"AWS::CloudWatch::Dashboard",
|
|
81
|
+
"AWS::CloudWatch::InsightRule",
|
|
82
|
+
"AWS::CloudWatch::MetricStream",
|
|
83
83
|
// CodeBuild
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
"AWS::CodeBuild::ReportGroup",
|
|
85
|
+
"AWS::CodeBuild::SourceCredential",
|
|
86
86
|
// CodeDeploy
|
|
87
|
-
|
|
87
|
+
"AWS::CodeDeploy::DeploymentConfig",
|
|
88
88
|
// CodePipeline
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
"AWS::CodePipeline::CustomActionType",
|
|
90
|
+
"AWS::CodePipeline::Webhook",
|
|
91
91
|
// Cognito
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
"AWS::Cognito::IdentityPoolRoleAttachment",
|
|
93
|
+
"AWS::Cognito::UserPoolClient",
|
|
94
|
+
"AWS::Cognito::UserPoolDomain",
|
|
95
|
+
"AWS::Cognito::UserPoolGroup",
|
|
96
|
+
"AWS::Cognito::UserPoolIdentityProvider",
|
|
97
|
+
"AWS::Cognito::UserPoolResourceServer",
|
|
98
|
+
"AWS::Cognito::UserPoolRiskConfigurationAttachment",
|
|
99
|
+
"AWS::Cognito::UserPoolUICustomizationAttachment",
|
|
100
|
+
"AWS::Cognito::UserPoolUser",
|
|
101
|
+
"AWS::Cognito::UserPoolUserToGroupAttachment",
|
|
102
102
|
// Config
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
"AWS::Config::AggregationAuthorization",
|
|
104
|
+
"AWS::Config::ConfigurationAggregator",
|
|
105
|
+
"AWS::Config::ConformancePack",
|
|
106
|
+
"AWS::Config::OrganizationConformancePack",
|
|
107
|
+
"AWS::Config::RemediationConfiguration",
|
|
108
|
+
"AWS::Config::StoredQuery",
|
|
109
109
|
// DynamoDB
|
|
110
|
-
|
|
110
|
+
"AWS::DynamoDB::GlobalTable",
|
|
111
111
|
// EC2
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
112
|
+
"AWS::EC2::CapacityReservationFleet",
|
|
113
|
+
"AWS::EC2::CarrierGateway",
|
|
114
|
+
"AWS::EC2::DHCPOptions",
|
|
115
|
+
"AWS::EC2::EC2Fleet",
|
|
116
|
+
"AWS::EC2::EgressOnlyInternetGateway",
|
|
117
|
+
"AWS::EC2::EIPAssociation",
|
|
118
|
+
"AWS::EC2::EnclaveCertificateIamRoleAssociation",
|
|
119
|
+
"AWS::EC2::FlowLog",
|
|
120
|
+
"AWS::EC2::GatewayRouteTableAssociation",
|
|
121
|
+
"AWS::EC2::InstanceConnectEndpoint",
|
|
122
|
+
"AWS::EC2::KeyPair",
|
|
123
|
+
"AWS::EC2::LaunchTemplate",
|
|
124
|
+
"AWS::EC2::NetworkInsightsAccessScope",
|
|
125
|
+
"AWS::EC2::NetworkInsightsAccessScopeAnalysis",
|
|
126
|
+
"AWS::EC2::NetworkInsightsAnalysis",
|
|
127
|
+
"AWS::EC2::NetworkInsightsPath",
|
|
128
|
+
"AWS::EC2::NetworkInterfaceAttachment",
|
|
129
|
+
"AWS::EC2::NetworkInterfacePermission",
|
|
130
|
+
"AWS::EC2::PlacementGroup",
|
|
131
|
+
"AWS::EC2::Route",
|
|
132
|
+
"AWS::EC2::SecurityGroupEgress",
|
|
133
|
+
"AWS::EC2::SecurityGroupIngress",
|
|
134
|
+
"AWS::EC2::SubnetCidrBlock",
|
|
135
|
+
"AWS::EC2::SubnetNetworkAclAssociation",
|
|
136
|
+
"AWS::EC2::SubnetRouteTableAssociation",
|
|
137
|
+
"AWS::EC2::TransitGatewayAttachment",
|
|
138
|
+
"AWS::EC2::TransitGatewayConnect",
|
|
139
|
+
"AWS::EC2::TransitGatewayMulticastDomain",
|
|
140
|
+
"AWS::EC2::TransitGatewayMulticastDomainAssociation",
|
|
141
|
+
"AWS::EC2::TransitGatewayMulticastGroupMember",
|
|
142
|
+
"AWS::EC2::TransitGatewayMulticastGroupSource",
|
|
143
|
+
"AWS::EC2::TransitGatewayPeeringAttachment",
|
|
144
|
+
"AWS::EC2::TransitGatewayRoute",
|
|
145
|
+
"AWS::EC2::TransitGatewayRouteTable",
|
|
146
|
+
"AWS::EC2::TransitGatewayRouteTableAssociation",
|
|
147
|
+
"AWS::EC2::TransitGatewayRouteTablePropagation",
|
|
148
|
+
"AWS::EC2::TransitGatewayVpcAttachment",
|
|
149
|
+
"AWS::EC2::VerifiedAccessEndpoint",
|
|
150
|
+
"AWS::EC2::VerifiedAccessGroup",
|
|
151
|
+
"AWS::EC2::VerifiedAccessInstance",
|
|
152
|
+
"AWS::EC2::VerifiedAccessTrustProvider",
|
|
153
|
+
"AWS::EC2::VolumeAttachment",
|
|
154
|
+
"AWS::EC2::VPCCidrBlock",
|
|
155
|
+
"AWS::EC2::VPCDHCPOptionsAssociation",
|
|
156
|
+
"AWS::EC2::VPCEndpointConnectionNotification",
|
|
157
|
+
"AWS::EC2::VPCEndpointService",
|
|
158
|
+
"AWS::EC2::VPCEndpointServicePermissions",
|
|
159
|
+
"AWS::EC2::VPCGatewayAttachment",
|
|
160
|
+
"AWS::EC2::VPNConnectionRoute",
|
|
161
|
+
"AWS::EC2::VPNGatewayRoutePropagation",
|
|
162
162
|
// ECR
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
163
|
+
"AWS::ECR::PublicRepository",
|
|
164
|
+
"AWS::ECR::PullThroughCacheRule",
|
|
165
|
+
"AWS::ECR::RegistryPolicy",
|
|
166
|
+
"AWS::ECR::ReplicationConfiguration",
|
|
167
167
|
// ECS
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
"AWS::ECS::AccountSetting",
|
|
169
|
+
"AWS::ECS::CapacityProvider",
|
|
170
|
+
"AWS::ECS::ClusterCapacityProviderAssociations",
|
|
171
|
+
"AWS::ECS::PrimaryTaskSet",
|
|
172
|
+
"AWS::ECS::TaskSet",
|
|
173
173
|
// EFS
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
"AWS::EFS::AccessPoint",
|
|
175
|
+
"AWS::EFS::MountTarget",
|
|
176
176
|
// EKS
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
"AWS::EKS::Addon",
|
|
178
|
+
"AWS::EKS::FargateProfile",
|
|
179
|
+
"AWS::EKS::IdentityProviderConfig",
|
|
180
180
|
// ElastiCache
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
"AWS::ElastiCache::ParameterGroup",
|
|
182
|
+
"AWS::ElastiCache::SecurityGroup",
|
|
183
|
+
"AWS::ElastiCache::SecurityGroupIngress",
|
|
184
|
+
"AWS::ElastiCache::SubnetGroup",
|
|
185
185
|
// ElasticBeanstalk
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
"AWS::ElasticBeanstalk::ApplicationVersion",
|
|
187
|
+
"AWS::ElasticBeanstalk::ConfigurationTemplate",
|
|
188
188
|
// ElasticLoadBalancingV2
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
189
|
+
"AWS::ElasticLoadBalancingV2::Listener",
|
|
190
|
+
"AWS::ElasticLoadBalancingV2::ListenerCertificate",
|
|
191
|
+
"AWS::ElasticLoadBalancingV2::ListenerRule",
|
|
192
|
+
"AWS::ElasticLoadBalancingV2::TargetGroupAttachment",
|
|
193
193
|
// EventBridge (Events)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
194
|
+
"AWS::Events::ApiDestination",
|
|
195
|
+
"AWS::Events::Archive",
|
|
196
|
+
"AWS::Events::Connection",
|
|
197
|
+
"AWS::Events::Endpoint",
|
|
198
|
+
"AWS::Events::EventBusPolicy",
|
|
199
|
+
"AWS::Events::Rule",
|
|
200
200
|
// FSx
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
201
|
+
"AWS::FSx::DataRepositoryAssociation",
|
|
202
|
+
"AWS::FSx::Snapshot",
|
|
203
|
+
"AWS::FSx::StorageVirtualMachine",
|
|
204
|
+
"AWS::FSx::Volume",
|
|
205
205
|
// GameLift
|
|
206
|
-
|
|
207
|
-
|
|
206
|
+
"AWS::GameLift::GameServerGroup",
|
|
207
|
+
"AWS::GameLift::Location",
|
|
208
208
|
// Glue
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
209
|
+
"AWS::Glue::Connection",
|
|
210
|
+
"AWS::Glue::Database",
|
|
211
|
+
"AWS::Glue::DataCatalogEncryptionSettings",
|
|
212
|
+
"AWS::Glue::Partition",
|
|
213
|
+
"AWS::Glue::SchemaVersion",
|
|
214
|
+
"AWS::Glue::SchemaVersionMetadata",
|
|
215
|
+
"AWS::Glue::SecurityConfiguration",
|
|
216
|
+
"AWS::Glue::Table",
|
|
217
|
+
"AWS::Glue::UserDefinedFunction",
|
|
218
218
|
// GuardDuty
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
219
|
+
"AWS::GuardDuty::Detector",
|
|
220
|
+
"AWS::GuardDuty::Filter",
|
|
221
|
+
"AWS::GuardDuty::IPSet",
|
|
222
|
+
"AWS::GuardDuty::Master",
|
|
223
|
+
"AWS::GuardDuty::Member",
|
|
224
|
+
"AWS::GuardDuty::ThreatIntelSet",
|
|
225
225
|
// IAM
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
226
|
+
"AWS::IAM::AccessKey",
|
|
227
|
+
"AWS::IAM::Group",
|
|
228
|
+
"AWS::IAM::GroupPolicy",
|
|
229
|
+
"AWS::IAM::InstanceProfile",
|
|
230
|
+
"AWS::IAM::ManagedPolicy",
|
|
231
|
+
"AWS::IAM::OIDCProvider",
|
|
232
|
+
"AWS::IAM::Policy",
|
|
233
|
+
"AWS::IAM::Role",
|
|
234
|
+
"AWS::IAM::RolePolicy",
|
|
235
|
+
"AWS::IAM::SAMLProvider",
|
|
236
|
+
"AWS::IAM::ServerCertificate",
|
|
237
|
+
"AWS::IAM::ServiceLinkedRole",
|
|
238
|
+
"AWS::IAM::User",
|
|
239
|
+
"AWS::IAM::UserPolicy",
|
|
240
|
+
"AWS::IAM::UserToGroupAddition",
|
|
241
|
+
"AWS::IAM::VirtualMFADevice",
|
|
242
242
|
// IoT
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
243
|
+
"AWS::IoT::AccountAuditConfiguration",
|
|
244
|
+
"AWS::IoT::Authorizer",
|
|
245
|
+
"AWS::IoT::Certificate",
|
|
246
|
+
"AWS::IoT::CustomMetric",
|
|
247
|
+
"AWS::IoT::Dimension",
|
|
248
|
+
"AWS::IoT::DomainConfiguration",
|
|
249
|
+
"AWS::IoT::FleetMetric",
|
|
250
|
+
"AWS::IoT::JobTemplate",
|
|
251
|
+
"AWS::IoT::Logging",
|
|
252
|
+
"AWS::IoT::MitigationAction",
|
|
253
|
+
"AWS::IoT::Policy",
|
|
254
|
+
"AWS::IoT::PolicyPrincipalAttachment",
|
|
255
|
+
"AWS::IoT::ProvisioningTemplate",
|
|
256
|
+
"AWS::IoT::ResourceSpecificLogging",
|
|
257
|
+
"AWS::IoT::RoleAlias",
|
|
258
|
+
"AWS::IoT::ScheduledAudit",
|
|
259
|
+
"AWS::IoT::SecurityProfile",
|
|
260
|
+
"AWS::IoT::Thing",
|
|
261
|
+
"AWS::IoT::ThingGroup",
|
|
262
|
+
"AWS::IoT::ThingPrincipalAttachment",
|
|
263
|
+
"AWS::IoT::ThingType",
|
|
264
|
+
"AWS::IoT::TopicRule",
|
|
265
|
+
"AWS::IoT::TopicRuleDestination",
|
|
266
266
|
// KMS
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
267
|
+
"AWS::KMS::Alias",
|
|
268
|
+
"AWS::KMS::Grant",
|
|
269
|
+
"AWS::KMS::ReplicaKey",
|
|
270
270
|
// Lambda
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
271
|
+
"AWS::Lambda::CodeSigningConfig",
|
|
272
|
+
"AWS::Lambda::EventInvokeConfig",
|
|
273
|
+
"AWS::Lambda::EventSourceMapping",
|
|
274
|
+
"AWS::Lambda::LayerVersion",
|
|
275
|
+
"AWS::Lambda::LayerVersionPermission",
|
|
276
|
+
"AWS::Lambda::Permission",
|
|
277
|
+
"AWS::Lambda::ProvisionedConcurrencyConfig",
|
|
278
|
+
"AWS::Lambda::Url",
|
|
279
|
+
"AWS::Lambda::Version",
|
|
280
280
|
// Logs
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
281
|
+
"AWS::Logs::AccountPolicy",
|
|
282
|
+
"AWS::Logs::Destination",
|
|
283
|
+
"AWS::Logs::LogGroup",
|
|
284
|
+
"AWS::Logs::LogStream",
|
|
285
|
+
"AWS::Logs::MetricFilter",
|
|
286
|
+
"AWS::Logs::QueryDefinition",
|
|
287
|
+
"AWS::Logs::ResourcePolicy",
|
|
288
|
+
"AWS::Logs::SubscriptionFilter",
|
|
289
289
|
// Macie
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
290
|
+
"AWS::Macie::AllowList",
|
|
291
|
+
"AWS::Macie::CustomDataIdentifier",
|
|
292
|
+
"AWS::Macie::FindingsFilter",
|
|
293
|
+
"AWS::Macie::Session",
|
|
294
294
|
// Neptune
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
295
|
+
"AWS::Neptune::DBClusterParameterGroup",
|
|
296
|
+
"AWS::Neptune::DBParameterGroup",
|
|
297
|
+
"AWS::Neptune::DBSubnetGroup",
|
|
298
298
|
// Organizations
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
299
|
+
"AWS::Organizations::Account",
|
|
300
|
+
"AWS::Organizations::Organization",
|
|
301
|
+
"AWS::Organizations::OrganizationalUnit",
|
|
302
|
+
"AWS::Organizations::Policy",
|
|
303
|
+
"AWS::Organizations::ResourcePolicy",
|
|
304
304
|
// RDS
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
305
|
+
"AWS::RDS::DBClusterParameterGroup",
|
|
306
|
+
"AWS::RDS::DBParameterGroup",
|
|
307
|
+
"AWS::RDS::DBSecurityGroup",
|
|
308
|
+
"AWS::RDS::DBSecurityGroupIngress",
|
|
309
|
+
"AWS::RDS::DBSubnetGroup",
|
|
310
|
+
"AWS::RDS::EventSubscription",
|
|
311
|
+
"AWS::RDS::GlobalCluster",
|
|
312
|
+
"AWS::RDS::OptionGroup",
|
|
313
313
|
// Redshift
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
314
|
+
"AWS::Redshift::ClusterParameterGroup",
|
|
315
|
+
"AWS::Redshift::ClusterSecurityGroup",
|
|
316
|
+
"AWS::Redshift::ClusterSecurityGroupIngress",
|
|
317
|
+
"AWS::Redshift::ClusterSubnetGroup",
|
|
318
|
+
"AWS::Redshift::EndpointAccess",
|
|
319
|
+
"AWS::Redshift::EndpointAuthorization",
|
|
320
|
+
"AWS::Redshift::EventSubscription",
|
|
321
|
+
"AWS::Redshift::ScheduledAction",
|
|
322
322
|
// Route53
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
323
|
+
"AWS::Route53::DNSSEC",
|
|
324
|
+
"AWS::Route53::HealthCheck",
|
|
325
|
+
"AWS::Route53::HostedZone",
|
|
326
|
+
"AWS::Route53::KeySigningKey",
|
|
327
|
+
"AWS::Route53::RecordSet",
|
|
328
|
+
"AWS::Route53::RecordSetGroup",
|
|
329
329
|
// Route53Resolver
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
330
|
+
"AWS::Route53Resolver::FirewallDomainList",
|
|
331
|
+
"AWS::Route53Resolver::FirewallRuleGroup",
|
|
332
|
+
"AWS::Route53Resolver::FirewallRuleGroupAssociation",
|
|
333
|
+
"AWS::Route53Resolver::ResolverConfig",
|
|
334
|
+
"AWS::Route53Resolver::ResolverDNSSECConfig",
|
|
335
|
+
"AWS::Route53Resolver::ResolverQueryLoggingConfig",
|
|
336
|
+
"AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation",
|
|
337
|
+
"AWS::Route53Resolver::ResolverRule",
|
|
338
|
+
"AWS::Route53Resolver::ResolverRuleAssociation",
|
|
339
339
|
// S3
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
340
|
+
"AWS::S3::AccessPoint",
|
|
341
|
+
"AWS::S3::BucketPolicy",
|
|
342
|
+
"AWS::S3::MultiRegionAccessPoint",
|
|
343
|
+
"AWS::S3::MultiRegionAccessPointPolicy",
|
|
344
|
+
"AWS::S3::StorageLens",
|
|
345
345
|
// SDB
|
|
346
|
-
|
|
346
|
+
"AWS::SDB::Domain",
|
|
347
347
|
// SecretsManager
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
348
|
+
"AWS::SecretsManager::ResourcePolicy",
|
|
349
|
+
"AWS::SecretsManager::RotationSchedule",
|
|
350
|
+
"AWS::SecretsManager::SecretTargetAttachment",
|
|
351
351
|
// SecurityHub
|
|
352
|
-
|
|
352
|
+
"AWS::SecurityHub::Hub",
|
|
353
353
|
// ServiceCatalog
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
354
|
+
"AWS::ServiceCatalog::AcceptedPortfolioShare",
|
|
355
|
+
"AWS::ServiceCatalog::LaunchNotificationConstraint",
|
|
356
|
+
"AWS::ServiceCatalog::LaunchRoleConstraint",
|
|
357
|
+
"AWS::ServiceCatalog::LaunchTemplateConstraint",
|
|
358
|
+
"AWS::ServiceCatalog::PortfolioPrincipalAssociation",
|
|
359
|
+
"AWS::ServiceCatalog::PortfolioProductAssociation",
|
|
360
|
+
"AWS::ServiceCatalog::PortfolioShare",
|
|
361
|
+
"AWS::ServiceCatalog::ResourceUpdateConstraint",
|
|
362
|
+
"AWS::ServiceCatalog::ServiceAction",
|
|
363
|
+
"AWS::ServiceCatalog::ServiceActionAssociation",
|
|
364
|
+
"AWS::ServiceCatalog::StackSetConstraint",
|
|
365
|
+
"AWS::ServiceCatalog::TagOption",
|
|
366
|
+
"AWS::ServiceCatalog::TagOptionAssociation",
|
|
367
367
|
// SES
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
368
|
+
"AWS::SES::ConfigurationSet",
|
|
369
|
+
"AWS::SES::ConfigurationSetEventDestination",
|
|
370
|
+
"AWS::SES::ContactList",
|
|
371
|
+
"AWS::SES::DedicatedIpPool",
|
|
372
|
+
"AWS::SES::EmailIdentity",
|
|
373
|
+
"AWS::SES::ReceiptFilter",
|
|
374
|
+
"AWS::SES::ReceiptRule",
|
|
375
|
+
"AWS::SES::ReceiptRuleSet",
|
|
376
|
+
"AWS::SES::Template",
|
|
377
|
+
"AWS::SES::VdmAttributes",
|
|
378
378
|
// SNS
|
|
379
|
-
|
|
380
|
-
|
|
379
|
+
"AWS::SNS::Subscription",
|
|
380
|
+
"AWS::SNS::TopicPolicy",
|
|
381
381
|
// SQS
|
|
382
|
-
|
|
382
|
+
"AWS::SQS::QueuePolicy",
|
|
383
383
|
// SSM
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
384
|
+
"AWS::SSM::Association",
|
|
385
|
+
"AWS::SSM::Document",
|
|
386
|
+
"AWS::SSM::MaintenanceWindow",
|
|
387
|
+
"AWS::SSM::MaintenanceWindowTarget",
|
|
388
|
+
"AWS::SSM::MaintenanceWindowTask",
|
|
389
|
+
"AWS::SSM::Parameter",
|
|
390
|
+
"AWS::SSM::PatchBaseline",
|
|
391
|
+
"AWS::SSM::ResourceDataSync",
|
|
392
|
+
"AWS::SSM::ResourcePolicy",
|
|
393
393
|
// SSO
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
394
|
+
"AWS::SSO::Assignment",
|
|
395
|
+
"AWS::SSO::InstanceAccessControlAttributeConfiguration",
|
|
396
|
+
"AWS::SSO::PermissionSet",
|
|
397
397
|
// StepFunctions
|
|
398
|
-
|
|
398
|
+
"AWS::StepFunctions::Activity",
|
|
399
399
|
// WAF/WAFv2
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
400
|
+
"AWS::WAF::ByteMatchSet",
|
|
401
|
+
"AWS::WAF::IPSet",
|
|
402
|
+
"AWS::WAF::Rule",
|
|
403
|
+
"AWS::WAF::SizeConstraintSet",
|
|
404
|
+
"AWS::WAF::SqlInjectionMatchSet",
|
|
405
|
+
"AWS::WAF::WebACL",
|
|
406
|
+
"AWS::WAF::XssMatchSet",
|
|
407
|
+
"AWS::WAFRegional::ByteMatchSet",
|
|
408
|
+
"AWS::WAFRegional::GeoMatchSet",
|
|
409
|
+
"AWS::WAFRegional::IPSet",
|
|
410
|
+
"AWS::WAFRegional::RateBasedRule",
|
|
411
|
+
"AWS::WAFRegional::RegexPatternSet",
|
|
412
|
+
"AWS::WAFRegional::Rule",
|
|
413
|
+
"AWS::WAFRegional::SizeConstraintSet",
|
|
414
|
+
"AWS::WAFRegional::SqlInjectionMatchSet",
|
|
415
|
+
"AWS::WAFRegional::WebACL",
|
|
416
|
+
"AWS::WAFRegional::WebACLAssociation",
|
|
417
|
+
"AWS::WAFRegional::XssMatchSet",
|
|
418
|
+
"AWS::WAFv2::IPSet",
|
|
419
|
+
"AWS::WAFv2::LoggingConfiguration",
|
|
420
|
+
"AWS::WAFv2::RegexPatternSet",
|
|
421
|
+
"AWS::WAFv2::RuleGroup",
|
|
422
|
+
"AWS::WAFv2::WebACL",
|
|
423
|
+
"AWS::WAFv2::WebACLAssociation",
|
|
424
424
|
// Serverless
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
425
|
+
"AWS::Serverless::Api",
|
|
426
|
+
"AWS::Serverless::Application",
|
|
427
|
+
"AWS::Serverless::Function",
|
|
428
|
+
"AWS::Serverless::HttpApi",
|
|
429
|
+
"AWS::Serverless::LayerVersion",
|
|
430
|
+
"AWS::Serverless::SimpleTable",
|
|
431
|
+
"AWS::Serverless::StateMachine"
|
|
432
432
|
];
|
|
433
433
|
if (unsupportedTypes.includes(resource.cfnResourceType)) {
|
|
434
434
|
return;
|
|
@@ -437,18 +437,18 @@ class StandardTagsAspect {
|
|
|
437
437
|
const stack = aws_cdk_lib_1.Stack.of(resource);
|
|
438
438
|
const logicalId = stack.getLogicalId(resource);
|
|
439
439
|
// Use addTransform to add tags during synthesis
|
|
440
|
-
resource.addPropertyOverride(
|
|
440
|
+
resource.addPropertyOverride("Tags", this.buildTagsArray(resource));
|
|
441
441
|
}
|
|
442
442
|
buildTagsArray(resource) {
|
|
443
443
|
const tagMap = new Map();
|
|
444
444
|
// Add IPAM pool tag for VPCs with IPAM configuration
|
|
445
|
-
if (resource.cfnResourceType ===
|
|
445
|
+
if (resource.cfnResourceType === "AWS::EC2::VPC") {
|
|
446
446
|
const properties = resource.cfnProperties || {};
|
|
447
447
|
if (properties.ipv4IpamPoolId) {
|
|
448
448
|
const stack = aws_cdk_lib_1.Stack.of(resource);
|
|
449
|
-
const accountId = stack.node.tryGetContext(
|
|
449
|
+
const accountId = stack.node.tryGetContext("accountId");
|
|
450
450
|
if (accountId) {
|
|
451
|
-
tagMap.set(
|
|
451
|
+
tagMap.set("fjall:operations:pool", accountId);
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
454
|
}
|
|
@@ -464,4 +464,4 @@ class StandardTagsAspect {
|
|
|
464
464
|
}
|
|
465
465
|
}
|
|
466
466
|
exports.StandardTagsAspect = StandardTagsAspect;
|
|
467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZ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Q0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxHQUFHLEVBQUUsR0FBRztZQUNSLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFsZ0JELGdEQWtnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqIFxuICogVXBkYXRlZCBmb3IgQ0RLIHYyLjIwNi4wKyBjb21wYXRpYmlsaXR5OlxuICogLSBBdm9pZHMgdXNpbmcgYW55IHRhZ2dpbmcgQVBJcyBkdXJpbmcgYXNwZWN0IHZpc2l0YXRpb24gdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuICogLSBVc2VzIGEgc3ludGhlc2lzLXRpbWUgYXBwcm9hY2ggdG8gbW9kaWZ5IENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlc1xuICogLSBNYWludGFpbnMgdGhlIHNhbWUgY2xlYW4gQVBJIGFuZCBhdXRvbWF0aWMgdGFnZ2luZyBiZW5lZml0c1xuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRUYWdzQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZWRUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIHJlYWRvbmx5IHRhZ2dlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0PElDb25zdHJ1Y3Q+KCk7XG5cbiAgY29uc3RydWN0b3IocmVxdWlyZWRUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgdGhpcy5yZXF1aXJlZFRhZ3MgPSByZXF1aXJlZFRhZ3M7XG4gIH1cblxuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgLy8gU2tpcCBpZiBhbHJlYWR5IHByb2Nlc3NlZFxuICAgIGlmICh0aGlzLnRhZ2dlZFJlc291cmNlcy5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gUHJvY2VzcyBMMSAoQ0ZOKSByZXNvdXJjZXMgb25seVxuICAgIGlmIChDZm5SZXNvdXJjZS5pc0NmblJlc291cmNlKG5vZGUpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDZm5SZXNvdXJjZShub2RlIGFzIENmblJlc291cmNlKTtcbiAgICAgIHRoaXMudGFnZ2VkUmVzb3VyY2VzLmFkZChub2RlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgcHJvY2Vzc0NmblJlc291cmNlKHJlc291cmNlOiBDZm5SZXNvdXJjZSk6IHZvaWQge1xuICAgIC8vIFNraXAgU2VjcmV0Um90YXRpb24gcmVzb3VyY2VzIGFzIHRoZXkgY3JlYXRlIG5lc3RlZCBzdGFja3Mgd2l0aCBkaWZmZXJlbnQgdGFnIHJlcXVpcmVtZW50c1xuICAgIGlmIChyZXNvdXJjZS5ub2RlLnBhdGguaW5jbHVkZXMoJ1NlY3JldFJvdGF0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgICdBV1M6OkNlcnRpZmljYXRlTWFuYWdlcjo6QWNjb3VudCcsXG4gICAgICBcbiAgICAgIC8vIEFQSSBHYXRld2F5XG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50JyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkJhc2VQYXRoTWFwcGluZycsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50JyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0JyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25WZXJzaW9uJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXk6OkdhdGV3YXlSZXNwb25zZScsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpNZXRob2QnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheTo6TW9kZWwnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheTo6UmVxdWVzdFZhbGlkYXRvcicsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZScsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5VjI6OkFwaU1hcHBpbmcnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudCcsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25SZXNwb25zZScsXG4gICAgICAnQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsJyxcbiAgICAgICdBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGUnLFxuICAgICAgJ0FXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVJlc3BvbnNlJyxcbiAgICAgIFxuICAgICAgLy8gQXBwU3luY1xuICAgICAgJ0FXUzo6QXBwU3luYzo6RGF0YVNvdXJjZScsXG4gICAgICAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInLFxuICAgICAgXG4gICAgICAvLyBBdGhlbmFcbiAgICAgICdBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgXG4gICAgICAvLyBDbG91ZEZvcm1hdGlvblxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OkN1c3RvbVJlc291cmNlJyxcbiAgICAgICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpNYWNybycsXG4gICAgICAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246Ok1vZHVsZVZlcnNpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlB1YmxpY1R5cGVWZXJzaW9uJyxcbiAgICAgICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXInLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlJlc291cmNlRGVmYXVsdFZlcnNpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlJlc291cmNlVmVyc2lvbicsXG4gICAgICAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OldhaXRDb25kaXRpb24nLFxuICAgICAgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OldhaXRDb25kaXRpb25IYW5kbGUnLFxuICAgICAgXG4gICAgICAvLyBDbG91ZFdhdGNoXG4gICAgICAnQVdTOjpDbG91ZFdhdGNoOjpBbGFybScsXG4gICAgICAnQVdTOjpDbG91ZFdhdGNoOjpBbm9tYWx5RGV0ZWN0b3InLFxuICAgICAgJ0FXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm0nLFxuICAgICAgJ0FXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkJyxcbiAgICAgICdBV1M6OkNsb3VkV2F0Y2g6Okluc2lnaHRSdWxlJyxcbiAgICAgICdBV1M6OkNsb3VkV2F0Y2g6Ok1ldHJpY1N0cmVhbScsXG4gICAgICBcbiAgICAgIC8vIENvZGVCdWlsZFxuICAgICAgJ0FXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cCcsXG4gICAgICAnQVdTOjpDb2RlQnVpbGQ6OlNvdXJjZUNyZWRlbnRpYWwnLFxuICAgICAgXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICAnQVdTOjpDb2RlRGVwbG95OjpEZXBsb3ltZW50Q29uZmlnJyxcbiAgICAgIFxuICAgICAgLy8gQ29kZVBpcGVsaW5lXG4gICAgICAnQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGUnLFxuICAgICAgJ0FXUzo6Q29kZVBpcGVsaW5lOjpXZWJob29rJyxcbiAgICAgIFxuICAgICAgLy8gQ29nbml0b1xuICAgICAgJ0FXUzo6Q29nbml0bzo6SWRlbnRpdHlQb29sUm9sZUF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnQnLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW4nLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xHcm91cCcsXG4gICAgICAnQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXInLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xSZXNvdXJjZVNlcnZlcicsXG4gICAgICAnQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6Q29nbml0bzo6VXNlclBvb2xVc2VyJyxcbiAgICAgICdBV1M6OkNvZ25pdG86OlVzZXJQb29sVXNlclRvR3JvdXBBdHRhY2htZW50JyxcbiAgICAgIFxuICAgICAgLy8gQ29uZmlnXG4gICAgICAnQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvbicsXG4gICAgICAnQVdTOjpDb25maWc6OkNvbmZpZ3VyYXRpb25BZ2dyZWdhdG9yJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6Q29uZm9ybWFuY2VQYWNrJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6UmVtZWRpYXRpb25Db25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OkNvbmZpZzo6U3RvcmVkUXVlcnknLFxuICAgICAgXG4gICAgICAvLyBEeW5hbW9EQlxuICAgICAgJ0FXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlJyxcbiAgICAgIFxuICAgICAgLy8gRUMyXG4gICAgICAnQVdTOjpFQzI6OkNhcGFjaXR5UmVzZXJ2YXRpb25GbGVldCcsXG4gICAgICAnQVdTOjpFQzI6OkNhcnJpZXJHYXRld2F5JyxcbiAgICAgICdBV1M6OkVDMjo6REhDUE9wdGlvbnMnLFxuICAgICAgJ0FXUzo6RUMyOjpFQzJGbGVldCcsXG4gICAgICAnQVdTOjpFQzI6OkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXknLFxuICAgICAgJ0FXUzo6RUMyOjpFSVBBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OkVuY2xhdmVDZXJ0aWZpY2F0ZUlhbVJvbGVBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OkZsb3dMb2cnLFxuICAgICAgJ0FXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OkVDMjo6SW5zdGFuY2VDb25uZWN0RW5kcG9pbnQnLFxuICAgICAgJ0FXUzo6RUMyOjpLZXlQYWlyJyxcbiAgICAgICdBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGUnLFxuICAgICAgJ0FXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZScsXG4gICAgICAnQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlQW5hbHlzaXMnLFxuICAgICAgJ0FXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpcycsXG4gICAgICAnQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c1BhdGgnLFxuICAgICAgJ0FXUzo6RUMyOjpOZXR3b3JrSW50ZXJmYWNlQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uJyxcbiAgICAgICdBV1M6OkVDMjo6UGxhY2VtZW50R3JvdXAnLFxuICAgICAgJ0FXUzo6RUMyOjpSb3V0ZScsXG4gICAgICAnQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3MnLFxuICAgICAgJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzcycsXG4gICAgICAnQVdTOjpFQzI6OlN1Ym5ldENpZHJCbG9jaycsXG4gICAgICAnQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlN1Ym5ldFJvdXRlVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5QXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdCcsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluJyxcbiAgICAgICdBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5Bc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXInLFxuICAgICAgJ0FXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheU11bHRpY2FzdEdyb3VwU291cmNlJyxcbiAgICAgICdBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlQZWVyaW5nQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGUnLFxuICAgICAgJ0FXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGUnLFxuICAgICAgJ0FXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uJyxcbiAgICAgICdBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50JyxcbiAgICAgICdBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NFbmRwb2ludCcsXG4gICAgICAnQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXAnLFxuICAgICAgJ0FXUzo6RUMyOjpWZXJpZmllZEFjY2Vzc0luc3RhbmNlJyxcbiAgICAgICdBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NUcnVzdFByb3ZpZGVyJyxcbiAgICAgICdBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudCcsXG4gICAgICAnQVdTOjpFQzI6OlZQQ0NpZHJCbG9jaycsXG4gICAgICAnQVdTOjpFQzI6OlZQQ0RIQ1BPcHRpb25zQXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb24nLFxuICAgICAgJ0FXUzo6RUMyOjpWUENFbmRwb2ludFNlcnZpY2UnLFxuICAgICAgJ0FXUzo6RUMyOjpWUENFbmRwb2ludFNlcnZpY2VQZXJtaXNzaW9ucycsXG4gICAgICAnQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50JyxcbiAgICAgICdBV1M6OkVDMjo6VlBOQ29ubmVjdGlvblJvdXRlJyxcbiAgICAgICdBV1M6OkVDMjo6VlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBFQ1JcbiAgICAgICdBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeScsXG4gICAgICAnQVdTOjpFQ1I6OlB1bGxUaHJvdWdoQ2FjaGVSdWxlJyxcbiAgICAgICdBV1M6OkVDUjo6UmVnaXN0cnlQb2xpY3knLFxuICAgICAgJ0FXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBFQ1NcbiAgICAgICdBV1M6OkVDUzo6QWNjb3VudFNldHRpbmcnLFxuICAgICAgJ0FXUzo6RUNTOjpDYXBhY2l0eVByb3ZpZGVyJyxcbiAgICAgICdBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0FXUzo6RUNTOjpQcmltYXJ5VGFza1NldCcsXG4gICAgICAnQVdTOjpFQ1M6OlRhc2tTZXQnLFxuICAgICAgXG4gICAgICAvLyBFRlNcbiAgICAgICdBV1M6OkVGUzo6QWNjZXNzUG9pbnQnLFxuICAgICAgJ0FXUzo6RUZTOjpNb3VudFRhcmdldCcsXG4gICAgICBcbiAgICAgIC8vIEVLU1xuICAgICAgJ0FXUzo6RUtTOjpBZGRvbicsXG4gICAgICAnQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlJyxcbiAgICAgICdBV1M6OkVLUzo6SWRlbnRpdHlQcm92aWRlckNvbmZpZycsXG4gICAgICBcbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICAnQVdTOjpFbGFzdGlDYWNoZTo6UGFyYW1ldGVyR3JvdXAnLFxuICAgICAgJ0FXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXAnLFxuICAgICAgJ0FXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBJbmdyZXNzJyxcbiAgICAgICdBV1M6OkVsYXN0aUNhY2hlOjpTdWJuZXRHcm91cCcsXG4gICAgICBcbiAgICAgIC8vIEVsYXN0aWNCZWFuc3RhbGtcbiAgICAgICdBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvbicsXG4gICAgICAnQVdTOjpFbGFzdGljQmVhbnN0YWxrOjpDb25maWd1cmF0aW9uVGVtcGxhdGUnLFxuICAgICAgXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICAnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lcicsXG4gICAgICAnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlJyxcbiAgICAgICdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZScsXG4gICAgICAnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cEF0dGFjaG1lbnQnLFxuICAgICAgXG4gICAgICAvLyBFdmVudEJyaWRnZSAoRXZlbnRzKVxuICAgICAgJ0FXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvbicsXG4gICAgICAnQVdTOjpFdmVudHM6OkFyY2hpdmUnLFxuICAgICAgJ0FXUzo6RXZlbnRzOjpDb25uZWN0aW9uJyxcbiAgICAgICdBV1M6OkV2ZW50czo6RW5kcG9pbnQnLFxuICAgICAgJ0FXUzo6RXZlbnRzOjpFdmVudEJ1c1BvbGljeScsXG4gICAgICAnQVdTOjpFdmVudHM6OlJ1bGUnLFxuICAgICAgXG4gICAgICAvLyBGU3hcbiAgICAgICdBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpGU3g6OlNuYXBzaG90JyxcbiAgICAgICdBV1M6OkZTeDo6U3RvcmFnZVZpcnR1YWxNYWNoaW5lJyxcbiAgICAgICdBV1M6OkZTeDo6Vm9sdW1lJyxcbiAgICAgIFxuICAgICAgLy8gR2FtZUxpZnRcbiAgICAgICdBV1M6OkdhbWVMaWZ0OjpHYW1lU2VydmVyR3JvdXAnLFxuICAgICAgJ0FXUzo6R2FtZUxpZnQ6OkxvY2F0aW9uJyxcbiAgICAgIFxuICAgICAgLy8gR2x1ZVxuICAgICAgJ0FXUzo6R2x1ZTo6Q29ubmVjdGlvbicsXG4gICAgICAnQVdTOjpHbHVlOjpEYXRhYmFzZScsXG4gICAgICAnQVdTOjpHbHVlOjpEYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncycsXG4gICAgICAnQVdTOjpHbHVlOjpQYXJ0aXRpb24nLFxuICAgICAgJ0FXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbicsXG4gICAgICAnQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uTWV0YWRhdGEnLFxuICAgICAgJ0FXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OkdsdWU6OlRhYmxlJyxcbiAgICAgICdBV1M6OkdsdWU6OlVzZXJEZWZpbmVkRnVuY3Rpb24nLFxuICAgICAgXG4gICAgICAvLyBHdWFyZER1dHlcbiAgICAgICdBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3InLFxuICAgICAgJ0FXUzo6R3VhcmREdXR5OjpGaWx0ZXInLFxuICAgICAgJ0FXUzo6R3VhcmREdXR5OjpJUFNldCcsXG4gICAgICAnQVdTOjpHdWFyZER1dHk6Ok1hc3RlcicsXG4gICAgICAnQVdTOjpHdWFyZER1dHk6Ok1lbWJlcicsXG4gICAgICAnQVdTOjpHdWFyZER1dHk6OlRocmVhdEludGVsU2V0JyxcbiAgICAgIFxuICAgICAgLy8gSUFNXG4gICAgICAnQVdTOjpJQU06OkFjY2Vzc0tleScsXG4gICAgICAnQVdTOjpJQU06Okdyb3VwJyxcbiAgICAgICdBV1M6OklBTTo6R3JvdXBQb2xpY3knLFxuICAgICAgJ0FXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGUnLFxuICAgICAgJ0FXUzo6SUFNOjpNYW5hZ2VkUG9saWN5JyxcbiAgICAgICdBV1M6OklBTTo6T0lEQ1Byb3ZpZGVyJyxcbiAgICAgICdBV1M6OklBTTo6UG9saWN5JyxcbiAgICAgICdBV1M6OklBTTo6Um9sZScsXG4gICAgICAnQVdTOjpJQU06OlJvbGVQb2xpY3knLFxuICAgICAgJ0FXUzo6SUFNOjpTQU1MUHJvdmlkZXInLFxuICAgICAgJ0FXUzo6SUFNOjpTZXJ2ZXJDZXJ0aWZpY2F0ZScsXG4gICAgICAnQVdTOjpJQU06OlNlcnZpY2VMaW5rZWRSb2xlJyxcbiAgICAgICdBV1M6OklBTTo6VXNlcicsXG4gICAgICAnQVdTOjpJQU06OlVzZXJQb2xpY3knLFxuICAgICAgJ0FXUzo6SUFNOjpVc2VyVG9Hcm91cEFkZGl0aW9uJyxcbiAgICAgICdBV1M6OklBTTo6VmlydHVhbE1GQURldmljZScsXG4gICAgICBcbiAgICAgIC8vIElvVFxuICAgICAgJ0FXUzo6SW9UOjpBY2NvdW50QXVkaXRDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OklvVDo6QXV0aG9yaXplcicsXG4gICAgICAnQVdTOjpJb1Q6OkNlcnRpZmljYXRlJyxcbiAgICAgICdBV1M6OklvVDo6Q3VzdG9tTWV0cmljJyxcbiAgICAgICdBV1M6OklvVDo6RGltZW5zaW9uJyxcbiAgICAgICdBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvbicsXG4gICAgICAnQVdTOjpJb1Q6OkZsZWV0TWV0cmljJyxcbiAgICAgICdBV1M6OklvVDo6Sm9iVGVtcGxhdGUnLFxuICAgICAgJ0FXUzo6SW9UOjpMb2dnaW5nJyxcbiAgICAgICdBV1M6OklvVDo6TWl0aWdhdGlvbkFjdGlvbicsXG4gICAgICAnQVdTOjpJb1Q6OlBvbGljeScsXG4gICAgICAnQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6SW9UOjpQcm92aXNpb25pbmdUZW1wbGF0ZScsXG4gICAgICAnQVdTOjpJb1Q6OlJlc291cmNlU3BlY2lmaWNMb2dnaW5nJyxcbiAgICAgICdBV1M6OklvVDo6Um9sZUFsaWFzJyxcbiAgICAgICdBV1M6OklvVDo6U2NoZWR1bGVkQXVkaXQnLFxuICAgICAgJ0FXUzo6SW9UOjpTZWN1cml0eVByb2ZpbGUnLFxuICAgICAgJ0FXUzo6SW9UOjpUaGluZycsXG4gICAgICAnQVdTOjpJb1Q6OlRoaW5nR3JvdXAnLFxuICAgICAgJ0FXUzo6SW9UOjpUaGluZ1ByaW5jaXBhbEF0dGFjaG1lbnQnLFxuICAgICAgJ0FXUzo6SW9UOjpUaGluZ1R5cGUnLFxuICAgICAgJ0FXUzo6SW9UOjpUb3BpY1J1bGUnLFxuICAgICAgJ0FXUzo6SW9UOjpUb3BpY1J1bGVEZXN0aW5hdGlvbicsXG4gICAgICBcbiAgICAgIC8vIEtNU1xuICAgICAgJ0FXUzo6S01TOjpBbGlhcycsXG4gICAgICAnQVdTOjpLTVM6OkdyYW50JyxcbiAgICAgICdBV1M6OktNUzo6UmVwbGljYUtleScsXG4gICAgICBcbiAgICAgIC8vIExhbWJkYVxuICAgICAgJ0FXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZycsXG4gICAgICAnQVdTOjpMYW1iZGE6OkV2ZW50SW52b2tlQ29uZmlnJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uUGVybWlzc2lvbicsXG4gICAgICAnQVdTOjpMYW1iZGE6OlBlcm1pc3Npb24nLFxuICAgICAgJ0FXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6VXJsJyxcbiAgICAgICdBV1M6OkxhbWJkYTo6VmVyc2lvbicsXG4gICAgICBcbiAgICAgIC8vIExvZ3NcbiAgICAgICdBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3knLFxuICAgICAgJ0FXUzo6TG9nczo6RGVzdGluYXRpb24nLFxuICAgICAgJ0FXUzo6TG9nczo6TG9nR3JvdXAnLFxuICAgICAgJ0FXUzo6TG9nczo6TG9nU3RyZWFtJyxcbiAgICAgICdBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlcicsXG4gICAgICAnQVdTOjpMb2dzOjpRdWVyeURlZmluaXRpb24nLFxuICAgICAgJ0FXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3knLFxuICAgICAgJ0FXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyJyxcbiAgICAgIFxuICAgICAgLy8gTWFjaWVcbiAgICAgICdBV1M6Ok1hY2llOjpBbGxvd0xpc3QnLFxuICAgICAgJ0FXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyJyxcbiAgICAgICdBV1M6Ok1hY2llOjpGaW5kaW5nc0ZpbHRlcicsXG4gICAgICAnQVdTOjpNYWNpZTo6U2Vzc2lvbicsXG4gICAgICBcbiAgICAgIC8vIE5lcHR1bmVcbiAgICAgICdBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwJyxcbiAgICAgICdBV1M6Ok5lcHR1bmU6OkRCUGFyYW1ldGVyR3JvdXAnLFxuICAgICAgJ0FXUzo6TmVwdHVuZTo6REJTdWJuZXRHcm91cCcsXG4gICAgICBcbiAgICAgIC8vIE9yZ2FuaXphdGlvbnNcbiAgICAgICdBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnQnLFxuICAgICAgJ0FXUzo6T3JnYW5pemF0aW9uczo6T3JnYW5pemF0aW9uJyxcbiAgICAgICdBV1M6Ok9yZ2FuaXphdGlvbnM6Ok9yZ2FuaXphdGlvbmFsVW5pdCcsXG4gICAgICAnQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3knLFxuICAgICAgJ0FXUzo6T3JnYW5pemF0aW9uczo6UmVzb3VyY2VQb2xpY3knLFxuICAgICAgXG4gICAgICAvLyBSRFNcbiAgICAgICdBV1M6OlJEUzo6REJDbHVzdGVyUGFyYW1ldGVyR3JvdXAnLFxuICAgICAgJ0FXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwJyxcbiAgICAgICdBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwJyxcbiAgICAgICdBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwSW5ncmVzcycsXG4gICAgICAnQVdTOjpSRFM6OkRCU3VibmV0R3JvdXAnLFxuICAgICAgJ0FXUzo6UkRTOjpFdmVudFN1YnNjcmlwdGlvbicsXG4gICAgICAnQVdTOjpSRFM6Okdsb2JhbENsdXN0ZXInLFxuICAgICAgJ0FXUzo6UkRTOjpPcHRpb25Hcm91cCcsXG4gICAgICBcbiAgICAgIC8vIFJlZHNoaWZ0XG4gICAgICAnQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclBhcmFtZXRlckdyb3VwJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU2VjdXJpdHlHcm91cCcsXG4gICAgICAnQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBJbmdyZXNzJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU3VibmV0R3JvdXAnLFxuICAgICAgJ0FXUzo6UmVkc2hpZnQ6OkVuZHBvaW50QWNjZXNzJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEF1dGhvcml6YXRpb24nLFxuICAgICAgJ0FXUzo6UmVkc2hpZnQ6OkV2ZW50U3Vic2NyaXB0aW9uJyxcbiAgICAgICdBV1M6OlJlZHNoaWZ0OjpTY2hlZHVsZWRBY3Rpb24nLFxuICAgICAgXG4gICAgICAvLyBSb3V0ZTUzXG4gICAgICAnQVdTOjpSb3V0ZTUzOjpETlNTRUMnLFxuICAgICAgJ0FXUzo6Um91dGU1Mzo6SGVhbHRoQ2hlY2snLFxuICAgICAgJ0FXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZScsXG4gICAgICAnQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5JyxcbiAgICAgICdBV1M6OlJvdXRlNTM6OlJlY29yZFNldCcsXG4gICAgICAnQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRHcm91cCcsXG4gICAgICBcbiAgICAgIC8vIFJvdXRlNTNSZXNvbHZlclxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbERvbWFpbkxpc3QnLFxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cCcsXG4gICAgICAnQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OkZpcmV3YWxsUnVsZUdyb3VwQXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlckNvbmZpZycsXG4gICAgICAnQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyRE5TU0VDQ29uZmlnJyxcbiAgICAgICdBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJRdWVyeUxvZ2dpbmdDb25maWcnLFxuICAgICAgJ0FXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ0Fzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlJyxcbiAgICAgICdBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlQXNzb2NpYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBTM1xuICAgICAgJ0FXUzo6UzM6OkFjY2Vzc1BvaW50JyxcbiAgICAgICdBV1M6OlMzOjpCdWNrZXRQb2xpY3knLFxuICAgICAgJ0FXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnQnLFxuICAgICAgJ0FXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnRQb2xpY3knLFxuICAgICAgJ0FXUzo6UzM6OlN0b3JhZ2VMZW5zJyxcbiAgICAgIFxuICAgICAgLy8gU0RCXG4gICAgICAnQVdTOjpTREI6OkRvbWFpbicsXG4gICAgICBcbiAgICAgIC8vIFNlY3JldHNNYW5hZ2VyXG4gICAgICAnQVdTOjpTZWNyZXRzTWFuYWdlcjo6UmVzb3VyY2VQb2xpY3knLFxuICAgICAgJ0FXUzo6U2VjcmV0c01hbmFnZXI6OlJvdGF0aW9uU2NoZWR1bGUnLFxuICAgICAgJ0FXUzo6U2VjcmV0c01hbmFnZXI6OlNlY3JldFRhcmdldEF0dGFjaG1lbnQnLFxuICAgICAgXG4gICAgICAvLyBTZWN1cml0eUh1YlxuICAgICAgJ0FXUzo6U2VjdXJpdHlIdWI6Okh1YicsXG4gICAgICBcbiAgICAgIC8vIFNlcnZpY2VDYXRhbG9nXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6QWNjZXB0ZWRQb3J0Zm9saW9TaGFyZScsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoTm90aWZpY2F0aW9uQ29uc3RyYWludCcsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoUm9sZUNvbnN0cmFpbnQnLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFRlbXBsYXRlQ29uc3RyYWludCcsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvUHJpbmNpcGFsQXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1Byb2R1Y3RBc3NvY2lhdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvU2hhcmUnLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OlJlc291cmNlVXBkYXRlQ29uc3RyYWludCcsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbkFzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OlNlcnZpY2VDYXRhbG9nOjpTdGFja1NldENvbnN0cmFpbnQnLFxuICAgICAgJ0FXUzo6U2VydmljZUNhdGFsb2c6OlRhZ09wdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6VGFnT3B0aW9uQXNzb2NpYXRpb24nLFxuICAgICAgXG4gICAgICAvLyBTRVNcbiAgICAgICdBV1M6OlNFUzo6Q29uZmlndXJhdGlvblNldCcsXG4gICAgICAnQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRFdmVudERlc3RpbmF0aW9uJyxcbiAgICAgICdBV1M6OlNFUzo6Q29udGFjdExpc3QnLFxuICAgICAgJ0FXUzo6U0VTOjpEZWRpY2F0ZWRJcFBvb2wnLFxuICAgICAgJ0FXUzo6U0VTOjpFbWFpbElkZW50aXR5JyxcbiAgICAgICdBV1M6OlNFUzo6UmVjZWlwdEZpbHRlcicsXG4gICAgICAnQVdTOjpTRVM6OlJlY2VpcHRSdWxlJyxcbiAgICAgICdBV1M6OlNFUzo6UmVjZWlwdFJ1bGVTZXQnLFxuICAgICAgJ0FXUzo6U0VTOjpUZW1wbGF0ZScsXG4gICAgICAnQVdTOjpTRVM6OlZkbUF0dHJpYnV0ZXMnLFxuICAgICAgXG4gICAgICAvLyBTTlNcbiAgICAgICdBV1M6OlNOUzo6U3Vic2NyaXB0aW9uJyxcbiAgICAgICdBV1M6OlNOUzo6VG9waWNQb2xpY3knLFxuICAgICAgXG4gICAgICAvLyBTUVNcbiAgICAgICdBV1M6OlNRUzo6UXVldWVQb2xpY3knLFxuICAgICAgXG4gICAgICAvLyBTU01cbiAgICAgICdBV1M6OlNTTTo6QXNzb2NpYXRpb24nLFxuICAgICAgJ0FXUzo6U1NNOjpEb2N1bWVudCcsXG4gICAgICAnQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93JyxcbiAgICAgICdBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dUYXJnZXQnLFxuICAgICAgJ0FXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1Rhc2snLFxuICAgICAgJ0FXUzo6U1NNOjpQYXJhbWV0ZXInLFxuICAgICAgJ0FXUzo6U1NNOjpQYXRjaEJhc2VsaW5lJyxcbiAgICAgICdBV1M6OlNTTTo6UmVzb3VyY2VEYXRhU3luYycsXG4gICAgICAnQVdTOjpTU006OlJlc291cmNlUG9saWN5JyxcbiAgICAgIFxuICAgICAgLy8gU1NPXG4gICAgICAnQVdTOjpTU086OkFzc2lnbm1lbnQnLFxuICAgICAgJ0FXUzo6U1NPOjpJbnN0YW5jZUFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OlNTTzo6UGVybWlzc2lvblNldCcsXG4gICAgICBcbiAgICAgIC8vIFN0ZXBGdW5jdGlvbnNcbiAgICAgICdBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5JyxcbiAgICAgIFxuICAgICAgLy8gV0FGL1dBRnYyXG4gICAgICAnQVdTOjpXQUY6OkJ5dGVNYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUY6OklQU2V0JyxcbiAgICAgICdBV1M6OldBRjo6UnVsZScsXG4gICAgICAnQVdTOjpXQUY6OlNpemVDb25zdHJhaW50U2V0JyxcbiAgICAgICdBV1M6OldBRjo6U3FsSW5qZWN0aW9uTWF0Y2hTZXQnLFxuICAgICAgJ0FXUzo6V0FGOjpXZWJBQ0wnLFxuICAgICAgJ0FXUzo6V0FGOjpYc3NNYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6Qnl0ZU1hdGNoU2V0JyxcbiAgICAgICdBV1M6OldBRlJlZ2lvbmFsOjpHZW9NYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6SVBTZXQnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OlJhdGVCYXNlZFJ1bGUnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OlJlZ2V4UGF0dGVyblNldCcsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6UnVsZScsXG4gICAgICAnQVdTOjpXQUZSZWdpb25hbDo6U2l6ZUNvbnN0cmFpbnRTZXQnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OlNxbEluamVjdGlvbk1hdGNoU2V0JyxcbiAgICAgICdBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0wnLFxuICAgICAgJ0FXUzo6V0FGUmVnaW9uYWw6OldlYkFDTEFzc29jaWF0aW9uJyxcbiAgICAgICdBV1M6OldBRlJlZ2lvbmFsOjpYc3NNYXRjaFNldCcsXG4gICAgICAnQVdTOjpXQUZ2Mjo6SVBTZXQnLFxuICAgICAgJ0FXUzo6V0FGdjI6OkxvZ2dpbmdDb25maWd1cmF0aW9uJyxcbiAgICAgICdBV1M6OldBRnYyOjpSZWdleFBhdHRlcm5TZXQnLFxuICAgICAgJ0FXUzo6V0FGdjI6OlJ1bGVHcm91cCcsXG4gICAgICAnQVdTOjpXQUZ2Mjo6V2ViQUNMJyxcbiAgICAgICdBV1M6OldBRnYyOjpXZWJBQ0xBc3NvY2lhdGlvbicsXG4gICAgICBcbiAgICAgIC8vIFNlcnZlcmxlc3NcbiAgICAgICdBV1M6OlNlcnZlcmxlc3M6OkFwaScsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpBcHBsaWNhdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpGdW5jdGlvbicsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpIdHRwQXBpJyxcbiAgICAgICdBV1M6OlNlcnZlcmxlc3M6OkxheWVyVmVyc2lvbicsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpTaW1wbGVUYWJsZScsXG4gICAgICAnQVdTOjpTZXJ2ZXJsZXNzOjpTdGF0ZU1hY2hpbmUnXG4gICAgXTtcbiAgICBcbiAgICBpZiAodW5zdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBhIHN5bnRoZXNpcyBob29rIHRvIG1vZGlmeSB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICBjb25zdCBsb2dpY2FsSWQgPSBzdGFjay5nZXRMb2dpY2FsSWQocmVzb3VyY2UpO1xuICAgIFxuICAgIC8vIFVzZSBhZGRUcmFuc2Zvcm0gdG8gYWRkIHRhZ3MgZHVyaW5nIHN5bnRoZXNpc1xuICAgIHJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1RhZ3MnLCB0aGlzLmJ1aWxkVGFnc0FycmF5KHJlc291cmNlKSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgYnVpbGRUYWdzQXJyYXkocmVzb3VyY2U6IENmblJlc291cmNlKTogYW55W10ge1xuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvLyBBZGQgSVBBTSBwb29sIHRhZyBmb3IgVlBDcyB3aXRoIElQQU0gY29uZmlndXJhdGlvblxuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkVDMjo6VlBDJykge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IChyZXNvdXJjZSBhcyBhbnkpLmNmblByb3BlcnRpZXMgfHwge307XG4gICAgICBpZiAocHJvcGVydGllcy5pcHY0SXBhbVBvb2xJZCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gc3RhY2subm9kZS50cnlHZXRDb250ZXh0KCdhY2NvdW50SWQnKTtcbiAgICAgICAgaWYgKGFjY291bnRJZCkge1xuICAgICAgICAgIHRhZ01hcC5zZXQoJ2ZqYWxsOm9wZXJhdGlvbnM6cG9vbCcsIGFjY291bnRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXF1aXJlZFRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdGFnTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gQ2xvdWRGb3JtYXRpb24gZm9ybWF0XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFnTWFwLmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBLZXk6IGtleSxcbiAgICAgIFZhbHVlOiB2YWx1ZVxuICAgIH0pKTtcbiAgfVxufVxuIl19
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZ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Q0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxHQUFHLEVBQUUsR0FBRztZQUNSLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFsZ0JELGdEQWtnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVcGRhdGVkIGZvciBDREsgdjIuMjA2LjArIGNvbXBhdGliaWxpdHk6XG4gKiAtIEF2b2lkcyB1c2luZyBhbnkgdGFnZ2luZyBBUElzIGR1cmluZyBhc3BlY3QgdmlzaXRhdGlvbiB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gKiAtIFVzZXMgYSBzeW50aGVzaXMtdGltZSBhcHByb2FjaCB0byBtb2RpZnkgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKiAtIE1haW50YWlucyB0aGUgc2FtZSBjbGVhbiBBUEkgYW5kIGF1dG9tYXRpYyB0YWdnaW5nIGJlbmVmaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFRhZ3NBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFnZ2VkUmVzb3VyY2VzID0gbmV3IFdlYWtTZXQ8SUNvbnN0cnVjdD4oKTtcblxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnJlcXVpcmVkVGFncyA9IHJlcXVpcmVkVGFncztcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgaWYgKHRoaXMudGFnZ2VkUmVzb3VyY2VzLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgTDEgKENGTikgcmVzb3VyY2VzIG9ubHlcbiAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2ZuUmVzb3VyY2Uobm9kZSBhcyBDZm5SZXNvdXJjZSk7XG4gICAgICB0aGlzLnRhZ2dlZFJlc291cmNlcy5hZGQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2ZuUmVzb3VyY2UocmVzb3VyY2U6IENmblJlc291cmNlKTogdm9pZCB7XG4gICAgLy8gU2tpcCBTZWNyZXRSb3RhdGlvbiByZXNvdXJjZXMgYXMgdGhleSBjcmVhdGUgbmVzdGVkIHN0YWNrcyB3aXRoIGRpZmZlcmVudCB0YWcgcmVxdWlyZW1lbnRzXG4gICAgaWYgKHJlc291cmNlLm5vZGUucGF0aC5pbmNsdWRlcyhcIlNlY3JldFJvdGF0aW9uXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgIFwiQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkFjY291bnRcIixcblxuICAgICAgLy8gQVBJIEdhdGV3YXlcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QmFzZVBhdGhNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RG9jdW1lbnRhdGlvblZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpHYXRld2F5UmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlcXVlc3RWYWxpZGF0b3JcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uUmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVSZXNwb25zZVwiLFxuXG4gICAgICAvLyBBcHBTeW5jXG4gICAgICBcIkFXUzo6QXBwU3luYzo6RGF0YVNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OlJlc29sdmVyXCIsXG5cbiAgICAgIC8vIEF0aGVuYVxuICAgICAgXCJBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnRcIixcblxuICAgICAgLy8gQ2xvdWRGb3JtYXRpb25cbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6Q3VzdG9tUmVzb3VyY2VcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TWFjcm9cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaWNUeXBlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXJcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6UmVzb3VyY2VEZWZhdWx0VmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpSZXNvdXJjZVZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uSGFuZGxlXCIsXG5cbiAgICAgIC8vIENsb3VkV2F0Y2hcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFub21hbHlEZXRlY3RvclwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6SW5zaWdodFJ1bGVcIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpNZXRyaWNTdHJlYW1cIixcblxuICAgICAgLy8gQ29kZUJ1aWxkXG4gICAgICBcIkFXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkNvZGVCdWlsZDo6U291cmNlQ3JlZGVudGlhbFwiLFxuXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICBcIkFXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudENvbmZpZ1wiLFxuXG4gICAgICAvLyBDb2RlUGlwZWxpbmVcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGVcIixcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OldlYmhvb2tcIixcblxuICAgICAgLy8gQ29nbml0b1xuICAgICAgXCJBV1M6OkNvZ25pdG86OklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbERvbWFpblwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sR3JvdXBcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJlc291cmNlU2VydmVyXCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJUb0dyb3VwQXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBDb25maWdcbiAgICAgIFwiQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvblwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6Q29uZmlndXJhdGlvbkFnZ3JlZ2F0b3JcIixcbiAgICAgIFwiQVdTOjpDb25maWc6OkNvbmZvcm1hbmNlUGFja1wiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpSZW1lZGlhdGlvbkNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpDb25maWc6OlN0b3JlZFF1ZXJ5XCIsXG5cbiAgICAgIC8vIER5bmFtb0RCXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCIsXG5cbiAgICAgIC8vIEVDMlxuICAgICAgXCJBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpDYXJyaWVyR2F0ZXdheVwiLFxuICAgICAgXCJBV1M6OkVDMjo6REhDUE9wdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVDMkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFSVBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6RW5jbGF2ZUNlcnRpZmljYXRlSWFtUm9sZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpGbG93TG9nXCIsXG4gICAgICBcIkFXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZUNvbm5lY3RFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkVDMjo6S2V5UGFpclwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZUFuYWx5c2lzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0luc2lnaHRzUGF0aFwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0ludGVyZmFjZUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTdWJuZXRDaWRyQmxvY2tcIixcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXJcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBTb3VyY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5UGVlcmluZ0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzRW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzVHJ1c3RQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDQ2lkckJsb2NrXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENESENQT3B0aW9uc0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRTZXJ2aWNlUGVybWlzc2lvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUE5Db25uZWN0aW9uUm91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uXCIsXG5cbiAgICAgIC8vIEVDUlxuICAgICAgXCJBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeVwiLFxuICAgICAgXCJBV1M6OkVDUjo6UHVsbFRocm91Z2hDYWNoZVJ1bGVcIixcbiAgICAgIFwiQVdTOjpFQ1I6OlJlZ2lzdHJ5UG9saWN5XCIsXG4gICAgICBcIkFXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cIixcblxuICAgICAgLy8gRUNTXG4gICAgICBcIkFXUzo6RUNTOjpBY2NvdW50U2V0dGluZ1wiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2FwYWNpdHlQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlByaW1hcnlUYXNrU2V0XCIsXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrU2V0XCIsXG5cbiAgICAgIC8vIEVGU1xuICAgICAgXCJBV1M6OkVGUzo6QWNjZXNzUG9pbnRcIixcbiAgICAgIFwiQVdTOjpFRlM6Ok1vdW50VGFyZ2V0XCIsXG5cbiAgICAgIC8vIEVLU1xuICAgICAgXCJBV1M6OkVLUzo6QWRkb25cIixcbiAgICAgIFwiQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6RUtTOjpJZGVudGl0eVByb3ZpZGVyQ29uZmlnXCIsXG5cbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gRWxhc3RpY0JlYW5zdGFsa1xuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkNvbmZpZ3VyYXRpb25UZW1wbGF0ZVwiLFxuXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIEV2ZW50QnJpZGdlIChFdmVudHMpXG4gICAgICBcIkFXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6QXJjaGl2ZVwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFdmVudHM6OkV2ZW50QnVzUG9saWN5XCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG5cbiAgICAgIC8vIEZTeFxuICAgICAgXCJBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkZTeDo6U25hcHNob3RcIixcbiAgICAgIFwiQVdTOjpGU3g6OlN0b3JhZ2VWaXJ0dWFsTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OkZTeDo6Vm9sdW1lXCIsXG5cbiAgICAgIC8vIEdhbWVMaWZ0XG4gICAgICBcIkFXUzo6R2FtZUxpZnQ6OkdhbWVTZXJ2ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6OkdhbWVMaWZ0OjpMb2NhdGlvblwiLFxuXG4gICAgICAvLyBHbHVlXG4gICAgICBcIkFXUzo6R2x1ZTo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkdsdWU6OkRhdGFiYXNlXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpQYXJ0aXRpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbk1ldGFkYXRhXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6VGFibGVcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpVc2VyRGVmaW5lZEZ1bmN0aW9uXCIsXG5cbiAgICAgIC8vIEd1YXJkRHV0eVxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3JcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6OkZpbHRlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6Ok1hc3RlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6TWVtYmVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpUaHJlYXRJbnRlbFNldFwiLFxuXG4gICAgICAvLyBJQU1cbiAgICAgIFwiQVdTOjpJQU06OkFjY2Vzc0tleVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok9JRENQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpTQU1MUHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpJQU06OlNlcnZlckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpTZXJ2aWNlTGlua2VkUm9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclRvR3JvdXBBZGRpdGlvblwiLFxuICAgICAgXCJBV1M6OklBTTo6VmlydHVhbE1GQURldmljZVwiLFxuXG4gICAgICAvLyBJb1RcbiAgICAgIFwiQVdTOjpJb1Q6OkFjY291bnRBdWRpdENvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpJb1Q6OkF1dGhvcml6ZXJcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpDdXN0b21NZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkRpbWVuc2lvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RmxlZXRNZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkpvYlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpMb2dnaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpNaXRpZ2F0aW9uQWN0aW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlByb3Zpc2lvbmluZ1RlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpSZXNvdXJjZVNwZWNpZmljTG9nZ2luZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6Um9sZUFsaWFzXCIsXG4gICAgICBcIkFXUzo6SW9UOjpTY2hlZHVsZWRBdWRpdFwiLFxuICAgICAgXCJBV1M6OklvVDo6U2VjdXJpdHlQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdHcm91cFwiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdQcmluY2lwYWxBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1R5cGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRvcGljUnVsZVwiLFxuICAgICAgXCJBV1M6OklvVDo6VG9waWNSdWxlRGVzdGluYXRpb25cIixcblxuICAgICAgLy8gS01TXG4gICAgICBcIkFXUzo6S01TOjpBbGlhc1wiLFxuICAgICAgXCJBV1M6OktNUzo6R3JhbnRcIixcbiAgICAgIFwiQVdTOjpLTVM6OlJlcGxpY2FLZXlcIixcblxuICAgICAgLy8gTGFtYmRhXG4gICAgICBcIkFXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRJbnZva2VDb25maWdcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpMYXllclZlcnNpb25QZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpVcmxcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlZlcnNpb25cIixcblxuICAgICAgLy8gTG9nc1xuICAgICAgXCJBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TG9nU3RyZWFtXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UXVlcnlEZWZpbml0aW9uXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIixcblxuICAgICAgLy8gTWFjaWVcbiAgICAgIFwiQVdTOjpNYWNpZTo6QWxsb3dMaXN0XCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkZpbmRpbmdzRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OlNlc3Npb25cIixcblxuICAgICAgLy8gTmVwdHVuZVxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJQYXJhbWV0ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCU3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gT3JnYW5pemF0aW9uc1xuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25hbFVuaXRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBSRFNcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCU2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkV2ZW50U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6UkRTOjpHbG9iYWxDbHVzdGVyXCIsXG4gICAgICBcIkFXUzo6UkRTOjpPcHRpb25Hcm91cFwiLFxuXG4gICAgICAvLyBSZWRzaGlmdFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyUGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTdWJuZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEFjY2Vzc1wiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEF1dGhvcml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RXZlbnRTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6U2NoZWR1bGVkQWN0aW9uXCIsXG5cbiAgICAgIC8vIFJvdXRlNTNcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpETlNTRUNcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIZWFsdGhDaGVja1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0R3JvdXBcIixcblxuICAgICAgLy8gUm91dGU1M1Jlc29sdmVyXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbERvbWFpbkxpc3RcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OkZpcmV3YWxsUnVsZUdyb3VwXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlckNvbmZpZ1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJETlNTRUNDb25maWdcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyUXVlcnlMb2dnaW5nQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyUnVsZUFzc29jaWF0aW9uXCIsXG5cbiAgICAgIC8vIFMzXG4gICAgICBcIkFXUzo6UzM6OkFjY2Vzc1BvaW50XCIsXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiLFxuICAgICAgXCJBV1M6OlMzOjpNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50XCIsXG4gICAgICBcIkFXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTMzo6U3RvcmFnZUxlbnNcIixcblxuICAgICAgLy8gU0RCXG4gICAgICBcIkFXUzo6U0RCOjpEb21haW5cIixcblxuICAgICAgLy8gU2VjcmV0c01hbmFnZXJcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6Um90YXRpb25TY2hlZHVsZVwiLFxuICAgICAgXCJBV1M6OlNlY3JldHNNYW5hZ2VyOjpTZWNyZXRUYXJnZXRBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIFNlY3VyaXR5SHViXG4gICAgICBcIkFXUzo6U2VjdXJpdHlIdWI6Okh1YlwiLFxuXG4gICAgICAvLyBTZXJ2aWNlQ2F0YWxvZ1xuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpBY2NlcHRlZFBvcnRmb2xpb1NoYXJlXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaE5vdGlmaWNhdGlvbkNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoUm9sZUNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoVGVtcGxhdGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1ByaW5jaXBhbEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1Byb2R1Y3RBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9TaGFyZVwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpSZXNvdXJjZVVwZGF0ZUNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpTZXJ2aWNlQWN0aW9uQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U3RhY2tTZXRDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlRhZ09wdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpUYWdPcHRpb25Bc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTRVNcbiAgICAgIFwiQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRcIixcbiAgICAgIFwiQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRFdmVudERlc3RpbmF0aW9uXCIsXG4gICAgICBcIkFXUzo6U0VTOjpDb250YWN0TGlzdFwiLFxuICAgICAgXCJBV1M6OlNFUzo6RGVkaWNhdGVkSXBQb29sXCIsXG4gICAgICBcIkFXUzo6U0VTOjpFbWFpbElkZW50aXR5XCIsXG4gICAgICBcIkFXUzo6U0VTOjpSZWNlaXB0RmlsdGVyXCIsXG4gICAgICBcIkFXUzo6U0VTOjpSZWNlaXB0UnVsZVwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdFJ1bGVTZXRcIixcbiAgICAgIFwiQVdTOjpTRVM6OlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6U0VTOjpWZG1BdHRyaWJ1dGVzXCIsXG5cbiAgICAgIC8vIFNOU1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1BvbGljeVwiLFxuXG4gICAgICAvLyBTUVNcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XCIsXG5cbiAgICAgIC8vIFNTTVxuICAgICAgXCJBV1M6OlNTTTo6QXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTU006OkRvY3VtZW50XCIsXG4gICAgICBcIkFXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1wiLFxuICAgICAgXCJBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dUYXJnZXRcIixcbiAgICAgIFwiQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93VGFza1wiLFxuICAgICAgXCJBV1M6OlNTTTo6UGFyYW1ldGVyXCIsXG4gICAgICBcIkFXUzo6U1NNOjpQYXRjaEJhc2VsaW5lXCIsXG4gICAgICBcIkFXUzo6U1NNOjpSZXNvdXJjZURhdGFTeW5jXCIsXG4gICAgICBcIkFXUzo6U1NNOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBTU09cbiAgICAgIFwiQVdTOjpTU086OkFzc2lnbm1lbnRcIixcbiAgICAgIFwiQVdTOjpTU086Okluc3RhbmNlQWNjZXNzQ29udHJvbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpTU086OlBlcm1pc3Npb25TZXRcIixcblxuICAgICAgLy8gU3RlcEZ1bmN0aW9uc1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XCIsXG5cbiAgICAgIC8vIFdBRi9XQUZ2MlxuICAgICAgXCJBV1M6OldBRjo6Qnl0ZU1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6UnVsZVwiLFxuICAgICAgXCJBV1M6OldBRjo6U2l6ZUNvbnN0cmFpbnRTZXRcIixcbiAgICAgIFwiQVdTOjpXQUY6OlNxbEluamVjdGlvbk1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUY6Olhzc01hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OkJ5dGVNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpHZW9NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSYXRlQmFzZWRSdWxlXCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlJlZ2V4UGF0dGVyblNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSdWxlXCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlNpemVDb25zdHJhaW50U2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlNxbEluamVjdGlvbk1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OldlYkFDTFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpYc3NNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpMb2dnaW5nQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpSZWdleFBhdHRlcm5TZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6UnVsZUdyb3VwXCIsXG4gICAgICBcIkFXUzo6V0FGdjI6OldlYkFDTFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpXZWJBQ0xBc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTZXJ2ZXJsZXNzXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6QXBpXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6QXBwbGljYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpGdW5jdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6Okh0dHBBcGlcIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpMYXllclZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpTaW1wbGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OlN0YXRlTWFjaGluZVwiXG4gICAgXTtcblxuICAgIGlmICh1bnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHJlc291cmNlLmNmblJlc291cmNlVHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGQgYSBzeW50aGVzaXMgaG9vayB0byBtb2RpZnkgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihyZXNvdXJjZSk7XG4gICAgY29uc3QgbG9naWNhbElkID0gc3RhY2suZ2V0TG9naWNhbElkKHJlc291cmNlKTtcblxuICAgIC8vIFVzZSBhZGRUcmFuc2Zvcm0gdG8gYWRkIHRhZ3MgZHVyaW5nIHN5bnRoZXNpc1xuICAgIHJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoXCJUYWdzXCIsIHRoaXMuYnVpbGRUYWdzQXJyYXkocmVzb3VyY2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUYWdzQXJyYXkocmVzb3VyY2U6IENmblJlc291cmNlKTogYW55W10ge1xuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvLyBBZGQgSVBBTSBwb29sIHRhZyBmb3IgVlBDcyB3aXRoIElQQU0gY29uZmlndXJhdGlvblxuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpFQzI6OlZQQ1wiKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gKHJlc291cmNlIGFzIGFueSkuY2ZuUHJvcGVydGllcyB8fCB7fTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmlwdjRJcGFtUG9vbElkKSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YocmVzb3VyY2UpO1xuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIik7XG4gICAgICAgIGlmIChhY2NvdW50SWQpIHtcbiAgICAgICAgICB0YWdNYXAuc2V0KFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsIGFjY291bnRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXF1aXJlZFRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdGFnTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gQ2xvdWRGb3JtYXRpb24gZm9ybWF0XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFnTWFwLmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBLZXk6IGtleSxcbiAgICAgIFZhbHVlOiB2YWx1ZVxuICAgIH0pKTtcbiAgfVxufVxuIl19
|