@cdktf/provider-google
Version:
Prebuilt google Provider for Terraform CDK (cdktf)
1,653 lines • 275 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContainerCluster = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
// generated from terraform resource schema
const index_structs_1 = require("./index-structs");
__exportStar(require("./index-structs"), exports);
const cdktf = require("cdktf");
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/container_cluster google_container_cluster}
*/
class ContainerCluster extends cdktf.TerraformResource {
// ==============
// STATIC Methods
// ==============
/**
* Generates CDKTF code for importing a ContainerCluster resource upon running "cdktf plan <stack-name>"
* @param scope The scope in which to define this construct
* @param importToId The construct id used in the generated config for the ContainerCluster to import
* @param importFromId The id of the existing ContainerCluster that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/container_cluster#import import section} in the documentation of this resource for the id to use
* @param provider? Optional instance of the provider where the ContainerCluster to import is found
*/
static generateConfigForImport(scope, importToId, importFromId, provider) {
return new cdktf.ImportableResource(scope, importToId, { terraformResourceType: "google_container_cluster", importId: importFromId, provider });
}
// ===========
// INITIALIZER
// ===========
/**
* Create a new {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/container_cluster google_container_cluster} Resource
*
* @param scope The scope in which to define this construct
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
* @param options ContainerClusterConfig
*/
constructor(scope, id, config) {
super(scope, id, {
terraformResourceType: 'google_container_cluster',
terraformGeneratorMetadata: {
providerName: 'google',
providerVersion: '6.13.0',
providerVersionConstraint: '~> 6.0'
},
provider: config.provider,
dependsOn: config.dependsOn,
count: config.count,
lifecycle: config.lifecycle,
provisioners: config.provisioners,
connection: config.connection,
forEach: config.forEach
});
// effective_labels - computed: true, optional: false, required: false
this._effectiveLabels = new cdktf.StringMap(this, "effective_labels");
// terraform_labels - computed: true, optional: false, required: false
this._terraformLabels = new cdktf.StringMap(this, "terraform_labels");
// addons_config - computed: false, optional: true, required: false
this._addonsConfig = new index_structs_1.ContainerClusterAddonsConfigOutputReference(this, "addons_config");
// authenticator_groups_config - computed: false, optional: true, required: false
this._authenticatorGroupsConfig = new index_structs_1.ContainerClusterAuthenticatorGroupsConfigOutputReference(this, "authenticator_groups_config");
// binary_authorization - computed: false, optional: true, required: false
this._binaryAuthorization = new index_structs_1.ContainerClusterBinaryAuthorizationOutputReference(this, "binary_authorization");
// cluster_autoscaling - computed: false, optional: true, required: false
this._clusterAutoscaling = new index_structs_1.ContainerClusterClusterAutoscalingOutputReference(this, "cluster_autoscaling");
// confidential_nodes - computed: false, optional: true, required: false
this._confidentialNodes = new index_structs_1.ContainerClusterConfidentialNodesOutputReference(this, "confidential_nodes");
// control_plane_endpoints_config - computed: false, optional: true, required: false
this._controlPlaneEndpointsConfig = new index_structs_1.ContainerClusterControlPlaneEndpointsConfigOutputReference(this, "control_plane_endpoints_config");
// cost_management_config - computed: false, optional: true, required: false
this._costManagementConfig = new index_structs_1.ContainerClusterCostManagementConfigOutputReference(this, "cost_management_config");
// database_encryption - computed: false, optional: true, required: false
this._databaseEncryption = new index_structs_1.ContainerClusterDatabaseEncryptionOutputReference(this, "database_encryption");
// default_snat_status - computed: false, optional: true, required: false
this._defaultSnatStatus = new index_structs_1.ContainerClusterDefaultSnatStatusOutputReference(this, "default_snat_status");
// dns_config - computed: false, optional: true, required: false
this._dnsConfig = new index_structs_1.ContainerClusterDnsConfigOutputReference(this, "dns_config");
// enable_k8s_beta_apis - computed: false, optional: true, required: false
this._enableK8SBetaApis = new index_structs_1.ContainerClusterEnableK8SBetaApisOutputReference(this, "enable_k8s_beta_apis");
// enterprise_config - computed: false, optional: true, required: false
this._enterpriseConfig = new index_structs_1.ContainerClusterEnterpriseConfigOutputReference(this, "enterprise_config");
// fleet - computed: false, optional: true, required: false
this._fleet = new index_structs_1.ContainerClusterFleetOutputReference(this, "fleet");
// gateway_api_config - computed: false, optional: true, required: false
this._gatewayApiConfig = new index_structs_1.ContainerClusterGatewayApiConfigOutputReference(this, "gateway_api_config");
// identity_service_config - computed: false, optional: true, required: false
this._identityServiceConfig = new index_structs_1.ContainerClusterIdentityServiceConfigOutputReference(this, "identity_service_config");
// ip_allocation_policy - computed: false, optional: true, required: false
this._ipAllocationPolicy = new index_structs_1.ContainerClusterIpAllocationPolicyOutputReference(this, "ip_allocation_policy");
// logging_config - computed: false, optional: true, required: false
this._loggingConfig = new index_structs_1.ContainerClusterLoggingConfigOutputReference(this, "logging_config");
// maintenance_policy - computed: false, optional: true, required: false
this._maintenancePolicy = new index_structs_1.ContainerClusterMaintenancePolicyOutputReference(this, "maintenance_policy");
// master_auth - computed: false, optional: true, required: false
this._masterAuth = new index_structs_1.ContainerClusterMasterAuthOutputReference(this, "master_auth");
// master_authorized_networks_config - computed: false, optional: true, required: false
this._masterAuthorizedNetworksConfig = new index_structs_1.ContainerClusterMasterAuthorizedNetworksConfigOutputReference(this, "master_authorized_networks_config");
// mesh_certificates - computed: false, optional: true, required: false
this._meshCertificates = new index_structs_1.ContainerClusterMeshCertificatesOutputReference(this, "mesh_certificates");
// monitoring_config - computed: false, optional: true, required: false
this._monitoringConfig = new index_structs_1.ContainerClusterMonitoringConfigOutputReference(this, "monitoring_config");
// network_policy - computed: false, optional: true, required: false
this._networkPolicy = new index_structs_1.ContainerClusterNetworkPolicyOutputReference(this, "network_policy");
// node_config - computed: false, optional: true, required: false
this._nodeConfig = new index_structs_1.ContainerClusterNodeConfigOutputReference(this, "node_config");
// node_pool - computed: false, optional: true, required: false
this._nodePool = new index_structs_1.ContainerClusterNodePoolList(this, "node_pool", false);
// node_pool_auto_config - computed: false, optional: true, required: false
this._nodePoolAutoConfig = new index_structs_1.ContainerClusterNodePoolAutoConfigOutputReference(this, "node_pool_auto_config");
// node_pool_defaults - computed: false, optional: true, required: false
this._nodePoolDefaults = new index_structs_1.ContainerClusterNodePoolDefaultsOutputReference(this, "node_pool_defaults");
// notification_config - computed: false, optional: true, required: false
this._notificationConfig = new index_structs_1.ContainerClusterNotificationConfigOutputReference(this, "notification_config");
// private_cluster_config - computed: false, optional: true, required: false
this._privateClusterConfig = new index_structs_1.ContainerClusterPrivateClusterConfigOutputReference(this, "private_cluster_config");
// release_channel - computed: false, optional: true, required: false
this._releaseChannel = new index_structs_1.ContainerClusterReleaseChannelOutputReference(this, "release_channel");
// resource_usage_export_config - computed: false, optional: true, required: false
this._resourceUsageExportConfig = new index_structs_1.ContainerClusterResourceUsageExportConfigOutputReference(this, "resource_usage_export_config");
// secret_manager_config - computed: false, optional: true, required: false
this._secretManagerConfig = new index_structs_1.ContainerClusterSecretManagerConfigOutputReference(this, "secret_manager_config");
// security_posture_config - computed: false, optional: true, required: false
this._securityPostureConfig = new index_structs_1.ContainerClusterSecurityPostureConfigOutputReference(this, "security_posture_config");
// service_external_ips_config - computed: false, optional: true, required: false
this._serviceExternalIpsConfig = new index_structs_1.ContainerClusterServiceExternalIpsConfigOutputReference(this, "service_external_ips_config");
// timeouts - computed: false, optional: true, required: false
this._timeouts = new index_structs_1.ContainerClusterTimeoutsOutputReference(this, "timeouts");
// user_managed_keys_config - computed: false, optional: true, required: false
this._userManagedKeysConfig = new index_structs_1.ContainerClusterUserManagedKeysConfigOutputReference(this, "user_managed_keys_config");
// vertical_pod_autoscaling - computed: false, optional: true, required: false
this._verticalPodAutoscaling = new index_structs_1.ContainerClusterVerticalPodAutoscalingOutputReference(this, "vertical_pod_autoscaling");
// workload_identity_config - computed: false, optional: true, required: false
this._workloadIdentityConfig = new index_structs_1.ContainerClusterWorkloadIdentityConfigOutputReference(this, "workload_identity_config");
this._allowNetAdmin = config.allowNetAdmin;
this._clusterIpv4Cidr = config.clusterIpv4Cidr;
this._datapathProvider = config.datapathProvider;
this._defaultMaxPodsPerNode = config.defaultMaxPodsPerNode;
this._deletionProtection = config.deletionProtection;
this._description = config.description;
this._enableAutopilot = config.enableAutopilot;
this._enableCiliumClusterwideNetworkPolicy = config.enableCiliumClusterwideNetworkPolicy;
this._enableIntranodeVisibility = config.enableIntranodeVisibility;
this._enableKubernetesAlpha = config.enableKubernetesAlpha;
this._enableL4IlbSubsetting = config.enableL4IlbSubsetting;
this._enableLegacyAbac = config.enableLegacyAbac;
this._enableMultiNetworking = config.enableMultiNetworking;
this._enableShieldedNodes = config.enableShieldedNodes;
this._enableTpu = config.enableTpu;
this._id = config.id;
this._initialNodeCount = config.initialNodeCount;
this._location = config.location;
this._loggingService = config.loggingService;
this._minMasterVersion = config.minMasterVersion;
this._monitoringService = config.monitoringService;
this._name = config.name;
this._network = config.network;
this._networkingMode = config.networkingMode;
this._nodeLocations = config.nodeLocations;
this._nodeVersion = config.nodeVersion;
this._privateIpv6GoogleAccess = config.privateIpv6GoogleAccess;
this._project = config.project;
this._removeDefaultNodePool = config.removeDefaultNodePool;
this._resourceLabels = config.resourceLabels;
this._subnetwork = config.subnetwork;
this._addonsConfig.internalValue = config.addonsConfig;
this._authenticatorGroupsConfig.internalValue = config.authenticatorGroupsConfig;
this._binaryAuthorization.internalValue = config.binaryAuthorization;
this._clusterAutoscaling.internalValue = config.clusterAutoscaling;
this._confidentialNodes.internalValue = config.confidentialNodes;
this._controlPlaneEndpointsConfig.internalValue = config.controlPlaneEndpointsConfig;
this._costManagementConfig.internalValue = config.costManagementConfig;
this._databaseEncryption.internalValue = config.databaseEncryption;
this._defaultSnatStatus.internalValue = config.defaultSnatStatus;
this._dnsConfig.internalValue = config.dnsConfig;
this._enableK8SBetaApis.internalValue = config.enableK8SBetaApis;
this._enterpriseConfig.internalValue = config.enterpriseConfig;
this._fleet.internalValue = config.fleet;
this._gatewayApiConfig.internalValue = config.gatewayApiConfig;
this._identityServiceConfig.internalValue = config.identityServiceConfig;
this._ipAllocationPolicy.internalValue = config.ipAllocationPolicy;
this._loggingConfig.internalValue = config.loggingConfig;
this._maintenancePolicy.internalValue = config.maintenancePolicy;
this._masterAuth.internalValue = config.masterAuth;
this._masterAuthorizedNetworksConfig.internalValue = config.masterAuthorizedNetworksConfig;
this._meshCertificates.internalValue = config.meshCertificates;
this._monitoringConfig.internalValue = config.monitoringConfig;
this._networkPolicy.internalValue = config.networkPolicy;
this._nodeConfig.internalValue = config.nodeConfig;
this._nodePool.internalValue = config.nodePool;
this._nodePoolAutoConfig.internalValue = config.nodePoolAutoConfig;
this._nodePoolDefaults.internalValue = config.nodePoolDefaults;
this._notificationConfig.internalValue = config.notificationConfig;
this._privateClusterConfig.internalValue = config.privateClusterConfig;
this._releaseChannel.internalValue = config.releaseChannel;
this._resourceUsageExportConfig.internalValue = config.resourceUsageExportConfig;
this._secretManagerConfig.internalValue = config.secretManagerConfig;
this._securityPostureConfig.internalValue = config.securityPostureConfig;
this._serviceExternalIpsConfig.internalValue = config.serviceExternalIpsConfig;
this._timeouts.internalValue = config.timeouts;
this._userManagedKeysConfig.internalValue = config.userManagedKeysConfig;
this._verticalPodAutoscaling.internalValue = config.verticalPodAutoscaling;
this._workloadIdentityConfig.internalValue = config.workloadIdentityConfig;
}
get allowNetAdmin() {
return this.getBooleanAttribute('allow_net_admin');
}
set allowNetAdmin(value) {
this._allowNetAdmin = value;
}
resetAllowNetAdmin() {
this._allowNetAdmin = undefined;
}
// Temporarily expose input value. Use with caution.
get allowNetAdminInput() {
return this._allowNetAdmin;
}
get clusterIpv4Cidr() {
return this.getStringAttribute('cluster_ipv4_cidr');
}
set clusterIpv4Cidr(value) {
this._clusterIpv4Cidr = value;
}
resetClusterIpv4Cidr() {
this._clusterIpv4Cidr = undefined;
}
// Temporarily expose input value. Use with caution.
get clusterIpv4CidrInput() {
return this._clusterIpv4Cidr;
}
get datapathProvider() {
return this.getStringAttribute('datapath_provider');
}
set datapathProvider(value) {
this._datapathProvider = value;
}
resetDatapathProvider() {
this._datapathProvider = undefined;
}
// Temporarily expose input value. Use with caution.
get datapathProviderInput() {
return this._datapathProvider;
}
get defaultMaxPodsPerNode() {
return this.getNumberAttribute('default_max_pods_per_node');
}
set defaultMaxPodsPerNode(value) {
this._defaultMaxPodsPerNode = value;
}
resetDefaultMaxPodsPerNode() {
this._defaultMaxPodsPerNode = undefined;
}
// Temporarily expose input value. Use with caution.
get defaultMaxPodsPerNodeInput() {
return this._defaultMaxPodsPerNode;
}
get deletionProtection() {
return this.getBooleanAttribute('deletion_protection');
}
set deletionProtection(value) {
this._deletionProtection = value;
}
resetDeletionProtection() {
this._deletionProtection = undefined;
}
// Temporarily expose input value. Use with caution.
get deletionProtectionInput() {
return this._deletionProtection;
}
get description() {
return this.getStringAttribute('description');
}
set description(value) {
this._description = value;
}
resetDescription() {
this._description = undefined;
}
// Temporarily expose input value. Use with caution.
get descriptionInput() {
return this._description;
}
get effectiveLabels() {
return this._effectiveLabels;
}
get enableAutopilot() {
return this.getBooleanAttribute('enable_autopilot');
}
set enableAutopilot(value) {
this._enableAutopilot = value;
}
resetEnableAutopilot() {
this._enableAutopilot = undefined;
}
// Temporarily expose input value. Use with caution.
get enableAutopilotInput() {
return this._enableAutopilot;
}
get enableCiliumClusterwideNetworkPolicy() {
return this.getBooleanAttribute('enable_cilium_clusterwide_network_policy');
}
set enableCiliumClusterwideNetworkPolicy(value) {
this._enableCiliumClusterwideNetworkPolicy = value;
}
resetEnableCiliumClusterwideNetworkPolicy() {
this._enableCiliumClusterwideNetworkPolicy = undefined;
}
// Temporarily expose input value. Use with caution.
get enableCiliumClusterwideNetworkPolicyInput() {
return this._enableCiliumClusterwideNetworkPolicy;
}
get enableIntranodeVisibility() {
return this.getBooleanAttribute('enable_intranode_visibility');
}
set enableIntranodeVisibility(value) {
this._enableIntranodeVisibility = value;
}
resetEnableIntranodeVisibility() {
this._enableIntranodeVisibility = undefined;
}
// Temporarily expose input value. Use with caution.
get enableIntranodeVisibilityInput() {
return this._enableIntranodeVisibility;
}
get enableKubernetesAlpha() {
return this.getBooleanAttribute('enable_kubernetes_alpha');
}
set enableKubernetesAlpha(value) {
this._enableKubernetesAlpha = value;
}
resetEnableKubernetesAlpha() {
this._enableKubernetesAlpha = undefined;
}
// Temporarily expose input value. Use with caution.
get enableKubernetesAlphaInput() {
return this._enableKubernetesAlpha;
}
get enableL4IlbSubsetting() {
return this.getBooleanAttribute('enable_l4_ilb_subsetting');
}
set enableL4IlbSubsetting(value) {
this._enableL4IlbSubsetting = value;
}
resetEnableL4IlbSubsetting() {
this._enableL4IlbSubsetting = undefined;
}
// Temporarily expose input value. Use with caution.
get enableL4IlbSubsettingInput() {
return this._enableL4IlbSubsetting;
}
get enableLegacyAbac() {
return this.getBooleanAttribute('enable_legacy_abac');
}
set enableLegacyAbac(value) {
this._enableLegacyAbac = value;
}
resetEnableLegacyAbac() {
this._enableLegacyAbac = undefined;
}
// Temporarily expose input value. Use with caution.
get enableLegacyAbacInput() {
return this._enableLegacyAbac;
}
get enableMultiNetworking() {
return this.getBooleanAttribute('enable_multi_networking');
}
set enableMultiNetworking(value) {
this._enableMultiNetworking = value;
}
resetEnableMultiNetworking() {
this._enableMultiNetworking = undefined;
}
// Temporarily expose input value. Use with caution.
get enableMultiNetworkingInput() {
return this._enableMultiNetworking;
}
get enableShieldedNodes() {
return this.getBooleanAttribute('enable_shielded_nodes');
}
set enableShieldedNodes(value) {
this._enableShieldedNodes = value;
}
resetEnableShieldedNodes() {
this._enableShieldedNodes = undefined;
}
// Temporarily expose input value. Use with caution.
get enableShieldedNodesInput() {
return this._enableShieldedNodes;
}
get enableTpu() {
return this.getBooleanAttribute('enable_tpu');
}
set enableTpu(value) {
this._enableTpu = value;
}
resetEnableTpu() {
this._enableTpu = undefined;
}
// Temporarily expose input value. Use with caution.
get enableTpuInput() {
return this._enableTpu;
}
// endpoint - computed: true, optional: false, required: false
get endpoint() {
return this.getStringAttribute('endpoint');
}
get id() {
return this.getStringAttribute('id');
}
set id(value) {
this._id = value;
}
resetId() {
this._id = undefined;
}
// Temporarily expose input value. Use with caution.
get idInput() {
return this._id;
}
get initialNodeCount() {
return this.getNumberAttribute('initial_node_count');
}
set initialNodeCount(value) {
this._initialNodeCount = value;
}
resetInitialNodeCount() {
this._initialNodeCount = undefined;
}
// Temporarily expose input value. Use with caution.
get initialNodeCountInput() {
return this._initialNodeCount;
}
// label_fingerprint - computed: true, optional: false, required: false
get labelFingerprint() {
return this.getStringAttribute('label_fingerprint');
}
get location() {
return this.getStringAttribute('location');
}
set location(value) {
this._location = value;
}
resetLocation() {
this._location = undefined;
}
// Temporarily expose input value. Use with caution.
get locationInput() {
return this._location;
}
get loggingService() {
return this.getStringAttribute('logging_service');
}
set loggingService(value) {
this._loggingService = value;
}
resetLoggingService() {
this._loggingService = undefined;
}
// Temporarily expose input value. Use with caution.
get loggingServiceInput() {
return this._loggingService;
}
// master_version - computed: true, optional: false, required: false
get masterVersion() {
return this.getStringAttribute('master_version');
}
get minMasterVersion() {
return this.getStringAttribute('min_master_version');
}
set minMasterVersion(value) {
this._minMasterVersion = value;
}
resetMinMasterVersion() {
this._minMasterVersion = undefined;
}
// Temporarily expose input value. Use with caution.
get minMasterVersionInput() {
return this._minMasterVersion;
}
get monitoringService() {
return this.getStringAttribute('monitoring_service');
}
set monitoringService(value) {
this._monitoringService = value;
}
resetMonitoringService() {
this._monitoringService = undefined;
}
// Temporarily expose input value. Use with caution.
get monitoringServiceInput() {
return this._monitoringService;
}
get name() {
return this.getStringAttribute('name');
}
set name(value) {
this._name = value;
}
// Temporarily expose input value. Use with caution.
get nameInput() {
return this._name;
}
get network() {
return this.getStringAttribute('network');
}
set network(value) {
this._network = value;
}
resetNetwork() {
this._network = undefined;
}
// Temporarily expose input value. Use with caution.
get networkInput() {
return this._network;
}
get networkingMode() {
return this.getStringAttribute('networking_mode');
}
set networkingMode(value) {
this._networkingMode = value;
}
resetNetworkingMode() {
this._networkingMode = undefined;
}
// Temporarily expose input value. Use with caution.
get networkingModeInput() {
return this._networkingMode;
}
get nodeLocations() {
return cdktf.Fn.tolist(this.getListAttribute('node_locations'));
}
set nodeLocations(value) {
this._nodeLocations = value;
}
resetNodeLocations() {
this._nodeLocations = undefined;
}
// Temporarily expose input value. Use with caution.
get nodeLocationsInput() {
return this._nodeLocations;
}
get nodeVersion() {
return this.getStringAttribute('node_version');
}
set nodeVersion(value) {
this._nodeVersion = value;
}
resetNodeVersion() {
this._nodeVersion = undefined;
}
// Temporarily expose input value. Use with caution.
get nodeVersionInput() {
return this._nodeVersion;
}
// operation - computed: true, optional: false, required: false
get operation() {
return this.getStringAttribute('operation');
}
get privateIpv6GoogleAccess() {
return this.getStringAttribute('private_ipv6_google_access');
}
set privateIpv6GoogleAccess(value) {
this._privateIpv6GoogleAccess = value;
}
resetPrivateIpv6GoogleAccess() {
this._privateIpv6GoogleAccess = undefined;
}
// Temporarily expose input value. Use with caution.
get privateIpv6GoogleAccessInput() {
return this._privateIpv6GoogleAccess;
}
get project() {
return this.getStringAttribute('project');
}
set project(value) {
this._project = value;
}
resetProject() {
this._project = undefined;
}
// Temporarily expose input value. Use with caution.
get projectInput() {
return this._project;
}
get removeDefaultNodePool() {
return this.getBooleanAttribute('remove_default_node_pool');
}
set removeDefaultNodePool(value) {
this._removeDefaultNodePool = value;
}
resetRemoveDefaultNodePool() {
this._removeDefaultNodePool = undefined;
}
// Temporarily expose input value. Use with caution.
get removeDefaultNodePoolInput() {
return this._removeDefaultNodePool;
}
get resourceLabels() {
return this.getStringMapAttribute('resource_labels');
}
set resourceLabels(value) {
this._resourceLabels = value;
}
resetResourceLabels() {
this._resourceLabels = undefined;
}
// Temporarily expose input value. Use with caution.
get resourceLabelsInput() {
return this._resourceLabels;
}
// self_link - computed: true, optional: false, required: false
get selfLink() {
return this.getStringAttribute('self_link');
}
// services_ipv4_cidr - computed: true, optional: false, required: false
get servicesIpv4Cidr() {
return this.getStringAttribute('services_ipv4_cidr');
}
get subnetwork() {
return this.getStringAttribute('subnetwork');
}
set subnetwork(value) {
this._subnetwork = value;
}
resetSubnetwork() {
this._subnetwork = undefined;
}
// Temporarily expose input value. Use with caution.
get subnetworkInput() {
return this._subnetwork;
}
get terraformLabels() {
return this._terraformLabels;
}
// tpu_ipv4_cidr_block - computed: true, optional: false, required: false
get tpuIpv4CidrBlock() {
return this.getStringAttribute('tpu_ipv4_cidr_block');
}
get addonsConfig() {
return this._addonsConfig;
}
putAddonsConfig(value) {
this._addonsConfig.internalValue = value;
}
resetAddonsConfig() {
this._addonsConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get addonsConfigInput() {
return this._addonsConfig.internalValue;
}
get authenticatorGroupsConfig() {
return this._authenticatorGroupsConfig;
}
putAuthenticatorGroupsConfig(value) {
this._authenticatorGroupsConfig.internalValue = value;
}
resetAuthenticatorGroupsConfig() {
this._authenticatorGroupsConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get authenticatorGroupsConfigInput() {
return this._authenticatorGroupsConfig.internalValue;
}
get binaryAuthorization() {
return this._binaryAuthorization;
}
putBinaryAuthorization(value) {
this._binaryAuthorization.internalValue = value;
}
resetBinaryAuthorization() {
this._binaryAuthorization.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get binaryAuthorizationInput() {
return this._binaryAuthorization.internalValue;
}
get clusterAutoscaling() {
return this._clusterAutoscaling;
}
putClusterAutoscaling(value) {
this._clusterAutoscaling.internalValue = value;
}
resetClusterAutoscaling() {
this._clusterAutoscaling.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get clusterAutoscalingInput() {
return this._clusterAutoscaling.internalValue;
}
get confidentialNodes() {
return this._confidentialNodes;
}
putConfidentialNodes(value) {
this._confidentialNodes.internalValue = value;
}
resetConfidentialNodes() {
this._confidentialNodes.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get confidentialNodesInput() {
return this._confidentialNodes.internalValue;
}
get controlPlaneEndpointsConfig() {
return this._controlPlaneEndpointsConfig;
}
putControlPlaneEndpointsConfig(value) {
this._controlPlaneEndpointsConfig.internalValue = value;
}
resetControlPlaneEndpointsConfig() {
this._controlPlaneEndpointsConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get controlPlaneEndpointsConfigInput() {
return this._controlPlaneEndpointsConfig.internalValue;
}
get costManagementConfig() {
return this._costManagementConfig;
}
putCostManagementConfig(value) {
this._costManagementConfig.internalValue = value;
}
resetCostManagementConfig() {
this._costManagementConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get costManagementConfigInput() {
return this._costManagementConfig.internalValue;
}
get databaseEncryption() {
return this._databaseEncryption;
}
putDatabaseEncryption(value) {
this._databaseEncryption.internalValue = value;
}
resetDatabaseEncryption() {
this._databaseEncryption.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get databaseEncryptionInput() {
return this._databaseEncryption.internalValue;
}
get defaultSnatStatus() {
return this._defaultSnatStatus;
}
putDefaultSnatStatus(value) {
this._defaultSnatStatus.internalValue = value;
}
resetDefaultSnatStatus() {
this._defaultSnatStatus.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get defaultSnatStatusInput() {
return this._defaultSnatStatus.internalValue;
}
get dnsConfig() {
return this._dnsConfig;
}
putDnsConfig(value) {
this._dnsConfig.internalValue = value;
}
resetDnsConfig() {
this._dnsConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get dnsConfigInput() {
return this._dnsConfig.internalValue;
}
get enableK8SBetaApis() {
return this._enableK8SBetaApis;
}
putEnableK8SBetaApis(value) {
this._enableK8SBetaApis.internalValue = value;
}
resetEnableK8SBetaApis() {
this._enableK8SBetaApis.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get enableK8SBetaApisInput() {
return this._enableK8SBetaApis.internalValue;
}
get enterpriseConfig() {
return this._enterpriseConfig;
}
putEnterpriseConfig(value) {
this._enterpriseConfig.internalValue = value;
}
resetEnterpriseConfig() {
this._enterpriseConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get enterpriseConfigInput() {
return this._enterpriseConfig.internalValue;
}
get fleet() {
return this._fleet;
}
putFleet(value) {
this._fleet.internalValue = value;
}
resetFleet() {
this._fleet.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get fleetInput() {
return this._fleet.internalValue;
}
get gatewayApiConfig() {
return this._gatewayApiConfig;
}
putGatewayApiConfig(value) {
this._gatewayApiConfig.internalValue = value;
}
resetGatewayApiConfig() {
this._gatewayApiConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get gatewayApiConfigInput() {
return this._gatewayApiConfig.internalValue;
}
get identityServiceConfig() {
return this._identityServiceConfig;
}
putIdentityServiceConfig(value) {
this._identityServiceConfig.internalValue = value;
}
resetIdentityServiceConfig() {
this._identityServiceConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get identityServiceConfigInput() {
return this._identityServiceConfig.internalValue;
}
get ipAllocationPolicy() {
return this._ipAllocationPolicy;
}
putIpAllocationPolicy(value) {
this._ipAllocationPolicy.internalValue = value;
}
resetIpAllocationPolicy() {
this._ipAllocationPolicy.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get ipAllocationPolicyInput() {
return this._ipAllocationPolicy.internalValue;
}
get loggingConfig() {
return this._loggingConfig;
}
putLoggingConfig(value) {
this._loggingConfig.internalValue = value;
}
resetLoggingConfig() {
this._loggingConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get loggingConfigInput() {
return this._loggingConfig.internalValue;
}
get maintenancePolicy() {
return this._maintenancePolicy;
}
putMaintenancePolicy(value) {
this._maintenancePolicy.internalValue = value;
}
resetMaintenancePolicy() {
this._maintenancePolicy.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get maintenancePolicyInput() {
return this._maintenancePolicy.internalValue;
}
get masterAuth() {
return this._masterAuth;
}
putMasterAuth(value) {
this._masterAuth.internalValue = value;
}
resetMasterAuth() {
this._masterAuth.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get masterAuthInput() {
return this._masterAuth.internalValue;
}
get masterAuthorizedNetworksConfig() {
return this._masterAuthorizedNetworksConfig;
}
putMasterAuthorizedNetworksConfig(value) {
this._masterAuthorizedNetworksConfig.internalValue = value;
}
resetMasterAuthorizedNetworksConfig() {
this._masterAuthorizedNetworksConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get masterAuthorizedNetworksConfigInput() {
return this._masterAuthorizedNetworksConfig.internalValue;
}
get meshCertificates() {
return this._meshCertificates;
}
putMeshCertificates(value) {
this._meshCertificates.internalValue = value;
}
resetMeshCertificates() {
this._meshCertificates.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get meshCertificatesInput() {
return this._meshCertificates.internalValue;
}
get monitoringConfig() {
return this._monitoringConfig;
}
putMonitoringConfig(value) {
this._monitoringConfig.internalValue = value;
}
resetMonitoringConfig() {
this._monitoringConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get monitoringConfigInput() {
return this._monitoringConfig.internalValue;
}
get networkPolicy() {
return this._networkPolicy;
}
putNetworkPolicy(value) {
this._networkPolicy.internalValue = value;
}
resetNetworkPolicy() {
this._networkPolicy.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get networkPolicyInput() {
return this._networkPolicy.internalValue;
}
get nodeConfig() {
return this._nodeConfig;
}
putNodeConfig(value) {
this._nodeConfig.internalValue = value;
}
resetNodeConfig() {
this._nodeConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get nodeConfigInput() {
return this._nodeConfig.internalValue;
}
get nodePool() {
return this._nodePool;
}
putNodePool(value) {
this._nodePool.internalValue = value;
}
resetNodePool() {
this._nodePool.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get nodePoolInput() {
return this._nodePool.internalValue;
}
get nodePoolAutoConfig() {
return this._nodePoolAutoConfig;
}
putNodePoolAutoConfig(value) {
this._nodePoolAutoConfig.internalValue = value;
}
resetNodePoolAutoConfig() {
this._nodePoolAutoConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get nodePoolAutoConfigInput() {
return this._nodePoolAutoConfig.internalValue;
}
get nodePoolDefaults() {
return this._nodePoolDefaults;
}
putNodePoolDefaults(value) {
this._nodePoolDefaults.internalValue = value;
}
resetNodePoolDefaults() {
this._nodePoolDefaults.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get nodePoolDefaultsInput() {
return this._nodePoolDefaults.internalValue;
}
get notificationConfig() {
return this._notificationConfig;
}
putNotificationConfig(value) {
this._notificationConfig.internalValue = value;
}
resetNotificationConfig() {
this._notificationConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get notificationConfigInput() {
return this._notificationConfig.internalValue;
}
get privateClusterConfig() {
return this._privateClusterConfig;
}
putPrivateClusterConfig(value) {
this._privateClusterConfig.internalValue = value;
}
resetPrivateClusterConfig() {
this._privateClusterConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get privateClusterConfigInput() {
return this._privateClusterConfig.internalValue;
}
get releaseChannel() {
return this._releaseChannel;
}
putReleaseChannel(value) {
this._releaseChannel.internalValue = value;
}
resetReleaseChannel() {
this._releaseChannel.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get releaseChannelInput() {
return this._releaseChannel.internalValue;
}
get resourceUsageExportConfig() {
return this._resourceUsageExportConfig;
}
putResourceUsageExportConfig(value) {
this._resourceUsageExportConfig.internalValue = value;
}
resetResourceUsageExportConfig() {
this._resourceUsageExportConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get resourceUsageExportConfigInput() {
return this._resourceUsageExportConfig.internalValue;
}
get secretManagerConfig() {
return this._secretManagerConfig;
}
putSecretManagerConfig(value) {
this._secretManagerConfig.internalValue = value;
}
resetSecretManagerConfig() {
this._secretManagerConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get secretManagerConfigInput() {
return this._secretManagerConfig.internalValue;
}
get securityPostureConfig() {
return this._securityPostureConfig;
}
putSecurityPostureConfig(value) {
this._securityPostureConfig.internalValue = value;
}
resetSecurityPostureConfig() {
this._securityPostureConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get securityPostureConfigInput() {
return this._securityPostureConfig.internalValue;
}
get serviceExternalIpsConfig() {
return this._serviceExternalIpsConfig;
}
putServiceExternalIpsConfig(value) {
this._serviceExternalIpsConfig.internalValue = value;
}
resetServiceExternalIpsConfig() {
this._serviceExternalIpsConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get serviceExternalIpsConfigInput() {
return this._serviceExternalIpsConfig.internalValue;
}
get timeouts() {
return this._timeouts;
}
putTimeouts(value) {
this._timeouts.internalValue = value;
}
resetTimeouts() {
this._timeouts.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get timeoutsInput() {
return this._timeouts.internalValue;
}
get userManagedKeysConfig() {
return this._userManagedKeysConfig;
}
putUserManagedKeysConfig(value) {
this._userManagedKeysConfig.internalValue = value;
}
resetUserManagedKeysConfig() {
this._userManagedKeysConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get userManagedKeysConfigInput() {
return this._userManagedKeysConfig.internalValue;
}
get verticalPodAutoscaling() {
return this._verticalPodAutoscaling;
}
putVerticalPodAutoscaling(value) {
this._verticalPodAutoscaling.internalValue = value;
}
resetVerticalPodAutoscaling() {
this._verticalPodAutoscaling.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get verticalPodAutoscalingInput() {
return this._verticalPodAutoscaling.internalValue;
}
get workloadIdentityConfig() {
return this._workloadIdentityConfig;
}
putWorkloadIdentityConfig(value) {
this._workloadIdentityConfig.internalValue = value;
}
resetWorkloadIdentityConfig() {
this._workloadIdentityConfig.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get workloadIdentityConfigInput() {
return this._workloadIdentityConfig.internalValue;
}
// =========
// SYNTHESIS
// =========
synthesizeAttributes() {
return {
allow_net_admin: cdktf.booleanToTerraform(this._allowNetAdmin),
cluster_ipv4_cidr: cdktf.stringToTerraform(this._clusterIpv4Cidr),
datapath_provider: cdktf.stringToTerraform(this._datapathProvider),
default_max_pods_per_node: cdktf.numberToTerraform(this._defaultMaxPodsPerNode),
deletion_protection: cdktf.booleanToTerraform(this._deletionProtection),
description: cdktf.stringToTerraform(this._description),
enable_autopilot: cdktf.booleanToTerraform(this._enableAutopilot),
enable_cilium_clusterwide_network_policy: cdktf.booleanToTerraform(this._enableCiliumClusterwideNetworkPolicy),
enable_intranode_visibility: cdktf.booleanToTerraform(this._enableIntranodeVisibility),
enable_kubernetes_alpha: cdktf.booleanToTerraform(this._enableKubernetesAlpha),
enable_l4_ilb_subsetting: cdktf.booleanToTerraform(this._enableL4IlbSubsetting),
enable_legacy_abac: cdktf.booleanToTerraform(this._enableLegacyAbac),
enable_multi_networking: cdktf.booleanToTerraform(this._enableMultiNetworking),
enable_shielded_nodes: cdktf.booleanToTerraform(this._enableShieldedNodes),
enable_tpu: cdktf.booleanToTerraform(this._enableTpu),
id: cdktf.stringToTerraform(this._id),
initial_node_count: cdktf.numberToTerraform(this._initialNodeCount),
location: cdktf.stringToTerraform(this._location),
logging_service: cdktf.stringToTerraform(this._loggingService),
min_master_version: cdktf.stringToTerraform(this._minMasterVersion),
monitoring_service: cdktf.stringToTerraform(this._monitoringService),
name: cdktf.stringToTerraform(this._name),
network: cdktf.stringToTerraform(this._network),
networking_mode: cdktf.stringToTerraform(this._networkingMode),
node_locations: cdktf.listMapper(cdktf.stringToTerraform, false)(this._nodeLocations),
node_version: cdktf.stringToTerraform(this._nodeVersion),
private_ipv6_google_access: cdktf.stringToTerraform(this._privateIpv6GoogleAccess),
project: cdktf.stringToTerraform(this._project),
remove_default_node_pool: cdktf.booleanToTerraform(this._removeDefaultNodePool),
resource_labels: cdktf.hashMapper(cdktf.stringToTerraform)(this._resourceLabels),
subnetwork: cdktf.stringToTerraform(this._subnetwork),
addons_config: (0, index_structs_1.containerClusterAddonsConfigToTerraform)(this._addonsConfig.internalValue),
authenticator_groups_config: (0, index_structs_1.containerClusterAuthenticatorGroupsConfigToTerraform)(this._authenticatorGroupsConfig.internalValue),
binary_authorization: (0, index_structs_1.containerClusterBinaryAuthorizationToTerraform)(this._binaryAuthorization.internalValue),
cluster_autoscaling: (0, index_structs_1.containerClusterClusterAutoscalingToTerraform)(this._clusterAutoscaling.internalValue),
confidential_nodes: (0, index_structs_1.containerClusterConfidentialNodesToTerraform)(this._confidentialNodes.internalValue),
control_plane_endpoints_config: (0, index_structs_1.containerClusterControlPlaneEndpointsConfigToTerraform)(this._controlPlaneEndpointsConfig.internalValue),
cost_management_config: (0, index_structs_1.containerClusterCostManagementConfigToTerraform)(this._costManagementConfig.internalValue),
database_encryption: (0, index_structs_1.containerClusterDatabaseEncryptionToTerraform)(this._databaseEncryption.internalValue),
default_snat_status: (0, index_structs_1.containerClusterDefaultSnatStatusToTerraform)(this._defaultSnatStatus.internalValue),
dns_config: (0, index_structs_1.containerClusterDnsConfigToTerraform)(this._dnsConfig.internalValue),
enable_k8s_beta_apis: (0, index_structs_1.containerClusterEnableK8SBetaApisToTerraform)(this._enableK8SBetaApis.internalValue),
enterprise_config: (0, index_structs_1.containerClusterEnterpriseConfigToTerraform)(this._enterpriseConfig.internalValue),
fleet: (0, index_structs_1.containerClusterFleetToTerraform)(this._fleet.internalValue),
gateway_api_config: (0, index_structs_1.containerClusterGatewayApiConfigToTerraform)(this._gatewayApiConfig.internalValue),
identity_service_config: (0, index_structs_1.containerClusterIdentityServiceConfigToTerraform)(this._identityServiceConfig.internalValue),
ip_allocation_policy: (0, index_structs_1.containerClusterIpAllocationPolicyToTerraform)(this._ipAllocationPolicy.internalValue),
logging_config: (0, index_structs_1.containerClusterLoggingConfigToTerraform)(this._loggingConfig.internalValue),
maintenance_policy: (0, index_structs_1.containerClusterMaintenancePolicyToTerraform)(this._maintenancePolicy.internalValue),
master_auth: (0, index_structs_1.containerClusterMasterAuthToTerraform)(this._masterAuth.internalValue),
master_authorized_networks_config: (0, index_structs_1.containerClusterMasterAuthorizedNetworksConfigToTerraform)(this._masterAuthorizedNetworksConfig.internalValue),
mesh_certificates: (0, index_structs_1.containerClusterMeshCertificatesToTerraform)(this._meshCertificates.internalValue),
monitoring_config: (0, index_structs_1.containerClusterMonitoringConfigToTerraform)(this._monitoringConfig.internalValue),
network_policy: (0, index_structs_1.containerClusterNetworkPolicyToTerraform)(this._networkPolicy.internalValue),
node_config: (0, index_structs_1.containerClusterNodeConfigToTerraform)(this._nodeConfig.internalValue),
node_pool: cdktf.listMapper(index_structs_1.containerClusterNodePoolToTerraform, true)(this._nodePool.internalValue),
node_pool_auto_config: (0, index_structs_1.containerClusterNodePoolAutoConfigToTerraform)(this._nodePoolAutoConfig.internalValue),
node_pool_defaults: (0, index_structs_1.containerClusterNodePoolDefaultsToTerraform)(this._nodePoolDefaults.internalValue),
notification_config: (0, index_structs_1.containerClusterNotificationConfigToTerraform)(this._notificationConfig.internalValue),
private_cluster_config: (0, index_structs_1.containerClusterPrivateClusterConfigToTerraform)(this._privateClusterConfig.internalValue),
release_channel: (0, index_structs_1.containerClusterReleaseChannelToTerraform)(this._releaseChannel.internalValue),
resource_usage_export_config: (0, index_structs_1.containerClusterResourceUsageExportConfigToTerraform)(this._resourceUsageExportConfig.internalValue),
secret_manager_config: (0, index_structs_1.containerClusterSecretManagerConfigToTerraform)(this._secretManagerConfig.internalValue),
security_posture_config: (0, index_structs_1.containerClusterSecurityPostureConfigToTerraform)(this._securityPostureConfig.internalValue),
service_external_ips_config: (0, index_structs_1.containerClusterServiceExternalIpsConfigToTerraform)(this._serviceExternalIpsConfig.internalValue),
timeouts: (0, index_structs_1.containerClusterTimeoutsToTerraform)(this._timeouts.internalValue),
user_managed_keys_config: (0, index_structs_1.containerClusterUserManagedKeysConfigToTerraform)(this._userManagedKeysConfig.internalValue),
vertical_pod_autoscaling: (0, index_structs_1.containerClusterVerticalPodAutoscalingToTerraform)(this._verticalPodAutoscaling.internalValue),
workload_identity_config: (0, index_structs_1.containerClusterWorkloadIdentityConfigToTerraform)(this._workloadIdentityConfig.internalValue),
};
}
synthesizeHclAttributes() {
const attrs = {
allow_net_admin: {
value: cdktf.booleanToHclTerraform(this._allowNetAdmin),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
cluster_ipv4_cidr: {
value: cdktf.stringToHclTerraform(this._clusterIpv4Cidr),
isBlock: false,
type: "simple",
storageClassType: "string",
},
datapath_provider: {
value: cdktf.stringToHclTerraform(this._datapathProvider),
isBlock: false,
type: "simple",
storageClassType: "string",
},
default_max_pods_per_node: {
value: cdktf.numberToHclTerraform(this._defaultMaxPodsPerNode),
isBlock: false,
type: "simple",
storageClassType: "number",
},
deletion_protection: {
value: cdktf.booleanToHclTerraform(this._deletionProtection),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
description: {
value: cdktf.stringToHclTerraform(this._description),
isBlock: false,
type: "simple",
storageClassType: "string",
},
enable_autopilot: {
value: cdktf.booleanToHclTerraform(this._enableAutopilot),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_cilium_clusterwide_network_policy: {
value: cdktf.booleanToHclTerraform(this._enableCiliumClusterwideNetworkPolicy),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_intranode_visibility: {
value: cdktf.booleanToHclTerraform(this._enableIntranodeVisibility),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_kubernetes_alpha: {
value: cdktf.booleanToHclTerraform(this._enableKubernetesAlpha),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_l4_ilb_subsetting: {
value: cdktf.booleanToHclTerraform(this._enableL4IlbSubsetting),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_legacy_abac: {
value: cdktf.booleanToHclTerraform(this._enableLegacyAbac),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_multi_networking: {
value: cdktf.booleanToHclTerraform(this._enableMultiNetworking),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_shielded_nodes: {
value: cdktf.booleanToHclTerraform(this._enableShieldedNodes),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
enable_tpu: {
value: cdktf.booleanToHclTerraform(this._enableTpu),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
id: {
value: cdktf.stringToHclTerraform(this._id),
isBlock: false,
type: "simple",
storageClassType: "string",
},
initial_node_count: {
value: cdktf.numberToHclTerraform(this._initialNodeCount),
isBlock: false,
type: "simple",
storageClassType: "number",
},
location: {
value: cdktf.stringToHclTerraform(this._location),
isBlock: false,
type: "simple",
storageClassType: "string",
},
logging_service: {
value: cdktf.stringToHclTerraform(this._loggingService),
isBlock: false,
type: "simple",
storageClassType: "string",
},
min_master_version: {
value: cdktf.stringToHclTerraform(this._minMasterVersion),
isBlock: false,
type: "simple",
storageClassType: "string",
},
monitoring_service: {
value: cdktf.stringToHclTerraform(this._monitoringService),
isBlock: false,
type: "simple",
storageClassType: "string",
},
name: {
value: cdktf.stringToHclTerraform(this._name),
isBlock: false,
type: "simple",
storageClassType: "string",
},
network: {
value: cdktf.stringToHclTerraform(this._network),
isBlock: false,
type: "simple",
storageClassType: "string",
},
networking_mode: {
value: cdktf.stringToHclTerraform(this._networkingMode),
isBlock: false,
type: "simple",
storageClassType: "string",
},
node_locations: {
value: cdktf.listMapperHcl(cdktf.stringToHclTerraform, false)(this._nodeLocations),
isBlock: false,
type: "set",
storageClassType: "stringList",
},
node_version: {
value: cdktf.stringToHclTerraform(this._nodeVersion),
isBlock: false,
type: "simple",
storageClassType: "string",
},
private_ipv6_google_access: {
value: cdktf.stringToHclTerraform(this._privateIpv6GoogleAccess),
isBlock: false,
type: "simple",
storageClassType: "string",
},
project: {
value: cdktf.stringToHclTerraform(this._project),
isBlock: false,
type: "simple",
storageClassType: "string",
},
remove_default_node_pool: {
value: cdktf.booleanToHclTerraform(this._removeDefaultNodePool),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
resource_labels: {
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._resourceLabels),
isBlock: false,
type: "map",
storageClassType: "stringMap",
},
subnetwork: {
value: cdktf.stringToHclTerraform(this._subnetwork),
isBlock: false,
type: "simple",
storageClassType: "string",
},
addons_config: {
value: (0, index_structs_1.containerClusterAddonsConfigToHclTerraform)(this._addonsConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterAddonsConfigList",
},
authenticator_groups_config: {
value: (0, index_structs_1.containerClusterAuthenticatorGroupsConfigToHclTerraform)(this._authenticatorGroupsConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterAuthenticatorGroupsConfigList",
},
binary_authorization: {
value: (0, index_structs_1.containerClusterBinaryAuthorizationToHclTerraform)(this._binaryAuthorization.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterBinaryAuthorizationList",
},
cluster_autoscaling: {
value: (0, index_structs_1.containerClusterClusterAutoscalingToHclTerraform)(this._clusterAutoscaling.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterClusterAutoscalingList",
},
confidential_nodes: {
value: (0, index_structs_1.containerClusterConfidentialNodesToHclTerraform)(this._confidentialNodes.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterConfidentialNodesList",
},
control_plane_endpoints_config: {
value: (0, index_structs_1.containerClusterControlPlaneEndpointsConfigToHclTerraform)(this._controlPlaneEndpointsConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterControlPlaneEndpointsConfigList",
},
cost_management_config: {
value: (0, index_structs_1.containerClusterCostManagementConfigToHclTerraform)(this._costManagementConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterCostManagementConfigList",
},
database_encryption: {
value: (0, index_structs_1.containerClusterDatabaseEncryptionToHclTerraform)(this._databaseEncryption.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterDatabaseEncryptionList",
},
default_snat_status: {
value: (0, index_structs_1.containerClusterDefaultSnatStatusToHclTerraform)(this._defaultSnatStatus.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterDefaultSnatStatusList",
},
dns_config: {
value: (0, index_structs_1.containerClusterDnsConfigToHclTerraform)(this._dnsConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterDnsConfigList",
},
enable_k8s_beta_apis: {
value: (0, index_structs_1.containerClusterEnableK8SBetaApisToHclTerraform)(this._enableK8SBetaApis.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterEnableK8SBetaApisList",
},
enterprise_config: {
value: (0, index_structs_1.containerClusterEnterpriseConfigToHclTerraform)(this._enterpriseConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterEnterpriseConfigList",
},
fleet: {
value: (0, index_structs_1.containerClusterFleetToHclTerraform)(this._fleet.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterFleetList",
},
gateway_api_config: {
value: (0, index_structs_1.containerClusterGatewayApiConfigToHclTerraform)(this._gatewayApiConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterGatewayApiConfigList",
},
identity_service_config: {
value: (0, index_structs_1.containerClusterIdentityServiceConfigToHclTerraform)(this._identityServiceConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterIdentityServiceConfigList",
},
ip_allocation_policy: {
value: (0, index_structs_1.containerClusterIpAllocationPolicyToHclTerraform)(this._ipAllocationPolicy.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterIpAllocationPolicyList",
},
logging_config: {
value: (0, index_structs_1.containerClusterLoggingConfigToHclTerraform)(this._loggingConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterLoggingConfigList",
},
maintenance_policy: {
value: (0, index_structs_1.containerClusterMaintenancePolicyToHclTerraform)(this._maintenancePolicy.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterMaintenancePolicyList",
},
master_auth: {
value: (0, index_structs_1.containerClusterMasterAuthToHclTerraform)(this._masterAuth.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterMasterAuthList",
},
master_authorized_networks_config: {
value: (0, index_structs_1.containerClusterMasterAuthorizedNetworksConfigToHclTerraform)(this._masterAuthorizedNetworksConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterMasterAuthorizedNetworksConfigList",
},
mesh_certificates: {
value: (0, index_structs_1.containerClusterMeshCertificatesToHclTerraform)(this._meshCertificates.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterMeshCertificatesList",
},
monitoring_config: {
value: (0, index_structs_1.containerClusterMonitoringConfigToHclTerraform)(this._monitoringConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterMonitoringConfigList",
},
network_policy: {
value: (0, index_structs_1.containerClusterNetworkPolicyToHclTerraform)(this._networkPolicy.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterNetworkPolicyList",
},
node_config: {
value: (0, index_structs_1.containerClusterNodeConfigToHclTerraform)(this._nodeConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterNodeConfigList",
},
node_pool: {
value: cdktf.listMapperHcl(index_structs_1.containerClusterNodePoolToHclTerraform, true)(this._nodePool.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterNodePoolList",
},
node_pool_auto_config: {
value: (0, index_structs_1.containerClusterNodePoolAutoConfigToHclTerraform)(this._nodePoolAutoConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterNodePoolAutoConfigList",
},
node_pool_defaults: {
value: (0, index_structs_1.containerClusterNodePoolDefaultsToHclTerraform)(this._nodePoolDefaults.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterNodePoolDefaultsList",
},
notification_config: {
value: (0, index_structs_1.containerClusterNotificationConfigToHclTerraform)(this._notificationConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterNotificationConfigList",
},
private_cluster_config: {
value: (0, index_structs_1.containerClusterPrivateClusterConfigToHclTerraform)(this._privateClusterConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterPrivateClusterConfigList",
},
release_channel: {
value: (0, index_structs_1.containerClusterReleaseChannelToHclTerraform)(this._releaseChannel.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterReleaseChannelList",
},
resource_usage_export_config: {
value: (0, index_structs_1.containerClusterResourceUsageExportConfigToHclTerraform)(this._resourceUsageExportConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterResourceUsageExportConfigList",
},
secret_manager_config: {
value: (0, index_structs_1.containerClusterSecretManagerConfigToHclTerraform)(this._secretManagerConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterSecretManagerConfigList",
},
security_posture_config: {
value: (0, index_structs_1.containerClusterSecurityPostureConfigToHclTerraform)(this._securityPostureConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterSecurityPostureConfigList",
},
service_external_ips_config: {
value: (0, index_structs_1.containerClusterServiceExternalIpsConfigToHclTerraform)(this._serviceExternalIpsConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterServiceExternalIpsConfigList",
},
timeouts: {
value: (0, index_structs_1.containerClusterTimeoutsToHclTerraform)(this._timeouts.internalValue),
isBlock: true,
type: "struct",
storageClassType: "ContainerClusterTimeouts",
},
user_managed_keys_config: {
value: (0, index_structs_1.containerClusterUserManagedKeysConfigToHclTerraform)(this._userManagedKeysConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterUserManagedKeysConfigList",
},
vertical_pod_autoscaling: {
value: (0, index_structs_1.containerClusterVerticalPodAutoscalingToHclTerraform)(this._verticalPodAutoscaling.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterVerticalPodAutoscalingList",
},
workload_identity_config: {
value: (0, index_structs_1.containerClusterWorkloadIdentityConfigToHclTerraform)(this._workloadIdentityConfig.internalValue),
isBlock: true,
type: "list",
storageClassType: "ContainerClusterWorkloadIdentityConfigList",
},
};
// remove undefined attributes
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
}
}
exports.ContainerCluster = ContainerCluster;
_a = JSII_RTTI_SYMBOL_1;
ContainerCluster[_a] = { fqn: "@cdktf/provider-google.containerCluster.ContainerCluster", version: "14.12.0" };
// =================
// STATIC PROPERTIES
// =================
ContainerCluster.tfResourceType = "google_container_cluster";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udGFpbmVyLWNsdXN0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7R0FHRztBQUVILDJDQUEyQztBQUUzQyxtREF1SjZFO0FBQzdFLGtEQUErQjtBQUUvQiwrQkFBK0I7QUFzYS9COztFQUVFO0FBQ0YsTUFBYSxnQkFBaUIsU0FBUSxLQUFLLENBQUMsaUJBQWlCO0lBTzNELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCOzs7Ozs7TUFNRTtJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFnQixFQUFFLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxRQUFrQztRQUM5SCxPQUFPLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUVMLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUVkOzs7Ozs7TUFNRTtJQUNGLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQThCO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YscUJBQXFCLEVBQUUsMEJBQTBCO1lBQ2pELDBCQUEwQixFQUFFO2dCQUMxQixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLHlCQUF5QixFQUFFLFFBQVE7YUFDcEM7WUFDRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZ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LEVBQUUsTUFBTTtnQkFDWixnQkFBZ0IsRUFBRSwyQ0FBMkM7YUFDOUQ7WUFDRCx3QkFBd0IsRUFBRTtnQkFDeEIsS0FBSyxFQUFFLElBQUEsb0VBQW9ELEVBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQztnQkFDdkcsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osZ0JBQWdCLEVBQUUsNENBQTRDO2FBQy9EO1lBQ0Qsd0JBQXdCLEVBQUU7Z0JBQ3hCLEtBQUssRUFBRSxJQUFBLG9FQUFvRCxFQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZHLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2dCQUNaLGdCQUFnQixFQUFFLDRDQUE0QzthQUMvRDtTQUNGLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUUsQ0FBQyxDQUFBO0lBQzVILENBQUM7O0FBenVESCw0Q0EwdURDOzs7QUF4dURDLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ0csK0JBQWMsR0FBRywwQkFBMEIsQUFBN0IsQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZywgXG5jb250YWluZXJDbHVzdGVyQWRkb25zQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZ1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJBZGRvbnNDb25maWdPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3RlckF1dGhlbnRpY2F0b3JHcm91cHNDb25maWcsIFxuY29udGFpbmVyQ2x1c3RlckF1dGhlbnRpY2F0b3JHcm91cHNDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyQXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZ1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJBdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJCaW5hcnlBdXRob3JpemF0aW9uLCBcbmNvbnRhaW5lckNsdXN0ZXJCaW5hcnlBdXRob3JpemF0aW9uVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckJpbmFyeUF1dGhvcml6YXRpb25Ub0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyQmluYXJ5QXV0aG9yaXphdGlvbk91dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyQ2x1c3RlckF1dG9zY2FsaW5nLCBcbmNvbnRhaW5lckNsdXN0ZXJDbHVzdGVyQXV0b3NjYWxpbmdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyQ2x1c3RlckF1dG9zY2FsaW5nVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlckNsdXN0ZXJBdXRvc2NhbGluZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyQ29uZmlkZW50aWFsTm9kZXMsIFxuY29udGFpbmVyQ2x1c3RlckNvbmZpZGVudGlhbE5vZGVzVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckNvbmZpZGVudGlhbE5vZGVzVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlckNvbmZpZGVudGlhbE5vZGVzT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJDb250cm9sUGxhbmVFbmRwb2ludHNDb25maWcsIFxuY29udGFpbmVyQ2x1c3RlckNvbnRyb2xQbGFuZUVuZHBvaW50c0NvbmZpZ1RvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJDb250cm9sUGxhbmVFbmRwb2ludHNDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyQ29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJDb3N0TWFuYWdlbWVudENvbmZpZywgXG5jb250YWluZXJDbHVzdGVyQ29zdE1hbmFnZW1lbnRDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyQ29zdE1hbmFnZW1lbnRDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyQ29zdE1hbmFnZW1lbnRDb25maWdPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3RlckRhdGFiYXNlRW5jcnlwdGlvbiwgXG5jb250YWluZXJDbHVzdGVyRGF0YWJhc2VFbmNyeXB0aW9uVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckRhdGFiYXNlRW5jcnlwdGlvblRvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJEYXRhYmFzZUVuY3J5cHRpb25PdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3RlckRlZmF1bHRTbmF0U3RhdHVzLCBcbmNvbnRhaW5lckNsdXN0ZXJEZWZhdWx0U25hdFN0YXR1c1RvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJEZWZhdWx0U25hdFN0YXR1c1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJEZWZhdWx0U25hdFN0YXR1c091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyRG5zQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJEbnNDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyRG5zQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlckRuc0NvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyRW5hYmxlSzhTQmV0YUFwaXMsIFxuY29udGFpbmVyQ2x1c3RlckVuYWJsZUs4U0JldGFBcGlzVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckVuYWJsZUs4U0JldGFBcGlzVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlckVuYWJsZUs4U0JldGFBcGlzT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJFbnRlcnByaXNlQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJFbnRlcnByaXNlQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckVudGVycHJpc2VDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyRW50ZXJwcmlzZUNvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyRmxlZXQsIFxuY29udGFpbmVyQ2x1c3RlckZsZWV0VG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckZsZWV0VG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlckZsZWV0T3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJHYXRld2F5QXBpQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJHYXRld2F5QXBpQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlckdhdGV3YXlBcGlDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyR2F0ZXdheUFwaUNvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVySWRlbnRpdHlTZXJ2aWNlQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJJZGVudGl0eVNlcnZpY2VDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVySWRlbnRpdHlTZXJ2aWNlQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlcklkZW50aXR5U2VydmljZUNvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVySXBBbGxvY2F0aW9uUG9saWN5LCBcbmNvbnRhaW5lckNsdXN0ZXJJcEFsbG9jYXRpb25Qb2xpY3lUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVySXBBbGxvY2F0aW9uUG9saWN5VG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlcklwQWxsb2NhdGlvblBvbGljeU91dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZywgXG5jb250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZ1RvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJMb2dnaW5nQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlckxvZ2dpbmdDb25maWdPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3Rlck1haW50ZW5hbmNlUG9saWN5LCBcbmNvbnRhaW5lckNsdXN0ZXJNYWludGVuYW5jZVBvbGljeVRvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJNYWludGVuYW5jZVBvbGljeVRvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJNYWludGVuYW5jZVBvbGljeU91dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyTWFzdGVyQXV0aCwgXG5jb250YWluZXJDbHVzdGVyTWFzdGVyQXV0aFRvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRoVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZywgXG5jb250YWluZXJDbHVzdGVyTWFzdGVyQXV0aG9yaXplZE5ldHdvcmtzQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZ1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWdPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3Rlck1lc2hDZXJ0aWZpY2F0ZXMsIFxuY29udGFpbmVyQ2x1c3Rlck1lc2hDZXJ0aWZpY2F0ZXNUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyTWVzaENlcnRpZmljYXRlc1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJNZXNoQ2VydGlmaWNhdGVzT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJNb25pdG9yaW5nQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJNb25pdG9yaW5nQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3Rlck1vbml0b3JpbmdDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyTW9uaXRvcmluZ0NvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyTmV0d29ya1BvbGljeSwgXG5jb250YWluZXJDbHVzdGVyTmV0d29ya1BvbGljeVRvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJOZXR3b3JrUG9saWN5VG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3Rlck5ldHdvcmtQb2xpY3lPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3Rlck5vZGVDb25maWcsIFxuY29udGFpbmVyQ2x1c3Rlck5vZGVDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyTm9kZUNvbmZpZ1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJOb2RlQ29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbCwgXG5jb250YWluZXJDbHVzdGVyTm9kZVBvb2xUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyTm9kZVBvb2xUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyTm9kZVBvb2xMaXN0LCBcbkNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbEF1dG9Db25maWcsIFxuY29udGFpbmVyQ2x1c3Rlck5vZGVQb29sQXV0b0NvbmZpZ1RvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbEF1dG9Db25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyTm9kZVBvb2xBdXRvQ29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbERlZmF1bHRzLCBcbmNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbERlZmF1bHRzVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3Rlck5vZGVQb29sRGVmYXVsdHNUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyTm9kZVBvb2xEZWZhdWx0c091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyTm90aWZpY2F0aW9uQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJOb3RpZmljYXRpb25Db25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyTm90aWZpY2F0aW9uQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3Rlck5vdGlmaWNhdGlvbkNvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyUHJpdmF0ZUNsdXN0ZXJDb25maWcsIFxuY29udGFpbmVyQ2x1c3RlclByaXZhdGVDbHVzdGVyQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlclByaXZhdGVDbHVzdGVyQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlclByaXZhdGVDbHVzdGVyQ29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJSZWxlYXNlQ2hhbm5lbCwgXG5jb250YWluZXJDbHVzdGVyUmVsZWFzZUNoYW5uZWxUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyUmVsZWFzZUNoYW5uZWxUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyUmVsZWFzZUNoYW5uZWxPdXRwdXRSZWZlcmVuY2UsIFxuQ29udGFpbmVyQ2x1c3RlclJlc291cmNlVXNhZ2VFeHBvcnRDb25maWcsIFxuY29udGFpbmVyQ2x1c3RlclJlc291cmNlVXNhZ2VFeHBvcnRDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyUmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZ1RvSGNsVGVycmFmb3JtLCBcbkNvbnRhaW5lckNsdXN0ZXJSZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJTZWNyZXRNYW5hZ2VyQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJTZWNyZXRNYW5hZ2VyQ29uZmlnVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlclNlY3JldE1hbmFnZXJDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyU2VjcmV0TWFuYWdlckNvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyU2VjdXJpdHlQb3N0dXJlQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJTZWN1cml0eVBvc3R1cmVDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyU2VjdXJpdHlQb3N0dXJlQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlclNlY3VyaXR5UG9zdHVyZUNvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyU2VydmljZUV4dGVybmFsSXBzQ29uZmlnLCBcbmNvbnRhaW5lckNsdXN0ZXJTZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWdUb1RlcnJhZm9ybSwgXG5jb250YWluZXJDbHVzdGVyU2VydmljZUV4dGVybmFsSXBzQ29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlclNlcnZpY2VFeHRlcm5hbElwc0NvbmZpZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyVGltZW91dHMsIFxuY29udGFpbmVyQ2x1c3RlclRpbWVvdXRzVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlclRpbWVvdXRzVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3RlclRpbWVvdXRzT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJVc2VyTWFuYWdlZEtleXNDb25maWcsIFxuY29udGFpbmVyQ2x1c3RlclVzZXJNYW5hZ2VkS2V5c0NvbmZpZ1RvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJVc2VyTWFuYWdlZEtleXNDb25maWdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyVXNlck1hbmFnZWRLZXlzQ29uZmlnT3V0cHV0UmVmZXJlbmNlLCBcbkNvbnRhaW5lckNsdXN0ZXJWZXJ0aWNhbFBvZEF1dG9zY2FsaW5nLCBcbmNvbnRhaW5lckNsdXN0ZXJWZXJ0aWNhbFBvZEF1dG9zY2FsaW5nVG9UZXJyYWZvcm0sIFxuY29udGFpbmVyQ2x1c3RlclZlcnRpY2FsUG9kQXV0b3NjYWxpbmdUb0hjbFRlcnJhZm9ybSwgXG5Db250YWluZXJDbHVzdGVyVmVydGljYWxQb2RBdXRvc2NhbGluZ091dHB1dFJlZmVyZW5jZSwgXG5Db250YWluZXJDbHVzdGVyV29ya2xvYWRJZGVudGl0eUNvbmZpZywgXG5jb250YWluZXJDbHVzdGVyV29ya2xvYWRJZGVudGl0eUNvbmZpZ1RvVGVycmFmb3JtLCBcbmNvbnRhaW5lckNsdXN0ZXJXb3JrbG9hZElkZW50aXR5Q29uZmlnVG9IY2xUZXJyYWZvcm0sIFxuQ29udGFpbmVyQ2x1c3Rlcldvcmtsb2FkSWRlbnRpdHlDb25maWdPdXRwdXRSZWZlcmVuY2V9IGZyb20gJy4vaW5kZXgtc3RydWN0cydcbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgtc3RydWN0cydcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSAnY2RrdGYnO1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJDbHVzdGVyQ29uZmlnIGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtTWV0YUFyZ3VtZW50cyB7XG4gIC8qKlxuICAqIEVuYWJsZSBORVRfQURNSU4gZm9yIHRoaXMgY2x1c3Rlci5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2FsbG93X25ldF9hZG1pbiBDb250YWluZXJDbHVzdGVyI2FsbG93X25ldF9hZG1pbn1cbiAgKi9cbiAgcmVhZG9ubHkgYWxsb3dOZXRBZG1pbj86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogVGhlIElQIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIEt1YmVybmV0ZXMgcG9kcyBpbiB0aGlzIGNsdXN0ZXIgaW4gQ0lEUiBub3RhdGlvbiAoZS5nLiAxMC45Ni4wLjAvMTQpLiBMZWF2ZSBibGFuayB0byBoYXZlIG9uZSBhdXRvbWF0aWNhbGx5IGNob3NlbiBvciBzcGVjaWZ5IGEgLzE0IGJsb2NrIGluIDEwLjAuMC4wLzguIFRoaXMgZmllbGQgd2lsbCBvbmx5IHdvcmsgZm9yIHJvdXRlcy1iYXNlZCBjbHVzdGVycywgd2hlcmUgaXBfYWxsb2NhdGlvbl9wb2xpY3kgaXMgbm90IGRlZmluZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNjbHVzdGVyX2lwdjRfY2lkciBDb250YWluZXJDbHVzdGVyI2NsdXN0ZXJfaXB2NF9jaWRyfVxuICAqL1xuICByZWFkb25seSBjbHVzdGVySXB2NENpZHI/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBkZXNpcmVkIGRhdGFwYXRoIHByb3ZpZGVyIGZvciB0aGlzIGNsdXN0ZXIuIEJ5IGRlZmF1bHQsIHVzZXMgdGhlIElQVGFibGVzLWJhc2VkIGt1YmUtcHJveHkgaW1wbGVtZW50YXRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNkYXRhcGF0aF9wcm92aWRlciBDb250YWluZXJDbHVzdGVyI2RhdGFwYXRoX3Byb3ZpZGVyfVxuICAqL1xuICByZWFkb25seSBkYXRhcGF0aFByb3ZpZGVyPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBwb2RzIHBlciBub2RlIGluIHRoaXMgY2x1c3Rlci4gVGhpcyBkb2Vzbid0IHdvcmsgb24gXCJyb3V0ZXMtYmFzZWRcIiBjbHVzdGVycywgY2x1c3RlcnMgdGhhdCBkb24ndCBoYXZlIElQIEFsaWFzaW5nIGVuYWJsZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNkZWZhdWx0X21heF9wb2RzX3Blcl9ub2RlIENvbnRhaW5lckNsdXN0ZXIjZGVmYXVsdF9tYXhfcG9kc19wZXJfbm9kZX1cbiAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdE1heFBvZHNQZXJOb2RlPzogbnVtYmVyO1xuICAvKipcbiAgKiBXaGVuIHRoZSBmaWVsZCBpcyBzZXQgdG8gdHJ1ZSBvciB1bnNldCBpbiBUZXJyYWZvcm0gc3RhdGUsIGEgdGVycmFmb3JtIGFwcGx5IG9yIHRlcnJhZm9ybSBkZXN0cm95IHRoYXQgd291bGQgZGVsZXRlIHRoZSBjbHVzdGVyIHdpbGwgZmFpbC4gV2hlbiB0aGUgZmllbGQgaXMgc2V0IHRvIGZhbHNlLCBkZWxldGluZyB0aGUgY2x1c3RlciBpcyBhbGxvd2VkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZGVsZXRpb25fcHJvdGVjdGlvbiBDb250YWluZXJDbHVzdGVyI2RlbGV0aW9uX3Byb3RlY3Rpb259XG4gICovXG4gIHJlYWRvbmx5IGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogIERlc2NyaXB0aW9uIG9mIHRoZSBjbHVzdGVyLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZGVzY3JpcHRpb24gQ29udGFpbmVyQ2x1c3RlciNkZXNjcmlwdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAqIEVuYWJsZSBBdXRvcGlsb3QgZm9yIHRoaXMgY2x1c3Rlci5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9hdXRvcGlsb3QgQ29udGFpbmVyQ2x1c3RlciNlbmFibGVfYXV0b3BpbG90fVxuICAqL1xuICByZWFkb25seSBlbmFibGVBdXRvcGlsb3Q/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFdoZXRoZXIgQ2lsaXVtIGNsdXN0ZXItd2lkZSBuZXR3b3JrIHBvbGljeSBpcyBlbmFibGVkIG9uIHRoaXMgY2x1c3Rlci5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9jaWxpdW1fY2x1c3RlcndpZGVfbmV0d29ya19wb2xpY3kgQ29udGFpbmVyQ2x1c3RlciNlbmFibGVfY2lsaXVtX2NsdXN0ZXJ3aWRlX25ldHdvcmtfcG9saWN5fVxuICAqL1xuICByZWFkb25seSBlbmFibGVDaWxpdW1DbHVzdGVyd2lkZU5ldHdvcmtQb2xpY3k/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFdoZXRoZXIgSW50cmEtbm9kZSB2aXNpYmlsaXR5IGlzIGVuYWJsZWQgZm9yIHRoaXMgY2x1c3Rlci4gVGhpcyBtYWtlcyBzYW1lIG5vZGUgcG9kIHRvIHBvZCB0cmFmZmljIHZpc2libGUgZm9yIFZQQyBuZXR3b3JrLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZW5hYmxlX2ludHJhbm9kZV92aXNpYmlsaXR5IENvbnRhaW5lckNsdXN0ZXIjZW5hYmxlX2ludHJhbm9kZV92aXNpYmlsaXR5fVxuICAqL1xuICByZWFkb25seSBlbmFibGVJbnRyYW5vZGVWaXNpYmlsaXR5PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBXaGV0aGVyIHRvIGVuYWJsZSBLdWJlcm5ldGVzIEFscGhhIGZlYXR1cmVzIGZvciB0aGlzIGNsdXN0ZXIuIE5vdGUgdGhhdCB3aGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBjbHVzdGVyIGNhbm5vdCBiZSB1cGdyYWRlZCBhbmQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgYWZ0ZXIgMzAgZGF5cy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9rdWJlcm5ldGVzX2FscGhhIENvbnRhaW5lckNsdXN0ZXIjZW5hYmxlX2t1YmVybmV0ZXNfYWxwaGF9XG4gICovXG4gIHJlYWRvbmx5IGVuYWJsZUt1YmVybmV0ZXNBbHBoYT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogV2hldGhlciBMNElMQiBTdWJzZXR0aW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgY2x1c3Rlci5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9sNF9pbGJfc3Vic2V0dGluZyBDb250YWluZXJDbHVzdGVyI2VuYWJsZV9sNF9pbGJfc3Vic2V0dGluZ31cbiAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTDRJbGJTdWJzZXR0aW5nPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBXaGV0aGVyIHRoZSBBQkFDIGF1dGhvcml6ZXIgaXMgZW5hYmxlZCBmb3IgdGhpcyBjbHVzdGVyLiBXaGVuIGVuYWJsZWQsIGlkZW50aXRpZXMgaW4gdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHNlcnZpY2UgYWNjb3VudHMsIG5vZGVzLCBhbmQgY29udHJvbGxlcnMsIHdpbGwgaGF2ZSBzdGF0aWNhbGx5IGdyYW50ZWQgcGVybWlzc2lvbnMgYmV5b25kIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSBSQkFDIGNvbmZpZ3VyYXRpb24gb3IgSUFNLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9sZWdhY3lfYWJhYyBDb250YWluZXJDbHVzdGVyI2VuYWJsZV9sZWdhY3lfYWJhY31cbiAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTGVnYWN5QWJhYz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogV2hldGhlciBtdWx0aS1uZXR3b3JraW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgY2x1c3Rlci5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9tdWx0aV9uZXR3b3JraW5nIENvbnRhaW5lckNsdXN0ZXIjZW5hYmxlX211bHRpX25ldHdvcmtpbmd9XG4gICovXG4gIHJlYWRvbmx5IGVuYWJsZU11bHRpTmV0d29ya2luZz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRW5hYmxlIFNoaWVsZGVkIE5vZGVzIGZlYXR1cmVzIG9uIGFsbCBub2RlcyBpbiB0aGlzIGNsdXN0ZXIuIERlZmF1bHRzIHRvIHRydWUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNlbmFibGVfc2hpZWxkZWRfbm9kZXMgQ29udGFpbmVyQ2x1c3RlciNlbmFibGVfc2hpZWxkZWRfbm9kZXN9XG4gICovXG4gIHJlYWRvbmx5IGVuYWJsZVNoaWVsZGVkTm9kZXM/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFdoZXRoZXIgdG8gZW5hYmxlIENsb3VkIFRQVSByZXNvdXJjZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZW5hYmxlX3RwdSBDb250YWluZXJDbHVzdGVyI2VuYWJsZV90cHV9XG4gICovXG4gIHJlYWRvbmx5IGVuYWJsZVRwdT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjaWQgQ29udGFpbmVyQ2x1c3RlciNpZH1cbiAgKlxuICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZSBpZCBmaWVsZCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCByZXNvdXJjZXMgaW4gVGVycmFmb3JtIHByb3ZpZGVycyB1c2luZyBhIFRlcnJhZm9ybSBwcm92aWRlciBTREsgdmVyc2lvbiBiZWxvdyAyLlxuICAqIElmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIHNldHRpbmcgdGhpcyB2YWx1ZSBpdCBtaWdodCBub3QgYmUgc2V0dGFibGUuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgcHJvdmlkZXIgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgaXQgc2hvdWxkIGJlIHNldHRhYmxlLlxuICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIG51bWJlciBvZiBub2RlcyB0byBjcmVhdGUgaW4gdGhpcyBjbHVzdGVyJ3MgZGVmYXVsdCBub2RlIHBvb2wuIEluIHJlZ2lvbmFsIG9yIG11bHRpLXpvbmFsIGNsdXN0ZXJzLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgcGVyIHpvbmUuIE11c3QgYmUgc2V0IGlmIG5vZGVfcG9vbCBpcyBub3Qgc2V0LiBJZiB5b3UncmUgdXNpbmcgZ29vZ2xlX2NvbnRhaW5lcl9ub2RlX3Bvb2wgb2JqZWN0cyB3aXRoIG5vIGRlZmF1bHQgbm9kZSBwb29sLCB5b3UnbGwgbmVlZCB0byBzZXQgdGhpcyB0byBhIHZhbHVlIG9mIGF0IGxlYXN0IDEsIGFsb25nc2lkZSBzZXR0aW5nIHJlbW92ZV9kZWZhdWx0X25vZGVfcG9vbCB0byB0cnVlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjaW5pdGlhbF9ub2RlX2NvdW50IENvbnRhaW5lckNsdXN0ZXIjaW5pdGlhbF9ub2RlX2NvdW50fVxuICAqL1xuICByZWFkb25seSBpbml0aWFsTm9kZUNvdW50PzogbnVtYmVyO1xuICAvKipcbiAgKiBUaGUgbG9jYXRpb24gKHJlZ2lvbiBvciB6b25lKSBpbiB3aGljaCB0aGUgY2x1c3RlciBtYXN0ZXIgd2lsbCBiZSBjcmVhdGVkLCBhcyB3ZWxsIGFzIHRoZSBkZWZhdWx0IG5vZGUgbG9jYXRpb24uIElmIHlvdSBzcGVjaWZ5IGEgem9uZSAoc3VjaCBhcyB1cy1jZW50cmFsMS1hKSwgdGhlIGNsdXN0ZXIgd2lsbCBiZSBhIHpvbmFsIGNsdXN0ZXIgd2l0aCBhIHNpbmdsZSBjbHVzdGVyIG1hc3Rlci4gSWYgeW91IHNwZWNpZnkgYSByZWdpb24gKHN1Y2ggYXMgdXMtd2VzdDEpLCB0aGUgY2x1c3RlciB3aWxsIGJlIGEgcmVnaW9uYWwgY2x1c3RlciB3aXRoIG11bHRpcGxlIG1hc3RlcnMgc3ByZWFkIGFjcm9zcyB6b25lcyBpbiB0aGUgcmVnaW9uLCBhbmQgd2l0aCBkZWZhdWx0IG5vZGUgbG9jYXRpb25zIGluIHRob3NlIHpvbmVzIGFzIHdlbGwuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNsb2NhdGlvbiBDb250YWluZXJDbHVzdGVyI2xvY2F0aW9ufVxuICAqL1xuICByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIGxvZ2dpbmcgc2VydmljZSB0aGF0IHRoZSBjbHVzdGVyIHNob3VsZCB3cml0ZSBsb2dzIHRvLiBBdmFpbGFibGUgb3B0aW9ucyBpbmNsdWRlIGxvZ2dpbmcuZ29vZ2xlYXBpcy5jb20oTGVnYWN5IFN0YWNrZHJpdmVyKSwgbG9nZ2luZy5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzKFN0YWNrZHJpdmVyIEt1YmVybmV0ZXMgRW5naW5lIExvZ2dpbmcpLCBhbmQgbm9uZS4gRGVmYXVsdHMgdG8gbG9nZ2luZy5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbG9nZ2luZ19zZXJ2aWNlIENvbnRhaW5lckNsdXN0ZXIjbG9nZ2luZ19zZXJ2aWNlfVxuICAqL1xuICByZWFkb25seSBsb2dnaW5nU2VydmljZT86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIG1pbmltdW0gdmVyc2lvbiBvZiB0aGUgbWFzdGVyLiBHS0Ugd2lsbCBhdXRvLXVwZGF0ZSB0aGUgbWFzdGVyIHRvIG5ldyB2ZXJzaW9ucywgc28gdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhlIGN1cnJlbnQgbWFzdGVyIHZlcnNpb24tLXVzZSB0aGUgcmVhZC1vbmx5IG1hc3Rlcl92ZXJzaW9uIGZpZWxkIHRvIG9idGFpbiB0aGF0LiBJZiB1bnNldCwgdGhlIGNsdXN0ZXIncyB2ZXJzaW9uIHdpbGwgYmUgc2V0IGJ5IEdLRSB0byB0aGUgdmVyc2lvbiBvZiB0aGUgbW9zdCByZWNlbnQgb2ZmaWNpYWwgcmVsZWFzZSAod2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXRlc3QgdmVyc2lvbikuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNtaW5fbWFzdGVyX3ZlcnNpb24gQ29udGFpbmVyQ2x1c3RlciNtaW5fbWFzdGVyX3ZlcnNpb259XG4gICovXG4gIHJlYWRvbmx5IG1pbk1hc3RlclZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBtb25pdG9yaW5nIHNlcnZpY2UgdGhhdCB0aGUgY2x1c3RlciBzaG91bGQgd3JpdGUgbWV0cmljcyB0by4gQXV0b21hdGljYWxseSBzZW5kIG1ldHJpY3MgZnJvbSBwb2RzIGluIHRoZSBjbHVzdGVyIHRvIHRoZSBHb29nbGUgQ2xvdWQgTW9uaXRvcmluZyBBUEkuIFZNIG1ldHJpY3Mgd2lsbCBiZSBjb2xsZWN0ZWQgYnkgR29vZ2xlIENvbXB1dGUgRW5naW5lIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nIEF2YWlsYWJsZSBvcHRpb25zIGluY2x1ZGUgbW9uaXRvcmluZy5nb29nbGVhcGlzLmNvbShMZWdhY3kgU3RhY2tkcml2ZXIpLCBtb25pdG9yaW5nLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMoU3RhY2tkcml2ZXIgS3ViZXJuZXRlcyBFbmdpbmUgTW9uaXRvcmluZyksIGFuZCBub25lLiBEZWZhdWx0cyB0byBtb25pdG9yaW5nLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNtb25pdG9yaW5nX3NlcnZpY2UgQ29udGFpbmVyQ2x1c3RlciNtb25pdG9yaW5nX3NlcnZpY2V9XG4gICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdTZXJ2aWNlPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgbmFtZSBvZiB0aGUgY2x1c3RlciwgdW5pcXVlIHdpdGhpbiB0aGUgcHJvamVjdCBhbmQgbG9jYXRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNuYW1lIENvbnRhaW5lckNsdXN0ZXIjbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgbmFtZSBvciBzZWxmX2xpbmsgb2YgdGhlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBuZXR3b3JrIHRvIHdoaWNoIHRoZSBjbHVzdGVyIGlzIGNvbm5lY3RlZC4gRm9yIFNoYXJlZCBWUEMsIHNldCB0aGlzIHRvIHRoZSBzZWxmIGxpbmsgb2YgdGhlIHNoYXJlZCBuZXR3b3JrLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbmV0d29yayBDb250YWluZXJDbHVzdGVyI25ldHdvcmt9XG4gICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERldGVybWluZXMgd2hldGhlciBhbGlhcyBJUHMgb3Igcm91dGVzIHdpbGwgYmUgdXNlZCBmb3IgcG9kIElQcyBpbiB0aGUgY2x1c3Rlci4gRGVmYXVsdHMgdG8gVlBDX05BVElWRSBmb3IgbmV3IGNsdXN0ZXJzLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbmV0d29ya2luZ19tb2RlIENvbnRhaW5lckNsdXN0ZXIjbmV0d29ya2luZ19tb2RlfVxuICAqL1xuICByZWFkb25seSBuZXR3b3JraW5nTW9kZT86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIGxpc3Qgb2Ygem9uZXMgaW4gd2hpY2ggdGhlIGNsdXN0ZXIncyBub2RlcyBhcmUgbG9jYXRlZC4gTm9kZXMgbXVzdCBiZSBpbiB0aGUgcmVnaW9uIG9mIHRoZWlyIHJlZ2lvbmFsIGNsdXN0ZXIgb3IgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZWlyIGNsdXN0ZXIncyB6b25lIGZvciB6b25hbCBjbHVzdGVycy4gSWYgdGhpcyBpcyBzcGVjaWZpZWQgZm9yIGEgem9uYWwgY2x1c3Rlciwgb21pdCB0aGUgY2x1c3RlcidzIHpvbmUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNub2RlX2xvY2F0aW9ucyBDb250YWluZXJDbHVzdGVyI25vZGVfbG9jYXRpb25zfVxuICAqL1xuICByZWFkb25seSBub2RlTG9jYXRpb25zPzogc3RyaW5nW107XG4gIC8qKlxuICAqIFRoZSBLdWJlcm5ldGVzIHZlcnNpb24gb24gdGhlIG5vZGVzLiBNdXN0IGVpdGhlciBiZSB1bnNldCBvciBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgbWluX21hc3Rlcl92ZXJzaW9uIG9uIGNyZWF0ZS4gRGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgdmVyc2lvbiBzZXQgYnkgR0tFIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGF0ZXN0IHZlcnNpb24uIFRoaXMgb25seSBhZmZlY3RzIG5vZGVzIGluIHRoZSBkZWZhdWx0IG5vZGUgcG9vbC4gV2hpbGUgYSBmdXp6eSB2ZXJzaW9uIGNhbiBiZSBzcGVjaWZpZWQsIGl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ugc3BlY2lmeSBleHBsaWNpdCB2ZXJzaW9ucyBhcyBUZXJyYWZvcm0gd2lsbCBzZWUgc3B1cmlvdXMgZGlmZnMgd2hlbiBmdXp6eSB2ZXJzaW9ucyBhcmUgdXNlZC4gU2VlIHRoZSBnb29nbGVfY29udGFpbmVyX2VuZ2luZV92ZXJzaW9ucyBkYXRhIHNvdXJjZSdzIHZlcnNpb25fcHJlZml4IGZpZWxkIHRvIGFwcHJveGltYXRlIGZ1enp5IHZlcnNpb25zIGluIGEgVGVycmFmb3JtLWNvbXBhdGlibGUgd2F5LiBUbyB1cGRhdGUgbm9kZXMgaW4gb3RoZXIgbm9kZSBwb29scywgdXNlIHRoZSB2ZXJzaW9uIGF0dHJpYnV0ZSBvbiB0aGUgbm9kZSBwb29sLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbm9kZV92ZXJzaW9uIENvbnRhaW5lckNsdXN0ZXIjbm9kZV92ZXJzaW9ufVxuICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIGRlc2lyZWQgc3RhdGUgb2YgSVB2NiBjb25uZWN0aXZpdHkgdG8gR29vZ2xlIFNlcnZpY2VzLiBCeSBkZWZhdWx0LCBubyBwcml2YXRlIElQdjYgYWNjZXNzIHRvIG9yIGZyb20gR29vZ2xlIFNlcnZpY2VzIChhbGwgYWNjZXNzIHdpbGwgYmUgdmlhIElQdjQpLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjcHJpdmF0ZV9pcHY2X2dvb2dsZV9hY2Nlc3MgQ29udGFpbmVyQ2x1c3RlciNwcml2YXRlX2lwdjZfZ29vZ2xlX2FjY2Vzc31cbiAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3M/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBJRCBvZiB0aGUgcHJvamVjdCBpbiB3aGljaCB0aGUgcmVzb3VyY2UgYmVsb25ncy4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCB0aGUgcHJvdmlkZXIgcHJvamVjdCBpcyB1c2VkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjcHJvamVjdCBDb250YWluZXJDbHVzdGVyI3Byb2plY3R9XG4gICovXG4gIHJlYWRvbmx5IHByb2plY3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAqIElmIHRydWUsIGRlbGV0ZXMgdGhlIGRlZmF1bHQgbm9kZSBwb29sIHVwb24gY2x1c3RlciBjcmVhdGlvbi4gSWYgeW91J3JlIHVzaW5nIGdvb2dsZV9jb250YWluZXJfbm9kZV9wb29sIHJlc291cmNlcyB3aXRoIG5vIGRlZmF1bHQgbm9kZSBwb29sLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSwgYWxvbmdzaWRlIHNldHRpbmcgaW5pdGlhbF9ub2RlX2NvdW50IHRvIGF0IGxlYXN0IDEuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNyZW1vdmVfZGVmYXVsdF9ub2RlX3Bvb2wgQ29udGFpbmVyQ2x1c3RlciNyZW1vdmVfZGVmYXVsdF9ub2RlX3Bvb2x9XG4gICovXG4gIHJlYWRvbmx5IHJlbW92ZURlZmF1bHROb2RlUG9vbD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogVGhlIEdDRSByZXNvdXJjZSBsYWJlbHMgKGEgbWFwIG9mIGtleS92YWx1ZSBwYWlycykgdG8gYmUgYXBwbGllZCB0byB0aGUgY2x1c3Rlci5cbiAgKiBcbiAgKiBcdFx0XHRcdCoqTm90ZSoqOiBUaGlzIGZpZWxkIGlzIG5vbi1hdXRob3JpdGF0aXZlLCBhbmQgd2lsbCBvbmx5IG1hbmFnZSB0aGUgbGFiZWxzIHByZXNlbnQgaW4geW91ciBjb25maWd1cmF0aW9uLlxuICAqIFx0XHRcdFx0UGxlYXNlIHJlZmVyIHRvIHRoZSBmaWVsZCAnZWZmZWN0aXZlX2xhYmVscycgZm9yIGFsbCBvZiB0aGUgbGFiZWxzIHByZXNlbnQgb24gdGhlIHJlc291cmNlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjcmVzb3VyY2VfbGFiZWxzIENvbnRhaW5lckNsdXN0ZXIjcmVzb3VyY2VfbGFiZWxzfVxuICAqL1xuICByZWFkb25seSByZXNvdXJjZUxhYmVscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAqIFRoZSBuYW1lIG9yIHNlbGZfbGluayBvZiB0aGUgR29vZ2xlIENvbXB1dGUgRW5naW5lIHN1Ym5ldHdvcmsgaW4gd2hpY2ggdGhlIGNsdXN0ZXIncyBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjc3VibmV0d29yayBDb250YWluZXJDbHVzdGVyI3N1Ym5ldHdvcmt9XG4gICovXG4gIHJlYWRvbmx5IHN1Ym5ldHdvcms/OiBzdHJpbmc7XG4gIC8qKlxuICAqIGFkZG9uc19jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2FkZG9uc19jb25maWcgQ29udGFpbmVyQ2x1c3RlciNhZGRvbnNfY29uZmlnfVxuICAqL1xuICByZWFkb25seSBhZGRvbnNDb25maWc/OiBDb250YWluZXJDbHVzdGVyQWRkb25zQ29uZmlnO1xuICAvKipcbiAgKiBhdXRoZW50aWNhdG9yX2dyb3Vwc19jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2F1dGhlbnRpY2F0b3JfZ3JvdXBzX2NvbmZpZyBDb250YWluZXJDbHVzdGVyI2F1dGhlbnRpY2F0b3JfZ3JvdXBzX2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZz86IENvbnRhaW5lckNsdXN0ZXJBdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnO1xuICAvKipcbiAgKiBiaW5hcnlfYXV0aG9yaXphdGlvbiBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjYmluYXJ5X2F1dGhvcml6YXRpb24gQ29udGFpbmVyQ2x1c3RlciNiaW5hcnlfYXV0aG9yaXphdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgYmluYXJ5QXV0aG9yaXphdGlvbj86IENvbnRhaW5lckNsdXN0ZXJCaW5hcnlBdXRob3JpemF0aW9uO1xuICAvKipcbiAgKiBjbHVzdGVyX2F1dG9zY2FsaW5nIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNjbHVzdGVyX2F1dG9zY2FsaW5nIENvbnRhaW5lckNsdXN0ZXIjY2x1c3Rlcl9hdXRvc2NhbGluZ31cbiAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlckF1dG9zY2FsaW5nPzogQ29udGFpbmVyQ2x1c3RlckNsdXN0ZXJBdXRvc2NhbGluZztcbiAgLyoqXG4gICogY29uZmlkZW50aWFsX25vZGVzIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNjb25maWRlbnRpYWxfbm9kZXMgQ29udGFpbmVyQ2x1c3RlciNjb25maWRlbnRpYWxfbm9kZXN9XG4gICovXG4gIHJlYWRvbmx5IGNvbmZpZGVudGlhbE5vZGVzPzogQ29udGFpbmVyQ2x1c3RlckNvbmZpZGVudGlhbE5vZGVzO1xuICAvKipcbiAgKiBjb250cm9sX3BsYW5lX2VuZHBvaW50c19jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2NvbnRyb2xfcGxhbmVfZW5kcG9pbnRzX2NvbmZpZyBDb250YWluZXJDbHVzdGVyI2NvbnRyb2xfcGxhbmVfZW5kcG9pbnRzX2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgY29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnPzogQ29udGFpbmVyQ2x1c3RlckNvbnRyb2xQbGFuZUVuZHBvaW50c0NvbmZpZztcbiAgLyoqXG4gICogY29zdF9tYW5hZ2VtZW50X2NvbmZpZyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjY29zdF9tYW5hZ2VtZW50X2NvbmZpZyBDb250YWluZXJDbHVzdGVyI2Nvc3RfbWFuYWdlbWVudF9jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IGNvc3RNYW5hZ2VtZW50Q29uZmlnPzogQ29udGFpbmVyQ2x1c3RlckNvc3RNYW5hZ2VtZW50Q29uZmlnO1xuICAvKipcbiAgKiBkYXRhYmFzZV9lbmNyeXB0aW9uIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNkYXRhYmFzZV9lbmNyeXB0aW9uIENvbnRhaW5lckNsdXN0ZXIjZGF0YWJhc2VfZW5jcnlwdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VFbmNyeXB0aW9uPzogQ29udGFpbmVyQ2x1c3RlckRhdGFiYXNlRW5jcnlwdGlvbjtcbiAgLyoqXG4gICogZGVmYXVsdF9zbmF0X3N0YXR1cyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZGVmYXVsdF9zbmF0X3N0YXR1cyBDb250YWluZXJDbHVzdGVyI2RlZmF1bHRfc25hdF9zdGF0dXN9XG4gICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTbmF0U3RhdHVzPzogQ29udGFpbmVyQ2x1c3RlckRlZmF1bHRTbmF0U3RhdHVzO1xuICAvKipcbiAgKiBkbnNfY29uZmlnIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNkbnNfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjZG5zX2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgZG5zQ29uZmlnPzogQ29udGFpbmVyQ2x1c3RlckRuc0NvbmZpZztcbiAgLyoqXG4gICogZW5hYmxlX2s4c19iZXRhX2FwaXMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2VuYWJsZV9rOHNfYmV0YV9hcGlzIENvbnRhaW5lckNsdXN0ZXIjZW5hYmxlX2s4c19iZXRhX2FwaXN9XG4gICovXG4gIHJlYWRvbmx5IGVuYWJsZUs4U0JldGFBcGlzPzogQ29udGFpbmVyQ2x1c3RlckVuYWJsZUs4U0JldGFBcGlzO1xuICAvKipcbiAgKiBlbnRlcnByaXNlX2NvbmZpZyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZW50ZXJwcmlzZV9jb25maWcgQ29udGFpbmVyQ2x1c3RlciNlbnRlcnByaXNlX2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgZW50ZXJwcmlzZUNvbmZpZz86IENvbnRhaW5lckNsdXN0ZXJFbnRlcnByaXNlQ29uZmlnO1xuICAvKipcbiAgKiBmbGVldCBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZmxlZXQgQ29udGFpbmVyQ2x1c3RlciNmbGVldH1cbiAgKi9cbiAgcmVhZG9ubHkgZmxlZXQ/OiBDb250YWluZXJDbHVzdGVyRmxlZXQ7XG4gIC8qKlxuICAqIGdhdGV3YXlfYXBpX2NvbmZpZyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjZ2F0ZXdheV9hcGlfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjZ2F0ZXdheV9hcGlfY29uZmlnfVxuICAqL1xuICByZWFkb25seSBnYXRld2F5QXBpQ29uZmlnPzogQ29udGFpbmVyQ2x1c3RlckdhdGV3YXlBcGlDb25maWc7XG4gIC8qKlxuICAqIGlkZW50aXR5X3NlcnZpY2VfY29uZmlnIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNpZGVudGl0eV9zZXJ2aWNlX2NvbmZpZyBDb250YWluZXJDbHVzdGVyI2lkZW50aXR5X3NlcnZpY2VfY29uZmlnfVxuICAqL1xuICByZWFkb25seSBpZGVudGl0eVNlcnZpY2VDb25maWc/OiBDb250YWluZXJDbHVzdGVySWRlbnRpdHlTZXJ2aWNlQ29uZmlnO1xuICAvKipcbiAgKiBpcF9hbGxvY2F0aW9uX3BvbGljeSBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjaXBfYWxsb2NhdGlvbl9wb2xpY3kgQ29udGFpbmVyQ2x1c3RlciNpcF9hbGxvY2F0aW9uX3BvbGljeX1cbiAgKi9cbiAgcmVhZG9ubHkgaXBBbGxvY2F0aW9uUG9saWN5PzogQ29udGFpbmVyQ2x1c3RlcklwQWxsb2NhdGlvblBvbGljeTtcbiAgLyoqXG4gICogbG9nZ2luZ19jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2xvZ2dpbmdfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjbG9nZ2luZ19jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IGxvZ2dpbmdDb25maWc/OiBDb250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZztcbiAgLyoqXG4gICogbWFpbnRlbmFuY2VfcG9saWN5IGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNtYWludGVuYW5jZV9wb2xpY3kgQ29udGFpbmVyQ2x1c3RlciNtYWludGVuYW5jZV9wb2xpY3l9XG4gICovXG4gIHJlYWRvbmx5IG1haW50ZW5hbmNlUG9saWN5PzogQ29udGFpbmVyQ2x1c3Rlck1haW50ZW5hbmNlUG9saWN5O1xuICAvKipcbiAgKiBtYXN0ZXJfYXV0aCBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbWFzdGVyX2F1dGggQ29udGFpbmVyQ2x1c3RlciNtYXN0ZXJfYXV0aH1cbiAgKi9cbiAgcmVhZG9ubHkgbWFzdGVyQXV0aD86IENvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRoO1xuICAvKipcbiAgKiBtYXN0ZXJfYXV0aG9yaXplZF9uZXR3b3Jrc19jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI21hc3Rlcl9hdXRob3JpemVkX25ldHdvcmtzX2NvbmZpZyBDb250YWluZXJDbHVzdGVyI21hc3Rlcl9hdXRob3JpemVkX25ldHdvcmtzX2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgbWFzdGVyQXV0aG9yaXplZE5ldHdvcmtzQ29uZmlnPzogQ29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZztcbiAgLyoqXG4gICogbWVzaF9jZXJ0aWZpY2F0ZXMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI21lc2hfY2VydGlmaWNhdGVzIENvbnRhaW5lckNsdXN0ZXIjbWVzaF9jZXJ0aWZpY2F0ZXN9XG4gICovXG4gIHJlYWRvbmx5IG1lc2hDZXJ0aWZpY2F0ZXM/OiBDb250YWluZXJDbHVzdGVyTWVzaENlcnRpZmljYXRlcztcbiAgLyoqXG4gICogbW9uaXRvcmluZ19jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI21vbml0b3JpbmdfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjbW9uaXRvcmluZ19jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdDb25maWc/OiBDb250YWluZXJDbHVzdGVyTW9uaXRvcmluZ0NvbmZpZztcbiAgLyoqXG4gICogbmV0d29ya19wb2xpY3kgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI25ldHdvcmtfcG9saWN5IENvbnRhaW5lckNsdXN0ZXIjbmV0d29ya19wb2xpY3l9XG4gICovXG4gIHJlYWRvbmx5IG5ldHdvcmtQb2xpY3k/OiBDb250YWluZXJDbHVzdGVyTmV0d29ya1BvbGljeTtcbiAgLyoqXG4gICogbm9kZV9jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI25vZGVfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjbm9kZV9jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IG5vZGVDb25maWc/OiBDb250YWluZXJDbHVzdGVyTm9kZUNvbmZpZztcbiAgLyoqXG4gICogbm9kZV9wb29sIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNub2RlX3Bvb2wgQ29udGFpbmVyQ2x1c3RlciNub2RlX3Bvb2x9XG4gICovXG4gIHJlYWRvbmx5IG5vZGVQb29sPzogQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sW10gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogbm9kZV9wb29sX2F1dG9fY29uZmlnIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNub2RlX3Bvb2xfYXV0b19jb25maWcgQ29udGFpbmVyQ2x1c3RlciNub2RlX3Bvb2xfYXV0b19jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IG5vZGVQb29sQXV0b0NvbmZpZz86IENvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbEF1dG9Db25maWc7XG4gIC8qKlxuICAqIG5vZGVfcG9vbF9kZWZhdWx0cyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjbm9kZV9wb29sX2RlZmF1bHRzIENvbnRhaW5lckNsdXN0ZXIjbm9kZV9wb29sX2RlZmF1bHRzfVxuICAqL1xuICByZWFkb25seSBub2RlUG9vbERlZmF1bHRzPzogQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sRGVmYXVsdHM7XG4gIC8qKlxuICAqIG5vdGlmaWNhdGlvbl9jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI25vdGlmaWNhdGlvbl9jb25maWcgQ29udGFpbmVyQ2x1c3RlciNub3RpZmljYXRpb25fY29uZmlnfVxuICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Db25maWc/OiBDb250YWluZXJDbHVzdGVyTm90aWZpY2F0aW9uQ29uZmlnO1xuICAvKipcbiAgKiBwcml2YXRlX2NsdXN0ZXJfY29uZmlnIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNwcml2YXRlX2NsdXN0ZXJfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjcHJpdmF0ZV9jbHVzdGVyX2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUNsdXN0ZXJDb25maWc/OiBDb250YWluZXJDbHVzdGVyUHJpdmF0ZUNsdXN0ZXJDb25maWc7XG4gIC8qKlxuICAqIHJlbGVhc2VfY2hhbm5lbCBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjcmVsZWFzZV9jaGFubmVsIENvbnRhaW5lckNsdXN0ZXIjcmVsZWFzZV9jaGFubmVsfVxuICAqL1xuICByZWFkb25seSByZWxlYXNlQ2hhbm5lbD86IENvbnRhaW5lckNsdXN0ZXJSZWxlYXNlQ2hhbm5lbDtcbiAgLyoqXG4gICogcmVzb3VyY2VfdXNhZ2VfZXhwb3J0X2NvbmZpZyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjcmVzb3VyY2VfdXNhZ2VfZXhwb3J0X2NvbmZpZyBDb250YWluZXJDbHVzdGVyI3Jlc291cmNlX3VzYWdlX2V4cG9ydF9jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IHJlc291cmNlVXNhZ2VFeHBvcnRDb25maWc/OiBDb250YWluZXJDbHVzdGVyUmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZztcbiAgLyoqXG4gICogc2VjcmV0X21hbmFnZXJfY29uZmlnIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL3Jlc291cmNlcy9jb250YWluZXJfY2x1c3RlciNzZWNyZXRfbWFuYWdlcl9jb25maWcgQ29udGFpbmVyQ2x1c3RlciNzZWNyZXRfbWFuYWdlcl9jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IHNlY3JldE1hbmFnZXJDb25maWc/OiBDb250YWluZXJDbHVzdGVyU2VjcmV0TWFuYWdlckNvbmZpZztcbiAgLyoqXG4gICogc2VjdXJpdHlfcG9zdHVyZV9jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI3NlY3VyaXR5X3Bvc3R1cmVfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjc2VjdXJpdHlfcG9zdHVyZV9jb25maWd9XG4gICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5UG9zdHVyZUNvbmZpZz86IENvbnRhaW5lckNsdXN0ZXJTZWN1cml0eVBvc3R1cmVDb25maWc7XG4gIC8qKlxuICAqIHNlcnZpY2VfZXh0ZXJuYWxfaXBzX2NvbmZpZyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjc2VydmljZV9leHRlcm5hbF9pcHNfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjc2VydmljZV9leHRlcm5hbF9pcHNfY29uZmlnfVxuICAqL1xuICByZWFkb25seSBzZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWc/OiBDb250YWluZXJDbHVzdGVyU2VydmljZUV4dGVybmFsSXBzQ29uZmlnO1xuICAvKipcbiAgKiB0aW1lb3V0cyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjdGltZW91dHMgQ29udGFpbmVyQ2x1c3RlciN0aW1lb3V0c31cbiAgKi9cbiAgcmVhZG9ubHkgdGltZW91dHM/OiBDb250YWluZXJDbHVzdGVyVGltZW91dHM7XG4gIC8qKlxuICAqIHVzZXJfbWFuYWdlZF9rZXlzX2NvbmZpZyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIjdXNlcl9tYW5hZ2VkX2tleXNfY29uZmlnIENvbnRhaW5lckNsdXN0ZXIjdXNlcl9tYW5hZ2VkX2tleXNfY29uZmlnfVxuICAqL1xuICByZWFkb25seSB1c2VyTWFuYWdlZEtleXNDb25maWc/OiBDb250YWluZXJDbHVzdGVyVXNlck1hbmFnZWRLZXlzQ29uZmlnO1xuICAvKipcbiAgKiB2ZXJ0aWNhbF9wb2RfYXV0b3NjYWxpbmcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI3ZlcnRpY2FsX3BvZF9hdXRvc2NhbGluZyBDb250YWluZXJDbHVzdGVyI3ZlcnRpY2FsX3BvZF9hdXRvc2NhbGluZ31cbiAgKi9cbiAgcmVhZG9ubHkgdmVydGljYWxQb2RBdXRvc2NhbGluZz86IENvbnRhaW5lckNsdXN0ZXJWZXJ0aWNhbFBvZEF1dG9zY2FsaW5nO1xuICAvKipcbiAgKiB3b3JrbG9hZF9pZGVudGl0eV9jb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI3dvcmtsb2FkX2lkZW50aXR5X2NvbmZpZyBDb250YWluZXJDbHVzdGVyI3dvcmtsb2FkX2lkZW50aXR5X2NvbmZpZ31cbiAgKi9cbiAgcmVhZG9ubHkgd29ya2xvYWRJZGVudGl0eUNvbmZpZz86IENvbnRhaW5lckNsdXN0ZXJXb3JrbG9hZElkZW50aXR5Q29uZmlnO1xufVxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9yZXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIgZ29vZ2xlX2NvbnRhaW5lcl9jbHVzdGVyfVxuKi9cbmV4cG9ydCBjbGFzcyBDb250YWluZXJDbHVzdGVyIGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtUmVzb3VyY2Uge1xuXG4gIC8vID09PT09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdGZSZXNvdXJjZVR5cGUgPSBcImdvb2dsZV9jb250YWluZXJfY2x1c3RlclwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtURiBjb2RlIGZvciBpbXBvcnRpbmcgYSBDb250YWluZXJDbHVzdGVyIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RmIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIENvbnRhaW5lckNsdXN0ZXIgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIENvbnRhaW5lckNsdXN0ZXIgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2ltcG9ydCBpbXBvcnQgc2VjdGlvbn0gaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyByZXNvdXJjZSBmb3IgdGhlIGlkIHRvIHVzZVxuICAqIEBwYXJhbSBwcm92aWRlcj8gT3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdoZXJlIHRoZSBDb250YWluZXJDbHVzdGVyIHRvIGltcG9ydCBpcyBmb3VuZFxuICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdGYuVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjZGt0Zi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcImdvb2dsZV9jb250YWluZXJfY2x1c3RlclwiLCBpbXBvcnRJZDogaW1wb3J0RnJvbUlkLCBwcm92aWRlciB9KTtcbiAgICAgIH1cblxuICAvLyA9PT09PT09PT09PVxuICAvLyBJTklUSUFMSVpFUlxuICAvLyA9PT09PT09PT09PVxuXG4gIC8qKlxuICAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvcmVzb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyIGdvb2dsZV9jb250YWluZXJfY2x1c3Rlcn0gUmVzb3VyY2VcbiAgKlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlXG4gICogQHBhcmFtIG9wdGlvbnMgQ29udGFpbmVyQ2x1c3RlckNvbmZpZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiBDb250YWluZXJDbHVzdGVyQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6ICdnb29nbGVfY29udGFpbmVyX2NsdXN0ZXInLFxuICAgICAgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE6IHtcbiAgICAgICAgcHJvdmlkZXJOYW1lOiAnZ29vZ2xlJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uOiAnNi4xMy4wJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJ34+IDYuMCdcbiAgICAgIH0sXG4gICAgICBwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyLFxuICAgICAgZGVwZW5kc09uOiBjb25maWcuZGVwZW5kc09uLFxuICAgICAgY291bnQ6IGNvbmZpZy5jb3VudCxcbiAgICAgIGxpZmVjeWNsZTogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgIHByb3Zpc2lvbmVyczogY29uZmlnLnByb3Zpc2lvbmVycyxcbiAgICAgIGNvbm5lY3Rpb246IGNvbmZpZy5jb25uZWN0aW9uLFxuICAgICAgZm9yRWFjaDogY29uZmlnLmZvckVhY2hcbiAgICB9KTtcbiAgICB0aGlzLl9hbGxvd05ldEFkbWluID0gY29uZmlnLmFsbG93TmV0QWRtaW47XG4gICAgdGhpcy5fY2x1c3RlcklwdjRDaWRyID0gY29uZmlnLmNsdXN0ZXJJcHY0Q2lkcjtcbiAgICB0aGlzLl9kYXRhcGF0aFByb3ZpZGVyID0gY29uZmlnLmRhdGFwYXRoUHJvdmlkZXI7XG4gICAgdGhpcy5fZGVmYXVsdE1heFBvZHNQZXJOb2RlID0gY29uZmlnLmRlZmF1bHRNYXhQb2RzUGVyTm9kZTtcbiAgICB0aGlzLl9kZWxldGlvblByb3RlY3Rpb24gPSBjb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gY29uZmlnLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2VuYWJsZUF1dG9waWxvdCA9IGNvbmZpZy5lbmFibGVBdXRvcGlsb3Q7XG4gICAgdGhpcy5fZW5hYmxlQ2lsaXVtQ2x1c3RlcndpZGVOZXR3b3JrUG9saWN5ID0gY29uZmlnLmVuYWJsZUNpbGl1bUNsdXN0ZXJ3aWRlTmV0d29ya1BvbGljeTtcbiAgICB0aGlzLl9lbmFibGVJbnRyYW5vZGVWaXNpYmlsaXR5ID0gY29uZmlnLmVuYWJsZUludHJhbm9kZVZpc2liaWxpdHk7XG4gICAgdGhpcy5fZW5hYmxlS3ViZXJuZXRlc0FscGhhID0gY29uZmlnLmVuYWJsZUt1YmVybmV0ZXNBbHBoYTtcbiAgICB0aGlzLl9lbmFibGVMNElsYlN1YnNldHRpbmcgPSBjb25maWcuZW5hYmxlTDRJbGJTdWJzZXR0aW5nO1xuICAgIHRoaXMuX2VuYWJsZUxlZ2FjeUFiYWMgPSBjb25maWcuZW5hYmxlTGVnYWN5QWJhYztcbiAgICB0aGlzLl9lbmFibGVNdWx0aU5ldHdvcmtpbmcgPSBjb25maWcuZW5hYmxlTXVsdGlOZXR3b3JraW5nO1xuICAgIHRoaXMuX2VuYWJsZVNoaWVsZGVkTm9kZXMgPSBjb25maWcuZW5hYmxlU2hpZWxkZWROb2RlcztcbiAgICB0aGlzLl9lbmFibGVUcHUgPSBjb25maWcuZW5hYmxlVHB1O1xuICAgIHRoaXMuX2lkID0gY29uZmlnLmlkO1xuICAgIHRoaXMuX2luaXRpYWxOb2RlQ291bnQgPSBjb25maWcuaW5pdGlhbE5vZGVDb3VudDtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGNvbmZpZy5sb2NhdGlvbjtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZSA9IGNvbmZpZy5sb2dnaW5nU2VydmljZTtcbiAgICB0aGlzLl9taW5NYXN0ZXJWZXJzaW9uID0gY29uZmlnLm1pbk1hc3RlclZlcnNpb247XG4gICAgdGhpcy5fbW9uaXRvcmluZ1NlcnZpY2UgPSBjb25maWcubW9uaXRvcmluZ1NlcnZpY2U7XG4gICAgdGhpcy5fbmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuX25ldHdvcmsgPSBjb25maWcubmV0d29yaztcbiAgICB0aGlzLl9uZXR3b3JraW5nTW9kZSA9IGNvbmZpZy5uZXR3b3JraW5nTW9kZTtcbiAgICB0aGlzLl9ub2RlTG9jYXRpb25zID0gY29uZmlnLm5vZGVMb2NhdGlvbnM7XG4gICAgdGhpcy5fbm9kZVZlcnNpb24gPSBjb25maWcubm9kZVZlcnNpb247XG4gICAgdGhpcy5fcHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3MgPSBjb25maWcucHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3M7XG4gICAgdGhpcy5fcHJvamVjdCA9IGNvbmZpZy5wcm9qZWN0O1xuICAgIHRoaXMuX3JlbW92ZURlZmF1bHROb2RlUG9vbCA9IGNvbmZpZy5yZW1vdmVEZWZhdWx0Tm9kZVBvb2w7XG4gICAgdGhpcy5fcmVzb3VyY2VMYWJlbHMgPSBjb25maWcucmVzb3VyY2VMYWJlbHM7XG4gICAgdGhpcy5fc3VibmV0d29yayA9IGNvbmZpZy5zdWJuZXR3b3JrO1xuICAgIHRoaXMuX2FkZG9uc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLmFkZG9uc0NvbmZpZztcbiAgICB0aGlzLl9hdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcuYXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZztcbiAgICB0aGlzLl9iaW5hcnlBdXRob3JpemF0aW9uLmludGVybmFsVmFsdWUgPSBjb25maWcuYmluYXJ5QXV0aG9yaXphdGlvbjtcbiAgICB0aGlzLl9jbHVzdGVyQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5jbHVzdGVyQXV0b3NjYWxpbmc7XG4gICAgdGhpcy5fY29uZmlkZW50aWFsTm9kZXMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5jb25maWRlbnRpYWxOb2RlcztcbiAgICB0aGlzLl9jb250cm9sUGxhbmVFbmRwb2ludHNDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5jb250cm9sUGxhbmVFbmRwb2ludHNDb25maWc7XG4gICAgdGhpcy5fY29zdE1hbmFnZW1lbnRDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5jb3N0TWFuYWdlbWVudENvbmZpZztcbiAgICB0aGlzLl9kYXRhYmFzZUVuY3J5cHRpb24uaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5kYXRhYmFzZUVuY3J5cHRpb247XG4gICAgdGhpcy5fZGVmYXVsdFNuYXRTdGF0dXMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5kZWZhdWx0U25hdFN0YXR1cztcbiAgICB0aGlzLl9kbnNDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5kbnNDb25maWc7XG4gICAgdGhpcy5fZW5hYmxlSzhTQmV0YUFwaXMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5lbmFibGVLOFNCZXRhQXBpcztcbiAgICB0aGlzLl9lbnRlcnByaXNlQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcuZW50ZXJwcmlzZUNvbmZpZztcbiAgICB0aGlzLl9mbGVldC5pbnRlcm5hbFZhbHVlID0gY29uZmlnLmZsZWV0O1xuICAgIHRoaXMuX2dhdGV3YXlBcGlDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5nYXRld2F5QXBpQ29uZmlnO1xuICAgIHRoaXMuX2lkZW50aXR5U2VydmljZUNvbmZpZy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLmlkZW50aXR5U2VydmljZUNvbmZpZztcbiAgICB0aGlzLl9pcEFsbG9jYXRpb25Qb2xpY3kuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5pcEFsbG9jYXRpb25Qb2xpY3k7XG4gICAgdGhpcy5fbG9nZ2luZ0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLmxvZ2dpbmdDb25maWc7XG4gICAgdGhpcy5fbWFpbnRlbmFuY2VQb2xpY3kuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5tYWludGVuYW5jZVBvbGljeTtcbiAgICB0aGlzLl9tYXN0ZXJBdXRoLmludGVybmFsVmFsdWUgPSBjb25maWcubWFzdGVyQXV0aDtcbiAgICB0aGlzLl9tYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5tYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWc7XG4gICAgdGhpcy5fbWVzaENlcnRpZmljYXRlcy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLm1lc2hDZXJ0aWZpY2F0ZXM7XG4gICAgdGhpcy5fbW9uaXRvcmluZ0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLm1vbml0b3JpbmdDb25maWc7XG4gICAgdGhpcy5fbmV0d29ya1BvbGljeS5pbnRlcm5hbFZhbHVlID0gY29uZmlnLm5ldHdvcmtQb2xpY3k7XG4gICAgdGhpcy5fbm9kZUNvbmZpZy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLm5vZGVDb25maWc7XG4gICAgdGhpcy5fbm9kZVBvb2wuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5ub2RlUG9vbDtcbiAgICB0aGlzLl9ub2RlUG9vbEF1dG9Db25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5ub2RlUG9vbEF1dG9Db25maWc7XG4gICAgdGhpcy5fbm9kZVBvb2xEZWZhdWx0cy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLm5vZGVQb29sRGVmYXVsdHM7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9uQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcubm90aWZpY2F0aW9uQ29uZmlnO1xuICAgIHRoaXMuX3ByaXZhdGVDbHVzdGVyQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcucHJpdmF0ZUNsdXN0ZXJDb25maWc7XG4gICAgdGhpcy5fcmVsZWFzZUNoYW5uZWwuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5yZWxlYXNlQ2hhbm5lbDtcbiAgICB0aGlzLl9yZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcucmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZztcbiAgICB0aGlzLl9zZWNyZXRNYW5hZ2VyQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcuc2VjcmV0TWFuYWdlckNvbmZpZztcbiAgICB0aGlzLl9zZWN1cml0eVBvc3R1cmVDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5zZWN1cml0eVBvc3R1cmVDb25maWc7XG4gICAgdGhpcy5fc2VydmljZUV4dGVybmFsSXBzQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcuc2VydmljZUV4dGVybmFsSXBzQ29uZmlnO1xuICAgIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUgPSBjb25maWcudGltZW91dHM7XG4gICAgdGhpcy5fdXNlck1hbmFnZWRLZXlzQ29uZmlnLmludGVybmFsVmFsdWUgPSBjb25maWcudXNlck1hbmFnZWRLZXlzQ29uZmlnO1xuICAgIHRoaXMuX3ZlcnRpY2FsUG9kQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy52ZXJ0aWNhbFBvZEF1dG9zY2FsaW5nO1xuICAgIHRoaXMuX3dvcmtsb2FkSWRlbnRpdHlDb25maWcuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy53b3JrbG9hZElkZW50aXR5Q29uZmlnO1xuICB9XG5cbiAgLy8gPT09PT09PT09PVxuICAvLyBBVFRSSUJVVEVTXG4gIC8vID09PT09PT09PT1cblxuICAvLyBhbGxvd19uZXRfYWRtaW4gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWxsb3dOZXRBZG1pbj86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgYWxsb3dOZXRBZG1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdhbGxvd19uZXRfYWRtaW4nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93TmV0QWRtaW4odmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2FsbG93TmV0QWRtaW4gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBbGxvd05ldEFkbWluKCkge1xuICAgIHRoaXMuX2FsbG93TmV0QWRtaW4gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFsbG93TmV0QWRtaW5JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dOZXRBZG1pbjtcbiAgfVxuXG4gIC8vIGNsdXN0ZXJfaXB2NF9jaWRyIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2x1c3RlcklwdjRDaWRyPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjbHVzdGVySXB2NENpZHIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdjbHVzdGVyX2lwdjRfY2lkcicpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2x1c3RlcklwdjRDaWRyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jbHVzdGVySXB2NENpZHIgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDbHVzdGVySXB2NENpZHIoKSB7XG4gICAgdGhpcy5fY2x1c3RlcklwdjRDaWRyID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjbHVzdGVySXB2NENpZHJJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2x1c3RlcklwdjRDaWRyO1xuICB9XG5cbiAgLy8gZGF0YXBhdGhfcHJvdmlkZXIgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kYXRhcGF0aFByb3ZpZGVyPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBkYXRhcGF0aFByb3ZpZGVyKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGF0YXBhdGhfcHJvdmlkZXInKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFwYXRoUHJvdmlkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RhdGFwYXRoUHJvdmlkZXIgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREYXRhcGF0aFByb3ZpZGVyKCkge1xuICAgIHRoaXMuX2RhdGFwYXRoUHJvdmlkZXIgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRhdGFwYXRoUHJvdmlkZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YXBhdGhQcm92aWRlcjtcbiAgfVxuXG4gIC8vIGRlZmF1bHRfbWF4X3BvZHNfcGVyX25vZGUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWZhdWx0TWF4UG9kc1Blck5vZGU/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IGRlZmF1bHRNYXhQb2RzUGVyTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2RlZmF1bHRfbWF4X3BvZHNfcGVyX25vZGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRNYXhQb2RzUGVyTm9kZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGVmYXVsdE1heFBvZHNQZXJOb2RlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGVmYXVsdE1heFBvZHNQZXJOb2RlKCkge1xuICAgIHRoaXMuX2RlZmF1bHRNYXhQb2RzUGVyTm9kZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVmYXVsdE1heFBvZHNQZXJOb2RlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRNYXhQb2RzUGVyTm9kZTtcbiAgfVxuXG4gIC8vIGRlbGV0aW9uX3Byb3RlY3Rpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBkZWxldGlvblByb3RlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZGVsZXRpb25fcHJvdGVjdGlvbicpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVsZXRpb25Qcm90ZWN0aW9uKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9kZWxldGlvblByb3RlY3Rpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWxldGlvblByb3RlY3Rpb24oKSB7XG4gICAgdGhpcy5fZGVsZXRpb25Qcm90ZWN0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWxldGlvblByb3RlY3Rpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVsZXRpb25Qcm90ZWN0aW9uO1xuICB9XG5cbiAgLy8gZGVzY3JpcHRpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGVzY3JpcHRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGVzY3JpcHRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlc2NyaXB0aW9uKCkge1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8vIGVmZmVjdGl2ZV9sYWJlbHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZWZmZWN0aXZlTGFiZWxzID0gbmV3IGNka3RmLlN0cmluZ01hcCh0aGlzLCBcImVmZmVjdGl2ZV9sYWJlbHNcIik7XG4gIHB1YmxpYyBnZXQgZWZmZWN0aXZlTGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVMYWJlbHM7XG4gIH1cblxuICAvLyBlbmFibGVfYXV0b3BpbG90IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuYWJsZUF1dG9waWxvdD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlQXV0b3BpbG90KCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2VuYWJsZV9hdXRvcGlsb3QnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUF1dG9waWxvdCh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZW5hYmxlQXV0b3BpbG90ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RW5hYmxlQXV0b3BpbG90KCkge1xuICAgIHRoaXMuX2VuYWJsZUF1dG9waWxvdCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5hYmxlQXV0b3BpbG90SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZUF1dG9waWxvdDtcbiAgfVxuXG4gIC8vIGVuYWJsZV9jaWxpdW1fY2x1c3RlcndpZGVfbmV0d29ya19wb2xpY3kgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5hYmxlQ2lsaXVtQ2x1c3RlcndpZGVOZXR3b3JrUG9saWN5PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBlbmFibGVDaWxpdW1DbHVzdGVyd2lkZU5ldHdvcmtQb2xpY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZW5hYmxlX2NpbGl1bV9jbHVzdGVyd2lkZV9uZXR3b3JrX3BvbGljeScpO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlQ2lsaXVtQ2x1c3RlcndpZGVOZXR3b3JrUG9saWN5KHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9lbmFibGVDaWxpdW1DbHVzdGVyd2lkZU5ldHdvcmtQb2xpY3kgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmFibGVDaWxpdW1DbHVzdGVyd2lkZU5ldHdvcmtQb2xpY3koKSB7XG4gICAgdGhpcy5fZW5hYmxlQ2lsaXVtQ2x1c3RlcndpZGVOZXR3b3JrUG9saWN5ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBlbmFibGVDaWxpdW1DbHVzdGVyd2lkZU5ldHdvcmtQb2xpY3lJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlQ2lsaXVtQ2x1c3RlcndpZGVOZXR3b3JrUG9saWN5O1xuICB9XG5cbiAgLy8gZW5hYmxlX2ludHJhbm9kZV92aXNpYmlsaXR5IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5hYmxlSW50cmFub2RlVmlzaWJpbGl0eT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlSW50cmFub2RlVmlzaWJpbGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdlbmFibGVfaW50cmFub2RlX3Zpc2liaWxpdHknKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUludHJhbm9kZVZpc2liaWxpdHkodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2VuYWJsZUludHJhbm9kZVZpc2liaWxpdHkgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmFibGVJbnRyYW5vZGVWaXNpYmlsaXR5KCkge1xuICAgIHRoaXMuX2VuYWJsZUludHJhbm9kZVZpc2liaWxpdHkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZUludHJhbm9kZVZpc2liaWxpdHlJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlSW50cmFub2RlVmlzaWJpbGl0eTtcbiAgfVxuXG4gIC8vIGVuYWJsZV9rdWJlcm5ldGVzX2FscGhhIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuYWJsZUt1YmVybmV0ZXNBbHBoYT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlS3ViZXJuZXRlc0FscGhhKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2VuYWJsZV9rdWJlcm5ldGVzX2FscGhhJyk7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVLdWJlcm5ldGVzQWxwaGEodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2VuYWJsZUt1YmVybmV0ZXNBbHBoYSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVuYWJsZUt1YmVybmV0ZXNBbHBoYSgpIHtcbiAgICB0aGlzLl9lbmFibGVLdWJlcm5ldGVzQWxwaGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZUt1YmVybmV0ZXNBbHBoYUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVLdWJlcm5ldGVzQWxwaGE7XG4gIH1cblxuICAvLyBlbmFibGVfbDRfaWxiX3N1YnNldHRpbmcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5hYmxlTDRJbGJTdWJzZXR0aW5nPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBlbmFibGVMNElsYlN1YnNldHRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZW5hYmxlX2w0X2lsYl9zdWJzZXR0aW5nJyk7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVMNElsYlN1YnNldHRpbmcodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2VuYWJsZUw0SWxiU3Vic2V0dGluZyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVuYWJsZUw0SWxiU3Vic2V0dGluZygpIHtcbiAgICB0aGlzLl9lbmFibGVMNElsYlN1YnNldHRpbmcgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZUw0SWxiU3Vic2V0dGluZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVMNElsYlN1YnNldHRpbmc7XG4gIH1cblxuICAvLyBlbmFibGVfbGVnYWN5X2FiYWMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5hYmxlTGVnYWN5QWJhYz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlTGVnYWN5QWJhYygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdlbmFibGVfbGVnYWN5X2FiYWMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUxlZ2FjeUFiYWModmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2VuYWJsZUxlZ2FjeUFiYWMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmFibGVMZWdhY3lBYmFjKCkge1xuICAgIHRoaXMuX2VuYWJsZUxlZ2FjeUFiYWMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZUxlZ2FjeUFiYWNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlTGVnYWN5QWJhYztcbiAgfVxuXG4gIC8vIGVuYWJsZV9tdWx0aV9uZXR3b3JraW5nIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuYWJsZU11bHRpTmV0d29ya2luZz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlTXVsdGlOZXR3b3JraW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2VuYWJsZV9tdWx0aV9uZXR3b3JraW5nJyk7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVNdWx0aU5ldHdvcmtpbmcodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2VuYWJsZU11bHRpTmV0d29ya2luZyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVuYWJsZU11bHRpTmV0d29ya2luZygpIHtcbiAgICB0aGlzLl9lbmFibGVNdWx0aU5ldHdvcmtpbmcgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZU11bHRpTmV0d29ya2luZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVNdWx0aU5ldHdvcmtpbmc7XG4gIH1cblxuICAvLyBlbmFibGVfc2hpZWxkZWRfbm9kZXMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5hYmxlU2hpZWxkZWROb2Rlcz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZW5hYmxlU2hpZWxkZWROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdlbmFibGVfc2hpZWxkZWRfbm9kZXMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZVNoaWVsZGVkTm9kZXModmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2VuYWJsZVNoaWVsZGVkTm9kZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmFibGVTaGllbGRlZE5vZGVzKCkge1xuICAgIHRoaXMuX2VuYWJsZVNoaWVsZGVkTm9kZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuYWJsZVNoaWVsZGVkTm9kZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlU2hpZWxkZWROb2RlcztcbiAgfVxuXG4gIC8vIGVuYWJsZV90cHUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5hYmxlVHB1PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBlbmFibGVUcHUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZW5hYmxlX3RwdScpO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlVHB1KHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9lbmFibGVUcHUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmFibGVUcHUoKSB7XG4gICAgdGhpcy5fZW5hYmxlVHB1ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBlbmFibGVUcHVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlVHB1O1xuICB9XG5cbiAgLy8gZW5kcG9pbnQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBlbmRwb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2VuZHBvaW50Jyk7XG4gIH1cblxuICAvLyBpZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lkPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJZCgpIHtcbiAgICB0aGlzLl9pZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICAvLyBpbml0aWFsX25vZGVfY291bnQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5pdGlhbE5vZGVDb3VudD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgaW5pdGlhbE5vZGVDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2luaXRpYWxfbm9kZV9jb3VudCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5pdGlhbE5vZGVDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5pdGlhbE5vZGVDb3VudCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEluaXRpYWxOb2RlQ291bnQoKSB7XG4gICAgdGhpcy5faW5pdGlhbE5vZGVDb3VudCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5pdGlhbE5vZGVDb3VudElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsTm9kZUNvdW50O1xuICB9XG5cbiAgLy8gbGFiZWxfZmluZ2VycHJpbnQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBsYWJlbEZpbmdlcnByaW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbGFiZWxfZmluZ2VycHJpbnQnKTtcbiAgfVxuXG4gIC8vIGxvY2F0aW9uIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbG9jYXRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbG9jYXRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldExvY2F0aW9uKCkge1xuICAgIHRoaXMuX2xvY2F0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBsb2NhdGlvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbjtcbiAgfVxuXG4gIC8vIGxvZ2dpbmdfc2VydmljZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2xvZ2dpbmdTZXJ2aWNlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBsb2dnaW5nU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2xvZ2dpbmdfc2VydmljZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nZ2luZ1NlcnZpY2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2xvZ2dpbmdTZXJ2aWNlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TG9nZ2luZ1NlcnZpY2UoKSB7XG4gICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGxvZ2dpbmdTZXJ2aWNlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2dpbmdTZXJ2aWNlO1xuICB9XG5cbiAgLy8gbWFzdGVyX3ZlcnNpb24gLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBtYXN0ZXJWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbWFzdGVyX3ZlcnNpb24nKTtcbiAgfVxuXG4gIC8vIG1pbl9tYXN0ZXJfdmVyc2lvbiAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9taW5NYXN0ZXJWZXJzaW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBtaW5NYXN0ZXJWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbWluX21hc3Rlcl92ZXJzaW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCBtaW5NYXN0ZXJWZXJzaW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9taW5NYXN0ZXJWZXJzaW9uID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TWluTWFzdGVyVmVyc2lvbigpIHtcbiAgICB0aGlzLl9taW5NYXN0ZXJWZXJzaW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtaW5NYXN0ZXJWZXJzaW9uSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21pbk1hc3RlclZlcnNpb247XG4gIH1cblxuICAvLyBtb25pdG9yaW5nX3NlcnZpY2UgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tb25pdG9yaW5nU2VydmljZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbW9uaXRvcmluZ1NlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdtb25pdG9yaW5nX3NlcnZpY2UnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1vbml0b3JpbmdTZXJ2aWNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb25pdG9yaW5nU2VydmljZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1vbml0b3JpbmdTZXJ2aWNlKCkge1xuICAgIHRoaXMuX21vbml0b3JpbmdTZXJ2aWNlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtb25pdG9yaW5nU2VydmljZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tb25pdG9yaW5nU2VydmljZTtcbiAgfVxuXG4gIC8vIG5hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfbmFtZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLy8gbmV0d29yayAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9uZXR3b3JrPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBuZXR3b3JrKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbmV0d29yaycpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmV0d29yayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmV0d29yayA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE5ldHdvcmsoKSB7XG4gICAgdGhpcy5fbmV0d29yayA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmV0d29ya0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uZXR3b3JrO1xuICB9XG5cbiAgLy8gbmV0d29ya2luZ19tb2RlIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbmV0d29ya2luZ01vZGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG5ldHdvcmtpbmdNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbmV0d29ya2luZ19tb2RlJyk7XG4gIH1cbiAgcHVibGljIHNldCBuZXR3b3JraW5nTW9kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmV0d29ya2luZ01vZGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROZXR3b3JraW5nTW9kZSgpIHtcbiAgICB0aGlzLl9uZXR3b3JraW5nTW9kZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmV0d29ya2luZ01vZGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV0d29ya2luZ01vZGU7XG4gIH1cblxuICAvLyBub2RlX2xvY2F0aW9ucyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX25vZGVMb2NhdGlvbnM/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgbm9kZUxvY2F0aW9ucygpIHtcbiAgICByZXR1cm4gY2RrdGYuRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnbm9kZV9sb2NhdGlvbnMnKSk7XG4gIH1cbiAgcHVibGljIHNldCBub2RlTG9jYXRpb25zKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX25vZGVMb2NhdGlvbnMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROb2RlTG9jYXRpb25zKCkge1xuICAgIHRoaXMuX25vZGVMb2NhdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5vZGVMb2NhdGlvbnNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUxvY2F0aW9ucztcbiAgfVxuXG4gIC8vIG5vZGVfdmVyc2lvbiAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX25vZGVWZXJzaW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBub2RlVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ25vZGVfdmVyc2lvbicpO1xuICB9XG4gIHB1YmxpYyBzZXQgbm9kZVZlcnNpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vZGVWZXJzaW9uID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Tm9kZVZlcnNpb24oKSB7XG4gICAgdGhpcy5fbm9kZVZlcnNpb24gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5vZGVWZXJzaW9uSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVWZXJzaW9uO1xuICB9XG5cbiAgLy8gb3BlcmF0aW9uIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgb3BlcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnb3BlcmF0aW9uJyk7XG4gIH1cblxuICAvLyBwcml2YXRlX2lwdjZfZ29vZ2xlX2FjY2VzcyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3ByaXZhdGVJcHY2R29vZ2xlQWNjZXNzPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBwcml2YXRlSXB2Nkdvb2dsZUFjY2VzcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3ByaXZhdGVfaXB2Nl9nb29nbGVfYWNjZXNzJyk7XG4gIH1cbiAgcHVibGljIHNldCBwcml2YXRlSXB2Nkdvb2dsZUFjY2Vzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3MgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRQcml2YXRlSXB2Nkdvb2dsZUFjY2VzcygpIHtcbiAgICB0aGlzLl9wcml2YXRlSXB2Nkdvb2dsZUFjY2VzcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3NJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3M7XG4gIH1cblxuICAvLyBwcm9qZWN0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcHJvamVjdD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcHJvamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3Byb2plY3QnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByb2plY3QodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Byb2plY3QgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRQcm9qZWN0KCkge1xuICAgIHRoaXMuX3Byb2plY3QgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHByb2plY3RJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdDtcbiAgfVxuXG4gIC8vIHJlbW92ZV9kZWZhdWx0X25vZGVfcG9vbCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZW1vdmVEZWZhdWx0Tm9kZVBvb2w/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHJlbW92ZURlZmF1bHROb2RlUG9vbCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdyZW1vdmVfZGVmYXVsdF9ub2RlX3Bvb2wnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlbW92ZURlZmF1bHROb2RlUG9vbCh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fcmVtb3ZlRGVmYXVsdE5vZGVQb29sID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVtb3ZlRGVmYXVsdE5vZGVQb29sKCkge1xuICAgIHRoaXMuX3JlbW92ZURlZmF1bHROb2RlUG9vbCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVtb3ZlRGVmYXVsdE5vZGVQb29sSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbW92ZURlZmF1bHROb2RlUG9vbDtcbiAgfVxuXG4gIC8vIHJlc291cmNlX2xhYmVscyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZXNvdXJjZUxhYmVscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07IFxuICBwdWJsaWMgZ2V0IHJlc291cmNlTGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ01hcEF0dHJpYnV0ZSgncmVzb3VyY2VfbGFiZWxzJyk7XG4gIH1cbiAgcHVibGljIHNldCByZXNvdXJjZUxhYmVscyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX3Jlc291cmNlTGFiZWxzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVzb3VyY2VMYWJlbHMoKSB7XG4gICAgdGhpcy5fcmVzb3VyY2VMYWJlbHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlc291cmNlTGFiZWxzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTGFiZWxzO1xuICB9XG5cbiAgLy8gc2VsZl9saW5rIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgc2VsZkxpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdzZWxmX2xpbmsnKTtcbiAgfVxuXG4gIC8vIHNlcnZpY2VzX2lwdjRfY2lkciAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IHNlcnZpY2VzSXB2NENpZHIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdzZXJ2aWNlc19pcHY0X2NpZHInKTtcbiAgfVxuXG4gIC8vIHN1Ym5ldHdvcmsgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zdWJuZXR3b3JrPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBzdWJuZXR3b3JrKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnc3VibmV0d29yaycpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VibmV0d29yayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3VibmV0d29yayA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFN1Ym5ldHdvcmsoKSB7XG4gICAgdGhpcy5fc3VibmV0d29yayA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc3VibmV0d29ya0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zdWJuZXR3b3JrO1xuICB9XG5cbiAgLy8gdGVycmFmb3JtX2xhYmVscyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90ZXJyYWZvcm1MYWJlbHMgPSBuZXcgY2RrdGYuU3RyaW5nTWFwKHRoaXMsIFwidGVycmFmb3JtX2xhYmVsc1wiKTtcbiAgcHVibGljIGdldCB0ZXJyYWZvcm1MYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RlcnJhZm9ybUxhYmVscztcbiAgfVxuXG4gIC8vIHRwdV9pcHY0X2NpZHJfYmxvY2sgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCB0cHVJcHY0Q2lkckJsb2NrKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndHB1X2lwdjRfY2lkcl9ibG9jaycpO1xuICB9XG5cbiAgLy8gYWRkb25zX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hZGRvbnNDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImFkZG9uc19jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgYWRkb25zQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9hZGRvbnNDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dEFkZG9uc0NvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZykge1xuICAgIHRoaXMuX2FkZG9uc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWRkb25zQ29uZmlnKCkge1xuICAgIHRoaXMuX2FkZG9uc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhZGRvbnNDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkb25zQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBhdXRoZW50aWNhdG9yX2dyb3Vwc19jb25maWcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZyA9IG5ldyBDb250YWluZXJDbHVzdGVyQXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImF1dGhlbnRpY2F0b3JfZ3JvdXBzX2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBhdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXRBdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyQXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZykge1xuICAgIHRoaXMuX2F1dGhlbnRpY2F0b3JHcm91cHNDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEF1dGhlbnRpY2F0b3JHcm91cHNDb25maWcoKSB7XG4gICAgdGhpcy5fYXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0b3JHcm91cHNDb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGJpbmFyeV9hdXRob3JpemF0aW9uIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2JpbmFyeUF1dGhvcml6YXRpb24gPSBuZXcgQ29udGFpbmVyQ2x1c3RlckJpbmFyeUF1dGhvcml6YXRpb25PdXRwdXRSZWZlcmVuY2UodGhpcywgXCJiaW5hcnlfYXV0aG9yaXphdGlvblwiKTtcbiAgcHVibGljIGdldCBiaW5hcnlBdXRob3JpemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9iaW5hcnlBdXRob3JpemF0aW9uO1xuICB9XG4gIHB1YmxpYyBwdXRCaW5hcnlBdXRob3JpemF0aW9uKHZhbHVlOiBDb250YWluZXJDbHVzdGVyQmluYXJ5QXV0aG9yaXphdGlvbikge1xuICAgIHRoaXMuX2JpbmFyeUF1dGhvcml6YXRpb24uaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEJpbmFyeUF1dGhvcml6YXRpb24oKSB7XG4gICAgdGhpcy5fYmluYXJ5QXV0aG9yaXphdGlvbi5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBiaW5hcnlBdXRob3JpemF0aW9uSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpbmFyeUF1dGhvcml6YXRpb24uaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGNsdXN0ZXJfYXV0b3NjYWxpbmcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2x1c3RlckF1dG9zY2FsaW5nID0gbmV3IENvbnRhaW5lckNsdXN0ZXJDbHVzdGVyQXV0b3NjYWxpbmdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJjbHVzdGVyX2F1dG9zY2FsaW5nXCIpO1xuICBwdWJsaWMgZ2V0IGNsdXN0ZXJBdXRvc2NhbGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2x1c3RlckF1dG9zY2FsaW5nO1xuICB9XG4gIHB1YmxpYyBwdXRDbHVzdGVyQXV0b3NjYWxpbmcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJDbHVzdGVyQXV0b3NjYWxpbmcpIHtcbiAgICB0aGlzLl9jbHVzdGVyQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENsdXN0ZXJBdXRvc2NhbGluZygpIHtcbiAgICB0aGlzLl9jbHVzdGVyQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY2x1c3RlckF1dG9zY2FsaW5nSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsdXN0ZXJBdXRvc2NhbGluZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gY29uZmlkZW50aWFsX25vZGVzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NvbmZpZGVudGlhbE5vZGVzID0gbmV3IENvbnRhaW5lckNsdXN0ZXJDb25maWRlbnRpYWxOb2Rlc091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImNvbmZpZGVudGlhbF9ub2Rlc1wiKTtcbiAgcHVibGljIGdldCBjb25maWRlbnRpYWxOb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlkZW50aWFsTm9kZXM7XG4gIH1cbiAgcHVibGljIHB1dENvbmZpZGVudGlhbE5vZGVzKHZhbHVlOiBDb250YWluZXJDbHVzdGVyQ29uZmlkZW50aWFsTm9kZXMpIHtcbiAgICB0aGlzLl9jb25maWRlbnRpYWxOb2Rlcy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q29uZmlkZW50aWFsTm9kZXMoKSB7XG4gICAgdGhpcy5fY29uZmlkZW50aWFsTm9kZXMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsTm9kZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlkZW50aWFsTm9kZXMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGNvbnRyb2xfcGxhbmVfZW5kcG9pbnRzX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jb250cm9sUGxhbmVFbmRwb2ludHNDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckNvbnRyb2xQbGFuZUVuZHBvaW50c0NvbmZpZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImNvbnRyb2xfcGxhbmVfZW5kcG9pbnRzX2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBjb250cm9sUGxhbmVFbmRwb2ludHNDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xQbGFuZUVuZHBvaW50c0NvbmZpZztcbiAgfVxuICBwdWJsaWMgcHV0Q29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyQ29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnKSB7XG4gICAgdGhpcy5fY29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDb250cm9sUGxhbmVFbmRwb2ludHNDb25maWcoKSB7XG4gICAgdGhpcy5fY29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNvbnRyb2xQbGFuZUVuZHBvaW50c0NvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sUGxhbmVFbmRwb2ludHNDb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGNvc3RfbWFuYWdlbWVudF9jb25maWcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY29zdE1hbmFnZW1lbnRDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckNvc3RNYW5hZ2VtZW50Q29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiY29zdF9tYW5hZ2VtZW50X2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBjb3N0TWFuYWdlbWVudENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29zdE1hbmFnZW1lbnRDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dENvc3RNYW5hZ2VtZW50Q29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyQ29zdE1hbmFnZW1lbnRDb25maWcpIHtcbiAgICB0aGlzLl9jb3N0TWFuYWdlbWVudENvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q29zdE1hbmFnZW1lbnRDb25maWcoKSB7XG4gICAgdGhpcy5fY29zdE1hbmFnZW1lbnRDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY29zdE1hbmFnZW1lbnRDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29zdE1hbmFnZW1lbnRDb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGRhdGFiYXNlX2VuY3J5cHRpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGF0YWJhc2VFbmNyeXB0aW9uID0gbmV3IENvbnRhaW5lckNsdXN0ZXJEYXRhYmFzZUVuY3J5cHRpb25PdXRwdXRSZWZlcmVuY2UodGhpcywgXCJkYXRhYmFzZV9lbmNyeXB0aW9uXCIpO1xuICBwdWJsaWMgZ2V0IGRhdGFiYXNlRW5jcnlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2VFbmNyeXB0aW9uO1xuICB9XG4gIHB1YmxpYyBwdXREYXRhYmFzZUVuY3J5cHRpb24odmFsdWU6IENvbnRhaW5lckNsdXN0ZXJEYXRhYmFzZUVuY3J5cHRpb24pIHtcbiAgICB0aGlzLl9kYXRhYmFzZUVuY3J5cHRpb24uaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERhdGFiYXNlRW5jcnlwdGlvbigpIHtcbiAgICB0aGlzLl9kYXRhYmFzZUVuY3J5cHRpb24uaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGF0YWJhc2VFbmNyeXB0aW9uSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlRW5jcnlwdGlvbi5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gZGVmYXVsdF9zbmF0X3N0YXR1cyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWZhdWx0U25hdFN0YXR1cyA9IG5ldyBDb250YWluZXJDbHVzdGVyRGVmYXVsdFNuYXRTdGF0dXNPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJkZWZhdWx0X3NuYXRfc3RhdHVzXCIpO1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRTbmF0U3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0U25hdFN0YXR1cztcbiAgfVxuICBwdWJsaWMgcHV0RGVmYXVsdFNuYXRTdGF0dXModmFsdWU6IENvbnRhaW5lckNsdXN0ZXJEZWZhdWx0U25hdFN0YXR1cykge1xuICAgIHRoaXMuX2RlZmF1bHRTbmF0U3RhdHVzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWZhdWx0U25hdFN0YXR1cygpIHtcbiAgICB0aGlzLl9kZWZhdWx0U25hdFN0YXR1cy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWZhdWx0U25hdFN0YXR1c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0U25hdFN0YXR1cy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gZG5zX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kbnNDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckRuc0NvbmZpZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImRuc19jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgZG5zQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9kbnNDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dERuc0NvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlckRuc0NvbmZpZykge1xuICAgIHRoaXMuX2Ruc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RG5zQ29uZmlnKCkge1xuICAgIHRoaXMuX2Ruc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkbnNDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG5zQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBlbmFibGVfazhzX2JldGFfYXBpcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9lbmFibGVLOFNCZXRhQXBpcyA9IG5ldyBDb250YWluZXJDbHVzdGVyRW5hYmxlSzhTQmV0YUFwaXNPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJlbmFibGVfazhzX2JldGFfYXBpc1wiKTtcbiAgcHVibGljIGdldCBlbmFibGVLOFNCZXRhQXBpcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlSzhTQmV0YUFwaXM7XG4gIH1cbiAgcHVibGljIHB1dEVuYWJsZUs4U0JldGFBcGlzKHZhbHVlOiBDb250YWluZXJDbHVzdGVyRW5hYmxlSzhTQmV0YUFwaXMpIHtcbiAgICB0aGlzLl9lbmFibGVLOFNCZXRhQXBpcy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RW5hYmxlSzhTQmV0YUFwaXMoKSB7XG4gICAgdGhpcy5fZW5hYmxlSzhTQmV0YUFwaXMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5hYmxlSzhTQmV0YUFwaXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlSzhTQmV0YUFwaXMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGVudGVycHJpc2VfY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VudGVycHJpc2VDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckVudGVycHJpc2VDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJlbnRlcnByaXNlX2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBlbnRlcnByaXNlQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9lbnRlcnByaXNlQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXRFbnRlcnByaXNlQ29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyRW50ZXJwcmlzZUNvbmZpZykge1xuICAgIHRoaXMuX2VudGVycHJpc2VDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVudGVycHJpc2VDb25maWcoKSB7XG4gICAgdGhpcy5fZW50ZXJwcmlzZUNvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBlbnRlcnByaXNlQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGVycHJpc2VDb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGZsZWV0IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2ZsZWV0ID0gbmV3IENvbnRhaW5lckNsdXN0ZXJGbGVldE91dHB1dFJlZmVyZW5jZSh0aGlzLCBcImZsZWV0XCIpO1xuICBwdWJsaWMgZ2V0IGZsZWV0KCkge1xuICAgIHJldHVybiB0aGlzLl9mbGVldDtcbiAgfVxuICBwdWJsaWMgcHV0RmxlZXQodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJGbGVldCkge1xuICAgIHRoaXMuX2ZsZWV0LmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRGbGVldCgpIHtcbiAgICB0aGlzLl9mbGVldC5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBmbGVldElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9mbGVldC5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gZ2F0ZXdheV9hcGlfY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2dhdGV3YXlBcGlDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckdhdGV3YXlBcGlDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJnYXRld2F5X2FwaV9jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgZ2F0ZXdheUFwaUNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2F0ZXdheUFwaUNvbmZpZztcbiAgfVxuICBwdWJsaWMgcHV0R2F0ZXdheUFwaUNvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlckdhdGV3YXlBcGlDb25maWcpIHtcbiAgICB0aGlzLl9nYXRld2F5QXBpQ29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRHYXRld2F5QXBpQ29uZmlnKCkge1xuICAgIHRoaXMuX2dhdGV3YXlBcGlDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZ2F0ZXdheUFwaUNvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9nYXRld2F5QXBpQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBpZGVudGl0eV9zZXJ2aWNlX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pZGVudGl0eVNlcnZpY2VDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlcklkZW50aXR5U2VydmljZUNvbmZpZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImlkZW50aXR5X3NlcnZpY2VfY29uZmlnXCIpO1xuICBwdWJsaWMgZ2V0IGlkZW50aXR5U2VydmljZUNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5faWRlbnRpdHlTZXJ2aWNlQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXRJZGVudGl0eVNlcnZpY2VDb25maWcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJJZGVudGl0eVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLl9pZGVudGl0eVNlcnZpY2VDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElkZW50aXR5U2VydmljZUNvbmZpZygpIHtcbiAgICB0aGlzLl9pZGVudGl0eVNlcnZpY2VDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWRlbnRpdHlTZXJ2aWNlQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkZW50aXR5U2VydmljZUNvbmZpZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gaXBfYWxsb2NhdGlvbl9wb2xpY3kgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaXBBbGxvY2F0aW9uUG9saWN5ID0gbmV3IENvbnRhaW5lckNsdXN0ZXJJcEFsbG9jYXRpb25Qb2xpY3lPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJpcF9hbGxvY2F0aW9uX3BvbGljeVwiKTtcbiAgcHVibGljIGdldCBpcEFsbG9jYXRpb25Qb2xpY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lwQWxsb2NhdGlvblBvbGljeTtcbiAgfVxuICBwdWJsaWMgcHV0SXBBbGxvY2F0aW9uUG9saWN5KHZhbHVlOiBDb250YWluZXJDbHVzdGVySXBBbGxvY2F0aW9uUG9saWN5KSB7XG4gICAgdGhpcy5faXBBbGxvY2F0aW9uUG9saWN5LmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJcEFsbG9jYXRpb25Qb2xpY3koKSB7XG4gICAgdGhpcy5faXBBbGxvY2F0aW9uUG9saWN5LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlwQWxsb2NhdGlvblBvbGljeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pcEFsbG9jYXRpb25Qb2xpY3kuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGxvZ2dpbmdfY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2xvZ2dpbmdDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlckxvZ2dpbmdDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJsb2dnaW5nX2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBsb2dnaW5nQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2dnaW5nQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXRMb2dnaW5nQ29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZykge1xuICAgIHRoaXMuX2xvZ2dpbmdDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldExvZ2dpbmdDb25maWcoKSB7XG4gICAgdGhpcy5fbG9nZ2luZ0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBsb2dnaW5nQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2dpbmdDb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIG1haW50ZW5hbmNlX3BvbGljeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYWludGVuYW5jZVBvbGljeSA9IG5ldyBDb250YWluZXJDbHVzdGVyTWFpbnRlbmFuY2VQb2xpY3lPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJtYWludGVuYW5jZV9wb2xpY3lcIik7XG4gIHB1YmxpYyBnZXQgbWFpbnRlbmFuY2VQb2xpY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuX21haW50ZW5hbmNlUG9saWN5O1xuICB9XG4gIHB1YmxpYyBwdXRNYWludGVuYW5jZVBvbGljeSh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck1haW50ZW5hbmNlUG9saWN5KSB7XG4gICAgdGhpcy5fbWFpbnRlbmFuY2VQb2xpY3kuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1haW50ZW5hbmNlUG9saWN5KCkge1xuICAgIHRoaXMuX21haW50ZW5hbmNlUG9saWN5LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1haW50ZW5hbmNlUG9saWN5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21haW50ZW5hbmNlUG9saWN5LmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBtYXN0ZXJfYXV0aCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYXN0ZXJBdXRoID0gbmV3IENvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRoT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibWFzdGVyX2F1dGhcIik7XG4gIHB1YmxpYyBnZXQgbWFzdGVyQXV0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFzdGVyQXV0aDtcbiAgfVxuICBwdWJsaWMgcHV0TWFzdGVyQXV0aCh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGgpIHtcbiAgICB0aGlzLl9tYXN0ZXJBdXRoLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNYXN0ZXJBdXRoKCkge1xuICAgIHRoaXMuX21hc3RlckF1dGguaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbWFzdGVyQXV0aElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYXN0ZXJBdXRoLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBtYXN0ZXJfYXV0aG9yaXplZF9uZXR3b3Jrc19jb25maWcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbWFzdGVyQXV0aG9yaXplZE5ldHdvcmtzQ29uZmlnID0gbmV3IENvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJtYXN0ZXJfYXV0aG9yaXplZF9uZXR3b3Jrc19jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgbWFzdGVyQXV0aG9yaXplZE5ldHdvcmtzQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dE1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZykge1xuICAgIHRoaXMuX21hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TWFzdGVyQXV0aG9yaXplZE5ldHdvcmtzQ29uZmlnKCkge1xuICAgIHRoaXMuX21hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFzdGVyQXV0aG9yaXplZE5ldHdvcmtzQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBtZXNoX2NlcnRpZmljYXRlcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tZXNoQ2VydGlmaWNhdGVzID0gbmV3IENvbnRhaW5lckNsdXN0ZXJNZXNoQ2VydGlmaWNhdGVzT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibWVzaF9jZXJ0aWZpY2F0ZXNcIik7XG4gIHB1YmxpYyBnZXQgbWVzaENlcnRpZmljYXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzaENlcnRpZmljYXRlcztcbiAgfVxuICBwdWJsaWMgcHV0TWVzaENlcnRpZmljYXRlcyh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck1lc2hDZXJ0aWZpY2F0ZXMpIHtcbiAgICB0aGlzLl9tZXNoQ2VydGlmaWNhdGVzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNZXNoQ2VydGlmaWNhdGVzKCkge1xuICAgIHRoaXMuX21lc2hDZXJ0aWZpY2F0ZXMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbWVzaENlcnRpZmljYXRlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNoQ2VydGlmaWNhdGVzLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBtb25pdG9yaW5nX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tb25pdG9yaW5nQ29uZmlnID0gbmV3IENvbnRhaW5lckNsdXN0ZXJNb25pdG9yaW5nQ29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibW9uaXRvcmluZ19jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgbW9uaXRvcmluZ0NvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uaXRvcmluZ0NvbmZpZztcbiAgfVxuICBwdWJsaWMgcHV0TW9uaXRvcmluZ0NvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck1vbml0b3JpbmdDb25maWcpIHtcbiAgICB0aGlzLl9tb25pdG9yaW5nQ29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNb25pdG9yaW5nQ29uZmlnKCkge1xuICAgIHRoaXMuX21vbml0b3JpbmdDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbW9uaXRvcmluZ0NvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tb25pdG9yaW5nQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBuZXR3b3JrX3BvbGljeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9uZXR3b3JrUG9saWN5ID0gbmV3IENvbnRhaW5lckNsdXN0ZXJOZXR3b3JrUG9saWN5T3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibmV0d29ya19wb2xpY3lcIik7XG4gIHB1YmxpYyBnZXQgbmV0d29ya1BvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV0d29ya1BvbGljeTtcbiAgfVxuICBwdWJsaWMgcHV0TmV0d29ya1BvbGljeSh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck5ldHdvcmtQb2xpY3kpIHtcbiAgICB0aGlzLl9uZXR3b3JrUG9saWN5LmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROZXR3b3JrUG9saWN5KCkge1xuICAgIHRoaXMuX25ldHdvcmtQb2xpY3kuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmV0d29ya1BvbGljeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uZXR3b3JrUG9saWN5LmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBub2RlX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9ub2RlQ29uZmlnID0gbmV3IENvbnRhaW5lckNsdXN0ZXJOb2RlQ29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibm9kZV9jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgbm9kZUNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUNvbmZpZztcbiAgfVxuICBwdWJsaWMgcHV0Tm9kZUNvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck5vZGVDb25maWcpIHtcbiAgICB0aGlzLl9ub2RlQ29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROb2RlQ29uZmlnKCkge1xuICAgIHRoaXMuX25vZGVDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbm9kZUNvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9ub2RlQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBub2RlX3Bvb2wgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbm9kZVBvb2wgPSBuZXcgQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sTGlzdCh0aGlzLCBcIm5vZGVfcG9vbFwiLCBmYWxzZSk7XG4gIHB1YmxpYyBnZXQgbm9kZVBvb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVQb29sO1xuICB9XG4gIHB1YmxpYyBwdXROb2RlUG9vbCh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sW10gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX25vZGVQb29sLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROb2RlUG9vbCgpIHtcbiAgICB0aGlzLl9ub2RlUG9vbC5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBub2RlUG9vbElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9ub2RlUG9vbC5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gbm9kZV9wb29sX2F1dG9fY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX25vZGVQb29sQXV0b0NvbmZpZyA9IG5ldyBDb250YWluZXJDbHVzdGVyTm9kZVBvb2xBdXRvQ29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibm9kZV9wb29sX2F1dG9fY29uZmlnXCIpO1xuICBwdWJsaWMgZ2V0IG5vZGVQb29sQXV0b0NvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZVBvb2xBdXRvQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXROb2RlUG9vbEF1dG9Db25maWcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbEF1dG9Db25maWcpIHtcbiAgICB0aGlzLl9ub2RlUG9vbEF1dG9Db25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE5vZGVQb29sQXV0b0NvbmZpZygpIHtcbiAgICB0aGlzLl9ub2RlUG9vbEF1dG9Db25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbm9kZVBvb2xBdXRvQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVQb29sQXV0b0NvbmZpZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gbm9kZV9wb29sX2RlZmF1bHRzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX25vZGVQb29sRGVmYXVsdHMgPSBuZXcgQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sRGVmYXVsdHNPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJub2RlX3Bvb2xfZGVmYXVsdHNcIik7XG4gIHB1YmxpYyBnZXQgbm9kZVBvb2xEZWZhdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZVBvb2xEZWZhdWx0cztcbiAgfVxuICBwdWJsaWMgcHV0Tm9kZVBvb2xEZWZhdWx0cyh2YWx1ZTogQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sRGVmYXVsdHMpIHtcbiAgICB0aGlzLl9ub2RlUG9vbERlZmF1bHRzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROb2RlUG9vbERlZmF1bHRzKCkge1xuICAgIHRoaXMuX25vZGVQb29sRGVmYXVsdHMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbm9kZVBvb2xEZWZhdWx0c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9ub2RlUG9vbERlZmF1bHRzLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBub3RpZmljYXRpb25fY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX25vdGlmaWNhdGlvbkNvbmZpZyA9IG5ldyBDb250YWluZXJDbHVzdGVyTm90aWZpY2F0aW9uQ29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwibm90aWZpY2F0aW9uX2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBub3RpZmljYXRpb25Db25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkNvbmZpZztcbiAgfVxuICBwdWJsaWMgcHV0Tm90aWZpY2F0aW9uQ29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyTm90aWZpY2F0aW9uQ29uZmlnKSB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9uQ29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROb3RpZmljYXRpb25Db25maWcoKSB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9uQ29uZmlnLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbkNvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25Db25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIHByaXZhdGVfY2x1c3Rlcl9jb25maWcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcHJpdmF0ZUNsdXN0ZXJDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlclByaXZhdGVDbHVzdGVyQ29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwicHJpdmF0ZV9jbHVzdGVyX2NvbmZpZ1wiKTtcbiAgcHVibGljIGdldCBwcml2YXRlQ2x1c3RlckNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZUNsdXN0ZXJDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dFByaXZhdGVDbHVzdGVyQ29uZmlnKHZhbHVlOiBDb250YWluZXJDbHVzdGVyUHJpdmF0ZUNsdXN0ZXJDb25maWcpIHtcbiAgICB0aGlzLl9wcml2YXRlQ2x1c3RlckNvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UHJpdmF0ZUNsdXN0ZXJDb25maWcoKSB7XG4gICAgdGhpcy5fcHJpdmF0ZUNsdXN0ZXJDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcHJpdmF0ZUNsdXN0ZXJDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZUNsdXN0ZXJDb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIHJlbGVhc2VfY2hhbm5lbCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZWxlYXNlQ2hhbm5lbCA9IG5ldyBDb250YWluZXJDbHVzdGVyUmVsZWFzZUNoYW5uZWxPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJyZWxlYXNlX2NoYW5uZWxcIik7XG4gIHB1YmxpYyBnZXQgcmVsZWFzZUNoYW5uZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDaGFubmVsO1xuICB9XG4gIHB1YmxpYyBwdXRSZWxlYXNlQ2hhbm5lbCh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlclJlbGVhc2VDaGFubmVsKSB7XG4gICAgdGhpcy5fcmVsZWFzZUNoYW5uZWwuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlbGVhc2VDaGFubmVsKCkge1xuICAgIHRoaXMuX3JlbGVhc2VDaGFubmVsLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlbGVhc2VDaGFubmVsSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDaGFubmVsLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyByZXNvdXJjZV91c2FnZV9leHBvcnRfY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3Jlc291cmNlVXNhZ2VFeHBvcnRDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlclJlc291cmNlVXNhZ2VFeHBvcnRDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJyZXNvdXJjZV91c2FnZV9leHBvcnRfY29uZmlnXCIpO1xuICBwdWJsaWMgZ2V0IHJlc291cmNlVXNhZ2VFeHBvcnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlVXNhZ2VFeHBvcnRDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dFJlc291cmNlVXNhZ2VFeHBvcnRDb25maWcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJSZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnKSB7XG4gICAgdGhpcy5fcmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZygpIHtcbiAgICB0aGlzLl9yZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlc291cmNlVXNhZ2VFeHBvcnRDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gc2VjcmV0X21hbmFnZXJfY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3NlY3JldE1hbmFnZXJDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlclNlY3JldE1hbmFnZXJDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJzZWNyZXRfbWFuYWdlcl9jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgc2VjcmV0TWFuYWdlckNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjcmV0TWFuYWdlckNvbmZpZztcbiAgfVxuICBwdWJsaWMgcHV0U2VjcmV0TWFuYWdlckNvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlclNlY3JldE1hbmFnZXJDb25maWcpIHtcbiAgICB0aGlzLl9zZWNyZXRNYW5hZ2VyQ29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTZWNyZXRNYW5hZ2VyQ29uZmlnKCkge1xuICAgIHRoaXMuX3NlY3JldE1hbmFnZXJDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2VjcmV0TWFuYWdlckNvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWNyZXRNYW5hZ2VyQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBzZWN1cml0eV9wb3N0dXJlX2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zZWN1cml0eVBvc3R1cmVDb25maWcgPSBuZXcgQ29udGFpbmVyQ2x1c3RlclNlY3VyaXR5UG9zdHVyZUNvbmZpZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcInNlY3VyaXR5X3Bvc3R1cmVfY29uZmlnXCIpO1xuICBwdWJsaWMgZ2V0IHNlY3VyaXR5UG9zdHVyZUNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdXJpdHlQb3N0dXJlQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXRTZWN1cml0eVBvc3R1cmVDb25maWcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJTZWN1cml0eVBvc3R1cmVDb25maWcpIHtcbiAgICB0aGlzLl9zZWN1cml0eVBvc3R1cmVDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFNlY3VyaXR5UG9zdHVyZUNvbmZpZygpIHtcbiAgICB0aGlzLl9zZWN1cml0eVBvc3R1cmVDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2VjdXJpdHlQb3N0dXJlQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3VyaXR5UG9zdHVyZUNvbmZpZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gc2VydmljZV9leHRlcm5hbF9pcHNfY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3NlcnZpY2VFeHRlcm5hbElwc0NvbmZpZyA9IG5ldyBDb250YWluZXJDbHVzdGVyU2VydmljZUV4dGVybmFsSXBzQ29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwic2VydmljZV9leHRlcm5hbF9pcHNfY29uZmlnXCIpO1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VFeHRlcm5hbElwc0NvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZUV4dGVybmFsSXBzQ29uZmlnO1xuICB9XG4gIHB1YmxpYyBwdXRTZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJTZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWcpIHtcbiAgICB0aGlzLl9zZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFNlcnZpY2VFeHRlcm5hbElwc0NvbmZpZygpIHtcbiAgICB0aGlzLl9zZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWcuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2VydmljZUV4dGVybmFsSXBzQ29uZmlnSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VFeHRlcm5hbElwc0NvbmZpZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gdGltZW91dHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGltZW91dHMgPSBuZXcgQ29udGFpbmVyQ2x1c3RlclRpbWVvdXRzT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwidGltZW91dHNcIik7XG4gIHB1YmxpYyBnZXQgdGltZW91dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRzO1xuICB9XG4gIHB1YmxpYyBwdXRUaW1lb3V0cyh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlclRpbWVvdXRzKSB7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRpbWVvdXRzKCkge1xuICAgIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRpbWVvdXRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyB1c2VyX21hbmFnZWRfa2V5c19jb25maWcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXNlck1hbmFnZWRLZXlzQ29uZmlnID0gbmV3IENvbnRhaW5lckNsdXN0ZXJVc2VyTWFuYWdlZEtleXNDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJ1c2VyX21hbmFnZWRfa2V5c19jb25maWdcIik7XG4gIHB1YmxpYyBnZXQgdXNlck1hbmFnZWRLZXlzQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlZEtleXNDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dFVzZXJNYW5hZ2VkS2V5c0NvbmZpZyh2YWx1ZTogQ29udGFpbmVyQ2x1c3RlclVzZXJNYW5hZ2VkS2V5c0NvbmZpZykge1xuICAgIHRoaXMuX3VzZXJNYW5hZ2VkS2V5c0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXNlck1hbmFnZWRLZXlzQ29uZmlnKCkge1xuICAgIHRoaXMuX3VzZXJNYW5hZ2VkS2V5c0NvbmZpZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB1c2VyTWFuYWdlZEtleXNDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlck1hbmFnZWRLZXlzQ29uZmlnLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyB2ZXJ0aWNhbF9wb2RfYXV0b3NjYWxpbmcgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdmVydGljYWxQb2RBdXRvc2NhbGluZyA9IG5ldyBDb250YWluZXJDbHVzdGVyVmVydGljYWxQb2RBdXRvc2NhbGluZ091dHB1dFJlZmVyZW5jZSh0aGlzLCBcInZlcnRpY2FsX3BvZF9hdXRvc2NhbGluZ1wiKTtcbiAgcHVibGljIGdldCB2ZXJ0aWNhbFBvZEF1dG9zY2FsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92ZXJ0aWNhbFBvZEF1dG9zY2FsaW5nO1xuICB9XG4gIHB1YmxpYyBwdXRWZXJ0aWNhbFBvZEF1dG9zY2FsaW5nKHZhbHVlOiBDb250YWluZXJDbHVzdGVyVmVydGljYWxQb2RBdXRvc2NhbGluZykge1xuICAgIHRoaXMuX3ZlcnRpY2FsUG9kQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFZlcnRpY2FsUG9kQXV0b3NjYWxpbmcoKSB7XG4gICAgdGhpcy5fdmVydGljYWxQb2RBdXRvc2NhbGluZy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB2ZXJ0aWNhbFBvZEF1dG9zY2FsaW5nSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnRpY2FsUG9kQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIHdvcmtsb2FkX2lkZW50aXR5X2NvbmZpZyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF93b3JrbG9hZElkZW50aXR5Q29uZmlnID0gbmV3IENvbnRhaW5lckNsdXN0ZXJXb3JrbG9hZElkZW50aXR5Q29uZmlnT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwid29ya2xvYWRfaWRlbnRpdHlfY29uZmlnXCIpO1xuICBwdWJsaWMgZ2V0IHdvcmtsb2FkSWRlbnRpdHlDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtsb2FkSWRlbnRpdHlDb25maWc7XG4gIH1cbiAgcHVibGljIHB1dFdvcmtsb2FkSWRlbnRpdHlDb25maWcodmFsdWU6IENvbnRhaW5lckNsdXN0ZXJXb3JrbG9hZElkZW50aXR5Q29uZmlnKSB7XG4gICAgdGhpcy5fd29ya2xvYWRJZGVudGl0eUNvbmZpZy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0V29ya2xvYWRJZGVudGl0eUNvbmZpZygpIHtcbiAgICB0aGlzLl93b3JrbG9hZElkZW50aXR5Q29uZmlnLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHdvcmtsb2FkSWRlbnRpdHlDb25maWdJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd29ya2xvYWRJZGVudGl0eUNvbmZpZy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIFNZTlRIRVNJU1xuICAvLyA9PT09PT09PT1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd19uZXRfYWRtaW46IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9hbGxvd05ldEFkbWluKSxcbiAgICAgIGNsdXN0ZXJfaXB2NF9jaWRyOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9jbHVzdGVySXB2NENpZHIpLFxuICAgICAgZGF0YXBhdGhfcHJvdmlkZXI6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2RhdGFwYXRoUHJvdmlkZXIpLFxuICAgICAgZGVmYXVsdF9tYXhfcG9kc19wZXJfbm9kZTogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0odGhpcy5fZGVmYXVsdE1heFBvZHNQZXJOb2RlKSxcbiAgICAgIGRlbGV0aW9uX3Byb3RlY3Rpb246IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9kZWxldGlvblByb3RlY3Rpb24pLFxuICAgICAgZGVzY3JpcHRpb246IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2Rlc2NyaXB0aW9uKSxcbiAgICAgIGVuYWJsZV9hdXRvcGlsb3Q6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9lbmFibGVBdXRvcGlsb3QpLFxuICAgICAgZW5hYmxlX2NpbGl1bV9jbHVzdGVyd2lkZV9uZXR3b3JrX3BvbGljeTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2VuYWJsZUNpbGl1bUNsdXN0ZXJ3aWRlTmV0d29ya1BvbGljeSksXG4gICAgICBlbmFibGVfaW50cmFub2RlX3Zpc2liaWxpdHk6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9lbmFibGVJbnRyYW5vZGVWaXNpYmlsaXR5KSxcbiAgICAgIGVuYWJsZV9rdWJlcm5ldGVzX2FscGhhOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fZW5hYmxlS3ViZXJuZXRlc0FscGhhKSxcbiAgICAgIGVuYWJsZV9sNF9pbGJfc3Vic2V0dGluZzogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2VuYWJsZUw0SWxiU3Vic2V0dGluZyksXG4gICAgICBlbmFibGVfbGVnYWN5X2FiYWM6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9lbmFibGVMZWdhY3lBYmFjKSxcbiAgICAgIGVuYWJsZV9tdWx0aV9uZXR3b3JraW5nOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fZW5hYmxlTXVsdGlOZXR3b3JraW5nKSxcbiAgICAgIGVuYWJsZV9zaGllbGRlZF9ub2RlczogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2VuYWJsZVNoaWVsZGVkTm9kZXMpLFxuICAgICAgZW5hYmxlX3RwdTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2VuYWJsZVRwdSksXG4gICAgICBpZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgaW5pdGlhbF9ub2RlX2NvdW50OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybSh0aGlzLl9pbml0aWFsTm9kZUNvdW50KSxcbiAgICAgIGxvY2F0aW9uOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9sb2NhdGlvbiksXG4gICAgICBsb2dnaW5nX3NlcnZpY2U6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2xvZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIG1pbl9tYXN0ZXJfdmVyc2lvbjogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbWluTWFzdGVyVmVyc2lvbiksXG4gICAgICBtb25pdG9yaW5nX3NlcnZpY2U6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX21vbml0b3JpbmdTZXJ2aWNlKSxcbiAgICAgIG5hbWU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX25hbWUpLFxuICAgICAgbmV0d29yazogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbmV0d29yayksXG4gICAgICBuZXR3b3JraW5nX21vZGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX25ldHdvcmtpbmdNb2RlKSxcbiAgICAgIG5vZGVfbG9jYXRpb25zOiBjZGt0Zi5saXN0TWFwcGVyKGNka3RmLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fbm9kZUxvY2F0aW9ucyksXG4gICAgICBub2RlX3ZlcnNpb246IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX25vZGVWZXJzaW9uKSxcbiAgICAgIHByaXZhdGVfaXB2Nl9nb29nbGVfYWNjZXNzOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9wcml2YXRlSXB2Nkdvb2dsZUFjY2VzcyksXG4gICAgICBwcm9qZWN0OiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9wcm9qZWN0KSxcbiAgICAgIHJlbW92ZV9kZWZhdWx0X25vZGVfcG9vbDogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3JlbW92ZURlZmF1bHROb2RlUG9vbCksXG4gICAgICByZXNvdXJjZV9sYWJlbHM6IGNka3RmLmhhc2hNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0pKHRoaXMuX3Jlc291cmNlTGFiZWxzKSxcbiAgICAgIHN1Ym5ldHdvcms6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3N1Ym5ldHdvcmspLFxuICAgICAgYWRkb25zX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX2FkZG9uc0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIGF1dGhlbnRpY2F0b3JfZ3JvdXBzX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlckF1dGhlbnRpY2F0b3JHcm91cHNDb25maWdUb1RlcnJhZm9ybSh0aGlzLl9hdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgYmluYXJ5X2F1dGhvcml6YXRpb246IGNvbnRhaW5lckNsdXN0ZXJCaW5hcnlBdXRob3JpemF0aW9uVG9UZXJyYWZvcm0odGhpcy5fYmluYXJ5QXV0aG9yaXphdGlvbi5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIGNsdXN0ZXJfYXV0b3NjYWxpbmc6IGNvbnRhaW5lckNsdXN0ZXJDbHVzdGVyQXV0b3NjYWxpbmdUb1RlcnJhZm9ybSh0aGlzLl9jbHVzdGVyQXV0b3NjYWxpbmcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBjb25maWRlbnRpYWxfbm9kZXM6IGNvbnRhaW5lckNsdXN0ZXJDb25maWRlbnRpYWxOb2Rlc1RvVGVycmFmb3JtKHRoaXMuX2NvbmZpZGVudGlhbE5vZGVzLmludGVybmFsVmFsdWUpLFxuICAgICAgY29udHJvbF9wbGFuZV9lbmRwb2ludHNfY29uZmlnOiBjb250YWluZXJDbHVzdGVyQ29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnVG9UZXJyYWZvcm0odGhpcy5fY29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgY29zdF9tYW5hZ2VtZW50X2NvbmZpZzogY29udGFpbmVyQ2x1c3RlckNvc3RNYW5hZ2VtZW50Q29uZmlnVG9UZXJyYWZvcm0odGhpcy5fY29zdE1hbmFnZW1lbnRDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBkYXRhYmFzZV9lbmNyeXB0aW9uOiBjb250YWluZXJDbHVzdGVyRGF0YWJhc2VFbmNyeXB0aW9uVG9UZXJyYWZvcm0odGhpcy5fZGF0YWJhc2VFbmNyeXB0aW9uLmludGVybmFsVmFsdWUpLFxuICAgICAgZGVmYXVsdF9zbmF0X3N0YXR1czogY29udGFpbmVyQ2x1c3RlckRlZmF1bHRTbmF0U3RhdHVzVG9UZXJyYWZvcm0odGhpcy5fZGVmYXVsdFNuYXRTdGF0dXMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBkbnNfY29uZmlnOiBjb250YWluZXJDbHVzdGVyRG5zQ29uZmlnVG9UZXJyYWZvcm0odGhpcy5fZG5zQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgZW5hYmxlX2s4c19iZXRhX2FwaXM6IGNvbnRhaW5lckNsdXN0ZXJFbmFibGVLOFNCZXRhQXBpc1RvVGVycmFmb3JtKHRoaXMuX2VuYWJsZUs4U0JldGFBcGlzLmludGVybmFsVmFsdWUpLFxuICAgICAgZW50ZXJwcmlzZV9jb25maWc6IGNvbnRhaW5lckNsdXN0ZXJFbnRlcnByaXNlQ29uZmlnVG9UZXJyYWZvcm0odGhpcy5fZW50ZXJwcmlzZUNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIGZsZWV0OiBjb250YWluZXJDbHVzdGVyRmxlZXRUb1RlcnJhZm9ybSh0aGlzLl9mbGVldC5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIGdhdGV3YXlfYXBpX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlckdhdGV3YXlBcGlDb25maWdUb1RlcnJhZm9ybSh0aGlzLl9nYXRld2F5QXBpQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgaWRlbnRpdHlfc2VydmljZV9jb25maWc6IGNvbnRhaW5lckNsdXN0ZXJJZGVudGl0eVNlcnZpY2VDb25maWdUb1RlcnJhZm9ybSh0aGlzLl9pZGVudGl0eVNlcnZpY2VDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBpcF9hbGxvY2F0aW9uX3BvbGljeTogY29udGFpbmVyQ2x1c3RlcklwQWxsb2NhdGlvblBvbGljeVRvVGVycmFmb3JtKHRoaXMuX2lwQWxsb2NhdGlvblBvbGljeS5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIGxvZ2dpbmdfY29uZmlnOiBjb250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX2xvZ2dpbmdDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBtYWludGVuYW5jZV9wb2xpY3k6IGNvbnRhaW5lckNsdXN0ZXJNYWludGVuYW5jZVBvbGljeVRvVGVycmFmb3JtKHRoaXMuX21haW50ZW5hbmNlUG9saWN5LmludGVybmFsVmFsdWUpLFxuICAgICAgbWFzdGVyX2F1dGg6IGNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRoVG9UZXJyYWZvcm0odGhpcy5fbWFzdGVyQXV0aC5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIG1hc3Rlcl9hdXRob3JpemVkX25ldHdvcmtzX2NvbmZpZzogY29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX21hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIG1lc2hfY2VydGlmaWNhdGVzOiBjb250YWluZXJDbHVzdGVyTWVzaENlcnRpZmljYXRlc1RvVGVycmFmb3JtKHRoaXMuX21lc2hDZXJ0aWZpY2F0ZXMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBtb25pdG9yaW5nX2NvbmZpZzogY29udGFpbmVyQ2x1c3Rlck1vbml0b3JpbmdDb25maWdUb1RlcnJhZm9ybSh0aGlzLl9tb25pdG9yaW5nQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgbmV0d29ya19wb2xpY3k6IGNvbnRhaW5lckNsdXN0ZXJOZXR3b3JrUG9saWN5VG9UZXJyYWZvcm0odGhpcy5fbmV0d29ya1BvbGljeS5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIG5vZGVfY29uZmlnOiBjb250YWluZXJDbHVzdGVyTm9kZUNvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX25vZGVDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBub2RlX3Bvb2w6IGNka3RmLmxpc3RNYXBwZXIoY29udGFpbmVyQ2x1c3Rlck5vZGVQb29sVG9UZXJyYWZvcm0sIHRydWUpKHRoaXMuX25vZGVQb29sLmludGVybmFsVmFsdWUpLFxuICAgICAgbm9kZV9wb29sX2F1dG9fY29uZmlnOiBjb250YWluZXJDbHVzdGVyTm9kZVBvb2xBdXRvQ29uZmlnVG9UZXJyYWZvcm0odGhpcy5fbm9kZVBvb2xBdXRvQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgbm9kZV9wb29sX2RlZmF1bHRzOiBjb250YWluZXJDbHVzdGVyTm9kZVBvb2xEZWZhdWx0c1RvVGVycmFmb3JtKHRoaXMuX25vZGVQb29sRGVmYXVsdHMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBub3RpZmljYXRpb25fY29uZmlnOiBjb250YWluZXJDbHVzdGVyTm90aWZpY2F0aW9uQ29uZmlnVG9UZXJyYWZvcm0odGhpcy5fbm90aWZpY2F0aW9uQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgcHJpdmF0ZV9jbHVzdGVyX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlclByaXZhdGVDbHVzdGVyQ29uZmlnVG9UZXJyYWZvcm0odGhpcy5fcHJpdmF0ZUNsdXN0ZXJDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICByZWxlYXNlX2NoYW5uZWw6IGNvbnRhaW5lckNsdXN0ZXJSZWxlYXNlQ2hhbm5lbFRvVGVycmFmb3JtKHRoaXMuX3JlbGVhc2VDaGFubmVsLmludGVybmFsVmFsdWUpLFxuICAgICAgcmVzb3VyY2VfdXNhZ2VfZXhwb3J0X2NvbmZpZzogY29udGFpbmVyQ2x1c3RlclJlc291cmNlVXNhZ2VFeHBvcnRDb25maWdUb1RlcnJhZm9ybSh0aGlzLl9yZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgc2VjcmV0X21hbmFnZXJfY29uZmlnOiBjb250YWluZXJDbHVzdGVyU2VjcmV0TWFuYWdlckNvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX3NlY3JldE1hbmFnZXJDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBzZWN1cml0eV9wb3N0dXJlX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlclNlY3VyaXR5UG9zdHVyZUNvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX3NlY3VyaXR5UG9zdHVyZUNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIHNlcnZpY2VfZXh0ZXJuYWxfaXBzX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlclNlcnZpY2VFeHRlcm5hbElwc0NvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX3NlcnZpY2VFeHRlcm5hbElwc0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIHRpbWVvdXRzOiBjb250YWluZXJDbHVzdGVyVGltZW91dHNUb1RlcnJhZm9ybSh0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIHVzZXJfbWFuYWdlZF9rZXlzX2NvbmZpZzogY29udGFpbmVyQ2x1c3RlclVzZXJNYW5hZ2VkS2V5c0NvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX3VzZXJNYW5hZ2VkS2V5c0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIHZlcnRpY2FsX3BvZF9hdXRvc2NhbGluZzogY29udGFpbmVyQ2x1c3RlclZlcnRpY2FsUG9kQXV0b3NjYWxpbmdUb1RlcnJhZm9ybSh0aGlzLl92ZXJ0aWNhbFBvZEF1dG9zY2FsaW5nLmludGVybmFsVmFsdWUpLFxuICAgICAgd29ya2xvYWRfaWRlbnRpdHlfY29uZmlnOiBjb250YWluZXJDbHVzdGVyV29ya2xvYWRJZGVudGl0eUNvbmZpZ1RvVGVycmFmb3JtKHRoaXMuX3dvcmtsb2FkSWRlbnRpdHlDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICBhbGxvd19uZXRfYWRtaW46IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9hbGxvd05ldEFkbWluKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGNsdXN0ZXJfaXB2NF9jaWRyOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9jbHVzdGVySXB2NENpZHIpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBkYXRhcGF0aF9wcm92aWRlcjoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fZGF0YXBhdGhQcm92aWRlciksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRfbWF4X3BvZHNfcGVyX25vZGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHRoaXMuX2RlZmF1bHRNYXhQb2RzUGVyTm9kZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgICAgfSxcbiAgICAgIGRlbGV0aW9uX3Byb3RlY3Rpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9kZWxldGlvblByb3RlY3Rpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2Rlc2NyaXB0aW9uKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX2F1dG9waWxvdDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2VuYWJsZUF1dG9waWxvdCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBlbmFibGVfY2lsaXVtX2NsdXN0ZXJ3aWRlX25ldHdvcmtfcG9saWN5OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZW5hYmxlQ2lsaXVtQ2x1c3RlcndpZGVOZXR3b3JrUG9saWN5KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGVuYWJsZV9pbnRyYW5vZGVfdmlzaWJpbGl0eToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2VuYWJsZUludHJhbm9kZVZpc2liaWxpdHkpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX2t1YmVybmV0ZXNfYWxwaGE6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9lbmFibGVLdWJlcm5ldGVzQWxwaGEpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX2w0X2lsYl9zdWJzZXR0aW5nOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZW5hYmxlTDRJbGJTdWJzZXR0aW5nKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGVuYWJsZV9sZWdhY3lfYWJhYzoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2VuYWJsZUxlZ2FjeUFiYWMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX211bHRpX25ldHdvcmtpbmc6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9lbmFibGVNdWx0aU5ldHdvcmtpbmcpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX3NoaWVsZGVkX25vZGVzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZW5hYmxlU2hpZWxkZWROb2RlcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBlbmFibGVfdHB1OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZW5hYmxlVHB1KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGlkOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9pZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGluaXRpYWxfbm9kZV9jb3VudDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0odGhpcy5faW5pdGlhbE5vZGVDb3VudCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgICAgfSxcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9sb2NhdGlvbiksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGxvZ2dpbmdfc2VydmljZToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fbG9nZ2luZ1NlcnZpY2UpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBtaW5fbWFzdGVyX3ZlcnNpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX21pbk1hc3RlclZlcnNpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBtb25pdG9yaW5nX3NlcnZpY2U6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX21vbml0b3JpbmdTZXJ2aWNlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbmFtZToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fbmFtZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX25ldHdvcmspLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBuZXR3b3JraW5nX21vZGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX25ldHdvcmtpbmdNb2RlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbm9kZV9sb2NhdGlvbnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmxpc3RNYXBwZXJIY2woY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9ub2RlTG9jYXRpb25zKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIG5vZGVfdmVyc2lvbjoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fbm9kZVZlcnNpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBwcml2YXRlX2lwdjZfZ29vZ2xlX2FjY2Vzczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcHJpdmF0ZUlwdjZHb29nbGVBY2Nlc3MpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBwcm9qZWN0OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9wcm9qZWN0KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgcmVtb3ZlX2RlZmF1bHRfbm9kZV9wb29sOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fcmVtb3ZlRGVmYXVsdE5vZGVQb29sKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHJlc291cmNlX2xhYmVsczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuaGFzaE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSkodGhpcy5fcmVzb3VyY2VMYWJlbHMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICAgIH0sXG4gICAgICBzdWJuZXR3b3JrOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9zdWJuZXR3b3JrKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgYWRkb25zX2NvbmZpZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2FkZG9uc0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckFkZG9uc0NvbmZpZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBhdXRoZW50aWNhdG9yX2dyb3Vwc19jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJBdXRoZW50aWNhdG9yR3JvdXBzQ29uZmlnVG9IY2xUZXJyYWZvcm0odGhpcy5fYXV0aGVudGljYXRvckdyb3Vwc0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckF1dGhlbnRpY2F0b3JHcm91cHNDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgYmluYXJ5X2F1dGhvcml6YXRpb246IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJCaW5hcnlBdXRob3JpemF0aW9uVG9IY2xUZXJyYWZvcm0odGhpcy5fYmluYXJ5QXV0aG9yaXphdGlvbi5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckJpbmFyeUF1dGhvcml6YXRpb25MaXN0XCIsXG4gICAgICB9LFxuICAgICAgY2x1c3Rlcl9hdXRvc2NhbGluZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlckNsdXN0ZXJBdXRvc2NhbGluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2NsdXN0ZXJBdXRvc2NhbGluZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckNsdXN0ZXJBdXRvc2NhbGluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBjb25maWRlbnRpYWxfbm9kZXM6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJDb25maWRlbnRpYWxOb2Rlc1RvSGNsVGVycmFmb3JtKHRoaXMuX2NvbmZpZGVudGlhbE5vZGVzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyQ29uZmlkZW50aWFsTm9kZXNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgY29udHJvbF9wbGFuZV9lbmRwb2ludHNfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyQ29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnVG9IY2xUZXJyYWZvcm0odGhpcy5fY29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyQ29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGNvc3RfbWFuYWdlbWVudF9jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJDb3N0TWFuYWdlbWVudENvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2Nvc3RNYW5hZ2VtZW50Q29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyQ29zdE1hbmFnZW1lbnRDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgZGF0YWJhc2VfZW5jcnlwdGlvbjoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlckRhdGFiYXNlRW5jcnlwdGlvblRvSGNsVGVycmFmb3JtKHRoaXMuX2RhdGFiYXNlRW5jcnlwdGlvbi5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckRhdGFiYXNlRW5jcnlwdGlvbkxpc3RcIixcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0X3NuYXRfc3RhdHVzOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyRGVmYXVsdFNuYXRTdGF0dXNUb0hjbFRlcnJhZm9ybSh0aGlzLl9kZWZhdWx0U25hdFN0YXR1cy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckRlZmF1bHRTbmF0U3RhdHVzTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGRuc19jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJEbnNDb25maWdUb0hjbFRlcnJhZm9ybSh0aGlzLl9kbnNDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJEbnNDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX2s4c19iZXRhX2FwaXM6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJFbmFibGVLOFNCZXRhQXBpc1RvSGNsVGVycmFmb3JtKHRoaXMuX2VuYWJsZUs4U0JldGFBcGlzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyRW5hYmxlSzhTQmV0YUFwaXNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgZW50ZXJwcmlzZV9jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJFbnRlcnByaXNlQ29uZmlnVG9IY2xUZXJyYWZvcm0odGhpcy5fZW50ZXJwcmlzZUNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlckVudGVycHJpc2VDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgZmxlZXQ6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJGbGVldFRvSGNsVGVycmFmb3JtKHRoaXMuX2ZsZWV0LmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyRmxlZXRMaXN0XCIsXG4gICAgICB9LFxuICAgICAgZ2F0ZXdheV9hcGlfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyR2F0ZXdheUFwaUNvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2dhdGV3YXlBcGlDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJHYXRld2F5QXBpQ29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGlkZW50aXR5X3NlcnZpY2VfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVySWRlbnRpdHlTZXJ2aWNlQ29uZmlnVG9IY2xUZXJyYWZvcm0odGhpcy5faWRlbnRpdHlTZXJ2aWNlQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVySWRlbnRpdHlTZXJ2aWNlQ29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGlwX2FsbG9jYXRpb25fcG9saWN5OiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVySXBBbGxvY2F0aW9uUG9saWN5VG9IY2xUZXJyYWZvcm0odGhpcy5faXBBbGxvY2F0aW9uUG9saWN5LmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVySXBBbGxvY2F0aW9uUG9saWN5TGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGxvZ2dpbmdfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2xvZ2dpbmdDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJMb2dnaW5nQ29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIG1haW50ZW5hbmNlX3BvbGljeToge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3Rlck1haW50ZW5hbmNlUG9saWN5VG9IY2xUZXJyYWZvcm0odGhpcy5fbWFpbnRlbmFuY2VQb2xpY3kuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJNYWludGVuYW5jZVBvbGljeUxpc3RcIixcbiAgICAgIH0sXG4gICAgICBtYXN0ZXJfYXV0aDoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhUb0hjbFRlcnJhZm9ybSh0aGlzLl9tYXN0ZXJBdXRoLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyTWFzdGVyQXV0aExpc3RcIixcbiAgICAgIH0sXG4gICAgICBtYXN0ZXJfYXV0aG9yaXplZF9uZXR3b3Jrc19jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWdUb0hjbFRlcnJhZm9ybSh0aGlzLl9tYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRob3JpemVkTmV0d29ya3NDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgbWVzaF9jZXJ0aWZpY2F0ZXM6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJNZXNoQ2VydGlmaWNhdGVzVG9IY2xUZXJyYWZvcm0odGhpcy5fbWVzaENlcnRpZmljYXRlcy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck1lc2hDZXJ0aWZpY2F0ZXNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgbW9uaXRvcmluZ19jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJNb25pdG9yaW5nQ29uZmlnVG9IY2xUZXJyYWZvcm0odGhpcy5fbW9uaXRvcmluZ0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck1vbml0b3JpbmdDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgbmV0d29ya19wb2xpY3k6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJOZXR3b3JrUG9saWN5VG9IY2xUZXJyYWZvcm0odGhpcy5fbmV0d29ya1BvbGljeS5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck5ldHdvcmtQb2xpY3lMaXN0XCIsXG4gICAgICB9LFxuICAgICAgbm9kZV9jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJOb2RlQ29uZmlnVG9IY2xUZXJyYWZvcm0odGhpcy5fbm9kZUNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck5vZGVDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgbm9kZV9wb29sOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5saXN0TWFwcGVySGNsKGNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbFRvSGNsVGVycmFmb3JtLCB0cnVlKSh0aGlzLl9ub2RlUG9vbC5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIG5vZGVfcG9vbF9hdXRvX2NvbmZpZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3Rlck5vZGVQb29sQXV0b0NvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX25vZGVQb29sQXV0b0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sQXV0b0NvbmZpZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBub2RlX3Bvb2xfZGVmYXVsdHM6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbERlZmF1bHRzVG9IY2xUZXJyYWZvcm0odGhpcy5fbm9kZVBvb2xEZWZhdWx0cy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sRGVmYXVsdHNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgbm90aWZpY2F0aW9uX2NvbmZpZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3Rlck5vdGlmaWNhdGlvbkNvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX25vdGlmaWNhdGlvbkNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3Rlck5vdGlmaWNhdGlvbkNvbmZpZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBwcml2YXRlX2NsdXN0ZXJfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyUHJpdmF0ZUNsdXN0ZXJDb25maWdUb0hjbFRlcnJhZm9ybSh0aGlzLl9wcml2YXRlQ2x1c3RlckNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlclByaXZhdGVDbHVzdGVyQ29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHJlbGVhc2VfY2hhbm5lbDoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlclJlbGVhc2VDaGFubmVsVG9IY2xUZXJyYWZvcm0odGhpcy5fcmVsZWFzZUNoYW5uZWwuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJSZWxlYXNlQ2hhbm5lbExpc3RcIixcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZV91c2FnZV9leHBvcnRfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyUmVzb3VyY2VVc2FnZUV4cG9ydENvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3Jlc291cmNlVXNhZ2VFeHBvcnRDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJSZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHNlY3JldF9tYW5hZ2VyX2NvbmZpZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlclNlY3JldE1hbmFnZXJDb25maWdUb0hjbFRlcnJhZm9ybSh0aGlzLl9zZWNyZXRNYW5hZ2VyQ29uZmlnLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJDb250YWluZXJDbHVzdGVyU2VjcmV0TWFuYWdlckNvbmZpZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBzZWN1cml0eV9wb3N0dXJlX2NvbmZpZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlclNlY3VyaXR5UG9zdHVyZUNvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3NlY3VyaXR5UG9zdHVyZUNvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlclNlY3VyaXR5UG9zdHVyZUNvbmZpZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBzZXJ2aWNlX2V4dGVybmFsX2lwc19jb25maWc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJTZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWdUb0hjbFRlcnJhZm9ybSh0aGlzLl9zZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJTZXJ2aWNlRXh0ZXJuYWxJcHNDb25maWdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgdGltZW91dHM6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJUaW1lb3V0c1RvSGNsVGVycmFmb3JtKHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcInN0cnVjdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJUaW1lb3V0c1wiLFxuICAgICAgfSxcbiAgICAgIHVzZXJfbWFuYWdlZF9rZXlzX2NvbmZpZzoge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyQ2x1c3RlclVzZXJNYW5hZ2VkS2V5c0NvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3VzZXJNYW5hZ2VkS2V5c0NvbmZpZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlclVzZXJNYW5hZ2VkS2V5c0NvbmZpZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICB2ZXJ0aWNhbF9wb2RfYXV0b3NjYWxpbmc6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lckNsdXN0ZXJWZXJ0aWNhbFBvZEF1dG9zY2FsaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fdmVydGljYWxQb2RBdXRvc2NhbGluZy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQ29udGFpbmVyQ2x1c3RlclZlcnRpY2FsUG9kQXV0b3NjYWxpbmdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgd29ya2xvYWRfaWRlbnRpdHlfY29uZmlnOiB7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXJDbHVzdGVyV29ya2xvYWRJZGVudGl0eUNvbmZpZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3dvcmtsb2FkSWRlbnRpdHlDb25maWcuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkNvbnRhaW5lckNsdXN0ZXJXb3JrbG9hZElkZW50aXR5Q29uZmlnTGlzdFwiLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgKSlcbiAgfVxufVxuIl19