@aws-cdk/aws-bedrock-agentcore-alpha 2.256.1-alpha.0 → 2.258.0-alpha.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 (122) hide show
  1. package/.jsii +2806 -2580
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +2135 -59
  4. package/lib/common/types.d.ts +2 -0
  5. package/lib/common/types.js +3 -1
  6. package/lib/evaluation/custom-evaluator.d.ts +1 -0
  7. package/lib/evaluation/custom-evaluator.js +37 -4
  8. package/lib/evaluation/data-source.d.ts +1 -0
  9. package/lib/evaluation/data-source.js +15 -2
  10. package/lib/evaluation/evaluator-base.d.ts +2 -0
  11. package/lib/evaluation/evaluator-base.js +65 -3
  12. package/lib/evaluation/evaluator-config.d.ts +4 -0
  13. package/lib/evaluation/evaluator-config.js +25 -3
  14. package/lib/evaluation/evaluator.d.ts +1 -0
  15. package/lib/evaluation/evaluator.js +14 -2
  16. package/lib/evaluation/online-evaluation-base.d.ts +2 -0
  17. package/lib/evaluation/online-evaluation-base.js +65 -3
  18. package/lib/evaluation/online-evaluation.d.ts +1 -0
  19. package/lib/evaluation/online-evaluation.js +37 -4
  20. package/lib/evaluation/perms.d.ts +5 -0
  21. package/lib/evaluation/perms.js +6 -1
  22. package/lib/evaluation/types.d.ts +15 -0
  23. package/lib/evaluation/types.js +75 -6
  24. package/lib/evaluation/validation-helpers.d.ts +22 -0
  25. package/lib/evaluation/validation-helpers.js +23 -1
  26. package/lib/gateway/gateway-base.d.ts +7 -0
  27. package/lib/gateway/gateway-base.js +178 -3
  28. package/lib/gateway/gateway.d.ts +9 -0
  29. package/lib/gateway/gateway.js +49 -6
  30. package/lib/gateway/inbound-auth/authorizer.d.ts +12 -0
  31. package/lib/gateway/inbound-auth/authorizer.js +31 -5
  32. package/lib/gateway/inbound-auth/custom-claim.d.ts +1 -0
  33. package/lib/gateway/inbound-auth/custom-claim.js +13 -2
  34. package/lib/gateway/interceptor.d.ts +5 -0
  35. package/lib/gateway/interceptor.js +7 -2
  36. package/lib/gateway/outbound-auth/api-key.d.ts +5 -0
  37. package/lib/gateway/outbound-auth/api-key.js +7 -2
  38. package/lib/gateway/outbound-auth/credential-provider.d.ts +5 -0
  39. package/lib/gateway/outbound-auth/credential-provider.js +17 -2
  40. package/lib/gateway/outbound-auth/iam-role.d.ts +1 -0
  41. package/lib/gateway/outbound-auth/iam-role.js +2 -1
  42. package/lib/gateway/outbound-auth/oauth.d.ts +2 -0
  43. package/lib/gateway/outbound-auth/oauth.js +2 -1
  44. package/lib/gateway/perms.d.ts +16 -0
  45. package/lib/gateway/perms.js +17 -1
  46. package/lib/gateway/protocol.d.ts +7 -0
  47. package/lib/gateway/protocol.js +10 -3
  48. package/lib/gateway/targets/schema/api-schema.d.ts +4 -0
  49. package/lib/gateway/targets/schema/api-schema.js +161 -6
  50. package/lib/gateway/targets/schema/base-schema.d.ts +1 -0
  51. package/lib/gateway/targets/schema/base-schema.js +2 -1
  52. package/lib/gateway/targets/schema/tool-schema.d.ts +12 -0
  53. package/lib/gateway/targets/schema/tool-schema.js +166 -6
  54. package/lib/gateway/targets/target-base.d.ts +5 -0
  55. package/lib/gateway/targets/target-base.js +76 -3
  56. package/lib/gateway/targets/target-configuration.d.ts +14 -0
  57. package/lib/gateway/targets/target-configuration.js +125 -9
  58. package/lib/gateway/targets/target.d.ts +8 -0
  59. package/lib/gateway/targets/target.js +37 -4
  60. package/lib/gateway/validation-helpers.d.ts +4 -0
  61. package/lib/gateway/validation-helpers.js +4 -1
  62. package/lib/identity/api-key-credential-provider.d.ts +4 -0
  63. package/lib/identity/api-key-credential-provider.js +36 -3
  64. package/lib/identity/grant-helpers.d.ts +7 -0
  65. package/lib/identity/grant-helpers.js +42 -2
  66. package/lib/identity/oauth2-credential-provider.d.ts +29 -0
  67. package/lib/identity/oauth2-credential-provider.js +37 -3
  68. package/lib/identity/perms.d.ts +5 -0
  69. package/lib/identity/perms.js +9 -4
  70. package/lib/identity/validation-helpers.d.ts +53 -0
  71. package/lib/identity/validation-helpers.js +54 -1
  72. package/lib/identity/workload-identity.d.ts +3 -0
  73. package/lib/identity/workload-identity.js +36 -3
  74. package/lib/memory/memory-strategy.d.ts +6 -0
  75. package/lib/memory/memory-strategy.js +47 -2
  76. package/lib/memory/memory.d.ts +4 -0
  77. package/lib/memory/memory.js +210 -5
  78. package/lib/memory/strategies/managed-strategy.d.ts +4 -0
  79. package/lib/memory/strategies/managed-strategy.js +22 -2
  80. package/lib/memory/strategies/self-managed-strategy.d.ts +4 -0
  81. package/lib/memory/strategies/self-managed-strategy.js +57 -4
  82. package/lib/memory/validation-helpers.d.ts +6 -0
  83. package/lib/memory/validation-helpers.js +7 -1
  84. package/lib/network/network-configuration.d.ts +5 -0
  85. package/lib/network/network-configuration.js +83 -6
  86. package/lib/policy/policy-base.js +36 -3
  87. package/lib/policy/policy-engine-base.js +36 -3
  88. package/lib/policy/policy-engine.js +37 -4
  89. package/lib/policy/policy-statement.js +5 -5
  90. package/lib/policy/policy-types.js +1 -1
  91. package/lib/policy/policy.js +36 -3
  92. package/lib/runtime/inbound-auth/custom-claim.d.ts +1 -0
  93. package/lib/runtime/inbound-auth/custom-claim.js +13 -2
  94. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.d.ts +1 -0
  95. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +40 -2
  96. package/lib/runtime/observability.d.ts +5 -0
  97. package/lib/runtime/observability.js +79 -5
  98. package/lib/runtime/perms.d.ts +12 -0
  99. package/lib/runtime/perms.js +13 -1
  100. package/lib/runtime/runtime-artifact.d.ts +3 -0
  101. package/lib/runtime/runtime-artifact.js +69 -5
  102. package/lib/runtime/runtime-base.d.ts +3 -0
  103. package/lib/runtime/runtime-base.js +200 -3
  104. package/lib/runtime/runtime-endpoint-base.d.ts +3 -0
  105. package/lib/runtime/runtime-endpoint-base.js +22 -2
  106. package/lib/runtime/runtime-endpoint.d.ts +1 -0
  107. package/lib/runtime/runtime-endpoint.js +36 -3
  108. package/lib/runtime/runtime.d.ts +2 -0
  109. package/lib/runtime/runtime.js +38 -5
  110. package/lib/runtime/types.d.ts +3 -0
  111. package/lib/runtime/types.js +2 -1
  112. package/lib/runtime/validation-helpers.d.ts +6 -0
  113. package/lib/runtime/validation-helpers.js +7 -1
  114. package/lib/tools/browser.d.ts +6 -0
  115. package/lib/tools/browser.js +205 -8
  116. package/lib/tools/code-interpreter.d.ts +4 -0
  117. package/lib/tools/code-interpreter.js +185 -7
  118. package/lib/tools/perms.d.ts +12 -0
  119. package/lib/tools/perms.js +13 -1
  120. package/lib/tools/validation-helpers.d.ts +6 -0
  121. package/lib/tools/validation-helpers.js +7 -1
  122. package/package.json +10 -10
@@ -12,6 +12,7 @@ import { CodeInterpreterNetworkConfiguration } from '../network/network-configur
12
12
  *****************************************************************************/
13
13
  /**
14
14
  * Interface for CodeInterpreterCustom resources
15
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
15
16
  */
16
17
  export interface ICodeInterpreterCustom extends IResource, iam.IGrantable, ec2.IConnectable, ICodeInterpreterCustomRef {
17
18
  /**
@@ -98,6 +99,7 @@ export interface ICodeInterpreterCustom extends IResource, iam.IGrantable, ec2.I
98
99
  /**
99
100
  * Abstract base class for a Code Interpreter.
100
101
  * Contains methods and attributes valid for Code Interpreters either created with CDK or imported.
102
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
101
103
  */
102
104
  export declare abstract class CodeInterpreterCustomBase extends Resource implements ICodeInterpreterCustom {
103
105
  abstract readonly codeInterpreterArn: string;
@@ -274,6 +276,7 @@ export declare abstract class CodeInterpreterCustomBase extends Resource impleme
274
276
  *****************************************************************************/
275
277
  /**
276
278
  * Properties for creating a CodeInterpreter resource
279
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
277
280
  */
278
281
  export interface CodeInterpreterCustomProps {
279
282
  /**
@@ -321,6 +324,7 @@ export interface CodeInterpreterCustomProps {
321
324
  *****************************************************************************/
322
325
  /**
323
326
  * Attributes for specifying an imported Code Interpreter Custom.
327
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
324
328
  */
325
329
  export interface CodeInterpreterCustomAttributes {
326
330
  /**
@@ -1,4 +1,20 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
2
18
  var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
19
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
20
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
@@ -33,20 +49,37 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
49
  }
34
50
  return useValue ? value : void 0;
35
51
  };
52
+ var __importStar = (this && this.__importStar) || (function () {
53
+ var ownKeys = function(o) {
54
+ ownKeys = Object.getOwnPropertyNames || function (o) {
55
+ var ar = [];
56
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
57
+ return ar;
58
+ };
59
+ return ownKeys(o);
60
+ };
61
+ return function (mod) {
62
+ if (mod && mod.__esModule) return mod;
63
+ var result = {};
64
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
65
+ __setModuleDefault(result, mod);
66
+ return result;
67
+ };
68
+ })();
36
69
  Object.defineProperty(exports, "__esModule", { value: true });
37
70
  exports.CodeInterpreterCustom = exports.CodeInterpreterCustomBase = void 0;
38
71
  const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
39
72
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
73
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
- const agent_core = require("aws-cdk-lib/aws-bedrockagentcore");
74
+ const agent_core = __importStar(require("aws-cdk-lib/aws-bedrockagentcore"));
42
75
  const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
43
- const ec2 = require("aws-cdk-lib/aws-ec2");
44
- const iam = require("aws-cdk-lib/aws-iam");
76
+ const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
77
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
45
78
  const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
46
79
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
47
80
  const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
48
81
  // Internal Libs
49
- const perms = require("./perms");
82
+ const perms = __importStar(require("./perms"));
50
83
  const validation_helpers_1 = require("./validation-helpers");
51
84
  const network_configuration_1 = require("../network/network-configuration");
52
85
  /******************************************************************************
@@ -78,13 +111,23 @@ const CODE_INTERPRETER_TAG_MAX_LENGTH = 256;
78
111
  /**
79
112
  * Abstract base class for a Code Interpreter.
80
113
  * Contains methods and attributes valid for Code Interpreters either created with CDK or imported.
114
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
81
115
  */
82
116
  class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
83
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.256.1-alpha.0" };
117
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.258.0-alpha.0" };
84
118
  /**
85
119
  * A reference to a CodeInterpreterCustom resource.
86
120
  */
87
121
  get codeInterpreterCustomRef() {
122
+ try {
123
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#codeInterpreterCustomRef", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
124
+ }
125
+ catch (error) {
126
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
127
+ Error.captureStackTrace(error, jsiiDeprecationWarnings.getPropertyDescriptor(this, "codeInterpreterCustomRef").get);
128
+ }
129
+ throw error;
130
+ }
88
131
  return {
89
132
  codeInterpreterId: this.codeInterpreterId,
90
133
  codeInterpreterArn: this.codeInterpreterArn,
@@ -95,6 +138,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
95
138
  * configured.
96
139
  */
97
140
  get connections() {
141
+ try {
142
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#connections", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
143
+ }
144
+ catch (error) {
145
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
146
+ Error.captureStackTrace(error, jsiiDeprecationWarnings.getPropertyDescriptor(this, "connections").get);
147
+ }
148
+ throw error;
149
+ }
98
150
  if (!this._connections) {
99
151
  throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `VpcNotConfigured`, 'Cannot manage network access without configuring a VPC', this);
100
152
  }
@@ -108,6 +160,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
108
160
  _connections;
109
161
  constructor(scope, id, props = {}) {
110
162
  super(scope, id, props);
163
+ try {
164
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
165
+ }
166
+ catch (error) {
167
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
168
+ Error.captureStackTrace(error, CodeInterpreterCustomBase);
169
+ }
170
+ throw error;
171
+ }
111
172
  }
112
173
  /**
113
174
  * Grants IAM actions to the IAM Principal
@@ -119,6 +180,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
119
180
  * @returns An IAM Grant object representing the granted permissions
120
181
  */
121
182
  grant(grantee, ...actions) {
183
+ try {
184
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#grant", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
185
+ }
186
+ catch (error) {
187
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
188
+ Error.captureStackTrace(error, this.grant);
189
+ }
190
+ throw error;
191
+ }
122
192
  return iam.Grant.addToPrincipal({
123
193
  grantee: grantee,
124
194
  resourceArns: [this.codeInterpreterCustomRef.codeInterpreterArn],
@@ -138,6 +208,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
138
208
  * @returns An IAM Grant object representing the granted permissions
139
209
  */
140
210
  grantRead(grantee) {
211
+ try {
212
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#grantRead", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
213
+ }
214
+ catch (error) {
215
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
216
+ Error.captureStackTrace(error, this.grantRead);
217
+ }
218
+ throw error;
219
+ }
141
220
  const resourceSpecificGrant = this.grant(grantee, ...perms.CODE_INTERPRETER_READ_PERMS);
142
221
  const allResourceGrant = iam.Grant.addToPrincipal({
143
222
  grantee: grantee,
@@ -159,6 +238,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
159
238
  * @returns An IAM Grant object representing the granted permissions
160
239
  */
161
240
  grantUse(grantee) {
241
+ try {
242
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#grantUse", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
243
+ }
244
+ catch (error) {
245
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
246
+ Error.captureStackTrace(error, this.grantUse);
247
+ }
248
+ throw error;
249
+ }
162
250
  return this.grant(grantee, ...perms.CODE_INTERPRETER_USE_PERMS);
163
251
  }
164
252
  /**
@@ -173,6 +261,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
173
261
  * - resourceArns: [this.codeInterpreterArn]
174
262
  */
175
263
  grantInvoke(grantee) {
264
+ try {
265
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#grantInvoke", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
266
+ }
267
+ catch (error) {
268
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
269
+ Error.captureStackTrace(error, this.grantInvoke);
270
+ }
271
+ throw error;
272
+ }
176
273
  return this.grant(grantee, ...perms.CODE_INTERPRETER_INVOKE_PERMS);
177
274
  }
178
275
  // ------------------------------------------------------
@@ -185,6 +282,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
185
282
  * You can customize this by using the `statistic` and `period` properties.
186
283
  */
187
284
  metric(metricName, dimensions, props) {
285
+ try {
286
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metric", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
287
+ }
288
+ catch (error) {
289
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
290
+ Error.captureStackTrace(error, this.metric);
291
+ }
292
+ throw error;
293
+ }
188
294
  const metricProps = {
189
295
  namespace: 'AWS/Bedrock-AgentCore',
190
296
  metricName,
@@ -204,6 +310,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
204
310
  * @returns A CloudWatch Metric configured for code interpreter api operations
205
311
  */
206
312
  metricForApiOperation(metricName, operation, props) {
313
+ try {
314
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
315
+ }
316
+ catch (error) {
317
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
318
+ Error.captureStackTrace(error, this.metricForApiOperation);
319
+ }
320
+ throw error;
321
+ }
207
322
  return this.metric(metricName, { Operation: operation }, props);
208
323
  }
209
324
  /**
@@ -216,6 +331,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
216
331
  * @returns A CloudWatch Metric configured for code interpreter latencies
217
332
  */
218
333
  metricLatencyForApiOperation(operation, props) {
334
+ try {
335
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricLatencyForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
336
+ }
337
+ catch (error) {
338
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
339
+ Error.captureStackTrace(error, this.metricLatencyForApiOperation);
340
+ }
341
+ throw error;
342
+ }
219
343
  return this.metricForApiOperation('Latency', operation, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
220
344
  }
221
345
  /**
@@ -228,6 +352,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
228
352
  * @returns A CloudWatch Metric configured for code interpreter invocations
229
353
  */
230
354
  metricInvocationsForApiOperation(operation, props) {
355
+ try {
356
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricInvocationsForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
357
+ }
358
+ catch (error) {
359
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
360
+ Error.captureStackTrace(error, this.metricInvocationsForApiOperation);
361
+ }
362
+ throw error;
363
+ }
231
364
  return this.metricForApiOperation('Invocations', operation, {
232
365
  statistic: aws_cloudwatch_1.Stats.SUM,
233
366
  ...props,
@@ -243,6 +376,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
243
376
  * @returns A CloudWatch Metric configured for code interpreter errors
244
377
  */
245
378
  metricErrorsForApiOperation(operation, props) {
379
+ try {
380
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricErrorsForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
381
+ }
382
+ catch (error) {
383
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
384
+ Error.captureStackTrace(error, this.metricErrorsForApiOperation);
385
+ }
386
+ throw error;
387
+ }
246
388
  return this.metricForApiOperation('Errors', operation, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
247
389
  }
248
390
  /**
@@ -255,6 +397,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
255
397
  * @returns A CloudWatch Metric configured for code interpreter throttles
256
398
  */
257
399
  metricThrottlesForApiOperation(operation, props) {
400
+ try {
401
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricThrottlesForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
402
+ }
403
+ catch (error) {
404
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
405
+ Error.captureStackTrace(error, this.metricThrottlesForApiOperation);
406
+ }
407
+ throw error;
408
+ }
258
409
  return this.metricForApiOperation('Throttles', operation, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
259
410
  }
260
411
  /**
@@ -267,6 +418,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
267
418
  * @returns A CloudWatch Metric configured for code interpreter system errors
268
419
  */
269
420
  metricSystemErrorsForApiOperation(operation, props) {
421
+ try {
422
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricSystemErrorsForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
423
+ }
424
+ catch (error) {
425
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
426
+ Error.captureStackTrace(error, this.metricSystemErrorsForApiOperation);
427
+ }
428
+ throw error;
429
+ }
270
430
  return this.metricForApiOperation('SystemErrors', operation, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
271
431
  }
272
432
  /**
@@ -279,6 +439,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
279
439
  * @returns A CloudWatch Metric configured for code interpreter user errors
280
440
  */
281
441
  metricUserErrorsForApiOperation(operation, props) {
442
+ try {
443
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricUserErrorsForApiOperation", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
444
+ }
445
+ catch (error) {
446
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
447
+ Error.captureStackTrace(error, this.metricUserErrorsForApiOperation);
448
+ }
449
+ throw error;
450
+ }
282
451
  return this.metricForApiOperation('UserErrors', operation, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
283
452
  }
284
453
  /**
@@ -291,6 +460,15 @@ class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
291
460
  * @returns A CloudWatch Metric configured for code interpreter session duration
292
461
  */
293
462
  metricSessionDuration(props) {
463
+ try {
464
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase#metricSessionDuration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
465
+ }
466
+ catch (error) {
467
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
468
+ Error.captureStackTrace(error, this.metricSessionDuration);
469
+ }
470
+ throw error;
471
+ }
294
472
  return this.metric('Duration', { Operation: 'CodeInterpreterSession' }, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
295
473
  }
296
474
  /**
@@ -332,7 +510,7 @@ let CodeInterpreterCustom = (() => {
332
510
  CodeInterpreterCustom = _classThis = _classDescriptor.value;
333
511
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
334
512
  }
335
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.256.1-alpha.0" };
513
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.258.0-alpha.0" };
336
514
  /** Uniquely identifies this class. */
337
515
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.CodeInterpreterCustom';
338
516
  /**
@@ -577,4 +755,4 @@ let CodeInterpreterCustom = (() => {
577
755
  return CodeInterpreterCustom = _classThis;
578
756
  })();
579
757
  exports.CodeInterpreterCustom = CodeInterpreterCustom;
580
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1pbnRlcnByZXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvZGUtaW50ZXJwcmV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsNkNBT3FCO0FBQ3JCLCtEQUErRDtBQU8vRCwrREFHb0M7QUFDcEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyw0RUFBNEQ7QUFDNUQsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSxnQkFBZ0I7QUFDaEIsaUNBQWlDO0FBQ2pDLDZEQUF1RztBQUN2Ryw0RUFBdUY7QUFFdkY7OytFQUUrRTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztBQUUzQzs7O0dBR0c7QUFDSCxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDSCxNQUFNLCtCQUErQixHQUFHLENBQUMsQ0FBQztBQUUxQzs7O0dBR0c7QUFDSCxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQztBQTRHNUM7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQix5QkFBMEIsU0FBUSxzQkFBUTs7SUFZOUQ7O09BRUc7SUFDSCxJQUFXLHdCQUF3QjtRQUNqQyxPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzVDLENBQUM7S0FDSDtJQUVEOzs7T0FHRztJQUNILElBQVcsV0FBVztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSw2QkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSxrQkFBa0IsRUFBRSx3REFBd0QsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzFCO0lBQ0Q7Ozs7T0FJRztJQUNP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R0FBRyxJQUFBLHlDQUFvQixFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFFdEUscUJBQXFCO2dCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSw4Q0FBeUIsRUFBQztvQkFDdkMsS0FBSyxFQUFFLEtBQUs7b0JBQ1osU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLFNBQVMsRUFBRSwrQkFBK0I7b0JBQzFDLFNBQVMsRUFBRSwrQkFBK0I7aUJBQzNDLENBQUMsQ0FBQyxDQUFDO2dCQUVKLHVEQUF1RDtnQkFDdkQsTUFBTSxpQkFBaUIsR0FBRywwQkFBMEIsQ0FBQztnQkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEseUNBQW9CLEVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGOzs7O1dBSUc7UUFDSywwQkFBMEI7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQzdDLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQzthQUN2RSxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQztTQUNiOztZQXJQVSx1REFBcUI7Ozs7O0FBQXJCLHNEQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSVJlc291cmNlLFxuICBSZXNvdXJjZVByb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBBcm4sXG4gIEFybkZvcm1hdCxcbiAgTGF6eSxcbiAgTmFtZXMsXG4gIFJlc291cmNlLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFnZW50X2NvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHR5cGUgeyBJQ29kZUludGVycHJldGVyQ3VzdG9tUmVmLCBDb2RlSW50ZXJwcmV0ZXJDdXN0b21SZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIERpbWVuc2lvbnNNYXAsXG4gIE1ldHJpY09wdGlvbnMsXG4gIE1ldHJpY1Byb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge1xuICBNZXRyaWMsXG4gIFN0YXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG4vLyBJbnRlcm5hbCBMaWJzXG5pbXBvcnQgKiBhcyBwZXJtcyBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcbmltcG9ydCB7IENvZGVJbnRlcnByZXRlck5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBjb2RlIGludGVycHJldGVyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBDT0RFX0lOVEVSUFJFVEVSX05BTUVfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGNvZGUgaW50ZXJwcmV0ZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IENPREVfSU5URVJQUkVURVJfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGNvZGUgaW50ZXJwcmV0ZXIgdGFnXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGNvZGUgaW50ZXJwcmV0ZXIgdGFnXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIENvZGVJbnRlcnByZXRlckN1c3RvbSByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29kZUludGVycHJldGVyQ3VzdG9tIGV4dGVuZHMgSVJlc291cmNlLCBpYW0uSUdyYW50YWJsZSwgZWMyLklDb25uZWN0YWJsZSwgSUNvZGVJbnRlcnByZXRlckN1c3RvbVJlZiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb2RlIGludGVycHJldGVyIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVJbnRlcnByZXRlckFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUludGVycHJldGVySWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgY29kZSBpbnRlcnByZXRlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBjb2RlIGludGVycHJldGVyIHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGNvZGUgaW50ZXJwcmV0ZXIgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIFByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgYEdldGAgYW5kIGBMaXN0YCBhY3Rpb25zIG9uIHRoZSBDb2RlIEludGVycHJldGVyXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBgSW52b2tlYCwgYFN0YXJ0YCwgYW5kIGBTdG9wYCBhY3Rpb25zIG9uIHRoZSBDb2RlIEludGVycHJldGVyXG4gICAqL1xuICBncmFudFVzZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zTWFwLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIHJlbGF0ZWQgdG8gdGhlIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgY29kZSBpbnRlcnByZXRlci5cbiAgICovXG4gIG1ldHJpY0ZvckFwaU9wZXJhdGlvbihtZXRyaWNOYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGxhdGVuY3kgb2YgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqL1xuICBtZXRyaWNMYXRlbmN5Rm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgQVBJIHJlcXVlc3RzIG1hZGUgZm9yIGEgc3BlY2lmaWMgY29kZSBpbnRlcnByZXRlciBvcGVyYXRpb24uXG4gICAqL1xuICBtZXRyaWNJbnZvY2F0aW9uc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVycm9ycyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqL1xuICBtZXRyaWNFcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0aHJvdHRsZWQgcmVxdWVzdHMgZm9yIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgbWV0cmljVGhyb3R0bGVzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc3lzdGVtIGVycm9ycyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqL1xuICBtZXRyaWNTeXN0ZW1FcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB1c2VyIGVycm9ycyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqL1xuICBtZXRyaWNVc2VyRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBtZWFzdXJpbmcgdGhlIGR1cmF0aW9uIG9mIGNvZGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbnMuXG4gICAqL1xuICBtZXRyaWNTZXNzaW9uRHVyYXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RSQUNUIEJBU0UgQ0xBU1NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYSBDb2RlIEludGVycHJldGVyLlxuICogQ29udGFpbnMgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyB2YWxpZCBmb3IgQ29kZSBJbnRlcnByZXRlcnMgZWl0aGVyIGNyZWF0ZWQgd2l0aCBDREsgb3IgaW1wb3J0ZWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb2RlSW50ZXJwcmV0ZXJDdXN0b21CYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29kZUludGVycHJldGVyQ3VzdG9tIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNvZGVJbnRlcnByZXRlckFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY29kZUludGVycHJldGVySWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBleGVjdXRpb25Sb2xlOiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byBhIENvZGVJbnRlcnByZXRlckN1c3RvbSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29kZUludGVycHJldGVyQ3VzdG9tUmVmKCk6IENvZGVJbnRlcnByZXRlckN1c3RvbVJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVJbnRlcnByZXRlcklkOiB0aGlzLmNvZGVJbnRlcnByZXRlcklkLFxuICAgICAgY29kZUludGVycHJldGVyQXJuOiB0aGlzLmNvZGVJbnRlcnByZXRlckFybixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFjY2Vzc29yIGZvciB0aGUgQ29ubmVjdGlvbnMgb2JqZWN0IHRoYXQgd2lsbCBmYWlsIGlmIHRoaXMgQnJvd3NlciBkb2VzIG5vdCBoYXZlIGEgVlBDXG4gICAqIGNvbmZpZ3VyZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25zKCk6IGVjMi5Db25uZWN0aW9ucyB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgVnBjTm90Q29uZmlndXJlZGAsICdDYW5ub3QgbWFuYWdlIG5ldHdvcmsgYWNjZXNzIHdpdGhvdXQgY29uZmlndXJpbmcgYSBWUEMnLCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYWN0dWFsIENvbm5lY3Rpb25zIG9iamVjdCBmb3IgdGhpcyBCcm93c2VyLiBUaGlzIG1heSBiZSB1bnNldCBpbiB0aGUgZXZlbnQgdGhhdCBhIFZQQyBoYXMgbm90XG4gICAqIGJlZW4gY29uZmlndXJlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Nvbm5lY3Rpb25zOiBlYzIuQ29ubmVjdGlvbnMgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlc291cmNlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIFByaW5jaXBhbFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyAtIFRoZSBhY3Rpb25zIHRvIGdyYW50XG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmNvZGVJbnRlcnByZXRlckN1c3RvbVJlZi5jb2RlSW50ZXJwcmV0ZXJBcm5dLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIG9uIHRoaXMgY29kZSBpbnRlcnByZXRlciB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBUaGlzIGluY2x1ZGVzIGJvdGggcmVhZCBwZXJtaXNzaW9ucyBvbiB0aGUgc3BlY2lmaWMgY29kZSBpbnRlcnByZXRlciBhbmQgbGlzdCBwZXJtaXNzaW9ucyBvbiBhbGwgY29kZSBpbnRlcnByZXRlcnMuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpHZXRDb2RlSW50ZXJwcmV0ZXInLCAnYmVkcm9jay1hZ2VudGNvcmU6R2V0Q29kZUludGVycHJldGVyU2Vzc2lvbiddIG9uIHRoaXMuY29kZUludGVycHJldGVyQXJuXG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpMaXN0Q29kZUludGVycHJldGVycycsICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0Q29kZUludGVycHJldGVyU2Vzc2lvbnMnXSBvbiBhbGwgcmVzb3VyY2VzICgqKVxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmVzb3VyY2VTcGVjaWZpY0dyYW50ID0gdGhpcy5ncmFudChcbiAgICAgIGdyYW50ZWUsXG4gICAgICAuLi5wZXJtcy5DT0RFX0lOVEVSUFJFVEVSX1JFQURfUEVSTVMsXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbFJlc291cmNlR3JhbnQgPSBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogWycqJ10sXG4gICAgICBhY3Rpb25zOiBwZXJtcy5DT0RFX0lOVEVSUFJFVEVSX0xJU1RfUEVSTVMsXG4gICAgfSk7XG4gICAgLy8gUmV0dXJuIGNvbWJpbmVkIGdyYW50XG4gICAgcmV0dXJuIHJlc291cmNlU3BlY2lmaWNHcmFudC5jb21iaW5lKGFsbFJlc291cmNlR3JhbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGludm9rZSBwZXJtaXNzaW9ucyBvbiB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIgdG8gYW4gSUFNIHByaW5jaXBhbC5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgaW52b2tlIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6U3RhcnRDb2RlSW50ZXJwcmV0ZXJTZXNzaW9uJywgJ2JlZHJvY2stYWdlbnRjb3JlOkludm9rZUNvZGVJbnRlcnByZXRlcicsICdiZWRyb2NrLWFnZW50Y29yZTpTdG9wQ29kZUludGVycHJldGVyU2Vzc2lvbiddXG4gICAqIC0gcmVzb3VyY2VBcm5zOiBbdGhpcy5jb2RlSW50ZXJwcmV0ZXJBcm5dXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRVc2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIC4uLnBlcm1zLkNPREVfSU5URVJQUkVURVJfVVNFX1BFUk1TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgaW52b2tlIHBlcm1pc3Npb25zIG9uIHRoaXMgY29kZSBpbnRlcnByZXRlciB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBpbnZva2UgcGVybWlzc2lvbnMgdG9cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpJbnZva2VDb2RlSW50ZXJwcmV0ZXInXVxuICAgKiAtIHJlc291cmNlQXJuczogW3RoaXMuY29kZUludGVycHJldGVyQXJuXVxuICAgKi9cbiAgcHVibGljIGdyYW50SW52b2tlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAuLi5wZXJtcy5DT0RFX0lOVEVSUFJFVEVSX0lOVk9LRV9QRVJNUyk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWV0cmljc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtZXRyaWMgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGEgc3VtIG92ZXIgYSBwZXJpb2Qgb2YgNSBtaW51dGVzLlxuICAgKiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJ5IHVzaW5nIHRoZSBgc3RhdGlzdGljYCBhbmQgYHBlcmlvZGAgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zTWFwLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIGNvbnN0IG1ldHJpY1Byb3BzOiBNZXRyaWNQcm9wcyA9IHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZScsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDogeyAuLi5kaW1lbnNpb25zLCBSZXNvdXJjZTogdGhpcy5jb2RlSW50ZXJwcmV0ZXJDdXN0b21SZWYuY29kZUludGVycHJldGVyQXJuIH0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyZU1ldHJpYyhtZXRyaWNQcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBjb2RlIGludGVycHJldGVyIGFwaSBvcGVyYXRpb25zLi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogbWV0cmljTmFtZVxuICAgKiAtIGRpbWVuc2lvbnNNYXA6IHsgQ29kZUludGVycHJldGVySWQ6IHRoaXMuY29kZUludGVycHJldGVySWQgfVxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGNvZGUgaW50ZXJwcmV0ZXIgYXBpIG9wZXJhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGb3JBcGlPcGVyYXRpb24oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHByb3BzPzogTWV0cmljT3B0aW9ucyxcbiAgKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMobWV0cmljTmFtZSwgeyBPcGVyYXRpb246IG9wZXJhdGlvbiB9LCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBjb2RlIGludGVycHJldGVyIGxhdGVuY2llcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogTGF0ZW5jeVxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGNvZGUgaW50ZXJwcmV0ZXIgbGF0ZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTGF0ZW5jeUZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0xhdGVuY3knLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGNvZGUgaW50ZXJwcmV0ZXIgaW52b2NhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IEludm9jYXRpb25zXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciBpbnZvY2F0aW9uc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignSW52b2NhdGlvbnMnLCBvcGVyYXRpb24sIHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBjb2RlIGludGVycHJldGVyIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogRXJyb3JzXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciBlcnJvcnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNFcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdFcnJvcnMnLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgY29kZSBpbnRlcnByZXRlciB0aHJvdHRsZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IFRocm90dGxlc1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGNvZGUgaW50ZXJwcmV0ZXIgdGhyb3R0bGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVGhyb3R0bGVzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignVGhyb3R0bGVzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGNvZGUgaW50ZXJwcmV0ZXIgc3lzdGVtIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogU3lzdGVtRXJyb3JzXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciBzeXN0ZW0gZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljU3lzdGVtRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignU3lzdGVtRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGNvZGUgaW50ZXJwcmV0ZXIgdXNlciBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IFVzZXJFcnJvcnNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBjb2RlIGludGVycHJldGVyIHVzZXIgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVXNlckVycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ1VzZXJFcnJvcnMnLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgY29kZSBpbnRlcnByZXRlciBzZXNzaW9uIGR1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBEdXJhdGlvblxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGNvZGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbiBkdXJhdGlvblxuICAgKi9cbiAgcHVibGljIG1ldHJpY1Nlc3Npb25EdXJhdGlvbihwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnRHVyYXRpb24nLCB7IE9wZXJhdGlvbjogJ0NvZGVJbnRlcnByZXRlclNlc3Npb24nIH0sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGEgbWV0cmljLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBjb2RlIGludGVycHJldGVyIGFwaSBvcGVyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZU1ldHJpYyhwcm9wczogTWV0cmljUHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZ2lvbjogcHJvcHM/LnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHByb3BzPy5hY2NvdW50ID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFBST1BTIEZPUiBORVcgQ09OU1RSVUNUXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29kZUludGVycHJldGVyIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyQ3VzdG9tUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSlcbiAgICogVGhlIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgdXAgdG8gNDggY2hhcmFjdGVycyBsb25nXG4gICAqIFBhdHRlcm46IFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9XG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUludGVycHJldGVyQ3VzdG9tTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpLCAtIChoeXBoZW4pIGFuZCBzcGFjZXNcbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBoYXZlIHVwIHRvIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogQHJlcXVpcmVkIC0gTm9cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQHJlcXVpcmVkIC0gTm9cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgY29kZSBpbnRlcnByZXRlclxuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKiBAZGVmYXVsdCAtIFBVQkxJQyBuZXR3b3JrIG1vZGVcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtDb25maWd1cmF0aW9uPzogQ29kZUludGVycHJldGVyTmV0d29ya0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgKG9wdGlvbmFsKVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBDb2RlIEludGVycHJldGVyIHJlc291cmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9IC0gbm8gdGFnc1xuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgIEFUVFJTIEZPUiBJTVBPUlRFRCBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQXR0cmlidXRlcyBmb3Igc3BlY2lmeWluZyBhbiBpbXBvcnRlZCBDb2RlIEludGVycHJldGVyIEN1c3RvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXJDdXN0b21BdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGFnZW50LlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIGFzc29jaWF0ZWQgdG8gdGhlIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBjb2RlIGludGVycHJldGVyIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIGxhc3QgdXBkYXRlZCB0aW1lc3RhbXAgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBjb2RlIGludGVycHJldGVyLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBzdGF0dXMgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjcmVhdGVkIHRpbWVzdGFtcCBvZiB0aGUgY29kZSBpbnRlcnByZXRlci5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gY3JlYXRlZCB0aW1lc3RhbXAgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzZWN1cml0eSBncm91cHMgZm9yIHRoaXMgY29kZSBpbnRlcnByZXRlciwgaWYgaW4gYSBWUEMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnkgZGVmYXVsdCwgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgaXMgbm90IGluIGEgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEN1c3RvbSBjb2RlIGludGVycHJldGVyIHJlc291cmNlIGZvciBBV1MgQmVkcm9jayBBZ2VudCBDb3JlLlxuICogUHJvdmlkZXMgYSBzYW5kYm94ZWQgZW52aXJvbm1lbnQgZm9yIGNvZGUgZXhlY3V0aW9uIHdpdGggY29uZmlndXJhYmxlIG5ldHdvcmsgYWNjZXNzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9jb2RlLWludGVycHJldGVyLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkNvZGVJbnRlcnByZXRlckN1c3RvbVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgQ29kZUludGVycHJldGVyQ3VzdG9tIGV4dGVuZHMgQ29kZUludGVycHJldGVyQ3VzdG9tQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkNvZGVJbnRlcnByZXRlckN1c3RvbSc7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBNZXRob2QgZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBCZWRyb2NrIEFnZW50Q29yZSBDb2RlIEludGVycHJldGVyIEN1c3RvbS5cbiAgICovXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIENvZGUgSW50ZXJwcmV0ZXIgQ3VzdG9tIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvZGUgaW50ZXJwcmV0ZXIncyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgLSBBdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBjb2RlIGludGVycHJldGVyIGN1c3RvbVxuICAgKiBAcmV0dXJucyBBbiBJQ29kZUludGVycHJldGVyQ3VzdG9tIHJlZmVyZW5jZSB0byB0aGUgZXhpc3RpbmcgY29kZSBpbnRlcnByZXRlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29kZUludGVycHJldGVyQ3VzdG9tQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQ29kZUludGVycHJldGVyQ3VzdG9tQXR0cmlidXRlcyk6IElDb2RlSW50ZXJwcmV0ZXJDdXN0b20ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENvZGVJbnRlcnByZXRlckN1c3RvbUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvZGVJbnRlcnByZXRlckFybiA9IGF0dHJzLmNvZGVJbnRlcnByZXRlckFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJJZCA9IEFybi5zcGxpdChhdHRycy5jb2RlSW50ZXJwcmV0ZXJBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWUhO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGUgPSBpYW0uUm9sZS5mcm9tUm9sZUFybihzY29wZSwgYCR7aWR9Um9sZWAsIGF0dHJzLnJvbGVBcm4pO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQgPSBhdHRycy5sYXN0VXBkYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IGF0dHJzLnN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuXG4gICAgICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGUgfHwgbmV3IGlhbS5Vbmtub3duUHJpbmNpcGFsKHsgcmVzb3VyY2U6IHRoaXMgfSk7XG4gICAgICAgIGlmIChhdHRycy5zZWN1cml0eUdyb3Vwcykge1xuICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwczogYXR0cnMuc2VjdXJpdHlHcm91cHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gbmV3IENvZGUgSW50ZXJwcmV0ZXIgQ3VzdG9tXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQXR0cmlidXRlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgcmVzb3VyY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvZGVJbnRlcnByZXRlckFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbjogQ29kZUludGVycHJldGVyTmV0d29ya0NvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY3JlYXRlZCB0aW1lc3RhbXAgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHVwZGF0ZWQgdGltZXN0YW1wIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZhaWx1cmUgcmVhc29uIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlUmVhc29uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBjb2RlIGludGVycHJldGVyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZTogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcbiAgLyoqXG4gICAqIFRhZ3MgYXBwbGllZCB0byB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIgcmVzb3VyY2VcbiAgICogQSBtYXAgb2Yga2V5LXZhbHVlIHBhaXJzIGZvciByZXNvdXJjZSB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFncyBhcHBsaWVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEludGVybmFsIE9ubHlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgX19yZXNvdXJjZTogYWdlbnRfY29yZS5DZm5Db2RlSW50ZXJwcmV0ZXJDdXN0b207XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZGVJbnRlcnByZXRlckN1c3RvbVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC8vIE1heGltdW0gbmFtZSBsZW5ndGggb2YgNDggY2hhcmFjdGVycyBpcyBjaG9zZW4gZXZlbiB3aGVuIG5vIG1heCBuYW1lIG1lbnRpb25lZCBpbiBkb2N1bWVudGF0aW9uIGJlbG93LFxuICAgICAgLy8gZHVlIHRvIGZhaWx1cmUgaW4gQ0YgZGVwbG95bWVudCB3aGVuIG1vcmUgdGhhbiA0OCBjaGFyYWN0ZXJzIHVzZWRcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1jb2RlaW50ZXJwcmV0ZXJjdXN0b20uaHRtbCNjZm4tYmVkcm9ja2FnZW50Y29yZS1jb2RlaW50ZXJwcmV0ZXJjdXN0b20tbmFtZVxuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5jb2RlSW50ZXJwcmV0ZXJDdXN0b21OYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDQ4IH0pLFxuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNldCBwcm9wZXJ0aWVzIGFuZCBkZWZhdWx0c1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHRoaXMubmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uID0gcHJvcHMubmV0d29ya0NvbmZpZ3VyYXRpb24gPz8gQ29kZUludGVycHJldGVyTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKCk7XG4gICAgdGhpcy5leGVjdXRpb25Sb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZSA/PyB0aGlzLl9jcmVhdGVDb2RlSW50ZXJwcmV0ZXJSb2xlKCk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcbiAgICB0aGlzLnRhZ3MgPSBwcm9wcy50YWdzO1xuXG4gICAgLy8gVmFsaWRhdGUgY29kZSBpbnRlcnByZXRlciBuYW1lXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVDb2RlSW50ZXJwcmV0ZXJOYW1lLCB0aGlzLm5hbWUpO1xuXG4gICAgLy8gVmFsaWRhdGUgY29kZSBpbnRlcnByZXRlciB0YWdzXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVDb2RlSW50ZXJwcmV0ZXJUYWdzLCB0aGlzLnRhZ3MpO1xuXG4gICAgLy8gTmV0d29yayBjb25maWd1cmF0aW9uIGFuZCB2YWxpZGF0aW9uIGlzIGRvbmUgaW4gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjbGFzc1xuICAgIC8vIFNvIHdlIGRvbid0IG5lZWQgdG8gdmFsaWRhdGUgaXQgaGVyZVxuXG4gICAgLy8gU2V0IGNvbm5lY3Rpb25zIC0gY3JlYXRlIGEgc2hhcmVkIGNvbm5lY3Rpb25zIG9iamVjdFxuICAgIGlmICh0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zKSB7XG4gICAgICAvLyBVc2UgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbidzIGNvbm5lY3Rpb25zIGFzIHRoZSBzaGFyZWQgb2JqZWN0XG4gICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQ0ZOIFByb3BzIC0gV2l0aCBMYXp5IHN1cHBvcnRcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBjZm5Qcm9wczogYWdlbnRfY29yZS5DZm5Db2RlSW50ZXJwcmV0ZXJDdXN0b21Qcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5fcmVuZGVyKHRoaXMuX2Nvbm5lY3Rpb25zKSB9KSxcbiAgICAgIGV4ZWN1dGlvblJvbGVBcm46IHRoaXMuZXhlY3V0aW9uUm9sZT8ucm9sZUFybixcbiAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICB9O1xuXG4gICAgLy8gTDEgaW5zdGFudGlhdGlvblxuICAgIHRoaXMuX19yZXNvdXJjZSA9IG5ldyBhZ2VudF9jb3JlLkNmbkNvZGVJbnRlcnByZXRlckN1c3RvbSh0aGlzLCAnUmVzb3VyY2UnLCBjZm5Qcm9wcyk7XG5cbiAgICAvLyBHZXQgYXR0cmlidXRlcyBkaXJlY3RseSBmcm9tIHRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZVxuICAgIHRoaXMuY29kZUludGVycHJldGVySWQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNvZGVJbnRlcnByZXRlcklkO1xuICAgIHRoaXMuY29kZUludGVycHJldGVyQXJuID0gdGhpcy5fX3Jlc291cmNlLmF0dHJDb2RlSW50ZXJwcmV0ZXJBcm47XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLl9fcmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMubGFzdFVwZGF0ZWRBdCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyTGFzdFVwZGF0ZWRBdDtcbiAgICB0aGlzLmZhaWx1cmVSZWFzb24gPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckZhaWx1cmVSZWFzb247XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVmFsaWRhdG9yc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgY29kZSBpbnRlcnByZXRlciBuYW1lIGZvcm1hdFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgY29kZSBpbnRlcnByZXRlciBuYW1lIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVDb2RlSW50ZXJwcmV0ZXJOYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ0NvZGUgaW50ZXJwcmV0ZXIgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IENPREVfSU5URVJQUkVURVJfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBDT0RFX0lOVEVSUFJFVEVSX05BTUVfTUFYX0xFTkdUSCxcbiAgICB9KSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnQ29kZSBpbnRlcnByZXRlciBuYW1lJywgdmFsaWROYW1lUGF0dGVybikpO1xuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb2RlIGludGVycHJldGVyIHRhZ3MgZm9ybWF0XG4gICAqIEBwYXJhbSB0YWdzIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlQ29kZUludGVycHJldGVyVGFncyA9ICh0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghdGFncykge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gVGFncyBhcmUgb3B0aW9uYWxcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRhZyBrZXkgYW5kIHZhbHVlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6ICdUYWcga2V5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBDT0RFX0lOVEVSUFJFVEVSX1RBR19NSU5fTEVOR1RILFxuICAgICAgICBtYXhMZW5ndGg6IENPREVfSU5URVJQUkVURVJfVEFHX01BWF9MRU5HVEgsXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVybjogXlthLXpBLVowLTlcXHMuXzovPStALV0qJFxuICAgICAgY29uc3QgdmFsaWRLZXlQYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvO1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4oa2V5LCAnVGFnIGtleScsIHZhbGlkS2V5UGF0dGVybikpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWVcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGZpZWxkTmFtZTogJ1RhZyB2YWx1ZScsXG4gICAgICAgIG1pbkxlbmd0aDogQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUlOX0xFTkdUSCxcbiAgICAgICAgbWF4TGVuZ3RoOiBDT0RFX0lOVEVSUFJFVEVSX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWUgcGF0dGVybjogXlthLXpBLVowLTlcXHMuXzovPStALV0qJFxuICAgICAgY29uc3QgdmFsaWRWYWx1ZVBhdHRlcm4gPSAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC87XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybih2YWx1ZSwgJ1RhZyB2YWx1ZScsIHZhbGlkVmFsdWVQYXR0ZXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBleGVjdXRpb24gcm9sZSBuZWVkZWQgZm9yIHRoZSBjb2RlIGludGVycHJldGVyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcm9sZVxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUNvZGVJbnRlcnByZXRlclJvbGUoKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxufVxuIl19
758
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1pbnRlcnByZXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvZGUtaW50ZXJwcmV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsNkNBT3FCO0FBQ3JCLDZFQUErRDtBQU8vRCwrREFHb0M7QUFDcEMseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyw0RUFBNEQ7QUFDNUQsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSxnQkFBZ0I7QUFDaEIsK0NBQWlDO0FBQ2pDLDZEQUF1RztBQUN2Ryw0RUFBdUY7QUFFdkY7OytFQUUrRTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztBQUUzQzs7O0dBR0c7QUFDSCxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDSCxNQUFNLCtCQUErQixHQUFHLENBQUMsQ0FBQztBQUUxQzs7O0dBR0c7QUFDSCxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQztBQTZHNUM7OytFQUUrRTtBQUMvRTs7OztHQUlHO0FBQ0gsTUFBc0IseUJBQTBCLFNBQVEsc0JBQVE7O0lBWTlEOztPQUVHO0lBQ0gsSUFBVyx3QkFBd0I7Ozs7Ozs7Ozs7UUFDakMsT0FBTztZQUNMLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM1QyxDQUFDO0tBQ0g7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFdBQVc7Ozs7Ozs7Ozs7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksNkJBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsd0RBQXdELEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkgsQ0FBQztR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LFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBBcm4sXG4gIEFybkZvcm1hdCxcbiAgTGF6eSxcbiAgTmFtZXMsXG4gIFJlc291cmNlLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFnZW50X2NvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHR5cGUgeyBJQ29kZUludGVycHJldGVyQ3VzdG9tUmVmLCBDb2RlSW50ZXJwcmV0ZXJDdXN0b21SZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIERpbWVuc2lvbnNNYXAsXG4gIE1ldHJpY09wdGlvbnMsXG4gIE1ldHJpY1Byb3BzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge1xuICBNZXRyaWMsXG4gIFN0YXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG4vLyBJbnRlcm5hbCBMaWJzXG5pbXBvcnQgKiBhcyBwZXJtcyBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcbmltcG9ydCB7IENvZGVJbnRlcnByZXRlck5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBjb2RlIGludGVycHJldGVyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBDT0RFX0lOVEVSUFJFVEVSX05BTUVfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGNvZGUgaW50ZXJwcmV0ZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IENPREVfSU5URVJQUkVURVJfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGNvZGUgaW50ZXJwcmV0ZXIgdGFnXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGNvZGUgaW50ZXJwcmV0ZXIgdGFnXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIENvZGVJbnRlcnByZXRlckN1c3RvbSByZXNvdXJjZXNcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvZGVJbnRlcnByZXRlckN1c3RvbSBleHRlbmRzIElSZXNvdXJjZSwgaWFtLklHcmFudGFibGUsIGVjMi5JQ29ubmVjdGFibGUsIElDb2RlSW50ZXJwcmV0ZXJDdXN0b21SZWYge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29kZSBpbnRlcnByZXRlciByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVJbnRlcnByZXRlcklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgY29kZSBpbnRlcnByZXRlciB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBjb2RlIGludGVycHJldGVyIHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBjb2RlIGludGVycHJldGVyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlOiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqICBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIGBHZXRgIGFuZCBgTGlzdGAgYWN0aW9ucyBvbiB0aGUgQ29kZSBJbnRlcnByZXRlclxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgYEludm9rZWAsIGBTdGFydGAsIGFuZCBgU3RvcGAgYWN0aW9ucyBvbiB0aGUgQ29kZSBJbnRlcnByZXRlclxuICAgKi9cbiAgZ3JhbnRVc2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1ldHJpY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgZGltZW5zaW9uczogRGltZW5zaW9uc01hcCwgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyByZWxhdGVkIHRvIHRoZSBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqL1xuICBtZXRyaWNGb3JBcGlPcGVyYXRpb24obWV0cmljTmFtZTogc3RyaW5nLCBvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgbWVhc3VyaW5nIHRoZSBsYXRlbmN5IG9mIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgbWV0cmljTGF0ZW5jeUZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIEFQSSByZXF1ZXN0cyBtYWRlIGZvciBhIHNwZWNpZmljIGNvZGUgaW50ZXJwcmV0ZXIgb3BlcmF0aW9uLlxuICAgKi9cbiAgbWV0cmljSW52b2NhdGlvbnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlcnJvcnMgZm9yIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdGhyb3R0bGVkIHJlcXVlc3RzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgY29kZSBpbnRlcnByZXRlci5cbiAgICovXG4gIG1ldHJpY1Rocm90dGxlc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHN5c3RlbSBlcnJvcnMgZm9yIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgbWV0cmljU3lzdGVtRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdXNlciBlcnJvcnMgZm9yIGEgc3BlY2lmaWMgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgbWV0cmljVXNlckVycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgbWVhc3VyaW5nIHRoZSBkdXJhdGlvbiBvZiBjb2RlIGludGVycHJldGVyIHNlc3Npb25zLlxuICAgKi9cbiAgbWV0cmljU2Vzc2lvbkR1cmF0aW9uKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBCQVNFIENMQVNTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgQ29kZSBJbnRlcnByZXRlci5cbiAqIENvbnRhaW5zIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgdmFsaWQgZm9yIENvZGUgSW50ZXJwcmV0ZXJzIGVpdGhlciBjcmVhdGVkIHdpdGggQ0RLIG9yIGltcG9ydGVkLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvZGVJbnRlcnByZXRlckN1c3RvbUJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElDb2RlSW50ZXJwcmV0ZXJDdXN0b20ge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY29kZUludGVycHJldGVyQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIGEgQ29kZUludGVycHJldGVyQ3VzdG9tIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2RlSW50ZXJwcmV0ZXJDdXN0b21SZWYoKTogQ29kZUludGVycHJldGVyQ3VzdG9tUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZUludGVycHJldGVySWQ6IHRoaXMuY29kZUludGVycHJldGVySWQsXG4gICAgICBjb2RlSW50ZXJwcmV0ZXJBcm46IHRoaXMuY29kZUludGVycHJldGVyQXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQW4gYWNjZXNzb3IgZm9yIHRoZSBDb25uZWN0aW9ucyBvYmplY3QgdGhhdCB3aWxsIGZhaWwgaWYgdGhpcyBCcm93c2VyIGRvZXMgbm90IGhhdmUgYSBWUENcbiAgICogY29uZmlndXJlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbnMoKTogZWMyLkNvbm5lY3Rpb25zIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBWcGNOb3RDb25maWd1cmVkYCwgJ0Nhbm5vdCBtYW5hZ2UgbmV0d29yayBhY2Nlc3Mgd2l0aG91dCBjb25maWd1cmluZyBhIFZQQycsIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgQ29ubmVjdGlvbnMgb2JqZWN0IGZvciB0aGlzIEJyb3dzZXIuIFRoaXMgbWF5IGJlIHVuc2V0IGluIHRoZSBldmVudCB0aGF0IGEgVlBDIGhhcyBub3RcbiAgICogYmVlbiBjb25maWd1cmVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVzb3VyY2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIElBTSBhY3Rpb25zIHRvIHRoZSBJQU0gUHJpbmNpcGFsXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEBwYXJhbSBhY3Rpb25zIC0gVGhlIGFjdGlvbnMgdG8gZ3JhbnRcbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuY29kZUludGVycHJldGVyQ3VzdG9tUmVmLmNvZGVJbnRlcnByZXRlckFybl0sXG4gICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgb24gdGhpcyBjb2RlIGludGVycHJldGVyIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqIFRoaXMgaW5jbHVkZXMgYm90aCByZWFkIHBlcm1pc3Npb25zIG9uIHRoZSBzcGVjaWZpYyBjb2RlIGludGVycHJldGVyIGFuZCBsaXN0IHBlcm1pc3Npb25zIG9uIGFsbCBjb2RlIGludGVycHJldGVycy5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldENvZGVJbnRlcnByZXRlcicsICdiZWRyb2NrLWFnZW50Y29yZTpHZXRDb2RlSW50ZXJwcmV0ZXJTZXNzaW9uJ10gb24gdGhpcy5jb2RlSW50ZXJwcmV0ZXJBcm5cbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RDb2RlSW50ZXJwcmV0ZXJzJywgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RDb2RlSW50ZXJwcmV0ZXJTZXNzaW9ucyddIG9uIGFsbCByZXNvdXJjZXMgKCopXG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCByZXNvdXJjZVNwZWNpZmljR3JhbnQgPSB0aGlzLmdyYW50KFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIC4uLnBlcm1zLkNPREVfSU5URVJQUkVURVJfUkVBRF9QRVJNUyxcbiAgICApO1xuXG4gICAgY29uc3QgYWxsUmVzb3VyY2VHcmFudCA9IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbJyonXSxcbiAgICAgIGFjdGlvbnM6IHBlcm1zLkNPREVfSU5URVJQUkVURVJfTElTVF9QRVJNUyxcbiAgICB9KTtcbiAgICAvLyBSZXR1cm4gY29tYmluZWQgZ3JhbnRcbiAgICByZXR1cm4gcmVzb3VyY2VTcGVjaWZpY0dyYW50LmNvbWJpbmUoYWxsUmVzb3VyY2VHcmFudCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgaW52b2tlIHBlcm1pc3Npb25zIG9uIHRoaXMgY29kZSBpbnRlcnByZXRlciB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBpbnZva2UgcGVybWlzc2lvbnMgdG9cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGdyYW50IGNvbmZpZ3VyYXRpb246XG4gICAqIC0gYWN0aW9uczogWydiZWRyb2NrLWFnZW50Y29yZTpTdGFydENvZGVJbnRlcnByZXRlclNlc3Npb24nLCAnYmVkcm9jay1hZ2VudGNvcmU6SW52b2tlQ29kZUludGVycHJldGVyJywgJ2JlZHJvY2stYWdlbnRjb3JlOlN0b3BDb2RlSW50ZXJwcmV0ZXJTZXNzaW9uJ11cbiAgICogLSByZXNvdXJjZUFybnM6IFt0aGlzLmNvZGVJbnRlcnByZXRlckFybl1cbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudFVzZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoXG4gICAgICBncmFudGVlLFxuICAgICAgLi4ucGVybXMuQ09ERV9JTlRFUlBSRVRFUl9VU0VfUEVSTVMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBpbnZva2UgcGVybWlzc2lvbnMgb24gdGhpcyBjb2RlIGludGVycHJldGVyIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBJQU0gcHJpbmNpcGFsIHRvIGdyYW50IGludm9rZSBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkludm9rZUNvZGVJbnRlcnByZXRlciddXG4gICAqIC0gcmVzb3VyY2VBcm5zOiBbdGhpcy5jb2RlSW50ZXJwcmV0ZXJBcm5dXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRJbnZva2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsIC4uLnBlcm1zLkNPREVfSU5URVJQUkVURVJfSU5WT0tFX1BFUk1TKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBNZXRyaWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgY29kZSBpbnRlcnByZXRlci5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIG1ldHJpYyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgYSBzdW0gb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgY29uc3QgbWV0cmljUHJvcHM6IE1ldHJpY1Byb3BzID0ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IC4uLmRpbWVuc2lvbnMsIFJlc291cmNlOiB0aGlzLmNvZGVJbnRlcnByZXRlckN1c3RvbVJlZi5jb2RlSW50ZXJwcmV0ZXJBcm4gfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJlTWV0cmljKG1ldHJpY1Byb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGNvZGUgaW50ZXJwcmV0ZXIgYXBpIG9wZXJhdGlvbnMuLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBtZXRyaWNOYW1lXG4gICAqIC0gZGltZW5zaW9uc01hcDogeyBDb2RlSW50ZXJwcmV0ZXJJZDogdGhpcy5jb2RlSW50ZXJwcmV0ZXJJZCB9XG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciBhcGkgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0ZvckFwaU9wZXJhdGlvbihcbiAgICBtZXRyaWNOYW1lOiBzdHJpbmcsXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBNZXRyaWNPcHRpb25zLFxuICApOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhtZXRyaWNOYW1lLCB7IE9wZXJhdGlvbjogb3BlcmF0aW9uIH0sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGNvZGUgaW50ZXJwcmV0ZXIgbGF0ZW5jaWVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBMYXRlbmN5XG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciBsYXRlbmNpZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNMYXRlbmN5Rm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignTGF0ZW5jeScsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLkFWRVJBR0UsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgY29kZSBpbnRlcnByZXRlciBpbnZvY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogSW52b2NhdGlvbnNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBjb2RlIGludGVycHJldGVyIGludm9jYXRpb25zXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW52b2NhdGlvbnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdJbnZvY2F0aW9ucycsIG9wZXJhdGlvbiwge1xuICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGNvZGUgaW50ZXJwcmV0ZXIgZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBFcnJvcnNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBjb2RlIGludGVycHJldGVyIGVycm9yc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0Vycm9ycycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBjb2RlIGludGVycHJldGVyIHRocm90dGxlcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGhyb3R0bGVzXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciB0aHJvdHRsZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUaHJvdHRsZXNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdUaHJvdHRsZXMnLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgY29kZSBpbnRlcnByZXRlciBzeXN0ZW0gZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBTeXN0ZW1FcnJvcnNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBjb2RlIGludGVycHJldGVyIHN5c3RlbSBlcnJvcnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNTeXN0ZW1FcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdTeXN0ZW1FcnJvcnMnLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgY29kZSBpbnRlcnByZXRlciB1c2VyIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVXNlckVycm9yc1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGNvZGUgaW50ZXJwcmV0ZXIgdXNlciBlcnJvcnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNVc2VyRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignVXNlckVycm9ycycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBjb2RlIGludGVycHJldGVyIHNlc3Npb24gZHVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IER1cmF0aW9uXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgY29kZSBpbnRlcnByZXRlciBzZXNzaW9uIGR1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljU2Vzc2lvbkR1cmF0aW9uKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdEdXJhdGlvbicsIHsgT3BlcmF0aW9uOiAnQ29kZUludGVycHJldGVyU2Vzc2lvbicgfSwgeyBzdGF0aXN0aWM6IFN0YXRzLkFWRVJBR0UsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgYSBtZXRyaWMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGNvZGUgaW50ZXJwcmV0ZXIgYXBpIG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY29uZmlndXJlTWV0cmljKHByb3BzOiBNZXRyaWNQcm9wcykge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcmVnaW9uOiBwcm9wcz8ucmVnaW9uID8/IHRoaXMuc3RhY2sucmVnaW9uLFxuICAgICAgYWNjb3VudDogcHJvcHM/LmFjY291bnQgPz8gdGhpcy5zdGFjay5hY2NvdW50LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgUFJPUFMgRk9SIE5FVyBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBDb2RlSW50ZXJwcmV0ZXIgcmVzb3VyY2VcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyQ3VzdG9tUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSlcbiAgICogVGhlIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgdXAgdG8gNDggY2hhcmFjdGVycyBsb25nXG4gICAqIFBhdHRlcm46IFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9XG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUludGVycHJldGVyQ3VzdG9tTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpLCAtIChoeXBoZW4pIGFuZCBzcGFjZXNcbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBoYXZlIHVwIHRvIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogQHJlcXVpcmVkIC0gTm9cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQHJlcXVpcmVkIC0gTm9cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgY29kZSBpbnRlcnByZXRlclxuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKiBAZGVmYXVsdCAtIFBVQkxJQyBuZXR3b3JrIG1vZGVcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtDb25maWd1cmF0aW9uPzogQ29kZUludGVycHJldGVyTmV0d29ya0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgKG9wdGlvbmFsKVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBDb2RlIEludGVycHJldGVyIHJlc291cmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9IC0gbm8gdGFnc1xuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgIEFUVFJTIEZPUiBJTVBPUlRFRCBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQXR0cmlidXRlcyBmb3Igc3BlY2lmeWluZyBhbiBpbXBvcnRlZCBDb2RlIEludGVycHJldGVyIEN1c3RvbS5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyQ3VzdG9tQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUludGVycHJldGVyQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSBhc3NvY2lhdGVkIHRvIHRoZSBjb2RlIGludGVycHJldGVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgY29kZSBpbnRlcnByZXRlciB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBsYXN0IHVwZGF0ZWQgdGltZXN0YW1wIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgY29kZSBpbnRlcnByZXRlci5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gc3RhdHVzIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY3JlYXRlZCB0aW1lc3RhbXAgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXIuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIGNyZWF0ZWQgdGltZXN0YW1wIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGZvciB0aGlzIGNvZGUgaW50ZXJwcmV0ZXIsIGlmIGluIGEgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEJ5IGRlZmF1bHQsIHRoZSBjb2RlIGludGVycHJldGVyIGlzIG5vdCBpbiBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBDdXN0b20gY29kZSBpbnRlcnByZXRlciByZXNvdXJjZSBmb3IgQVdTIEJlZHJvY2sgQWdlbnQgQ29yZS5cbiAqIFByb3ZpZGVzIGEgc2FuZGJveGVkIGVudmlyb25tZW50IGZvciBjb2RlIGV4ZWN1dGlvbiB3aXRoIGNvbmZpZ3VyYWJsZSBuZXR3b3JrIGFjY2Vzcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvY29kZS1pbnRlcnByZXRlci5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpDb2RlSW50ZXJwcmV0ZXJDdXN0b21cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuLyoqXG4gKiBUaGlzIEFQSSBoYXMgYmVlbiBncmFkdWF0ZWQgdG8gc3RhYmxlLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZGVJbnRlcnByZXRlckN1c3RvbSBleHRlbmRzIENvZGVJbnRlcnByZXRlckN1c3RvbUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5Db2RlSW50ZXJwcmV0ZXJDdXN0b20nO1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgTWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgQmVkcm9jayBBZ2VudENvcmUgQ29kZSBJbnRlcnByZXRlciBDdXN0b20uXG4gICAqL1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBDb2RlIEludGVycHJldGVyIEN1c3RvbSByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2RlIGludGVycHJldGVyJ3MgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIC0gQXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgY29kZSBpbnRlcnByZXRlciBjdXN0b21cbiAgICogQHJldHVybnMgQW4gSUNvZGVJbnRlcnByZXRlckN1c3RvbSByZWZlcmVuY2UgdG8gdGhlIGV4aXN0aW5nIGNvZGUgaW50ZXJwcmV0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvZGVJbnRlcnByZXRlckN1c3RvbUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IENvZGVJbnRlcnByZXRlckN1c3RvbUF0dHJpYnV0ZXMpOiBJQ29kZUludGVycHJldGVyQ3VzdG9tIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb2RlSW50ZXJwcmV0ZXJDdXN0b21CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJBcm4gPSBhdHRycy5jb2RlSW50ZXJwcmV0ZXJBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29kZUludGVycHJldGVySWQgPSBBcm4uc3BsaXQoYXR0cnMuY29kZUludGVycHJldGVyQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25Sb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSBhdHRycy5zdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcblxuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlIHx8IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgICBpZiAoYXR0cnMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IGF0dHJzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG5ldyBDb2RlIEludGVycHJldGVyIEN1c3RvbVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEF0dHJpYnV0ZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb2RlIGludGVycHJldGVyIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2RlSW50ZXJwcmV0ZXJBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY29kZSBpbnRlcnByZXRlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29kZUludGVycHJldGVySWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb246IENvZGVJbnRlcnByZXRlck5ldHdvcmtDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgY29kZSBpbnRlcnByZXRlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNyZWF0ZWQgdGltZXN0YW1wIG9mIHRoZSBjb2RlIGludGVycHJldGVyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBvZiB0aGUgY29kZSBpbnRlcnByZXRlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmYWlsdXJlIHJlYXNvbiBvZiB0aGUgY29kZSBpbnRlcnByZXRlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmFpbHVyZVJlYXNvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgY29kZSBpbnRlcnByZXRlciB0byBhY2Nlc3MgQVdTIHNlcnZpY2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBUYWdzIGFwcGxpZWQgdG8gdGhpcyBjb2RlIGludGVycHJldGVyIHJlc291cmNlXG4gICAqIEEgbWFwIG9mIGtleS12YWx1ZSBwYWlycyBmb3IgcmVzb3VyY2UgdGFnZ2luZ1xuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3MgYXBwbGllZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBJbnRlcm5hbCBPbmx5XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcml2YXRlIHJlYWRvbmx5IF9fcmVzb3VyY2U6IGFnZW50X2NvcmUuQ2ZuQ29kZUludGVycHJldGVyQ3VzdG9tO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlSW50ZXJwcmV0ZXJDdXN0b21Qcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAvLyBNYXhpbXVtIG5hbWUgbGVuZ3RoIG9mIDQ4IGNoYXJhY3RlcnMgaXMgY2hvc2VuIGV2ZW4gd2hlbiBubyBtYXggbmFtZSBtZW50aW9uZWQgaW4gZG9jdW1lbnRhdGlvbiBiZWxvdyxcbiAgICAgIC8vIGR1ZSB0byBmYWlsdXJlIGluIENGIGRlcGxveW1lbnQgd2hlbiBtb3JlIHRoYW4gNDggY2hhcmFjdGVycyB1c2VkXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtY29kZWludGVycHJldGVyY3VzdG9tLmh0bWwjY2ZuLWJlZHJvY2thZ2VudGNvcmUtY29kZWludGVycHJldGVyY3VzdG9tLW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuY29kZUludGVycHJldGVyQ3VzdG9tTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA0OCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXQgcHJvcGVydGllcyBhbmQgZGVmYXVsdHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLm5hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA9IHByb3BzLm5ldHdvcmtDb25maWd1cmF0aW9uID8/IENvZGVJbnRlcnByZXRlck5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpO1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGUgPz8gdGhpcy5fY3JlYXRlQ29kZUludGVycHJldGVyUm9sZSgpO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmV4ZWN1dGlvblJvbGU7XG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncztcblxuICAgIC8vIFZhbGlkYXRlIGNvZGUgaW50ZXJwcmV0ZXIgbmFtZVxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlQ29kZUludGVycHJldGVyTmFtZSwgdGhpcy5uYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIGNvZGUgaW50ZXJwcmV0ZXIgdGFnc1xuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlQ29kZUludGVycHJldGVyVGFncywgdGhpcy50YWdzKTtcblxuICAgIC8vIE5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBpcyBkb25lIGluIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2xhc3NcbiAgICAvLyBTbyB3ZSBkb24ndCBuZWVkIHRvIHZhbGlkYXRlIGl0IGhlcmVcblxuICAgIC8vIFNldCBjb25uZWN0aW9ucyAtIGNyZWF0ZSBhIHNoYXJlZCBjb25uZWN0aW9ucyBvYmplY3RcbiAgICBpZiAodGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucykge1xuICAgICAgLy8gVXNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24ncyBjb25uZWN0aW9ucyBhcyB0aGUgc2hhcmVkIG9iamVjdFxuICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENGTiBQcm9wcyAtIFdpdGggTGF6eSBzdXBwb3J0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgY2ZuUHJvcHM6IGFnZW50X2NvcmUuQ2ZuQ29kZUludGVycHJldGVyQ3VzdG9tUHJvcHMgPSB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uX3JlbmRlcih0aGlzLl9jb25uZWN0aW9ucykgfSksXG4gICAgICBleGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgfTtcblxuICAgIC8vIEwxIGluc3RhbnRpYXRpb25cbiAgICB0aGlzLl9fcmVzb3VyY2UgPSBuZXcgYWdlbnRfY29yZS5DZm5Db2RlSW50ZXJwcmV0ZXJDdXN0b20odGhpcywgJ1Jlc291cmNlJywgY2ZuUHJvcHMpO1xuXG4gICAgLy8gR2V0IGF0dHJpYnV0ZXMgZGlyZWN0bHkgZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VcbiAgICB0aGlzLmNvZGVJbnRlcnByZXRlcklkID0gdGhpcy5fX3Jlc291cmNlLmF0dHJDb2RlSW50ZXJwcmV0ZXJJZDtcbiAgICB0aGlzLmNvZGVJbnRlcnByZXRlckFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQ29kZUludGVycHJldGVyQXJuO1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy5fX3Jlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmxhc3RVcGRhdGVkQXQgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckxhc3RVcGRhdGVkQXQ7XG4gICAgdGhpcy5mYWlsdXJlUmVhc29uID0gdGhpcy5fX3Jlc291cmNlLmF0dHJGYWlsdXJlUmVhc29uO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFZhbGlkYXRvcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgbmFtZSBmb3JtYXRcbiAgICogQHBhcmFtIG5hbWUgVGhlIGNvZGUgaW50ZXJwcmV0ZXIgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlQ29kZUludGVycHJldGVyTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgoe1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdDb2RlIGludGVycHJldGVyIG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBDT0RFX0lOVEVSUFJFVEVSX05BTUVfTUlOX0xFTkdUSCxcbiAgICAgIG1heExlbmd0aDogQ09ERV9JTlRFUlBSRVRFUl9OQU1FX01BWF9MRU5HVEgsXG4gICAgfSkpO1xuXG4gICAgLy8gQ2hlY2sgaWYgbmFtZSBtYXRjaGVzIHRoZSBBV1MgQVBJIHBhdHRlcm46IFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9XG4gICAgLy8gTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLCBmb2xsb3dlZCBieSB1cCB0byA0NyBsZXR0ZXJzLCBudW1iZXJzLCBvciB1bmRlcnNjb3Jlc1xuICAgIGNvbnN0IHZhbGlkTmFtZVBhdHRlcm4gPSAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC87XG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4obmFtZSwgJ0NvZGUgaW50ZXJwcmV0ZXIgbmFtZScsIHZhbGlkTmFtZVBhdHRlcm4pKTtcblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgY29kZSBpbnRlcnByZXRlciB0YWdzIGZvcm1hdFxuICAgKiBAcGFyYW0gdGFncyBUaGUgdGFncyBvYmplY3QgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZUNvZGVJbnRlcnByZXRlclRhZ3MgPSAodGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoIXRhZ3MpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIFRhZ3MgYXJlIG9wdGlvbmFsXG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCB0YWcga2V5IGFuZCB2YWx1ZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIGtleScsXG4gICAgICAgIG1pbkxlbmd0aDogQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUlOX0xFTkdUSCxcbiAgICAgICAgbWF4TGVuZ3RoOiBDT0RFX0lOVEVSUFJFVEVSX1RBR19NQVhfTEVOR1RILFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcga2V5IHBhdHRlcm46IF5bYS16QS1aMC05XFxzLl86Lz0rQC1dKiRcbiAgICAgIGNvbnN0IHZhbGlkS2V5UGF0dGVybiA9IC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLztcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKGtleSwgJ1RhZyBrZXknLCB2YWxpZEtleVBhdHRlcm4pKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlXG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBmaWVsZE5hbWU6ICdUYWcgdmFsdWUnLFxuICAgICAgICBtaW5MZW5ndGg6IENPREVfSU5URVJQUkVURVJfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogQ09ERV9JTlRFUlBSRVRFUl9UQUdfTUFYX0xFTkdUSCxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm46IF5bYS16QS1aMC05XFxzLl86Lz0rQC1dKiRcbiAgICAgIGNvbnN0IHZhbGlkVmFsdWVQYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvO1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVGaWVsZFBhdHRlcm4odmFsdWUsICdUYWcgdmFsdWUnLCB2YWxpZFZhbHVlUGF0dGVybikpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZXhlY3V0aW9uIHJvbGUgbmVlZGVkIGZvciB0aGUgY29kZSBpbnRlcnByZXRlciB0byBhY2Nlc3MgQVdTIHNlcnZpY2VzXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHJvbGVcbiAgICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDb2RlSW50ZXJwcmV0ZXJSb2xlKCk6IGlhbS5JUm9sZSB7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnU2VydmljZVJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cbn1cbiJdfQ==