@liflig/cdk 3.6.2 → 3.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -247,6 +247,15 @@ export type SqsIntegrationProps = {
247
247
  };
248
248
  };
249
249
  export type EventBridgeIntegrationProps = {
250
+ /**
251
+ * A role is needed in order to grant api gateway access to put events
252
+ * on the desired event bus.
253
+ *
254
+ * If no role is provided, a new role will be created in order to grant apigw access to the event bus
255
+ *
256
+ * @default: creates role that can be assumed by api gw with access to putEvents on the but inputted
257
+ */
258
+ role?: iam.IRole;
250
259
  /**
251
260
  * An EventBridge event bus. Request bodies sent to the route will be forwarded to this event bus,
252
261
  * in the `Detail` field (see
@@ -325,11 +325,16 @@ export class ApiGateway extends constructs.Construct {
325
325
  });
326
326
  }
327
327
  case "EventBridge": {
328
- // API-GW does not have access to put events to event bus by default
329
- const role = new iam.Role(this, `ApiGwTo${integration.eventBus.node.id}ServiceRole`, {
330
- description: `Allows API-GW to put events to ${integration.eventBus.eventBusArn}`,
331
- assumedBy: new iam.ServicePrincipal("apigateway.amazonaws.com"),
332
- });
328
+ /**
329
+ * API-GW does not have access to put events to event bus by default
330
+ *
331
+ * By default, we will create a new role to be used if this is undefined in the input
332
+ */
333
+ const role = integration.role ??
334
+ new iam.Role(this, `ApiGwTo${integration.eventBus.node.id}ServiceRole`, {
335
+ description: `Allows API-GW to put events to ${integration.eventBus.eventBusArn}`,
336
+ assumedBy: new iam.ServicePrincipal("apigateway.amazonaws.com"),
337
+ });
333
338
  integration.eventBus.grantPutEventsTo(role);
334
339
  const parameterMapping = new apigw.ParameterMapping()
335
340
  // https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEventsRequestEntry.html
@@ -522,4 +527,4 @@ function shortHash(str) {
522
527
  // which is fine
523
528
  return createHash("sha1").update(str).digest("hex").substring(0, 10);
524
529
  }
525
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGktZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGktZ2F0ZXdheS9odHRwLWFwaS1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBR2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFHaEQsT0FBTyxLQUFLLEtBQUssTUFBTSw4QkFBOEIsQ0FBQTtBQUVyRCxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0NBQWdDLENBQUE7QUFDaEUsT0FBTyxLQUFLLFlBQVksTUFBTSwyQ0FBMkMsQ0FBQTtBQUN6RSxPQUFPLEtBQUssV0FBVyxNQUFNLDBDQUEwQyxDQUFBO0FBRXZFLE9BQU8sS0FBSyxZQUFZLE1BQU0sK0JBQStCLENBQUE7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDbkMsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQTZCLE1BQU0sZUFBZSxDQUFBO0FBRS9FLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7QUFpYzFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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SUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzFCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxTQUFTLENBQUMsR0FBVztJQUM1QixpR0FBaUc7SUFDakcsZ0JBQWdCO0lBQ2hCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB0eXBlICogYXMgZWxiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiXG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHR5cGUgKiBhcyBzcXMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIlxuaW1wb3J0IHR5cGUgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIlxuaW1wb3J0ICogYXMgYXBpZ3cgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgaW50ZWdyYXRpb25zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiXG5pbXBvcnQgKiBhcyBhdXRob3JpemVycyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyc1wiXG5pbXBvcnQgdHlwZSB7IElVc2VyUG9vbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiXG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlanMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCB7IHRhZ1Jlc291cmNlcyB9IGZyb20gXCIuLi90YWdzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJ1cmxcIlxuaW1wb3J0IHsgQXBpR2F0ZXdheURuc1Byb3BzLCBBcGlHYXRld2F5RG9tYWluIH0gZnJvbSBcIi4vZG9tYWluXCJcbmltcG9ydCB7IEFwaUdhdGV3YXlBY2Nlc3NMb2dzLCBBcGlHYXRld2F5QWNjZXNzTG9nc1Byb3BzIH0gZnJvbSBcIi4vYWNjZXNzLWxvZ3NcIlxuXG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoX19maWxlbmFtZSlcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIHtAbGluayBBcGlHYXRld2F5fSBjb25zdHJ1Y3QuXG4gKlxuICogQGF1dGhvciBLcmlzdGlhbiBSZWtzdGFkIDxrcmVAY2FwcmFjb25zdWx0aW5nLm5vPlxuICogQGF1dGhvciBIZXJtYW5uIE3DuHJrcmlkIDxoZW1AbGlmbGlnLm5vPlxuICovXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5UHJvcHM8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0ge1xuICAvKiogU2V0dGluZ3MgZm9yIHRoZSBleHRlcm5hbC1mYWNpbmcgcGFydCBvZiB0aGUgQVBJLUdXLiAqL1xuICBkbnM6IEFwaUdhdGV3YXlEbnNQcm9wc1xuXG4gIC8qKlxuICAgKiBJZiBubyBpbnRlZ3JhdGlvbiBpcyBzcGVjaWZpZWQgZm9yIGEgcm91dGUsIHRoaXMgaW50ZWdyYXRpb24gaXMgdXNlZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBJbnRlZ3JhdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgKi9cbiAgZGVmYXVsdEludGVncmF0aW9uPzogSW50ZWdyYXRpb25Qcm9wc1xuXG4gIC8qKlxuICAgKiBJZiBubyBhdXRob3JpemF0aW9uIGlzIHNwZWNpZmllZCBmb3IgYSByb3V0ZSwgdGhpcyBhdXRob3JpemF0aW9uIGlzIHVzZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgQXV0aG9yaXphdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgKi9cbiAgZGVmYXVsdEF1dGhvcml6YXRpb24/OiBBdXRob3JpemF0aW9uUHJvcHM8QXV0aFNjb3Blc1Q+XG5cbiAgcm91dGVzOiBBcGlHYXRld2F5Um91dGU8QXV0aFNjb3Blc1Q+W11cblxuICAvKipcbiAgICogVGhlIEFQSS1HVyBhY2Nlc3MgbG9ncyBmb3IgdGhlIGAkZGVmYXVsdGAgc3RhZ2UgYXJlIGtlcHQuXG4gICAqIFRoaXMgaGFzIG9wdGlvbnMgZm9yIHRoZSBsb2dzLlxuICAgKi9cbiAgYWNjZXNzTG9ncz86IEFwaUdhdGV3YXlBY2Nlc3NMb2dzUHJvcHNcblxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcm91dGUtbGV2ZWwgbWV0cmljcy5cbiAgICogVGhpcyBjYW4gaW5jcmVhc2UgQ2xvdWRXYXRjaCBjb3N0cyB3aGVuIG5vdCBkaXNhYmxlZC5cbiAgICpcbiAgICogU2VlIFtBV1M6IFdvcmtpbmcgd2l0aCBtZXRyaWNzIGZvciBIVFRQIEFQSXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1tZXRyaWNzLmh0bWw/aWNtcGlkPWFwaWdhdGV3YXlfY29uc29sZV9oZWxwIzp+OnRleHQ9YW5kJTIwc3RhZ2UlMjBJRC4tLEFwaUlkJTJDJTIwU3RhZ2UlMkMlMjBSb3V0ZSwtRmlsdGVycyUyMEFQSSUyMEdhdGV3YXkpXG4gICAqIGZvciBtb3JlIGluZm8uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGRldGFpbGVkTWV0cmljcz86IGJvb2xlYW5cblxuICAvKipcbiAgICogVGhyb3R0bGluZyBvZiByZXF1ZXN0cy5cbiAgICogSWYgbm90IHNldCwgdGhlIEFXUyBkZWZhdWx0IG9mIDUwMDAgYnVyc3QgYW5kIDEwMDAwIHJhdGUgaXMgdXNlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdGhyb3R0bGluZyBpcyBwZXItYWNjb3VudCwgYW5kIGNvdW50cyBhbGwgQVBJcyBpbiB0aGUgYWNjb3VudCBhbmQgcmVnaW9uLlxuICAgKiBJZiB5b3UgaGF2ZSBhbm90aGVyIEFQSSBpbiB0aGlzIHJlZ2lvbiBnZXR0aW5nIDEwXzAwMCByZXF1ZXN0IHJhdGUsIGl0IG1heSBpbXBhY3QgdGhpcyBBUEkgYXMgd2VsbC5cbiAgICovXG4gIHRocm90dGxpbmc/OiB7XG4gICAgLyoqXG4gICAgICogR29pbmcgb3ZlciBgNV8wMDBgIG1heSByZXF1aXJlIHlvdSB0byBjb250YWN0IEFXUyBTdXBwb3J0IC0gdGhleSBhcmUgYWNjb3VudCBib3VuZC5cbiAgICAgKi9cbiAgICBidXJzdD86IG51bWJlclxuICAgIC8qKlxuICAgICAqIEdvaW5nIG92ZXIgYDEwXzAwMGAgbWF5IHJlcXVpcmUgeW91IHRvIGNvbnRhY3QgQVdTIFN1cHBvcnQgLSB0aGV5IGFyZSBhY2NvdW50IGJvdW5kLlxuICAgICAqL1xuICAgIHJhdGU/OiBudW1iZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIENPUlMgaGVhZGVycyBvbiByZXNwb25zZXMgZnJvbSB0aGUgQVBJIEdhdGV3YXkgdG8gYWxsb3cgYWxsIG9yaWdpbnMsIGhlYWRlcnMgYW5kIG1ldGhvZHMuXG4gICAqIFVzZWZ1bCBpZiB5b3VyIEFQSSBzaG91bGQgYmUgYWNjZXNzZWQgYnkgYW55IGJyb3dzZXIuXG4gICAqL1xuICBjb3JzQWxsb3dBbGw/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIElmIHNvbWUgc2V0dGluZ3MgaW4gdGhpcyBjb25zdHJ1Y3QgZG8gbm90IHdvcmsgZm9yIHlvdSwgdGhpcyBpcyBhbiBlc2NhcGUgaGF0Y2ggbWVjaGFuaXNtIHRvXG4gICAqIG92ZXJyaWRlIGFueXRoaW5nLlxuICAgKi9cbiAgcHJvcHNPdmVycmlkZT86IHtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSBzZXR0aW5ncyBmb3IgdGhlIHtAbGluayBhcGlndy5IdHRwQXBpfSAoYWNjZXNzaWJsZSBpbiB7QGxpbmsgQXBpR2F0ZXdheS5odHRwQXBpfSkuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBmcm9udGVuZCBhY2Nlc3NpbmcgdGhpcyBBUEksIHlvdSBtaWdodCB3YW50IHRvIHNldFxuICAgICAqIFtDT1JTIHByZWZsaWdodF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjEvZG9jcy9hd3MtYXBpZ2F0ZXdheXYyLXJlYWRtZS5odG1sI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1zaGFyaW5nLWNvcnMpXG4gICAgICogc2V0dGluZ3MuXG4gICAgICovXG4gICAgaHR0cEFwaT86IFBhcnRpYWw8YXBpZ3cuSHR0cEFwaVByb3BzPlxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEFwaUdhdGV3YXlSb3V0ZTxBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIC8qKiBUaGUgcGF0aCBvZiB0aGUgcm91dGUgdG8gZXhwb3NlIHRocm91Z2ggdGhlIEFQSSBHYXRld2F5LiBVc2UgXCIvXCIgZm9yIHRoZSByb290IHJvdXRlLiAqL1xuICBwYXRoOiBzdHJpbmdcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgd2Ugb25seSBmb3J3YXJkIHJlcXVlc3RzIHRoYXQgbWF0Y2ggdGhlIHJvdXRlJ3MgcGF0aCBleGFjdGx5LiBTbyBmb3IgYSByb3V0ZSB3aXRoXG4gICAqIHBhdGggYC9hcGkvdXNlcnNgLCBhIHJlcXVlc3QgdG8gYC9hcGkvdXNlcnNgIHdpbGwgYmUgZm9yd2FyZGVkLCBidXQgYSByZXF1ZXN0IHRvXG4gICAqIGAvYXBpL3VzZXJzL2FkbWluYCB3aWxsIG5vdC4gSWYgeW91IHdhbnQgdG8gZm9yd2FyZCByZXF1ZXN0cyB0byBhbGwgc3ViLXBhdGhzIHVuZGVyIHRoZSByb3V0ZSdzXG4gICAqIHBhdGgsIHlvdSBjYW4gc2V0IHRoaXMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGluY2x1ZGVTdWJwYXRocz86IGJvb2xlYW5cblxuICAvKipcbiAgICogVGhlIEhUVFAgbWV0aG9kIHRvIGV4cG9zZS4gYEFOWWAgZXhwb3NlcyBhbGwgSFRUUCBtZXRob2RzIG9uIHRoZSBwYXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkFOWVwiXG4gICAqL1xuICBtZXRob2Q/OiBIdHRwTWV0aG9kXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0aGF0IHRoZSByb3V0ZSB3aWxsIGZvcndhcmQgdG8uIFNlZSB7QGxpbmsgSW50ZWdyYXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGVcbiAgICogb3B0aW9ucy5cbiAgICpcbiAgICogSWYgdW5kZWZpbmVkLCB1c2VzIHRoZSB7QGxpbmsgQXBpR2F0ZXdheVByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbn0uXG4gICAqL1xuICBpbnRlZ3JhdGlvbj86IEludGVncmF0aW9uUHJvcHNcblxuICAvKipcbiAgICogSG93IHJlcXVlc3RzIG9uIHRoZSByb3V0ZSBhcmUgYXV0aGVudGljYXRlZC4gU2VlIHtAbGluayBBdXRob3JpemF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlXG4gICAqIG9wdGlvbnMuXG4gICAqXG4gICAqIElmIHVuZGVmaW5lZCwgdXNlcyB0aGUge0BsaW5rIEFwaUdhdGV3YXlQcm9wcy5kZWZhdWx0QXV0aG9yaXphdGlvbn0uXG4gICAqL1xuICBhdXRob3JpemF0aW9uPzogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPlxufVxuXG5leHBvcnQgdHlwZSBIdHRwTWV0aG9kID1cbiAgfCBcIkFOWVwiXG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJQVVRcIlxuICB8IFwiUEFUQ0hcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIk9QVElPTlNcIlxuICB8IFwiSEVBRFwiXG5cbmV4cG9ydCB0eXBlIEludGVncmF0aW9uUHJvcHMgPVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIHRoZSByb3V0ZSB0byBhbiBBTEIgKEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIpLiAqL1xuICB8ICh7IHR5cGU6IFwiQUxCXCIgfSAmIEFsYkludGVncmF0aW9uUHJvcHMpXG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3Rpbmcgcm91dGUgdG8gYSBMYW1iZGEuICovXG4gIHwgKHsgdHlwZTogXCJMYW1iZGFcIiB9ICYgTGFtYmRhSW50ZWdyYXRpb25Qcm9wcylcbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyBhIHJvdXRlIHRvIHNlbmQgdG8gYW4gU1FTIHF1ZXVlLiAqL1xuICB8ICh7IHR5cGU6IFwiU1FTXCIgfSAmIFNxc0ludGVncmF0aW9uUHJvcHMpXG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3RpbmcgYSByb3V0ZSB0byBzZW5kIHRvIGFuIEV2ZW50QnJpZGdlIGV2ZW50IGJ1cy4gKi9cbiAgfCAoeyB0eXBlOiBcIkV2ZW50QnJpZGdlXCIgfSAmIEV2ZW50QnJpZGdlSW50ZWdyYXRpb25Qcm9wcylcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIEFQSS1HVyAtPiBBTEIgKEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIpIGludGVncmF0aW9uLlxuICpcbiAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEFsYkludGVncmF0aW9uUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBBIGxpc3RlbmVyIG9uIGUuZy4gcG9ydCA0NDMgKEhUVFBTKS5cbiAgICpcbiAgICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIGxvYWRCYWxhbmNlckxpc3RlbmVyOiBlbGIuSUFwcGxpY2F0aW9uTGlzdGVuZXJcblxuICAvKipcbiAgICogVGhlIGhvc3QgbmFtZSAoZG9tYWluIG5hbWUpIG9mIHRoZSBiYWNrZW5kIHNlcnZpY2UgdGhhdCB3ZSB3YW50IHRvIHJlYWNoIHRocm91Z2ggdGhlIEFMQi5cbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIHRvOlxuICAgKiAtIFZlcmlmeSB0aGUgSFRUUFMgY2VydGlmaWNhdGUgb2YgdGhlIGJhY2tlbmQgc2VydmljZSwgc28gdGhhdCB0aGUgcmVxdWVzdCBmb3J3YXJkZWQgZnJvbVxuICAgKiAgIEFQSS1HVyBjYW4gdXNlIFRMU1xuICAgKiAtIFNldCB0aGUgYEhvc3RgIGhlYWRlciBvbiB0aGUgcmVxdWVzdCB3aGVuIGZvcndhcmRpbmcgdG8gdGhlIEFMQiwgc28gdGhhdCByZXF1ZXN0cyBjYW4gYmVcbiAgICogICByb3V0ZWQgdG8gdGhlIGNvcnJlY3QgVGFyZ2V0IEdyb3VwXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGA8c2VydmljZT4uc3RhZ2luZy5teS1wcm9qZWN0LmxpZmxpZy5pb2AgKG5vdCBwcmVmaXhlZCBieSBgaHR0cHM6Ly9gKS5cbiAgICovXG4gIGhvc3ROYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIFZQQyB1c2VkIGJ5IHRoZSBBTEIuIFRoZSBBUEktR1cgaW50ZWdyYXRpb24gd2lsbCBjb25uZWN0IHRvIHRoZSBBTEIgdXNpbmcgYSBWUEMgTGluayBmb3JcbiAgICogdGhpcyBWUEMuXG4gICAqXG4gICAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICB2cGM6IGVjMi5JVnBjXG5cbiAgLyoqXG4gICAqIEEgc2VjdXJpdHkgZ3JvdXAgKFNHKSB0aGF0IGFsbG93cyBpbmNvbWluZyB0cmFmZmljIHRvIHRoZSBBTEIuIFdpbGwgYmUgdXNlZCBieSB0aGUgVlBDIGxpbmssIHNvXG4gICAqIHRoZSBBUEktR1cgaW50ZWdyYXRpb24gY2FuIGNvbm5lY3QuXG4gICAqXG4gICAqIFRoaXMgaXMgdXN1YWxseSB0aGUgc2FtZSBTRyBhcyB0aGUgQUxCIHVzZXMsIGJlY2F1c2UgdGhleSBoYXZlIGEgcnVsZSB0aGF0IGFsbG93cyB0cmFmZmljIGZyb21cbiAgICogb3RoZXJzIGluIHRoZSBzYW1lIFNHLlxuICAgKlxuICAgKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwXG5cbiAgLyoqXG4gICAqIE1hcCByZXF1ZXN0IHBhcmFtZXRlcnMgKGFkZC9vdmVyd3JpdGUgcGF0aC9oZWFkZXJzL3F1ZXJ5IHBhcmFtcykgYmVmb3JlIGZvcndhcmRpbmcgdG8gdGhlXG4gICAqIGJhY2tlbmQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLXBhcmFtZXRlci1tYXBwaW5nLmh0bWx9XG4gICAqIGZvciBtb3JlIG9uIHRoaXMuIFJlYWQgdGhlICdSZXNlcnZlZCBoZWFkZXJzJyBzZWN0aW9uIGZvciB3aGljaCBoZWFkZXJzIGNhbm5vdCBiZSBvdmVycmlkZGVuLlxuICAgKiBJbiBhZGRpdGlvbiB0byB0aGUgQVdTLXJlc2VydmVkIGhlYWRlcnMsIHlvdSBzaG91bGQgbm90IG92ZXJyaWRlIHRoZSAnSG9zdCcgaGVhZGVyIGVpdGhlciwgYXNcbiAgICogdGhhdCdzIHVzZWQgZm9yIHJvdXRpbmcgdGhlIHJlcXVlc3QgdG8gdGhlIGNvcnJlY3Qgc2VydmljZSBiZWhpbmQgdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlOlxuICAgKlxuICAgKiBBZGRpbmcgYSBoZWFkZXI6XG4gICAqIGBgYFxuICAgKiBtYXBQYXJhbWV0ZXJzOiAocGFyYW1ldGVycykgPT4gcGFyYW1ldGVycy5vdmVyd3JpdGVIZWFkZXIoXG4gICAqICAgIFwiWC1NeS1DdXN0b20tSGVhZGVyXCIsXG4gICAqICAgIGFwaWd3Lk1hcHBpbmdWYWx1ZS5jdXN0b20oXCJteS1jdXN0b20tdmFsdWVcIiksXG4gICAqIClcbiAgICogYGBgXG4gICAqXG4gICAqIE92ZXJ3cml0aW5nIHRoZSBwYXRoIChpZiwgZm9yIGV4YW1wbGUsIHlvdSBjb25maWd1cmUgYSBgL3VzZXJzYCByb3V0ZSBvbiB0aGUgQVBJIEdhdGV3YXkgdGhhdFxuICAgKiB5b3Ugd2FudCB0byBmb3J3YXJkIHRvIGAvYXBpL3VzZXJzYCBvbiB0aGUgYmFja2VuZCk6XG4gICAqIGBgYFxuICAgKiBtYXBQYXJhbWV0ZXJzOiAocGFyYW1ldGVycykgPT4gcGFyYW1ldGVycy5vdmVyd3JpdGVQYXRoKFwiL2FwaS91c2Vyc1wiKVxuICAgKiBgYGBcbiAgICovXG4gIG1hcFBhcmFtZXRlcnM/OiAocGFyYW1ldGVyczogYXBpZ3cuUGFyYW1ldGVyTWFwcGluZykgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBMYW1iZGFJbnRlZ3JhdGlvblByb3BzID0ge1xuICAvKipcbiAgICogVGhlIExhbWJkYSBpbnRlZ3JhdGlvbiB1c2VzIHRoZSBWMiBwYXlsb2FkIGZvcm1hdDpcbiAgICoge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1kZXZlbG9wLWludGVncmF0aW9ucy1sYW1iZGEuaHRtbH1cbiAgICpcbiAgICogSWYgd3JpdGluZyB0aGUgTGFtYmRhIGluIFR5cGVTY3JpcHQsIHRoaXMgbWVhbnMgeW91IHNob3VsZCB1c2UgYEFQSUdhdGV3YXlQcm94eUV2ZW50VjJgIGFzIHRoZVxuICAgKiByZXF1ZXN0IHR5cGUsIGFuZCBgQVBJR2F0ZXdheVByb3h5UmVzdWx0VjJgIGFzIHRoZSByZXNwb25zZSB0eXBlLlxuICAgKi9cbiAgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG59XG5cbmV4cG9ydCB0eXBlIFNxc0ludGVncmF0aW9uUHJvcHMgPSB7XG4gIHF1ZXVlOiBzcXMuSVF1ZXVlXG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgYXR0cmlidXRlcyB0byBwYXNzIG9uIHRvIFNRUy4gVGhlIGtleXMgaW4gdGhpcyBvYmplY3QgYXJlIHRoZSBuYW1lcyBvZiB0aGUgYXR0cmlidXRlcy5cbiAgICogRWFjaCBhdHRyaWJ1dGUgaGFzIGEgRGF0YVR5cGUgZmllbGQsIGFuZCBlaXRoZXIgYSBTdHJpbmdWYWx1ZSBvciBCaW5hcnlWYWx1ZSBmaWVsZCBkZXBlbmRpbmcgb25cbiAgICogaXRzIHR5cGUuIFNlZSBBV1MgZG9jczpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU1NpbXBsZVF1ZXVlU2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9NZXNzYWdlQXR0cmlidXRlVmFsdWUuaHRtbFxuICAgKlxuICAgKiBJbiB0aGUgU3RyaW5nVmFsdWUgZmllbGQsIHlvdSBjYW4gZG8gQVBJIEdhdGV3YXkgcGFyYW1ldGVyIG1hcHBpbmc6XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1wYXJhbWV0ZXItbWFwcGluZy5odG1sXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYFxuICAgKiBtZXNzYWdlQXR0cmlidXRlczoge1xuICAgKiAgIGNsaWVudElkOiB7XG4gICAqICAgICBEYXRhVHlwZTogXCJTdHJpbmdcIixcbiAgICogICAgIFN0cmluZ1ZhbHVlOiBcIiR7Y29udGV4dC5hdXRob3JpemVyLmNsaWVudElkfVwiLFxuICAgKiAgIH0sXG4gICAqIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgbWVzc2FnZUF0dHJpYnV0ZXM/OiB7XG4gICAgW2F0dHJpYnV0ZU5hbWU6IHN0cmluZ106XG4gICAgICB8IHsgRGF0YVR5cGU6IFwiU3RyaW5nXCIgfCBcIk51bWJlclwiOyBTdHJpbmdWYWx1ZTogc3RyaW5nIH1cbiAgICAgIHwge1xuICAgICAgICAgIERhdGFUeXBlOiBcIkJpbmFyeVwiXG4gICAgICAgICAgLyoqIEJhc2U2NC1lbmNvZGVkIGJpbmFyeSBkYXRhIG9iamVjdC4gKi9cbiAgICAgICAgICBCaW5hcnlWYWx1ZTogc3RyaW5nXG4gICAgICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFdmVudEJyaWRnZUludGVncmF0aW9uUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBBbiBFdmVudEJyaWRnZSBldmVudCBidXMuIFJlcXVlc3QgYm9kaWVzIHNlbnQgdG8gdGhlIHJvdXRlIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoaXMgZXZlbnQgYnVzLFxuICAgKiBpbiB0aGUgYERldGFpbGAgZmllbGQgKHNlZVxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0RXZlbnRzUmVxdWVzdEVudHJ5Lmh0bWwpLlxuICAgKi9cbiAgZXZlbnRCdXM6IGV2ZW50cy5JRXZlbnRCdXNcbiAgLyoqXG4gICAqIFNldHMgdGhlIGBEZXRhaWxUeXBlYCBmaWVsZCAoaS5lLiwgZXZlbnQgdHlwZSkgb24gZXZlbnRzIHB1Ymxpc2hlZCB0byB0aGUgZXZlbnQgYnVzLlxuICAgKlxuICAgKiBTZWUgQVdTIGRvY3MgZm9yIG1vcmUgb24gdGhpczpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1B1dEV2ZW50c1JlcXVlc3RFbnRyeS5odG1sXG4gICAqL1xuICBkZXRhaWxUeXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9XG4gIC8qKlxuICAgKiBObyBhdXRoZW50aWNhdGlvbiwgZm9yIHdoZW4geW91IHdhbnQgYSBmdWxseSBwdWJsaWMgcm91dGUgKG9yIGhhbmRsZSBhdXRoZW50aWNhdGlvbiBpbiB0aGVcbiAgICogYmFja2VuZCBpbnRlZ3JhdGlvbikuXG4gICAqL1xuICB8IHsgdHlwZTogXCJOT05FXCIgfVxuICAvKipcbiAgICogQVdTIElBTSBhdXRob3JpemF0aW9uLlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktYWNjZXNzLWNvbnRyb2wtaWFtLmh0bWxcbiAgICovXG4gIHwgeyB0eXBlOiBcIklBTVwiIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyXG4gICAqIGFuZCB2ZXJpZmllcyB0aGUgdG9rZW4gYWdhaW5zdCBhIENvZ25pdG8gdXNlciBwb29sLlxuICAgKi9cbiAgfCAoe1xuICAgICAgdHlwZTogXCJDT0dOSVRPX1VTRVJfUE9PTFwiXG4gICAgfSAmIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4pXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YFxuICAgKiBoZWFkZXIgYW5kIHZlcmlmaWVzIHRoZSBjcmVkZW50aWFscyBhZ2FpbnN0IGEgZ2l2ZW4gc2VjcmV0LlxuICAgKi9cbiAgfCAoeyB0eXBlOiBcIkJBU0lDX0FVVEhcIiB9ICYgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzKVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCBhbGxvd3MgYm90aDpcbiAgICogLSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgdG9rZW4gaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZVxuICAgKiAgIGdpdmVuIENvZ25pdG8gdXNlciBwb29sXG4gICAqIC0gYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSBjcmVkZW50aWFscyBhcmVcbiAgICogICBjaGVja2VkIGFnYWluc3QgdGhlIGNyZWRlbnRpYWxzIGZyb20gdGhlIGdpdmVuIGJhc2ljIGF1dGggc2VjcmV0IG5hbWVcbiAgICpcbiAgICogSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBnaXZlbiBhbmQgdmFsaWQsIHRoZSByZXF1ZXN0IGlzIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICB8ICh7XG4gICAgICB0eXBlOiBcIkNPR05JVE9fVVNFUl9QT09MX09SX0JBU0lDX0FVVEhcIlxuICAgIH0gJiBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4pXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIGF1dGhvcml6ZXIgd2l0aCB0aGUgZ2l2ZW4gTGFtYmRhIGZ1bmN0aW9uLiBVc2UgdGhpcyBpZiB5b3UgaGF2ZSBjdXN0b21cbiAgICogYXV0aG9yaXphdGlvbiBsb2dpYywgYW5kIHRoZSBvdGhlciBhdXRob3JpemVycyBmcm9tIHRoaXMgY29uc3RydWN0IGRvbid0IG1lZXQgeW91ciBuZWVkcy5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWxhbWJkYS1hdXRob3JpemVyLmh0bWxcbiAgICovXG4gIHwgKHsgdHlwZTogXCJDVVNUT01fTEFNQkRBX0FVVEhPUklaRVJcIiB9ICYgQ3VzdG9tTGFtYmRhQXV0aG9yaXplclByb3BzKVxuXG5leHBvcnQgdHlwZSBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyUHJvcHM8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IHtcbiAgdXNlclBvb2w6IElVc2VyUG9vbFxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IGFjY2VzcyB0b2tlbiBjbGFpbXMgY29udGFpbiB0aGUgZ2l2ZW4gc2NvcGUuXG4gICAqXG4gICAqIFdoZW4gZGVmaW5lZCBhcyBwYXJ0IG9mIGEgcmVzb3VyY2Ugc2VydmVyLCBzY29wZXMgYXJlIG9uIHRoZSBmb3JtYXQ6XG4gICAqIGB7cmVzb3VyY2Ugc2VydmVyIGlkZW50aWZpZXJ9L3tzY29wZSBuYW1lfWAsIGUuZy4gYGV4dGVybmFsL3ZpZXdfdXNlcnNgLlxuICAgKlxuICAgKiBUbyBnZXQgbW9yZSB0eXBlIHNhZmV0eSBvbiB0aGlzIHBhcmFtZXRlciwgc2VlIHRoZSBkb2NzIGZvciB0aGUgYEF1dGhTY29wZXNUYCB0eXBlIHBhcmFtZXRlciBvblxuICAgKiB7QGxpbmsgQXBpR2F0ZXdheX0uXG4gICAqL1xuICByZXF1aXJlZFNjb3BlPzogQXV0aFNjb3Blc1RcblxuICAvKipcbiAgICogTmFtZSBvZiBzZWNyZXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlciB0aGF0IHN0b3JlcyBiYXNpYyBhdXRoIGNyZWRlbnRpYWxzIGZvciB0aGUgYmFja2VuZFxuICAgKiBzZXJ2aWNlLCB0byBiZSBmb3J3YXJkZWQgdG8gdGhlIGJhY2tlbmQgaWYgQ29nbml0byB1c2VyIHBvb2wgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkLlxuICAgKlxuICAgKiBUaGUgc2VjcmV0IHZhbHVlIG11c3QgZm9sbG93IHRoaXMgZm9ybWF0OlxuICAgKiBgYGBqc29uXG4gICAqIHsgXCJ1c2VybmFtZVwiOiBcIjx1c2VybmFtZT5cIiwgXCJwYXNzd29yZFwiOiBcIjxwYXNzd29yZD5cIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIHByb3Agc29sdmVzIHRoZSBmb2xsb3dpbmcgdXNlLWNhc2U6XG4gICAqIC0gWW91IHdhbnQgdG8gZG8gQ29nbml0byB1c2VyIHBvb2wgYXV0aGVudGljYXRpb24gaW4gdGhlIEFQSSBHYXRld2F5XG4gICAqIC0gWW91IHdhbnQgYW4gYWRkaXRpb25hbCBhdXRoIGNoZWNrIGluIHRoZSBiYWNrZW5kLCBidXQgeW91IGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIENvZ25pdG9cbiAgICogICB0aGVyZVxuICAgKiAtIFRoZSBiYWNrZW5kIHVzZXMgYmFzaWMgYXV0aFxuICAgKlxuICAgKiBUaGlzIHByb3Agc29sdmVzIHRoaXMgYnkgbGV0dGluZyB5b3Ugc3BlY2lmeSBjcmVkZW50aWFscyB0byBwYXNzIHRvIHRoZSBiYWNrZW5kIGFmdGVyIEFQSS1HV1xuICAgKiBhdXRoZW50aWNhdGlvbiBzdWNjZWVkcy4gWW91IGNhbiBwYXNzIHRoZSBlbmNvZGVkIGNyZWRlbnRpYWxzIHRocm91Z2hcbiAgICoge0BsaW5rIEFsYkludGVncmF0aW9uUHJvcHMubWFwUGFyYW1ldGVyc30sIHVzaW5nIHRoZSBgYXV0aG9yaXplci5pbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXJgXG4gICAqIGNvbnRleHQgdmFyaWFibGUsIGxpa2Ugc286XG4gICAqIGBgYFxuICAgKiBtYXBQYXJhbWV0ZXJzOiAocGFyYW1ldGVycykgPT4gcGFyYW1ldGVycy5vdmVyd3JpdGVIZWFkZXIoXG4gICAqICAgLy8gJ0F1dGhvcml6YXRpb24nIGhlYWRlciBjYW5ub3QgYmUgb3ZlcnJpZGRlbiwgc28gd2UgdXNlIGEgY3VzdG9tIGhlYWRlclxuICAgKiAgIFwiWC1JbnRlcm5hbC1BdXRob3JpemF0aW9uXCIsXG4gICAqICAgYXBpZ3cuTWFwcGluZ1ZhbHVlLmNvbnRleHRWYXJpYWJsZShcImF1dGhvcml6ZXIuaW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyXCIpLFxuICAgKiApXG4gICAqIGBgYFxuICAgKiBUaGUgYmFja2VuZCBjYW4gdGhlbiBjaGVjayB0aGUgYFgtSW50ZXJuYWwtQXV0aG9yaXphdGlvbmAgaGVhZGVyLlxuICAgKi9cbiAgY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb24/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzID0ge1xuICAvKipcbiAgICogTmFtZSBvZiBzZWNyZXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlciB0aGF0IHN0b3JlcyBiYXNpYyBhdXRoIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCBmb3IgdGhlIHNlY3JldCB2YWx1ZTpcbiAgICogLSBTaW5nbGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOlxuICAgKiAgIGBgYGpzb25cbiAgICogICB7IFwidXNlcm5hbWVcIjogXCI8dXNlcm5hbWU+XCIsIFwicGFzc3dvcmRcIjogXCI8cGFzc3dvcmQ+XCIgfVxuICAgKiAgIGBgYFxuICAgKiAtIEFycmF5IG9mIHVzZXJuYW1lICsgcGFzc3dvcmQgb2JqZWN0czpcbiAgICogICBgYGBqc29uXG4gICAqICAgeyBcImNyZWRlbnRpYWxzXCI6IFwiW3tcXFwidXNlcm5hbWVcXFwiOlxcXCI8dXNlci0xPlxcXCIsXFxcInBhc3N3b3JkXFxcIjpcXFwicGFzc3dvcmQtMVxcXCJ9LHtcXFwidXNlcm5hbWVcXFwiOlxcXCI8dXNlci0yPlxcXCIsXFxcInBhc3N3b3JkXFxcIjpcXFwiPHBhc3N3b3JkLTI+XFxcIn1dXCIgfVxuICAgKiAgIGBgYFxuICAgKiAgIC0gVGhlIHZhbHVlIG9mIHRoZSBgY3JlZGVudGlhbHNgIGZpZWxkIGlzIGEgc3RyaW5nLCB3aXRoIGEgc3RyaW5naWZpZWQsIGVzY2FwZWQgSlNPTiBhcnJheSBvZlxuICAgKiAgICAgb2JqZWN0cyB3aXRoIGB1c2VybmFtZWAgYW5kIGBwYXNzd29yZGAgZmllbGRzLlxuICAgKiAgIC0gVGhlIHJlYXNvbiB0aGF0IHRoaXMgc2Vjb25kIGZvcm1hdCBzdG9yZXMgc3RyaW5naWZpZWQgSlNPTiBfaW5zaWRlXyBKU09OLCBpcyBkdWUgdG8gYVxuICAgKiAgICAgbGltaXRhdGlvbiBpbiBMaWZsaWcncyBgbG9hZC1zZWNyZXRzYCBsaWJyYXJ5LCB3aGljaCBvbmx5IGFsbG93cyBzdG9yaW5nIHN0cmluZyB2YWx1ZXMuXG4gICAqIC0gQXJyYXkgb2YgYmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM6XG4gICAqICAgYGBganNvblxuICAgKiAgIHsgXCJjcmVkZW50aWFsc1wiOiBcIltcXFwiPGVuY29kZWQtY3JlZGVudGlhbC0xPlxcXCIsXFxcIjxlbmNvZGVkLWNyZWRlbnRpYWwtMj5cXFwiXVwiIH1cbiAgICogICBgYGBcbiAgICogICAtIEVhY2ggZWxlbWVudCBpcyBlbmNvZGVkIGZyb20gYDx1c2VybmFtZT46PHBhc3N3b3JkPmAuXG4gICAqICAgLSBUaGUgYXJyYXkgaXMgc3RyaW5naWZpZWQgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZS5cbiAgICpcbiAgICogSWYgdGhlIHNlY3JldCB1c2VzIG9uZSBvZiB0aGUgYXJyYXkgZm9ybWF0cywgdGhlIGF1dGhvcml6ZXIgd2lsbCBtYXRjaCB0aGUgcmVxdWVzdCdzXG4gICAqIEF1dGhvcml6YXRpb24gaGVhZGVyIGFnYWluc3QgYW55IG9uZSBvZiB0aGUgY3JlZGVudGlhbHMuXG4gICAqL1xuICBjcmVkZW50aWFsc1NlY3JldE5hbWU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wczxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0ge1xuICB1c2VyUG9vbDogSVVzZXJQb29sXG5cbiAgLyoqXG4gICAqIE5hbWUgb2Ygc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgdGhhdCBzdG9yZXMgYmFzaWMgYXV0aCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogU2VlIHtAbGluayBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lfSBmb3IgdGhlIHN1cHBvcnRlZCBmb3JtYXRzLlxuICAgKi9cbiAgYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgYWNjZXNzIHRva2VuIGNsYWltcyBjb250YWluIHRoZSBnaXZlbiBzY29wZS4gT25seSBhcHBsaWNhYmxlIGZvciByZXF1ZXN0cyB0aGF0XG4gICAqIHVzZSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCAobm90IGFwcGxpY2FibGUgZm9yIGJhc2ljIGF1dGgpLlxuICAgKlxuICAgKiBXaGVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHJlc291cmNlIHNlcnZlciwgc2NvcGVzIGFyZSBvbiB0aGUgZm9ybWF0OlxuICAgKiBge3Jlc291cmNlIHNlcnZlciBpZGVudGlmaWVyfS97c2NvcGUgbmFtZX1gLCBlLmcuIGBleHRlcm5hbC92aWV3X3VzZXJzYC5cbiAgICpcbiAgICogVG8gZ2V0IG1vcmUgdHlwZSBzYWZldHkgb24gdGhpcyBwYXJhbWV0ZXIsIHNlZSB0aGUgZG9jcyBmb3IgdGhlIGBBdXRoU2NvcGVzVGAgdHlwZSBwYXJhbWV0ZXIgb25cbiAgICoge0BsaW5rIEFwaUdhdGV3YXl9LlxuICAgKi9cbiAgcmVxdWlyZWRTY29wZT86IEF1dGhTY29wZXNUXG59XG5cbnR5cGUgQ3VzdG9tTGFtYmRhQXV0aG9yaXplclByb3BzID0ge1xuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHdoZW5ldmVyIHRoZSBBUEkgR2F0ZXdheSByb3V0ZSBpcyBpbnZva2VkLCB0byBhdXRoZW50aWNhdGVcbiAgICogdGhlIHJlcXVlc3QuIFNlZSBBV1MgZG9jcyBmb3IgbW9yZSBvbiBob3cgdG8gd3JpdGUgdGhlIExhbWJkYTpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWxhbWJkYS1hdXRob3JpemVyLmh0bWxcbiAgICpcbiAgICogVGhlIGRlZmF1bHQgcmVzcG9uc2UgZm9ybWF0IHVzZWQgaXMgYEh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFYCAoZm9ybWF0IDIuMCkuIElmIHlvdSB3cml0ZVxuICAgKiB5b3VyIExhbWJkYSBpbiBUeXBlU2NyaXB0LCB0aGlzIG1lYW5zIHRoYXQgeW91ciBoYW5kbGVyIG11c3QgcmV0dXJuXG4gICAqIGBBUElHYXRld2F5U2ltcGxlQXV0aG9yaXplclJlc3VsdGAgKGZyb20gdGhlIGBhd3MtbGFtYmRhYCBwYWNrYWdlKS4gVGhlIHJlcXVlc3QgZXZlbnQgd2lsbCBhbHNvXG4gICAqIHVzZSBmb3JtYXQgMi4wIChgQVBJR2F0ZXdheVJlcXVlc3RBdXRob3JpemVyRXZlbnRWMmAgaW4gVHlwZVNjcmlwdCkuIFNlZSB0aGUgQVdTIGRvY3MgbGlua2VkXG4gICAqIGFib3ZlIGZvciBtb3JlIGRldGFpbHMgb24gdGhlc2UgZm9ybWF0cy5cbiAgICpcbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgcmVzcG9uc2UgZm9ybWF0IHR5cGUgaW5cbiAgICoge0BsaW5rIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcy5hdXRob3JpemVyUHJvcHN9LlxuICAgKlxuICAgKiBTZWUgdGhlIExhbWJkYXMgdW5kZXIgdGhlIGBhdXRob3JpemVyc2AgZm9sZGVyIG5leHQgdG8gdGhlIGBBcGlHYXRld2F5YCBjb25zdHJ1Y3QgaW5cbiAgICogYGxpZmxpZy1jZGtgIGZvciBleGFtcGxlcy5cbiAgICovXG4gIGxhbWJkYUF1dGhvcml6ZXI6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvKipcbiAgICogUHJvcHMgZm9yIHRoZSBgSHR0cExhbWJkYUF1dGhvcml6ZXJgIGNvbnN0cnVjdC4gV2UgcHJvdmlkZSBzb21lIGRpZmZlcmVudCBkZWZhdWx0czpcbiAgICogLSBgcmVzcG9uc2VUeXBlc2AgZGVmYXVsdHMgdG8gYFtIdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRV1gXG4gICAqIC0gYHJlc3VsdHNDYWNoZVR0bGAgZGVmYXVsdHMgdG8gYER1cmF0aW9uLmhvdXJzKDEpYFxuICAgKi9cbiAgYXV0aG9yaXplclByb3BzPzogUGFydGlhbDxhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplclByb3BzPlxufVxuXG4vKipcbiAqIFRoaXMgY29uc3RydWN0IHRyaWVzIHRvIHNpbXBsaWZ5IHRoZSBjcmVhdGlvbiBvZiBhbiBBUEkgR2F0ZXdheSBmb3IgYSBzZXJ2aWNlLCBieSBjb2xsZWN0aW5nIG1vc3RcbiAqIG9mIHRoZSBjb21tb24gc2V0dXAgaGVyZS5cbiAqXG4gKiBUaGUgYXBwcm9hY2ggZm9sbG93ZWQgaW4gdGhpcyBjb25zdHJ1Y3QgaXM6XG4gKiAxLiBPbmUgQVBJLUdXIHBlciBzZXJ2aWNlXG4gKiAyLiBPbmUgc3ViZG9tYWluIHBlciBBUEktR1cgLyBzZXJ2aWNlXG4gKiAzLiBVc2UgSFRUUCBBUEksIG5vdCBSRVNUXG4gKiA0LiBVc2UgYSAkZGVmYXVsdCBzdGFnZSB3aXRoIGF1dG9kZXBsb3lcbiAqIDUuIFN1cHBvcnQgbXVsdGlwbGUgcm91dGVzICh3aXRoIHBvc3NpYmxlIGAve3Byb3h5K31gIHRvIGxldCBhbGwgc3ViLXBhdGhzIHRocm91Z2gpXG4gKiA2LiBBbGxvdyBjdXN0b20gaW50ZWdyYXRpb24vYXV0aG9yaXplciBmb3IgZWFjaCByb3V0ZSwgb3IgZGVmYXVsdHMgZm9yIHRoZSB3aG9sZSBnYXRld2F5XG4gKlxuICogVGhlIHJvdXRlIGludGVncmF0aW9uIGlzIG9uZSBvZiB0aGVzZTpcbiAqIC0gQUxCIHByaXZhdGUgaW50ZWdyYXRpb24gd2l0aCBWUEMgTGluayB1c2luZyBIVFRQUyB0byB0aGUgQUxCXG4gKiAtIExhbWJkYSBpbnRlZ3JhdGlvblxuICogLSBTUVMgaW50ZWdyYXRpb25cbiAqXG4gKiAjIyMgTG9hZCBCYWxhbmNlciBTZWN1cml0eSBHcm91cFxuICpcbiAqIE5vdGUgdGhhdCB0aGUgbG9hZCBiYWxhbmNlciB1c2VkIGluIGFuIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzfSBtdXN0IGFsbG93IG91dGJvdW5kIEhUVFBTXG4gKiB0cmFmZmljIHRvIGl0cyBTZWN1cml0eUdyb3VwLiBPdGhlcndpc2UsIHRoZSBWUEMgTGluayB1c2VkIGJ5IHRoZSBBUEktR1cgY2FuJ3QgZ2V0IHRyYWZmaWMgZnJvbVxuICogdGhlIEFMQi5cbiAqXG4gKiBgYGBcbiAqIGNvbnN0IGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAoLi4uLCB7XG4gKiAgIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlLFxuICogfSlcbiAqXG4gKiBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLmFkZEVncmVzc1J1bGUoXG4gKiAgIGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAsXG4gKiAgIGVjMi5Qb3J0LnRjcCg0NDMpLFxuICogICBcIk91dGJvdW5kIHRvIHNlbGYgZm9yIEFMQiB0byBBUEktR1cgVlBDLUxpbmtcIixcbiAqIClcbiAqXG4gKiBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXcgbGlmbGlnTG9hZEJhbGFuY2VyLkxvYWRCYWxhbmNlciguLi4sXG4gKiAgIHtcbiAqICAgICBvdmVycmlkZUxvYWRCYWxhbmNlclByb3BzOiB7XG4gKiAgICAgICBzZWN1cml0eUdyb3VwOiBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICogICAgIH0sXG4gKiAgIH0sXG4gKiApXG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgQXV0aFNjb3Blc1QgVGhpcyB0eXBlIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIGltcHJvdmUgdHlwZSBzYWZldHkgb24gdGhlXG4gKiBgcmVxdWlyZWRTY29wZWAgZmllbGQgb24ge0BsaW5rIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplclByb3BzfSwgYnkgbmFycm93aW5nIHRoZSB0eXBlXG4gKiB0byBzcGVjaWZpYyBzdHJpbmdzLiBZb3UgY2FuIHRoZW4gZXh0ZW5kIHRoZSBgQXBpR2F0ZXdheWAgd2l0aCB0aGlzIHR5cGUgdG8gZW5mb3JjZSB0aG9zZSBzY29wZXNcbiAqIGFjcm9zcyB0aGUgYXBwbGljYXRpb24uIFJlbWVtYmVyIHRoYXQgYXV0aCBzY29wZXMgbXVzdCBiZSBvbiB0aGUgZm9ybWF0XG4gKiBge3Jlc291cmNlIHNlcnZlciBpZGVudGlmaWVyfS97c2NvcGUgbmFtZX1gLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBcbiAqIHR5cGUgQXV0aFNjb3BlcyA9IFwiZXh0ZXJuYWwvcmVhZF91c2Vyc1wiIHwgXCJpbnRlcm5hbC9jcmVhdGVfdXNlcnNcIlxuICpcbiAqIGV4cG9ydCBjbGFzcyBNeVByb2plY3RBcGlHYXRld2F5IGV4dGVuZHMgQXBpR2F0ZXdheTxBdXRoU2NvcGVzPiB7fVxuICogYGBgXG4gKiBUeXBlU2NyaXB0IHdpbGwgdGhlbiBlbmZvcmNlIHRoYXQgYHJlcXVpcmVkU2NvcGVgIGlzIG9uZSBvZiBgQXV0aFNjb3Blc2AsIGFuZCBwcm92aWRlXG4gKiBhdXRvLWNvbXBsZXRlLlxuICpcbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqIEBhdXRob3IgSGVybWFubiBNw7hya3JpZCA8aGVtQGxpZmxpZy5ubz5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXk8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgLyoqIFRoZSBBUEkgR2F0ZXdheSBIVFRQIEFQSS4gVGhpcyBpcyB0aGUgbWFpbiBjb25zdHJ1Y3QgZm9yIEFQSS1HVy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGh0dHBBcGk6IGFwaWd3Lkh0dHBBcGlcblxuICAvKiogVGhlIHJvdXRlcyB3aGljaCBjb25uZWN0IHRoZSB7QGxpbmsgaHR0cEFwaX0gdG8gdGhlIGJhY2tlbmQgaW50ZWdyYXRpb24ocykuICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXM6IGFwaWd3Lkh0dHBSb3V0ZVtdID0gW11cblxuICAvKiogVGhlIGRvbWFpbiB3aGljaCBjb25zdW1lcnMgbXVzdCB1c2UuKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nXG5cbiAgLyoqIEFjY2VzcyBsb2cgZ3JvdXAuICovXG4gIHB1YmxpYyByZWFkb25seSBsb2dHcm91cDogbG9ncy5Mb2dHcm91cFxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEFwaUdhdGV3YXlQcm9wczxBdXRoU2NvcGVzVD5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUPixcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuXG4gICAgQXBpR2F0ZXdheS52YWxpZGF0ZVByb3BzKHByb3BzLCBpZCwgY2RrLlN0YWNrLm9mKHRoaXMpKVxuXG4gICAgY29uc3QgY3VzdG9tRG9tYWluID0gbmV3IEFwaUdhdGV3YXlEb21haW4odGhpcywgXCJDdXN0b21Eb21haW5cIiwgcHJvcHMuZG5zKVxuICAgIHRoaXMuZG9tYWluID0gY3VzdG9tRG9tYWluLmZ1bGxEb21haW5OYW1lXG5cbiAgICBsZXQgY29yc09wdGlvbnM6IGFwaWd3LkNvcnNQcmVmbGlnaHRPcHRpb25zIHwgdW5kZWZpbmVkXG4gICAgaWYgKHByb3BzLmNvcnNBbGxvd0FsbCkge1xuICAgICAgY29yc09wdGlvbnMgPSB7XG4gICAgICAgIGFsbG93T3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgLy8gXCJUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgY2FuJ3QgYmUgd2lsZGNhcmRlZCBhbmQgYWx3YXlzIG5lZWRzIHRvIGJlIGxpc3RlZCBleHBsaWNpdGx5XCJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcbiAgICAgICAgLy8gQ29udGVudC1UeXBlIG1heSBhbHNvIHJlcXVpcmUgZXhwbGljaXQgd2hpdGVsaXN0aW5nOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjM1Njc2NDdcbiAgICAgICAgYWxsb3dIZWFkZXJzOiBbXCJBdXRob3JpemF0aW9uXCIsIFwiQ29udGVudC1UeXBlXCIsIFwiKlwiXSxcbiAgICAgICAgLy8gTm90IHVzaW5nICcqJyBoZXJlLCBiZWNhdXNlIFwiSW4gcmVxdWVzdHMgd2l0aCBjcmVkZW50aWFscywgaXQgaXMgdHJlYXRlZCBhcyB0aGUgbGl0ZXJhbFxuICAgICAgICAvLyBtZXRob2QgbmFtZSAnKicgd2l0aG91dCBzcGVjaWFsIHNlbWFudGljc1wiXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9BY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXG4gICAgICAgIGFsbG93TWV0aG9kczogW1xuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkdFVCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5QT1NULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBVVCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5QQVRDSCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5ERUxFVEUsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuT1BUSU9OUyxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5IRUFELFxuICAgICAgICBdLFxuICAgICAgICBtYXhBZ2U6IGNkay5EdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBhY3R1YWwgQVBJLiBUaGlzIGhvbGRzIHRoZSByb3V0ZXMsIGF1dGhvcml6ZXJzIGFuZCBpbnRlZ3JhdGlvbnMuXG4gICAgY29uc3QgYXBpID0gbmV3IGFwaWd3Lkh0dHBBcGkodGhpcywgXCJIdHRwQXBpLVwiICsgcHJvcHMuZG5zLnN1YmRvbWFpbiwge1xuICAgICAgLy8gZGVmYXVsdEludGVncmF0aW9uOiBkZWZhdWx0SW50ZWdyYXRpb24sIC8vIFRoaXMgaXMgZm9yIGEgY2F0Y2gtYWxsICRkZWZhdWx0IHJvdXRlXG4gICAgICBkZXNjcmlwdGlvbjogYEFuIEhUVFAgQVBJIGZvciAke3Byb3BzLmRucy5zdWJkb21haW59LiR7cHJvcHMuZG5zLmhvc3RlZFpvbmUuem9uZU5hbWV9LmAsXG4gICAgICBkaXNhYmxlRXhlY3V0ZUFwaUVuZHBvaW50OiB0cnVlLCAvLyBGb3JjZSBleHRlcm5hbHMgdG8gZ28gdGhyb3VnaCBjdXN0b20gZG9tYWluLiBNVVNUIGJlIHRydWUgd2hlbiB1c2luZyBNdXR1YWwgVExTLCBmb3Igc2VjdXJpdHkgcmVhc29uc1xuICAgICAgY3JlYXRlRGVmYXVsdFN0YWdlOiB0cnVlLFxuICAgICAgZGVmYXVsdERvbWFpbk1hcHBpbmc6IHsgZG9tYWluTmFtZTogY3VzdG9tRG9tYWluLmFwaUd3RG9tYWluTmFtZSB9LFxuICAgICAgY29yc1ByZWZsaWdodDogY29yc09wdGlvbnMsXG4gICAgICAuLi5wcm9wcz8ucHJvcHNPdmVycmlkZT8uaHR0cEFwaSxcbiAgICB9KVxuICAgIHRoaXMuaHR0cEFwaSA9IGFwaVxuXG4gICAgY29uc3Qgc3RhZ2UgPSBhcGkuZGVmYXVsdFN0YWdlPy5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhcGlndy5DZm5TdGFnZVxuXG4gICAgY29uc3QgbG9ncyA9IG5ldyBBcGlHYXRld2F5QWNjZXNzTG9ncyhcbiAgICAgIHRoaXMsXG4gICAgICBcIkFjY2Vzc0xvZ3NcIixcbiAgICAgIHN0YWdlLFxuICAgICAgcHJvcHMuYWNjZXNzTG9ncyxcbiAgICApXG4gICAgdGhpcy5sb2dHcm91cCA9IGxvZ3MubG9nR3JvdXBcblxuICAgIHN0YWdlLmRlZmF1bHRSb3V0ZVNldHRpbmdzID0ge1xuICAgICAgLi4uc3RhZ2UuZGVmYXVsdFJvdXRlU2V0dGluZ3MsXG4gICAgICBkZXRhaWxlZE1ldHJpY3NFbmFibGVkOiBwcm9wcy5kZXRhaWxlZE1ldHJpY3MgPz8gdHJ1ZSxcbiAgICAgIHRocm90dGxpbmdCdXJzdExpbWl0OiBwcm9wcy50aHJvdHRsaW5nPy5idXJzdCwgLy8gRGVmYXVsdCBmb3IgYWNjb3VudCBpcyA1XzAwMFxuICAgICAgdGhyb3R0bGluZ1JhdGVMaW1pdDogcHJvcHMudGhyb3R0bGluZz8ucmF0ZSwgLy8gRGVmYXVsdCBmb3IgYWNjb3VudCBpcyAxMF8wMDBcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0SW50ZWdyYXRpb24gPSBwcm9wcy5kZWZhdWx0SW50ZWdyYXRpb25cbiAgICAgID8gdGhpcy5jcmVhdGVJbnRlZ3JhdGlvbihwcm9wcy5kZWZhdWx0SW50ZWdyYXRpb24sIHByb3BzLmRucylcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBkZWZhdWx0QXV0aG9yaXplciA9IHByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uXG4gICAgICA/IHRoaXMuY3JlYXRlQXV0aG9yaXplcihcIkRlZmF1bHRBdXRob3JpemVyXCIsIHByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgcHJvcHMucm91dGVzKSB7XG4gICAgICBsZXQgaW50ZWdyYXRpb246IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uXG4gICAgICBpZiAocm91dGUuaW50ZWdyYXRpb24pIHtcbiAgICAgICAgaW50ZWdyYXRpb24gPSB0aGlzLmNyZWF0ZUludGVncmF0aW9uKHJvdXRlLmludGVncmF0aW9uLCBwcm9wcy5kbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlZ3JhdGlvbiA9IGRlZmF1bHRJbnRlZ3JhdGlvbiEgLy8gVmVyaWZpZWQgaW4gdmFsaWRhdGVQcm9wc1xuICAgICAgfVxuXG4gICAgICBsZXQgYXV0aG9yaXplcjogYXBpZ3cuSUh0dHBSb3V0ZUF1dGhvcml6ZXIgfCB1bmRlZmluZWRcbiAgICAgIGlmIChyb3V0ZS5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGF1dGhvcml6ZXIgPSB0aGlzLmNyZWF0ZUF1dGhvcml6ZXIoXG4gICAgICAgICAgLy8gVXNpbmcgdGhlIHJvdXRlIHBhdGggaGVyZSBjYXVzZWQgQ2xvdWRGb3JtYXRpb24gdG8gZmFpbCBkdWUgdG8gcmVzb3VyY2UgbmFtZXMgYmVpbmcgdG9vXG4gICAgICAgICAgLy8gbG9uZy4gVGhlcmVmb3JlLCB3ZSBub3cgaGFzaCB0aGUgcm91dGUgcGF0aCB0byBnZXQgYSBzaG9ydGVyIG5hbWUuXG4gICAgICAgICAgYFJvdXRlQXV0aG9yaXplciR7c2hvcnRIYXNoKGAke3JvdXRlLm1ldGhvZCA/PyBcIlwifSR7cm91dGUucGF0aH1gKX1gLFxuICAgICAgICAgIHJvdXRlLmF1dGhvcml6YXRpb24sXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF1dGhvcml6ZXIgPSBkZWZhdWx0QXV0aG9yaXplclxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3V0ZVBhdGhzID0gW3JvdXRlLnBhdGhdXG4gICAgICBpZiAocm91dGUuaW5jbHVkZVN1YnBhdGhzID09PSB0cnVlKSB7XG4gICAgICAgIC8vIElmIHdlIGluY2x1ZGUgc3ViLXBhdGhzLCB3ZSBhZGQgYW4gYWRkaXRpb25hbCByb3V0ZSB3aXRoIC97cHJveHkrfSAodGhlICsgbWVhbnMgaXQgd2lsbFxuICAgICAgICAvLyBtYXRjaCBhbGwgc3Vicm91dGVzKS4gV2Ugd2FudCBib3RoIHRoaXMgcm91dGUgYW5kIHRoZSBub3JtYWwgcm91dGUgd2l0aG91dCAve3Byb3h5K30sXG4gICAgICAgIC8vIHNpbmNlIC97cHJveHkrfSB3aWxsIG9ubHkgbWF0Y2ggdGhlIGJhc2UgcGF0aCB3aXRoIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICByb3V0ZVBhdGhzLnB1c2goXG4gICAgICAgICAgcm91dGUucGF0aCArIChyb3V0ZS5wYXRoID09PSBcIi9cIiA/IFwiXCIgOiBcIi9cIikgKyBcIntwcm94eSt9XCIsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByb3V0ZVBhdGggb2Ygcm91dGVQYXRocykge1xuICAgICAgICAvLyBUaGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIEdhdGV3YXkgY29uc3RydWN0IGhhZCBhIHNpbmdsZSByb3V0ZSB3aXRoIHRoZSBJRFxuICAgICAgICAvLyAnRGVmYXVsdFByb3h5Um91dGUnLCBhbmQgYWxsIGdhdGV3YXlzIHdlIHVzZWQgZXhwb3NlZCB0aGUgcm91dGUgL3twcm94eSt9LiBXaGVuIHRyeWluZyB0b1xuICAgICAgICAvLyBjaGFuZ2UgdG8gdGhpcyBuZXcgdmVyc2lvbiBvZiB0aGUgY29uc3RydWN0LCBkZXBsb3ltZW50IGZhaWxlZCBmb3IgZ2F0ZXdheXMgZXhwb3NpbmdcbiAgICAgICAgLy8gL3twcm94eSt9LCBiZWNhdXNlIFwiYSByb3V0ZSB3aXRoIHRoYXQga2V5IFtpLmUuIHBhdGggKyBtZXRob2RdIGFscmVhZHkgZXhpc3RzXCIuIFdlIHRoaW5rXG4gICAgICAgIC8vIHRoaXMgbWF5IGJlIGJlY2F1c2Ugd2UgdXNlZCB0aGUgc2FtZSByb3V0ZSBwYXRoLCBidXQgd2l0aCBhIG5ldyByb3V0ZSBJRCwgY2F1c2luZ1xuICAgICAgICAvLyBjb25mdXNpb24gZm9yIENsb3VkRm9ybWF0aW9uLiBTbyB3ZSBrZWVwIHRoZSBvbGQgcm91dGUgSUQgaGVyZSBmb3IgL3twcm94eSt9LlxuICAgICAgICBjb25zdCByb3V0ZUlkID1cbiAgICAgICAgICByb3V0ZVBhdGggPT09IFwiL3twcm94eSt9XCIgPyBcIkRlZmF1bHRQcm94eVJvdXRlXCIgOiBgUm91dGUtJHtyb3V0ZVBhdGh9YFxuXG4gICAgICAgIHRoaXMucm91dGVzLnB1c2goXG4gICAgICAgICAgbmV3IGFwaWd3Lkh0dHBSb3V0ZSh0aGlzLCByb3V0ZUlkLCB7XG4gICAgICAgICAgICBodHRwQXBpOiBhcGksXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbjogaW50ZWdyYXRpb24sXG4gICAgICAgICAgICBhdXRob3JpemVyOiBhdXRob3JpemVyLFxuICAgICAgICAgICAgcm91dGVLZXk6IGFwaWd3Lkh0dHBSb3V0ZUtleS53aXRoKFxuICAgICAgICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgICAgICAgIHJvdXRlLm1ldGhvZFxuICAgICAgICAgICAgICAgID8gYXBpZ3cuSHR0cE1ldGhvZFtyb3V0ZS5tZXRob2RdXG4gICAgICAgICAgICAgICAgOiBhcGlndy5IdHRwTWV0aG9kLkFOWSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YWdSZXNvdXJjZXModGhpcywgKCkgPT4gKHsgc2VydmljZTogcHJvcHMuZG5zLnN1YmRvbWFpbiB9KSlcbiAgfVxuXG4gIC8qKiBAdGhyb3dzIEVycm9yICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlUHJvcHMoXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlQcm9wcyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHN0YWNrOiBjZGsuU3RhY2ssXG4gICkge1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgcHJvcHMucm91dGVzKSB7XG4gICAgICBpZiAoIXJvdXRlLmludGVncmF0aW9uICYmICFwcm9wcy5kZWZhdWx0SW50ZWdyYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyBpbnRlZ3JhdGlvbiBkZWZpbmVkIGZvciByb3V0ZSAnJHtyb3V0ZS5wYXRofScsIGFuZCBubyBkZWZhdWx0IGludGVncmF0aW9uIHNwZWNpZmllZCBmb3IgdGhlIGdhdGV3YXlgLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAoIXJvdXRlLmF1dGhvcml6YXRpb24gJiYgIXByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm8gYXV0aG9yaXphdGlvbiBkZWZpbmVkIGZvciByb3V0ZSAnJHtyb3V0ZS5wYXRofScsIGFuZCBubyBkZWZhdWx0IGF1dGhvcml6YXRpb24gc3BlY2lmaWVkIGZvciB0aGUgZ2F0ZXdheWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICghcm91dGUucGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcGF0aCAnJHtyb3V0ZS5wYXRofSc6IHBhdGhzIG11c3QgYmVnaW4gd2l0aCAnLycgKHVzZSAnLycgZm9yIHJvb3QgcGF0aClgLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAocm91dGUucGF0aCAhPT0gXCIvXCIgJiYgcm91dGUucGF0aC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIHBhdGggJyR7cm91dGUucGF0aH0nOiBwYXRocyBjYW5ub3QgZW5kIHdpdGggJy8nIChleGNlcHQgcm9vdCBwYXRoKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcm91dGUuaW50ZWdyYXRpb24/LnR5cGUgPT09IFwiQUxCXCIgJiZcbiAgICAgICAgcm91dGUuaW50ZWdyYXRpb24uaG9zdE5hbWUuc3RhcnRzV2l0aChcImh0dHBzOlwiKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGFsYkludGVncmF0aW9uLmhvc3RIdHRwc05hbWUgc2hvdWxkIG5vdCBpbmNsdWRlIGEgcHJvdG9jb2w6ICR7cm91dGUuaW50ZWdyYXRpb24uaG9zdE5hbWV9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMuZG5zLnN1YmRvbWFpbiA9PT0gXCJcIiB8fCBwcm9wcy5kbnMuc3ViZG9tYWluLmluY2x1ZGVzKFwiIFwiKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3ViZG9tYWluIG11c3QgYmUgc2V0LCBhbmQgbm90IGNvbnRhaW4gc3BhY2VzOiAke3Byb3BzLmRucy5zdWJkb21haW59YCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLnRocm90dGxpbmc/LmJ1cnN0ICYmIHByb3BzLnRocm90dGxpbmcuYnVyc3QgPiA1XzAwMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBg4pqg77iPIFlvdXIgdGhyb3R0bGluZyBidXJzdCBsaW1pdCAnJHtwcm9wcy50aHJvdHRsaW5nLmJ1cnN0fScgaXMgaGlnaGVyIHRoYW4gdGhlIEFXUyBBY2NvdW50IGxpbWl0LiBNYWtlIHN1cmUgeW91ciBhY2NvdW50IGhhcyB1cGdyYWRlZCB0aGlzIHF1b3RhISBgLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgaWQsXG4gICAgICApXG4gICAgfVxuICAgIGlmIChwcm9wcy50aHJvdHRsaW5nPy5yYXRlICYmIHByb3BzLnRocm90dGxpbmcucmF0ZSA+IDEwXzAwMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBg4pqg77iPIFlvdXIgdGhyb3R0bGluZyByYXRlIGxpbWl0ICcke3Byb3BzLnRocm90dGxpbmcucmF0ZX0nIGlzIGhpZ2hlciB0aGFuIHRoZSBBV1MgQWNjb3VudCBsaW1pdC4gTWFrZSBzdXJlIHlvdXIgYWNjb3VudCBoYXMgdXBncmFkZWQgdGhpcyBxdW90YSEgYCxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGlkLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXplciBvbmx5IGFjY2VwdHMgcmVxdWVzdHMgZnJvbSBleHRlcm5hbCB1c2VycyB0aGF0IGFyZSBhdXRob3JpemVkLlxuICAgKiBVbmF1dGhvcml6ZWQgdXNlcnMgYXJlIHN0b3BwZWQgaW4gdGhlIEFQSS1HVywgYW5kIG5vdCBmb3J3YXJkZWQgdG8gdGhlIGludGVncmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBdXRob3JpemVyPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nLFxuICAgIGF1dGhvcml6YXRpb246IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD4sXG4gICk6IGFwaWd3LklIdHRwUm91dGVBdXRob3JpemVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGF1dGhvcml6YXRpb24udHlwZSkge1xuICAgICAgY2FzZSBcIk5PTkVcIjoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBjYXNlIFwiSUFNXCI6IHtcbiAgICAgICAgLy8gQVBJIEdhdGV3YXkgaW52b2tlcyB5b3VyIEFQSSByb3V0ZSBvbmx5IGlmIHRoZSBjbGllbnQgaGFzIGV4ZWN1dGUtYXBpIHBlcm1pc3Npb24gZm9yIHRoZSByb3V0ZS5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBoYXMgdG8gdXNlIEFXUyBTaWdWNCB0byBpZGVudGlmeSB0aGVtc2VsdmVzIGluIHRoZSByZXF1ZXN0LlxuICAgICAgICAvLyBSZWFkIHRoaXMgcGFnZSBmb3IgaGVscCB3aXRoIElBTSBhbmQgQVBJLUdXIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZWN1cml0eV9pYW1fc2VydmljZS13aXRoLWlhbS5odG1sXG4gICAgICAgIC8vIE5vdGUgdGhhdCBbcmVzb3VyY2UgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0IGZvciBIVFRQXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktYWNjZXNzLWNvbnRyb2wtaWFtLmh0bWwpXG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cElhbUF1dGhvcml6ZXIoKVxuICAgICAgfVxuICAgICAgY2FzZSBcIkNPR05JVE9fVVNFUl9QT09MXCI6IHtcbiAgICAgICAgLy8gV2UgdXNlIGEgY3VzdG9tIGxhbWJkYSBhdXRob3JpemVyIGhlcmUgaW5zdGVhZCBvZiB0aGUgYEh0dHBVc2VyUG9vbEF1dGhvcml6ZXJgIHByb3ZpZGVkXG4gICAgICAgIC8vIGJ5IENESywgaW4gb3JkZXIgdG8gc3VwcG9ydCBgcmVxdWlyZWRTY29wZWAgYW5kIHNldHRpbmcgb2YgY3VzdG9tIGNvbnRleHQgdmFyaWFibGVzLlxuICAgICAgICBjb25zdCBhdXRob3JpemVyID0gbmV3IENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpZCArIFwiTGFtYmRhXCIsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXIoaWQsIGF1dGhvcml6ZXIubGFtYmRhLCB7XG4gICAgICAgICAgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplci5yZXNwb25zZVR5cGVzLFxuICAgICAgICAgIC8vIE1heCAxaCwgb3IgZGlzYWJsZWQgKDBzKS4gVGhlIHZhbHVlIG9ubHkgbWF0dGVycyB3aGVuIGludmFsaWRhdGluZy9keW5hbWljIGNyZWRlbnRpYWxzXG4gICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOiBjZGsuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXNlIFwiQkFTSUNfQVVUSFwiOiB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQmFzaWNBdXRoQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5taW51dGVzKDMwKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDT0dOSVRPX1VTRVJfUE9PTF9PUl9CQVNJQ19BVVRIXCI6IHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpZCArIFwiTGFtYmRhXCIsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXIoaWQsIGF1dGhvcml6ZXIubGFtYmRhLCB7XG4gICAgICAgICAgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplci5yZXNwb25zZVR5cGVzLFxuICAgICAgICAgIC8vIE1heCAxaCwgb3IgZGlzYWJsZWQgKDBzKS4gVGhlIHZhbHVlIG9ubHkgbWF0dGVycyB3aGVuIGludmFsaWRhdGluZy9keW5hbWljIGNyZWRlbnRpYWxzXG4gICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOiBjZGsuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXNlIFwiQ1VTVE9NX0xBTUJEQV9BVVRIT1JJWkVSXCI6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBhdXRob3JpemF0aW9uLmxhbWJkYUF1dGhvcml6ZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uYXV0aG9yaXphdGlvbi5hdXRob3JpemVyUHJvcHMsXG4gICAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcz8ucmVzcG9uc2VUeXBlcyA/PyBbXG4gICAgICAgICAgICAgIGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlc3VsdHNDYWNoZVR0bDpcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbi5hdXRob3JpemVyUHJvcHM/LnJlc3VsdHNDYWNoZVR0bCA/P1xuICAgICAgICAgICAgICBjZGsuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW50ZWdyYXRpb24oXG4gICAgaW50ZWdyYXRpb246IEludGVncmF0aW9uUHJvcHMsXG4gICAgZG5zOiBBcGlHYXRld2F5UHJvcHNbXCJkbnNcIl0sXG4gICk6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uIHtcbiAgICBzd2l0Y2ggKGludGVncmF0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJBTEJcIjoge1xuICAgICAgICAvLyBUaGUgVlBDTGluayBjb25uZWN0cyB0aGUgaW50ZWdyYXRpb24gaW50byB0aGUgQUxCJ3MgVlBDLiBNdXN0IGJlIG1hbnVhbGx5IGNyZWF0ZWQgd2hlblxuICAgICAgICAvLyB0aGUgVlBDIGlzIGltcG9ydGVkLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHVzaW5nIENvcmVQbGF0Zm9ybUNvbnN1bWVyLlxuICAgICAgICBjb25zdCB2cGNMaW5rID0gbmV3IGFwaWd3LlZwY0xpbmsodGhpcywgXCJBbGJWcGNMaW5rXCIsIHtcbiAgICAgICAgICB2cGM6IGludGVncmF0aW9uLnZwYyxcbiAgICAgICAgICBzZWN1cml0eUdyb3VwczogW2ludGVncmF0aW9uLnNlY3VyaXR5R3JvdXBdLFxuICAgICAgICAgIHN1Ym5ldHM6IGludGVncmF0aW9uLnZwYy5zZWxlY3RTdWJuZXRzKCksIC8vIFRoaXMgY29ycmVjdGx5IHNlbGVjdHMgdGhlIHByaXZhdGUgc3VibmV0c1xuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck1hcHBpbmcgPSBuZXcgYXBpZ3cuUGFyYW1ldGVyTWFwcGluZygpXG4gICAgICAgICAgLyoqIFNlZSB7QGxpbmsgQWxiSW50ZWdyYXRpb25Qcm9wcy5ob3N0TmFtZX0gKi9cbiAgICAgICAgICAub3ZlcndyaXRlSGVhZGVyKFxuICAgICAgICAgICAgXCJIb3N0XCIsXG4gICAgICAgICAgICAvLyBUaGUgSG9zdCBoZWFkZXIgY2FuIE5PVCB1c2UgZHluYW1pYyBtYXBwaW5nLCBsaWtlICRjb250ZXh0LmRvbWFpbk5hbWUgZXRjLlxuICAgICAgICAgICAgYXBpZ3cuTWFwcGluZ1ZhbHVlLmN1c3RvbShpbnRlZ3JhdGlvbi5ob3N0TmFtZSksXG4gICAgICAgICAgKVxuICAgICAgICBpZiAoaW50ZWdyYXRpb24ubWFwUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW50ZWdyYXRpb24ubWFwUGFyYW1ldGVycyhwYXJhbWV0ZXJNYXBwaW5nKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbnMuSHR0cEFsYkludGVncmF0aW9uKFxuICAgICAgICAgIFwiQWxiSW50ZWdyYXRpb24tXCIgKyBkbnMuc3ViZG9tYWluLFxuICAgICAgICAgIGludGVncmF0aW9uLmxvYWRCYWxhbmNlckxpc3RlbmVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlY3VyZVNlcnZlck5hbWU6IGludGVncmF0aW9uLmhvc3ROYW1lLFxuICAgICAgICAgICAgdnBjTGluazogdnBjTGluayxcbiAgICAgICAgICAgIG1ldGhvZDogYXBpZ3cuSHR0cE1ldGhvZC5BTlksXG4gICAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJMYW1iZGFcIjoge1xuICAgICAgICByZXR1cm4gbmV3IGludGVncmF0aW9ucy5IdHRwTGFtYmRhSW50ZWdyYXRpb24oXG4gICAgICAgICAgXCJMYW1iZGFJbnRlZ3JhdGlvblwiLFxuICAgICAgICAgIGludGVncmF0aW9uLmxhbWJkYSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogYXBpZ3cuUGF5bG9hZEZvcm1hdFZlcnNpb24uVkVSU0lPTl8yXzAsXG4gICAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSBcIlNRU1wiOiB7XG4gICAgICAgIC8vIEFQSS1HVyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBTUVMgYnkgZGVmYXVsdFxuICAgICAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYEFwaUd3VG8ke2ludGVncmF0aW9uLnF1ZXVlLm5vZGUuaWR9U2VydmljZVJvbGVgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICBcIkFsbG93cyBBUEktR1cgdG8gYWRkIG1lc3NhZ2VzIHRvIFwiICsgaW50ZWdyYXRpb24ucXVldWUucXVldWVBcm4sXG4gICAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGludGVncmF0aW9uLnF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHJvbGUpXG5cbiAgICAgICAgbGV0IHBhcmFtZXRlck1hcHBpbmcgPSBuZXcgYXBpZ3cuUGFyYW1ldGVyTWFwcGluZygpXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWRldmVsb3AtaW50ZWdyYXRpb25zLWF3cy1zZXJ2aWNlcy1yZWZlcmVuY2UuaHRtbCNTUVMtU2VuZE1lc3NhZ2VcbiAgICAgICAgICAuY3VzdG9tKFwiUXVldWVVcmxcIiwgaW50ZWdyYXRpb24ucXVldWUucXVldWVVcmwpXG4gICAgICAgICAgLmN1c3RvbShcIk1lc3NhZ2VCb2R5XCIsIFwiJHJlcXVlc3QuYm9keVwiKVxuICAgICAgICAgIC5jdXN0b20oXCJSZWdpb25cIiwgXCJldS13ZXN0LTFcIikgLy8gQ2hhbmdlIHRoaXMgaWYgdGhlIFNRUyBxdWV1ZSBpcyBpbiBhbm90aGVyIHJlZ2lvbiFcblxuICAgICAgICBpZiAoaW50ZWdyYXRpb24ubWVzc2FnZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nID0gcGFyYW1ldGVyTWFwcGluZy5jdXN0b20oXG4gICAgICAgICAgICBcIk1lc3NhZ2VBdHRyaWJ1dGVzXCIsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShpbnRlZ3JhdGlvbi5tZXNzYWdlQXR0cmlidXRlcyksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTcXNSb3V0ZUludGVncmF0aW9uKFwiU3FzSW50ZWdyYXRpb25cIiwge1xuICAgICAgICAgIHR5cGU6IGFwaWd3Lkh0dHBJbnRlZ3JhdGlvblR5cGUuQVdTX1BST1hZLFxuICAgICAgICAgIHN1YnR5cGU6IGFwaWd3Lkh0dHBJbnRlZ3JhdGlvblN1YnR5cGUuU1FTX1NFTkRfTUVTU0FHRSxcbiAgICAgICAgICBjcmVkZW50aWFsczogYXBpZ3cuSW50ZWdyYXRpb25DcmVkZW50aWFscy5mcm9tUm9sZShyb2xlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nOiBwYXJhbWV0ZXJNYXBwaW5nLFxuICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzFfMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJFdmVudEJyaWRnZVwiOiB7XG4gICAgICAgIC8vIEFQSS1HVyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBwdXQgZXZlbnRzIHRvIGV2ZW50IGJ1cyBieSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgQXBpR3dUbyR7aW50ZWdyYXRpb24uZXZlbnRCdXMubm9kZS5pZH1TZXJ2aWNlUm9sZWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBBbGxvd3MgQVBJLUdXIHRvIHB1dCBldmVudHMgdG8gJHtpbnRlZ3JhdGlvbi5ldmVudEJ1cy5ldmVudEJ1c0Fybn1gLFxuICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJhcGlnYXRld2F5LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBpbnRlZ3JhdGlvbi5ldmVudEJ1cy5ncmFudFB1dEV2ZW50c1RvKHJvbGUpXG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0RXZlbnRzUmVxdWVzdEVudHJ5Lmh0bWxcbiAgICAgICAgICAuY3VzdG9tKFwiRXZlbnRCdXNOYW1lXCIsIGludGVncmF0aW9uLmV2ZW50QnVzLmV2ZW50QnVzTmFtZSlcbiAgICAgICAgICAuY3VzdG9tKFwiRGV0YWlsXCIsIFwiJHJlcXVlc3QuYm9keVwiKVxuICAgICAgICAgIC5jdXN0b20oXCJEZXRhaWxUeXBlXCIsIGludGVncmF0aW9uLmRldGFpbFR5cGUpXG4gICAgICAgICAgLmN1c3RvbShcIlNvdXJjZVwiLCBcIiRjb250ZXh0LmFwaUlkXCIpXG5cbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudEJyaWRnZVJvdXRlSW50ZWdyYXRpb24oXCJFdmVudEJyaWRnZUludGVncmF0aW9uXCIsIHtcbiAgICAgICAgICB0eXBlOiBhcGlndy5IdHRwSW50ZWdyYXRpb25UeXBlLkFXU19QUk9YWSxcbiAgICAgICAgICBzdWJ0eXBlOiBhcGlndy5IdHRwSW50ZWdyYXRpb25TdWJ0eXBlLkVWRU5UQlJJREdFX1BVVF9FVkVOVFMsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IGFwaWd3LkludGVncmF0aW9uQ3JlZGVudGlhbHMuZnJvbVJvbGUocm9sZSksXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZzogcGFyYW1ldGVyTWFwcGluZyxcbiAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogYXBpZ3cuUGF5bG9hZEZvcm1hdFZlcnNpb24uVkVSU0lPTl8xXzAsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBhIGdyYW50YWJsZSB0YXJnZXQgKHJvbGUsIHVzZXIgZXRjLikgcGVybWlzc2lvbiB0byBpbnZva2UgdGhlIEFQSS5cbiAgICogT25seSB3b3JrcyB3aGVuIHVzaW5nIGBJQU1gIGFzIHtAbGluayBBcGlHYXRld2F5Um91dGUuYXV0aG9yaXphdGlvbn0uXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgQSBncmFudGFibGUsIGxpa2Uge0BsaW5rIGlhbS5Sb2xlfVxuICAgKi9cbiAgcHVibGljIGdyYW50SW52b2tlKHRhcmdldDogaWFtLklHcmFudGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IHJvdXRlUHJvcHMgb2YgdGhpcy5wcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGNvbnN0IGF1dGhUeXBlID1cbiAgICAgICAgcm91dGVQcm9wcy5hdXRob3JpemF0aW9uPy50eXBlID8/IHRoaXMucHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24/LnR5cGVcblxuICAgICAgaWYgKGF1dGhUeXBlICE9PSBcIklBTVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdyYW50IGludm9rZSBmb3IgYW4gQVBJIEdhdGV3YXkgd2hlbiBub3QgdXNpbmcgSUFNIGF1dGggKGZvdW5kIGF1dGggJyR7YXV0aFR5cGV9JyBvbiByb3V0ZSAnJHtyb3V0ZVByb3BzLnBhdGh9JykgWyR7Y2RrLlN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX1dYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgdGhpcy5yb3V0ZXMpIHtcbiAgICAgIHJvdXRlLmdyYW50SW52b2tlKHRhcmdldClcbiAgICB9XG4gIH1cbn1cblxuLyoqIEFjdHMgYXMgZ2x1ZSAoYmV0d2VlbiB0aGUgaW50ZWdyYXRpb24gcHJvcHMgYW5kIHRoZSBIdHRwQXBpKSB3aGVuIGNyZWF0aW5nIGFuIFNxc0ludGVncmF0aW9uLiAqL1xuY2xhc3MgU3FzUm91dGVJbnRlZ3JhdGlvbiBleHRlbmRzIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgdXNlZCBpbiB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0XG4gICAqICAgIGNyZWF0ZWQgaW50ZXJuYWxseSBieSB7QGxpbmsgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24uX2JpbmRUb1JvdXRlfS5cbiAgICogICAgW1NvdXJjZSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzIxKVxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25Qcm9wcyBUaGUgcHJvcHMgdG8gcGFzcyB0byB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIGludGVncmF0aW9uUHJvcHM6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHNlbmRzIHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBmb3IgY3JlYXRpbmcgYSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSB0byB0aGVcbiAgICoge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9ufS5cbiAgICovXG4gIGJpbmQoKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25Db25maWcge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzE5XG4gICAgcmV0dXJuIHRoaXMuaW50ZWdyYXRpb25Qcm9wc1xuICB9XG59XG5cbi8qKiBBY3RzIGFzIGdsdWUgKGJldHdlZW4gdGhlIGludGVncmF0aW9uIHByb3BzIGFuZCB0aGUgSHR0cEFwaSkgd2hlbiBjcmVhdGluZyBhbiBFdmVudEJyaWRnZSBpbnRlZ3JhdGlvbi4gKi9cbmNsYXNzIEV2ZW50QnJpZGdlUm91dGVJbnRlZ3JhdGlvbiBleHRlbmRzIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgdXNlZCBpbiB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0XG4gICAqICAgIGNyZWF0ZWQgaW50ZXJuYWxseSBieSB7QGxpbmsgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24uX2JpbmRUb1JvdXRlfS5cbiAgICogICAgW1NvdXJjZSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzIxKVxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25Qcm9wcyBUaGUgcHJvcHMgdG8gcGFzcyB0byB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIGludGVncmF0aW9uUHJvcHM6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHNlbmRzIHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBmb3IgY3JlYXRpbmcgYSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSB0byB0aGVcbiAgICoge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9ufS5cbiAgICovXG4gIGJpbmQoKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25Db25maWcge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzE5XG4gICAgcmV0dXJuIHRoaXMuaW50ZWdyYXRpb25Qcm9wc1xuICB9XG59XG5cbi8qKlxuICogV2hlbiB1c2luZyBgTm9kZWpzRnVuY3Rpb25gIHdpdGggYGVudHJ5YCwgd2UgcG9pbnQgQ0RLIHRvIGEgZmlsZSB3aXRoIG91ciBsYW1iZGEgY29kZS4gVGhpcyBjYW5cbiAqIGVpdGhlciBiZSBhIFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCBmaWxlLiBXaGVuIGNyZWF0aW5nIGNvbnN0cnVjdHMgaW4gdGVzdHMgaW5zaWRlIHRoaXMgbGlicmFyeSxcbiAqIHRoZSBlbnRyeSB3aWxsIHBvaW50IHRvIHRoZSBUeXBlU2NyaXB0IGZpbGUgaW4gdGhlIHNvdXJjZSBjb2RlLiBCdXQgd2hlbiBhIGxpYnJhcnkgY29uc3VtZXIgdXNlc1xuICogdGhpcywgaXQgd2lsbCBpbnN0ZWFkIHBvaW50IHRvIHRoZSB0cmFuc3BpbGVkIEphdmFTY3JpcHQgZmlsZS4gU28gdG8gc2V0IHRoZSBjb3JyZWN0IGZpbGVcbiAqIGV4dGVuc2lvbiwgd2UgbXVzdCBjaGVjayBpZiB3ZSdyZSBiZWluZyBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIFR5cGVTY3JpcHQgc291cmNlIGNvZGVcbiAqIChzcmMvYXBpLWdhdGV3YXkpLCBvdGhlcndpc2Ugd2UncmUgYmVpbmcgcnVuIGJ5IGEgY29uc3VtZXIgYXMgdHJhbnNwaWxlZCBKYXZhU2NyaXB0LlxuICovXG5jb25zdCBhdXRob3JpemVyRmlsZUV4dGVuc2lvbiA9IF9fZGlybmFtZS5lbmRzV2l0aChcInNyYy9hcGktZ2F0ZXdheVwiKVxuICA/IFwidHNcIlxuICA6IFwianNcIlxuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyIGFuZFxuICogdmVyaWZpZXMgdGhlIHRva2VuIGFnYWluc3QgYSBDb2duaXRvIHVzZXIgcG9vbC5cbiAqL1xuY2xhc3MgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplcjxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcsXG4+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFVzZSBzaW1wbGUgcmVzcG9uc2UgdHlwZSAoYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gKSwgYXMgb3Bwb3NlZCB0byByZXR1cm5pbmcgYW4gSUFNXG4gICAqIFBvbGljeSBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPixcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5sYW1iZGEgPSBuZXcgbGFtYmRhTm9kZWpzLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiQXV0aG9yaXplckZ1bmN0aW9uXCIsIHtcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgYGF1dGhvcml6ZXJzL2NvZ25pdG8tdXNlci1wb29sLWF1dGhvcml6ZXIuJHthdXRob3JpemVyRmlsZUV4dGVuc2lvbn1gLFxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBbXCJVU0VSX1BPT0xfSURcIl06IHByb3BzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgIFtcIlJFUVVJUkVEX1NDT1BFXCJdOiBwcm9wcy5yZXF1aXJlZFNjb3BlID8/IFwiXCIsXG4gICAgICAgIFtcIkNSRURFTlRJQUxTX0ZPUl9JTlRFUk5BTF9BVVRIT1JJWkFUSU9OXCJdOlxuICAgICAgICAgIHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uXG4gICAgICAgICAgICA/IHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb24pIHtcbiAgICAgIHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgaWQgKyBcIkJhc2ljQXV0aFNlY3JldFwiLFxuICAgICAgICBwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvbixcbiAgICAgICkuZ3JhbnRSZWFkKHRoaXMubGFtYmRhKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gXG4gKiBoZWFkZXIgYW5kIHZlcmlmaWVzIHRoZSBjcmVkZW50aWFscyBhZ2FpbnN0IGEgZ2l2ZW4gc2VjcmV0LlxuICovXG5jbGFzcyBCYXNpY0F1dGhBdXRob3JpemVyIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLy8gU2ltcGxlIGlzIGB7IGlzQXV0aG9yaXplZDogdHJ1ZS9mYWxzZSB9YCwgYXMgb3Bwb3NlZCB0byByZXR1cm5pbmcgYW4gSUFNIFBvbGljeSBkb2N1bWVudFxuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZVtdID0gW1xuICAgIGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFLFxuICBdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5sYW1iZGEgPSBuZXcgbGFtYmRhTm9kZWpzLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiQmFzaWNBdXRoTGFtYmRhXCIsIHtcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgYGF1dGhvcml6ZXJzL2Jhc2ljLWF1dGgtYXV0aG9yaXplci4ke2F1dGhvcml6ZXJGaWxlRXh0ZW5zaW9ufWAsXG4gICAgICApLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQW4gYXV0aG9yaXplciBmb3IgQVBJLUdhdGV3YXkgdGhhdCBjaGVja3MgQmFzaWMgQXV0aCBjcmVkZW50aWFscyBvbiByZXF1ZXN0c1wiLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBbXCJDUkVERU5USUFMU19TRUNSRVRfTkFNRVwiXTogcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgPyBwcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQgKyBcIkJhc2ljQXV0aFNlY3JldFwiLFxuICAgICAgcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICkuZ3JhbnRSZWFkKHRoaXMubGFtYmRhKVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCBhbGxvd3MgYm90aDpcbiAqIC0gYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIHRva2VuIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ2l2ZW5cbiAqICAgQ29nbml0byB1c2VyIHBvb2xcbiAqIC0gYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSBjcmVkZW50aWFscyBhcmVcbiAqICAgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjcmVkZW50aWFscyBmcm9tIHRoZSBnaXZlbiBiYXNpYyBhdXRoIHNlY3JldCBuYW1lXG4gKlxuICogSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBnaXZlbiBhbmQgdmFsaWQsIHRoZSByZXF1ZXN0IGlzIGF1dGhlbnRpY2F0ZWQuXG4gKi9cbmNsYXNzIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplcjxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcsXG4+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFVzZSBzaW1wbGUgcmVzcG9uc2UgdHlwZSAoYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gKSwgYXMgb3Bwb3NlZCB0byByZXR1cm5pbmcgYW4gSUFNXG4gICAqIFBvbGljeSBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJBdXRob3JpemVyRnVuY3Rpb25cIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvY29nbml0by11c2VyLXBvb2wtb3ItYmFzaWMtYXV0aC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgW1wiVVNFUl9QT09MX0lEXCJdOiBwcm9wcy51c2VyUG9vbCA/IHByb3BzLnVzZXJQb29sLnVzZXJQb29sSWQgOiBcIlwiLFxuICAgICAgICBbXCJSRVFVSVJFRF9TQ09QRVwiXTogcHJvcHMucmVxdWlyZWRTY29wZSA/PyBcIlwiLFxuICAgICAgICBbXCJCQVNJQ19BVVRIX0NSRURFTlRJQUxTX1NFQ1JFVF9OQU1FXCJdOlxuICAgICAgICAgIHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgICAgPyBwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGlmIChwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWUpIHtcbiAgICAgIHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgaWQgKyBcIkJhc2ljQXV0aFNlY3JldFwiLFxuICAgICAgICBwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWUsXG4gICAgICApLmdyYW50UmVhZCh0aGlzLmxhbWJkYSlcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJldHVybnMgYSBzaG9ydCBzZW1pLXVuaXF1ZSBoYXNoIG9mIHRoZSBnaXZlbiBzdHJpbmcuICovXG5mdW5jdGlvbiBzaG9ydEhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBTSEEtMSBpcyBuby1ubyB3aGVuIHdlIG5lZWQgY3J5cHRvZ3JhcGhpYyBzZWN1cml0eSwgYnV0IGhlcmUgd2UganVzdCBpdCBmb3Igc2hvcnRlbmluZyBhIG5hbWUsXG4gIC8vIHdoaWNoIGlzIGZpbmVcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShzdHIpLmRpZ2VzdChcImhleFwiKS5zdWJzdHJpbmcoMCwgMTApXG59XG4iXX0=
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGktZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGktZ2F0ZXdheS9odHRwLWFwaS1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBR2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFHaEQsT0FBTyxLQUFLLEtBQUssTUFBTSw4QkFBOEIsQ0FBQTtBQUVyRCxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0NBQWdDLENBQUE7QUFDaEUsT0FBTyxLQUFLLFlBQVksTUFBTSwyQ0FBMkMsQ0FBQTtBQUN6RSxPQUFPLEtBQUssV0FBVyxNQUFNLDBDQUEwQyxDQUFBO0FBRXZFLE9BQU8sS0FBSyxZQUFZLE1BQU0sK0JBQStCLENBQUE7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDbkMsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQTZCLE1BQU0sZUFBZSxDQUFBO0FBRS9FLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7QUEwYzFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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LENBQ3JDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsNERBQTREO0FBQzVELFNBQVMsU0FBUyxDQUFDLEdBQVc7SUFDNUIsaUdBQWlHO0lBQ2pHLGdCQUFnQjtJQUNoQixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgdHlwZSAqIGFzIGVsYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIlxuaW1wb3J0IHR5cGUgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCB0eXBlICogYXMgc3FzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCJcbmltcG9ydCB0eXBlICogYXMgZXZlbnRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCJcbmltcG9ydCAqIGFzIGFwaWd3IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyXCJcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGludGVncmF0aW9ucyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnNcIlxuaW1wb3J0ICogYXMgYXV0aG9yaXplcnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djItYXV0aG9yaXplcnNcIlxuaW1wb3J0IHR5cGUgeyBJVXNlclBvb2wgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIlxuaW1wb3J0ICogYXMgbGFtYmRhTm9kZWpzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgeyB0YWdSZXNvdXJjZXMgfSBmcm9tIFwiLi4vdGFnc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCJcbmltcG9ydCB7IEFwaUdhdGV3YXlEbnNQcm9wcywgQXBpR2F0ZXdheURvbWFpbiB9IGZyb20gXCIuL2RvbWFpblwiXG5pbXBvcnQgeyBBcGlHYXRld2F5QWNjZXNzTG9ncywgQXBpR2F0ZXdheUFjY2Vzc0xvZ3NQcm9wcyB9IGZyb20gXCIuL2FjY2Vzcy1sb2dzXCJcblxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSB7QGxpbmsgQXBpR2F0ZXdheX0gY29uc3RydWN0LlxuICpcbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqIEBhdXRob3IgSGVybWFubiBNw7hya3JpZCA8aGVtQGxpZmxpZy5ubz5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgLyoqIFNldHRpbmdzIGZvciB0aGUgZXh0ZXJuYWwtZmFjaW5nIHBhcnQgb2YgdGhlIEFQSS1HVy4gKi9cbiAgZG5zOiBBcGlHYXRld2F5RG5zUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gaW50ZWdyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBhIHJvdXRlLCB0aGlzIGludGVncmF0aW9uIGlzIHVzZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgSW50ZWdyYXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbj86IEludGVncmF0aW9uUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gYXV0aG9yaXphdGlvbiBpcyBzcGVjaWZpZWQgZm9yIGEgcm91dGUsIHRoaXMgYXV0aG9yaXphdGlvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIEF1dGhvcml6YXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRBdXRob3JpemF0aW9uPzogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPlxuXG4gIHJvdXRlczogQXBpR2F0ZXdheVJvdXRlPEF1dGhTY29wZXNUPltdXG5cbiAgLyoqXG4gICAqIFRoZSBBUEktR1cgYWNjZXNzIGxvZ3MgZm9yIHRoZSBgJGRlZmF1bHRgIHN0YWdlIGFyZSBrZXB0LlxuICAgKiBUaGlzIGhhcyBvcHRpb25zIGZvciB0aGUgbG9ncy5cbiAgICovXG4gIGFjY2Vzc0xvZ3M/OiBBcGlHYXRld2F5QWNjZXNzTG9nc1Byb3BzXG5cbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHJvdXRlLWxldmVsIG1ldHJpY3MuXG4gICAqIFRoaXMgY2FuIGluY3JlYXNlIENsb3VkV2F0Y2ggY29zdHMgd2hlbiBub3QgZGlzYWJsZWQuXG4gICAqXG4gICAqIFNlZSBbQVdTOiBXb3JraW5nIHdpdGggbWV0cmljcyBmb3IgSFRUUCBBUElzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbWV0cmljcy5odG1sP2ljbXBpZD1hcGlnYXRld2F5X2NvbnNvbGVfaGVscCM6fjp0ZXh0PWFuZCUyMHN0YWdlJTIwSUQuLSxBcGlJZCUyQyUyMFN0YWdlJTJDJTIwUm91dGUsLUZpbHRlcnMlMjBBUEklMjBHYXRld2F5KVxuICAgKiBmb3IgbW9yZSBpbmZvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkZXRhaWxlZE1ldHJpY3M/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRocm90dGxpbmcgb2YgcmVxdWVzdHMuXG4gICAqIElmIG5vdCBzZXQsIHRoZSBBV1MgZGVmYXVsdCBvZiA1MDAwIGJ1cnN0IGFuZCAxMDAwMCByYXRlIGlzIHVzZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHRocm90dGxpbmcgaXMgcGVyLWFjY291bnQsIGFuZCBjb3VudHMgYWxsIEFQSXMgaW4gdGhlIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICogSWYgeW91IGhhdmUgYW5vdGhlciBBUEkgaW4gdGhpcyByZWdpb24gZ2V0dGluZyAxMF8wMDAgcmVxdWVzdCByYXRlLCBpdCBtYXkgaW1wYWN0IHRoaXMgQVBJIGFzIHdlbGwuXG4gICAqL1xuICB0aHJvdHRsaW5nPzoge1xuICAgIC8qKlxuICAgICAqIEdvaW5nIG92ZXIgYDVfMDAwYCBtYXkgcmVxdWlyZSB5b3UgdG8gY29udGFjdCBBV1MgU3VwcG9ydCAtIHRoZXkgYXJlIGFjY291bnQgYm91bmQuXG4gICAgICovXG4gICAgYnVyc3Q/OiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBHb2luZyBvdmVyIGAxMF8wMDBgIG1heSByZXF1aXJlIHlvdSB0byBjb250YWN0IEFXUyBTdXBwb3J0IC0gdGhleSBhcmUgYWNjb3VudCBib3VuZC5cbiAgICAgKi9cbiAgICByYXRlPzogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBDT1JTIGhlYWRlcnMgb24gcmVzcG9uc2VzIGZyb20gdGhlIEFQSSBHYXRld2F5IHRvIGFsbG93IGFsbCBvcmlnaW5zLCBoZWFkZXJzIGFuZCBtZXRob2RzLlxuICAgKiBVc2VmdWwgaWYgeW91ciBBUEkgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IGFueSBicm93c2VyLlxuICAgKi9cbiAgY29yc0FsbG93QWxsPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBJZiBzb21lIHNldHRpbmdzIGluIHRoaXMgY29uc3RydWN0IGRvIG5vdCB3b3JrIGZvciB5b3UsIHRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIG1lY2hhbmlzbSB0b1xuICAgKiBvdmVycmlkZSBhbnl0aGluZy5cbiAgICovXG4gIHByb3BzT3ZlcnJpZGU/OiB7XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgc2V0dGluZ3MgZm9yIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEFwaX0gKGFjY2Vzc2libGUgaW4ge0BsaW5rIEFwaUdhdGV3YXkuaHR0cEFwaX0pLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgZnJvbnRlbmQgYWNjZXNzaW5nIHRoaXMgQVBJLCB5b3UgbWlnaHQgd2FudCB0byBzZXRcbiAgICAgKiBbQ09SUyBwcmVmbGlnaHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YxL2RvY3MvYXdzLWFwaWdhdGV3YXl2Mi1yZWFkbWUuaHRtbCNjcm9zcy1vcmlnaW4tcmVzb3VyY2Utc2hhcmluZy1jb3JzKVxuICAgICAqIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGh0dHBBcGk/OiBQYXJ0aWFsPGFwaWd3Lkh0dHBBcGlQcm9wcz5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5Um91dGU8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0ge1xuICAvKiogVGhlIHBhdGggb2YgdGhlIHJvdXRlIHRvIGV4cG9zZSB0aHJvdWdoIHRoZSBBUEkgR2F0ZXdheS4gVXNlIFwiL1wiIGZvciB0aGUgcm9vdCByb3V0ZS4gKi9cbiAgcGF0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgZm9yd2FyZCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSByb3V0ZSdzIHBhdGggZXhhY3RseS4gU28gZm9yIGEgcm91dGUgd2l0aFxuICAgKiBwYXRoIGAvYXBpL3VzZXJzYCwgYSByZXF1ZXN0IHRvIGAvYXBpL3VzZXJzYCB3aWxsIGJlIGZvcndhcmRlZCwgYnV0IGEgcmVxdWVzdCB0b1xuICAgKiBgL2FwaS91c2Vycy9hZG1pbmAgd2lsbCBub3QuIElmIHlvdSB3YW50IHRvIGZvcndhcmQgcmVxdWVzdHMgdG8gYWxsIHN1Yi1wYXRocyB1bmRlciB0aGUgcm91dGUnc1xuICAgKiBwYXRoLCB5b3UgY2FuIHNldCB0aGlzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmNsdWRlU3VicGF0aHM/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIG1ldGhvZCB0byBleHBvc2UuIGBBTllgIGV4cG9zZXMgYWxsIEhUVFAgbWV0aG9kcyBvbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJBTllcIlxuICAgKi9cbiAgbWV0aG9kPzogSHR0cE1ldGhvZFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGhhdCB0aGUgcm91dGUgd2lsbCBmb3J3YXJkIHRvLiBTZWUge0BsaW5rIEludGVncmF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlXG4gICAqIG9wdGlvbnMuXG4gICAqXG4gICAqIElmIHVuZGVmaW5lZCwgdXNlcyB0aGUge0BsaW5rIEFwaUdhdGV3YXlQcm9wcy5kZWZhdWx0SW50ZWdyYXRpb259LlxuICAgKi9cbiAgaW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIEhvdyByZXF1ZXN0cyBvbiB0aGUgcm91dGUgYXJlIGF1dGhlbnRpY2F0ZWQuIFNlZSB7QGxpbmsgQXV0aG9yaXphdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZVxuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHtAbGluayBBcGlHYXRld2F5UHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb259LlxuICAgKi9cbiAgYXV0aG9yaXphdGlvbj86IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD5cbn1cblxuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9XG4gIHwgXCJBTllcIlxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkRFTEVURVwiXG4gIHwgXCJPUFRJT05TXCJcbiAgfCBcIkhFQURcIlxuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblByb3BzID1cbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyB0aGUgcm91dGUgdG8gYW4gQUxCIChBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKS4gKi9cbiAgfCAoeyB0eXBlOiBcIkFMQlwiIH0gJiBBbGJJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIHJvdXRlIHRvIGEgTGFtYmRhLiAqL1xuICB8ICh7IHR5cGU6IFwiTGFtYmRhXCIgfSAmIExhbWJkYUludGVncmF0aW9uUHJvcHMpXG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3RpbmcgYSByb3V0ZSB0byBzZW5kIHRvIGFuIFNRUyBxdWV1ZS4gKi9cbiAgfCAoeyB0eXBlOiBcIlNRU1wiIH0gJiBTcXNJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIGEgcm91dGUgdG8gc2VuZCB0byBhbiBFdmVudEJyaWRnZSBldmVudCBidXMuICovXG4gIHwgKHsgdHlwZTogXCJFdmVudEJyaWRnZVwiIH0gJiBFdmVudEJyaWRnZUludGVncmF0aW9uUHJvcHMpXG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBBUEktR1cgLT4gQUxCIChBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKSBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICovXG5leHBvcnQgdHlwZSBBbGJJbnRlZ3JhdGlvblByb3BzID0ge1xuICAvKipcbiAgICogQSBsaXN0ZW5lciBvbiBlLmcuIHBvcnQgNDQzIChIVFRQUykuXG4gICAqXG4gICAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICBsb2FkQmFsYW5jZXJMaXN0ZW5lcjogZWxiLklBcHBsaWNhdGlvbkxpc3RlbmVyXG5cbiAgLyoqXG4gICAqIFRoZSBob3N0IG5hbWUgKGRvbWFpbiBuYW1lKSBvZiB0aGUgYmFja2VuZCBzZXJ2aWNlIHRoYXQgd2Ugd2FudCB0byByZWFjaCB0aHJvdWdoIHRoZSBBTEIuXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZCB0bzpcbiAgICogLSBWZXJpZnkgdGhlIEhUVFBTIGNlcnRpZmljYXRlIG9mIHRoZSBiYWNrZW5kIHNlcnZpY2UsIHNvIHRoYXQgdGhlIHJlcXVlc3QgZm9yd2FyZGVkIGZyb21cbiAgICogICBBUEktR1cgY2FuIHVzZSBUTFNcbiAgICogLSBTZXQgdGhlIGBIb3N0YCBoZWFkZXIgb24gdGhlIHJlcXVlc3Qgd2hlbiBmb3J3YXJkaW5nIHRvIHRoZSBBTEIsIHNvIHRoYXQgcmVxdWVzdHMgY2FuIGJlXG4gICAqICAgcm91dGVkIHRvIHRoZSBjb3JyZWN0IFRhcmdldCBHcm91cFxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgPHNlcnZpY2U+LnN0YWdpbmcubXktcHJvamVjdC5saWZsaWcuaW9gIChub3QgcHJlZml4ZWQgYnkgYGh0dHBzOi8vYCkuXG4gICAqL1xuICBob3N0TmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgdXNlZCBieSB0aGUgQUxCLiBUaGUgQVBJLUdXIGludGVncmF0aW9uIHdpbGwgY29ubmVjdCB0byB0aGUgQUxCIHVzaW5nIGEgVlBDIExpbmsgZm9yXG4gICAqIHRoaXMgVlBDLlxuICAgKlxuICAgKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgdnBjOiBlYzIuSVZwY1xuXG4gIC8qKlxuICAgKiBBIHNlY3VyaXR5IGdyb3VwIChTRykgdGhhdCBhbGxvd3MgaW5jb21pbmcgdHJhZmZpYyB0byB0aGUgQUxCLiBXaWxsIGJlIHVzZWQgYnkgdGhlIFZQQyBsaW5rLCBzb1xuICAgKiB0aGUgQVBJLUdXIGludGVncmF0aW9uIGNhbiBjb25uZWN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHVzdWFsbHkgdGhlIHNhbWUgU0cgYXMgdGhlIEFMQiB1c2VzLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIHJ1bGUgdGhhdCBhbGxvd3MgdHJhZmZpYyBmcm9tXG4gICAqIG90aGVycyBpbiB0aGUgc2FtZSBTRy5cbiAgICpcbiAgICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cFxuXG4gIC8qKlxuICAgKiBNYXAgcmVxdWVzdCBwYXJhbWV0ZXJzIChhZGQvb3ZlcndyaXRlIHBhdGgvaGVhZGVycy9xdWVyeSBwYXJhbXMpIGJlZm9yZSBmb3J3YXJkaW5nIHRvIHRoZVxuICAgKiBiYWNrZW5kLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1wYXJhbWV0ZXItbWFwcGluZy5odG1sfVxuICAgKiBmb3IgbW9yZSBvbiB0aGlzLiBSZWFkIHRoZSAnUmVzZXJ2ZWQgaGVhZGVycycgc2VjdGlvbiBmb3Igd2hpY2ggaGVhZGVycyBjYW5ub3QgYmUgb3ZlcnJpZGRlbi5cbiAgICogSW4gYWRkaXRpb24gdG8gdGhlIEFXUy1yZXNlcnZlZCBoZWFkZXJzLCB5b3Ugc2hvdWxkIG5vdCBvdmVycmlkZSB0aGUgJ0hvc3QnIGhlYWRlciBlaXRoZXIsIGFzXG4gICAqIHRoYXQncyB1c2VkIGZvciByb3V0aW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBjb3JyZWN0IHNlcnZpY2UgYmVoaW5kIHRoZSBsb2FkIGJhbGFuY2VyLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZTpcbiAgICpcbiAgICogQWRkaW5nIGEgaGVhZGVyOlxuICAgKiBgYGBcbiAgICogbWFwUGFyYW1ldGVyczogKHBhcmFtZXRlcnMpID0+IHBhcmFtZXRlcnMub3ZlcndyaXRlSGVhZGVyKFxuICAgKiAgICBcIlgtTXktQ3VzdG9tLUhlYWRlclwiLFxuICAgKiAgICBhcGlndy5NYXBwaW5nVmFsdWUuY3VzdG9tKFwibXktY3VzdG9tLXZhbHVlXCIpLFxuICAgKiApXG4gICAqIGBgYFxuICAgKlxuICAgKiBPdmVyd3JpdGluZyB0aGUgcGF0aCAoaWYsIGZvciBleGFtcGxlLCB5b3UgY29uZmlndXJlIGEgYC91c2Vyc2Agcm91dGUgb24gdGhlIEFQSSBHYXRld2F5IHRoYXRcbiAgICogeW91IHdhbnQgdG8gZm9yd2FyZCB0byBgL2FwaS91c2Vyc2Agb24gdGhlIGJhY2tlbmQpOlxuICAgKiBgYGBcbiAgICogbWFwUGFyYW1ldGVyczogKHBhcmFtZXRlcnMpID0+IHBhcmFtZXRlcnMub3ZlcndyaXRlUGF0aChcIi9hcGkvdXNlcnNcIilcbiAgICogYGBgXG4gICAqL1xuICBtYXBQYXJhbWV0ZXJzPzogKHBhcmFtZXRlcnM6IGFwaWd3LlBhcmFtZXRlck1hcHBpbmcpID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgTGFtYmRhSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgaW50ZWdyYXRpb24gdXNlcyB0aGUgVjIgcGF5bG9hZCBmb3JtYXQ6XG4gICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1pbnRlZ3JhdGlvbnMtbGFtYmRhLmh0bWx9XG4gICAqXG4gICAqIElmIHdyaXRpbmcgdGhlIExhbWJkYSBpbiBUeXBlU2NyaXB0LCB0aGlzIG1lYW5zIHlvdSBzaG91bGQgdXNlIGBBUElHYXRld2F5UHJveHlFdmVudFYyYCBhcyB0aGVcbiAgICogcmVxdWVzdCB0eXBlLCBhbmQgYEFQSUdhdGV3YXlQcm94eVJlc3VsdFYyYCBhcyB0aGUgcmVzcG9uc2UgdHlwZS5cbiAgICovXG4gIGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxufVxuXG5leHBvcnQgdHlwZSBTcXNJbnRlZ3JhdGlvblByb3BzID0ge1xuICBxdWV1ZTogc3FzLklRdWV1ZVxuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGF0dHJpYnV0ZXMgdG8gcGFzcyBvbiB0byBTUVMuIFRoZSBrZXlzIGluIHRoaXMgb2JqZWN0IGFyZSB0aGUgbmFtZXMgb2YgdGhlIGF0dHJpYnV0ZXMuXG4gICAqIEVhY2ggYXR0cmlidXRlIGhhcyBhIERhdGFUeXBlIGZpZWxkLCBhbmQgZWl0aGVyIGEgU3RyaW5nVmFsdWUgb3IgQmluYXJ5VmFsdWUgZmllbGQgZGVwZW5kaW5nIG9uXG4gICAqIGl0cyB0eXBlLiBTZWUgQVdTIGRvY3M6XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTWVzc2FnZUF0dHJpYnV0ZVZhbHVlLmh0bWxcbiAgICpcbiAgICogSW4gdGhlIFN0cmluZ1ZhbHVlIGZpZWxkLCB5b3UgY2FuIGRvIEFQSSBHYXRld2F5IHBhcmFtZXRlciBtYXBwaW5nOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktcGFyYW1ldGVyLW1hcHBpbmcuaHRtbFxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBcbiAgICogbWVzc2FnZUF0dHJpYnV0ZXM6IHtcbiAgICogICBjbGllbnRJZDoge1xuICAgKiAgICAgRGF0YVR5cGU6IFwiU3RyaW5nXCIsXG4gICAqICAgICBTdHJpbmdWYWx1ZTogXCIke2NvbnRleHQuYXV0aG9yaXplci5jbGllbnRJZH1cIixcbiAgICogICB9LFxuICAgKiB9LFxuICAgKiBgYGBcbiAgICovXG4gIG1lc3NhZ2VBdHRyaWJ1dGVzPzoge1xuICAgIFthdHRyaWJ1dGVOYW1lOiBzdHJpbmddOlxuICAgICAgfCB7IERhdGFUeXBlOiBcIlN0cmluZ1wiIHwgXCJOdW1iZXJcIjsgU3RyaW5nVmFsdWU6IHN0cmluZyB9XG4gICAgICB8IHtcbiAgICAgICAgICBEYXRhVHlwZTogXCJCaW5hcnlcIlxuICAgICAgICAgIC8qKiBCYXNlNjQtZW5jb2RlZCBiaW5hcnkgZGF0YSBvYmplY3QuICovXG4gICAgICAgICAgQmluYXJ5VmFsdWU6IHN0cmluZ1xuICAgICAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRXZlbnRCcmlkZ2VJbnRlZ3JhdGlvblByb3BzID0ge1xuICAvKipcbiAgICogQSByb2xlIGlzIG5lZWRlZCBpbiBvcmRlciB0byBncmFudCBhcGkgZ2F0ZXdheSBhY2Nlc3MgdG8gcHV0IGV2ZW50c1xuICAgKiBvbiB0aGUgZGVzaXJlZCBldmVudCBidXMuXG4gICAqXG4gICAqIElmIG5vIHJvbGUgaXMgcHJvdmlkZWQsIGEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkIGluIG9yZGVyIHRvIGdyYW50IGFwaWd3IGFjY2VzcyB0byB0aGUgZXZlbnQgYnVzXG4gICAqXG4gICAqIEBkZWZhdWx0OiBjcmVhdGVzIHJvbGUgdGhhdCBjYW4gYmUgYXNzdW1lZCBieSBhcGkgZ3cgd2l0aCBhY2Nlc3MgdG8gcHV0RXZlbnRzIG9uIHRoZSBidXQgaW5wdXR0ZWRcbiAgICovXG4gIHJvbGU/OiBpYW0uSVJvbGVcbiAgLyoqXG4gICAqIEFuIEV2ZW50QnJpZGdlIGV2ZW50IGJ1cy4gUmVxdWVzdCBib2RpZXMgc2VudCB0byB0aGUgcm91dGUgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhpcyBldmVudCBidXMsXG4gICAqIGluIHRoZSBgRGV0YWlsYCBmaWVsZCAoc2VlXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRFdmVudHNSZXF1ZXN0RW50cnkuaHRtbCkuXG4gICAqL1xuICBldmVudEJ1czogZXZlbnRzLklFdmVudEJ1c1xuICAvKipcbiAgICogU2V0cyB0aGUgYERldGFpbFR5cGVgIGZpZWxkIChpLmUuLCBldmVudCB0eXBlKSBvbiBldmVudHMgcHVibGlzaGVkIHRvIHRoZSBldmVudCBidXMuXG4gICAqXG4gICAqIFNlZSBBV1MgZG9jcyBmb3IgbW9yZSBvbiB0aGlzOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0RXZlbnRzUmVxdWVzdEVudHJ5Lmh0bWxcbiAgICovXG4gIGRldGFpbFR5cGU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBBdXRob3JpemF0aW9uUHJvcHM8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID1cbiAgLyoqXG4gICAqIE5vIGF1dGhlbnRpY2F0aW9uLCBmb3Igd2hlbiB5b3Ugd2FudCBhIGZ1bGx5IHB1YmxpYyByb3V0ZSAob3IgaGFuZGxlIGF1dGhlbnRpY2F0aW9uIGluIHRoZVxuICAgKiBiYWNrZW5kIGludGVncmF0aW9uKS5cbiAgICovXG4gIHwgeyB0eXBlOiBcIk5PTkVcIiB9XG4gIC8qKlxuICAgKiBBV1MgSUFNIGF1dGhvcml6YXRpb24uXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1hY2Nlc3MtY29udHJvbC1pYW0uaHRtbFxuICAgKi9cbiAgfCB7IHR5cGU6IFwiSUFNXCIgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXJcbiAgICogYW5kIHZlcmlmaWVzIHRoZSB0b2tlbiBhZ2FpbnN0IGEgQ29nbml0byB1c2VyIHBvb2wuXG4gICAqL1xuICB8ICh7XG4gICAgICB0eXBlOiBcIkNPR05JVE9fVVNFUl9QT09MXCJcbiAgICB9ICYgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPilcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gXG4gICAqIGhlYWRlciBhbmQgdmVyaWZpZXMgdGhlIGNyZWRlbnRpYWxzIGFnYWluc3QgYSBnaXZlbiBzZWNyZXQuXG4gICAqL1xuICB8ICh7IHR5cGU6IFwiQkFTSUNfQVVUSFwiIH0gJiBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMpXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIGFsbG93cyBib3RoOlxuICAgKiAtIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSB0b2tlbiBpcyBjaGVja2VkIGFnYWluc3QgdGhlXG4gICAqICAgZ2l2ZW4gQ29nbml0byB1c2VyIHBvb2xcbiAgICogLSBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIGNyZWRlbnRpYWxzIGFyZVxuICAgKiAgIGNoZWNrZWQgYWdhaW5zdCB0aGUgY3JlZGVudGlhbHMgZnJvbSB0aGUgZ2l2ZW4gYmFzaWMgYXV0aCBzZWNyZXQgbmFtZVxuICAgKlxuICAgKiBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGdpdmVuIGFuZCB2YWxpZCwgdGhlIHJlcXVlc3QgaXMgYXV0aGVudGljYXRlZC5cbiAgICovXG4gIHwgKHtcbiAgICAgIHR5cGU6IFwiQ09HTklUT19VU0VSX1BPT0xfT1JfQkFTSUNfQVVUSFwiXG4gICAgfSAmIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPilcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gYXV0aG9yaXplciB3aXRoIHRoZSBnaXZlbiBMYW1iZGEgZnVuY3Rpb24uIFVzZSB0aGlzIGlmIHlvdSBoYXZlIGN1c3RvbVxuICAgKiBhdXRob3JpemF0aW9uIGxvZ2ljLCBhbmQgdGhlIG90aGVyIGF1dGhvcml6ZXJzIGZyb20gdGhpcyBjb25zdHJ1Y3QgZG9uJ3QgbWVldCB5b3VyIG5lZWRzLlxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbGFtYmRhLWF1dGhvcml6ZXIuaHRtbFxuICAgKi9cbiAgfCAoeyB0eXBlOiBcIkNVU1RPTV9MQU1CREFfQVVUSE9SSVpFUlwiIH0gJiBDdXN0b21MYW1iZGFBdXRob3JpemVyUHJvcHMpXG5cbmV4cG9ydCB0eXBlIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0ge1xuICB1c2VyUG9vbDogSVVzZXJQb29sXG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgYWNjZXNzIHRva2VuIGNsYWltcyBjb250YWluIHRoZSBnaXZlbiBzY29wZS5cbiAgICpcbiAgICogV2hlbiBkZWZpbmVkIGFzIHBhcnQgb2YgYSByZXNvdXJjZSBzZXJ2ZXIsIHNjb3BlcyBhcmUgb24gdGhlIGZvcm1hdDpcbiAgICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YCwgZS5nLiBgZXh0ZXJuYWwvdmlld191c2Vyc2AuXG4gICAqXG4gICAqIFRvIGdldCBtb3JlIHR5cGUgc2FmZXR5IG9uIHRoaXMgcGFyYW1ldGVyLCBzZWUgdGhlIGRvY3MgZm9yIHRoZSBgQXV0aFNjb3Blc1RgIHR5cGUgcGFyYW1ldGVyIG9uXG4gICAqIHtAbGluayBBcGlHYXRld2F5fS5cbiAgICovXG4gIHJlcXVpcmVkU2NvcGU/OiBBdXRoU2NvcGVzVFxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMgZm9yIHRoZSBiYWNrZW5kXG4gICAqIHNlcnZpY2UsIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgYmFja2VuZCBpZiBDb2duaXRvIHVzZXIgcG9vbCBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQuXG4gICAqXG4gICAqIFRoZSBzZWNyZXQgdmFsdWUgbXVzdCBmb2xsb3cgdGhpcyBmb3JtYXQ6XG4gICAqIGBgYGpzb25cbiAgICogeyBcInVzZXJuYW1lXCI6IFwiPHVzZXJuYW1lPlwiLCBcInBhc3N3b3JkXCI6IFwiPHBhc3N3b3JkPlwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIFRoaXMgcHJvcCBzb2x2ZXMgdGhlIGZvbGxvd2luZyB1c2UtY2FzZTpcbiAgICogLSBZb3Ugd2FudCB0byBkbyBDb2duaXRvIHVzZXIgcG9vbCBhdXRoZW50aWNhdGlvbiBpbiB0aGUgQVBJIEdhdGV3YXlcbiAgICogLSBZb3Ugd2FudCBhbiBhZGRpdGlvbmFsIGF1dGggY2hlY2sgaW4gdGhlIGJhY2tlbmQsIGJ1dCB5b3UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggQ29nbml0b1xuICAgKiAgIHRoZXJlXG4gICAqIC0gVGhlIGJhY2tlbmQgdXNlcyBiYXNpYyBhdXRoXG4gICAqXG4gICAqIFRoaXMgcHJvcCBzb2x2ZXMgdGhpcyBieSBsZXR0aW5nIHlvdSBzcGVjaWZ5IGNyZWRlbnRpYWxzIHRvIHBhc3MgdG8gdGhlIGJhY2tlbmQgYWZ0ZXIgQVBJLUdXXG4gICAqIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRzLiBZb3UgY2FuIHBhc3MgdGhlIGVuY29kZWQgY3JlZGVudGlhbHMgdGhyb3VnaFxuICAgKiB7QGxpbmsgQWxiSW50ZWdyYXRpb25Qcm9wcy5tYXBQYXJhbWV0ZXJzfSwgdXNpbmcgdGhlIGBhdXRob3JpemVyLmludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlcmBcbiAgICogY29udGV4dCB2YXJpYWJsZSwgbGlrZSBzbzpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZUhlYWRlcihcbiAgICogICAvLyAnQXV0aG9yaXphdGlvbicgaGVhZGVyIGNhbm5vdCBiZSBvdmVycmlkZGVuLCBzbyB3ZSB1c2UgYSBjdXN0b20gaGVhZGVyXG4gICAqICAgXCJYLUludGVybmFsLUF1dGhvcml6YXRpb25cIixcbiAgICogICBhcGlndy5NYXBwaW5nVmFsdWUuY29udGV4dFZhcmlhYmxlKFwiYXV0aG9yaXplci5pbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXJcIiksXG4gICAqIClcbiAgICogYGBgXG4gICAqIFRoZSBiYWNrZW5kIGNhbiB0aGVuIGNoZWNrIHRoZSBgWC1JbnRlcm5hbC1BdXRob3JpemF0aW9uYCBoZWFkZXIuXG4gICAqL1xuICBjcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvbj86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIGZvciB0aGUgc2VjcmV0IHZhbHVlOlxuICAgKiAtIFNpbmdsZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQ6XG4gICAqICAgYGBganNvblxuICAgKiAgIHsgXCJ1c2VybmFtZVwiOiBcIjx1c2VybmFtZT5cIiwgXCJwYXNzd29yZFwiOiBcIjxwYXNzd29yZD5cIiB9XG4gICAqICAgYGBgXG4gICAqIC0gQXJyYXkgb2YgdXNlcm5hbWUgKyBwYXNzd29yZCBvYmplY3RzOlxuICAgKiAgIGBgYGpzb25cbiAgICogICB7IFwiY3JlZGVudGlhbHNcIjogXCJbe1xcXCJ1c2VybmFtZVxcXCI6XFxcIjx1c2VyLTE+XFxcIixcXFwicGFzc3dvcmRcXFwiOlxcXCJwYXNzd29yZC0xXFxcIn0se1xcXCJ1c2VybmFtZVxcXCI6XFxcIjx1c2VyLTI+XFxcIixcXFwicGFzc3dvcmRcXFwiOlxcXCI8cGFzc3dvcmQtMj5cXFwifV1cIiB9XG4gICAqICAgYGBgXG4gICAqICAgLSBUaGUgdmFsdWUgb2YgdGhlIGBjcmVkZW50aWFsc2AgZmllbGQgaXMgYSBzdHJpbmcsIHdpdGggYSBzdHJpbmdpZmllZCwgZXNjYXBlZCBKU09OIGFycmF5IG9mXG4gICAqICAgICBvYmplY3RzIHdpdGggYHVzZXJuYW1lYCBhbmQgYHBhc3N3b3JkYCBmaWVsZHMuXG4gICAqICAgLSBUaGUgcmVhc29uIHRoYXQgdGhpcyBzZWNvbmQgZm9ybWF0IHN0b3JlcyBzdHJpbmdpZmllZCBKU09OIF9pbnNpZGVfIEpTT04sIGlzIGR1ZSB0byBhXG4gICAqICAgICBsaW1pdGF0aW9uIGluIExpZmxpZydzIGBsb2FkLXNlY3JldHNgIGxpYnJhcnksIHdoaWNoIG9ubHkgYWxsb3dzIHN0b3Jpbmcgc3RyaW5nIHZhbHVlcy5cbiAgICogLSBBcnJheSBvZiBiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFsczpcbiAgICogICBgYGBqc29uXG4gICAqICAgeyBcImNyZWRlbnRpYWxzXCI6IFwiW1xcXCI8ZW5jb2RlZC1jcmVkZW50aWFsLTE+XFxcIixcXFwiPGVuY29kZWQtY3JlZGVudGlhbC0yPlxcXCJdXCIgfVxuICAgKiAgIGBgYFxuICAgKiAgIC0gRWFjaCBlbGVtZW50IGlzIGVuY29kZWQgZnJvbSBgPHVzZXJuYW1lPjo8cGFzc3dvcmQ+YC5cbiAgICogICAtIFRoZSBhcnJheSBpcyBzdHJpbmdpZmllZCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFib3ZlLlxuICAgKlxuICAgKiBJZiB0aGUgc2VjcmV0IHVzZXMgb25lIG9mIHRoZSBhcnJheSBmb3JtYXRzLCB0aGUgYXV0aG9yaXplciB3aWxsIG1hdGNoIHRoZSByZXF1ZXN0J3NcbiAgICogQXV0aG9yaXphdGlvbiBoZWFkZXIgYWdhaW5zdCBhbnkgb25lIG9mIHRoZSBjcmVkZW50aWFscy5cbiAgICovXG4gIGNyZWRlbnRpYWxzU2VjcmV0TmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplclByb3BzPFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSB7XG4gIHVzZXJQb29sOiBJVXNlclBvb2xcblxuICAvKipcbiAgICogTmFtZSBvZiBzZWNyZXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlciB0aGF0IHN0b3JlcyBiYXNpYyBhdXRoIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIEJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWV9IGZvciB0aGUgc3VwcG9ydGVkIGZvcm1hdHMuXG4gICAqL1xuICBiYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCBhY2Nlc3MgdG9rZW4gY2xhaW1zIGNvbnRhaW4gdGhlIGdpdmVuIHNjb3BlLiBPbmx5IGFwcGxpY2FibGUgZm9yIHJlcXVlc3RzIHRoYXRcbiAgICogdXNlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIChub3QgYXBwbGljYWJsZSBmb3IgYmFzaWMgYXV0aCkuXG4gICAqXG4gICAqIFdoZW4gZGVmaW5lZCBhcyBwYXJ0IG9mIGEgcmVzb3VyY2Ugc2VydmVyLCBzY29wZXMgYXJlIG9uIHRoZSBmb3JtYXQ6XG4gICAqIGB7cmVzb3VyY2Ugc2VydmVyIGlkZW50aWZpZXJ9L3tzY29wZSBuYW1lfWAsIGUuZy4gYGV4dGVybmFsL3ZpZXdfdXNlcnNgLlxuICAgKlxuICAgKiBUbyBnZXQgbW9yZSB0eXBlIHNhZmV0eSBvbiB0aGlzIHBhcmFtZXRlciwgc2VlIHRoZSBkb2NzIGZvciB0aGUgYEF1dGhTY29wZXNUYCB0eXBlIHBhcmFtZXRlciBvblxuICAgKiB7QGxpbmsgQXBpR2F0ZXdheX0uXG4gICAqL1xuICByZXF1aXJlZFNjb3BlPzogQXV0aFNjb3Blc1Rcbn1cblxudHlwZSBDdXN0b21MYW1iZGFBdXRob3JpemVyUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBydW4gd2hlbmV2ZXIgdGhlIEFQSSBHYXRld2F5IHJvdXRlIGlzIGludm9rZWQsIHRvIGF1dGhlbnRpY2F0ZVxuICAgKiB0aGUgcmVxdWVzdC4gU2VlIEFXUyBkb2NzIGZvciBtb3JlIG9uIGhvdyB0byB3cml0ZSB0aGUgTGFtYmRhOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbGFtYmRhLWF1dGhvcml6ZXIuaHRtbFxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCByZXNwb25zZSBmb3JtYXQgdXNlZCBpcyBgSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEVgIChmb3JtYXQgMi4wKS4gSWYgeW91IHdyaXRlXG4gICAqIHlvdXIgTGFtYmRhIGluIFR5cGVTY3JpcHQsIHRoaXMgbWVhbnMgdGhhdCB5b3VyIGhhbmRsZXIgbXVzdCByZXR1cm5cbiAgICogYEFQSUdhdGV3YXlTaW1wbGVBdXRob3JpemVyUmVzdWx0YCAoZnJvbSB0aGUgYGF3cy1sYW1iZGFgIHBhY2thZ2UpLiBUaGUgcmVxdWVzdCBldmVudCB3aWxsIGFsc29cbiAgICogdXNlIGZvcm1hdCAyLjAgKGBBUElHYXRld2F5UmVxdWVzdEF1dGhvcml6ZXJFdmVudFYyYCBpbiBUeXBlU2NyaXB0KS4gU2VlIHRoZSBBV1MgZG9jcyBsaW5rZWRcbiAgICogYWJvdmUgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGVzZSBmb3JtYXRzLlxuICAgKlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSByZXNwb25zZSBmb3JtYXQgdHlwZSBpblxuICAgKiB7QGxpbmsgQ3VzdG9tTGFtYmRhQXV0aG9yaXplclByb3BzLmF1dGhvcml6ZXJQcm9wc30uXG4gICAqXG4gICAqIFNlZSB0aGUgTGFtYmRhcyB1bmRlciB0aGUgYGF1dGhvcml6ZXJzYCBmb2xkZXIgbmV4dCB0byB0aGUgYEFwaUdhdGV3YXlgIGNvbnN0cnVjdCBpblxuICAgKiBgbGlmbGlnLWNka2AgZm9yIGV4YW1wbGVzLlxuICAgKi9cbiAgbGFtYmRhQXV0aG9yaXplcjogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8qKlxuICAgKiBQcm9wcyBmb3IgdGhlIGBIdHRwTGFtYmRhQXV0aG9yaXplcmAgY29uc3RydWN0LiBXZSBwcm92aWRlIHNvbWUgZGlmZmVyZW50IGRlZmF1bHRzOlxuICAgKiAtIGByZXNwb25zZVR5cGVzYCBkZWZhdWx0cyB0byBgW0h0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFXWBcbiAgICogLSBgcmVzdWx0c0NhY2hlVHRsYCBkZWZhdWx0cyB0byBgRHVyYXRpb24uaG91cnMoMSlgXG4gICAqL1xuICBhdXRob3JpemVyUHJvcHM/OiBQYXJ0aWFsPGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyUHJvcHM+XG59XG5cbi8qKlxuICogVGhpcyBjb25zdHJ1Y3QgdHJpZXMgdG8gc2ltcGxpZnkgdGhlIGNyZWF0aW9uIG9mIGFuIEFQSSBHYXRld2F5IGZvciBhIHNlcnZpY2UsIGJ5IGNvbGxlY3RpbmcgbW9zdFxuICogb2YgdGhlIGNvbW1vbiBzZXR1cCBoZXJlLlxuICpcbiAqIFRoZSBhcHByb2FjaCBmb2xsb3dlZCBpbiB0aGlzIGNvbnN0cnVjdCBpczpcbiAqIDEuIE9uZSBBUEktR1cgcGVyIHNlcnZpY2VcbiAqIDIuIE9uZSBzdWJkb21haW4gcGVyIEFQSS1HVyAvIHNlcnZpY2VcbiAqIDMuIFVzZSBIVFRQIEFQSSwgbm90IFJFU1RcbiAqIDQuIFVzZSBhICRkZWZhdWx0IHN0YWdlIHdpdGggYXV0b2RlcGxveVxuICogNS4gU3VwcG9ydCBtdWx0aXBsZSByb3V0ZXMgKHdpdGggcG9zc2libGUgYC97cHJveHkrfWAgdG8gbGV0IGFsbCBzdWItcGF0aHMgdGhyb3VnaClcbiAqIDYuIEFsbG93IGN1c3RvbSBpbnRlZ3JhdGlvbi9hdXRob3JpemVyIGZvciBlYWNoIHJvdXRlLCBvciBkZWZhdWx0cyBmb3IgdGhlIHdob2xlIGdhdGV3YXlcbiAqXG4gKiBUaGUgcm91dGUgaW50ZWdyYXRpb24gaXMgb25lIG9mIHRoZXNlOlxuICogLSBBTEIgcHJpdmF0ZSBpbnRlZ3JhdGlvbiB3aXRoIFZQQyBMaW5rIHVzaW5nIEhUVFBTIHRvIHRoZSBBTEJcbiAqIC0gTGFtYmRhIGludGVncmF0aW9uXG4gKiAtIFNRUyBpbnRlZ3JhdGlvblxuICpcbiAqICMjIyBMb2FkIEJhbGFuY2VyIFNlY3VyaXR5IEdyb3VwXG4gKlxuICogTm90ZSB0aGF0IHRoZSBsb2FkIGJhbGFuY2VyIHVzZWQgaW4gYW4ge0BsaW5rIEFsYkludGVncmF0aW9uUHJvcHN9IG11c3QgYWxsb3cgb3V0Ym91bmQgSFRUUFNcbiAqIHRyYWZmaWMgdG8gaXRzIFNlY3VyaXR5R3JvdXAuIE90aGVyd2lzZSwgdGhlIFZQQyBMaW5rIHVzZWQgYnkgdGhlIEFQSS1HVyBjYW4ndCBnZXQgdHJhZmZpYyBmcm9tXG4gKiB0aGUgQUxCLlxuICpcbiAqIGBgYFxuICogY29uc3QgbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCguLi4sIHtcbiAqICAgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UsXG4gKiB9KVxuICpcbiAqIGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAuYWRkRWdyZXNzUnVsZShcbiAqICAgbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCxcbiAqICAgZWMyLlBvcnQudGNwKDQ0MyksXG4gKiAgIFwiT3V0Ym91bmQgdG8gc2VsZiBmb3IgQUxCIHRvIEFQSS1HVyBWUEMtTGlua1wiLFxuICogKVxuICpcbiAqIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ldyBsaWZsaWdMb2FkQmFsYW5jZXIuTG9hZEJhbGFuY2VyKC4uLixcbiAqICAge1xuICogICAgIG92ZXJyaWRlTG9hZEJhbGFuY2VyUHJvcHM6IHtcbiAqICAgICAgIHNlY3VyaXR5R3JvdXA6IGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAsXG4gKiAgICAgfSxcbiAqICAgfSxcbiAqIClcbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBBdXRoU2NvcGVzVCBUaGlzIHR5cGUgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gaW1wcm92ZSB0eXBlIHNhZmV0eSBvbiB0aGVcbiAqIGByZXF1aXJlZFNjb3BlYCBmaWVsZCBvbiB7QGxpbmsgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHN9LCBieSBuYXJyb3dpbmcgdGhlIHR5cGVcbiAqIHRvIHNwZWNpZmljIHN0cmluZ3MuIFlvdSBjYW4gdGhlbiBleHRlbmQgdGhlIGBBcGlHYXRld2F5YCB3aXRoIHRoaXMgdHlwZSB0byBlbmZvcmNlIHRob3NlIHNjb3Blc1xuICogYWNyb3NzIHRoZSBhcHBsaWNhdGlvbi4gUmVtZW1iZXIgdGhhdCBhdXRoIHNjb3BlcyBtdXN0IGJlIG9uIHRoZSBmb3JtYXRcbiAqIGB7cmVzb3VyY2Ugc2VydmVyIGlkZW50aWZpZXJ9L3tzY29wZSBuYW1lfWAuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYFxuICogdHlwZSBBdXRoU2NvcGVzID0gXCJleHRlcm5hbC9yZWFkX3VzZXJzXCIgfCBcImludGVybmFsL2NyZWF0ZV91c2Vyc1wiXG4gKlxuICogZXhwb3J0IGNsYXNzIE15UHJvamVjdEFwaUdhdGV3YXkgZXh0ZW5kcyBBcGlHYXRld2F5PEF1dGhTY29wZXM+IHt9XG4gKiBgYGBcbiAqIFR5cGVTY3JpcHQgd2lsbCB0aGVuIGVuZm9yY2UgdGhhdCBgcmVxdWlyZWRTY29wZWAgaXMgb25lIG9mIGBBdXRoU2NvcGVzYCwgYW5kIHByb3ZpZGVcbiAqIGF1dG8tY29tcGxldGUuXG4gKlxuICogQGF1dGhvciBLcmlzdGlhbiBSZWtzdGFkIDxrcmVAY2FwcmFjb25zdWx0aW5nLm5vPlxuICogQGF1dGhvciBIZXJtYW5uIE3DuHJrcmlkIDxoZW1AbGlmbGlnLm5vPlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheTxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICAvKiogVGhlIEFQSSBHYXRld2F5IEhUVFAgQVBJLiBUaGlzIGlzIHRoZSBtYWluIGNvbnN0cnVjdCBmb3IgQVBJLUdXLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaHR0cEFwaTogYXBpZ3cuSHR0cEFwaVxuXG4gIC8qKiBUaGUgcm91dGVzIHdoaWNoIGNvbm5lY3QgdGhlIHtAbGluayBodHRwQXBpfSB0byB0aGUgYmFja2VuZCBpbnRlZ3JhdGlvbihzKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlczogYXBpZ3cuSHR0cFJvdXRlW10gPSBbXVxuXG4gIC8qKiBUaGUgZG9tYWluIHdoaWNoIGNvbnN1bWVycyBtdXN0IHVzZS4qL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluOiBzdHJpbmdcblxuICAvKiogQWNjZXNzIGxvZyBncm91cC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvZ0dyb3VwOiBsb2dzLkxvZ0dyb3VwXG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUPlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBcGlHYXRld2F5UHJvcHM8QXV0aFNjb3Blc1Q+LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG5cbiAgICBBcGlHYXRld2F5LnZhbGlkYXRlUHJvcHMocHJvcHMsIGlkLCBjZGsuU3RhY2sub2YodGhpcykpXG5cbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSBuZXcgQXBpR2F0ZXdheURvbWFpbih0aGlzLCBcIkN1c3RvbURvbWFpblwiLCBwcm9wcy5kbnMpXG4gICAgdGhpcy5kb21haW4gPSBjdXN0b21Eb21haW4uZnVsbERvbWFpbk5hbWVcblxuICAgIGxldCBjb3JzT3B0aW9uczogYXBpZ3cuQ29yc1ByZWZsaWdodE9wdGlvbnMgfCB1bmRlZmluZWRcbiAgICBpZiAocHJvcHMuY29yc0FsbG93QWxsKSB7XG4gICAgICBjb3JzT3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dPcmlnaW5zOiBbXCIqXCJdLFxuICAgICAgICAvLyBcIlRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBjYW4ndCBiZSB3aWxkY2FyZGVkIGFuZCBhbHdheXMgbmVlZHMgdG8gYmUgbGlzdGVkIGV4cGxpY2l0bHlcIlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1xuICAgICAgICAvLyBDb250ZW50LVR5cGUgbWF5IGFsc28gcmVxdWlyZSBleHBsaWNpdCB3aGl0ZWxpc3Rpbmc6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MzU2NzY0N1xuICAgICAgICBhbGxvd0hlYWRlcnM6IFtcIkF1dGhvcml6YXRpb25cIiwgXCJDb250ZW50LVR5cGVcIiwgXCIqXCJdLFxuICAgICAgICAvLyBOb3QgdXNpbmcgJyonIGhlcmUsIGJlY2F1c2UgXCJJbiByZXF1ZXN0cyB3aXRoIGNyZWRlbnRpYWxzLCBpdCBpcyB0cmVhdGVkIGFzIHRoZSBsaXRlcmFsXG4gICAgICAgIC8vIG1ldGhvZCBuYW1lICcqJyB3aXRob3V0IHNwZWNpYWwgc2VtYW50aWNzXCJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcbiAgICAgICAgYWxsb3dNZXRob2RzOiBbXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuR0VULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBPU1QsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuUFVULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBBVENILFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkRFTEVURSxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5PUFRJT05TLFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkhFQUQsXG4gICAgICAgIF0sXG4gICAgICAgIG1heEFnZTogY2RrLkR1cmF0aW9uLmRheXMoMSksXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGFjdHVhbCBBUEkuIFRoaXMgaG9sZHMgdGhlIHJvdXRlcywgYXV0aG9yaXplcnMgYW5kIGludGVncmF0aW9ucy5cbiAgICBjb25zdCBhcGkgPSBuZXcgYXBpZ3cuSHR0cEFwaSh0aGlzLCBcIkh0dHBBcGktXCIgKyBwcm9wcy5kbnMuc3ViZG9tYWluLCB7XG4gICAgICAvLyBkZWZhdWx0SW50ZWdyYXRpb246IGRlZmF1bHRJbnRlZ3JhdGlvbiwgLy8gVGhpcyBpcyBmb3IgYSBjYXRjaC1hbGwgJGRlZmF1bHQgcm91dGVcbiAgICAgIGRlc2NyaXB0aW9uOiBgQW4gSFRUUCBBUEkgZm9yICR7cHJvcHMuZG5zLnN1YmRvbWFpbn0uJHtwcm9wcy5kbnMuaG9zdGVkWm9uZS56b25lTmFtZX0uYCxcbiAgICAgIGRpc2FibGVFeGVjdXRlQXBpRW5kcG9pbnQ6IHRydWUsIC8vIEZvcmNlIGV4dGVybmFscyB0byBnbyB0aHJvdWdoIGN1c3RvbSBkb21haW4uIE1VU1QgYmUgdHJ1ZSB3aGVuIHVzaW5nIE11dHVhbCBUTFMsIGZvciBzZWN1cml0eSByZWFzb25zXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IHRydWUsXG4gICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzogeyBkb21haW5OYW1lOiBjdXN0b21Eb21haW4uYXBpR3dEb21haW5OYW1lIH0sXG4gICAgICBjb3JzUHJlZmxpZ2h0OiBjb3JzT3B0aW9ucyxcbiAgICAgIC4uLnByb3BzPy5wcm9wc092ZXJyaWRlPy5odHRwQXBpLFxuICAgIH0pXG4gICAgdGhpcy5odHRwQXBpID0gYXBpXG5cbiAgICBjb25zdCBzdGFnZSA9IGFwaS5kZWZhdWx0U3RhZ2U/Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGFwaWd3LkNmblN0YWdlXG5cbiAgICBjb25zdCBsb2dzID0gbmV3IEFwaUdhdGV3YXlBY2Nlc3NMb2dzKFxuICAgICAgdGhpcyxcbiAgICAgIFwiQWNjZXNzTG9nc1wiLFxuICAgICAgc3RhZ2UsXG4gICAgICBwcm9wcy5hY2Nlc3NMb2dzLFxuICAgIClcbiAgICB0aGlzLmxvZ0dyb3VwID0gbG9ncy5sb2dHcm91cFxuXG4gICAgc3RhZ2UuZGVmYXVsdFJvdXRlU2V0dGluZ3MgPSB7XG4gICAgICAuLi5zdGFnZS5kZWZhdWx0Um91dGVTZXR0aW5ncyxcbiAgICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IHByb3BzLmRldGFpbGVkTWV0cmljcyA/PyB0cnVlLFxuICAgICAgdGhyb3R0bGluZ0J1cnN0TGltaXQ6IHByb3BzLnRocm90dGxpbmc/LmJ1cnN0LCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDVfMDAwXG4gICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiBwcm9wcy50aHJvdHRsaW5nPy5yYXRlLCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDEwXzAwMFxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbiA9IHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvblxuICAgICAgPyB0aGlzLmNyZWF0ZUludGVncmF0aW9uKHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbiwgcHJvcHMuZG5zKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGRlZmF1bHRBdXRob3JpemVyID0gcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb25cbiAgICAgID8gdGhpcy5jcmVhdGVBdXRob3JpemVyKFwiRGVmYXVsdEF1dGhvcml6ZXJcIiwgcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGxldCBpbnRlZ3JhdGlvbjogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25cbiAgICAgIGlmIChyb3V0ZS5pbnRlZ3JhdGlvbikge1xuICAgICAgICBpbnRlZ3JhdGlvbiA9IHRoaXMuY3JlYXRlSW50ZWdyYXRpb24ocm91dGUuaW50ZWdyYXRpb24sIHByb3BzLmRucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncmF0aW9uID0gZGVmYXVsdEludGVncmF0aW9uISAvLyBWZXJpZmllZCBpbiB2YWxpZGF0ZVByb3BzXG4gICAgICB9XG5cbiAgICAgIGxldCBhdXRob3JpemVyOiBhcGlndy5JSHR0cFJvdXRlQXV0aG9yaXplciB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHJvdXRlLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgYXV0aG9yaXplciA9IHRoaXMuY3JlYXRlQXV0aG9yaXplcihcbiAgICAgICAgICAvLyBVc2luZyB0aGUgcm91dGUgcGF0aCBoZXJlIGNhdXNlZCBDbG91ZEZvcm1hdGlvbiB0byBmYWlsIGR1ZSB0byByZXNvdXJjZSBuYW1lcyBiZWluZyB0b29cbiAgICAgICAgICAvLyBsb25nLiBUaGVyZWZvcmUsIHdlIG5vdyBoYXNoIHRoZSByb3V0ZSBwYXRoIHRvIGdldCBhIHNob3J0ZXIgbmFtZS5cbiAgICAgICAgICBgUm91dGVBdXRob3JpemVyJHtzaG9ydEhhc2goYCR7cm91dGUubWV0aG9kID8/IFwiXCJ9JHtyb3V0ZS5wYXRofWApfWAsXG4gICAgICAgICAgcm91dGUuYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXV0aG9yaXplciA9IGRlZmF1bHRBdXRob3JpemVyXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlUGF0aHMgPSBbcm91dGUucGF0aF1cbiAgICAgIGlmIChyb3V0ZS5pbmNsdWRlU3VicGF0aHMgPT09IHRydWUpIHtcbiAgICAgICAgLy8gSWYgd2UgaW5jbHVkZSBzdWItcGF0aHMsIHdlIGFkZCBhbiBhZGRpdGlvbmFsIHJvdXRlIHdpdGggL3twcm94eSt9ICh0aGUgKyBtZWFucyBpdCB3aWxsXG4gICAgICAgIC8vIG1hdGNoIGFsbCBzdWJyb3V0ZXMpLiBXZSB3YW50IGJvdGggdGhpcyByb3V0ZSBhbmQgdGhlIG5vcm1hbCByb3V0ZSB3aXRob3V0IC97cHJveHkrfSxcbiAgICAgICAgLy8gc2luY2UgL3twcm94eSt9IHdpbGwgb25seSBtYXRjaCB0aGUgYmFzZSBwYXRoIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gICAgICAgIHJvdXRlUGF0aHMucHVzaChcbiAgICAgICAgICByb3V0ZS5wYXRoICsgKHJvdXRlLnBhdGggPT09IFwiL1wiID8gXCJcIiA6IFwiL1wiKSArIFwie3Byb3h5K31cIixcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiByb3V0ZVBhdGhzKSB7XG4gICAgICAgIC8vIFRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBBUEkgR2F0ZXdheSBjb25zdHJ1Y3QgaGFkIGEgc2luZ2xlIHJvdXRlIHdpdGggdGhlIElEXG4gICAgICAgIC8vICdEZWZhdWx0UHJveHlSb3V0ZScsIGFuZCBhbGwgZ2F0ZXdheXMgd2UgdXNlZCBleHBvc2VkIHRoZSByb3V0ZSAve3Byb3h5K30uIFdoZW4gdHJ5aW5nIHRvXG4gICAgICAgIC8vIGNoYW5nZSB0byB0aGlzIG5ldyB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3QsIGRlcGxveW1lbnQgZmFpbGVkIGZvciBnYXRld2F5cyBleHBvc2luZ1xuICAgICAgICAvLyAve3Byb3h5K30sIGJlY2F1c2UgXCJhIHJvdXRlIHdpdGggdGhhdCBrZXkgW2kuZS4gcGF0aCArIG1ldGhvZF0gYWxyZWFkeSBleGlzdHNcIi4gV2UgdGhpbmtcbiAgICAgICAgLy8gdGhpcyBtYXkgYmUgYmVjYXVzZSB3ZSB1c2VkIHRoZSBzYW1lIHJvdXRlIHBhdGgsIGJ1dCB3aXRoIGEgbmV3IHJvdXRlIElELCBjYXVzaW5nXG4gICAgICAgIC8vIGNvbmZ1c2lvbiBmb3IgQ2xvdWRGb3JtYXRpb24uIFNvIHdlIGtlZXAgdGhlIG9sZCByb3V0ZSBJRCBoZXJlIGZvciAve3Byb3h5K30uXG4gICAgICAgIGNvbnN0IHJvdXRlSWQgPVxuICAgICAgICAgIHJvdXRlUGF0aCA9PT0gXCIve3Byb3h5K31cIiA/IFwiRGVmYXVsdFByb3h5Um91dGVcIiA6IGBSb3V0ZS0ke3JvdXRlUGF0aH1gXG5cbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChcbiAgICAgICAgICBuZXcgYXBpZ3cuSHR0cFJvdXRlKHRoaXMsIHJvdXRlSWQsIHtcbiAgICAgICAgICAgIGh0dHBBcGk6IGFwaSxcbiAgICAgICAgICAgIGludGVncmF0aW9uOiBpbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIGF1dGhvcml6ZXI6IGF1dGhvcml6ZXIsXG4gICAgICAgICAgICByb3V0ZUtleTogYXBpZ3cuSHR0cFJvdXRlS2V5LndpdGgoXG4gICAgICAgICAgICAgIHJvdXRlUGF0aCxcbiAgICAgICAgICAgICAgcm91dGUubWV0aG9kXG4gICAgICAgICAgICAgICAgPyBhcGlndy5IdHRwTWV0aG9kW3JvdXRlLm1ldGhvZF1cbiAgICAgICAgICAgICAgICA6IGFwaWd3Lkh0dHBNZXRob2QuQU5ZLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRhZ1Jlc291cmNlcyh0aGlzLCAoKSA9PiAoeyBzZXJ2aWNlOiBwcm9wcy5kbnMuc3ViZG9tYWluIH0pKVxuICB9XG5cbiAgLyoqIEB0aHJvd3MgRXJyb3IgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhcbiAgICBwcm9wczogQXBpR2F0ZXdheVByb3BzLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc3RhY2s6IGNkay5TdGFjayxcbiAgKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGlmICghcm91dGUuaW50ZWdyYXRpb24gJiYgIXByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vIGludGVncmF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgaW50ZWdyYXRpb24gc3BlY2lmaWVkIGZvciB0aGUgZ2F0ZXdheWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICghcm91dGUuYXV0aG9yaXphdGlvbiAmJiAhcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyBhdXRob3JpemF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgYXV0aG9yaXphdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSBnYXRld2F5YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKCFyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBwYXRoICcke3JvdXRlLnBhdGh9JzogcGF0aHMgbXVzdCBiZWdpbiB3aXRoICcvJyAodXNlICcvJyBmb3Igcm9vdCBwYXRoKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZS5wYXRoICE9PSBcIi9cIiAmJiByb3V0ZS5wYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcGF0aCAnJHtyb3V0ZS5wYXRofSc6IHBhdGhzIGNhbm5vdCBlbmQgd2l0aCAnLycgKGV4Y2VwdCByb290IHBhdGgpYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbj8udHlwZSA9PT0gXCJBTEJcIiAmJlxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZS5zdGFydHNXaXRoKFwiaHR0cHM6XCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgYWxiSW50ZWdyYXRpb24uaG9zdEh0dHBzTmFtZSBzaG91bGQgbm90IGluY2x1ZGUgYSBwcm90b2NvbDogJHtyb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5kbnMuc3ViZG9tYWluID09PSBcIlwiIHx8IHByb3BzLmRucy5zdWJkb21haW4uaW5jbHVkZXMoXCIgXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdWJkb21haW4gbXVzdCBiZSBzZXQsIGFuZCBub3QgY29udGFpbiBzcGFjZXM6ICR7cHJvcHMuZG5zLnN1YmRvbWFpbn1gLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAocHJvcHMudGhyb3R0bGluZz8uYnVyc3QgJiYgcHJvcHMudGhyb3R0bGluZy5idXJzdCA+IDVfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIGJ1cnN0IGxpbWl0ICcke3Byb3BzLnRocm90dGxpbmcuYnVyc3R9JyBpcyBoaWdoZXIgdGhhbiB0aGUgQVdTIEFjY291bnQgbGltaXQuIE1ha2Ugc3VyZSB5b3VyIGFjY291bnQgaGFzIHVwZ3JhZGVkIHRoaXMgcXVvdGEhIGAsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBpZCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLnRocm90dGxpbmc/LnJhdGUgJiYgcHJvcHMudGhyb3R0bGluZy5yYXRlID4gMTBfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIHJhdGUgbGltaXQgJyR7cHJvcHMudGhyb3R0bGluZy5yYXRlfScgaXMgaGlnaGVyIHRoYW4gdGhlIEFXUyBBY2NvdW50IGxpbWl0LiBNYWtlIHN1cmUgeW91ciBhY2NvdW50IGhhcyB1cGdyYWRlZCB0aGlzIHF1b3RhISBgLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgaWQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIG9ubHkgYWNjZXB0cyByZXF1ZXN0cyBmcm9tIGV4dGVybmFsIHVzZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQuXG4gICAqIFVuYXV0aG9yaXplZCB1c2VycyBhcmUgc3RvcHBlZCBpbiB0aGUgQVBJLUdXLCBhbmQgbm90IGZvcndhcmRlZCB0byB0aGUgaW50ZWdyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUF1dGhvcml6ZXI8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXV0aG9yaXphdGlvbjogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPixcbiAgKTogYXBpZ3cuSUh0dHBSb3V0ZUF1dGhvcml6ZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoYXV0aG9yaXphdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiTk9ORVwiOiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJJQU1cIjoge1xuICAgICAgICAvLyBBUEkgR2F0ZXdheSBpbnZva2VzIHlvdXIgQVBJIHJvdXRlIG9ubHkgaWYgdGhlIGNsaWVudCBoYXMgZXhlY3V0ZS1hcGkgcGVybWlzc2lvbiBmb3IgdGhlIHJvdXRlLlxuICAgICAgICAvLyBUaGUgY2xpZW50IGhhcyB0byB1c2UgQVdTIFNpZ1Y0IHRvIGlkZW50aWZ5IHRoZW1zZWx2ZXMgaW4gdGhlIHJlcXVlc3QuXG4gICAgICAgIC8vIFJlYWQgdGhpcyBwYWdlIGZvciBoZWxwIHdpdGggSUFNIGFuZCBBUEktR1cgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlY3VyaXR5X2lhbV9zZXJ2aWNlLXdpdGgtaWFtLmh0bWxcbiAgICAgICAgLy8gTm90ZSB0aGF0IFtyZXNvdXJjZSBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQgZm9yIEhUVFBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1hY2Nlc3MtY29udHJvbC1pYW0uaHRtbClcbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwSWFtQXV0aG9yaXplcigpXG4gICAgICB9XG4gICAgICBjYXNlIFwiQ09HTklUT19VU0VSX1BPT0xcIjoge1xuICAgICAgICAvLyBXZSB1c2UgYSBjdXN0b20gbGFtYmRhIGF1dGhvcml6ZXIgaGVyZSBpbnN0ZWFkIG9mIHRoZSBgSHR0cFVzZXJQb29sQXV0aG9yaXplcmAgcHJvdmlkZWRcbiAgICAgICAgLy8gYnkgQ0RLLCBpbiBvcmRlciB0byBzdXBwb3J0IGByZXF1aXJlZFNjb3BlYCBhbmQgc2V0dGluZyBvZiBjdXN0b20gY29udGV4dCB2YXJpYWJsZXMuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJCQVNJQ19BVVRIXCI6IHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBCYXNpY0F1dGhBdXRob3JpemVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaWQgKyBcIkxhbWJkYVwiLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKGlkLCBhdXRob3JpemVyLmxhbWJkYSwge1xuICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXIucmVzcG9uc2VUeXBlcyxcbiAgICAgICAgICAvLyBNYXggMWgsIG9yIGRpc2FibGVkICgwcykuIFRoZSB2YWx1ZSBvbmx5IG1hdHRlcnMgd2hlbiBpbnZhbGlkYXRpbmcvZHluYW1pYyBjcmVkZW50aWFsc1xuICAgICAgICAgIHJlc3VsdHNDYWNoZVR0bDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMzApLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2FzZSBcIkNPR05JVE9fVVNFUl9QT09MX09SX0JBU0lDX0FVVEhcIjoge1xuICAgICAgICBjb25zdCBhdXRob3JpemVyID0gbmV3IENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDVVNUT01fTEFNQkRBX0FVVEhPUklaRVJcIjoge1xuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24ubGFtYmRhQXV0aG9yaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5hdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6YXRpb24uYXV0aG9yaXplclByb3BzPy5yZXNwb25zZVR5cGVzID8/IFtcbiAgICAgICAgICAgICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOlxuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcz8ucmVzdWx0c0NhY2hlVHRsID8/XG4gICAgICAgICAgICAgIGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnRlZ3JhdGlvbihcbiAgICBpbnRlZ3JhdGlvbjogSW50ZWdyYXRpb25Qcm9wcyxcbiAgICBkbnM6IEFwaUdhdGV3YXlQcm9wc1tcImRuc1wiXSxcbiAgKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24ge1xuICAgIHN3aXRjaCAoaW50ZWdyYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBcIkFMQlwiOiB7XG4gICAgICAgIC8vIFRoZSBWUENMaW5rIGNvbm5lY3RzIHRoZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBBTEIncyBWUEMuIE11c3QgYmUgbWFudWFsbHkgY3JlYXRlZCB3aGVuXG4gICAgICAgIC8vIHRoZSBWUEMgaXMgaW1wb3J0ZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHdoZW4gdXNpbmcgQ29yZVBsYXRmb3JtQ29uc3VtZXIuXG4gICAgICAgIGNvbnN0IHZwY0xpbmsgPSBuZXcgYXBpZ3cuVnBjTGluayh0aGlzLCBcIkFsYlZwY0xpbmtcIiwge1xuICAgICAgICAgIHZwYzogaW50ZWdyYXRpb24udnBjLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbaW50ZWdyYXRpb24uc2VjdXJpdHlHcm91cF0sXG4gICAgICAgICAgc3VibmV0czogaW50ZWdyYXRpb24udnBjLnNlbGVjdFN1Ym5ldHMoKSwgLy8gVGhpcyBjb3JyZWN0bHkgc2VsZWN0cyB0aGUgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvKiogU2VlIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzLmhvc3ROYW1lfSAqL1xuICAgICAgICAgIC5vdmVyd3JpdGVIZWFkZXIoXG4gICAgICAgICAgICBcIkhvc3RcIixcbiAgICAgICAgICAgIC8vIFRoZSBIb3N0IGhlYWRlciBjYW4gTk9UIHVzZSBkeW5hbWljIG1hcHBpbmcsIGxpa2UgJGNvbnRleHQuZG9tYWluTmFtZSBldGMuXG4gICAgICAgICAgICBhcGlndy5NYXBwaW5nVmFsdWUuY3VzdG9tKGludGVncmF0aW9uLmhvc3ROYW1lKSxcbiAgICAgICAgICApXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzKHBhcmFtZXRlck1hcHBpbmcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGludGVncmF0aW9ucy5IdHRwQWxiSW50ZWdyYXRpb24oXG4gICAgICAgICAgXCJBbGJJbnRlZ3JhdGlvbi1cIiArIGRucy5zdWJkb21haW4sXG4gICAgICAgICAgaW50ZWdyYXRpb24ubG9hZEJhbGFuY2VyTGlzdGVuZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VjdXJlU2VydmVyTmFtZTogaW50ZWdyYXRpb24uaG9zdE5hbWUsXG4gICAgICAgICAgICB2cGNMaW5rOiB2cGNMaW5rLFxuICAgICAgICAgICAgbWV0aG9kOiBhcGlndy5IdHRwTWV0aG9kLkFOWSxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSBcIkxhbWJkYVwiOiB7XG4gICAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb25zLkh0dHBMYW1iZGFJbnRlZ3JhdGlvbihcbiAgICAgICAgICBcIkxhbWJkYUludGVncmF0aW9uXCIsXG4gICAgICAgICAgaW50ZWdyYXRpb24ubGFtYmRhLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzJfMCxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjYXNlIFwiU1FTXCI6IHtcbiAgICAgICAgLy8gQVBJLUdXIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIFNRUyBieSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgQXBpR3dUbyR7aW50ZWdyYXRpb24ucXVldWUubm9kZS5pZH1TZXJ2aWNlUm9sZWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiQWxsb3dzIEFQSS1HVyB0byBhZGQgbWVzc2FnZXMgdG8gXCIgKyBpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZUFybixcbiAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgaW50ZWdyYXRpb24ucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMocm9sZSlcblxuICAgICAgICBsZXQgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1pbnRlZ3JhdGlvbnMtYXdzLXNlcnZpY2VzLXJlZmVyZW5jZS5odG1sI1NRUy1TZW5kTWVzc2FnZVxuICAgICAgICAgIC5jdXN0b20oXCJRdWV1ZVVybFwiLCBpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZVVybClcbiAgICAgICAgICAuY3VzdG9tKFwiTWVzc2FnZUJvZHlcIiwgXCIkcmVxdWVzdC5ib2R5XCIpXG4gICAgICAgICAgLmN1c3RvbShcIlJlZ2lvblwiLCBcImV1LXdlc3QtMVwiKSAvLyBDaGFuZ2UgdGhpcyBpZiB0aGUgU1FTIHF1ZXVlIGlzIGluIGFub3RoZXIgcmVnaW9uIVxuXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tZXNzYWdlQXR0cmlidXRlcykge1xuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcgPSBwYXJhbWV0ZXJNYXBwaW5nLmN1c3RvbShcbiAgICAgICAgICAgIFwiTWVzc2FnZUF0dHJpYnV0ZXNcIixcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGludGVncmF0aW9uLm1lc3NhZ2VBdHRyaWJ1dGVzKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNxc1JvdXRlSW50ZWdyYXRpb24oXCJTcXNJbnRlZ3JhdGlvblwiLCB7XG4gICAgICAgICAgdHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uVHlwZS5BV1NfUFJPWFksXG4gICAgICAgICAgc3VidHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uU3VidHlwZS5TUVNfU0VORF9NRVNTQUdFLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBhcGlndy5JbnRlZ3JhdGlvbkNyZWRlbnRpYWxzLmZyb21Sb2xlKHJvbGUpLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246IGFwaWd3LlBheWxvYWRGb3JtYXRWZXJzaW9uLlZFUlNJT05fMV8wLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2FzZSBcIkV2ZW50QnJpZGdlXCI6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFQSS1HVyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBwdXQgZXZlbnRzIHRvIGV2ZW50IGJ1cyBieSBkZWZhdWx0XG4gICAgICAgICAqXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHdlIHdpbGwgY3JlYXRlIGEgbmV3IHJvbGUgdG8gYmUgdXNlZCBpZiB0aGlzIGlzIHVuZGVmaW5lZCBpbiB0aGUgaW5wdXRcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJvbGUgPVxuICAgICAgICAgIGludGVncmF0aW9uLnJvbGUgPz9cbiAgICAgICAgICBuZXcgaWFtLlJvbGUoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYEFwaUd3VG8ke2ludGVncmF0aW9uLmV2ZW50QnVzLm5vZGUuaWR9U2VydmljZVJvbGVgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYEFsbG93cyBBUEktR1cgdG8gcHV0IGV2ZW50cyB0byAke2ludGVncmF0aW9uLmV2ZW50QnVzLmV2ZW50QnVzQXJufWAsXG4gICAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApXG4gICAgICAgIGludGVncmF0aW9uLmV2ZW50QnVzLmdyYW50UHV0RXZlbnRzVG8ocm9sZSlcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJNYXBwaW5nID0gbmV3IGFwaWd3LlBhcmFtZXRlck1hcHBpbmcoKVxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRFdmVudHNSZXF1ZXN0RW50cnkuaHRtbFxuICAgICAgICAgIC5jdXN0b20oXCJFdmVudEJ1c05hbWVcIiwgaW50ZWdyYXRpb24uZXZlbnRCdXMuZXZlbnRCdXNOYW1lKVxuICAgICAgICAgIC5jdXN0b20oXCJEZXRhaWxcIiwgXCIkcmVxdWVzdC5ib2R5XCIpXG4gICAgICAgICAgLmN1c3RvbShcIkRldGFpbFR5cGVcIiwgaW50ZWdyYXRpb24uZGV0YWlsVHlwZSlcbiAgICAgICAgICAuY3VzdG9tKFwiU291cmNlXCIsIFwiJGNvbnRleHQuYXBpSWRcIilcblxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50QnJpZGdlUm91dGVJbnRlZ3JhdGlvbihcIkV2ZW50QnJpZGdlSW50ZWdyYXRpb25cIiwge1xuICAgICAgICAgIHR5cGU6IGFwaWd3Lkh0dHBJbnRlZ3JhdGlvblR5cGUuQVdTX1BST1hZLFxuICAgICAgICAgIHN1YnR5cGU6IGFwaWd3Lkh0dHBJbnRlZ3JhdGlvblN1YnR5cGUuRVZFTlRCUklER0VfUFVUX0VWRU5UUyxcbiAgICAgICAgICBjcmVkZW50aWFsczogYXBpZ3cuSW50ZWdyYXRpb25DcmVkZW50aWFscy5mcm9tUm9sZShyb2xlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nOiBwYXJhbWV0ZXJNYXBwaW5nLFxuICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzFfMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGEgZ3JhbnRhYmxlIHRhcmdldCAocm9sZSwgdXNlciBldGMuKSBwZXJtaXNzaW9uIHRvIGludm9rZSB0aGUgQVBJLlxuICAgKiBPbmx5IHdvcmtzIHdoZW4gdXNpbmcgYElBTWAgYXMge0BsaW5rIEFwaUdhdGV3YXlSb3V0ZS5hdXRob3JpemF0aW9ufS5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCBBIGdyYW50YWJsZSwgbGlrZSB7QGxpbmsgaWFtLlJvbGV9XG4gICAqL1xuICBwdWJsaWMgZ3JhbnRJbnZva2UodGFyZ2V0OiBpYW0uSUdyYW50YWJsZSkge1xuICAgIGZvciAoY29uc3Qgcm91dGVQcm9wcyBvZiB0aGlzLnByb3BzLnJvdXRlcykge1xuICAgICAgY29uc3QgYXV0aFR5cGUgPVxuICAgICAgICByb3V0ZVByb3BzLmF1dGhvcml6YXRpb24/LnR5cGUgPz8gdGhpcy5wcm9wcy5kZWZhdWx0QXV0aG9yaXphdGlvbj8udHlwZVxuXG4gICAgICBpZiAoYXV0aFR5cGUgIT09IFwiSUFNXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZ3JhbnQgaW52b2tlIGZvciBhbiBBUEkgR2F0ZXdheSB3aGVuIG5vdCB1c2luZyBJQU0gYXV0aCAoZm91bmQgYXV0aCAnJHthdXRoVHlwZX0nIG9uIHJvdXRlICcke3JvdXRlUHJvcHMucGF0aH0nKSBbJHtjZGsuU3RhY2sub2YodGhpcykuc3RhY2tOYW1lfV1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgcm91dGUuZ3JhbnRJbnZva2UodGFyZ2V0KVxuICAgIH1cbiAgfVxufVxuXG4vKiogQWN0cyBhcyBnbHVlIChiZXR3ZWVuIHRoZSBpbnRlZ3JhdGlvbiBwcm9wcyBhbmQgdGhlIEh0dHBBcGkpIHdoZW4gY3JlYXRpbmcgYW4gU3FzSW50ZWdyYXRpb24uICovXG5jbGFzcyBTcXNSb3V0ZUludGVncmF0aW9uIGV4dGVuZHMgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQHBhcmFtIGlkIFRoZSBpZCB1c2VkIGluIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSBjb25zdHJ1Y3RcbiAgICogICAgY3JlYXRlZCBpbnRlcm5hbGx5IGJ5IHtAbGluayBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbi5fYmluZFRvUm91dGV9LlxuICAgKiAgICBbU291cmNlIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2I1YWUzNzc4MmJjM2NiNjM3ZWVlZjlmYmIxZmJlMmM1ZWZkZmMwNjgvcGFja2FnZXMvJTQwYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyL2xpYi9odHRwL2ludGVncmF0aW9uLnRzI0wzMjEpXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvblByb3BzIFRoZSBwcm9wcyB0byBwYXNzIHRvIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25Qcm9wczogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25Db25maWcsXG4gICkge1xuICAgIHN1cGVyKGlkKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc2VuZHMgdGhlIHByb3BlcnRpZXMgbmVlZGVkIGZvciBjcmVhdGluZyBhIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IHRvIHRoZVxuICAgKiB7QGxpbmsgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb259LlxuICAgKi9cbiAgYmluZCgpOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbkNvbmZpZyB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5OlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2I1YWUzNzc4MmJjM2NiNjM3ZWVlZjlmYmIxZmJlMmM1ZWZkZmMwNjgvcGFja2FnZXMvJTQwYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyL2xpYi9odHRwL2ludGVncmF0aW9uLnRzI0wzMTlcbiAgICByZXR1cm4gdGhpcy5pbnRlZ3JhdGlvblByb3BzXG4gIH1cbn1cblxuLyoqIEFjdHMgYXMgZ2x1ZSAoYmV0d2VlbiB0aGUgaW50ZWdyYXRpb24gcHJvcHMgYW5kIHRoZSBIdHRwQXBpKSB3aGVuIGNyZWF0aW5nIGFuIEV2ZW50QnJpZGdlIGludGVncmF0aW9uLiAqL1xuY2xhc3MgRXZlbnRCcmlkZ2VSb3V0ZUludGVncmF0aW9uIGV4dGVuZHMgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQHBhcmFtIGlkIFRoZSBpZCB1c2VkIGluIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSBjb25zdHJ1Y3RcbiAgICogICAgY3JlYXRlZCBpbnRlcm5hbGx5IGJ5IHtAbGluayBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbi5fYmluZFRvUm91dGV9LlxuICAgKiAgICBbU291cmNlIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2I1YWUzNzc4MmJjM2NiNjM3ZWVlZjlmYmIxZmJlMmM1ZWZkZmMwNjgvcGFja2FnZXMvJTQwYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyL2xpYi9odHRwL2ludGVncmF0aW9uLnRzI0wzMjEpXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvblByb3BzIFRoZSBwcm9wcyB0byBwYXNzIHRvIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25Qcm9wczogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25Db25maWcsXG4gICkge1xuICAgIHN1cGVyKGlkKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc2VuZHMgdGhlIHByb3BlcnRpZXMgbmVlZGVkIGZvciBjcmVhdGluZyBhIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IHRvIHRoZVxuICAgKiB7QGxpbmsgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb259LlxuICAgKi9cbiAgYmluZCgpOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbkNvbmZpZyB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5OlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2I1YWUzNzc4MmJjM2NiNjM3ZWVlZjlmYmIxZmJlMmM1ZWZkZmMwNjgvcGFja2FnZXMvJTQwYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyL2xpYi9odHRwL2ludGVncmF0aW9uLnRzI0wzMTlcbiAgICByZXR1cm4gdGhpcy5pbnRlZ3JhdGlvblByb3BzXG4gIH1cbn1cblxuLyoqXG4gKiBXaGVuIHVzaW5nIGBOb2RlanNGdW5jdGlvbmAgd2l0aCBgZW50cnlgLCB3ZSBwb2ludCBDREsgdG8gYSBmaWxlIHdpdGggb3VyIGxhbWJkYSBjb2RlLiBUaGlzIGNhblxuICogZWl0aGVyIGJlIGEgVHlwZVNjcmlwdCBvciBKYXZhU2NyaXB0IGZpbGUuIFdoZW4gY3JlYXRpbmcgY29uc3RydWN0cyBpbiB0ZXN0cyBpbnNpZGUgdGhpcyBsaWJyYXJ5LFxuICogdGhlIGVudHJ5IHdpbGwgcG9pbnQgdG8gdGhlIFR5cGVTY3JpcHQgZmlsZSBpbiB0aGUgc291cmNlIGNvZGUuIEJ1dCB3aGVuIGEgbGlicmFyeSBjb25zdW1lciB1c2VzXG4gKiB0aGlzLCBpdCB3aWxsIGluc3RlYWQgcG9pbnQgdG8gdGhlIHRyYW5zcGlsZWQgSmF2YVNjcmlwdCBmaWxlLiBTbyB0byBzZXQgdGhlIGNvcnJlY3QgZmlsZVxuICogZXh0ZW5zaW9uLCB3ZSBtdXN0IGNoZWNrIGlmIHdlJ3JlIGJlaW5nIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgVHlwZVNjcmlwdCBzb3VyY2UgY29kZVxuICogKHNyYy9hcGktZ2F0ZXdheSksIG90aGVyd2lzZSB3ZSdyZSBiZWluZyBydW4gYnkgYSBjb25zdW1lciBhcyB0cmFuc3BpbGVkIEphdmFTY3JpcHQuXG4gKi9cbmNvbnN0IGF1dGhvcml6ZXJGaWxlRXh0ZW5zaW9uID0gX19kaXJuYW1lLmVuZHNXaXRoKFwic3JjL2FwaS1nYXRld2F5XCIpXG4gID8gXCJ0c1wiXG4gIDogXCJqc1wiXG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXIgYW5kXG4gKiB2ZXJpZmllcyB0aGUgdG9rZW4gYWdhaW5zdCBhIENvZ25pdG8gdXNlciBwb29sLlxuICovXG5jbGFzcyBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyPFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyxcbj4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvKipcbiAgICogVXNlIHNpbXBsZSByZXNwb25zZSB0eXBlIChgeyBpc0F1dGhvcml6ZWQ6IHRydWUvZmFsc2UgfWApLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZyBhbiBJQU1cbiAgICogUG9saWN5IGRvY3VtZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGVbXSA9IFtcbiAgICBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRSxcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJBdXRob3JpemVyRnVuY3Rpb25cIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvY29nbml0by11c2VyLXBvb2wtYXV0aG9yaXplci4ke2F1dGhvcml6ZXJGaWxlRXh0ZW5zaW9ufWAsXG4gICAgICApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFtcIlVTRVJfUE9PTF9JRFwiXTogcHJvcHMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgW1wiUkVRVUlSRURfU0NPUEVcIl06IHByb3BzLnJlcXVpcmVkU2NvcGUgPz8gXCJcIixcbiAgICAgICAgW1wiQ1JFREVOVElBTFNfRk9SX0lOVEVSTkFMX0FVVEhPUklaQVRJT05cIl06XG4gICAgICAgICAgcHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb25cbiAgICAgICAgICAgID8gcHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb25cbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGlmIChwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvbikge1xuICAgICAgc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpZCArIFwiQmFzaWNBdXRoU2VjcmV0XCIsXG4gICAgICAgIHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uLFxuICAgICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmBcbiAqIGhlYWRlciBhbmQgdmVyaWZpZXMgdGhlIGNyZWRlbnRpYWxzIGFnYWluc3QgYSBnaXZlbiBzZWNyZXQuXG4gKi9cbmNsYXNzIEJhc2ljQXV0aEF1dGhvcml6ZXIgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvLyBTaW1wbGUgaXMgYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZyBhbiBJQU0gUG9saWN5IGRvY3VtZW50XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNBdXRoQXV0aG9yaXplclByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJCYXNpY0F1dGhMYW1iZGFcIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvYmFzaWMtYXV0aC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBbiBhdXRob3JpemVyIGZvciBBUEktR2F0ZXdheSB0aGF0IGNoZWNrcyBCYXNpYyBBdXRoIGNyZWRlbnRpYWxzIG9uIHJlcXVlc3RzXCIsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFtcIkNSRURFTlRJQUxTX1NFQ1JFVF9OQU1FXCJdOiBwcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICA/IHByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgIDogXCJcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgc2NvcGUsXG4gICAgICBpZCArIFwiQmFzaWNBdXRoU2VjcmV0XCIsXG4gICAgICBwcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWUsXG4gICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIGFsbG93cyBib3RoOlxuICogLSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgdG9rZW4gaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnaXZlblxuICogICBDb2duaXRvIHVzZXIgcG9vbFxuICogLSBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIGNyZWRlbnRpYWxzIGFyZVxuICogICBjaGVja2VkIGFnYWluc3QgdGhlIGNyZWRlbnRpYWxzIGZyb20gdGhlIGdpdmVuIGJhc2ljIGF1dGggc2VjcmV0IG5hbWVcbiAqXG4gKiBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGdpdmVuIGFuZCB2YWxpZCwgdGhlIHJlcXVlc3QgaXMgYXV0aGVudGljYXRlZC5cbiAqL1xuY2xhc3MgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyPFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyxcbj4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvKipcbiAgICogVXNlIHNpbXBsZSByZXNwb25zZSB0eXBlIChgeyBpc0F1dGhvcml6ZWQ6IHRydWUvZmFsc2UgfWApLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZyBhbiBJQU1cbiAgICogUG9saWN5IGRvY3VtZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGVbXSA9IFtcbiAgICBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRSxcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkF1dGhvcml6ZXJGdW5jdGlvblwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1vci1iYXNpYy1hdXRoLWF1dGhvcml6ZXIuJHthdXRob3JpemVyRmlsZUV4dGVuc2lvbn1gLFxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBbXCJVU0VSX1BPT0xfSURcIl06IHByb3BzLnVzZXJQb29sID8gcHJvcHMudXNlclBvb2wudXNlclBvb2xJZCA6IFwiXCIsXG4gICAgICAgIFtcIlJFUVVJUkVEX1NDT1BFXCJdOiBwcm9wcy5yZXF1aXJlZFNjb3BlID8/IFwiXCIsXG4gICAgICAgIFtcIkJBU0lDX0FVVEhfQ1JFREVOVElBTFNfU0VDUkVUX05BTUVcIl06XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgICA/IHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZSkge1xuICAgICAgc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpZCArIFwiQmFzaWNBdXRoU2VjcmV0XCIsXG4gICAgICAgIHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZSxcbiAgICAgICkuZ3JhbnRSZWFkKHRoaXMubGFtYmRhKVxuICAgIH1cbiAgfVxufVxuXG4vKiogUmV0dXJucyBhIHNob3J0IHNlbWktdW5pcXVlIGhhc2ggb2YgdGhlIGdpdmVuIHN0cmluZy4gKi9cbmZ1bmN0aW9uIHNob3J0SGFzaChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFNIQS0xIGlzIG5vLW5vIHdoZW4gd2UgbmVlZCBjcnlwdG9ncmFwaGljIHNlY3VyaXR5LCBidXQgaGVyZSB3ZSBqdXN0IGl0IGZvciBzaG9ydGVuaW5nIGEgbmFtZSxcbiAgLy8gd2hpY2ggaXMgZmluZVxuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKHN0cikuZGlnZXN0KFwiaGV4XCIpLnN1YnN0cmluZygwLCAxMClcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liflig/cdk",
3
- "version": "3.6.2",
3
+ "version": "3.6.4",
4
4
  "description": "CDK library for Liflig",
5
5
  "type": "module",
6
6
  "repository": {
@@ -42,16 +42,16 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@aws-cdk/assert": "2.68.0",
45
- "@aws-sdk/client-cloudwatch-logs": "3.774.0",
46
- "@aws-sdk/client-codebuild": "3.774.0",
47
- "@aws-sdk/client-codepipeline": "3.774.0",
48
- "@aws-sdk/client-ecs": "3.774.0",
49
- "@aws-sdk/client-s3": "3.774.0",
50
- "@aws-sdk/client-secrets-manager": "3.774.0",
51
- "@aws-sdk/client-ses": "3.774.0",
52
- "@aws-sdk/client-sesv2": "3.774.0",
53
- "@aws-sdk/client-sfn": "3.774.0",
54
- "@aws-sdk/lib-storage": "3.774.0",
45
+ "@aws-sdk/client-cloudwatch-logs": "3.775.0",
46
+ "@aws-sdk/client-codebuild": "3.775.0",
47
+ "@aws-sdk/client-codepipeline": "3.775.0",
48
+ "@aws-sdk/client-ecs": "3.775.0",
49
+ "@aws-sdk/client-s3": "3.775.0",
50
+ "@aws-sdk/client-secrets-manager": "3.775.0",
51
+ "@aws-sdk/client-ses": "3.775.0",
52
+ "@aws-sdk/client-sesv2": "3.775.0",
53
+ "@aws-sdk/client-sfn": "3.775.0",
54
+ "@aws-sdk/lib-storage": "3.775.0",
55
55
  "@commitlint/cli": "19.8.0",
56
56
  "@commitlint/config-conventional": "19.8.0",
57
57
  "@eslint/eslintrc": "3.3.1",
@@ -61,13 +61,13 @@
61
61
  "@types/node": "22.13.13",
62
62
  "@typescript-eslint/eslint-plugin": "8.28.0",
63
63
  "@typescript-eslint/parser": "8.28.0",
64
- "aws-cdk": "2.1005.0",
64
+ "aws-cdk": "2.1006.0",
65
65
  "aws-cdk-lib": "2.183.0",
66
66
  "constructs": "10.4.2",
67
67
  "esbuild": "0.25.1",
68
68
  "eslint": "9.23.0",
69
69
  "eslint-config-prettier": "10.1.1",
70
- "eslint-plugin-prettier": "5.2.4",
70
+ "eslint-plugin-prettier": "5.2.5",
71
71
  "husky": "9.1.7",
72
72
  "jest": "29.7.0",
73
73
  "jest-cdk-snapshot": "2.2.5",
@@ -79,7 +79,7 @@
79
79
  "typescript": "5.8.2"
80
80
  },
81
81
  "dependencies": {
82
- "@aws-sdk/client-ssm": "3.774.0",
82
+ "@aws-sdk/client-ssm": "3.775.0",
83
83
  "@capraconsulting/webapp-deploy-lambda": "2.4.1",
84
84
  "aws-jwt-verify": "5.0.0",
85
85
  "del": "8.0.0",