cdk8s-plus-31 2.0.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.
Files changed (114) hide show
  1. package/.backportrc.json +17 -0
  2. package/.jsii +90235 -0
  3. package/CODE_OF_CONDUCT.md +3 -0
  4. package/CONTRIBUTING.md +185 -0
  5. package/DCO +34 -0
  6. package/LICENSE +202 -0
  7. package/NOTICE +1 -0
  8. package/OWNERS.md +5 -0
  9. package/README.md +32 -0
  10. package/SECURITY.md +5 -0
  11. package/cdk8s.yaml +8 -0
  12. package/docs/java.md +23855 -0
  13. package/docs/plus/config-map.md +98 -0
  14. package/docs/plus/container.md +133 -0
  15. package/docs/plus/cronjob.md +67 -0
  16. package/docs/plus/deployment.md +232 -0
  17. package/docs/plus/horizontal-pod-autoscaler.md +226 -0
  18. package/docs/plus/ingress.md +68 -0
  19. package/docs/plus/job.md +48 -0
  20. package/docs/plus/namespace.md +58 -0
  21. package/docs/plus/network-policy.md +341 -0
  22. package/docs/plus/pod.md +455 -0
  23. package/docs/plus/pv.md +82 -0
  24. package/docs/plus/pvc.md +77 -0
  25. package/docs/plus/rbac.md +104 -0
  26. package/docs/plus/secret.md +32 -0
  27. package/docs/plus/service-account.md +35 -0
  28. package/docs/plus/service.md +41 -0
  29. package/docs/plus/volume.md +38 -0
  30. package/docs/python.md +26079 -0
  31. package/docs/typescript.md +19565 -0
  32. package/git-hooks/README.md +9 -0
  33. package/git-hooks/prepare-commit-msg +18 -0
  34. package/git-hooks/setup.sh +10 -0
  35. package/lib/_action.d.ts +21 -0
  36. package/lib/_action.js +32 -0
  37. package/lib/api-resource.d.ts +298 -0
  38. package/lib/api-resource.js +430 -0
  39. package/lib/base.d.ts +79 -0
  40. package/lib/base.js +92 -0
  41. package/lib/config-map.d.ts +126 -0
  42. package/lib/config-map.js +159 -0
  43. package/lib/container.d.ts +1057 -0
  44. package/lib/container.js +845 -0
  45. package/lib/cron-job.d.ts +138 -0
  46. package/lib/cron-job.js +103 -0
  47. package/lib/daemon-set.d.ts +45 -0
  48. package/lib/daemon-set.js +55 -0
  49. package/lib/deployment.d.ts +223 -0
  50. package/lib/deployment.js +214 -0
  51. package/lib/handler.d.ts +62 -0
  52. package/lib/handler.js +54 -0
  53. package/lib/horizontal-pod-autoscaler.d.ts +500 -0
  54. package/lib/horizontal-pod-autoscaler.js +569 -0
  55. package/lib/imports/k8s.d.ts +21534 -0
  56. package/lib/imports/k8s.js +16496 -0
  57. package/lib/index.d.ts +26 -0
  58. package/lib/index.js +39 -0
  59. package/lib/ingress.d.ts +230 -0
  60. package/lib/ingress.js +246 -0
  61. package/lib/job.d.ts +64 -0
  62. package/lib/job.js +54 -0
  63. package/lib/namespace.d.ts +128 -0
  64. package/lib/namespace.js +109 -0
  65. package/lib/network-policy.d.ts +311 -0
  66. package/lib/network-policy.js +344 -0
  67. package/lib/pod.d.ts +1080 -0
  68. package/lib/pod.js +1139 -0
  69. package/lib/probe.d.ts +141 -0
  70. package/lib/probe.js +77 -0
  71. package/lib/pv.d.ts +375 -0
  72. package/lib/pv.js +273 -0
  73. package/lib/pvc.d.ts +163 -0
  74. package/lib/pvc.js +152 -0
  75. package/lib/role-binding.d.ts +138 -0
  76. package/lib/role-binding.js +165 -0
  77. package/lib/role.d.ts +268 -0
  78. package/lib/role.js +401 -0
  79. package/lib/secret.d.ts +195 -0
  80. package/lib/secret.js +185 -0
  81. package/lib/service-account.d.ts +83 -0
  82. package/lib/service-account.js +105 -0
  83. package/lib/service.d.ts +289 -0
  84. package/lib/service.js +182 -0
  85. package/lib/stateful-set.d.ts +169 -0
  86. package/lib/stateful-set.js +174 -0
  87. package/lib/utils.d.ts +4 -0
  88. package/lib/utils.js +34 -0
  89. package/lib/volume.d.ts +573 -0
  90. package/lib/volume.js +371 -0
  91. package/lib/workload.d.ts +121 -0
  92. package/lib/workload.js +122 -0
  93. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  94. package/node_modules/balanced-match/LICENSE.md +21 -0
  95. package/node_modules/balanced-match/README.md +97 -0
  96. package/node_modules/balanced-match/index.js +62 -0
  97. package/node_modules/balanced-match/package.json +48 -0
  98. package/node_modules/concat-map/.travis.yml +4 -0
  99. package/node_modules/concat-map/LICENSE +18 -0
  100. package/node_modules/concat-map/README.markdown +62 -0
  101. package/node_modules/concat-map/example/map.js +6 -0
  102. package/node_modules/concat-map/index.js +13 -0
  103. package/node_modules/concat-map/package.json +43 -0
  104. package/node_modules/concat-map/test/map.js +39 -0
  105. package/node_modules/minimatch/LICENSE +15 -0
  106. package/node_modules/minimatch/README.md +230 -0
  107. package/node_modules/minimatch/minimatch.js +947 -0
  108. package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
  109. package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
  110. package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
  111. package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
  112. package/node_modules/minimatch/package.json +33 -0
  113. package/package.json +186 -0
  114. package/rotate.md +84 -0
@@ -0,0 +1,430 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NonApiResource = exports.ApiResource = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Represents information about an API resource type.
8
+ */
9
+ class ApiResource {
10
+ constructor(options) {
11
+ this.apiGroup = options.apiGroup;
12
+ this.resourceType = options.resourceType;
13
+ }
14
+ /**
15
+ * API resource information for a custom resource type.
16
+ */
17
+ static custom(options) {
18
+ return new ApiResource(options);
19
+ }
20
+ ;
21
+ asApiResource() {
22
+ return this;
23
+ }
24
+ asNonApiResource() {
25
+ return undefined;
26
+ }
27
+ }
28
+ exports.ApiResource = ApiResource;
29
+ _a = JSII_RTTI_SYMBOL_1;
30
+ ApiResource[_a] = { fqn: "cdk8s-plus-31.ApiResource", version: "2.0.0" };
31
+ /**
32
+ * API resource information for Binding.
33
+ */
34
+ ApiResource.BINDINGS = new ApiResource({
35
+ apiGroup: '',
36
+ resourceType: 'bindings',
37
+ });
38
+ /**
39
+ * API resource information for ComponentStatus.
40
+ */
41
+ ApiResource.COMPONENT_STATUSES = new ApiResource({
42
+ apiGroup: '',
43
+ resourceType: 'componentstatuses',
44
+ });
45
+ /**
46
+ * API resource information for ConfigMap.
47
+ */
48
+ ApiResource.CONFIG_MAPS = new ApiResource({
49
+ apiGroup: '',
50
+ resourceType: 'configmaps',
51
+ });
52
+ /**
53
+ * API resource information for Endpoints.
54
+ */
55
+ ApiResource.ENDPOINTS = new ApiResource({
56
+ apiGroup: '',
57
+ resourceType: 'endpoints',
58
+ });
59
+ /**
60
+ * API resource information for Event.
61
+ */
62
+ ApiResource.EVENTS = new ApiResource({
63
+ apiGroup: '',
64
+ resourceType: 'events',
65
+ });
66
+ /**
67
+ * API resource information for LimitRange.
68
+ */
69
+ ApiResource.LIMIT_RANGES = new ApiResource({
70
+ apiGroup: '',
71
+ resourceType: 'limitranges',
72
+ });
73
+ /**
74
+ * API resource information for Namespace.
75
+ */
76
+ ApiResource.NAMESPACES = new ApiResource({
77
+ apiGroup: '',
78
+ resourceType: 'namespaces',
79
+ });
80
+ /**
81
+ * API resource information for Node.
82
+ */
83
+ ApiResource.NODES = new ApiResource({
84
+ apiGroup: '',
85
+ resourceType: 'nodes',
86
+ });
87
+ /**
88
+ * API resource information for PersistentVolumeClaim.
89
+ */
90
+ ApiResource.PERSISTENT_VOLUME_CLAIMS = new ApiResource({
91
+ apiGroup: '',
92
+ resourceType: 'persistentvolumeclaims',
93
+ });
94
+ /**
95
+ * API resource information for PersistentVolume.
96
+ */
97
+ ApiResource.PERSISTENT_VOLUMES = new ApiResource({
98
+ apiGroup: '',
99
+ resourceType: 'persistentvolumes',
100
+ });
101
+ /**
102
+ * API resource information for Pod.
103
+ */
104
+ ApiResource.PODS = new ApiResource({
105
+ apiGroup: '',
106
+ resourceType: 'pods',
107
+ });
108
+ /**
109
+ * API resource information for PodTemplate.
110
+ */
111
+ ApiResource.POD_TEMPLATES = new ApiResource({
112
+ apiGroup: '',
113
+ resourceType: 'podtemplates',
114
+ });
115
+ /**
116
+ * API resource information for ReplicationController.
117
+ */
118
+ ApiResource.REPLICATION_CONTROLLERS = new ApiResource({
119
+ apiGroup: '',
120
+ resourceType: 'replicationcontrollers',
121
+ });
122
+ /**
123
+ * API resource information for ResourceQuota.
124
+ */
125
+ ApiResource.RESOURCE_QUOTAS = new ApiResource({
126
+ apiGroup: '',
127
+ resourceType: 'resourcequotas',
128
+ });
129
+ /**
130
+ * API resource information for Secret.
131
+ */
132
+ ApiResource.SECRETS = new ApiResource({
133
+ apiGroup: '',
134
+ resourceType: 'secrets',
135
+ });
136
+ /**
137
+ * API resource information for ServiceAccount.
138
+ */
139
+ ApiResource.SERVICE_ACCOUNTS = new ApiResource({
140
+ apiGroup: '',
141
+ resourceType: 'serviceaccounts',
142
+ });
143
+ /**
144
+ * API resource information for Service.
145
+ */
146
+ ApiResource.SERVICES = new ApiResource({
147
+ apiGroup: '',
148
+ resourceType: 'services',
149
+ });
150
+ /**
151
+ * API resource information for MutatingWebhookConfiguration.
152
+ */
153
+ ApiResource.MUTATING_WEBHOOK_CONFIGURATIONS = new ApiResource({
154
+ apiGroup: 'admissionregistration.k8s.io',
155
+ resourceType: 'mutatingwebhookconfigurations',
156
+ });
157
+ /**
158
+ * API resource information for ValidatingWebhookConfiguration.
159
+ */
160
+ ApiResource.VALIDATING_WEBHOOK_CONFIGURATIONS = new ApiResource({
161
+ apiGroup: 'admissionregistration.k8s.io',
162
+ resourceType: 'validatingwebhookconfigurations',
163
+ });
164
+ /**
165
+ * API resource information for CustomResourceDefinition.
166
+ */
167
+ ApiResource.CUSTOM_RESOURCE_DEFINITIONS = new ApiResource({
168
+ apiGroup: 'apiextensions.k8s.io',
169
+ resourceType: 'customresourcedefinitions',
170
+ });
171
+ /**
172
+ * API resource information for APIService.
173
+ */
174
+ ApiResource.API_SERVICES = new ApiResource({
175
+ apiGroup: 'apiregistration.k8s.io',
176
+ resourceType: 'apiservices',
177
+ });
178
+ /**
179
+ * API resource information for ControllerRevision.
180
+ */
181
+ ApiResource.CONTROLLER_REVISIONS = new ApiResource({
182
+ apiGroup: 'apps',
183
+ resourceType: 'controllerrevisions',
184
+ });
185
+ /**
186
+ * API resource information for DaemonSet.
187
+ */
188
+ ApiResource.DAEMON_SETS = new ApiResource({
189
+ apiGroup: 'apps',
190
+ resourceType: 'daemonsets',
191
+ });
192
+ /**
193
+ * API resource information for Deployment.
194
+ */
195
+ ApiResource.DEPLOYMENTS = new ApiResource({
196
+ apiGroup: 'apps',
197
+ resourceType: 'deployments',
198
+ });
199
+ /**
200
+ * API resource information for ReplicaSet.
201
+ */
202
+ ApiResource.REPLICA_SETS = new ApiResource({
203
+ apiGroup: 'apps',
204
+ resourceType: 'replicasets',
205
+ });
206
+ /**
207
+ * API resource information for StatefulSet.
208
+ */
209
+ ApiResource.STATEFUL_SETS = new ApiResource({
210
+ apiGroup: 'apps',
211
+ resourceType: 'statefulsets',
212
+ });
213
+ /**
214
+ * API resource information for TokenReview.
215
+ */
216
+ ApiResource.TOKEN_REVIEWS = new ApiResource({
217
+ apiGroup: 'authentication.k8s.io',
218
+ resourceType: 'tokenreviews',
219
+ });
220
+ /**
221
+ * API resource information for LocalSubjectAccessReview.
222
+ */
223
+ ApiResource.LOCAL_SUBJECT_ACCESS_REVIEWS = new ApiResource({
224
+ apiGroup: 'authorization.k8s.io',
225
+ resourceType: 'localsubjectaccessreviews',
226
+ });
227
+ /**
228
+ * API resource information for SelfSubjectAccessReview.
229
+ */
230
+ ApiResource.SELF_SUBJECT_ACCESS_REVIEWS = new ApiResource({
231
+ apiGroup: 'authorization.k8s.io',
232
+ resourceType: 'selfsubjectaccessreviews',
233
+ });
234
+ /**
235
+ * API resource information for SelfSubjectRulesReview.
236
+ */
237
+ ApiResource.SELF_SUBJECT_RULES_REVIEWS = new ApiResource({
238
+ apiGroup: 'authorization.k8s.io',
239
+ resourceType: 'selfsubjectrulesreviews',
240
+ });
241
+ /**
242
+ * API resource information for SubjectAccessReview.
243
+ */
244
+ ApiResource.SUBJECT_ACCESS_REVIEWS = new ApiResource({
245
+ apiGroup: 'authorization.k8s.io',
246
+ resourceType: 'subjectaccessreviews',
247
+ });
248
+ /**
249
+ * API resource information for HorizontalPodAutoscaler.
250
+ */
251
+ ApiResource.HORIZONTAL_POD_AUTOSCALERS = new ApiResource({
252
+ apiGroup: 'autoscaling',
253
+ resourceType: 'horizontalpodautoscalers',
254
+ });
255
+ /**
256
+ * API resource information for CronJob.
257
+ */
258
+ ApiResource.CRON_JOBS = new ApiResource({
259
+ apiGroup: 'batch',
260
+ resourceType: 'cronjobs',
261
+ });
262
+ /**
263
+ * API resource information for Job.
264
+ */
265
+ ApiResource.JOBS = new ApiResource({
266
+ apiGroup: 'batch',
267
+ resourceType: 'jobs',
268
+ });
269
+ /**
270
+ * API resource information for CertificateSigningRequest.
271
+ */
272
+ ApiResource.CERTIFICATE_SIGNING_REQUESTS = new ApiResource({
273
+ apiGroup: 'certificates.k8s.io',
274
+ resourceType: 'certificatesigningrequests',
275
+ });
276
+ /**
277
+ * API resource information for Lease.
278
+ */
279
+ ApiResource.LEASES = new ApiResource({
280
+ apiGroup: 'coordination.k8s.io',
281
+ resourceType: 'leases',
282
+ });
283
+ /**
284
+ * API resource information for EndpointSlice.
285
+ */
286
+ ApiResource.ENDPOINT_SLICES = new ApiResource({
287
+ apiGroup: 'discovery.k8s.io',
288
+ resourceType: 'endpointslices',
289
+ });
290
+ /**
291
+ * API resource information for FlowSchema.
292
+ */
293
+ ApiResource.FLOW_SCHEMAS = new ApiResource({
294
+ apiGroup: 'flowcontrol.apiserver.k8s.io',
295
+ resourceType: 'flowschemas',
296
+ });
297
+ /**
298
+ * API resource information for PriorityLevelConfiguration.
299
+ */
300
+ ApiResource.PRIORITY_LEVEL_CONFIGURATIONS = new ApiResource({
301
+ apiGroup: 'flowcontrol.apiserver.k8s.io',
302
+ resourceType: 'prioritylevelconfigurations',
303
+ });
304
+ /**
305
+ * API resource information for IngressClass.
306
+ */
307
+ ApiResource.INGRESS_CLASSES = new ApiResource({
308
+ apiGroup: 'networking.k8s.io',
309
+ resourceType: 'ingressclasses',
310
+ });
311
+ /**
312
+ * API resource information for Ingress.
313
+ */
314
+ ApiResource.INGRESSES = new ApiResource({
315
+ apiGroup: 'networking.k8s.io',
316
+ resourceType: 'ingresses',
317
+ });
318
+ /**
319
+ * API resource information for NetworkPolicy.
320
+ */
321
+ ApiResource.NETWORK_POLICIES = new ApiResource({
322
+ apiGroup: 'networking.k8s.io',
323
+ resourceType: 'networkpolicies',
324
+ });
325
+ /**
326
+ * API resource information for RuntimeClass.
327
+ */
328
+ ApiResource.RUNTIME_CLASSES = new ApiResource({
329
+ apiGroup: 'node.k8s.io',
330
+ resourceType: 'runtimeclasses',
331
+ });
332
+ /**
333
+ * API resource information for PodDisruptionBudget.
334
+ */
335
+ ApiResource.POD_DISRUPTION_BUDGETS = new ApiResource({
336
+ apiGroup: 'policy',
337
+ resourceType: 'poddisruptionbudgets',
338
+ });
339
+ /**
340
+ * API resource information for ClusterRoleBinding.
341
+ */
342
+ ApiResource.CLUSTER_ROLE_BINDINGS = new ApiResource({
343
+ apiGroup: 'rbac.authorization.k8s.io',
344
+ resourceType: 'clusterrolebindings',
345
+ });
346
+ /**
347
+ * API resource information for ClusterRole.
348
+ */
349
+ ApiResource.CLUSTER_ROLES = new ApiResource({
350
+ apiGroup: 'rbac.authorization.k8s.io',
351
+ resourceType: 'clusterroles',
352
+ });
353
+ /**
354
+ * API resource information for RoleBinding.
355
+ */
356
+ ApiResource.ROLE_BINDINGS = new ApiResource({
357
+ apiGroup: 'rbac.authorization.k8s.io',
358
+ resourceType: 'rolebindings',
359
+ });
360
+ /**
361
+ * API resource information for Role.
362
+ */
363
+ ApiResource.ROLES = new ApiResource({
364
+ apiGroup: 'rbac.authorization.k8s.io',
365
+ resourceType: 'roles',
366
+ });
367
+ /**
368
+ * API resource information for PriorityClass.
369
+ */
370
+ ApiResource.PRIORITY_CLASSES = new ApiResource({
371
+ apiGroup: 'scheduling.k8s.io',
372
+ resourceType: 'priorityclasses',
373
+ });
374
+ /**
375
+ * API resource information for CSIDriver.
376
+ */
377
+ ApiResource.CSI_DRIVERS = new ApiResource({
378
+ apiGroup: 'storage.k8s.io',
379
+ resourceType: 'csidrivers',
380
+ });
381
+ /**
382
+ * API resource information for CSINode.
383
+ */
384
+ ApiResource.CSI_NODES = new ApiResource({
385
+ apiGroup: 'storage.k8s.io',
386
+ resourceType: 'csinodes',
387
+ });
388
+ /**
389
+ * API resource information for CSIStorageCapacity.
390
+ */
391
+ ApiResource.CSI_STORAGE_CAPACITIES = new ApiResource({
392
+ apiGroup: 'storage.k8s.io',
393
+ resourceType: 'csistoragecapacities',
394
+ });
395
+ /**
396
+ * API resource information for StorageClass.
397
+ */
398
+ ApiResource.STORAGE_CLASSES = new ApiResource({
399
+ apiGroup: 'storage.k8s.io',
400
+ resourceType: 'storageclasses',
401
+ });
402
+ /**
403
+ * API resource information for VolumeAttachment.
404
+ */
405
+ ApiResource.VOLUME_ATTACHMENTS = new ApiResource({
406
+ apiGroup: 'storage.k8s.io',
407
+ resourceType: 'volumeattachments',
408
+ });
409
+ /**
410
+ * Factory for creating non api resources.
411
+ */
412
+ class NonApiResource {
413
+ constructor(nonResourceUrl) {
414
+ this.nonResourceUrl = nonResourceUrl;
415
+ }
416
+ static of(url) {
417
+ return new NonApiResource(url);
418
+ }
419
+ ;
420
+ asApiResource() {
421
+ return undefined;
422
+ }
423
+ asNonApiResource() {
424
+ return this.nonResourceUrl;
425
+ }
426
+ }
427
+ exports.NonApiResource = NonApiResource;
428
+ _b = JSII_RTTI_SYMBOL_1;
429
+ NonApiResource[_b] = { fqn: "cdk8s-plus-31.NonApiResource", version: "2.0.0" };
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTBEQTs7R0FFRztBQUNILE1BQWEsV0FBVztJQW9jdEIsWUFBb0IsT0FBMkI7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBdEJEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUEyQjtRQUM5QyxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQSxDQUFDO0lBbUJLLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O0FBL2NILGtDQWdkQzs7O0FBL2NDOztHQUVHO0FBQ29CLG9CQUFRLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDaEQsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsVUFBVTtDQUN6QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiw4QkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUMxRCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxtQkFBbUI7Q0FDbEMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsdUJBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNuRCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxZQUFZO0NBQzNCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHFCQUFTLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDakQsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsV0FBVztDQUMxQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixrQkFBTSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQzlDLFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLFFBQVE7Q0FDdkIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0Isd0JBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNwRCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxhQUFhO0NBQzVCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHNCQUFVLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbEQsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsWUFBWTtDQUMzQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixpQkFBSyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQzdDLFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLE9BQU87Q0FDdEIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0Isb0NBQXdCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDaEUsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsd0JBQXdCO0NBQ3ZDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLDhCQUFrQixHQUFHLElBQUksV0FBVyxDQUFDO0lBQzFELFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLG1CQUFtQjtDQUNsQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixnQkFBSSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQzVDLFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IseUJBQWEsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNyRCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxjQUFjO0NBQzdCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLG1DQUF1QixHQUFHLElBQUksV0FBVyxDQUFDO0lBQy9ELFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLHdCQUF3QjtDQUN2QyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiwyQkFBZSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3ZELFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLGdCQUFnQjtDQUMvQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixtQkFBTyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQy9DLFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLFNBQVM7Q0FDeEIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsNEJBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDeEQsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsaUJBQWlCO0NBQ2hDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLG9CQUFRLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDaEQsUUFBUSxFQUFFLEVBQUU7SUFDWixZQUFZLEVBQUUsVUFBVTtDQUN6QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiwyQ0FBK0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUN2RSxRQUFRLEVBQUUsOEJBQThCO0lBQ3hDLFlBQVksRUFBRSwrQkFBK0I7Q0FDOUMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsNkNBQWlDLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDekUsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxZQUFZLEVBQUUsaUNBQWlDO0NBQ2hELENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHVDQUEyQixHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25FLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsWUFBWSxFQUFFLDJCQUEyQjtDQUMxQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix3QkFBWSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3BELFFBQVEsRUFBRSx3QkFBd0I7SUFDbEMsWUFBWSxFQUFFLGFBQWE7Q0FDNUIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsZ0NBQW9CLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDNUQsUUFBUSxFQUFFLE1BQU07SUFDaEIsWUFBWSxFQUFFLHFCQUFxQjtDQUNwQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix1QkFBVyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25ELFFBQVEsRUFBRSxNQUFNO0lBQ2hCLFlBQVksRUFBRSxZQUFZO0NBQzNCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHVCQUFXLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkQsUUFBUSxFQUFFLE1BQU07SUFDaEIsWUFBWSxFQUFFLGFBQWE7Q0FDNUIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0Isd0JBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNwRCxRQUFRLEVBQUUsTUFBTTtJQUNoQixZQUFZLEVBQUUsYUFBYTtDQUM1QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix5QkFBYSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3JELFFBQVEsRUFBRSxNQUFNO0lBQ2hCLFlBQVksRUFBRSxjQUFjO0NBQzdCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHlCQUFhLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckQsUUFBUSxFQUFFLHVCQUF1QjtJQUNqQyxZQUFZLEVBQUUsY0FBYztDQUM3QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix3Q0FBNEIsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNwRSxRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFlBQVksRUFBRSwyQkFBMkI7Q0FDMUMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsdUNBQTJCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkUsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxZQUFZLEVBQUUsMEJBQTBCO0NBQ3pDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHNDQUEwQixHQUFHLElBQUksV0FBVyxDQUFDO0lBQ2xFLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsWUFBWSxFQUFFLHlCQUF5QjtDQUN4QyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixrQ0FBc0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUM5RCxRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFlBQVksRUFBRSxzQkFBc0I7Q0FDckMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0Isc0NBQTBCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbEUsUUFBUSxFQUFFLGFBQWE7SUFDdkIsWUFBWSxFQUFFLDBCQUEwQjtDQUN6QyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixxQkFBUyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ2pELFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFlBQVksRUFBRSxVQUFVO0NBQ3pCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLGdCQUFJLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDNUMsUUFBUSxFQUFFLE9BQU87SUFDakIsWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0Isd0NBQTRCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDcEUsUUFBUSxFQUFFLHFCQUFxQjtJQUMvQixZQUFZLEVBQUUsNEJBQTRCO0NBQzNDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLGtCQUFNLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDOUMsUUFBUSxFQUFFLHFCQUFxQjtJQUMvQixZQUFZLEVBQUUsUUFBUTtDQUN2QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiwyQkFBZSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3ZELFFBQVEsRUFBRSxrQkFBa0I7SUFDNUIsWUFBWSxFQUFFLGdCQUFnQjtDQUMvQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix3QkFBWSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3BELFFBQVEsRUFBRSw4QkFBOEI7SUFDeEMsWUFBWSxFQUFFLGFBQWE7Q0FDNUIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IseUNBQTZCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckUsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxZQUFZLEVBQUUsNkJBQTZCO0NBQzVDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLDJCQUFlLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDdkQsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixZQUFZLEVBQUUsZ0JBQWdCO0NBQy9CLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHFCQUFTLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDakQsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixZQUFZLEVBQUUsV0FBVztDQUMxQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiw0QkFBZ0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUN4RCxRQUFRLEVBQUUsbUJBQW1CO0lBQzdCLFlBQVksRUFBRSxpQkFBaUI7Q0FDaEMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsMkJBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUN2RCxRQUFRLEVBQUUsYUFBYTtJQUN2QixZQUFZLEVBQUUsZ0JBQWdCO0NBQy9CLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLGtDQUFzQixHQUFHLElBQUksV0FBVyxDQUFDO0lBQzlELFFBQVEsRUFBRSxRQUFRO0lBQ2xCLFlBQVksRUFBRSxzQkFBc0I7Q0FDckMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsaUNBQXFCLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDN0QsUUFBUSxFQUFFLDJCQUEyQjtJQUNyQyxZQUFZLEVBQUUscUJBQXFCO0NBQ3BDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLHlCQUFhLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckQsUUFBUSxFQUFFLDJCQUEyQjtJQUNyQyxZQUFZLEVBQUUsY0FBYztDQUM3QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix5QkFBYSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3JELFFBQVEsRUFBRSwyQkFBMkI7SUFDckMsWUFBWSxFQUFFLGNBQWM7Q0FDN0IsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IsaUJBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUM3QyxRQUFRLEVBQUUsMkJBQTJCO0lBQ3JDLFlBQVksRUFBRSxPQUFPO0NBQ3RCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLDRCQUFnQixHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3hELFFBQVEsRUFBRSxtQkFBbUI7SUFDN0IsWUFBWSxFQUFFLGlCQUFpQjtDQUNoQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQix1QkFBVyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25ELFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsWUFBWSxFQUFFLFlBQVk7Q0FDM0IsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0IscUJBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUNqRCxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLFlBQVksRUFBRSxVQUFVO0NBQ3pCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ29CLGtDQUFzQixHQUFHLElBQUksV0FBVyxDQUFDO0lBQzlELFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsWUFBWSxFQUFFLHNCQUFzQjtDQUNyQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiwyQkFBZSxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ3ZELFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsWUFBWSxFQUFFLGdCQUFnQjtDQUMvQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQiw4QkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztJQUMxRCxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLFlBQVksRUFBRSxtQkFBbUI7Q0FDbEMsQ0FBQyxDQUFDO0FBbUNMOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBTXpCLFlBQXFDLGNBQXNCO1FBQXRCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO0lBQUcsQ0FBQztJQUp4RCxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQVc7UUFDMUIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRThELENBQUM7SUFFekQsYUFBYTtRQUNsQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sZ0JBQWdCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDOztBQWZILHdDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwcmVzZW50cyBhIHJlc291cmNlIG9yIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcGlSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgZ3JvdXAgcG9ydGlvbiBvZiB0aGUgQVBJIHZlcnNpb24gKGUuZy4gYGF1dGhvcml6YXRpb24uazhzLmlvYCkuXG4gICAqL1xuICByZWFkb25seSBhcGlHcm91cDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhIHJlc291cmNlIHR5cGUgYXMgaXQgYXBwZWFycyBpbiB0aGUgcmVsZXZhbnQgQVBJIGVuZHBvaW50LlxuICAgKiBAZXhhbXBsZSAtIFwicG9kc1wiIG9yIFwicG9kcy9sb2dcIlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3JlZmVyZW5jZS9hY2Nlc3MtYXV0aG4tYXV0aHovcmJhYy8jcmVmZXJyaW5nLXRvLXJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUsIG5hbWVzcGFjZS1nbG9iYWwsIG5hbWUgb2YgYW4gb2JqZWN0IGluc2lkZSB0aGUgS3ViZXJuZXRlcyBjbHVzdGVyLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIG9taXR0ZWQsIHRoZSBBcGlSZXNvdXJjZSBzaG91bGQgcmVwcmVzZW50IGFsbCBvYmplY3RzIG9mIHRoZSBnaXZlbiB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xufVxuLyoqXG4gKiBBbiBBUEkgRW5kcG9pbnQgY2FuIGVpdGhlciBiZSBhIHJlc291cmNlIGRlc2NyaXB0b3IgKGUuZyAvcG9kcylcbiAqIG9yIGEgbm9uIHJlc291cmNlIHVybCAoZS5nIC9oZWFsdGh6KS4gSXQgbXVzdCBiZSBvbmUgb3IgdGhlIG90aGVyLCBhbmQgbm90IGJvdGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFwaUVuZHBvaW50IHtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBJQXBpUmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy5cbiAgICovXG4gIGFzQXBpUmVzb3VyY2UoKTogSUFwaVJlc291cmNlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5vbiByZXNvdXJjZSB1cmwgdGhpcyBvYmplY3QgcmVwcmVzZW50cy5cbiAgICovXG4gIGFzTm9uQXBpUmVzb3VyY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEFwaVJlc291cmNlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlSZXNvdXJjZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGdyb3VwIHBvcnRpb24gb2YgdGhlIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pb2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpR3JvdXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHR5cGUgYXMgaXQgYXBwZWFycyBpbiB0aGUgcmVsZXZhbnQgQVBJIGVuZHBvaW50LlxuICAgKiBAZXhhbXBsZSAtIFwicG9kc1wiIG9yIFwicG9kcy9sb2dcIlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3JlZmVyZW5jZS9hY2Nlc3MtYXV0aG4tYXV0aHovcmJhYy8jcmVmZXJyaW5nLXRvLXJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBhbiBBUEkgcmVzb3VyY2UgdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaVJlc291cmNlIGltcGxlbWVudHMgSUFwaVJlc291cmNlLCBJQXBpRW5kcG9pbnQge1xuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBCaW5kaW5nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCSU5ESU5HUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICcnLFxuICAgIHJlc291cmNlVHlwZTogJ2JpbmRpbmdzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgQ29tcG9uZW50U3RhdHVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QT05FTlRfU1RBVFVTRVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnJyxcbiAgICByZXNvdXJjZVR5cGU6ICdjb21wb25lbnRzdGF0dXNlcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIENvbmZpZ01hcC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09ORklHX01BUFMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnJyxcbiAgICByZXNvdXJjZVR5cGU6ICdjb25maWdtYXBzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgRW5kcG9pbnRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkRQT0lOVFMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnJyxcbiAgICByZXNvdXJjZVR5cGU6ICdlbmRwb2ludHMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBFdmVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVZFTlRTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJycsXG4gICAgcmVzb3VyY2VUeXBlOiAnZXZlbnRzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgTGltaXRSYW5nZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElNSVRfUkFOR0VTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJycsXG4gICAgcmVzb3VyY2VUeXBlOiAnbGltaXRyYW5nZXMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBOYW1lc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUVTUEFDRVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnJyxcbiAgICByZXNvdXJjZVR5cGU6ICduYW1lc3BhY2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgTm9kZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnJyxcbiAgICByZXNvdXJjZVR5cGU6ICdub2RlcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFBlcnNpc3RlbnRWb2x1bWVDbGFpbS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEVSU0lTVEVOVF9WT0xVTUVfQ0xBSU1TID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJycsXG4gICAgcmVzb3VyY2VUeXBlOiAncGVyc2lzdGVudHZvbHVtZWNsYWltcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFBlcnNpc3RlbnRWb2x1bWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBFUlNJU1RFTlRfVk9MVU1FUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICcnLFxuICAgIHJlc291cmNlVHlwZTogJ3BlcnNpc3RlbnR2b2x1bWVzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgUG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQT0RTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJycsXG4gICAgcmVzb3VyY2VUeXBlOiAncG9kcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFBvZFRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQT0RfVEVNUExBVEVTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJycsXG4gICAgcmVzb3VyY2VUeXBlOiAncG9kdGVtcGxhdGVzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgUmVwbGljYXRpb25Db250cm9sbGVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRVBMSUNBVElPTl9DT05UUk9MTEVSUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICcnLFxuICAgIHJlc291cmNlVHlwZTogJ3JlcGxpY2F0aW9uY29udHJvbGxlcnMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBSZXNvdXJjZVF1b3RhLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRVNPVVJDRV9RVU9UQVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnJyxcbiAgICByZXNvdXJjZVR5cGU6ICdyZXNvdXJjZXF1b3RhcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFNlY3JldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VDUkVUUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICcnLFxuICAgIHJlc291cmNlVHlwZTogJ3NlY3JldHMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBTZXJ2aWNlQWNjb3VudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVklDRV9BQ0NPVU5UUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICcnLFxuICAgIHJlc291cmNlVHlwZTogJ3NlcnZpY2VhY2NvdW50cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZJQ0VTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJycsXG4gICAgcmVzb3VyY2VUeXBlOiAnc2VydmljZXMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNVVRBVElOR19XRUJIT09LX0NPTkZJR1VSQVRJT05TID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2FkbWlzc2lvbnJlZ2lzdHJhdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ211dGF0aW5nd2ViaG9va2NvbmZpZ3VyYXRpb25zJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWQUxJREFUSU5HX1dFQkhPT0tfQ09ORklHVVJBVElPTlMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnYWRtaXNzaW9ucmVnaXN0cmF0aW9uLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAndmFsaWRhdGluZ3dlYmhvb2tjb25maWd1cmF0aW9ucycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ1VTVE9NX1JFU09VUkNFX0RFRklOSVRJT05TID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2FwaWV4dGVuc2lvbnMuazhzLmlvJyxcbiAgICByZXNvdXJjZVR5cGU6ICdjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgQVBJU2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBJX1NFUlZJQ0VTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2FwaXJlZ2lzdHJhdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ2FwaXNlcnZpY2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgQ29udHJvbGxlclJldmlzaW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT05UUk9MTEVSX1JFVklTSU9OUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdhcHBzJyxcbiAgICByZXNvdXJjZVR5cGU6ICdjb250cm9sbGVycmV2aXNpb25zJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgRGFlbW9uU2V0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEQUVNT05fU0VUUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdhcHBzJyxcbiAgICByZXNvdXJjZVR5cGU6ICdkYWVtb25zZXRzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgRGVwbG95bWVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVQTE9ZTUVOVFMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnYXBwcycsXG4gICAgcmVzb3VyY2VUeXBlOiAnZGVwbG95bWVudHMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBSZXBsaWNhU2V0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRVBMSUNBX1NFVFMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnYXBwcycsXG4gICAgcmVzb3VyY2VUeXBlOiAncmVwbGljYXNldHMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBTdGF0ZWZ1bFNldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RBVEVGVUxfU0VUUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdhcHBzJyxcbiAgICByZXNvdXJjZVR5cGU6ICdzdGF0ZWZ1bHNldHMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBUb2tlblJldmlldy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fUkVWSUVXUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdhdXRoZW50aWNhdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3Rva2VucmV2aWV3cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIExvY2FsU3ViamVjdEFjY2Vzc1Jldmlldy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTE9DQUxfU1VCSkVDVF9BQ0NFU1NfUkVWSUVXUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdhdXRob3JpemF0aW9uLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnbG9jYWxzdWJqZWN0YWNjZXNzcmV2aWV3cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRUxGX1NVQkpFQ1RfQUNDRVNTX1JFVklFV1MgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnYXV0aG9yaXphdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3NlbGZzdWJqZWN0YWNjZXNzcmV2aWV3cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFNlbGZTdWJqZWN0UnVsZXNSZXZpZXcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFTEZfU1VCSkVDVF9SVUxFU19SRVZJRVdTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2F1dGhvcml6YXRpb24uazhzLmlvJyxcbiAgICByZXNvdXJjZVR5cGU6ICdzZWxmc3ViamVjdHJ1bGVzcmV2aWV3cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFN1YmplY3RBY2Nlc3NSZXZpZXcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVQkpFQ1RfQUNDRVNTX1JFVklFV1MgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnYXV0aG9yaXphdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3N1YmplY3RhY2Nlc3NyZXZpZXdzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhPUklaT05UQUxfUE9EX0FVVE9TQ0FMRVJTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2F1dG9zY2FsaW5nJyxcbiAgICByZXNvdXJjZVR5cGU6ICdob3Jpem9udGFscG9kYXV0b3NjYWxlcnMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBDcm9uSm9iLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDUk9OX0pPQlMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnYmF0Y2gnLFxuICAgIHJlc291cmNlVHlwZTogJ2Nyb25qb2JzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgSm9iLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKT0JTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2JhdGNoJyxcbiAgICByZXNvdXJjZVR5cGU6ICdqb2JzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0VSVElGSUNBVEVfU0lHTklOR19SRVFVRVNUUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdjZXJ0aWZpY2F0ZXMuazhzLmlvJyxcbiAgICByZXNvdXJjZVR5cGU6ICdjZXJ0aWZpY2F0ZXNpZ25pbmdyZXF1ZXN0cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIExlYXNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMRUFTRVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnY29vcmRpbmF0aW9uLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnbGVhc2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgRW5kcG9pbnRTbGljZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5EUE9JTlRfU0xJQ0VTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2Rpc2NvdmVyeS5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ2VuZHBvaW50c2xpY2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgRmxvd1NjaGVtYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRkxPV19TQ0hFTUFTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2Zsb3djb250cm9sLmFwaXNlcnZlci5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ2Zsb3dzY2hlbWFzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgUHJpb3JpdHlMZXZlbENvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSSU9SSVRZX0xFVkVMX0NPTkZJR1VSQVRJT05TID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ2Zsb3djb250cm9sLmFwaXNlcnZlci5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3ByaW9yaXR5bGV2ZWxjb25maWd1cmF0aW9ucycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIEluZ3Jlc3NDbGFzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5HUkVTU19DTEFTU0VTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ25ldHdvcmtpbmcuazhzLmlvJyxcbiAgICByZXNvdXJjZVR5cGU6ICdpbmdyZXNzY2xhc3NlcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIEluZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOR1JFU1NFUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICduZXR3b3JraW5nLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnaW5ncmVzc2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgTmV0d29ya1BvbGljeS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVUV09SS19QT0xJQ0lFUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICduZXR3b3JraW5nLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnbmV0d29ya3BvbGljaWVzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgUnVudGltZUNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVU5USU1FX0NMQVNTRVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnbm9kZS5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3J1bnRpbWVjbGFzc2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgUG9kRGlzcnVwdGlvbkJ1ZGdldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUE9EX0RJU1JVUFRJT05fQlVER0VUUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdwb2xpY3knLFxuICAgIHJlc291cmNlVHlwZTogJ3BvZGRpc3J1cHRpb25idWRnZXRzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgQ2x1c3RlclJvbGVCaW5kaW5nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTFVTVEVSX1JPTEVfQklORElOR1MgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnY2x1c3RlcnJvbGViaW5kaW5ncycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIENsdXN0ZXJSb2xlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTFVTVEVSX1JPTEVTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ2NsdXN0ZXJyb2xlcycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFJvbGVCaW5kaW5nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBST0xFX0JJTkRJTkdTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3JvbGViaW5kaW5ncycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFJvbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJPTEVTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3JvbGVzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgUHJpb3JpdHlDbGFzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJJT1JJVFlfQ0xBU1NFUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdzY2hlZHVsaW5nLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAncHJpb3JpdHljbGFzc2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgQ1NJRHJpdmVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDU0lfRFJJVkVSUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdzdG9yYWdlLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnY3NpZHJpdmVycycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIENTSU5vZGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENTSV9OT0RFUyA9IG5ldyBBcGlSZXNvdXJjZSh7XG4gICAgYXBpR3JvdXA6ICdzdG9yYWdlLms4cy5pbycsXG4gICAgcmVzb3VyY2VUeXBlOiAnY3Npbm9kZXMnLFxuICB9KTtcblxuICAvKipcbiAgICogQVBJIHJlc291cmNlIGluZm9ybWF0aW9uIGZvciBDU0lTdG9yYWdlQ2FwYWNpdHkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENTSV9TVE9SQUdFX0NBUEFDSVRJRVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnc3RvcmFnZS5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ2NzaXN0b3JhZ2VjYXBhY2l0aWVzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgU3RvcmFnZUNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX0NMQVNTRVMgPSBuZXcgQXBpUmVzb3VyY2Uoe1xuICAgIGFwaUdyb3VwOiAnc3RvcmFnZS5rOHMuaW8nLFxuICAgIHJlc291cmNlVHlwZTogJ3N0b3JhZ2VjbGFzc2VzJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFQSSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgVm9sdW1lQXR0YWNobWVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVk9MVU1FX0FUVEFDSE1FTlRTID0gbmV3IEFwaVJlc291cmNlKHtcbiAgICBhcGlHcm91cDogJ3N0b3JhZ2UuazhzLmlvJyxcbiAgICByZXNvdXJjZVR5cGU6ICd2b2x1bWVhdHRhY2htZW50cycsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBUEkgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGEgY3VzdG9tIHJlc291cmNlIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGN1c3RvbShvcHRpb25zOiBBcGlSZXNvdXJjZU9wdGlvbnMpOiBBcGlSZXNvdXJjZSB7XG4gICAgcmV0dXJuIG5ldyBBcGlSZXNvdXJjZShvcHRpb25zKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIGdyb3VwIHBvcnRpb24gb2YgdGhlIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pb2ApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUdyb3VwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0eXBlIGFzIGl0IGFwcGVhcnMgaW4gdGhlIHJlbGV2YW50IEFQSSBlbmRwb2ludC5cbiAgICogQGV4YW1wbGUgLSBcInBvZHNcIiBvciBcInBvZHMvbG9nXCJcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvYWNjZXNzLWF1dGhuLWF1dGh6L3JiYWMvI3JlZmVycmluZy10by1yZXNvdXJjZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFwaVJlc291cmNlT3B0aW9ucykge1xuICAgIHRoaXMuYXBpR3JvdXAgPSBvcHRpb25zLmFwaUdyb3VwO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlID0gb3B0aW9ucy5yZXNvdXJjZVR5cGU7XG4gIH1cblxuICBwdWJsaWMgYXNBcGlSZXNvdXJjZSgpOiBJQXBpUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzTm9uQXBpUmVzb3VyY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgbm9uIGFwaSByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb25BcGlSZXNvdXJjZSBpbXBsZW1lbnRzIElBcGlFbmRwb2ludCB7XG5cbiAgcHVibGljIHN0YXRpYyBvZih1cmw6IHN0cmluZyk6IE5vbkFwaVJlc291cmNlIHtcbiAgICByZXR1cm4gbmV3IE5vbkFwaVJlc291cmNlKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbm9uUmVzb3VyY2VVcmw6IHN0cmluZykge307XG5cbiAgcHVibGljIGFzQXBpUmVzb3VyY2UoKTogSUFwaVJlc291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGFzTm9uQXBpUmVzb3VyY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0aGlzLm5vblJlc291cmNlVXJsO1xuICB9XG59Il19
package/lib/base.d.ts ADDED
@@ -0,0 +1,79 @@
1
+ import { ApiObjectMetadata, ApiObject, ApiObjectMetadataDefinition } from 'cdk8s';
2
+ import { Construct, IConstruct } from 'constructs';
3
+ import { IApiResource, IApiEndpoint } from './api-resource';
4
+ /**
5
+ * Initialization properties for resources.
6
+ */
7
+ export interface ResourceProps {
8
+ /**
9
+ * Metadata that all persisted resources must have, which includes all objects
10
+ * users must create.
11
+ */
12
+ readonly metadata?: ApiObjectMetadata;
13
+ }
14
+ /**
15
+ * Represents a resource.
16
+ */
17
+ export interface IResource extends IConstruct, IApiResource {
18
+ /**
19
+ * The Kubernetes name of this resource.
20
+ */
21
+ readonly name: string;
22
+ /**
23
+ * The object's API version (e.g. "authorization.k8s.io/v1")
24
+ */
25
+ readonly apiVersion: string;
26
+ /**
27
+ * The object kind (e.g. "Deployment").
28
+ */
29
+ readonly kind: string;
30
+ }
31
+ /**
32
+ * Base class for all Kubernetes objects in stdk8s. Represents a single
33
+ * resource.
34
+ */
35
+ export declare abstract class Resource extends Construct implements IResource, IApiResource, IApiEndpoint {
36
+ /**
37
+ * The underlying cdk8s API object.
38
+ */
39
+ protected abstract readonly apiObject: ApiObject;
40
+ abstract readonly resourceType: string;
41
+ readonly permissions: ResourcePermissions;
42
+ constructor(scope: Construct, id: string);
43
+ get metadata(): ApiObjectMetadataDefinition;
44
+ /**
45
+ * The name of this API object.
46
+ */
47
+ get name(): string;
48
+ /**
49
+ * The object's API version (e.g. "authorization.k8s.io/v1")
50
+ */
51
+ get apiVersion(): string;
52
+ /**
53
+ * The group portion of the API version (e.g. "authorization.k8s.io").
54
+ */
55
+ get apiGroup(): string;
56
+ /**
57
+ * The object kind (e.g. "Deployment").
58
+ */
59
+ get kind(): string;
60
+ get resourceName(): string | undefined;
61
+ asApiResource(): IApiResource | undefined;
62
+ asNonApiResource(): string | undefined;
63
+ }
64
+ /**
65
+ * Controls permissions for operations on resources.
66
+ */
67
+ export declare class ResourcePermissions {
68
+ protected readonly instance: Resource;
69
+ constructor(instance: Resource);
70
+ /**
71
+ * Grants the list of subjects permissions to read this resource.
72
+ */
73
+ grantRead(...subjects: rb.ISubject[]): rb.RoleBinding;
74
+ /**
75
+ * Grants the list of subjects permissions to read and write this resource.
76
+ */
77
+ grantReadWrite(...subjects: rb.ISubject[]): rb.RoleBinding;
78
+ }
79
+ import * as rb from './role-binding';
package/lib/base.js ADDED
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ResourcePermissions = exports.Resource = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const constructs_1 = require("constructs");
7
+ /**
8
+ * Base class for all Kubernetes objects in stdk8s. Represents a single
9
+ * resource.
10
+ */
11
+ class Resource extends constructs_1.Construct {
12
+ constructor(scope, id) {
13
+ super(scope, id);
14
+ this.permissions = new ResourcePermissions(this);
15
+ }
16
+ get metadata() {
17
+ return this.apiObject.metadata;
18
+ }
19
+ /**
20
+ * The name of this API object.
21
+ */
22
+ get name() {
23
+ return this.apiObject.name;
24
+ }
25
+ /**
26
+ * The object's API version (e.g. "authorization.k8s.io/v1")
27
+ */
28
+ get apiVersion() {
29
+ return this.apiObject.apiVersion;
30
+ }
31
+ /**
32
+ * The group portion of the API version (e.g. "authorization.k8s.io").
33
+ */
34
+ get apiGroup() {
35
+ return this.apiObject.apiGroup;
36
+ }
37
+ /**
38
+ * The object kind (e.g. "Deployment").
39
+ */
40
+ get kind() {
41
+ return this.apiObject.kind;
42
+ }
43
+ get resourceName() {
44
+ return this.name;
45
+ }
46
+ asApiResource() {
47
+ return this;
48
+ }
49
+ asNonApiResource() {
50
+ return undefined;
51
+ }
52
+ }
53
+ exports.Resource = Resource;
54
+ _a = JSII_RTTI_SYMBOL_1;
55
+ Resource[_a] = { fqn: "cdk8s-plus-31.Resource", version: "2.0.0" };
56
+ /**
57
+ * Controls permissions for operations on resources.
58
+ */
59
+ class ResourcePermissions {
60
+ constructor(instance) {
61
+ this.instance = instance;
62
+ }
63
+ /**
64
+ * Grants the list of subjects permissions to read this resource.
65
+ */
66
+ grantRead(...subjects) {
67
+ const subjectsAddress = utils_1.address(...subjects);
68
+ const role = new r.Role(this.instance, `Role${subjectsAddress}`, {
69
+ metadata: { namespace: this.instance.metadata.namespace },
70
+ });
71
+ role.allowRead(this.instance);
72
+ return role.bind(...subjects);
73
+ }
74
+ /**
75
+ * Grants the list of subjects permissions to read and write this resource.
76
+ */
77
+ grantReadWrite(...subjects) {
78
+ const subjectsAddress = utils_1.address(...subjects);
79
+ const role = new r.Role(this.instance, `Role${subjectsAddress}`, {
80
+ metadata: { namespace: this.instance.metadata.namespace },
81
+ });
82
+ role.allowReadWrite(this.instance);
83
+ return role.bind(...subjects);
84
+ }
85
+ }
86
+ exports.ResourcePermissions = ResourcePermissions;
87
+ _b = JSII_RTTI_SYMBOL_1;
88
+ ResourcePermissions[_b] = { fqn: "cdk8s-plus-31.ResourcePermissions", version: "2.0.0" };
89
+ // meh, avoiding errors due to circular imports...
90
+ const r = require("./role");
91
+ const utils_1 = require("./utils");
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMkNBQW1EO0FBa0NuRDs7O0dBR0c7QUFDSCxNQUFzQixRQUFTLFNBQVEsc0JBQVM7SUFXOUMsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVO1FBQzdDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O0FBMURILDRCQTREQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFhLG1CQUFtQjtJQUU5QixZQUErQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUVyRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxHQUFHLFFBQXVCO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLGVBQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sZUFBZSxFQUFFLEVBQUU7WUFDL0QsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtTQUMxRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsR0FBRyxRQUF1QjtRQUM5QyxNQUFNLGVBQWUsR0FBRyxlQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLGVBQWUsRUFBRSxFQUFFO1lBQy9ELFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7QUExQkgsa0RBNEJDOzs7QUFFRCxrREFBa0Q7QUFDbEQsNEJBQTRCO0FBRTVCLG1DQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaU9iamVjdE1ldGFkYXRhLCBBcGlPYmplY3QsIEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbiB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSUFwaVJlc291cmNlLCBJQXBpRW5kcG9pbnQgfSBmcm9tICcuL2FwaS1yZXNvdXJjZSc7XG5cbi8qKlxuICogSW5pdGlhbGl6YXRpb24gcHJvcGVydGllcyBmb3IgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogTWV0YWRhdGEgdGhhdCBhbGwgcGVyc2lzdGVkIHJlc291cmNlcyBtdXN0IGhhdmUsIHdoaWNoIGluY2x1ZGVzIGFsbCBvYmplY3RzXG4gICAqIHVzZXJzIG11c3QgY3JlYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc291cmNlIGV4dGVuZHMgSUNvbnN0cnVjdCwgSUFwaVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBLdWJlcm5ldGVzIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCdzIEFQSSB2ZXJzaW9uIChlLmcuIFwiYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFcIilcbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCBraW5kIChlLmcuIFwiRGVwbG95bWVudFwiKS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgS3ViZXJuZXRlcyBvYmplY3RzIGluIHN0ZGs4cy4gUmVwcmVzZW50cyBhIHNpbmdsZVxuICogcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNvdXJjZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElSZXNvdXJjZSwgSUFwaVJlc291cmNlLCBJQXBpRW5kcG9pbnQge1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBjZGs4cyBBUEkgb2JqZWN0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGFwaU9iamVjdDogQXBpT2JqZWN0O1xuXG4gIHB1YmxpYyByZWFkb25seSBhYnN0cmFjdCByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbnM6IFJlc291cmNlUGVybWlzc2lvbnM7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSBuZXcgUmVzb3VyY2VQZXJtaXNzaW9ucyh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWV0YWRhdGEoKTogQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5hcGlPYmplY3QubWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBBUEkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXBpT2JqZWN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9iamVjdCdzIEFQSSB2ZXJzaW9uIChlLmcuIFwiYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFcIilcbiAgICovXG4gIHB1YmxpYyBnZXQgYXBpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaU9iamVjdC5hcGlWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBwb3J0aW9uIG9mIHRoZSBBUEkgdmVyc2lvbiAoZS5nLiBcImF1dGhvcml6YXRpb24uazhzLmlvXCIpLlxuICAgKi9cbiAgcHVibGljIGdldCBhcGlHcm91cCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaU9iamVjdC5hcGlHcm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IGtpbmQgKGUuZy4gXCJEZXBsb3ltZW50XCIpLlxuICAgKi9cbiAgcHVibGljIGdldCBraW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXBpT2JqZWN0LmtpbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc291cmNlTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgYXNBcGlSZXNvdXJjZSgpOiBJQXBpUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzTm9uQXBpUmVzb3VyY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbn1cblxuLyoqXG4gKiBDb250cm9scyBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9ucyBvbiByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVBlcm1pc3Npb25zIHtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgaW5zdGFuY2U6IFJlc291cmNlKSB7fVxuXG4gIC8qKlxuICAgKiBHcmFudHMgdGhlIGxpc3Qgb2Ygc3ViamVjdHMgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGlzIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZCguLi5zdWJqZWN0czogcmIuSVN1YmplY3RbXSk6IHJiLlJvbGVCaW5kaW5nIHtcbiAgICBjb25zdCBzdWJqZWN0c0FkZHJlc3MgPSBhZGRyZXNzKC4uLnN1YmplY3RzKTtcbiAgICBjb25zdCByb2xlID0gbmV3IHIuUm9sZSh0aGlzLmluc3RhbmNlLCBgUm9sZSR7c3ViamVjdHNBZGRyZXNzfWAsIHtcbiAgICAgIG1ldGFkYXRhOiB7IG5hbWVzcGFjZTogdGhpcy5pbnN0YW5jZS5tZXRhZGF0YS5uYW1lc3BhY2UgfSxcbiAgICB9KTtcbiAgICByb2xlLmFsbG93UmVhZCh0aGlzLmluc3RhbmNlKTtcbiAgICByZXR1cm4gcm9sZS5iaW5kKC4uLnN1YmplY3RzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgdGhlIGxpc3Qgb2Ygc3ViamVjdHMgcGVybWlzc2lvbnMgdG8gcmVhZCBhbmQgd3JpdGUgdGhpcyByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWRXcml0ZSguLi5zdWJqZWN0czogcmIuSVN1YmplY3RbXSk6IHJiLlJvbGVCaW5kaW5nIHtcbiAgICBjb25zdCBzdWJqZWN0c0FkZHJlc3MgPSBhZGRyZXNzKC4uLnN1YmplY3RzKTtcbiAgICBjb25zdCByb2xlID0gbmV3IHIuUm9sZSh0aGlzLmluc3RhbmNlLCBgUm9sZSR7c3ViamVjdHNBZGRyZXNzfWAsIHtcbiAgICAgIG1ldGFkYXRhOiB7IG5hbWVzcGFjZTogdGhpcy5pbnN0YW5jZS5tZXRhZGF0YS5uYW1lc3BhY2UgfSxcbiAgICB9KTtcbiAgICByb2xlLmFsbG93UmVhZFdyaXRlKHRoaXMuaW5zdGFuY2UpO1xuICAgIHJldHVybiByb2xlLmJpbmQoLi4uc3ViamVjdHMpO1xuICB9XG5cbn1cblxuLy8gbWVoLCBhdm9pZGluZyBlcnJvcnMgZHVlIHRvIGNpcmN1bGFyIGltcG9ydHMuLi5cbmltcG9ydCAqIGFzIHIgZnJvbSAnLi9yb2xlJztcbmltcG9ydCAqIGFzIHJiIGZyb20gJy4vcm9sZS1iaW5kaW5nJztcbmltcG9ydCB7IGFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcbiJdfQ==