UNPKG

cdk8s-grafana

Version:
6,369 lines 1.26 MB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.KubeHorizontalPodAutoscalerV2Beta2 = exports.KubeHorizontalPodAutoscalerListV2Beta1 = exports.KubeHorizontalPodAutoscalerV2Beta1 = exports.KubeScale = exports.KubeHorizontalPodAutoscalerList = exports.KubeHorizontalPodAutoscaler = exports.KubeSubjectAccessReviewV1Beta1 = exports.KubeSelfSubjectRulesReviewV1Beta1 = exports.KubeSelfSubjectAccessReviewV1Beta1 = exports.KubeLocalSubjectAccessReviewV1Beta1 = exports.KubeSubjectAccessReview = exports.KubeSelfSubjectRulesReview = exports.KubeSelfSubjectAccessReview = exports.KubeLocalSubjectAccessReview = exports.KubeTokenReviewV1Beta1 = exports.KubeTokenReview = exports.KubeAuditSinkListV1Alpha1 = exports.KubeAuditSinkV1Alpha1 = exports.KubeStatefulSetListV1Beta2 = exports.KubeStatefulSetV1Beta2 = exports.KubeScaleV1Beta2 = exports.KubeReplicaSetListV1Beta2 = exports.KubeReplicaSetV1Beta2 = exports.KubeDeploymentListV1Beta2 = exports.KubeDeploymentV1Beta2 = exports.KubeDaemonSetListV1Beta2 = exports.KubeDaemonSetV1Beta2 = exports.KubeControllerRevisionListV1Beta2 = exports.KubeControllerRevisionV1Beta2 = exports.KubeStatefulSetListV1Beta1 = exports.KubeStatefulSetV1Beta1 = exports.KubeScaleV1Beta1 = exports.KubeDeploymentListV1Beta1 = exports.KubeDeploymentV1Beta1 = exports.KubeControllerRevisionListV1Beta1 = exports.KubeControllerRevisionV1Beta1 = exports.KubeStatefulSetList = exports.KubeStatefulSet = exports.KubeReplicaSetList = exports.KubeReplicaSet = exports.KubeDeploymentList = exports.KubeDeployment = exports.KubeDaemonSetList = exports.KubeDaemonSet = exports.KubeControllerRevisionList = exports.KubeControllerRevision = exports.KubeValidatingWebhookConfigurationListV1Beta1 = exports.KubeValidatingWebhookConfigurationV1Beta1 = exports.KubeMutatingWebhookConfigurationListV1Beta1 = exports.KubeMutatingWebhookConfigurationV1Beta1 = void 0;
exports.KubeDaemonSetListV1Beta1 = exports.KubeDaemonSetV1Beta1 = exports.KubeEventListV1Beta1 = exports.KubeEventV1Beta1 = exports.KubeServiceList = exports.KubeServiceAccountList = exports.KubeServiceAccount = exports.KubeService = exports.KubeSecretList = exports.KubeSecret = exports.KubeResourceQuotaList = exports.KubeResourceQuota = exports.KubeReplicationControllerList = exports.KubeReplicationController = exports.KubePodTemplateList = exports.KubePodTemplate = exports.KubePodList = exports.KubePod = exports.KubePersistentVolumeList = exports.KubePersistentVolumeClaimList = exports.KubePersistentVolumeClaim = exports.KubePersistentVolume = exports.KubeNodeList = exports.KubeNode = exports.KubeNamespaceList = exports.KubeNamespace = exports.KubeLimitRangeList = exports.KubeLimitRange = exports.KubeEventList = exports.KubeEvent = exports.KubeEndpointsList = exports.KubeEndpoints = exports.KubeConfigMapList = exports.KubeConfigMap = exports.KubeComponentStatusList = exports.KubeComponentStatus = exports.KubeBinding = exports.KubeLeaseListV1Beta1 = exports.KubeLeaseV1Beta1 = exports.KubeLeaseList = exports.KubeLease = exports.KubeCertificateSigningRequestListV1Beta1 = exports.KubeCertificateSigningRequestV1Beta1 = exports.KubeCronJobListV2Alpha1 = exports.KubeCronJobV2Alpha1 = exports.KubeCronJobListV1Beta1 = exports.KubeCronJobV1Beta1 = exports.KubeJobList = exports.KubeJob = exports.KubeHorizontalPodAutoscalerListV2Beta2 = void 0;
exports.KubeStorageClass = exports.KubePodPresetListV1Alpha1 = exports.KubePodPresetV1Alpha1 = exports.KubePriorityClassListV1Beta1 = exports.KubePriorityClassV1Beta1 = exports.KubePriorityClassListV1Alpha1 = exports.KubePriorityClassV1Alpha1 = exports.KubePriorityClassList = exports.KubePriorityClass = exports.KubeRoleListV1Beta1 = exports.KubeRoleBindingListV1Beta1 = exports.KubeRoleBindingV1Beta1 = exports.KubeRoleV1Beta1 = exports.KubeClusterRoleListV1Beta1 = exports.KubeClusterRoleBindingListV1Beta1 = exports.KubeClusterRoleBindingV1Beta1 = exports.KubeClusterRoleV1Beta1 = exports.KubeRoleListV1Alpha1 = exports.KubeRoleBindingListV1Alpha1 = exports.KubeRoleBindingV1Alpha1 = exports.KubeRoleV1Alpha1 = exports.KubeClusterRoleListV1Alpha1 = exports.KubeClusterRoleBindingListV1Alpha1 = exports.KubeClusterRoleBindingV1Alpha1 = exports.KubeClusterRoleV1Alpha1 = exports.KubeRoleList = exports.KubeRoleBindingList = exports.KubeRoleBinding = exports.KubeRole = exports.KubeClusterRoleList = exports.KubeClusterRoleBindingList = exports.KubeClusterRoleBinding = exports.KubeClusterRole = exports.KubePodDisruptionBudgetListV1Beta1 = exports.KubePodDisruptionBudgetV1Beta1 = exports.KubeEvictionV1Beta1 = exports.KubeRuntimeClassListV1Beta1 = exports.KubeRuntimeClassV1Beta1 = exports.KubeRuntimeClassListV1Alpha1 = exports.KubeRuntimeClassV1Alpha1 = exports.KubeNetworkPolicyList = exports.KubeNetworkPolicy = exports.KubeReplicaSetListV1Beta1 = exports.KubeReplicaSetV1Beta1 = exports.KubePodSecurityPolicyListV1Beta1 = exports.KubePodSecurityPolicyV1Beta1 = exports.KubeNetworkPolicyListV1Beta1 = exports.KubeNetworkPolicyV1Beta1 = exports.KubeIngressListV1Beta1 = exports.KubeIngressV1Beta1 = void 0;
exports.IntOrString = exports.IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind = exports.Quantity = exports.KubeApiServiceListV1Beta1 = exports.KubeApiServiceV1Beta1 = exports.KubeApiServiceList = exports.KubeApiService = exports.KubeStatus = exports.KubeCustomResourceDefinitionListV1Beta1 = exports.KubeCustomResourceDefinitionV1Beta1 = exports.KubeVolumeAttachmentListV1Beta1 = exports.KubeVolumeAttachmentV1Beta1 = exports.KubeStorageClassListV1Beta1 = exports.KubeStorageClassV1Beta1 = exports.KubeCsiNodeListV1Beta1 = exports.KubeCsiNodeV1Beta1 = exports.KubeCsiDriverListV1Beta1 = exports.KubeCsiDriverV1Beta1 = exports.KubeVolumeAttachmentListV1Alpha1 = exports.KubeVolumeAttachmentV1Alpha1 = exports.KubeVolumeAttachmentList = exports.KubeVolumeAttachment = exports.KubeStorageClassList = void 0;
// generated by cdk8s
const cdk8s_1 = require("cdk8s");
/**
 * MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.
 *
 * @schema io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration
 */
class KubeMutatingWebhookConfigurationV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeMutatingWebhookConfigurationV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeMutatingWebhookConfigurationV1Beta1.manifest(props));
    }
}
exports.KubeMutatingWebhookConfigurationV1Beta1 = KubeMutatingWebhookConfigurationV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration"
 */
KubeMutatingWebhookConfigurationV1Beta1.GVK = {
    apiVersion: 'admissionregistration.k8s.io/v1beta1',
    kind: 'MutatingWebhookConfiguration',
};
/**
 * MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.
 *
 * @schema io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList
 */
class KubeMutatingWebhookConfigurationListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeMutatingWebhookConfigurationListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeMutatingWebhookConfigurationListV1Beta1.manifest(props));
    }
}
exports.KubeMutatingWebhookConfigurationListV1Beta1 = KubeMutatingWebhookConfigurationListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList"
 */
KubeMutatingWebhookConfigurationListV1Beta1.GVK = {
    apiVersion: 'admissionregistration.k8s.io/v1beta1',
    kind: 'MutatingWebhookConfigurationList',
};
/**
 * ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.
 *
 * @schema io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration
 */
class KubeValidatingWebhookConfigurationV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeValidatingWebhookConfigurationV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeValidatingWebhookConfigurationV1Beta1.manifest(props));
    }
}
exports.KubeValidatingWebhookConfigurationV1Beta1 = KubeValidatingWebhookConfigurationV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration"
 */
KubeValidatingWebhookConfigurationV1Beta1.GVK = {
    apiVersion: 'admissionregistration.k8s.io/v1beta1',
    kind: 'ValidatingWebhookConfiguration',
};
/**
 * ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.
 *
 * @schema io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList
 */
class KubeValidatingWebhookConfigurationListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeValidatingWebhookConfigurationListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeValidatingWebhookConfigurationListV1Beta1.manifest(props));
    }
}
exports.KubeValidatingWebhookConfigurationListV1Beta1 = KubeValidatingWebhookConfigurationListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList"
 */
KubeValidatingWebhookConfigurationListV1Beta1.GVK = {
    apiVersion: 'admissionregistration.k8s.io/v1beta1',
    kind: 'ValidatingWebhookConfigurationList',
};
/**
 * ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.
 *
 * @schema io.k8s.api.apps.v1.ControllerRevision
 */
class KubeControllerRevision extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.ControllerRevision".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeControllerRevision.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.ControllerRevision" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeControllerRevision.manifest(props));
    }
}
exports.KubeControllerRevision = KubeControllerRevision;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.ControllerRevision"
 */
KubeControllerRevision.GVK = {
    apiVersion: 'apps/v1',
    kind: 'ControllerRevision',
};
/**
 * ControllerRevisionList is a resource containing a list of ControllerRevision objects.
 *
 * @schema io.k8s.api.apps.v1.ControllerRevisionList
 */
class KubeControllerRevisionList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.ControllerRevisionList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeControllerRevisionList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.ControllerRevisionList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeControllerRevisionList.manifest(props));
    }
}
exports.KubeControllerRevisionList = KubeControllerRevisionList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.ControllerRevisionList"
 */
KubeControllerRevisionList.GVK = {
    apiVersion: 'apps/v1',
    kind: 'ControllerRevisionList',
};
/**
 * DaemonSet represents the configuration of a daemon set.
 *
 * @schema io.k8s.api.apps.v1.DaemonSet
 */
class KubeDaemonSet extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.DaemonSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeDaemonSet.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.DaemonSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeDaemonSet.manifest(props));
    }
}
exports.KubeDaemonSet = KubeDaemonSet;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.DaemonSet"
 */
KubeDaemonSet.GVK = {
    apiVersion: 'apps/v1',
    kind: 'DaemonSet',
};
/**
 * DaemonSetList is a collection of daemon sets.
 *
 * @schema io.k8s.api.apps.v1.DaemonSetList
 */
class KubeDaemonSetList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.DaemonSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeDaemonSetList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.DaemonSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeDaemonSetList.manifest(props));
    }
}
exports.KubeDaemonSetList = KubeDaemonSetList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.DaemonSetList"
 */
KubeDaemonSetList.GVK = {
    apiVersion: 'apps/v1',
    kind: 'DaemonSetList',
};
/**
 * Deployment enables declarative updates for Pods and ReplicaSets.
 *
 * @schema io.k8s.api.apps.v1.Deployment
 */
class KubeDeployment extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.Deployment".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeDeployment.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.Deployment" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeDeployment.manifest(props));
    }
}
exports.KubeDeployment = KubeDeployment;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.Deployment"
 */
KubeDeployment.GVK = {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
};
/**
 * DeploymentList is a list of Deployments.
 *
 * @schema io.k8s.api.apps.v1.DeploymentList
 */
class KubeDeploymentList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.DeploymentList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeDeploymentList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.DeploymentList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeDeploymentList.manifest(props));
    }
}
exports.KubeDeploymentList = KubeDeploymentList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.DeploymentList"
 */
KubeDeploymentList.GVK = {
    apiVersion: 'apps/v1',
    kind: 'DeploymentList',
};
/**
 * ReplicaSet ensures that a specified number of pod replicas are running at any given time.
 *
 * @schema io.k8s.api.apps.v1.ReplicaSet
 */
class KubeReplicaSet extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.ReplicaSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeReplicaSet.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.ReplicaSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeReplicaSet.manifest(props));
    }
}
exports.KubeReplicaSet = KubeReplicaSet;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.ReplicaSet"
 */
KubeReplicaSet.GVK = {
    apiVersion: 'apps/v1',
    kind: 'ReplicaSet',
};
/**
 * ReplicaSetList is a collection of ReplicaSets.
 *
 * @schema io.k8s.api.apps.v1.ReplicaSetList
 */
class KubeReplicaSetList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.ReplicaSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeReplicaSetList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.ReplicaSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeReplicaSetList.manifest(props));
    }
}
exports.KubeReplicaSetList = KubeReplicaSetList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.ReplicaSetList"
 */
KubeReplicaSetList.GVK = {
    apiVersion: 'apps/v1',
    kind: 'ReplicaSetList',
};
/**
 * StatefulSet represents a set of pods with consistent identities. Identities are defined as:
 - Network: A single stable DNS and hostname.
 - Storage: As many VolumeClaims as requested.
The StatefulSet guarantees that a given network identity will always map to the same storage identity.
 *
 * @schema io.k8s.api.apps.v1.StatefulSet
 */
class KubeStatefulSet extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.StatefulSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeStatefulSet.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.StatefulSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeStatefulSet.manifest(props));
    }
}
exports.KubeStatefulSet = KubeStatefulSet;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.StatefulSet"
 */
KubeStatefulSet.GVK = {
    apiVersion: 'apps/v1',
    kind: 'StatefulSet',
};
/**
 * StatefulSetList is a collection of StatefulSets.
 *
 * @schema io.k8s.api.apps.v1.StatefulSetList
 */
class KubeStatefulSetList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1.StatefulSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStatefulSetList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1.StatefulSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStatefulSetList.manifest(props));
    }
}
exports.KubeStatefulSetList = KubeStatefulSetList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1.StatefulSetList"
 */
KubeStatefulSetList.GVK = {
    apiVersion: 'apps/v1',
    kind: 'StatefulSetList',
};
/**
 * DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.
 *
 * @schema io.k8s.api.apps.v1beta1.ControllerRevision
 */
class KubeControllerRevisionV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta1.ControllerRevision".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeControllerRevisionV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta1.ControllerRevision" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeControllerRevisionV1Beta1.manifest(props));
    }
}
exports.KubeControllerRevisionV1Beta1 = KubeControllerRevisionV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta1.ControllerRevision"
 */
KubeControllerRevisionV1Beta1.GVK = {
    apiVersion: 'apps/v1beta1',
    kind: 'ControllerRevision',
};
/**
 * ControllerRevisionList is a resource containing a list of ControllerRevision objects.
 *
 * @schema io.k8s.api.apps.v1beta1.ControllerRevisionList
 */
class KubeControllerRevisionListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta1.ControllerRevisionList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeControllerRevisionListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta1.ControllerRevisionList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeControllerRevisionListV1Beta1.manifest(props));
    }
}
exports.KubeControllerRevisionListV1Beta1 = KubeControllerRevisionListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta1.ControllerRevisionList"
 */
KubeControllerRevisionListV1Beta1.GVK = {
    apiVersion: 'apps/v1beta1',
    kind: 'ControllerRevisionList',
};
/**
 * DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.
 *
 * @schema io.k8s.api.extensions.v1beta1.Deployment
 */
class KubeDeploymentV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.Deployment".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeDeploymentV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.Deployment" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeDeploymentV1Beta1.manifest(props));
    }
}
exports.KubeDeploymentV1Beta1 = KubeDeploymentV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.Deployment"
 */
KubeDeploymentV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'Deployment',
};
/**
 * DeploymentList is a list of Deployments.
 *
 * @schema io.k8s.api.extensions.v1beta1.DeploymentList
 */
class KubeDeploymentListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.DeploymentList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeDeploymentListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.DeploymentList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeDeploymentListV1Beta1.manifest(props));
    }
}
exports.KubeDeploymentListV1Beta1 = KubeDeploymentListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.DeploymentList"
 */
KubeDeploymentListV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'DeploymentList',
};
/**
 * represents a scaling request for a resource.
 *
 * @schema io.k8s.api.extensions.v1beta1.Scale
 */
class KubeScaleV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.Scale".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeScaleV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.Scale" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeScaleV1Beta1.manifest(props));
    }
}
exports.KubeScaleV1Beta1 = KubeScaleV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.Scale"
 */
KubeScaleV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'Scale',
};
/**
 * DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:
 - Network: A single stable DNS and hostname.
 - Storage: As many VolumeClaims as requested.
The StatefulSet guarantees that a given network identity will always map to the same storage identity.
 *
 * @schema io.k8s.api.apps.v1beta1.StatefulSet
 */
class KubeStatefulSetV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta1.StatefulSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeStatefulSetV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta1.StatefulSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeStatefulSetV1Beta1.manifest(props));
    }
}
exports.KubeStatefulSetV1Beta1 = KubeStatefulSetV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta1.StatefulSet"
 */
KubeStatefulSetV1Beta1.GVK = {
    apiVersion: 'apps/v1beta1',
    kind: 'StatefulSet',
};
/**
 * StatefulSetList is a collection of StatefulSets.
 *
 * @schema io.k8s.api.apps.v1beta1.StatefulSetList
 */
class KubeStatefulSetListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta1.StatefulSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStatefulSetListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta1.StatefulSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStatefulSetListV1Beta1.manifest(props));
    }
}
exports.KubeStatefulSetListV1Beta1 = KubeStatefulSetListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta1.StatefulSetList"
 */
KubeStatefulSetListV1Beta1.GVK = {
    apiVersion: 'apps/v1beta1',
    kind: 'StatefulSetList',
};
/**
 * DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.
 *
 * @schema io.k8s.api.apps.v1beta2.ControllerRevision
 */
class KubeControllerRevisionV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.ControllerRevision".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeControllerRevisionV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.ControllerRevision" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeControllerRevisionV1Beta2.manifest(props));
    }
}
exports.KubeControllerRevisionV1Beta2 = KubeControllerRevisionV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.ControllerRevision"
 */
KubeControllerRevisionV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'ControllerRevision',
};
/**
 * ControllerRevisionList is a resource containing a list of ControllerRevision objects.
 *
 * @schema io.k8s.api.apps.v1beta2.ControllerRevisionList
 */
class KubeControllerRevisionListV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.ControllerRevisionList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeControllerRevisionListV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.ControllerRevisionList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeControllerRevisionListV1Beta2.manifest(props));
    }
}
exports.KubeControllerRevisionListV1Beta2 = KubeControllerRevisionListV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.ControllerRevisionList"
 */
KubeControllerRevisionListV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'ControllerRevisionList',
};
/**
 * DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.
 *
 * @schema io.k8s.api.apps.v1beta2.DaemonSet
 */
class KubeDaemonSetV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.DaemonSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeDaemonSetV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.DaemonSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeDaemonSetV1Beta2.manifest(props));
    }
}
exports.KubeDaemonSetV1Beta2 = KubeDaemonSetV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.DaemonSet"
 */
KubeDaemonSetV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'DaemonSet',
};
/**
 * DaemonSetList is a collection of daemon sets.
 *
 * @schema io.k8s.api.apps.v1beta2.DaemonSetList
 */
class KubeDaemonSetListV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.DaemonSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeDaemonSetListV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.DaemonSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeDaemonSetListV1Beta2.manifest(props));
    }
}
exports.KubeDaemonSetListV1Beta2 = KubeDaemonSetListV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.DaemonSetList"
 */
KubeDaemonSetListV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'DaemonSetList',
};
/**
 * DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.
 *
 * @schema io.k8s.api.apps.v1beta2.Deployment
 */
class KubeDeploymentV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.Deployment".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeDeploymentV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.Deployment" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeDeploymentV1Beta2.manifest(props));
    }
}
exports.KubeDeploymentV1Beta2 = KubeDeploymentV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.Deployment"
 */
KubeDeploymentV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'Deployment',
};
/**
 * DeploymentList is a list of Deployments.
 *
 * @schema io.k8s.api.apps.v1beta2.DeploymentList
 */
class KubeDeploymentListV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.DeploymentList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeDeploymentListV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.DeploymentList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeDeploymentListV1Beta2.manifest(props));
    }
}
exports.KubeDeploymentListV1Beta2 = KubeDeploymentListV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.DeploymentList"
 */
KubeDeploymentListV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'DeploymentList',
};
/**
 * DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.
 *
 * @schema io.k8s.api.apps.v1beta2.ReplicaSet
 */
class KubeReplicaSetV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.ReplicaSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeReplicaSetV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.ReplicaSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeReplicaSetV1Beta2.manifest(props));
    }
}
exports.KubeReplicaSetV1Beta2 = KubeReplicaSetV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.ReplicaSet"
 */
KubeReplicaSetV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'ReplicaSet',
};
/**
 * ReplicaSetList is a collection of ReplicaSets.
 *
 * @schema io.k8s.api.apps.v1beta2.ReplicaSetList
 */
class KubeReplicaSetListV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.ReplicaSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeReplicaSetListV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.ReplicaSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeReplicaSetListV1Beta2.manifest(props));
    }
}
exports.KubeReplicaSetListV1Beta2 = KubeReplicaSetListV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.ReplicaSetList"
 */
KubeReplicaSetListV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'ReplicaSetList',
};
/**
 * Scale represents a scaling request for a resource.
 *
 * @schema io.k8s.api.apps.v1beta2.Scale
 */
class KubeScaleV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.Scale".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeScaleV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.Scale" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeScaleV1Beta2.manifest(props));
    }
}
exports.KubeScaleV1Beta2 = KubeScaleV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.Scale"
 */
KubeScaleV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'Scale',
};
/**
 * DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:
 - Network: A single stable DNS and hostname.
 - Storage: As many VolumeClaims as requested.
The StatefulSet guarantees that a given network identity will always map to the same storage identity.
 *
 * @schema io.k8s.api.apps.v1beta2.StatefulSet
 */
class KubeStatefulSetV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.StatefulSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeStatefulSetV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.StatefulSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeStatefulSetV1Beta2.manifest(props));
    }
}
exports.KubeStatefulSetV1Beta2 = KubeStatefulSetV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.StatefulSet"
 */
KubeStatefulSetV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'StatefulSet',
};
/**
 * StatefulSetList is a collection of StatefulSets.
 *
 * @schema io.k8s.api.apps.v1beta2.StatefulSetList
 */
class KubeStatefulSetListV1Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.apps.v1beta2.StatefulSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStatefulSetListV1Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.apps.v1beta2.StatefulSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStatefulSetListV1Beta2.manifest(props));
    }
}
exports.KubeStatefulSetListV1Beta2 = KubeStatefulSetListV1Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.apps.v1beta2.StatefulSetList"
 */
KubeStatefulSetListV1Beta2.GVK = {
    apiVersion: 'apps/v1beta2',
    kind: 'StatefulSetList',
};
/**
 * AuditSink represents a cluster level audit sink
 *
 * @schema io.k8s.api.auditregistration.v1alpha1.AuditSink
 */
class KubeAuditSinkV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.auditregistration.v1alpha1.AuditSink".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeAuditSinkV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.auditregistration.v1alpha1.AuditSink" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeAuditSinkV1Alpha1.manifest(props));
    }
}
exports.KubeAuditSinkV1Alpha1 = KubeAuditSinkV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.auditregistration.v1alpha1.AuditSink"
 */
KubeAuditSinkV1Alpha1.GVK = {
    apiVersion: 'auditregistration.k8s.io/v1alpha1',
    kind: 'AuditSink',
};
/**
 * AuditSinkList is a list of AuditSink items.
 *
 * @schema io.k8s.api.auditregistration.v1alpha1.AuditSinkList
 */
class KubeAuditSinkListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.auditregistration.v1alpha1.AuditSinkList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeAuditSinkListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.auditregistration.v1alpha1.AuditSinkList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeAuditSinkListV1Alpha1.manifest(props));
    }
}
exports.KubeAuditSinkListV1Alpha1 = KubeAuditSinkListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.auditregistration.v1alpha1.AuditSinkList"
 */
KubeAuditSinkListV1Alpha1.GVK = {
    apiVersion: 'auditregistration.k8s.io/v1alpha1',
    kind: 'AuditSinkList',
};
/**
 * TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.
 *
 * @schema io.k8s.api.authentication.v1.TokenReview
 */
class KubeTokenReview extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authentication.v1.TokenReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeTokenReview.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authentication.v1.TokenReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeTokenReview.manifest(props));
    }
}
exports.KubeTokenReview = KubeTokenReview;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authentication.v1.TokenReview"
 */
KubeTokenReview.GVK = {
    apiVersion: 'authentication.k8s.io/v1',
    kind: 'TokenReview',
};
/**
 * TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.
 *
 * @schema io.k8s.api.authentication.v1beta1.TokenReview
 */
class KubeTokenReviewV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authentication.v1beta1.TokenReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeTokenReviewV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authentication.v1beta1.TokenReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeTokenReviewV1Beta1.manifest(props));
    }
}
exports.KubeTokenReviewV1Beta1 = KubeTokenReviewV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authentication.v1beta1.TokenReview"
 */
KubeTokenReviewV1Beta1.GVK = {
    apiVersion: 'authentication.k8s.io/v1beta1',
    kind: 'TokenReview',
};
/**
 * LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.
 *
 * @schema io.k8s.api.authorization.v1.LocalSubjectAccessReview
 */
class KubeLocalSubjectAccessReview extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1.LocalSubjectAccessReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeLocalSubjectAccessReview.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1.LocalSubjectAccessReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeLocalSubjectAccessReview.manifest(props));
    }
}
exports.KubeLocalSubjectAccessReview = KubeLocalSubjectAccessReview;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1.LocalSubjectAccessReview"
 */
KubeLocalSubjectAccessReview.GVK = {
    apiVersion: 'authorization.k8s.io/v1',
    kind: 'LocalSubjectAccessReview',
};
/**
 * SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means "in all namespaces".  Self is a special case, because users should always be able to check whether they can perform an action
 *
 * @schema io.k8s.api.authorization.v1.SelfSubjectAccessReview
 */
class KubeSelfSubjectAccessReview extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1.SelfSubjectAccessReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSelfSubjectAccessReview.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1.SelfSubjectAccessReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSelfSubjectAccessReview.manifest(props));
    }
}
exports.KubeSelfSubjectAccessReview = KubeSelfSubjectAccessReview;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1.SelfSubjectAccessReview"
 */
KubeSelfSubjectAccessReview.GVK = {
    apiVersion: 'authorization.k8s.io/v1',
    kind: 'SelfSubjectAccessReview',
};
/**
 * SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.
 *
 * @schema io.k8s.api.authorization.v1.SelfSubjectRulesReview
 */
class KubeSelfSubjectRulesReview extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1.SelfSubjectRulesReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSelfSubjectRulesReview.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1.SelfSubjectRulesReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSelfSubjectRulesReview.manifest(props));
    }
}
exports.KubeSelfSubjectRulesReview = KubeSelfSubjectRulesReview;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1.SelfSubjectRulesReview"
 */
KubeSelfSubjectRulesReview.GVK = {
    apiVersion: 'authorization.k8s.io/v1',
    kind: 'SelfSubjectRulesReview',
};
/**
 * SubjectAccessReview checks whether or not a user or group can perform an action.
 *
 * @schema io.k8s.api.authorization.v1.SubjectAccessReview
 */
class KubeSubjectAccessReview extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1.SubjectAccessReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSubjectAccessReview.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1.SubjectAccessReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSubjectAccessReview.manifest(props));
    }
}
exports.KubeSubjectAccessReview = KubeSubjectAccessReview;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1.SubjectAccessReview"
 */
KubeSubjectAccessReview.GVK = {
    apiVersion: 'authorization.k8s.io/v1',
    kind: 'SubjectAccessReview',
};
/**
 * LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.
 *
 * @schema io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview
 */
class KubeLocalSubjectAccessReviewV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeLocalSubjectAccessReviewV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeLocalSubjectAccessReviewV1Beta1.manifest(props));
    }
}
exports.KubeLocalSubjectAccessReviewV1Beta1 = KubeLocalSubjectAccessReviewV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview"
 */
KubeLocalSubjectAccessReviewV1Beta1.GVK = {
    apiVersion: 'authorization.k8s.io/v1beta1',
    kind: 'LocalSubjectAccessReview',
};
/**
 * SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means "in all namespaces".  Self is a special case, because users should always be able to check whether they can perform an action
 *
 * @schema io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview
 */
class KubeSelfSubjectAccessReviewV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSelfSubjectAccessReviewV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSelfSubjectAccessReviewV1Beta1.manifest(props));
    }
}
exports.KubeSelfSubjectAccessReviewV1Beta1 = KubeSelfSubjectAccessReviewV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview"
 */
KubeSelfSubjectAccessReviewV1Beta1.GVK = {
    apiVersion: 'authorization.k8s.io/v1beta1',
    kind: 'SelfSubjectAccessReview',
};
/**
 * SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.
 *
 * @schema io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview
 */
class KubeSelfSubjectRulesReviewV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSelfSubjectRulesReviewV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSelfSubjectRulesReviewV1Beta1.manifest(props));
    }
}
exports.KubeSelfSubjectRulesReviewV1Beta1 = KubeSelfSubjectRulesReviewV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview"
 */
KubeSelfSubjectRulesReviewV1Beta1.GVK = {
    apiVersion: 'authorization.k8s.io/v1beta1',
    kind: 'SelfSubjectRulesReview',
};
/**
 * SubjectAccessReview checks whether or not a user or group can perform an action.
 *
 * @schema io.k8s.api.authorization.v1beta1.SubjectAccessReview
 */
class KubeSubjectAccessReviewV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.authorization.v1beta1.SubjectAccessReview".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSubjectAccessReviewV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.authorization.v1beta1.SubjectAccessReview" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSubjectAccessReviewV1Beta1.manifest(props));
    }
}
exports.KubeSubjectAccessReviewV1Beta1 = KubeSubjectAccessReviewV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.authorization.v1beta1.SubjectAccessReview"
 */
KubeSubjectAccessReviewV1Beta1.GVK = {
    apiVersion: 'authorization.k8s.io/v1beta1',
    kind: 'SubjectAccessReview',
};
/**
 * configuration of a horizontal pod autoscaler.
 *
 * @schema io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler
 */
class KubeHorizontalPodAutoscaler extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeHorizontalPodAutoscaler.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeHorizontalPodAutoscaler.manifest(props));
    }
}
exports.KubeHorizontalPodAutoscaler = KubeHorizontalPodAutoscaler;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler"
 */
KubeHorizontalPodAutoscaler.GVK = {
    apiVersion: 'autoscaling/v1',
    kind: 'HorizontalPodAutoscaler',
};
/**
 * list of horizontal pod autoscaler objects.
 *
 * @schema io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList
 */
class KubeHorizontalPodAutoscalerList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeHorizontalPodAutoscalerList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeHorizontalPodAutoscalerList.manifest(props));
    }
}
exports.KubeHorizontalPodAutoscalerList = KubeHorizontalPodAutoscalerList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList"
 */
KubeHorizontalPodAutoscalerList.GVK = {
    apiVersion: 'autoscaling/v1',
    kind: 'HorizontalPodAutoscalerList',
};
/**
 * Scale represents a scaling request for a resource.
 *
 * @schema io.k8s.api.autoscaling.v1.Scale
 */
class KubeScale extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v1.Scale".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeScale.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v1.Scale" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeScale.manifest(props));
    }
}
exports.KubeScale = KubeScale;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v1.Scale"
 */
KubeScale.GVK = {
    apiVersion: 'autoscaling/v1',
    kind: 'Scale',
};
/**
 * HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.
 *
 * @schema io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler
 */
class KubeHorizontalPodAutoscalerV2Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeHorizontalPodAutoscalerV2Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeHorizontalPodAutoscalerV2Beta1.manifest(props));
    }
}
exports.KubeHorizontalPodAutoscalerV2Beta1 = KubeHorizontalPodAutoscalerV2Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler"
 */
KubeHorizontalPodAutoscalerV2Beta1.GVK = {
    apiVersion: 'autoscaling/v2beta1',
    kind: 'HorizontalPodAutoscaler',
};
/**
 * HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.
 *
 * @schema io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList
 */
class KubeHorizontalPodAutoscalerListV2Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeHorizontalPodAutoscalerListV2Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeHorizontalPodAutoscalerListV2Beta1.manifest(props));
    }
}
exports.KubeHorizontalPodAutoscalerListV2Beta1 = KubeHorizontalPodAutoscalerListV2Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList"
 */
KubeHorizontalPodAutoscalerListV2Beta1.GVK = {
    apiVersion: 'autoscaling/v2beta1',
    kind: 'HorizontalPodAutoscalerList',
};
/**
 * HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.
 *
 * @schema io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler
 */
class KubeHorizontalPodAutoscalerV2Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeHorizontalPodAutoscalerV2Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeHorizontalPodAutoscalerV2Beta2.manifest(props));
    }
}
exports.KubeHorizontalPodAutoscalerV2Beta2 = KubeHorizontalPodAutoscalerV2Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscaler"
 */
KubeHorizontalPodAutoscalerV2Beta2.GVK = {
    apiVersion: 'autoscaling/v2beta2',
    kind: 'HorizontalPodAutoscaler',
};
/**
 * HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.
 *
 * @schema io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList
 */
class KubeHorizontalPodAutoscalerListV2Beta2 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeHorizontalPodAutoscalerListV2Beta2.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeHorizontalPodAutoscalerListV2Beta2.manifest(props));
    }
}
exports.KubeHorizontalPodAutoscalerListV2Beta2 = KubeHorizontalPodAutoscalerListV2Beta2;
/**
 * Returns the apiVersion and kind for "io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerList"
 */
KubeHorizontalPodAutoscalerListV2Beta2.GVK = {
    apiVersion: 'autoscaling/v2beta2',
    kind: 'HorizontalPodAutoscalerList',
};
/**
 * Job represents the configuration of a single job.
 *
 * @schema io.k8s.api.batch.v1.Job
 */
class KubeJob extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.batch.v1.Job".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeJob.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.batch.v1.Job" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeJob.manifest(props));
    }
}
exports.KubeJob = KubeJob;
/**
 * Returns the apiVersion and kind for "io.k8s.api.batch.v1.Job"
 */
KubeJob.GVK = {
    apiVersion: 'batch/v1',
    kind: 'Job',
};
/**
 * JobList is a collection of jobs.
 *
 * @schema io.k8s.api.batch.v1.JobList
 */
class KubeJobList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.batch.v1.JobList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeJobList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.batch.v1.JobList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeJobList.manifest(props));
    }
}
exports.KubeJobList = KubeJobList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.batch.v1.JobList"
 */
KubeJobList.GVK = {
    apiVersion: 'batch/v1',
    kind: 'JobList',
};
/**
 * CronJob represents the configuration of a single cron job.
 *
 * @schema io.k8s.api.batch.v1beta1.CronJob
 */
class KubeCronJobV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.batch.v1beta1.CronJob".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeCronJobV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.batch.v1beta1.CronJob" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeCronJobV1Beta1.manifest(props));
    }
}
exports.KubeCronJobV1Beta1 = KubeCronJobV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.batch.v1beta1.CronJob"
 */
KubeCronJobV1Beta1.GVK = {
    apiVersion: 'batch/v1beta1',
    kind: 'CronJob',
};
/**
 * CronJobList is a collection of cron jobs.
 *
 * @schema io.k8s.api.batch.v1beta1.CronJobList
 */
class KubeCronJobListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.batch.v1beta1.CronJobList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCronJobListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.batch.v1beta1.CronJobList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCronJobListV1Beta1.manifest(props));
    }
}
exports.KubeCronJobListV1Beta1 = KubeCronJobListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.batch.v1beta1.CronJobList"
 */
KubeCronJobListV1Beta1.GVK = {
    apiVersion: 'batch/v1beta1',
    kind: 'CronJobList',
};
/**
 * CronJob represents the configuration of a single cron job.
 *
 * @schema io.k8s.api.batch.v2alpha1.CronJob
 */
class KubeCronJobV2Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.batch.v2alpha1.CronJob".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeCronJobV2Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.batch.v2alpha1.CronJob" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeCronJobV2Alpha1.manifest(props));
    }
}
exports.KubeCronJobV2Alpha1 = KubeCronJobV2Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.batch.v2alpha1.CronJob"
 */
KubeCronJobV2Alpha1.GVK = {
    apiVersion: 'batch/v2alpha1',
    kind: 'CronJob',
};
/**
 * CronJobList is a collection of cron jobs.
 *
 * @schema io.k8s.api.batch.v2alpha1.CronJobList
 */
class KubeCronJobListV2Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.batch.v2alpha1.CronJobList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCronJobListV2Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.batch.v2alpha1.CronJobList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCronJobListV2Alpha1.manifest(props));
    }
}
exports.KubeCronJobListV2Alpha1 = KubeCronJobListV2Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.batch.v2alpha1.CronJobList"
 */
KubeCronJobListV2Alpha1.GVK = {
    apiVersion: 'batch/v2alpha1',
    kind: 'CronJobList',
};
/**
 * Describes a certificate signing request
 *
 * @schema io.k8s.api.certificates.v1beta1.CertificateSigningRequest
 */
class KubeCertificateSigningRequestV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.certificates.v1beta1.CertificateSigningRequest".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeCertificateSigningRequestV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.certificates.v1beta1.CertificateSigningRequest" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeCertificateSigningRequestV1Beta1.manifest(props));
    }
}
exports.KubeCertificateSigningRequestV1Beta1 = KubeCertificateSigningRequestV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.certificates.v1beta1.CertificateSigningRequest"
 */
KubeCertificateSigningRequestV1Beta1.GVK = {
    apiVersion: 'certificates.k8s.io/v1beta1',
    kind: 'CertificateSigningRequest',
};
/**
 *
 *
 * @schema io.k8s.api.certificates.v1beta1.CertificateSigningRequestList
 */
class KubeCertificateSigningRequestListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.certificates.v1beta1.CertificateSigningRequestList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCertificateSigningRequestListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.certificates.v1beta1.CertificateSigningRequestList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCertificateSigningRequestListV1Beta1.manifest(props));
    }
}
exports.KubeCertificateSigningRequestListV1Beta1 = KubeCertificateSigningRequestListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.certificates.v1beta1.CertificateSigningRequestList"
 */
KubeCertificateSigningRequestListV1Beta1.GVK = {
    apiVersion: 'certificates.k8s.io/v1beta1',
    kind: 'CertificateSigningRequestList',
};
/**
 * Lease defines a lease concept.
 *
 * @schema io.k8s.api.coordination.v1.Lease
 */
class KubeLease extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.coordination.v1.Lease".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeLease.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.coordination.v1.Lease" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeLease.manifest(props));
    }
}
exports.KubeLease = KubeLease;
/**
 * Returns the apiVersion and kind for "io.k8s.api.coordination.v1.Lease"
 */
KubeLease.GVK = {
    apiVersion: 'coordination.k8s.io/v1',
    kind: 'Lease',
};
/**
 * LeaseList is a list of Lease objects.
 *
 * @schema io.k8s.api.coordination.v1.LeaseList
 */
class KubeLeaseList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.coordination.v1.LeaseList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeLeaseList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.coordination.v1.LeaseList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeLeaseList.manifest(props));
    }
}
exports.KubeLeaseList = KubeLeaseList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.coordination.v1.LeaseList"
 */
KubeLeaseList.GVK = {
    apiVersion: 'coordination.k8s.io/v1',
    kind: 'LeaseList',
};
/**
 * Lease defines a lease concept.
 *
 * @schema io.k8s.api.coordination.v1beta1.Lease
 */
class KubeLeaseV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.coordination.v1beta1.Lease".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeLeaseV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.coordination.v1beta1.Lease" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeLeaseV1Beta1.manifest(props));
    }
}
exports.KubeLeaseV1Beta1 = KubeLeaseV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.coordination.v1beta1.Lease"
 */
KubeLeaseV1Beta1.GVK = {
    apiVersion: 'coordination.k8s.io/v1beta1',
    kind: 'Lease',
};
/**
 * LeaseList is a list of Lease objects.
 *
 * @schema io.k8s.api.coordination.v1beta1.LeaseList
 */
class KubeLeaseListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.coordination.v1beta1.LeaseList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeLeaseListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.coordination.v1beta1.LeaseList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeLeaseListV1Beta1.manifest(props));
    }
}
exports.KubeLeaseListV1Beta1 = KubeLeaseListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.coordination.v1beta1.LeaseList"
 */
KubeLeaseListV1Beta1.GVK = {
    apiVersion: 'coordination.k8s.io/v1beta1',
    kind: 'LeaseList',
};
/**
 * Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.
 *
 * @schema io.k8s.api.core.v1.Binding
 */
class KubeBinding extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Binding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeBinding.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Binding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeBinding.manifest(props));
    }
}
exports.KubeBinding = KubeBinding;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Binding"
 */
KubeBinding.GVK = {
    apiVersion: 'v1',
    kind: 'Binding',
};
/**
 * ComponentStatus (and ComponentStatusList) holds the cluster validation info.
 *
 * @schema io.k8s.api.core.v1.ComponentStatus
 */
class KubeComponentStatus extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ComponentStatus".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeComponentStatus.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ComponentStatus" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeComponentStatus.manifest(props));
    }
}
exports.KubeComponentStatus = KubeComponentStatus;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ComponentStatus"
 */
KubeComponentStatus.GVK = {
    apiVersion: 'v1',
    kind: 'ComponentStatus',
};
/**
 * Status of all the conditions for the component as a list of ComponentStatus objects.
 *
 * @schema io.k8s.api.core.v1.ComponentStatusList
 */
class KubeComponentStatusList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ComponentStatusList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeComponentStatusList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ComponentStatusList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeComponentStatusList.manifest(props));
    }
}
exports.KubeComponentStatusList = KubeComponentStatusList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ComponentStatusList"
 */
KubeComponentStatusList.GVK = {
    apiVersion: 'v1',
    kind: 'ComponentStatusList',
};
/**
 * ConfigMap holds configuration data for pods to consume.
 *
 * @schema io.k8s.api.core.v1.ConfigMap
 */
class KubeConfigMap extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ConfigMap".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeConfigMap.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ConfigMap" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeConfigMap.manifest(props));
    }
}
exports.KubeConfigMap = KubeConfigMap;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ConfigMap"
 */
KubeConfigMap.GVK = {
    apiVersion: 'v1',
    kind: 'ConfigMap',
};
/**
 * ConfigMapList is a resource containing a list of ConfigMap objects.
 *
 * @schema io.k8s.api.core.v1.ConfigMapList
 */
class KubeConfigMapList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ConfigMapList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeConfigMapList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ConfigMapList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeConfigMapList.manifest(props));
    }
}
exports.KubeConfigMapList = KubeConfigMapList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ConfigMapList"
 */
KubeConfigMapList.GVK = {
    apiVersion: 'v1',
    kind: 'ConfigMapList',
};
/**
 * Endpoints is a collection of endpoints that implement the actual service. Example:
  Name: "mysvc",
  Subsets: [
    {
      Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
      Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
    },
    {
      Addresses: [{"ip": "10.10.3.3"}],
      Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
    },
 ]
 *
 * @schema io.k8s.api.core.v1.Endpoints
 */
class KubeEndpoints extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Endpoints".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeEndpoints.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Endpoints" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeEndpoints.manifest(props));
    }
}
exports.KubeEndpoints = KubeEndpoints;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Endpoints"
 */
KubeEndpoints.GVK = {
    apiVersion: 'v1',
    kind: 'Endpoints',
};
/**
 * EndpointsList is a list of endpoints.
 *
 * @schema io.k8s.api.core.v1.EndpointsList
 */
class KubeEndpointsList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.EndpointsList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeEndpointsList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.EndpointsList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeEndpointsList.manifest(props));
    }
}
exports.KubeEndpointsList = KubeEndpointsList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.EndpointsList"
 */
KubeEndpointsList.GVK = {
    apiVersion: 'v1',
    kind: 'EndpointsList',
};
/**
 * Event is a report of an event somewhere in the cluster.
 *
 * @schema io.k8s.api.core.v1.Event
 */
class KubeEvent extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Event".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeEvent.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Event" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeEvent.manifest(props));
    }
}
exports.KubeEvent = KubeEvent;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Event"
 */
KubeEvent.GVK = {
    apiVersion: 'v1',
    kind: 'Event',
};
/**
 * EventList is a list of events.
 *
 * @schema io.k8s.api.core.v1.EventList
 */
class KubeEventList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.EventList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeEventList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.EventList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeEventList.manifest(props));
    }
}
exports.KubeEventList = KubeEventList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.EventList"
 */
KubeEventList.GVK = {
    apiVersion: 'v1',
    kind: 'EventList',
};
/**
 * LimitRange sets resource usage limits for each kind of resource in a Namespace.
 *
 * @schema io.k8s.api.core.v1.LimitRange
 */
class KubeLimitRange extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.LimitRange".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeLimitRange.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.LimitRange" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeLimitRange.manifest(props));
    }
}
exports.KubeLimitRange = KubeLimitRange;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.LimitRange"
 */
KubeLimitRange.GVK = {
    apiVersion: 'v1',
    kind: 'LimitRange',
};
/**
 * LimitRangeList is a list of LimitRange items.
 *
 * @schema io.k8s.api.core.v1.LimitRangeList
 */
class KubeLimitRangeList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.LimitRangeList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeLimitRangeList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.LimitRangeList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeLimitRangeList.manifest(props));
    }
}
exports.KubeLimitRangeList = KubeLimitRangeList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.LimitRangeList"
 */
KubeLimitRangeList.GVK = {
    apiVersion: 'v1',
    kind: 'LimitRangeList',
};
/**
 * Namespace provides a scope for Names. Use of multiple namespaces is optional.
 *
 * @schema io.k8s.api.core.v1.Namespace
 */
class KubeNamespace extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Namespace".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeNamespace.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Namespace" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeNamespace.manifest(props));
    }
}
exports.KubeNamespace = KubeNamespace;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Namespace"
 */
KubeNamespace.GVK = {
    apiVersion: 'v1',
    kind: 'Namespace',
};
/**
 * NamespaceList is a list of Namespaces.
 *
 * @schema io.k8s.api.core.v1.NamespaceList
 */
class KubeNamespaceList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.NamespaceList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeNamespaceList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.NamespaceList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeNamespaceList.manifest(props));
    }
}
exports.KubeNamespaceList = KubeNamespaceList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.NamespaceList"
 */
KubeNamespaceList.GVK = {
    apiVersion: 'v1',
    kind: 'NamespaceList',
};
/**
 * Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).
 *
 * @schema io.k8s.api.core.v1.Node
 */
class KubeNode extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Node".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeNode.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Node" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeNode.manifest(props));
    }
}
exports.KubeNode = KubeNode;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Node"
 */
KubeNode.GVK = {
    apiVersion: 'v1',
    kind: 'Node',
};
/**
 * NodeList is the whole list of all Nodes which have been registered with master.
 *
 * @schema io.k8s.api.core.v1.NodeList
 */
class KubeNodeList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.NodeList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeNodeList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.NodeList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeNodeList.manifest(props));
    }
}
exports.KubeNodeList = KubeNodeList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.NodeList"
 */
KubeNodeList.GVK = {
    apiVersion: 'v1',
    kind: 'NodeList',
};
/**
 * PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
 *
 * @schema io.k8s.api.core.v1.PersistentVolume
 */
class KubePersistentVolume extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PersistentVolume".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePersistentVolume.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PersistentVolume" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePersistentVolume.manifest(props));
    }
}
exports.KubePersistentVolume = KubePersistentVolume;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PersistentVolume"
 */
KubePersistentVolume.GVK = {
    apiVersion: 'v1',
    kind: 'PersistentVolume',
};
/**
 * PersistentVolumeClaim is a user's request for and claim to a persistent volume
 *
 * @schema io.k8s.api.core.v1.PersistentVolumeClaim
 */
class KubePersistentVolumeClaim extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PersistentVolumeClaim".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePersistentVolumeClaim.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PersistentVolumeClaim" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePersistentVolumeClaim.manifest(props));
    }
}
exports.KubePersistentVolumeClaim = KubePersistentVolumeClaim;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PersistentVolumeClaim"
 */
KubePersistentVolumeClaim.GVK = {
    apiVersion: 'v1',
    kind: 'PersistentVolumeClaim',
};
/**
 * PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
 *
 * @schema io.k8s.api.core.v1.PersistentVolumeClaimList
 */
class KubePersistentVolumeClaimList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PersistentVolumeClaimList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePersistentVolumeClaimList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PersistentVolumeClaimList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePersistentVolumeClaimList.manifest(props));
    }
}
exports.KubePersistentVolumeClaimList = KubePersistentVolumeClaimList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PersistentVolumeClaimList"
 */
KubePersistentVolumeClaimList.GVK = {
    apiVersion: 'v1',
    kind: 'PersistentVolumeClaimList',
};
/**
 * PersistentVolumeList is a list of PersistentVolume items.
 *
 * @schema io.k8s.api.core.v1.PersistentVolumeList
 */
class KubePersistentVolumeList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PersistentVolumeList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePersistentVolumeList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PersistentVolumeList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePersistentVolumeList.manifest(props));
    }
}
exports.KubePersistentVolumeList = KubePersistentVolumeList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PersistentVolumeList"
 */
KubePersistentVolumeList.GVK = {
    apiVersion: 'v1',
    kind: 'PersistentVolumeList',
};
/**
 * Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.
 *
 * @schema io.k8s.api.core.v1.Pod
 */
class KubePod extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Pod".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePod.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Pod" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePod.manifest(props));
    }
}
exports.KubePod = KubePod;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Pod"
 */
KubePod.GVK = {
    apiVersion: 'v1',
    kind: 'Pod',
};
/**
 * PodList is a list of Pods.
 *
 * @schema io.k8s.api.core.v1.PodList
 */
class KubePodList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PodList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePodList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PodList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePodList.manifest(props));
    }
}
exports.KubePodList = KubePodList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PodList"
 */
KubePodList.GVK = {
    apiVersion: 'v1',
    kind: 'PodList',
};
/**
 * PodTemplate describes a template for creating copies of a predefined pod.
 *
 * @schema io.k8s.api.core.v1.PodTemplate
 */
class KubePodTemplate extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PodTemplate".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePodTemplate.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PodTemplate" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePodTemplate.manifest(props));
    }
}
exports.KubePodTemplate = KubePodTemplate;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PodTemplate"
 */
KubePodTemplate.GVK = {
    apiVersion: 'v1',
    kind: 'PodTemplate',
};
/**
 * PodTemplateList is a list of PodTemplates.
 *
 * @schema io.k8s.api.core.v1.PodTemplateList
 */
class KubePodTemplateList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.PodTemplateList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePodTemplateList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.PodTemplateList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePodTemplateList.manifest(props));
    }
}
exports.KubePodTemplateList = KubePodTemplateList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.PodTemplateList"
 */
KubePodTemplateList.GVK = {
    apiVersion: 'v1',
    kind: 'PodTemplateList',
};
/**
 * ReplicationController represents the configuration of a replication controller.
 *
 * @schema io.k8s.api.core.v1.ReplicationController
 */
class KubeReplicationController extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ReplicationController".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeReplicationController.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ReplicationController" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeReplicationController.manifest(props));
    }
}
exports.KubeReplicationController = KubeReplicationController;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ReplicationController"
 */
KubeReplicationController.GVK = {
    apiVersion: 'v1',
    kind: 'ReplicationController',
};
/**
 * ReplicationControllerList is a collection of replication controllers.
 *
 * @schema io.k8s.api.core.v1.ReplicationControllerList
 */
class KubeReplicationControllerList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ReplicationControllerList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeReplicationControllerList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ReplicationControllerList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeReplicationControllerList.manifest(props));
    }
}
exports.KubeReplicationControllerList = KubeReplicationControllerList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ReplicationControllerList"
 */
KubeReplicationControllerList.GVK = {
    apiVersion: 'v1',
    kind: 'ReplicationControllerList',
};
/**
 * ResourceQuota sets aggregate quota restrictions enforced per namespace
 *
 * @schema io.k8s.api.core.v1.ResourceQuota
 */
class KubeResourceQuota extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ResourceQuota".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeResourceQuota.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ResourceQuota" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeResourceQuota.manifest(props));
    }
}
exports.KubeResourceQuota = KubeResourceQuota;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ResourceQuota"
 */
KubeResourceQuota.GVK = {
    apiVersion: 'v1',
    kind: 'ResourceQuota',
};
/**
 * ResourceQuotaList is a list of ResourceQuota items.
 *
 * @schema io.k8s.api.core.v1.ResourceQuotaList
 */
class KubeResourceQuotaList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ResourceQuotaList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeResourceQuotaList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ResourceQuotaList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeResourceQuotaList.manifest(props));
    }
}
exports.KubeResourceQuotaList = KubeResourceQuotaList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ResourceQuotaList"
 */
KubeResourceQuotaList.GVK = {
    apiVersion: 'v1',
    kind: 'ResourceQuotaList',
};
/**
 * Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.
 *
 * @schema io.k8s.api.core.v1.Secret
 */
class KubeSecret extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Secret".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeSecret.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Secret" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeSecret.manifest(props));
    }
}
exports.KubeSecret = KubeSecret;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Secret"
 */
KubeSecret.GVK = {
    apiVersion: 'v1',
    kind: 'Secret',
};
/**
 * SecretList is a list of Secret.
 *
 * @schema io.k8s.api.core.v1.SecretList
 */
class KubeSecretList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.SecretList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeSecretList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.SecretList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeSecretList.manifest(props));
    }
}
exports.KubeSecretList = KubeSecretList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.SecretList"
 */
KubeSecretList.GVK = {
    apiVersion: 'v1',
    kind: 'SecretList',
};
/**
 * Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.
 *
 * @schema io.k8s.api.core.v1.Service
 */
class KubeService extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.Service".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeService.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.Service" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeService.manifest(props));
    }
}
exports.KubeService = KubeService;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.Service"
 */
KubeService.GVK = {
    apiVersion: 'v1',
    kind: 'Service',
};
/**
 * ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets
 *
 * @schema io.k8s.api.core.v1.ServiceAccount
 */
class KubeServiceAccount extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ServiceAccount".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeServiceAccount.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ServiceAccount" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeServiceAccount.manifest(props));
    }
}
exports.KubeServiceAccount = KubeServiceAccount;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ServiceAccount"
 */
KubeServiceAccount.GVK = {
    apiVersion: 'v1',
    kind: 'ServiceAccount',
};
/**
 * ServiceAccountList is a list of ServiceAccount objects
 *
 * @schema io.k8s.api.core.v1.ServiceAccountList
 */
class KubeServiceAccountList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ServiceAccountList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeServiceAccountList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ServiceAccountList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeServiceAccountList.manifest(props));
    }
}
exports.KubeServiceAccountList = KubeServiceAccountList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ServiceAccountList"
 */
KubeServiceAccountList.GVK = {
    apiVersion: 'v1',
    kind: 'ServiceAccountList',
};
/**
 * ServiceList holds a list of services.
 *
 * @schema io.k8s.api.core.v1.ServiceList
 */
class KubeServiceList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.core.v1.ServiceList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeServiceList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.core.v1.ServiceList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeServiceList.manifest(props));
    }
}
exports.KubeServiceList = KubeServiceList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.core.v1.ServiceList"
 */
KubeServiceList.GVK = {
    apiVersion: 'v1',
    kind: 'ServiceList',
};
/**
 * Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system.
 *
 * @schema io.k8s.api.events.v1beta1.Event
 */
class KubeEventV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.events.v1beta1.Event".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeEventV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.events.v1beta1.Event" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeEventV1Beta1.manifest(props));
    }
}
exports.KubeEventV1Beta1 = KubeEventV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.events.v1beta1.Event"
 */
KubeEventV1Beta1.GVK = {
    apiVersion: 'events.k8s.io/v1beta1',
    kind: 'Event',
};
/**
 * EventList is a list of Event objects.
 *
 * @schema io.k8s.api.events.v1beta1.EventList
 */
class KubeEventListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.events.v1beta1.EventList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeEventListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.events.v1beta1.EventList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeEventListV1Beta1.manifest(props));
    }
}
exports.KubeEventListV1Beta1 = KubeEventListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.events.v1beta1.EventList"
 */
KubeEventListV1Beta1.GVK = {
    apiVersion: 'events.k8s.io/v1beta1',
    kind: 'EventList',
};
/**
 * DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.
 *
 * @schema io.k8s.api.extensions.v1beta1.DaemonSet
 */
class KubeDaemonSetV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.DaemonSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeDaemonSetV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.DaemonSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeDaemonSetV1Beta1.manifest(props));
    }
}
exports.KubeDaemonSetV1Beta1 = KubeDaemonSetV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.DaemonSet"
 */
KubeDaemonSetV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'DaemonSet',
};
/**
 * DaemonSetList is a collection of daemon sets.
 *
 * @schema io.k8s.api.extensions.v1beta1.DaemonSetList
 */
class KubeDaemonSetListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.DaemonSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeDaemonSetListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.DaemonSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeDaemonSetListV1Beta1.manifest(props));
    }
}
exports.KubeDaemonSetListV1Beta1 = KubeDaemonSetListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.DaemonSetList"
 */
KubeDaemonSetListV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'DaemonSetList',
};
/**
 * Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.
 *
 * @schema io.k8s.api.networking.v1beta1.Ingress
 */
class KubeIngressV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.networking.v1beta1.Ingress".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeIngressV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.networking.v1beta1.Ingress" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeIngressV1Beta1.manifest(props));
    }
}
exports.KubeIngressV1Beta1 = KubeIngressV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.networking.v1beta1.Ingress"
 */
KubeIngressV1Beta1.GVK = {
    apiVersion: 'networking.k8s.io/v1beta1',
    kind: 'Ingress',
};
/**
 * IngressList is a collection of Ingress.
 *
 * @schema io.k8s.api.networking.v1beta1.IngressList
 */
class KubeIngressListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.networking.v1beta1.IngressList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeIngressListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.networking.v1beta1.IngressList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeIngressListV1Beta1.manifest(props));
    }
}
exports.KubeIngressListV1Beta1 = KubeIngressListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.networking.v1beta1.IngressList"
 */
KubeIngressListV1Beta1.GVK = {
    apiVersion: 'networking.k8s.io/v1beta1',
    kind: 'IngressList',
};
/**
 * DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods
 *
 * @schema io.k8s.api.extensions.v1beta1.NetworkPolicy
 */
class KubeNetworkPolicyV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.NetworkPolicy".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeNetworkPolicyV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.NetworkPolicy" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeNetworkPolicyV1Beta1.manifest(props));
    }
}
exports.KubeNetworkPolicyV1Beta1 = KubeNetworkPolicyV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.NetworkPolicy"
 */
KubeNetworkPolicyV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'NetworkPolicy',
};
/**
 * DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.
 *
 * @schema io.k8s.api.extensions.v1beta1.NetworkPolicyList
 */
class KubeNetworkPolicyListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.NetworkPolicyList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeNetworkPolicyListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.NetworkPolicyList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeNetworkPolicyListV1Beta1.manifest(props));
    }
}
exports.KubeNetworkPolicyListV1Beta1 = KubeNetworkPolicyListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.NetworkPolicyList"
 */
KubeNetworkPolicyListV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'NetworkPolicyList',
};
/**
 * PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.
 *
 * @schema io.k8s.api.policy.v1beta1.PodSecurityPolicy
 */
class KubePodSecurityPolicyV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.policy.v1beta1.PodSecurityPolicy".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePodSecurityPolicyV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.policy.v1beta1.PodSecurityPolicy" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePodSecurityPolicyV1Beta1.manifest(props));
    }
}
exports.KubePodSecurityPolicyV1Beta1 = KubePodSecurityPolicyV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.policy.v1beta1.PodSecurityPolicy"
 */
KubePodSecurityPolicyV1Beta1.GVK = {
    apiVersion: 'policy/v1beta1',
    kind: 'PodSecurityPolicy',
};
/**
 * PodSecurityPolicyList is a list of PodSecurityPolicy objects.
 *
 * @schema io.k8s.api.policy.v1beta1.PodSecurityPolicyList
 */
class KubePodSecurityPolicyListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.policy.v1beta1.PodSecurityPolicyList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePodSecurityPolicyListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.policy.v1beta1.PodSecurityPolicyList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePodSecurityPolicyListV1Beta1.manifest(props));
    }
}
exports.KubePodSecurityPolicyListV1Beta1 = KubePodSecurityPolicyListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.policy.v1beta1.PodSecurityPolicyList"
 */
KubePodSecurityPolicyListV1Beta1.GVK = {
    apiVersion: 'policy/v1beta1',
    kind: 'PodSecurityPolicyList',
};
/**
 * DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.
 *
 * @schema io.k8s.api.extensions.v1beta1.ReplicaSet
 */
class KubeReplicaSetV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.ReplicaSet".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeReplicaSetV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.ReplicaSet" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeReplicaSetV1Beta1.manifest(props));
    }
}
exports.KubeReplicaSetV1Beta1 = KubeReplicaSetV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.ReplicaSet"
 */
KubeReplicaSetV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'ReplicaSet',
};
/**
 * ReplicaSetList is a collection of ReplicaSets.
 *
 * @schema io.k8s.api.extensions.v1beta1.ReplicaSetList
 */
class KubeReplicaSetListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.extensions.v1beta1.ReplicaSetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeReplicaSetListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.extensions.v1beta1.ReplicaSetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeReplicaSetListV1Beta1.manifest(props));
    }
}
exports.KubeReplicaSetListV1Beta1 = KubeReplicaSetListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.extensions.v1beta1.ReplicaSetList"
 */
KubeReplicaSetListV1Beta1.GVK = {
    apiVersion: 'extensions/v1beta1',
    kind: 'ReplicaSetList',
};
/**
 * NetworkPolicy describes what network traffic is allowed for a set of Pods
 *
 * @schema io.k8s.api.networking.v1.NetworkPolicy
 */
class KubeNetworkPolicy extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.networking.v1.NetworkPolicy".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeNetworkPolicy.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.networking.v1.NetworkPolicy" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeNetworkPolicy.manifest(props));
    }
}
exports.KubeNetworkPolicy = KubeNetworkPolicy;
/**
 * Returns the apiVersion and kind for "io.k8s.api.networking.v1.NetworkPolicy"
 */
KubeNetworkPolicy.GVK = {
    apiVersion: 'networking.k8s.io/v1',
    kind: 'NetworkPolicy',
};
/**
 * NetworkPolicyList is a list of NetworkPolicy objects.
 *
 * @schema io.k8s.api.networking.v1.NetworkPolicyList
 */
class KubeNetworkPolicyList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.networking.v1.NetworkPolicyList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeNetworkPolicyList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.networking.v1.NetworkPolicyList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeNetworkPolicyList.manifest(props));
    }
}
exports.KubeNetworkPolicyList = KubeNetworkPolicyList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.networking.v1.NetworkPolicyList"
 */
KubeNetworkPolicyList.GVK = {
    apiVersion: 'networking.k8s.io/v1',
    kind: 'NetworkPolicyList',
};
/**
 * RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod.  For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md
 *
 * @schema io.k8s.api.node.v1alpha1.RuntimeClass
 */
class KubeRuntimeClassV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.node.v1alpha1.RuntimeClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRuntimeClassV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.node.v1alpha1.RuntimeClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRuntimeClassV1Alpha1.manifest(props));
    }
}
exports.KubeRuntimeClassV1Alpha1 = KubeRuntimeClassV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.node.v1alpha1.RuntimeClass"
 */
KubeRuntimeClassV1Alpha1.GVK = {
    apiVersion: 'node.k8s.io/v1alpha1',
    kind: 'RuntimeClass',
};
/**
 * RuntimeClassList is a list of RuntimeClass objects.
 *
 * @schema io.k8s.api.node.v1alpha1.RuntimeClassList
 */
class KubeRuntimeClassListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.node.v1alpha1.RuntimeClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRuntimeClassListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.node.v1alpha1.RuntimeClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRuntimeClassListV1Alpha1.manifest(props));
    }
}
exports.KubeRuntimeClassListV1Alpha1 = KubeRuntimeClassListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.node.v1alpha1.RuntimeClassList"
 */
KubeRuntimeClassListV1Alpha1.GVK = {
    apiVersion: 'node.k8s.io/v1alpha1',
    kind: 'RuntimeClassList',
};
/**
 * RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod.  For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md
 *
 * @schema io.k8s.api.node.v1beta1.RuntimeClass
 */
class KubeRuntimeClassV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.node.v1beta1.RuntimeClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRuntimeClassV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.node.v1beta1.RuntimeClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRuntimeClassV1Beta1.manifest(props));
    }
}
exports.KubeRuntimeClassV1Beta1 = KubeRuntimeClassV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.node.v1beta1.RuntimeClass"
 */
KubeRuntimeClassV1Beta1.GVK = {
    apiVersion: 'node.k8s.io/v1beta1',
    kind: 'RuntimeClass',
};
/**
 * RuntimeClassList is a list of RuntimeClass objects.
 *
 * @schema io.k8s.api.node.v1beta1.RuntimeClassList
 */
class KubeRuntimeClassListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.node.v1beta1.RuntimeClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRuntimeClassListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.node.v1beta1.RuntimeClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRuntimeClassListV1Beta1.manifest(props));
    }
}
exports.KubeRuntimeClassListV1Beta1 = KubeRuntimeClassListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.node.v1beta1.RuntimeClassList"
 */
KubeRuntimeClassListV1Beta1.GVK = {
    apiVersion: 'node.k8s.io/v1beta1',
    kind: 'RuntimeClassList',
};
/**
 * Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod.  A request to cause such an eviction is created by POSTing to .../pods/<pod name>/evictions.
 *
 * @schema io.k8s.api.policy.v1beta1.Eviction
 */
class KubeEvictionV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.policy.v1beta1.Eviction".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeEvictionV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.policy.v1beta1.Eviction" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeEvictionV1Beta1.manifest(props));
    }
}
exports.KubeEvictionV1Beta1 = KubeEvictionV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.policy.v1beta1.Eviction"
 */
KubeEvictionV1Beta1.GVK = {
    apiVersion: 'policy/v1beta1',
    kind: 'Eviction',
};
/**
 * PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods
 *
 * @schema io.k8s.api.policy.v1beta1.PodDisruptionBudget
 */
class KubePodDisruptionBudgetV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.policy.v1beta1.PodDisruptionBudget".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePodDisruptionBudgetV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.policy.v1beta1.PodDisruptionBudget" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePodDisruptionBudgetV1Beta1.manifest(props));
    }
}
exports.KubePodDisruptionBudgetV1Beta1 = KubePodDisruptionBudgetV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.policy.v1beta1.PodDisruptionBudget"
 */
KubePodDisruptionBudgetV1Beta1.GVK = {
    apiVersion: 'policy/v1beta1',
    kind: 'PodDisruptionBudget',
};
/**
 * PodDisruptionBudgetList is a collection of PodDisruptionBudgets.
 *
 * @schema io.k8s.api.policy.v1beta1.PodDisruptionBudgetList
 */
class KubePodDisruptionBudgetListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.policy.v1beta1.PodDisruptionBudgetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePodDisruptionBudgetListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.policy.v1beta1.PodDisruptionBudgetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePodDisruptionBudgetListV1Beta1.manifest(props));
    }
}
exports.KubePodDisruptionBudgetListV1Beta1 = KubePodDisruptionBudgetListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.policy.v1beta1.PodDisruptionBudgetList"
 */
KubePodDisruptionBudgetListV1Beta1.GVK = {
    apiVersion: 'policy/v1beta1',
    kind: 'PodDisruptionBudgetList',
};
/**
 * ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.
 *
 * @schema io.k8s.api.rbac.v1.ClusterRole
 */
class KubeClusterRole extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.ClusterRole".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeClusterRole.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.ClusterRole" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeClusterRole.manifest(props));
    }
}
exports.KubeClusterRole = KubeClusterRole;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.ClusterRole"
 */
KubeClusterRole.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'ClusterRole',
};
/**
 * ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.
 *
 * @schema io.k8s.api.rbac.v1.ClusterRoleBinding
 */
class KubeClusterRoleBinding extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.ClusterRoleBinding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleBinding.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.ClusterRoleBinding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleBinding.manifest(props));
    }
}
exports.KubeClusterRoleBinding = KubeClusterRoleBinding;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.ClusterRoleBinding"
 */
KubeClusterRoleBinding.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'ClusterRoleBinding',
};
/**
 * ClusterRoleBindingList is a collection of ClusterRoleBindings
 *
 * @schema io.k8s.api.rbac.v1.ClusterRoleBindingList
 */
class KubeClusterRoleBindingList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.ClusterRoleBindingList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleBindingList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.ClusterRoleBindingList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleBindingList.manifest(props));
    }
}
exports.KubeClusterRoleBindingList = KubeClusterRoleBindingList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.ClusterRoleBindingList"
 */
KubeClusterRoleBindingList.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'ClusterRoleBindingList',
};
/**
 * ClusterRoleList is a collection of ClusterRoles
 *
 * @schema io.k8s.api.rbac.v1.ClusterRoleList
 */
class KubeClusterRoleList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.ClusterRoleList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.ClusterRoleList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleList.manifest(props));
    }
}
exports.KubeClusterRoleList = KubeClusterRoleList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.ClusterRoleList"
 */
KubeClusterRoleList.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'ClusterRoleList',
};
/**
 * Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.
 *
 * @schema io.k8s.api.rbac.v1.Role
 */
class KubeRole extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.Role".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeRole.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.Role" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeRole.manifest(props));
    }
}
exports.KubeRole = KubeRole;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.Role"
 */
KubeRole.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'Role',
};
/**
 * RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.
 *
 * @schema io.k8s.api.rbac.v1.RoleBinding
 */
class KubeRoleBinding extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.RoleBinding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleBinding.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.RoleBinding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleBinding.manifest(props));
    }
}
exports.KubeRoleBinding = KubeRoleBinding;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.RoleBinding"
 */
KubeRoleBinding.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'RoleBinding',
};
/**
 * RoleBindingList is a collection of RoleBindings
 *
 * @schema io.k8s.api.rbac.v1.RoleBindingList
 */
class KubeRoleBindingList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.RoleBindingList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleBindingList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.RoleBindingList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleBindingList.manifest(props));
    }
}
exports.KubeRoleBindingList = KubeRoleBindingList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.RoleBindingList"
 */
KubeRoleBindingList.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'RoleBindingList',
};
/**
 * RoleList is a collection of Roles
 *
 * @schema io.k8s.api.rbac.v1.RoleList
 */
class KubeRoleList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1.RoleList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1.RoleList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleList.manifest(props));
    }
}
exports.KubeRoleList = KubeRoleList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1.RoleList"
 */
KubeRoleList.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'RoleList',
};
/**
 * ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.
 *
 * @schema io.k8s.api.rbac.v1alpha1.ClusterRole
 */
class KubeClusterRoleV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.ClusterRole".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeClusterRoleV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.ClusterRole" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeClusterRoleV1Alpha1.manifest(props));
    }
}
exports.KubeClusterRoleV1Alpha1 = KubeClusterRoleV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.ClusterRole"
 */
KubeClusterRoleV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'ClusterRole',
};
/**
 * ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.
 *
 * @schema io.k8s.api.rbac.v1alpha1.ClusterRoleBinding
 */
class KubeClusterRoleBindingV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.ClusterRoleBinding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleBindingV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.ClusterRoleBinding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleBindingV1Alpha1.manifest(props));
    }
}
exports.KubeClusterRoleBindingV1Alpha1 = KubeClusterRoleBindingV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.ClusterRoleBinding"
 */
KubeClusterRoleBindingV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'ClusterRoleBinding',
};
/**
 * ClusterRoleBindingList is a collection of ClusterRoleBindings
 *
 * @schema io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList
 */
class KubeClusterRoleBindingListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleBindingListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleBindingListV1Alpha1.manifest(props));
    }
}
exports.KubeClusterRoleBindingListV1Alpha1 = KubeClusterRoleBindingListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList"
 */
KubeClusterRoleBindingListV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'ClusterRoleBindingList',
};
/**
 * ClusterRoleList is a collection of ClusterRoles
 *
 * @schema io.k8s.api.rbac.v1alpha1.ClusterRoleList
 */
class KubeClusterRoleListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.ClusterRoleList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.ClusterRoleList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleListV1Alpha1.manifest(props));
    }
}
exports.KubeClusterRoleListV1Alpha1 = KubeClusterRoleListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.ClusterRoleList"
 */
KubeClusterRoleListV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'ClusterRoleList',
};
/**
 * Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.
 *
 * @schema io.k8s.api.rbac.v1alpha1.Role
 */
class KubeRoleV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.Role".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeRoleV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.Role" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeRoleV1Alpha1.manifest(props));
    }
}
exports.KubeRoleV1Alpha1 = KubeRoleV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.Role"
 */
KubeRoleV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'Role',
};
/**
 * RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.
 *
 * @schema io.k8s.api.rbac.v1alpha1.RoleBinding
 */
class KubeRoleBindingV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.RoleBinding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleBindingV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.RoleBinding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleBindingV1Alpha1.manifest(props));
    }
}
exports.KubeRoleBindingV1Alpha1 = KubeRoleBindingV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.RoleBinding"
 */
KubeRoleBindingV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'RoleBinding',
};
/**
 * RoleBindingList is a collection of RoleBindings
 *
 * @schema io.k8s.api.rbac.v1alpha1.RoleBindingList
 */
class KubeRoleBindingListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.RoleBindingList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleBindingListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.RoleBindingList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleBindingListV1Alpha1.manifest(props));
    }
}
exports.KubeRoleBindingListV1Alpha1 = KubeRoleBindingListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.RoleBindingList"
 */
KubeRoleBindingListV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'RoleBindingList',
};
/**
 * RoleList is a collection of Roles
 *
 * @schema io.k8s.api.rbac.v1alpha1.RoleList
 */
class KubeRoleListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1alpha1.RoleList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1alpha1.RoleList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleListV1Alpha1.manifest(props));
    }
}
exports.KubeRoleListV1Alpha1 = KubeRoleListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1alpha1.RoleList"
 */
KubeRoleListV1Alpha1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1alpha1',
    kind: 'RoleList',
};
/**
 * ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.
 *
 * @schema io.k8s.api.rbac.v1beta1.ClusterRole
 */
class KubeClusterRoleV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.ClusterRole".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeClusterRoleV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.ClusterRole" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeClusterRoleV1Beta1.manifest(props));
    }
}
exports.KubeClusterRoleV1Beta1 = KubeClusterRoleV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.ClusterRole"
 */
KubeClusterRoleV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'ClusterRole',
};
/**
 * ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.
 *
 * @schema io.k8s.api.rbac.v1beta1.ClusterRoleBinding
 */
class KubeClusterRoleBindingV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.ClusterRoleBinding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleBindingV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.ClusterRoleBinding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleBindingV1Beta1.manifest(props));
    }
}
exports.KubeClusterRoleBindingV1Beta1 = KubeClusterRoleBindingV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.ClusterRoleBinding"
 */
KubeClusterRoleBindingV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'ClusterRoleBinding',
};
/**
 * ClusterRoleBindingList is a collection of ClusterRoleBindings
 *
 * @schema io.k8s.api.rbac.v1beta1.ClusterRoleBindingList
 */
class KubeClusterRoleBindingListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.ClusterRoleBindingList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleBindingListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.ClusterRoleBindingList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleBindingListV1Beta1.manifest(props));
    }
}
exports.KubeClusterRoleBindingListV1Beta1 = KubeClusterRoleBindingListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.ClusterRoleBindingList"
 */
KubeClusterRoleBindingListV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'ClusterRoleBindingList',
};
/**
 * ClusterRoleList is a collection of ClusterRoles
 *
 * @schema io.k8s.api.rbac.v1beta1.ClusterRoleList
 */
class KubeClusterRoleListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.ClusterRoleList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeClusterRoleListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.ClusterRoleList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeClusterRoleListV1Beta1.manifest(props));
    }
}
exports.KubeClusterRoleListV1Beta1 = KubeClusterRoleListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.ClusterRoleList"
 */
KubeClusterRoleListV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'ClusterRoleList',
};
/**
 * Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.
 *
 * @schema io.k8s.api.rbac.v1beta1.Role
 */
class KubeRoleV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.Role".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeRoleV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.Role" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeRoleV1Beta1.manifest(props));
    }
}
exports.KubeRoleV1Beta1 = KubeRoleV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.Role"
 */
KubeRoleV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'Role',
};
/**
 * RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.
 *
 * @schema io.k8s.api.rbac.v1beta1.RoleBinding
 */
class KubeRoleBindingV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.RoleBinding".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleBindingV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.RoleBinding" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleBindingV1Beta1.manifest(props));
    }
}
exports.KubeRoleBindingV1Beta1 = KubeRoleBindingV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.RoleBinding"
 */
KubeRoleBindingV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'RoleBinding',
};
/**
 * RoleBindingList is a collection of RoleBindings
 *
 * @schema io.k8s.api.rbac.v1beta1.RoleBindingList
 */
class KubeRoleBindingListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.RoleBindingList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleBindingListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.RoleBindingList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleBindingListV1Beta1.manifest(props));
    }
}
exports.KubeRoleBindingListV1Beta1 = KubeRoleBindingListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.RoleBindingList"
 */
KubeRoleBindingListV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'RoleBindingList',
};
/**
 * RoleList is a collection of Roles
 *
 * @schema io.k8s.api.rbac.v1beta1.RoleList
 */
class KubeRoleListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.rbac.v1beta1.RoleList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeRoleListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.rbac.v1beta1.RoleList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeRoleListV1Beta1.manifest(props));
    }
}
exports.KubeRoleListV1Beta1 = KubeRoleListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.rbac.v1beta1.RoleList"
 */
KubeRoleListV1Beta1.GVK = {
    apiVersion: 'rbac.authorization.k8s.io/v1beta1',
    kind: 'RoleList',
};
/**
 * PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.
 *
 * @schema io.k8s.api.scheduling.v1.PriorityClass
 */
class KubePriorityClass extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.scheduling.v1.PriorityClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePriorityClass.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.scheduling.v1.PriorityClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePriorityClass.manifest(props));
    }
}
exports.KubePriorityClass = KubePriorityClass;
/**
 * Returns the apiVersion and kind for "io.k8s.api.scheduling.v1.PriorityClass"
 */
KubePriorityClass.GVK = {
    apiVersion: 'scheduling.k8s.io/v1',
    kind: 'PriorityClass',
};
/**
 * PriorityClassList is a collection of priority classes.
 *
 * @schema io.k8s.api.scheduling.v1.PriorityClassList
 */
class KubePriorityClassList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.scheduling.v1.PriorityClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePriorityClassList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.scheduling.v1.PriorityClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePriorityClassList.manifest(props));
    }
}
exports.KubePriorityClassList = KubePriorityClassList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.scheduling.v1.PriorityClassList"
 */
KubePriorityClassList.GVK = {
    apiVersion: 'scheduling.k8s.io/v1',
    kind: 'PriorityClassList',
};
/**
 * DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.
 *
 * @schema io.k8s.api.scheduling.v1alpha1.PriorityClass
 */
class KubePriorityClassV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.scheduling.v1alpha1.PriorityClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePriorityClassV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.scheduling.v1alpha1.PriorityClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePriorityClassV1Alpha1.manifest(props));
    }
}
exports.KubePriorityClassV1Alpha1 = KubePriorityClassV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.scheduling.v1alpha1.PriorityClass"
 */
KubePriorityClassV1Alpha1.GVK = {
    apiVersion: 'scheduling.k8s.io/v1alpha1',
    kind: 'PriorityClass',
};
/**
 * PriorityClassList is a collection of priority classes.
 *
 * @schema io.k8s.api.scheduling.v1alpha1.PriorityClassList
 */
class KubePriorityClassListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.scheduling.v1alpha1.PriorityClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePriorityClassListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.scheduling.v1alpha1.PriorityClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePriorityClassListV1Alpha1.manifest(props));
    }
}
exports.KubePriorityClassListV1Alpha1 = KubePriorityClassListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.scheduling.v1alpha1.PriorityClassList"
 */
KubePriorityClassListV1Alpha1.GVK = {
    apiVersion: 'scheduling.k8s.io/v1alpha1',
    kind: 'PriorityClassList',
};
/**
 * DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.
 *
 * @schema io.k8s.api.scheduling.v1beta1.PriorityClass
 */
class KubePriorityClassV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.scheduling.v1beta1.PriorityClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePriorityClassV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.scheduling.v1beta1.PriorityClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePriorityClassV1Beta1.manifest(props));
    }
}
exports.KubePriorityClassV1Beta1 = KubePriorityClassV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.scheduling.v1beta1.PriorityClass"
 */
KubePriorityClassV1Beta1.GVK = {
    apiVersion: 'scheduling.k8s.io/v1beta1',
    kind: 'PriorityClass',
};
/**
 * PriorityClassList is a collection of priority classes.
 *
 * @schema io.k8s.api.scheduling.v1beta1.PriorityClassList
 */
class KubePriorityClassListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.scheduling.v1beta1.PriorityClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePriorityClassListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.scheduling.v1beta1.PriorityClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePriorityClassListV1Beta1.manifest(props));
    }
}
exports.KubePriorityClassListV1Beta1 = KubePriorityClassListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.scheduling.v1beta1.PriorityClassList"
 */
KubePriorityClassListV1Beta1.GVK = {
    apiVersion: 'scheduling.k8s.io/v1beta1',
    kind: 'PriorityClassList',
};
/**
 * PodPreset is a policy resource that defines additional runtime requirements for a Pod.
 *
 * @schema io.k8s.api.settings.v1alpha1.PodPreset
 */
class KubePodPresetV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.settings.v1alpha1.PodPreset".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubePodPresetV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.settings.v1alpha1.PodPreset" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubePodPresetV1Alpha1.manifest(props));
    }
}
exports.KubePodPresetV1Alpha1 = KubePodPresetV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.settings.v1alpha1.PodPreset"
 */
KubePodPresetV1Alpha1.GVK = {
    apiVersion: 'settings.k8s.io/v1alpha1',
    kind: 'PodPreset',
};
/**
 * PodPresetList is a list of PodPreset objects.
 *
 * @schema io.k8s.api.settings.v1alpha1.PodPresetList
 */
class KubePodPresetListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.settings.v1alpha1.PodPresetList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubePodPresetListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.settings.v1alpha1.PodPresetList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubePodPresetListV1Alpha1.manifest(props));
    }
}
exports.KubePodPresetListV1Alpha1 = KubePodPresetListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.settings.v1alpha1.PodPresetList"
 */
KubePodPresetListV1Alpha1.GVK = {
    apiVersion: 'settings.k8s.io/v1alpha1',
    kind: 'PodPresetList',
};
/**
 * StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.

StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.
 *
 * @schema io.k8s.api.storage.v1.StorageClass
 */
class KubeStorageClass extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1.StorageClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStorageClass.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1.StorageClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStorageClass.manifest(props));
    }
}
exports.KubeStorageClass = KubeStorageClass;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1.StorageClass"
 */
KubeStorageClass.GVK = {
    apiVersion: 'storage.k8s.io/v1',
    kind: 'StorageClass',
};
/**
 * StorageClassList is a collection of storage classes.
 *
 * @schema io.k8s.api.storage.v1.StorageClassList
 */
class KubeStorageClassList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1.StorageClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStorageClassList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1.StorageClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStorageClassList.manifest(props));
    }
}
exports.KubeStorageClassList = KubeStorageClassList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1.StorageClassList"
 */
KubeStorageClassList.GVK = {
    apiVersion: 'storage.k8s.io/v1',
    kind: 'StorageClassList',
};
/**
 * VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.

VolumeAttachment objects are non-namespaced.
 *
 * @schema io.k8s.api.storage.v1.VolumeAttachment
 */
class KubeVolumeAttachment extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1.VolumeAttachment".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeVolumeAttachment.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1.VolumeAttachment" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeVolumeAttachment.manifest(props));
    }
}
exports.KubeVolumeAttachment = KubeVolumeAttachment;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1.VolumeAttachment"
 */
KubeVolumeAttachment.GVK = {
    apiVersion: 'storage.k8s.io/v1',
    kind: 'VolumeAttachment',
};
/**
 * VolumeAttachmentList is a collection of VolumeAttachment objects.
 *
 * @schema io.k8s.api.storage.v1.VolumeAttachmentList
 */
class KubeVolumeAttachmentList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1.VolumeAttachmentList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeVolumeAttachmentList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1.VolumeAttachmentList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeVolumeAttachmentList.manifest(props));
    }
}
exports.KubeVolumeAttachmentList = KubeVolumeAttachmentList;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1.VolumeAttachmentList"
 */
KubeVolumeAttachmentList.GVK = {
    apiVersion: 'storage.k8s.io/v1',
    kind: 'VolumeAttachmentList',
};
/**
 * VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.

VolumeAttachment objects are non-namespaced.
 *
 * @schema io.k8s.api.storage.v1alpha1.VolumeAttachment
 */
class KubeVolumeAttachmentV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1alpha1.VolumeAttachment".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeVolumeAttachmentV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1alpha1.VolumeAttachment" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeVolumeAttachmentV1Alpha1.manifest(props));
    }
}
exports.KubeVolumeAttachmentV1Alpha1 = KubeVolumeAttachmentV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1alpha1.VolumeAttachment"
 */
KubeVolumeAttachmentV1Alpha1.GVK = {
    apiVersion: 'storage.k8s.io/v1alpha1',
    kind: 'VolumeAttachment',
};
/**
 * VolumeAttachmentList is a collection of VolumeAttachment objects.
 *
 * @schema io.k8s.api.storage.v1alpha1.VolumeAttachmentList
 */
class KubeVolumeAttachmentListV1Alpha1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1alpha1.VolumeAttachmentList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeVolumeAttachmentListV1Alpha1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1alpha1.VolumeAttachmentList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeVolumeAttachmentListV1Alpha1.manifest(props));
    }
}
exports.KubeVolumeAttachmentListV1Alpha1 = KubeVolumeAttachmentListV1Alpha1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1alpha1.VolumeAttachmentList"
 */
KubeVolumeAttachmentListV1Alpha1.GVK = {
    apiVersion: 'storage.k8s.io/v1alpha1',
    kind: 'VolumeAttachmentList',
};
/**
 * CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. CSI drivers do not need to create the CSIDriver object directly. Instead they may use the cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically creates a CSIDriver object representing the driver. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced.
 *
 * @schema io.k8s.api.storage.v1beta1.CSIDriver
 */
class KubeCsiDriverV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.CSIDriver".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCsiDriverV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.CSIDriver" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCsiDriverV1Beta1.manifest(props));
    }
}
exports.KubeCsiDriverV1Beta1 = KubeCsiDriverV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.CSIDriver"
 */
KubeCsiDriverV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'CSIDriver',
};
/**
 * CSIDriverList is a collection of CSIDriver objects.
 *
 * @schema io.k8s.api.storage.v1beta1.CSIDriverList
 */
class KubeCsiDriverListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.CSIDriverList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCsiDriverListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.CSIDriverList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCsiDriverListV1Beta1.manifest(props));
    }
}
exports.KubeCsiDriverListV1Beta1 = KubeCsiDriverListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.CSIDriverList"
 */
KubeCsiDriverListV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'CSIDriverList',
};
/**
 * CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.
 *
 * @schema io.k8s.api.storage.v1beta1.CSINode
 */
class KubeCsiNodeV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.CSINode".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCsiNodeV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.CSINode" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCsiNodeV1Beta1.manifest(props));
    }
}
exports.KubeCsiNodeV1Beta1 = KubeCsiNodeV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.CSINode"
 */
KubeCsiNodeV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'CSINode',
};
/**
 * CSINodeList is a collection of CSINode objects.
 *
 * @schema io.k8s.api.storage.v1beta1.CSINodeList
 */
class KubeCsiNodeListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.CSINodeList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCsiNodeListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.CSINodeList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCsiNodeListV1Beta1.manifest(props));
    }
}
exports.KubeCsiNodeListV1Beta1 = KubeCsiNodeListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.CSINodeList"
 */
KubeCsiNodeListV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'CSINodeList',
};
/**
 * StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.

StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.
 *
 * @schema io.k8s.api.storage.v1beta1.StorageClass
 */
class KubeStorageClassV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.StorageClass".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStorageClassV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.StorageClass" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStorageClassV1Beta1.manifest(props));
    }
}
exports.KubeStorageClassV1Beta1 = KubeStorageClassV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.StorageClass"
 */
KubeStorageClassV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'StorageClass',
};
/**
 * StorageClassList is a collection of storage classes.
 *
 * @schema io.k8s.api.storage.v1beta1.StorageClassList
 */
class KubeStorageClassListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.StorageClassList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeStorageClassListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.StorageClassList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeStorageClassListV1Beta1.manifest(props));
    }
}
exports.KubeStorageClassListV1Beta1 = KubeStorageClassListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.StorageClassList"
 */
KubeStorageClassListV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'StorageClassList',
};
/**
 * VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.

VolumeAttachment objects are non-namespaced.
 *
 * @schema io.k8s.api.storage.v1beta1.VolumeAttachment
 */
class KubeVolumeAttachmentV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.VolumeAttachment".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeVolumeAttachmentV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.VolumeAttachment" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeVolumeAttachmentV1Beta1.manifest(props));
    }
}
exports.KubeVolumeAttachmentV1Beta1 = KubeVolumeAttachmentV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.VolumeAttachment"
 */
KubeVolumeAttachmentV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'VolumeAttachment',
};
/**
 * VolumeAttachmentList is a collection of VolumeAttachment objects.
 *
 * @schema io.k8s.api.storage.v1beta1.VolumeAttachmentList
 */
class KubeVolumeAttachmentListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.api.storage.v1beta1.VolumeAttachmentList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeVolumeAttachmentListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.api.storage.v1beta1.VolumeAttachmentList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeVolumeAttachmentListV1Beta1.manifest(props));
    }
}
exports.KubeVolumeAttachmentListV1Beta1 = KubeVolumeAttachmentListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.api.storage.v1beta1.VolumeAttachmentList"
 */
KubeVolumeAttachmentListV1Beta1.GVK = {
    apiVersion: 'storage.k8s.io/v1beta1',
    kind: 'VolumeAttachmentList',
};
/**
 * CustomResourceDefinition represents a resource that should be exposed on the API server.  Its name MUST be in the format <.spec.name>.<.spec.group>.
 *
 * @schema io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition
 */
class KubeCustomResourceDefinitionV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCustomResourceDefinitionV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCustomResourceDefinitionV1Beta1.manifest(props));
    }
}
exports.KubeCustomResourceDefinitionV1Beta1 = KubeCustomResourceDefinitionV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition"
 */
KubeCustomResourceDefinitionV1Beta1.GVK = {
    apiVersion: 'apiextensions.k8s.io/v1beta1',
    kind: 'CustomResourceDefinition',
};
/**
 * CustomResourceDefinitionList is a list of CustomResourceDefinition objects.
 *
 * @schema io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList
 */
class KubeCustomResourceDefinitionListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeCustomResourceDefinitionListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeCustomResourceDefinitionListV1Beta1.manifest(props));
    }
}
exports.KubeCustomResourceDefinitionListV1Beta1 = KubeCustomResourceDefinitionListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList"
 */
KubeCustomResourceDefinitionListV1Beta1.GVK = {
    apiVersion: 'apiextensions.k8s.io/v1beta1',
    kind: 'CustomResourceDefinitionList',
};
/**
 * Status is a return value for calls that don't return other objects.
 *
 * @schema io.k8s.apimachinery.pkg.apis.meta.v1.Status
 */
class KubeStatus extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.apimachinery.pkg.apis.meta.v1.Status".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeStatus.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.apimachinery.pkg.apis.meta.v1.Status" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeStatus.manifest(props));
    }
}
exports.KubeStatus = KubeStatus;
/**
 * Returns the apiVersion and kind for "io.k8s.apimachinery.pkg.apis.meta.v1.Status"
 */
KubeStatus.GVK = {
    apiVersion: 'v1',
    kind: 'Status',
};
/**
 * APIService represents a server for a particular GroupVersion. Name must be "version.group".
 *
 * @schema io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService
 */
class KubeApiService extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeApiService.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeApiService.manifest(props));
    }
}
exports.KubeApiService = KubeApiService;
/**
 * Returns the apiVersion and kind for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService"
 */
KubeApiService.GVK = {
    apiVersion: 'apiregistration.k8s.io/v1',
    kind: 'APIService',
};
/**
 * APIServiceList is a list of APIService objects.
 *
 * @schema io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList
 */
class KubeApiServiceList extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeApiServiceList.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeApiServiceList.manifest(props));
    }
}
exports.KubeApiServiceList = KubeApiServiceList;
/**
 * Returns the apiVersion and kind for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList"
 */
KubeApiServiceList.GVK = {
    apiVersion: 'apiregistration.k8s.io/v1',
    kind: 'APIServiceList',
};
/**
 * APIService represents a server for a particular GroupVersion. Name must be "version.group".
 *
 * @schema io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService
 */
class KubeApiServiceV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props = {}) {
        return {
            ...KubeApiServiceV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props = {}) {
        super(scope, id, KubeApiServiceV1Beta1.manifest(props));
    }
}
exports.KubeApiServiceV1Beta1 = KubeApiServiceV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService"
 */
KubeApiServiceV1Beta1.GVK = {
    apiVersion: 'apiregistration.k8s.io/v1beta1',
    kind: 'APIService',
};
/**
 * APIServiceList is a list of APIService objects.
 *
 * @schema io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList
 */
class KubeApiServiceListV1Beta1 extends cdk8s_1.ApiObject {
    /**
     * Renders a Kubernetes manifest for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList".
     *
     * This can be used to inline resource manifests inside other objects (e.g. as templates).
     *
     * @param props initialization props
     */
    static manifest(props) {
        return {
            ...KubeApiServiceListV1Beta1.GVK,
            ...props,
        };
    }
    /**
     * Defines a "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList" API object
     * @param scope the scope in which to define this object
     * @param id a scope-local name for the object
     * @param props initialization props
     */
    constructor(scope, id, props) {
        super(scope, id, KubeApiServiceListV1Beta1.manifest(props));
    }
}
exports.KubeApiServiceListV1Beta1 = KubeApiServiceListV1Beta1;
/**
 * Returns the apiVersion and kind for "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList"
 */
KubeApiServiceListV1Beta1.GVK = {
    apiVersion: 'apiregistration.k8s.io/v1beta1',
    kind: 'APIServiceList',
};
/**
 * @schema io.k8s.apimachinery.pkg.api.resource.Quantity
 */
class Quantity {
    static fromString(value) {
        return new Quantity(value);
    }
    static fromNumber(value) {
        return new Quantity(value);
    }
    constructor(value) {
        Object.defineProperty(this, 'resolve', { value: () => value });
    }
}
exports.Quantity = Quantity;
/**
 * Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
 *
 * @schema IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind
 */
var IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind;
(function (IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind) {
    /** DeleteOptions */
    IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind["DELETE_OPTIONS"] = "DeleteOptions";
})(IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind || (exports.IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind = IoK8SApimachineryPkgApisMetaV1DeleteOptionsKind = {}));
/**
 * @schema io.k8s.apimachinery.pkg.util.intstr.IntOrString
 */
class IntOrString {
    static fromString(value) {
        return new IntOrString(value);
    }
    static fromNumber(value) {
        return new IntOrString(value);
    }
    constructor(value) {
        Object.defineProperty(this, 'resolve', { value: () => value });
    }
}
exports.IntOrString = IntOrString;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiazhzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydHMvazhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFCQUFxQjtBQUNyQixpQ0FBb0Q7QUFHcEQ7Ozs7R0FJRztBQUNILE1BQWEsdUNBQXdDLFNBQVEsaUJBQVM7SUFTcEU7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFzRCxFQUFFO1FBQzdFLE9BQU87WUFDTCxHQUFHLHVDQUF1QyxDQUFDLEdBQUc7WUFDOUMsR0FBRyxLQUFLO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQXNELEVBQUU7UUFDdkcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsdUNBQXVDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQzs7QUEvQkgsMEZBZ0NDO0FBL0JDOztHQUVHO0FBQ29CLDJDQUFHLEdBQXFCO0lBQzdDLFVBQVUsRUFBRSxzQ0FBc0M7SUFDbEQsSUFBSSxFQUFFLDhCQUE4QjtDQUNyQyxDQUFDO0FBMkJKOzs7O0dBSUc7QUFDSCxNQUFhLDJDQUE0QyxTQUFRLGlCQUFTO0lBU3hFOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBdUQ7UUFDNUUsT0FBTztZQUNMLEdBQUcsMkNBQTJDLENBQUMsR0FBRztZQUNsRCxHQUFHLEtBQUs7U0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUQ7UUFDdEcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsMkNBQTJDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQzs7QUEvQkgsa0dBZ0NDO0FBL0JDOztHQUVHO0FBQ29CLCtDQUFHLEdBQXFC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QUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQVZELDRCQVVDO0FBZzJERDs7OztHQUlHO0FBQ0gsSUFBWSwrQ0FHWDtBQUhELFdBQVksK0NBQStDO0lBQ3pELG9CQUFvQjtJQUNwQixtRkFBZ0MsQ0FBQTtBQUNsQyxDQUFDLEVBSFcsK0NBQStDLCtEQUEvQywrQ0FBK0MsUUFHMUQ7QUF3QkQ7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDZixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ00sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELFlBQW9CLEtBQVU7UUFDNUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBVkQsa0NBVUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgR3JvdXBWZXJzaW9uS2luZCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIE11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24gZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9uIG9mIGFuZCBhZG1pc3Npb24gd2ViaG9vayB0aGF0IGFjY2VwdCBvciByZWplY3QgYW5kIG1heSBjaGFuZ2UgdGhlIG9iamVjdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY2xhc3MgS3ViZU11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25WMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhZG1pc3Npb25yZWdpc3RyYXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uVjFCZXRhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvblYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25cIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uVjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3QgaXMgYSBsaXN0IG9mIE11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYWRtaXNzaW9ucmVnaXN0cmF0aW9uLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3RWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbiBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYW5kIGFkbWlzc2lvbiB3ZWJob29rIHRoYXQgYWNjZXB0IG9yIHJlamVjdCBhbmQgb2JqZWN0IHdpdGhvdXQgY2hhbmdpbmcgaXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY2xhc3MgS3ViZVZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYWRtaXNzaW9ucmVnaXN0cmF0aW9uLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5WYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25cIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblYxQmV0YTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdCBpcyBhIGxpc3Qgb2YgVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5WYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FkbWlzc2lvbnJlZ2lzdHJhdGlvbi5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1ZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVWYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnRyb2xsZXJSZXZpc2lvbiBpbXBsZW1lbnRzIGFuIGltbXV0YWJsZSBzbmFwc2hvdCBvZiBzdGF0ZSBkYXRhLiBDbGllbnRzIGFyZSByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgdGhlIG9iamVjdHMgdGhhdCBjb250YWluIHRoZWlyIGludGVybmFsIHN0YXRlLiBPbmNlIGEgQ29udHJvbGxlclJldmlzaW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLCBpdCBjYW4gbm90IGJlIHVwZGF0ZWQuIFRoZSBBUEkgU2VydmVyIHdpbGwgZmFpbCB2YWxpZGF0aW9uIG9mIGFsbCByZXF1ZXN0cyB0aGF0IGF0dGVtcHQgdG8gbXV0YXRlIHRoZSBEYXRhIGZpZWxkLiBDb250cm9sbGVyUmV2aXNpb25zIG1heSwgaG93ZXZlciwgYmUgZGVsZXRlZC4gTm90ZSB0aGF0LCBkdWUgdG8gaXRzIHVzZSBieSBib3RoIHRoZSBEYWVtb25TZXQgYW5kIFN0YXRlZnVsU2V0IGNvbnRyb2xsZXJzIGZvciB1cGRhdGUgYW5kIHJvbGxiYWNrLCB0aGlzIG9iamVjdCBpcyBiZXRhLiBIb3dldmVyLCBpdCBtYXkgYmUgc3ViamVjdCB0byBuYW1lIGFuZCByZXByZXNlbnRhdGlvbiBjaGFuZ2VzIGluIGZ1dHVyZSByZWxlYXNlcywgYW5kIGNsaWVudHMgc2hvdWxkIG5vdCBkZXBlbmQgb24gaXRzIHN0YWJpbGl0eS4gSXQgaXMgcHJpbWFyaWx5IGZvciBpbnRlcm5hbCB1c2UgYnkgY29udHJvbGxlcnMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuQ29udHJvbGxlclJldmlzaW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ29udHJvbGxlclJldmlzaW9uIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvblwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MScsXG4gICAga2luZDogJ0NvbnRyb2xsZXJSZXZpc2lvbicsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXBwcy52MS5Db250cm9sbGVyUmV2aXNpb25cIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNvbnRyb2xsZXJSZXZpc2lvblByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNvbnRyb2xsZXJSZXZpc2lvbi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MS5Db250cm9sbGVyUmV2aXNpb25cIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNvbnRyb2xsZXJSZXZpc2lvbi5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ29udHJvbGxlclJldmlzaW9uTGlzdCBpcyBhIHJlc291cmNlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIENvbnRyb2xsZXJSZXZpc2lvbiBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjEnLFxuICAgIGtpbmQ6ICdDb250cm9sbGVyUmV2aXNpb25MaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNvbnRyb2xsZXJSZXZpc2lvbkxpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYWVtb25TZXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGRhZW1vbiBzZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGFlbW9uU2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRGFlbW9uU2V0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MScsXG4gICAga2luZDogJ0RhZW1vblNldCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXBwcy52MS5EYWVtb25TZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZURhZW1vblNldFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlRGFlbW9uU2V0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZURhZW1vblNldFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEYWVtb25TZXQubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERhZW1vblNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIGRhZW1vbiBzZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVEYWVtb25TZXRMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjEnLFxuICAgIGtpbmQ6ICdEYWVtb25TZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZURhZW1vblNldExpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVEYWVtb25TZXRMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVEYWVtb25TZXRMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEYWVtb25TZXRMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3ltZW50IGVuYWJsZXMgZGVjbGFyYXRpdmUgdXBkYXRlcyBmb3IgUG9kcyBhbmQgUmVwbGljYVNldHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudFxuICovXG5leHBvcnQgY2xhc3MgS3ViZURlcGxveW1lbnQgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MScsXG4gICAga2luZDogJ0RlcGxveW1lbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlRGVwbG95bWVudFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlRGVwbG95bWVudC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MS5EZXBsb3ltZW50XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGVwbG95bWVudFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEZXBsb3ltZW50Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3ltZW50TGlzdCBpcyBhIGxpc3Qgb2YgRGVwbG95bWVudHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVEZXBsb3ltZW50TGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXBwcy52MS5EZXBsb3ltZW50TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MScsXG4gICAga2luZDogJ0RlcGxveW1lbnRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRlcGxveW1lbnRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVEZXBsb3ltZW50TGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZURlcGxveW1lbnRMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxLkRlcGxveW1lbnRMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGVwbG95bWVudExpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZURlcGxveW1lbnRMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBsaWNhU2V0IGVuc3VyZXMgdGhhdCBhIHNwZWNpZmllZCBudW1iZXIgb2YgcG9kIHJlcGxpY2FzIGFyZSBydW5uaW5nIGF0IGFueSBnaXZlbiB0aW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLlJlcGxpY2FTZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVSZXBsaWNhU2V0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLlJlcGxpY2FTZXRcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjEnLFxuICAgIGtpbmQ6ICdSZXBsaWNhU2V0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLlJlcGxpY2FTZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVJlcGxpY2FTZXRQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJlcGxpY2FTZXQuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFwcHMudjEuUmVwbGljYVNldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJlcGxpY2FTZXRQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUmVwbGljYVNldC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUmVwbGljYVNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFJlcGxpY2FTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLlJlcGxpY2FTZXRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUmVwbGljYVNldExpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjEuUmVwbGljYVNldExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjEnLFxuICAgIGtpbmQ6ICdSZXBsaWNhU2V0TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXBwcy52MS5SZXBsaWNhU2V0TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUmVwbGljYVNldExpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVSZXBsaWNhU2V0TGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MS5SZXBsaWNhU2V0TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJlcGxpY2FTZXRMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSZXBsaWNhU2V0TGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogU3RhdGVmdWxTZXQgcmVwcmVzZW50cyBhIHNldCBvZiBwb2RzIHdpdGggY29uc2lzdGVudCBpZGVudGl0aWVzLiBJZGVudGl0aWVzIGFyZSBkZWZpbmVkIGFzOlxuIC0gTmV0d29yazogQSBzaW5nbGUgc3RhYmxlIEROUyBhbmQgaG9zdG5hbWUuXG4gLSBTdG9yYWdlOiBBcyBtYW55IFZvbHVtZUNsYWltcyBhcyByZXF1ZXN0ZWQuXG5UaGUgU3RhdGVmdWxTZXQgZ3VhcmFudGVlcyB0aGF0IGEgZ2l2ZW4gbmV0d29yayBpZGVudGl0eSB3aWxsIGFsd2F5cyBtYXAgdG8gdGhlIHNhbWUgc3RvcmFnZSBpZGVudGl0eS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5TdGF0ZWZ1bFNldFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVN0YXRlZnVsU2V0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLlN0YXRlZnVsU2V0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcHBzL3YxJyxcbiAgICBraW5kOiAnU3RhdGVmdWxTZXQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjEuU3RhdGVmdWxTZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVN0YXRlZnVsU2V0UHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTdGF0ZWZ1bFNldC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MS5TdGF0ZWZ1bFNldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXRlZnVsU2V0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVN0YXRlZnVsU2V0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bFNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFN0YXRlZnVsU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5TdGF0ZWZ1bFNldExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdGF0ZWZ1bFNldExpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjEuU3RhdGVmdWxTZXRMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcHBzL3YxJyxcbiAgICBraW5kOiAnU3RhdGVmdWxTZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxLlN0YXRlZnVsU2V0TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3RhdGVmdWxTZXRMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU3RhdGVmdWxTZXRMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxLlN0YXRlZnVsU2V0TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXRlZnVsU2V0TGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU3RhdGVmdWxTZXRMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIENvbnRyb2xsZXJSZXZpc2lvbiBpcyBkZXByZWNhdGVkIGJ5IGFwcHMvdjFiZXRhMi9Db250cm9sbGVyUmV2aXNpb24uIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gQ29udHJvbGxlclJldmlzaW9uIGltcGxlbWVudHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHN0YXRlIGRhdGEuIENsaWVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyB0aGUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gdGhlaXIgaW50ZXJuYWwgc3RhdGUuIE9uY2UgYSBDb250cm9sbGVyUmV2aXNpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIGl0IGNhbiBub3QgYmUgdXBkYXRlZC4gVGhlIEFQSSBTZXJ2ZXIgd2lsbCBmYWlsIHZhbGlkYXRpb24gb2YgYWxsIHJlcXVlc3RzIHRoYXQgYXR0ZW1wdCB0byBtdXRhdGUgdGhlIERhdGEgZmllbGQuIENvbnRyb2xsZXJSZXZpc2lvbnMgbWF5LCBob3dldmVyLCBiZSBkZWxldGVkLiBOb3RlIHRoYXQsIGR1ZSB0byBpdHMgdXNlIGJ5IGJvdGggdGhlIERhZW1vblNldCBhbmQgU3RhdGVmdWxTZXQgY29udHJvbGxlcnMgZm9yIHVwZGF0ZSBhbmQgcm9sbGJhY2ssIHRoaXMgb2JqZWN0IGlzIGJldGEuIEhvd2V2ZXIsIGl0IG1heSBiZSBzdWJqZWN0IHRvIG5hbWUgYW5kIHJlcHJlc2VudGF0aW9uIGNoYW5nZXMgaW4gZnV0dXJlIHJlbGVhc2VzLCBhbmQgY2xpZW50cyBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHMgc3RhYmlsaXR5LiBJdCBpcyBwcmltYXJpbHkgZm9yIGludGVybmFsIHVzZSBieSBjb250cm9sbGVycy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvblxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNvbnRyb2xsZXJSZXZpc2lvblYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5Db250cm9sbGVyUmV2aXNpb25cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjFiZXRhMScsXG4gICAga2luZDogJ0NvbnRyb2xsZXJSZXZpc2lvbicsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvblwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ29udHJvbGxlclJldmlzaW9uVjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNvbnRyb2xsZXJSZXZpc2lvblYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5Db250cm9sbGVyUmV2aXNpb25cIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25WMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDb250cm9sbGVyUmV2aXNpb25WMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb250cm9sbGVyUmV2aXNpb25MaXN0IGlzIGEgcmVzb3VyY2UgY29udGFpbmluZyBhIGxpc3Qgb2YgQ29udHJvbGxlclJldmlzaW9uIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5Db250cm9sbGVyUmV2aXNpb25MaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5Db250cm9sbGVyUmV2aXNpb25MaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcHBzL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDb250cm9sbGVyUmV2aXNpb25MaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuQ29udHJvbGxlclJldmlzaW9uTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgRGVwbG95bWVudCBpcyBkZXByZWNhdGVkIGJ5IGFwcHMvdjFiZXRhMi9EZXBsb3ltZW50LiBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIERlcGxveW1lbnQgZW5hYmxlcyBkZWNsYXJhdGl2ZSB1cGRhdGVzIGZvciBQb2RzIGFuZCBSZXBsaWNhU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVEZXBsb3ltZW50VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRlcGxveW1lbnRcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2V4dGVuc2lvbnMvdjFiZXRhMScsXG4gICAga2luZDogJ0RlcGxveW1lbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EZXBsb3ltZW50XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVEZXBsb3ltZW50VjFCZXRhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlRGVwbG95bWVudFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EZXBsb3ltZW50XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGVwbG95bWVudFYxQmV0YTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlRGVwbG95bWVudFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveW1lbnRMaXN0IGlzIGEgbGlzdCBvZiBEZXBsb3ltZW50cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRlcGxveW1lbnRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRGVwbG95bWVudExpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGVwbG95bWVudExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2V4dGVuc2lvbnMvdjFiZXRhMScsXG4gICAga2luZDogJ0RlcGxveW1lbnRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGVwbG95bWVudExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZURlcGxveW1lbnRMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZURlcGxveW1lbnRMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRlcGxveW1lbnRMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGVwbG95bWVudExpc3RWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEZXBsb3ltZW50TGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIHJlcHJlc2VudHMgYSBzY2FsaW5nIHJlcXVlc3QgZm9yIGEgcmVzb3VyY2UuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5TY2FsZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZVNjYWxlVjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlNjYWxlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdleHRlbnNpb25zL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdTY2FsZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlNjYWxlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTY2FsZVYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVNjYWxlVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlNjYWxlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlU2NhbGVWMUJldGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVNjYWxlVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBTdGF0ZWZ1bFNldCBpcyBkZXByZWNhdGVkIGJ5IGFwcHMvdjFiZXRhMi9TdGF0ZWZ1bFNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBTdGF0ZWZ1bFNldCByZXByZXNlbnRzIGEgc2V0IG9mIHBvZHMgd2l0aCBjb25zaXN0ZW50IGlkZW50aXRpZXMuIElkZW50aXRpZXMgYXJlIGRlZmluZWQgYXM6XG4gLSBOZXR3b3JrOiBBIHNpbmdsZSBzdGFibGUgRE5TIGFuZCBob3N0bmFtZS5cbiAtIFN0b3JhZ2U6IEFzIG1hbnkgVm9sdW1lQ2xhaW1zIGFzIHJlcXVlc3RlZC5cblRoZSBTdGF0ZWZ1bFNldCBndWFyYW50ZWVzIHRoYXQgYSBnaXZlbiBuZXR3b3JrIGlkZW50aXR5IHdpbGwgYWx3YXlzIG1hcCB0byB0aGUgc2FtZSBzdG9yYWdlIGlkZW50aXR5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuU3RhdGVmdWxTZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdGF0ZWZ1bFNldFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5TdGF0ZWZ1bFNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGExJyxcbiAgICBraW5kOiAnU3RhdGVmdWxTZXQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5TdGF0ZWZ1bFNldFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3RhdGVmdWxTZXRWMUJldGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTdGF0ZWZ1bFNldFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5TdGF0ZWZ1bFNldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXRlZnVsU2V0VjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTdGF0ZWZ1bFNldFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXRlZnVsU2V0TGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgU3RhdGVmdWxTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuU3RhdGVmdWxTZXRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU3RhdGVmdWxTZXRMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGExLlN0YXRlZnVsU2V0TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGExJyxcbiAgICBraW5kOiAnU3RhdGVmdWxTZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuU3RhdGVmdWxTZXRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTdGF0ZWZ1bFNldExpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU3RhdGVmdWxTZXRMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MWJldGExLlN0YXRlZnVsU2V0TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXRlZnVsU2V0TGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVN0YXRlZnVsU2V0TGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgQ29udHJvbGxlclJldmlzaW9uIGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MS9Db250cm9sbGVyUmV2aXNpb24uIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gQ29udHJvbGxlclJldmlzaW9uIGltcGxlbWVudHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHN0YXRlIGRhdGEuIENsaWVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyB0aGUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gdGhlaXIgaW50ZXJuYWwgc3RhdGUuIE9uY2UgYSBDb250cm9sbGVyUmV2aXNpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIGl0IGNhbiBub3QgYmUgdXBkYXRlZC4gVGhlIEFQSSBTZXJ2ZXIgd2lsbCBmYWlsIHZhbGlkYXRpb24gb2YgYWxsIHJlcXVlc3RzIHRoYXQgYXR0ZW1wdCB0byBtdXRhdGUgdGhlIERhdGEgZmllbGQuIENvbnRyb2xsZXJSZXZpc2lvbnMgbWF5LCBob3dldmVyLCBiZSBkZWxldGVkLiBOb3RlIHRoYXQsIGR1ZSB0byBpdHMgdXNlIGJ5IGJvdGggdGhlIERhZW1vblNldCBhbmQgU3RhdGVmdWxTZXQgY29udHJvbGxlcnMgZm9yIHVwZGF0ZSBhbmQgcm9sbGJhY2ssIHRoaXMgb2JqZWN0IGlzIGJldGEuIEhvd2V2ZXIsIGl0IG1heSBiZSBzdWJqZWN0IHRvIG5hbWUgYW5kIHJlcHJlc2VudGF0aW9uIGNoYW5nZXMgaW4gZnV0dXJlIHJlbGVhc2VzLCBhbmQgY2xpZW50cyBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHMgc3RhYmlsaXR5LiBJdCBpcyBwcmltYXJpbHkgZm9yIGludGVybmFsIHVzZSBieSBjb250cm9sbGVycy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkNvbnRyb2xsZXJSZXZpc2lvblxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNvbnRyb2xsZXJSZXZpc2lvblYxQmV0YTIgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb25cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjFiZXRhMicsXG4gICAga2luZDogJ0NvbnRyb2xsZXJSZXZpc2lvbicsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLkNvbnRyb2xsZXJSZXZpc2lvblwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ29udHJvbGxlclJldmlzaW9uVjFCZXRhMlByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNvbnRyb2xsZXJSZXZpc2lvblYxQmV0YTIuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb25cIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25WMUJldGEyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDb250cm9sbGVyUmV2aXNpb25WMUJldGEyLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb250cm9sbGVyUmV2aXNpb25MaXN0IGlzIGEgcmVzb3VyY2UgY29udGFpbmluZyBhIGxpc3Qgb2YgQ29udHJvbGxlclJldmlzaW9uIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb25MaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTIgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb25MaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcHBzL3YxYmV0YTInLFxuICAgIGtpbmQ6ICdDb250cm9sbGVyUmV2aXNpb25MaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuQ29udHJvbGxlclJldmlzaW9uTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTJQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0VjFCZXRhMi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25MaXN0VjFCZXRhMlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTIubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgRGFlbW9uU2V0IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MS9EYWVtb25TZXQuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gRGFlbW9uU2V0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBkYWVtb24gc2V0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGFlbW9uU2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRGFlbW9uU2V0VjFCZXRhMiBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRhZW1vblNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGEyJyxcbiAgICBraW5kOiAnRGFlbW9uU2V0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGFlbW9uU2V0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVEYWVtb25TZXRWMUJldGEyUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVEYWVtb25TZXRWMUJldGEyLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGFlbW9uU2V0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGFlbW9uU2V0VjFCZXRhMlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEYWVtb25TZXRWMUJldGEyLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYWVtb25TZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBkYWVtb24gc2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRhZW1vblNldExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVEYWVtb25TZXRMaXN0VjFCZXRhMiBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRhZW1vblNldExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjFiZXRhMicsXG4gICAga2luZDogJ0RhZW1vblNldExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EYWVtb25TZXRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVEYWVtb25TZXRMaXN0VjFCZXRhMlByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZURhZW1vblNldExpc3RWMUJldGEyLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGFlbW9uU2V0TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZURhZW1vblNldExpc3RWMUJldGEyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEYWVtb25TZXRMaXN0VjFCZXRhMi5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBEZXBsb3ltZW50IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MS9EZXBsb3ltZW50LiBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIERlcGxveW1lbnQgZW5hYmxlcyBkZWNsYXJhdGl2ZSB1cGRhdGVzIGZvciBQb2RzIGFuZCBSZXBsaWNhU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVEZXBsb3ltZW50VjFCZXRhMiBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjFiZXRhMicsXG4gICAga2luZDogJ0RlcGxveW1lbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVEZXBsb3ltZW50VjFCZXRhMlByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlRGVwbG95bWVudFYxQmV0YTIuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGVwbG95bWVudFYxQmV0YTJQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlRGVwbG95bWVudFYxQmV0YTIubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveW1lbnRMaXN0IGlzIGEgbGlzdCBvZiBEZXBsb3ltZW50cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRGVwbG95bWVudExpc3RWMUJldGEyIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjFiZXRhMicsXG4gICAga2luZDogJ0RlcGxveW1lbnRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZURlcGxveW1lbnRMaXN0VjFCZXRhMlByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZURlcGxveW1lbnRMaXN0VjFCZXRhMi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGVwbG95bWVudExpc3RWMUJldGEyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVEZXBsb3ltZW50TGlzdFYxQmV0YTIubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgUmVwbGljYVNldCBpcyBkZXByZWNhdGVkIGJ5IGFwcHMvdjEvUmVwbGljYVNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBSZXBsaWNhU2V0IGVuc3VyZXMgdGhhdCBhIHNwZWNpZmllZCBudW1iZXIgb2YgcG9kIHJlcGxpY2FzIGFyZSBydW5uaW5nIGF0IGFueSBnaXZlbiB0aW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuUmVwbGljYVNldFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJlcGxpY2FTZXRWMUJldGEyIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuUmVwbGljYVNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGEyJyxcbiAgICBraW5kOiAnUmVwbGljYVNldCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJlcGxpY2FTZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVJlcGxpY2FTZXRWMUJldGEyUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVSZXBsaWNhU2V0VjFCZXRhMi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJlcGxpY2FTZXRcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSZXBsaWNhU2V0VjFCZXRhMlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSZXBsaWNhU2V0VjFCZXRhMi5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUmVwbGljYVNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFJlcGxpY2FTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuUmVwbGljYVNldExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVSZXBsaWNhU2V0TGlzdFYxQmV0YTIgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5SZXBsaWNhU2V0TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGEyJyxcbiAgICBraW5kOiAnUmVwbGljYVNldExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5SZXBsaWNhU2V0TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUmVwbGljYVNldExpc3RWMUJldGEyUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUmVwbGljYVNldExpc3RWMUJldGEyLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuUmVwbGljYVNldExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSZXBsaWNhU2V0TGlzdFYxQmV0YTJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJlcGxpY2FTZXRMaXN0VjFCZXRhMi5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogU2NhbGUgcmVwcmVzZW50cyBhIHNjYWxpbmcgcmVxdWVzdCBmb3IgYSByZXNvdXJjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlNjYWxlXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU2NhbGVWMUJldGEyIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU2NhbGVcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2FwcHMvdjFiZXRhMicsXG4gICAga2luZDogJ1NjYWxlJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU2NhbGVcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVNjYWxlVjFCZXRhMlByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU2NhbGVWMUJldGEyLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU2NhbGVcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTY2FsZVYxQmV0YTJQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU2NhbGVWMUJldGEyLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIFN0YXRlZnVsU2V0IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MS9TdGF0ZWZ1bFNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBTdGF0ZWZ1bFNldCByZXByZXNlbnRzIGEgc2V0IG9mIHBvZHMgd2l0aCBjb25zaXN0ZW50IGlkZW50aXRpZXMuIElkZW50aXRpZXMgYXJlIGRlZmluZWQgYXM6XG4gLSBOZXR3b3JrOiBBIHNpbmdsZSBzdGFibGUgRE5TIGFuZCBob3N0bmFtZS5cbiAtIFN0b3JhZ2U6IEFzIG1hbnkgVm9sdW1lQ2xhaW1zIGFzIHJlcXVlc3RlZC5cblRoZSBTdGF0ZWZ1bFNldCBndWFyYW50ZWVzIHRoYXQgYSBnaXZlbiBuZXR3b3JrIGlkZW50aXR5IHdpbGwgYWx3YXlzIG1hcCB0byB0aGUgc2FtZSBzdG9yYWdlIGlkZW50aXR5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdGF0ZWZ1bFNldFYxQmV0YTIgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGEyJyxcbiAgICBraW5kOiAnU3RhdGVmdWxTZXQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3RhdGVmdWxTZXRWMUJldGEyUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTdGF0ZWZ1bFNldFYxQmV0YTIuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXRlZnVsU2V0VjFCZXRhMlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTdGF0ZWZ1bFNldFYxQmV0YTIubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXRlZnVsU2V0TGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgU3RhdGVmdWxTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU3RhdGVmdWxTZXRMaXN0VjFCZXRhMiBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBwcy92MWJldGEyJyxcbiAgICBraW5kOiAnU3RhdGVmdWxTZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTdGF0ZWZ1bFNldExpc3RWMUJldGEyUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU3RhdGVmdWxTZXRMaXN0VjFCZXRhMi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXRlZnVsU2V0TGlzdFYxQmV0YTJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVN0YXRlZnVsU2V0TGlzdFYxQmV0YTIubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEF1ZGl0U2luayByZXByZXNlbnRzIGEgY2x1c3RlciBsZXZlbCBhdWRpdCBzaW5rXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua1xuICovXG5leHBvcnQgY2xhc3MgS3ViZUF1ZGl0U2lua1YxQWxwaGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdWRpdHJlZ2lzdHJhdGlvbi52MWFscGhhMS5BdWRpdFNpbmtcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1ZGl0cmVnaXN0cmF0aW9uLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ0F1ZGl0U2luaycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuQXVkaXRTaW5rXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVBdWRpdFNpbmtWMUFscGhhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQXVkaXRTaW5rVjFBbHBoYTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUF1ZGl0U2lua1YxQWxwaGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUF1ZGl0U2lua1YxQWxwaGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdWRpdFNpbmtMaXN0IGlzIGEgbGlzdCBvZiBBdWRpdFNpbmsgaXRlbXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVBdWRpdFNpbmtMaXN0VjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua0xpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1ZGl0cmVnaXN0cmF0aW9uLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ0F1ZGl0U2lua0xpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua0xpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUF1ZGl0U2lua0xpc3RWMUFscGhhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUF1ZGl0U2lua0xpc3RWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuQXVkaXRTaW5rTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUF1ZGl0U2lua0xpc3RWMUFscGhhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQXVkaXRTaW5rTGlzdFYxQWxwaGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUb2tlblJldmlldyBhdHRlbXB0cyB0byBhdXRoZW50aWNhdGUgYSB0b2tlbiB0byBhIGtub3duIHVzZXIuIE5vdGU6IFRva2VuUmV2aWV3IHJlcXVlc3RzIG1heSBiZSBjYWNoZWQgYnkgdGhlIHdlYmhvb2sgdG9rZW4gYXV0aGVudGljYXRvciBwbHVnaW4gaW4gdGhlIGt1YmUtYXBpc2VydmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MS5Ub2tlblJldmlld1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVRva2VuUmV2aWV3IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MS5Ub2tlblJldmlld1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0aGVudGljYXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnVG9rZW5SZXZpZXcnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dGhlbnRpY2F0aW9uLnYxLlRva2VuUmV2aWV3XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVUb2tlblJldmlld1Byb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVRva2VuUmV2aWV3LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MS5Ub2tlblJldmlld1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVRva2VuUmV2aWV3UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVUb2tlblJldmlldy5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogVG9rZW5SZXZpZXcgYXR0ZW1wdHMgdG8gYXV0aGVudGljYXRlIGEgdG9rZW4gdG8gYSBrbm93biB1c2VyLiBOb3RlOiBUb2tlblJldmlldyByZXF1ZXN0cyBtYXkgYmUgY2FjaGVkIGJ5IHRoZSB3ZWJob29rIHRva2VuIGF1dGhlbnRpY2F0b3IgcGx1Z2luIGluIHRoZSBrdWJlLWFwaXNlcnZlci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aGVudGljYXRpb24udjFiZXRhMS5Ub2tlblJldmlld1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVRva2VuUmV2aWV3VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0aGVudGljYXRpb24udjFiZXRhMS5Ub2tlblJldmlld1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0aGVudGljYXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdUb2tlblJldmlldycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXV0aGVudGljYXRpb24udjFiZXRhMS5Ub2tlblJldmlld1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlVG9rZW5SZXZpZXdWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlVG9rZW5SZXZpZXdWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MWJldGExLlRva2VuUmV2aWV3XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlVG9rZW5SZXZpZXdWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVUb2tlblJldmlld1YxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIExvY2FsU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciBub3QgYSB1c2VyIG9yIGdyb3VwIGNhbiBwZXJmb3JtIGFuIGFjdGlvbiBpbiBhIGdpdmVuIG5hbWVzcGFjZS4gSGF2aW5nIGEgbmFtZXNwYWNlIHNjb3BlZCByZXNvdXJjZSBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBncmFudCBuYW1lc3BhY2Ugc2NvcGVkIHBvbGljeSB0aGF0IGluY2x1ZGVzIHBlcm1pc3Npb25zIGNoZWNraW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1xuICovXG5leHBvcnQgY2xhc3MgS3ViZUxvY2FsU3ViamVjdEFjY2Vzc1JldmlldyBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1dGhvcml6YXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWxmU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciB0aGUgY3VycmVudCB1c2VyIGNhbiBwZXJmb3JtIGFuIGFjdGlvbi4gIE5vdCBmaWxsaW5nIGluIGEgc3BlYy5uYW1lc3BhY2UgbWVhbnMgXCJpbiBhbGwgbmFtZXNwYWNlc1wiLiAgU2VsZiBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB1c2VycyBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gY2hlY2sgd2hldGhlciB0aGV5IGNhbiBwZXJmb3JtIGFuIGFjdGlvblxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXcgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1dGhvcml6YXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXcnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXcuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTZWxmU3ViamVjdEFjY2Vzc1Jldmlld1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXcubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGZTdWJqZWN0UnVsZXNSZXZpZXcgZW51bWVyYXRlcyB0aGUgc2V0IG9mIGFjdGlvbnMgdGhlIGN1cnJlbnQgdXNlciBjYW4gcGVyZm9ybSB3aXRoaW4gYSBuYW1lc3BhY2UuIFRoZSByZXR1cm5lZCBsaXN0IG9mIGFjdGlvbnMgbWF5IGJlIGluY29tcGxldGUgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2ZXIncyBhdXRob3JpemF0aW9uIG1vZGUsIGFuZCBhbnkgZXJyb3JzIGV4cGVyaWVuY2VkIGR1cmluZyB0aGUgZXZhbHVhdGlvbi4gU2VsZlN1YmplY3RSdWxlc1JldmlldyBzaG91bGQgYmUgdXNlZCBieSBVSXMgdG8gc2hvdy9oaWRlIGFjdGlvbnMsIG9yIHRvIHF1aWNrbHkgbGV0IGFuIGVuZCB1c2VyIHJlYXNvbiBhYm91dCB0aGVpciBwZXJtaXNzaW9ucy4gSXQgc2hvdWxkIE5PVCBCZSB1c2VkIGJ5IGV4dGVybmFsIHN5c3RlbXMgdG8gZHJpdmUgYXV0aG9yaXphdGlvbiBkZWNpc2lvbnMgYXMgdGhpcyByYWlzZXMgY29uZnVzZWQgZGVwdXR5LCBjYWNoZSBsaWZldGltZS9yZXZvY2F0aW9uLCBhbmQgY29ycmVjdG5lc3MgY29uY2VybnMuIFN1YmplY3RBY2Nlc3NSZXZpZXcsIGFuZCBMb2NhbEFjY2Vzc1JldmlldyBhcmUgdGhlIGNvcnJlY3Qgd2F5IHRvIGRlZmVyIGF1dGhvcml6YXRpb24gZGVjaXNpb25zIHRvIHRoZSBBUEkgc2VydmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXdcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTZWxmU3ViamVjdFJ1bGVzUmV2aWV3IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXdcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1dGhvcml6YXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnU2VsZlN1YmplY3RSdWxlc1JldmlldycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5TZWxmU3ViamVjdFJ1bGVzUmV2aWV3XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTZWxmU3ViamVjdFJ1bGVzUmV2aWV3UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU2VsZlN1YmplY3RSdWxlc1Jldmlldy5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5TZWxmU3ViamVjdFJ1bGVzUmV2aWV3XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlU2VsZlN1YmplY3RSdWxlc1Jldmlld1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU2VsZlN1YmplY3RSdWxlc1Jldmlldy5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciBub3QgYSB1c2VyIG9yIGdyb3VwIGNhbiBwZXJmb3JtIGFuIGFjdGlvbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5TdWJqZWN0QWNjZXNzUmV2aWV3XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU3ViamVjdEFjY2Vzc1JldmlldyBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5TdWJqZWN0QWNjZXNzUmV2aWV3XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhdXRob3JpemF0aW9uLms4cy5pby92MScsXG4gICAga2luZDogJ1N1YmplY3RBY2Nlc3NSZXZpZXcnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU3ViamVjdEFjY2Vzc1Jldmlld1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3ViamVjdEFjY2Vzc1Jldmlld1Byb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVN1YmplY3RBY2Nlc3NSZXZpZXcuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU3ViamVjdEFjY2Vzc1Jldmlld1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN1YmplY3RBY2Nlc3NSZXZpZXdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVN1YmplY3RBY2Nlc3NSZXZpZXcubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIExvY2FsU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciBub3QgYSB1c2VyIG9yIGdyb3VwIGNhbiBwZXJmb3JtIGFuIGFjdGlvbiBpbiBhIGdpdmVuIG5hbWVzcGFjZS4gSGF2aW5nIGEgbmFtZXNwYWNlIHNjb3BlZCByZXNvdXJjZSBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBncmFudCBuYW1lc3BhY2Ugc2NvcGVkIHBvbGljeSB0aGF0IGluY2x1ZGVzIHBlcm1pc3Npb25zIGNoZWNraW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ0xvY2FsU3ViamVjdEFjY2Vzc1JldmlldycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1YxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVMb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVMb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWxmU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciB0aGUgY3VycmVudCB1c2VyIGNhbiBwZXJmb3JtIGFuIGFjdGlvbi4gIE5vdCBmaWxsaW5nIGluIGEgc3BlYy5uYW1lc3BhY2UgbWVhbnMgXCJpbiBhbGwgbmFtZXNwYWNlc1wiLiAgU2VsZiBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB1c2VycyBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gY2hlY2sgd2hldGhlciB0aGV5IGNhbiBwZXJmb3JtIGFuIGFjdGlvblxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTZWxmU3ViamVjdEFjY2Vzc1Jldmlld1YxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TZWxmU3ViamVjdEFjY2Vzc1Jldmlld1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1NlbGZTdWJqZWN0QWNjZXNzUmV2aWV3JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTZWxmU3ViamVjdEFjY2Vzc1Jldmlld1YxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGZTdWJqZWN0UnVsZXNSZXZpZXcgZW51bWVyYXRlcyB0aGUgc2V0IG9mIGFjdGlvbnMgdGhlIGN1cnJlbnQgdXNlciBjYW4gcGVyZm9ybSB3aXRoaW4gYSBuYW1lc3BhY2UuIFRoZSByZXR1cm5lZCBsaXN0IG9mIGFjdGlvbnMgbWF5IGJlIGluY29tcGxldGUgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2ZXIncyBhdXRob3JpemF0aW9uIG1vZGUsIGFuZCBhbnkgZXJyb3JzIGV4cGVyaWVuY2VkIGR1cmluZyB0aGUgZXZhbHVhdGlvbi4gU2VsZlN1YmplY3RSdWxlc1JldmlldyBzaG91bGQgYmUgdXNlZCBieSBVSXMgdG8gc2hvdy9oaWRlIGFjdGlvbnMsIG9yIHRvIHF1aWNrbHkgbGV0IGFuIGVuZCB1c2VyIHJlYXNvbiBhYm91dCB0aGVpciBwZXJtaXNzaW9ucy4gSXQgc2hvdWxkIE5PVCBCZSB1c2VkIGJ5IGV4dGVybmFsIHN5c3RlbXMgdG8gZHJpdmUgYXV0aG9yaXphdGlvbiBkZWNpc2lvbnMgYXMgdGhpcyByYWlzZXMgY29uZnVzZWQgZGVwdXR5LCBjYWNoZSBsaWZldGltZS9yZXZvY2F0aW9uLCBhbmQgY29ycmVjdG5lc3MgY29uY2VybnMuIFN1YmplY3RBY2Nlc3NSZXZpZXcsIGFuZCBMb2NhbEFjY2Vzc1JldmlldyBhcmUgdGhlIGNvcnJlY3Qgd2F5IHRvIGRlZmVyIGF1dGhvcml6YXRpb24gZGVjaXNpb25zIHRvIHRoZSBBUEkgc2VydmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RSdWxlc1Jldmlld1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVNlbGZTdWJqZWN0UnVsZXNSZXZpZXdWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RSdWxlc1Jldmlld1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1NlbGZTdWJqZWN0UnVsZXNSZXZpZXcnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TZWxmU3ViamVjdFJ1bGVzUmV2aWV3XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTZWxmU3ViamVjdFJ1bGVzUmV2aWV3VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVNlbGZTdWJqZWN0UnVsZXNSZXZpZXdWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RSdWxlc1Jldmlld1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVNlbGZTdWJqZWN0UnVsZXNSZXZpZXdWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTZWxmU3ViamVjdFJ1bGVzUmV2aWV3VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciBub3QgYSB1c2VyIG9yIGdyb3VwIGNhbiBwZXJmb3JtIGFuIGFjdGlvbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlN1YmplY3RBY2Nlc3NSZXZpZXdcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1dGhvcml6YXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdTdWJqZWN0QWNjZXNzUmV2aWV3JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU3ViamVjdEFjY2Vzc1Jldmlld1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3ViamVjdEFjY2Vzc1Jldmlld1YxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlN1YmplY3RBY2Nlc3NSZXZpZXdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU3ViamVjdEFjY2Vzc1Jldmlld1YxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIGNvbmZpZ3VyYXRpb24gb2YgYSBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclxuICovXG5leHBvcnQgY2xhc3MgS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0b3NjYWxpbmcvdjEnLFxuICAgIGtpbmQ6ICdIb3Jpem9udGFsUG9kQXV0b3NjYWxlcicsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlci5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlclByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlci5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogbGlzdCBvZiBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYxLkhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhdXRvc2NhbGluZy92MScsXG4gICAga2luZDogJ0hvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYxLkhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTY2FsZSByZXByZXNlbnRzIGEgc2NhbGluZyByZXF1ZXN0IGZvciBhIHJlc291cmNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5TY2FsZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZVNjYWxlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5TY2FsZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0b3NjYWxpbmcvdjEnLFxuICAgIGtpbmQ6ICdTY2FsZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuU2NhbGVcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVNjYWxlUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTY2FsZS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuU2NhbGVcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTY2FsZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTY2FsZS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXIgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgaG9yaXpvbnRhbCBwb2QgYXV0b3NjYWxlciwgd2hpY2ggYXV0b21hdGljYWxseSBtYW5hZ2VzIHRoZSByZXBsaWNhIGNvdW50IG9mIGFueSByZXNvdXJjZSBpbXBsZW1lbnRpbmcgdGhlIHNjYWxlIHN1YnJlc291cmNlIGJhc2VkIG9uIHRoZSBtZXRyaWNzIHNwZWNpZmllZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclxuICovXG5leHBvcnQgY2xhc3MgS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyVjJCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXV0b3NjYWxpbmcvdjJiZXRhMScsXG4gICAga2luZDogJ0hvcml6b250YWxQb2RBdXRvc2NhbGVyJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGExLkhvcml6b250YWxQb2RBdXRvc2NhbGVyXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlclYyQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyVjJCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyVjJCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlclYyQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEhvcml6b250YWxQb2RBdXRvc2NhbGVyIGlzIGEgbGlzdCBvZiBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0VjJCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1dG9zY2FsaW5nL3YyYmV0YTEnLFxuICAgIGtpbmQ6ICdIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0VjJCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIb3Jpem9udGFsUG9kQXV0b3NjYWxlciBpcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgYSBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyLCB3aGljaCBhdXRvbWF0aWNhbGx5IG1hbmFnZXMgdGhlIHJlcGxpY2EgY291bnQgb2YgYW55IHJlc291cmNlIGltcGxlbWVudGluZyB0aGUgc2NhbGUgc3VicmVzb3VyY2UgYmFzZWQgb24gdGhlIG1ldHJpY3Mgc3BlY2lmaWVkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJWMkJldGEyIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhdXRvc2NhbGluZy92MmJldGEyJyxcbiAgICBraW5kOiAnSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXInLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyVjJCZXRhMlByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJWMkJldGEyLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJWMkJldGEyUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyVjJCZXRhMi5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0IGlzIGEgbGlzdCBvZiBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0VjJCZXRhMiBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2F1dG9zY2FsaW5nL3YyYmV0YTInLFxuICAgIGtpbmQ6ICdIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGEyUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0VjJCZXRhMi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGEyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGEyLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBKb2IgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHNpbmdsZSBqb2IuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxLkpvYlxuICovXG5leHBvcnQgY2xhc3MgS3ViZUpvYiBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYmF0Y2gudjEuSm9iXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdiYXRjaC92MScsXG4gICAga2luZDogJ0pvYicsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYmF0Y2gudjEuSm9iXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVKb2JQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUpvYi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYmF0Y2gudjEuSm9iXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlSm9iUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUpvYi5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogSm9iTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2Ygam9icy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUpvYkxpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmJhdGNoLnYxLkpvYkxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2JhdGNoL3YxJyxcbiAgICBraW5kOiAnSm9iTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYmF0Y2gudjEuSm9iTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlSm9iTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUpvYkxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmJhdGNoLnYxLkpvYkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVKb2JMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVKb2JMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcm9uSm9iIHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBzaW5nbGUgY3JvbiBqb2IuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxYmV0YTEuQ3JvbkpvYlxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNyb25Kb2JWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5iYXRjaC52MWJldGExLkNyb25Kb2JcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2JhdGNoL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDcm9uSm9iJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5iYXRjaC52MWJldGExLkNyb25Kb2JcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNyb25Kb2JWMUJldGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDcm9uSm9iVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYmF0Y2gudjFiZXRhMS5Dcm9uSm9iXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ3JvbkpvYlYxQmV0YTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ3JvbkpvYlYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENyb25Kb2JMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBjcm9uIGpvYnMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxYmV0YTEuQ3JvbkpvYkxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDcm9uSm9iTGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmJhdGNoLnYxYmV0YTEuQ3JvbkpvYkxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2JhdGNoL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDcm9uSm9iTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuYmF0Y2gudjFiZXRhMS5Dcm9uSm9iTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ3JvbkpvYkxpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ3JvbkpvYkxpc3RWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5iYXRjaC52MWJldGExLkNyb25Kb2JMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ3JvbkpvYkxpc3RWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDcm9uSm9iTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENyb25Kb2IgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHNpbmdsZSBjcm9uIGpvYi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNyb25Kb2JWMkFscGhhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYmF0Y2gvdjJhbHBoYTEnLFxuICAgIGtpbmQ6ICdDcm9uSm9iJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDcm9uSm9iVjJBbHBoYTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNyb25Kb2JWMkFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNyb25Kb2JWMkFscGhhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDcm9uSm9iVjJBbHBoYTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENyb25Kb2JMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBjcm9uIGpvYnMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYyYWxwaGExLkNyb25Kb2JMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ3JvbkpvYkxpc3RWMkFscGhhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYkxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2JhdGNoL3YyYWxwaGExJyxcbiAgICBraW5kOiAnQ3JvbkpvYkxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmJhdGNoLnYyYWxwaGExLkNyb25Kb2JMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDcm9uSm9iTGlzdFYyQWxwaGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ3JvbkpvYkxpc3RWMkFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDcm9uSm9iTGlzdFYyQWxwaGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDcm9uSm9iTGlzdFYyQWxwaGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3RcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdjZXJ0aWZpY2F0ZXMuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0VjFCZXRhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNlcnRpZmljYXRlcy52MWJldGExLkNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0VjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0TGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNlcnRpZmljYXRlcy52MWJldGExLkNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdjZXJ0aWZpY2F0ZXMuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0TGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RMaXN0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTGVhc2UgZGVmaW5lcyBhIGxlYXNlIGNvbmNlcHQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZUxlYXNlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb29yZGluYXRpb24udjEuTGVhc2VcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2Nvb3JkaW5hdGlvbi5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdMZWFzZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxLkxlYXNlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVMZWFzZVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTGVhc2UuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUxlYXNlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUxlYXNlLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMZWFzZUxpc3QgaXMgYSBsaXN0IG9mIExlYXNlIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVMZWFzZUxpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2Nvb3JkaW5hdGlvbi5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdMZWFzZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUxlYXNlTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUxlYXNlTGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxLkxlYXNlTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUxlYXNlTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTGVhc2VMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMZWFzZSBkZWZpbmVzIGEgbGVhc2UgY29uY2VwdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVMZWFzZVYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdjb29yZGluYXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdMZWFzZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUxlYXNlVjFCZXRhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTGVhc2VWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb29yZGluYXRpb24udjFiZXRhMS5MZWFzZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUxlYXNlVjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVMZWFzZVYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIExlYXNlTGlzdCBpcyBhIGxpc3Qgb2YgTGVhc2Ugb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlTGVhc2VMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdjb29yZGluYXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdMZWFzZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlTGVhc2VMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUxlYXNlTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUxlYXNlTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUxlYXNlTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEJpbmRpbmcgdGllcyBvbmUgb2JqZWN0IHRvIGFub3RoZXI7IGZvciBleGFtcGxlLCBhIHBvZCBpcyBib3VuZCB0byBhIG5vZGUgYnkgYSBzY2hlZHVsZXIuIERlcHJlY2F0ZWQgaW4gMS43LCBwbGVhc2UgdXNlIHRoZSBiaW5kaW5ncyBzdWJyZXNvdXJjZSBvZiBwb2RzIGluc3RlYWQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgS3ViZUJpbmRpbmcgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuQmluZGluZ1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdCaW5kaW5nJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLkJpbmRpbmdcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUJpbmRpbmdQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVCaW5kaW5nLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLkJpbmRpbmdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVCaW5kaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVCaW5kaW5nLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wb25lbnRTdGF0dXMgKGFuZCBDb21wb25lbnRTdGF0dXNMaXN0KSBob2xkcyB0aGUgY2x1c3RlciB2YWxpZGF0aW9uIGluZm8uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ29tcG9uZW50U3RhdHVzIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLkNvbXBvbmVudFN0YXR1c1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdDb21wb25lbnRTdGF0dXMnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDb21wb25lbnRTdGF0dXNQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNvbXBvbmVudFN0YXR1cy5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5Db21wb25lbnRTdGF0dXNcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDb21wb25lbnRTdGF0dXNQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ29tcG9uZW50U3RhdHVzLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGF0dXMgb2YgYWxsIHRoZSBjb25kaXRpb25zIGZvciB0aGUgY29tcG9uZW50IGFzIGEgbGlzdCBvZiBDb21wb25lbnRTdGF0dXMgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db21wb25lbnRTdGF0dXNMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ29tcG9uZW50U3RhdHVzTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Db21wb25lbnRTdGF0dXNMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0NvbXBvbmVudFN0YXR1c0xpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ29tcG9uZW50U3RhdHVzTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNvbXBvbmVudFN0YXR1c0xpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNvbXBvbmVudFN0YXR1c0xpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNvbXBvbmVudFN0YXR1c0xpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ01hcCBob2xkcyBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHBvZHMgdG8gY29uc3VtZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDb25maWdNYXAgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0NvbmZpZ01hcCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNvbmZpZ01hcFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ29uZmlnTWFwLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNvbmZpZ01hcFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDb25maWdNYXAubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ01hcExpc3QgaXMgYSByZXNvdXJjZSBjb250YWluaW5nIGEgbGlzdCBvZiBDb25maWdNYXAgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ29uZmlnTWFwTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0NvbmZpZ01hcExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ29uZmlnTWFwTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNvbmZpZ01hcExpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNvbmZpZ01hcExpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNvbmZpZ01hcExpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEVuZHBvaW50cyBpcyBhIGNvbGxlY3Rpb24gb2YgZW5kcG9pbnRzIHRoYXQgaW1wbGVtZW50IHRoZSBhY3R1YWwgc2VydmljZS4gRXhhbXBsZTpcbiAgTmFtZTogXCJteXN2Y1wiLFxuICBTdWJzZXRzOiBbXG4gICAge1xuICAgICAgQWRkcmVzc2VzOiBbe1wiaXBcIjogXCIxMC4xMC4xLjFcIn0sIHtcImlwXCI6IFwiMTAuMTAuMi4yXCJ9XSxcbiAgICAgIFBvcnRzOiBbe1wibmFtZVwiOiBcImFcIiwgXCJwb3J0XCI6IDg2NzV9LCB7XCJuYW1lXCI6IFwiYlwiLCBcInBvcnRcIjogMzA5fV1cbiAgICB9LFxuICAgIHtcbiAgICAgIEFkZHJlc3NlczogW3tcImlwXCI6IFwiMTAuMTAuMy4zXCJ9XSxcbiAgICAgIFBvcnRzOiBbe1wibmFtZVwiOiBcImFcIiwgXCJwb3J0XCI6IDkzfSwge1wibmFtZVwiOiBcImJcIiwgXCJwb3J0XCI6IDc2fV1cbiAgICB9LFxuIF1cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludHNcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVFbmRwb2ludHMgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRzXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0VuZHBvaW50cycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludHNcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUVuZHBvaW50c1Byb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlRW5kcG9pbnRzLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50c1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUVuZHBvaW50c1Byb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVFbmRwb2ludHMubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEVuZHBvaW50c0xpc3QgaXMgYSBsaXN0IG9mIGVuZHBvaW50cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludHNMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRW5kcG9pbnRzTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludHNMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0VuZHBvaW50c0xpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlRW5kcG9pbnRzTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUVuZHBvaW50c0xpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRzTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUVuZHBvaW50c0xpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUVuZHBvaW50c0xpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEV2ZW50IGlzIGEgcmVwb3J0IG9mIGFuIGV2ZW50IHNvbWV3aGVyZSBpbiB0aGUgY2x1c3Rlci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUV2ZW50IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0V2ZW50JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVFdmVudFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUV2ZW50LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRXZlbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUV2ZW50Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmVudExpc3QgaXMgYSBsaXN0IG9mIGV2ZW50cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVFdmVudExpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuRXZlbnRMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ0V2ZW50TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5FdmVudExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUV2ZW50TGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUV2ZW50TGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5FdmVudExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVFdmVudExpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUV2ZW50TGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTGltaXRSYW5nZSBzZXRzIHJlc291cmNlIHVzYWdlIGxpbWl0cyBmb3IgZWFjaCBraW5kIG9mIHJlc291cmNlIGluIGEgTmFtZXNwYWNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVMaW1pdFJhbmdlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnTGltaXRSYW5nZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVMaW1pdFJhbmdlUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVMaW1pdFJhbmdlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVMaW1pdFJhbmdlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUxpbWl0UmFuZ2UubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIExpbWl0UmFuZ2VMaXN0IGlzIGEgbGlzdCBvZiBMaW1pdFJhbmdlIGl0ZW1zLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlTGltaXRSYW5nZUxpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnTGltaXRSYW5nZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUxpbWl0UmFuZ2VMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTGltaXRSYW5nZUxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVMaW1pdFJhbmdlTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTGltaXRSYW5nZUxpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIE5hbWVzcGFjZSBwcm92aWRlcyBhIHNjb3BlIGZvciBOYW1lcy4gVXNlIG9mIG11bHRpcGxlIG5hbWVzcGFjZXMgaXMgb3B0aW9uYWwuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTmFtZXNwYWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlTmFtZXNwYWNlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLk5hbWVzcGFjZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdOYW1lc3BhY2UnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuTmFtZXNwYWNlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVOYW1lc3BhY2VQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZU5hbWVzcGFjZS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2VcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVOYW1lc3BhY2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTmFtZXNwYWNlLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBOYW1lc3BhY2VMaXN0IGlzIGEgbGlzdCBvZiBOYW1lc3BhY2VzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5hbWVzcGFjZUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVOYW1lc3BhY2VMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLk5hbWVzcGFjZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnTmFtZXNwYWNlTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2VMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVOYW1lc3BhY2VMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTmFtZXNwYWNlTGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2VMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlTmFtZXNwYWNlTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTmFtZXNwYWNlTGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTm9kZSBpcyBhIHdvcmtlciBub2RlIGluIEt1YmVybmV0ZXMuIEVhY2ggbm9kZSB3aWxsIGhhdmUgYSB1bmlxdWUgaWRlbnRpZmllciBpbiB0aGUgY2FjaGUgKGkuZS4gaW4gZXRjZCkuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZU5vZGUgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuTm9kZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdOb2RlJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZU5vZGVQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZU5vZGUuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuTm9kZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZU5vZGVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTm9kZS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTm9kZUxpc3QgaXMgdGhlIHdob2xlIGxpc3Qgb2YgYWxsIE5vZGVzIHdoaWNoIGhhdmUgYmVlbiByZWdpc3RlcmVkIHdpdGggbWFzdGVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlTm9kZUxpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuTm9kZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnTm9kZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuTm9kZUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZU5vZGVMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlTm9kZUxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuTm9kZUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVOb2RlTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTm9kZUxpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcnNpc3RlbnRWb2x1bWUgKFBWKSBpcyBhIHN0b3JhZ2UgcmVzb3VyY2UgcHJvdmlzaW9uZWQgYnkgYW4gYWRtaW5pc3RyYXRvci4gSXQgaXMgYW5hbG9nb3VzIHRvIGEgbm9kZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQZXJzaXN0ZW50Vm9sdW1lIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnUGVyc2lzdGVudFZvbHVtZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVQZXJzaXN0ZW50Vm9sdW1lUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQZXJzaXN0ZW50Vm9sdW1lLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVQZXJzaXN0ZW50Vm9sdW1lUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVBlcnNpc3RlbnRWb2x1bWUubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyBhIHVzZXIncyByZXF1ZXN0IGZvciBhbmQgY2xhaW0gdG8gYSBwZXJzaXN0ZW50IHZvbHVtZVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVxuICovXG5leHBvcnQgY2xhc3MgS3ViZVBlcnNpc3RlbnRWb2x1bWVDbGFpbSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnUGVyc2lzdGVudFZvbHVtZUNsYWltJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVBlcnNpc3RlbnRWb2x1bWVDbGFpbS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdCBpcyBhIGxpc3Qgb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltIGl0ZW1zLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUGVyc2lzdGVudFZvbHVtZUxpc3QgaXMgYSBsaXN0IG9mIFBlcnNpc3RlbnRWb2x1bWUgaXRlbXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQZXJzaXN0ZW50Vm9sdW1lTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdQZXJzaXN0ZW50Vm9sdW1lTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUGVyc2lzdGVudFZvbHVtZUxpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQZXJzaXN0ZW50Vm9sdW1lTGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVBlcnNpc3RlbnRWb2x1bWVMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVQZXJzaXN0ZW50Vm9sdW1lTGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUG9kIGlzIGEgY29sbGVjdGlvbiBvZiBjb250YWluZXJzIHRoYXQgY2FuIHJ1biBvbiBhIGhvc3QuIFRoaXMgcmVzb3VyY2UgaXMgY3JlYXRlZCBieSBjbGllbnRzIGFuZCBzY2hlZHVsZWQgb250byBob3N0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQb2QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuUG9kXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1BvZCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Qb2RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVBvZFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUG9kLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBvZFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVBvZFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVQb2QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFBvZExpc3QgaXMgYSBsaXN0IG9mIFBvZHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVBvZExpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuUG9kTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdQb2RMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBvZExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVBvZExpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQb2RMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBvZExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVQb2RMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVQb2RMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQb2RUZW1wbGF0ZSBkZXNjcmliZXMgYSB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgY29waWVzIG9mIGEgcHJlZGVmaW5lZCBwb2QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kVGVtcGxhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQb2RUZW1wbGF0ZSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Qb2RUZW1wbGF0ZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdQb2RUZW1wbGF0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Qb2RUZW1wbGF0ZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUG9kVGVtcGxhdGVQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVBvZFRlbXBsYXRlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUG9kVGVtcGxhdGVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUG9kVGVtcGxhdGUubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFBvZFRlbXBsYXRlTGlzdCBpcyBhIGxpc3Qgb2YgUG9kVGVtcGxhdGVzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVBvZFRlbXBsYXRlTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5Qb2RUZW1wbGF0ZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICBraW5kOiAnUG9kVGVtcGxhdGVMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUG9kVGVtcGxhdGVMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUG9kVGVtcGxhdGVMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVBvZFRlbXBsYXRlTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUG9kVGVtcGxhdGVMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBsaWNhdGlvbkNvbnRyb2xsZXIgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVwbGljYXRpb25Db250cm9sbGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUmVwbGljYXRpb25Db250cm9sbGVyIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdSZXBsaWNhdGlvbkNvbnRyb2xsZXInLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuUmVwbGljYXRpb25Db250cm9sbGVyXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVSZXBsaWNhdGlvbkNvbnRyb2xsZXJQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJlcGxpY2F0aW9uQ29udHJvbGxlci5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSZXBsaWNhdGlvbkNvbnRyb2xsZXJQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUmVwbGljYXRpb25Db250cm9sbGVyLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVycy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUmVwbGljYXRpb25Db250cm9sbGVyTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1JlcGxpY2F0aW9uQ29udHJvbGxlckxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc291cmNlUXVvdGEgc2V0cyBhZ2dyZWdhdGUgcXVvdGEgcmVzdHJpY3Rpb25zIGVuZm9yY2VkIHBlciBuYW1lc3BhY2VcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUmVzb3VyY2VRdW90YSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1Jlc291cmNlUXVvdGEnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuUmVzb3VyY2VRdW90YVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUmVzb3VyY2VRdW90YVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUmVzb3VyY2VRdW90YS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUmVzb3VyY2VRdW90YVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSZXNvdXJjZVF1b3RhLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvdXJjZVF1b3RhTGlzdCBpcyBhIGxpc3Qgb2YgUmVzb3VyY2VRdW90YSBpdGVtcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJlc291cmNlUXVvdGFMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGFMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1Jlc291cmNlUXVvdGFMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGFMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVSZXNvdXJjZVF1b3RhTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJlc291cmNlUXVvdGFMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGFMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUmVzb3VyY2VRdW90YUxpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJlc291cmNlUXVvdGFMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWNyZXQgaG9sZHMgc2VjcmV0IGRhdGEgb2YgYSBjZXJ0YWluIHR5cGUuIFRoZSB0b3RhbCBieXRlcyBvZiB0aGUgdmFsdWVzIGluIHRoZSBEYXRhIGZpZWxkIG11c3QgYmUgbGVzcyB0aGFuIE1heFNlY3JldFNpemUgYnl0ZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU2VjcmV0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdTZWNyZXQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTZWNyZXRQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVNlY3JldC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTZWNyZXRQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU2VjcmV0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWNyZXRMaXN0IGlzIGEgbGlzdCBvZiBTZWNyZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0TGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVNlY3JldExpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdTZWNyZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVNlY3JldExpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTZWNyZXRMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTZWNyZXRMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTZWNyZXRMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGlzIGEgbmFtZWQgYWJzdHJhY3Rpb24gb2Ygc29mdHdhcmUgc2VydmljZSAoZm9yIGV4YW1wbGUsIG15c3FsKSBjb25zaXN0aW5nIG9mIGxvY2FsIHBvcnQgKGZvciBleGFtcGxlIDMzMDYpIHRoYXQgdGhlIHByb3h5IGxpc3RlbnMgb24sIGFuZCB0aGUgc2VsZWN0b3IgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIHBvZHMgd2lsbCBhbnN3ZXIgcmVxdWVzdHMgc2VudCB0aHJvdWdoIHRoZSBwcm94eS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU2VydmljZSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1NlcnZpY2UnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU2VydmljZVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU2VydmljZS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlU2VydmljZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTZXJ2aWNlLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlQWNjb3VudCBiaW5kcyB0b2dldGhlcjogKiBhIG5hbWUsIHVuZGVyc3Rvb2QgYnkgdXNlcnMsIGFuZCBwZXJoYXBzIGJ5IHBlcmlwaGVyYWwgc3lzdGVtcywgZm9yIGFuIGlkZW50aXR5ICogYSBwcmluY2lwYWwgdGhhdCBjYW4gYmUgYXV0aGVudGljYXRlZCBhbmQgYXV0aG9yaXplZCAqIGEgc2V0IG9mIHNlY3JldHNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlQWNjb3VudFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVNlcnZpY2VBY2NvdW50IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1NlcnZpY2VBY2NvdW50JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTZXJ2aWNlQWNjb3VudFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU2VydmljZUFjY291bnQuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTZXJ2aWNlQWNjb3VudFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTZXJ2aWNlQWNjb3VudC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogU2VydmljZUFjY291bnRMaXN0IGlzIGEgbGlzdCBvZiBTZXJ2aWNlQWNjb3VudCBvYmplY3RzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlU2VydmljZUFjY291bnRMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIGtpbmQ6ICdTZXJ2aWNlQWNjb3VudExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTZXJ2aWNlQWNjb3VudExpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTZXJ2aWNlQWNjb3VudExpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlU2VydmljZUFjY291bnRMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTZXJ2aWNlQWNjb3VudExpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlcnZpY2VMaXN0IGhvbGRzIGEgbGlzdCBvZiBzZXJ2aWNlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVNlcnZpY2VMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1NlcnZpY2VMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTZXJ2aWNlTGlzdFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVNlcnZpY2VMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlU2VydmljZUxpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVNlcnZpY2VMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmVudCBpcyBhIHJlcG9ydCBvZiBhbiBldmVudCBzb21ld2hlcmUgaW4gdGhlIGNsdXN0ZXIuIEl0IGdlbmVyYWxseSBkZW5vdGVzIHNvbWUgc3RhdGUgY2hhbmdlIGluIHRoZSBzeXN0ZW0uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRXZlbnRWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZXZlbnRzLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnRXZlbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVFdmVudFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVFdmVudFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRXZlbnRWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVFdmVudFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEV2ZW50TGlzdCBpcyBhIGxpc3Qgb2YgRXZlbnQgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXZlbnRzLnYxYmV0YTEuRXZlbnRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlRXZlbnRMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuZXZlbnRzLnYxYmV0YTEuRXZlbnRMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdldmVudHMuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdFdmVudExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlRXZlbnRMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUV2ZW50TGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUV2ZW50TGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUV2ZW50TGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgRGFlbW9uU2V0IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MWJldGEyL0RhZW1vblNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBEYWVtb25TZXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGRhZW1vbiBzZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVEYWVtb25TZXRWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdleHRlbnNpb25zL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdEYWVtb25TZXQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZURhZW1vblNldFYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZURhZW1vblNldFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVEYWVtb25TZXRWMUJldGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZURhZW1vblNldFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERhZW1vblNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIGRhZW1vbiBzZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0TGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZURhZW1vblNldExpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZXh0ZW5zaW9ucy92MWJldGExJyxcbiAgICBraW5kOiAnRGFlbW9uU2V0TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRhZW1vblNldExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZURhZW1vblNldExpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlRGFlbW9uU2V0TGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlRGFlbW9uU2V0TGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZURhZW1vblNldExpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmdyZXNzIGlzIGEgY29sbGVjdGlvbiBvZiBydWxlcyB0aGF0IGFsbG93IGluYm91bmQgY29ubmVjdGlvbnMgdG8gcmVhY2ggdGhlIGVuZHBvaW50cyBkZWZpbmVkIGJ5IGEgYmFja2VuZC4gQW4gSW5ncmVzcyBjYW4gYmUgY29uZmlndXJlZCB0byBnaXZlIHNlcnZpY2VzIGV4dGVybmFsbHktcmVhY2hhYmxlIHVybHMsIGxvYWQgYmFsYW5jZSB0cmFmZmljLCB0ZXJtaW5hdGUgU1NMLCBvZmZlciBuYW1lIGJhc2VkIHZpcnR1YWwgaG9zdGluZyBldGMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlSW5ncmVzc1YxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICduZXR3b3JraW5nLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnSW5ncmVzcycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUluZ3Jlc3NWMUJldGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVJbmdyZXNzVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVJbmdyZXNzVjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVJbmdyZXNzVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogSW5ncmVzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIEluZ3Jlc3MuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUluZ3Jlc3NMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICduZXR3b3JraW5nLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnSW5ncmVzc0xpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlSW5ncmVzc0xpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlSW5ncmVzc0xpc3RWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVJbmdyZXNzTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUluZ3Jlc3NMaXN0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAxLjkgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgTmV0d29ya1BvbGljeSBpcyBkZXByZWNhdGVkIGJ5IG5ldHdvcmtpbmcvdjEvTmV0d29ya1BvbGljeS4gTmV0d29ya1BvbGljeSBkZXNjcmliZXMgd2hhdCBuZXR3b3JrIHRyYWZmaWMgaXMgYWxsb3dlZCBmb3IgYSBzZXQgb2YgUG9kc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuTmV0d29ya1BvbGljeVxuICovXG5leHBvcnQgY2xhc3MgS3ViZU5ldHdvcmtQb2xpY3lWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuTmV0d29ya1BvbGljeVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZXh0ZW5zaW9ucy92MWJldGExJyxcbiAgICBraW5kOiAnTmV0d29ya1BvbGljeScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLk5ldHdvcmtQb2xpY3lcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZU5ldHdvcmtQb2xpY3lWMUJldGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVOZXR3b3JrUG9saWN5VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLk5ldHdvcmtQb2xpY3lcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVOZXR3b3JrUG9saWN5VjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVOZXR3b3JrUG9saWN5VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAxLjkgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgTmV0d29ya1BvbGljeUxpc3QgaXMgZGVwcmVjYXRlZCBieSBuZXR3b3JraW5nL3YxL05ldHdvcmtQb2xpY3lMaXN0LiBOZXR3b3JrIFBvbGljeSBMaXN0IGlzIGEgbGlzdCBvZiBOZXR3b3JrUG9saWN5IG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5OZXR3b3JrUG9saWN5TGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZU5ldHdvcmtQb2xpY3lMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLk5ldHdvcmtQb2xpY3lMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdleHRlbnNpb25zL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdOZXR3b3JrUG9saWN5TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLk5ldHdvcmtQb2xpY3lMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVOZXR3b3JrUG9saWN5TGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVOZXR3b3JrUG9saWN5TGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5OZXR3b3JrUG9saWN5TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZU5ldHdvcmtQb2xpY3lMaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlTmV0d29ya1BvbGljeUxpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQb2RTZWN1cml0eVBvbGljeSBnb3Zlcm5zIHRoZSBhYmlsaXR5IHRvIG1ha2UgcmVxdWVzdHMgdGhhdCBhZmZlY3QgdGhlIFNlY3VyaXR5IENvbnRleHQgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gYSBwb2QgYW5kIGNvbnRhaW5lci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQb2RTZWN1cml0eVBvbGljeVYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdwb2xpY3kvdjFiZXRhMScsXG4gICAga2luZDogJ1BvZFNlY3VyaXR5UG9saWN5JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUG9kU2VjdXJpdHlQb2xpY3lWMUJldGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQb2RTZWN1cml0eVBvbGljeVYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUG9kU2VjdXJpdHlQb2xpY3lWMUJldGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVBvZFNlY3VyaXR5UG9saWN5VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUG9kU2VjdXJpdHlQb2xpY3lMaXN0IGlzIGEgbGlzdCBvZiBQb2RTZWN1cml0eVBvbGljeSBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQb2RTZWN1cml0eVBvbGljeUxpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3BvbGljeS92MWJldGExJyxcbiAgICBraW5kOiAnUG9kU2VjdXJpdHlQb2xpY3lMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVBvZFNlY3VyaXR5UG9saWN5TGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQb2RTZWN1cml0eVBvbGljeUxpc3RWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVQb2RTZWN1cml0eVBvbGljeUxpc3RWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVQb2RTZWN1cml0eVBvbGljeUxpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIFJlcGxpY2FTZXQgaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxYmV0YTIvUmVwbGljYVNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBSZXBsaWNhU2V0IGVuc3VyZXMgdGhhdCBhIHNwZWNpZmllZCBudW1iZXIgb2YgcG9kIHJlcGxpY2FzIGFyZSBydW5uaW5nIGF0IGFueSBnaXZlbiB0aW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJlcGxpY2FTZXRWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZXh0ZW5zaW9ucy92MWJldGExJyxcbiAgICBraW5kOiAnUmVwbGljYVNldCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVJlcGxpY2FTZXRWMUJldGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVSZXBsaWNhU2V0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSZXBsaWNhU2V0VjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSZXBsaWNhU2V0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUmVwbGljYVNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFJlcGxpY2FTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVSZXBsaWNhU2V0TGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5SZXBsaWNhU2V0TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZXh0ZW5zaW9ucy92MWJldGExJyxcbiAgICBraW5kOiAnUmVwbGljYVNldExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5SZXBsaWNhU2V0TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUmVwbGljYVNldExpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUmVwbGljYVNldExpc3RWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSZXBsaWNhU2V0TGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJlcGxpY2FTZXRMaXN0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTmV0d29ya1BvbGljeSBkZXNjcmliZXMgd2hhdCBuZXR3b3JrIHRyYWZmaWMgaXMgYWxsb3dlZCBmb3IgYSBzZXQgb2YgUG9kc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVOZXR3b3JrUG9saWN5IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ25ldHdvcmtpbmcuazhzLmlvL3YxJyxcbiAgICBraW5kOiAnTmV0d29ya1BvbGljeScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVOZXR3b3JrUG9saWN5UHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVOZXR3b3JrUG9saWN5LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVOZXR3b3JrUG9saWN5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZU5ldHdvcmtQb2xpY3kubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIE5ldHdvcmtQb2xpY3lMaXN0IGlzIGEgbGlzdCBvZiBOZXR3b3JrUG9saWN5IG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVOZXR3b3JrUG9saWN5TGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnbmV0d29ya2luZy5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdOZXR3b3JrUG9saWN5TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlTmV0d29ya1BvbGljeUxpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVOZXR3b3JrUG9saWN5TGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZU5ldHdvcmtQb2xpY3lMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVOZXR3b3JrUG9saWN5TGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUnVudGltZUNsYXNzIGRlZmluZXMgYSBjbGFzcyBvZiBjb250YWluZXIgcnVudGltZSBzdXBwb3J0ZWQgaW4gdGhlIGNsdXN0ZXIuIFRoZSBSdW50aW1lQ2xhc3MgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggY29udGFpbmVyIHJ1bnRpbWUgaXMgdXNlZCB0byBydW4gYWxsIGNvbnRhaW5lcnMgaW4gYSBwb2QuIFJ1bnRpbWVDbGFzc2VzIGFyZSAoY3VycmVudGx5KSBtYW51YWxseSBkZWZpbmVkIGJ5IGEgdXNlciBvciBjbHVzdGVyIHByb3Zpc2lvbmVyLCBhbmQgcmVmZXJlbmNlZCBpbiB0aGUgUG9kU3BlYy4gVGhlIEt1YmVsZXQgaXMgcmVzcG9uc2libGUgZm9yIHJlc29sdmluZyB0aGUgUnVudGltZUNsYXNzTmFtZSByZWZlcmVuY2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHBvZC4gIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL2dpdC5rOHMuaW8vZW5oYW5jZW1lbnRzL2tlcHMvc2lnLW5vZGUvcnVudGltZS1jbGFzcy5tZFxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVJ1bnRpbWVDbGFzc1YxQWxwaGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnbm9kZS5rOHMuaW8vdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdSdW50aW1lQ2xhc3MnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLm5vZGUudjFhbHBoYTEuUnVudGltZUNsYXNzXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVSdW50aW1lQ2xhc3NWMUFscGhhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJ1bnRpbWVDbGFzc1YxQWxwaGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJ1bnRpbWVDbGFzc1YxQWxwaGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSdW50aW1lQ2xhc3NWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUnVudGltZUNsYXNzTGlzdCBpcyBhIGxpc3Qgb2YgUnVudGltZUNsYXNzIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5vZGUudjFhbHBoYTEuUnVudGltZUNsYXNzTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJ1bnRpbWVDbGFzc0xpc3RWMUFscGhhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkubm9kZS52MWFscGhhMS5SdW50aW1lQ2xhc3NMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdub2RlLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ1J1bnRpbWVDbGFzc0xpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLm5vZGUudjFhbHBoYTEuUnVudGltZUNsYXNzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUnVudGltZUNsYXNzTGlzdFYxQWxwaGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUnVudGltZUNsYXNzTGlzdFYxQWxwaGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSdW50aW1lQ2xhc3NMaXN0VjFBbHBoYTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJ1bnRpbWVDbGFzc0xpc3RWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUnVudGltZUNsYXNzIGRlZmluZXMgYSBjbGFzcyBvZiBjb250YWluZXIgcnVudGltZSBzdXBwb3J0ZWQgaW4gdGhlIGNsdXN0ZXIuIFRoZSBSdW50aW1lQ2xhc3MgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggY29udGFpbmVyIHJ1bnRpbWUgaXMgdXNlZCB0byBydW4gYWxsIGNvbnRhaW5lcnMgaW4gYSBwb2QuIFJ1bnRpbWVDbGFzc2VzIGFyZSAoY3VycmVudGx5KSBtYW51YWxseSBkZWZpbmVkIGJ5IGEgdXNlciBvciBjbHVzdGVyIHByb3Zpc2lvbmVyLCBhbmQgcmVmZXJlbmNlZCBpbiB0aGUgUG9kU3BlYy4gVGhlIEt1YmVsZXQgaXMgcmVzcG9uc2libGUgZm9yIHJlc29sdmluZyB0aGUgUnVudGltZUNsYXNzTmFtZSByZWZlcmVuY2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHBvZC4gIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL2dpdC5rOHMuaW8vZW5oYW5jZW1lbnRzL2tlcHMvc2lnLW5vZGUvcnVudGltZS1jbGFzcy5tZFxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYmV0YTEuUnVudGltZUNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUnVudGltZUNsYXNzVjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzc1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnbm9kZS5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1J1bnRpbWVDbGFzcycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzc1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUnVudGltZUNsYXNzVjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJ1bnRpbWVDbGFzc1YxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLm5vZGUudjFiZXRhMS5SdW50aW1lQ2xhc3NcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSdW50aW1lQ2xhc3NWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSdW50aW1lQ2xhc3NWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW50aW1lQ2xhc3NMaXN0IGlzIGEgbGlzdCBvZiBSdW50aW1lQ2xhc3Mgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVSdW50aW1lQ2xhc3NMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzc0xpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ25vZGUuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdSdW50aW1lQ2xhc3NMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5ub2RlLnYxYmV0YTEuUnVudGltZUNsYXNzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUnVudGltZUNsYXNzTGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVSdW50aW1lQ2xhc3NMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzc0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSdW50aW1lQ2xhc3NMaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUnVudGltZUNsYXNzTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEV2aWN0aW9uIGV2aWN0cyBhIHBvZCBmcm9tIGl0cyBub2RlIHN1YmplY3QgdG8gY2VydGFpbiBwb2xpY2llcyBhbmQgc2FmZXR5IGNvbnN0cmFpbnRzLiBUaGlzIGlzIGEgc3VicmVzb3VyY2Ugb2YgUG9kLiAgQSByZXF1ZXN0IHRvIGNhdXNlIHN1Y2ggYW4gZXZpY3Rpb24gaXMgY3JlYXRlZCBieSBQT1NUaW5nIHRvIC4uLi9wb2RzLzxwb2QgbmFtZT4vZXZpY3Rpb25zLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5FdmljdGlvblxuICovXG5leHBvcnQgY2xhc3MgS3ViZUV2aWN0aW9uVjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuRXZpY3Rpb25cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3BvbGljeS92MWJldGExJyxcbiAgICBraW5kOiAnRXZpY3Rpb24nLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkV2aWN0aW9uXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVFdmljdGlvblYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUV2aWN0aW9uVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuRXZpY3Rpb25cIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVFdmljdGlvblYxQmV0YTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlRXZpY3Rpb25WMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQb2REaXNydXB0aW9uQnVkZ2V0IGlzIGFuIG9iamVjdCB0byBkZWZpbmUgdGhlIG1heCBkaXNydXB0aW9uIHRoYXQgY2FuIGJlIGNhdXNlZCB0byBhIGNvbGxlY3Rpb24gb2YgcG9kc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZERpc3J1cHRpb25CdWRnZXRcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3BvbGljeS92MWJldGExJyxcbiAgICBraW5kOiAnUG9kRGlzcnVwdGlvbkJ1ZGdldCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kRGlzcnVwdGlvbkJ1ZGdldFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldFYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVBvZERpc3J1cHRpb25CdWRnZXRWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldFYxQmV0YTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFBvZERpc3J1cHRpb25CdWRnZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBQb2REaXNydXB0aW9uQnVkZ2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kRGlzcnVwdGlvbkJ1ZGdldExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQb2REaXNydXB0aW9uQnVkZ2V0TGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZERpc3J1cHRpb25CdWRnZXRMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdwb2xpY3kvdjFiZXRhMScsXG4gICAga2luZDogJ1BvZERpc3J1cHRpb25CdWRnZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldExpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldExpc3RWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVBvZERpc3J1cHRpb25CdWRnZXRMaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldExpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZSBpcyBhIGNsdXN0ZXIgbGV2ZWwsIGxvZ2ljYWwgZ3JvdXBpbmcgb2YgUG9saWN5UnVsZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBhcyBhIHVuaXQgYnkgYSBSb2xlQmluZGluZyBvciBDbHVzdGVyUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDbHVzdGVyUm9sZSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkucmJhYy52MS5DbHVzdGVyUm9sZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MScsXG4gICAga2luZDogJ0NsdXN0ZXJSb2xlJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDbHVzdGVyUm9sZVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ2x1c3RlclJvbGUuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDbHVzdGVyUm9sZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDbHVzdGVyUm9sZS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGVCaW5kaW5nIHJlZmVyZW5jZXMgYSBDbHVzdGVyUm9sZSwgYnV0IG5vdCBjb250YWluIGl0LiAgSXQgY2FuIHJlZmVyZW5jZSBhIENsdXN0ZXJSb2xlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBhbmQgYWRkcyB3aG8gaW5mb3JtYXRpb24gdmlhIFN1YmplY3QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZ1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MScsXG4gICAga2luZDogJ0NsdXN0ZXJSb2xlQmluZGluZycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MS5DbHVzdGVyUm9sZUJpbmRpbmdcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNsdXN0ZXJSb2xlQmluZGluZ1Byb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNsdXN0ZXJSb2xlQmluZGluZy5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MS5DbHVzdGVyUm9sZUJpbmRpbmdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNsdXN0ZXJSb2xlQmluZGluZy5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ2x1c3RlclJvbGVCaW5kaW5nc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdDbHVzdGVyUm9sZUJpbmRpbmdMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNsdXN0ZXJSb2xlQmluZGluZ0xpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIENsdXN0ZXJSb2xlc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNsdXN0ZXJSb2xlTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkucmJhYy52MS5DbHVzdGVyUm9sZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdDbHVzdGVyUm9sZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDbHVzdGVyUm9sZUxpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDbHVzdGVyUm9sZUxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ2x1c3RlclJvbGVMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDbHVzdGVyUm9sZUxpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJvbGUgaXMgYSBuYW1lc3BhY2VkLCBsb2dpY2FsIGdyb3VwaW5nIG9mIFBvbGljeVJ1bGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYXMgYSB1bml0IGJ5IGEgUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuUm9sZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGUgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjEuUm9sZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MScsXG4gICAga2luZDogJ1JvbGUnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjEuUm9sZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUm9sZS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MS5Sb2xlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUm9sZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSb2xlLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb2xlQmluZGluZyByZWZlcmVuY2VzIGEgcm9sZSwgYnV0IGRvZXMgbm90IGNvbnRhaW4gaXQuICBJdCBjYW4gcmVmZXJlbmNlIGEgUm9sZSBpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugb3IgYSBDbHVzdGVyUm9sZSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gSXQgYWRkcyB3aG8gaW5mb3JtYXRpb24gdmlhIFN1YmplY3RzIGFuZCBuYW1lc3BhY2UgaW5mb3JtYXRpb24gYnkgd2hpY2ggbmFtZXNwYWNlIGl0IGV4aXN0cyBpbi4gIFJvbGVCaW5kaW5ncyBpbiBhIGdpdmVuIG5hbWVzcGFjZSBvbmx5IGhhdmUgZWZmZWN0IGluIHRoYXQgbmFtZXNwYWNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUm9sZUJpbmRpbmcgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjEuUm9sZUJpbmRpbmdcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdSb2xlQmluZGluZycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MS5Sb2xlQmluZGluZ1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZUJpbmRpbmdQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVSb2xlQmluZGluZy5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MS5Sb2xlQmluZGluZ1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJvbGVCaW5kaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSb2xlQmluZGluZy5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUm9sZUJpbmRpbmdMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBSb2xlQmluZGluZ3NcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MS5Sb2xlQmluZGluZ0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVSb2xlQmluZGluZ0xpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjEuUm9sZUJpbmRpbmdMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnUm9sZUJpbmRpbmdMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVCaW5kaW5nTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZUJpbmRpbmdMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUm9sZUJpbmRpbmdMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVCaW5kaW5nTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJvbGVCaW5kaW5nTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUm9sZUJpbmRpbmdMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZXNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MS5Sb2xlTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGVMaXN0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnUm9sZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjEuUm9sZUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVJvbGVMaXN0UHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUm9sZUxpc3QuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjEuUm9sZUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSb2xlTGlzdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUm9sZUxpc3QubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlIGlzIGEgY2x1c3RlciBsZXZlbCwgbG9naWNhbCBncm91cGluZyBvZiBQb2xpY3lSdWxlcyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGFzIGEgdW5pdCBieSBhIFJvbGVCaW5kaW5nIG9yIENsdXN0ZXJSb2xlQmluZGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNsdXN0ZXJSb2xlVjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdDbHVzdGVyUm9sZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ2x1c3RlclJvbGVWMUFscGhhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ2x1c3RlclJvbGVWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNsdXN0ZXJSb2xlVjFBbHBoYTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ2x1c3RlclJvbGVWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGVCaW5kaW5nIHJlZmVyZW5jZXMgYSBDbHVzdGVyUm9sZSwgYnV0IG5vdCBjb250YWluIGl0LiAgSXQgY2FuIHJlZmVyZW5jZSBhIENsdXN0ZXJSb2xlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBhbmQgYWRkcyB3aG8gaW5mb3JtYXRpb24gdmlhIFN1YmplY3QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nVjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxYWxwaGExJyxcbiAgICBraW5kOiAnQ2x1c3RlclJvbGVCaW5kaW5nJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlQmluZGluZ1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nVjFBbHBoYTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDbHVzdGVyUm9sZUJpbmRpbmdWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZUJpbmRpbmdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdWMUFscGhhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nVjFBbHBoYTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlQmluZGluZ0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIENsdXN0ZXJSb2xlQmluZGluZ3NcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFYxQWxwaGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdDbHVzdGVyUm9sZUJpbmRpbmdMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNsdXN0ZXJSb2xlQmluZGluZ0xpc3RWMUFscGhhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNsdXN0ZXJSb2xlQmluZGluZ0xpc3RWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFYxQWxwaGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0VjFBbHBoYTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ2x1c3RlclJvbGVzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ2x1c3RlclJvbGVMaXN0VjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxYWxwaGExJyxcbiAgICBraW5kOiAnQ2x1c3RlclJvbGVMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQ2x1c3RlclJvbGVMaXN0VjFBbHBoYTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDbHVzdGVyUm9sZUxpc3RWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDbHVzdGVyUm9sZUxpc3RWMUFscGhhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ2x1c3RlclJvbGVMaXN0VjFBbHBoYTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJvbGUgaXMgYSBuYW1lc3BhY2VkLCBsb2dpY2FsIGdyb3VwaW5nIG9mIFBvbGljeVJ1bGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYXMgYSB1bml0IGJ5IGEgUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGVWMUFscGhhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxYWxwaGExJyxcbiAgICBraW5kOiAnUm9sZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVSb2xlVjFBbHBoYTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJvbGVWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUm9sZVYxQWxwaGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJvbGVWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUm9sZUJpbmRpbmcgcmVmZXJlbmNlcyBhIHJvbGUsIGJ1dCBkb2VzIG5vdCBjb250YWluIGl0LiAgSXQgY2FuIHJlZmVyZW5jZSBhIFJvbGUgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIG9yIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIEl0IGFkZHMgd2hvIGluZm9ybWF0aW9uIHZpYSBTdWJqZWN0cyBhbmQgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJ5IHdoaWNoIG5hbWVzcGFjZSBpdCBleGlzdHMgaW4uICBSb2xlQmluZGluZ3MgaW4gYSBnaXZlbiBuYW1lc3BhY2Ugb25seSBoYXZlIGVmZmVjdCBpbiB0aGF0IG5hbWVzcGFjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGVCaW5kaW5nVjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUJpbmRpbmdcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdSb2xlQmluZGluZycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZ1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZUJpbmRpbmdWMUFscGhhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJvbGVCaW5kaW5nVjFBbHBoYTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUJpbmRpbmdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSb2xlQmluZGluZ1YxQWxwaGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSb2xlQmluZGluZ1YxQWxwaGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb2xlQmluZGluZ0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFJvbGVCaW5kaW5nc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLlJvbGVCaW5kaW5nTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGVCaW5kaW5nTGlzdFYxQWxwaGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLlJvbGVCaW5kaW5nTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ1JvbGVCaW5kaW5nTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZ0xpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVJvbGVCaW5kaW5nTGlzdFYxQWxwaGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUm9sZUJpbmRpbmdMaXN0VjFBbHBoYTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUJpbmRpbmdMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUm9sZUJpbmRpbmdMaXN0VjFBbHBoYTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJvbGVCaW5kaW5nTGlzdFYxQWxwaGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZXNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGVMaXN0VjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdSb2xlTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZUxpc3RWMUFscGhhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJvbGVMaXN0VjFBbHBoYTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSb2xlTGlzdFYxQWxwaGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSb2xlTGlzdFYxQWxwaGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZSBpcyBhIGNsdXN0ZXIgbGV2ZWwsIGxvZ2ljYWwgZ3JvdXBpbmcgb2YgUG9saWN5UnVsZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBhcyBhIHVuaXQgYnkgYSBSb2xlQmluZGluZyBvciBDbHVzdGVyUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNsdXN0ZXJSb2xlVjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDbHVzdGVyUm9sZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDbHVzdGVyUm9sZVYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNsdXN0ZXJSb2xlVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ2x1c3RlclJvbGVWMUJldGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNsdXN0ZXJSb2xlVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGVCaW5kaW5nIHJlZmVyZW5jZXMgYSBDbHVzdGVyUm9sZSwgYnV0IG5vdCBjb250YWluIGl0LiAgSXQgY2FuIHJlZmVyZW5jZSBhIENsdXN0ZXJSb2xlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBhbmQgYWRkcyB3aG8gaW5mb3JtYXRpb24gdmlhIFN1YmplY3QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZUJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDbHVzdGVyUm9sZUJpbmRpbmcnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZUJpbmRpbmdcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNsdXN0ZXJSb2xlQmluZGluZ1YxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDbHVzdGVyUm9sZUJpbmRpbmdWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nVjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ2x1c3RlclJvbGVCaW5kaW5nc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNsdXN0ZXJSb2xlQmluZGluZ0xpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNsdXN0ZXJSb2xlQmluZGluZ0xpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNsdXN0ZXJSb2xlQmluZGluZ0xpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIENsdXN0ZXJSb2xlc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ2x1c3RlclJvbGVMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnQ2x1c3RlclJvbGVMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDbHVzdGVyUm9sZUxpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ2x1c3RlclJvbGVMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNsdXN0ZXJSb2xlTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNsdXN0ZXJSb2xlTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJvbGUgaXMgYSBuYW1lc3BhY2VkLCBsb2dpY2FsIGdyb3VwaW5nIG9mIFBvbGljeVJ1bGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYXMgYSB1bml0IGJ5IGEgUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlXG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUm9sZVYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdSb2xlJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZVYxQmV0YTFQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJvbGVWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVJvbGVWMUJldGExUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJvbGVWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb2xlQmluZGluZyByZWZlcmVuY2VzIGEgcm9sZSwgYnV0IGRvZXMgbm90IGNvbnRhaW4gaXQuICBJdCBjYW4gcmVmZXJlbmNlIGEgUm9sZSBpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugb3IgYSBDbHVzdGVyUm9sZSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gSXQgYWRkcyB3aG8gaW5mb3JtYXRpb24gdmlhIFN1YmplY3RzIGFuZCBuYW1lc3BhY2UgaW5mb3JtYXRpb24gYnkgd2hpY2ggbmFtZXNwYWNlIGl0IGV4aXN0cyBpbi4gIFJvbGVCaW5kaW5ncyBpbiBhIGdpdmVuIG5hbWVzcGFjZSBvbmx5IGhhdmUgZWZmZWN0IGluIHRoYXQgbmFtZXNwYWNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZUJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVSb2xlQmluZGluZ1YxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlQmluZGluZ1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAncmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnUm9sZUJpbmRpbmcnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlQmluZGluZ1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZUJpbmRpbmdWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUm9sZUJpbmRpbmdWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZUJpbmRpbmdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSb2xlQmluZGluZ1YxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVJvbGVCaW5kaW5nVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUm9sZUJpbmRpbmdMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBSb2xlQmluZGluZ3NcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVCaW5kaW5nTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVJvbGVCaW5kaW5nTGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlQmluZGluZ0xpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1JvbGVCaW5kaW5nTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVCaW5kaW5nTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUm9sZUJpbmRpbmdMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJvbGVCaW5kaW5nTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlQmluZGluZ0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVSb2xlQmluZGluZ0xpc3RWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSb2xlQmluZGluZ0xpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZXNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUm9sZUxpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1JvbGVMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVJvbGVMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVJvbGVMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUm9sZUxpc3RWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVSb2xlTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFByaW9yaXR5Q2xhc3MgZGVmaW5lcyBtYXBwaW5nIGZyb20gYSBwcmlvcml0eSBjbGFzcyBuYW1lIHRvIHRoZSBwcmlvcml0eSBpbnRlZ2VyIHZhbHVlLiBUaGUgdmFsdWUgY2FuIGJlIGFueSB2YWxpZCBpbnRlZ2VyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxLlByaW9yaXR5Q2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQcmlvcml0eUNsYXNzIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxLlByaW9yaXR5Q2xhc3NcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3NjaGVkdWxpbmcuazhzLmlvL3YxJyxcbiAgICBraW5kOiAnUHJpb3JpdHlDbGFzcycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVQcmlvcml0eUNsYXNzUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUHJpb3JpdHlDbGFzcy5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUHJpb3JpdHlDbGFzc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUHJpb3JpdHlDbGFzcy5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUHJpb3JpdHlDbGFzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHByaW9yaXR5IGNsYXNzZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjEuUHJpb3JpdHlDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQcmlvcml0eUNsYXNzTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc2NoZWR1bGluZy5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdQcmlvcml0eUNsYXNzTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUHJpb3JpdHlDbGFzc0xpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQcmlvcml0eUNsYXNzTGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVByaW9yaXR5Q2xhc3NMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVQcmlvcml0eUNsYXNzTGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBQcmlvcml0eUNsYXNzIGlzIGRlcHJlY2F0ZWQgYnkgc2NoZWR1bGluZy5rOHMuaW8vdjEvUHJpb3JpdHlDbGFzcy4gUHJpb3JpdHlDbGFzcyBkZWZpbmVzIG1hcHBpbmcgZnJvbSBhIHByaW9yaXR5IGNsYXNzIG5hbWUgdG8gdGhlIHByaW9yaXR5IGludGVnZXIgdmFsdWUuIFRoZSB2YWx1ZSBjYW4gYmUgYW55IHZhbGlkIGludGVnZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFhbHBoYTEuUHJpb3JpdHlDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVByaW9yaXR5Q2xhc3NWMUFscGhhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MWFscGhhMS5Qcmlvcml0eUNsYXNzXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzY2hlZHVsaW5nLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ1ByaW9yaXR5Q2xhc3MnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFhbHBoYTEuUHJpb3JpdHlDbGFzc1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUHJpb3JpdHlDbGFzc1YxQWxwaGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUHJpb3JpdHlDbGFzc1YxQWxwaGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYWxwaGExLlByaW9yaXR5Q2xhc3NcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVQcmlvcml0eUNsYXNzVjFBbHBoYTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVByaW9yaXR5Q2xhc3NWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUHJpb3JpdHlDbGFzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHByaW9yaXR5IGNsYXNzZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFhbHBoYTEuUHJpb3JpdHlDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVQcmlvcml0eUNsYXNzTGlzdFYxQWxwaGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYWxwaGExLlByaW9yaXR5Q2xhc3NMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzY2hlZHVsaW5nLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ1ByaW9yaXR5Q2xhc3NMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYWxwaGExLlByaW9yaXR5Q2xhc3NMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVQcmlvcml0eUNsYXNzTGlzdFYxQWxwaGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUHJpb3JpdHlDbGFzc0xpc3RWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MWFscGhhMS5Qcmlvcml0eUNsYXNzTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVByaW9yaXR5Q2xhc3NMaXN0VjFBbHBoYTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVByaW9yaXR5Q2xhc3NMaXN0VjFBbHBoYTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgUHJpb3JpdHlDbGFzcyBpcyBkZXByZWNhdGVkIGJ5IHNjaGVkdWxpbmcuazhzLmlvL3YxL1ByaW9yaXR5Q2xhc3MuIFByaW9yaXR5Q2xhc3MgZGVmaW5lcyBtYXBwaW5nIGZyb20gYSBwcmlvcml0eSBjbGFzcyBuYW1lIHRvIHRoZSBwcmlvcml0eSBpbnRlZ2VyIHZhbHVlLiBUaGUgdmFsdWUgY2FuIGJlIGFueSB2YWxpZCBpbnRlZ2VyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVByaW9yaXR5Q2xhc3NWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzc1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc2NoZWR1bGluZy5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1ByaW9yaXR5Q2xhc3MnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFiZXRhMS5Qcmlvcml0eUNsYXNzXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVQcmlvcml0eUNsYXNzVjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVByaW9yaXR5Q2xhc3NWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzc1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVByaW9yaXR5Q2xhc3NWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVQcmlvcml0eUNsYXNzVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUHJpb3JpdHlDbGFzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHByaW9yaXR5IGNsYXNzZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFiZXRhMS5Qcmlvcml0eUNsYXNzTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVByaW9yaXR5Q2xhc3NMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc2NoZWR1bGluZy52MWJldGExLlByaW9yaXR5Q2xhc3NMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzY2hlZHVsaW5nLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnUHJpb3JpdHlDbGFzc0xpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFiZXRhMS5Qcmlvcml0eUNsYXNzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlUHJpb3JpdHlDbGFzc0xpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlUHJpb3JpdHlDbGFzc0xpc3RWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzc0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVQcmlvcml0eUNsYXNzTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVByaW9yaXR5Q2xhc3NMaXN0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogUG9kUHJlc2V0IGlzIGEgcG9saWN5IHJlc291cmNlIHRoYXQgZGVmaW5lcyBhZGRpdGlvbmFsIHJ1bnRpbWUgcmVxdWlyZW1lbnRzIGZvciBhIFBvZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc2V0dGluZ3MudjFhbHBoYTEuUG9kUHJlc2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUG9kUHJlc2V0VjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc2V0dGluZ3MuazhzLmlvL3YxYWxwaGExJyxcbiAgICBraW5kOiAnUG9kUHJlc2V0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVBvZFByZXNldFYxQWxwaGExUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQb2RQcmVzZXRWMUFscGhhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc2V0dGluZ3MudjFhbHBoYTEuUG9kUHJlc2V0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlUG9kUHJlc2V0VjFBbHBoYTFQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlUG9kUHJlc2V0VjFBbHBoYTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFBvZFByZXNldExpc3QgaXMgYSBsaXN0IG9mIFBvZFByZXNldCBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlUG9kUHJlc2V0TGlzdFYxQWxwaGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzZXR0aW5ncy5rOHMuaW8vdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdQb2RQcmVzZXRMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVQb2RQcmVzZXRMaXN0VjFBbHBoYTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVQb2RQcmVzZXRMaXN0VjFBbHBoYTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldExpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVQb2RQcmVzZXRMaXN0VjFBbHBoYTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVBvZFByZXNldExpc3RWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogU3RvcmFnZUNsYXNzIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBmb3IgYSBjbGFzcyBvZiBzdG9yYWdlIGZvciB3aGljaCBQZXJzaXN0ZW50Vm9sdW1lcyBjYW4gYmUgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQuXG5cblN0b3JhZ2VDbGFzc2VzIGFyZSBub24tbmFtZXNwYWNlZDsgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgYWNjb3JkaW5nIHRvIGV0Y2QgaXMgaW4gT2JqZWN0TWV0YS5OYW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgS3ViZVN0b3JhZ2VDbGFzcyBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MS5TdG9yYWdlQ2xhc3NcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3N0b3JhZ2UuazhzLmlvL3YxJyxcbiAgICBraW5kOiAnU3RvcmFnZUNsYXNzJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3RvcmFnZUNsYXNzUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU3RvcmFnZUNsYXNzLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0b3JhZ2VDbGFzc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU3RvcmFnZUNsYXNzLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdG9yYWdlQ2xhc3NMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBzdG9yYWdlIGNsYXNzZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzTGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVN0b3JhZ2VDbGFzc0xpc3QgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc3RvcmFnZS5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdTdG9yYWdlQ2xhc3NMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc0xpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVN0b3JhZ2VDbGFzc0xpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTdG9yYWdlQ2xhc3NMaXN0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTdG9yYWdlQ2xhc3NMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTdG9yYWdlQ2xhc3NMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBWb2x1bWVBdHRhY2htZW50IGNhcHR1cmVzIHRoZSBpbnRlbnQgdG8gYXR0YWNoIG9yIGRldGFjaCB0aGUgc3BlY2lmaWVkIHZvbHVtZSB0by9mcm9tIHRoZSBzcGVjaWZpZWQgbm9kZS5cblxuVm9sdW1lQXR0YWNobWVudCBvYmplY3RzIGFyZSBub24tbmFtZXNwYWNlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlVm9sdW1lQXR0YWNobWVudCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzdG9yYWdlLms4cy5pby92MScsXG4gICAga2luZDogJ1ZvbHVtZUF0dGFjaG1lbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjEuVm9sdW1lQXR0YWNobWVudFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlVm9sdW1lQXR0YWNobWVudFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVZvbHVtZUF0dGFjaG1lbnQuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjEuVm9sdW1lQXR0YWNobWVudFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVZvbHVtZUF0dGFjaG1lbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVZvbHVtZUF0dGFjaG1lbnQubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFZvbHVtZUF0dGFjaG1lbnRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBWb2x1bWVBdHRhY2htZW50IG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuVm9sdW1lQXR0YWNobWVudExpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVWb2x1bWVBdHRhY2htZW50TGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50TGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc3RvcmFnZS5rOHMuaW8vdjEnLFxuICAgIGtpbmQ6ICdWb2x1bWVBdHRhY2htZW50TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50TGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVWb2x1bWVBdHRhY2htZW50TGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVZvbHVtZUF0dGFjaG1lbnRMaXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVWb2x1bWVBdHRhY2htZW50TGlzdC5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogVm9sdW1lQXR0YWNobWVudCBjYXB0dXJlcyB0aGUgaW50ZW50IHRvIGF0dGFjaCBvciBkZXRhY2ggdGhlIHNwZWNpZmllZCB2b2x1bWUgdG8vZnJvbSB0aGUgc3BlY2lmaWVkIG5vZGUuXG5cblZvbHVtZUF0dGFjaG1lbnQgb2JqZWN0cyBhcmUgbm9uLW5hbWVzcGFjZWQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFhbHBoYTEuVm9sdW1lQXR0YWNobWVudFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVZvbHVtZUF0dGFjaG1lbnRWMUFscGhhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MWFscGhhMS5Wb2x1bWVBdHRhY2htZW50XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzdG9yYWdlLms4cy5pby92MWFscGhhMScsXG4gICAga2luZDogJ1ZvbHVtZUF0dGFjaG1lbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFhbHBoYTEuVm9sdW1lQXR0YWNobWVudFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlVm9sdW1lQXR0YWNobWVudFYxQWxwaGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlVm9sdW1lQXR0YWNobWVudFYxQWxwaGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYWxwaGExLlZvbHVtZUF0dGFjaG1lbnRcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVWb2x1bWVBdHRhY2htZW50VjFBbHBoYTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVZvbHVtZUF0dGFjaG1lbnRWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogVm9sdW1lQXR0YWNobWVudExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFZvbHVtZUF0dGFjaG1lbnQgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWFscGhhMS5Wb2x1bWVBdHRhY2htZW50TGlzdFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVZvbHVtZUF0dGFjaG1lbnRMaXN0VjFBbHBoYTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFhbHBoYTEuVm9sdW1lQXR0YWNobWVudExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3N0b3JhZ2UuazhzLmlvL3YxYWxwaGExJyxcbiAgICBraW5kOiAnVm9sdW1lQXR0YWNobWVudExpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFhbHBoYTEuVm9sdW1lQXR0YWNobWVudExpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVZvbHVtZUF0dGFjaG1lbnRMaXN0VjFBbHBoYTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVWb2x1bWVBdHRhY2htZW50TGlzdFYxQWxwaGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYWxwaGExLlZvbHVtZUF0dGFjaG1lbnRMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RWMUFscGhhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RWMUFscGhhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ1NJRHJpdmVyIGNhcHR1cmVzIGluZm9ybWF0aW9uIGFib3V0IGEgQ29udGFpbmVyIFN0b3JhZ2UgSW50ZXJmYWNlIChDU0kpIHZvbHVtZSBkcml2ZXIgZGVwbG95ZWQgb24gdGhlIGNsdXN0ZXIuIENTSSBkcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGUgQ1NJRHJpdmVyIG9iamVjdCBkaXJlY3RseS4gSW5zdGVhZCB0aGV5IG1heSB1c2UgdGhlIGNsdXN0ZXItZHJpdmVyLXJlZ2lzdHJhciBzaWRlY2FyIGNvbnRhaW5lci4gV2hlbiBkZXBsb3llZCB3aXRoIGEgQ1NJIGRyaXZlciBpdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBDU0lEcml2ZXIgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZHJpdmVyLiBLdWJlcm5ldGVzIGF0dGFjaCBkZXRhY2ggY29udHJvbGxlciB1c2VzIHRoaXMgb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGF0dGFjaCBpcyByZXF1aXJlZC4gS3ViZWxldCB1c2VzIHRoaXMgb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIHBvZCBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBwYXNzZWQgb24gbW91bnQuIENTSURyaXZlciBvYmplY3RzIGFyZSBub24tbmFtZXNwYWNlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSURyaXZlclxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNzaURyaXZlclYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lEcml2ZXJcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3N0b3JhZ2UuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDU0lEcml2ZXInLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lEcml2ZXJcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNzaURyaXZlclYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDc2lEcml2ZXJWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJRHJpdmVyXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ3NpRHJpdmVyVjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ3NpRHJpdmVyVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ1NJRHJpdmVyTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ1NJRHJpdmVyIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lEcml2ZXJMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ3NpRHJpdmVyTGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lEcml2ZXJMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzdG9yYWdlLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnQ1NJRHJpdmVyTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSURyaXZlckxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUNzaURyaXZlckxpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ3NpRHJpdmVyTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lEcml2ZXJMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ3NpRHJpdmVyTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUNzaURyaXZlckxpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDU0lOb2RlIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBDU0kgZHJpdmVycyBpbnN0YWxsZWQgb24gYSBub2RlLiBDU0kgZHJpdmVycyBkbyBub3QgbmVlZCB0byBjcmVhdGUgdGhlIENTSU5vZGUgb2JqZWN0IGRpcmVjdGx5LiBBcyBsb25nIGFzIHRoZXkgdXNlIHRoZSBub2RlLWRyaXZlci1yZWdpc3RyYXIgc2lkZWNhciBjb250YWluZXIsIHRoZSBrdWJlbGV0IHdpbGwgYXV0b21hdGljYWxseSBwb3B1bGF0ZSB0aGUgQ1NJTm9kZSBvYmplY3QgZm9yIHRoZSBDU0kgZHJpdmVyIGFzIHBhcnQgb2Yga3ViZWxldCBwbHVnaW4gcmVnaXN0cmF0aW9uLiBDU0lOb2RlIGhhcyB0aGUgc2FtZSBuYW1lIGFzIGEgbm9kZS4gSWYgdGhlIG9iamVjdCBpcyBtaXNzaW5nLCBpdCBtZWFucyBlaXRoZXIgdGhlcmUgYXJlIG5vIENTSSBEcml2ZXJzIGF2YWlsYWJsZSBvbiB0aGUgbm9kZSwgb3IgdGhlIEt1YmVsZXQgdmVyc2lvbiBpcyBsb3cgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBjcmVhdGUgdGhpcyBvYmplY3QuIENTSU5vZGUgaGFzIGFuIE93bmVyUmVmZXJlbmNlIHRoYXQgcG9pbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZUNzaU5vZGVWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc3RvcmFnZS5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ0NTSU5vZGUnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lOb2RlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDc2lOb2RlVjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUNzaU5vZGVWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNzaU5vZGVWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVDc2lOb2RlVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ1NJTm9kZUxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIENTSU5vZGUgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSU5vZGVMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlQ3NpTm9kZUxpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZUxpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3N0b3JhZ2UuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdDU0lOb2RlTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSU5vZGVMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDc2lOb2RlTGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVDc2lOb2RlTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lOb2RlTGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZUNzaU5vZGVMaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ3NpTm9kZUxpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdG9yYWdlQ2xhc3MgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGZvciBhIGNsYXNzIG9mIHN0b3JhZ2UgZm9yIHdoaWNoIFBlcnNpc3RlbnRWb2x1bWVzIGNhbiBiZSBkeW5hbWljYWxseSBwcm92aXNpb25lZC5cblxuU3RvcmFnZUNsYXNzZXMgYXJlIG5vbi1uYW1lc3BhY2VkOyB0aGUgbmFtZSBvZiB0aGUgc3RvcmFnZSBjbGFzcyBhY2NvcmRpbmcgdG8gZXRjZCBpcyBpbiBPYmplY3RNZXRhLk5hbWUuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5TdG9yYWdlQ2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdG9yYWdlQ2xhc3NWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzdG9yYWdlLms4cy5pby92MWJldGExJyxcbiAgICBraW5kOiAnU3RvcmFnZUNsYXNzJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVTdG9yYWdlQ2xhc3NWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU3RvcmFnZUNsYXNzVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlN0b3JhZ2VDbGFzc1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0b3JhZ2VDbGFzc1YxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZVN0b3JhZ2VDbGFzc1YxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0b3JhZ2VDbGFzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHN0b3JhZ2UgY2xhc3Nlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlN0b3JhZ2VDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdG9yYWdlQ2xhc3NMaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlN0b3JhZ2VDbGFzc0xpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3N0b3JhZ2UuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdTdG9yYWdlQ2xhc3NMaXN0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlU3RvcmFnZUNsYXNzTGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVTdG9yYWdlQ2xhc3NMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlN0b3JhZ2VDbGFzc0xpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVTdG9yYWdlQ2xhc3NMaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlU3RvcmFnZUNsYXNzTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFZvbHVtZUF0dGFjaG1lbnQgY2FwdHVyZXMgdGhlIGludGVudCB0byBhdHRhY2ggb3IgZGV0YWNoIHRoZSBzcGVjaWZpZWQgdm9sdW1lIHRvL2Zyb20gdGhlIHNwZWNpZmllZCBub2RlLlxuXG5Wb2x1bWVBdHRhY2htZW50IG9iamVjdHMgYXJlIG5vbi1uYW1lc3BhY2VkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudFxuICovXG5leHBvcnQgY2xhc3MgS3ViZVZvbHVtZUF0dGFjaG1lbnRWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnc3RvcmFnZS5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ1ZvbHVtZUF0dGFjaG1lbnQnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5Wb2x1bWVBdHRhY2htZW50XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVWb2x1bWVBdHRhY2htZW50VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZVZvbHVtZUF0dGFjaG1lbnRWMUJldGExLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVZvbHVtZUF0dGFjaG1lbnRWMUJldGExUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVWb2x1bWVBdHRhY2htZW50VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogVm9sdW1lQXR0YWNobWVudExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFZvbHVtZUF0dGFjaG1lbnQgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudExpc3RcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ3N0b3JhZ2UuazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdWb2x1bWVBdHRhY2htZW50TGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnRMaXN0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVWb2x1bWVBdHRhY2htZW50TGlzdFYxQmV0YTFQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVWb2x1bWVBdHRhY2htZW50TGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5Wb2x1bWVBdHRhY2htZW50TGlzdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVZvbHVtZUF0dGFjaG1lbnRMaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RWMUJldGExLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDdXN0b21SZXNvdXJjZURlZmluaXRpb24gcmVwcmVzZW50cyBhIHJlc291cmNlIHRoYXQgc2hvdWxkIGJlIGV4cG9zZWQgb24gdGhlIEFQSSBzZXJ2ZXIuICBJdHMgbmFtZSBNVVNUIGJlIGluIHRoZSBmb3JtYXQgPC5zcGVjLm5hbWU+Ljwuc3BlYy5ncm91cD4uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblxuICovXG5leHBvcnQgY2xhc3MgS3ViZUN1c3RvbVJlc291cmNlRGVmaW5pdGlvblYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ0N1c3RvbVJlc291cmNlRGVmaW5pdGlvbicsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVDdXN0b21SZXNvdXJjZURlZmluaXRpb25WMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uVjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uVjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTGlzdCBpcyBhIGxpc3Qgb2YgQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvbkxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVDdXN0b21SZXNvdXJjZURlZmluaXRpb25MaXN0VjFCZXRhMSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTGlzdFwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjFiZXRhMScsXG4gICAga2luZDogJ0N1c3RvbVJlc291cmNlRGVmaW5pdGlvbkxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvbkxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUN1c3RvbVJlc291cmNlRGVmaW5pdGlvbkxpc3RWMUJldGExUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTGlzdFYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvbkxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVDdXN0b21SZXNvdXJjZURlZmluaXRpb25MaXN0VjFCZXRhMVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBLdWJlQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTGlzdFYxQmV0YTEubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXR1cyBpcyBhIHJldHVybiB2YWx1ZSBmb3IgY2FsbHMgdGhhdCBkb24ndCByZXR1cm4gb3RoZXIgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVTdGF0dXMgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuU3RhdHVzXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAga2luZDogJ1N0YXR1cycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZVN0YXR1c1Byb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlU3RhdHVzLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlN0YXR1c1wiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS3ViZVN0YXR1c1Byb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVTdGF0dXMubWFuaWZlc3QocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIEFQSVNlcnZpY2UgcmVwcmVzZW50cyBhIHNlcnZlciBmb3IgYSBwYXJ0aWN1bGFyIEdyb3VwVmVyc2lvbi4gTmFtZSBtdXN0IGJlIFwidmVyc2lvbi5ncm91cFwiLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjEuQVBJU2VydmljZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZUFwaVNlcnZpY2UgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MS5BUElTZXJ2aWNlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcGlyZWdpc3RyYXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnQVBJU2VydmljZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxLkFQSVNlcnZpY2VcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUFwaVNlcnZpY2VQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUFwaVNlcnZpY2UuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MS5BUElTZXJ2aWNlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQXBpU2VydmljZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVBcGlTZXJ2aWNlLm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBUElTZXJ2aWNlTGlzdCBpcyBhIGxpc3Qgb2YgQVBJU2VydmljZSBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjEuQVBJU2VydmljZUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVBcGlTZXJ2aWNlTGlzdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcImlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxLkFQSVNlcnZpY2VMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcGlyZWdpc3RyYXRpb24uazhzLmlvL3YxJyxcbiAgICBraW5kOiAnQVBJU2VydmljZUxpc3QnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MS5BUElTZXJ2aWNlTGlzdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBLdWJlQXBpU2VydmljZUxpc3RQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkt1YmVBcGlTZXJ2aWNlTGlzdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxLkFQSVNlcnZpY2VMaXN0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLdWJlQXBpU2VydmljZUxpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUFwaVNlcnZpY2VMaXN0Lm1hbmlmZXN0KHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBUElTZXJ2aWNlIHJlcHJlc2VudHMgYSBzZXJ2ZXIgZm9yIGEgcGFydGljdWxhciBHcm91cFZlcnNpb24uIE5hbWUgbXVzdCBiZSBcInZlcnNpb24uZ3JvdXBcIi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZVxuICovXG5leHBvcnQgY2xhc3MgS3ViZUFwaVNlcnZpY2VWMUJldGExIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjFiZXRhMS5BUElTZXJ2aWNlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcGlyZWdpc3RyYXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdBUElTZXJ2aWNlJyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjFiZXRhMS5BUElTZXJ2aWNlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEt1YmVBcGlTZXJ2aWNlVjFCZXRhMVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5LdWJlQXBpU2VydmljZVYxQmV0YTEuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2VcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVBcGlTZXJ2aWNlVjFCZXRhMVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIEt1YmVBcGlTZXJ2aWNlVjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogQVBJU2VydmljZUxpc3QgaXMgYSBsaXN0IG9mIEFQSVNlcnZpY2Ugb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZUxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVBcGlTZXJ2aWNlTGlzdFYxQmV0YTEgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2VMaXN0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdhcGlyZWdpc3RyYXRpb24uazhzLmlvL3YxYmV0YTEnLFxuICAgIGtpbmQ6ICdBUElTZXJ2aWNlTGlzdCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcImlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZUxpc3RcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogS3ViZUFwaVNlcnZpY2VMaXN0VjFCZXRhMVByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uS3ViZUFwaVNlcnZpY2VMaXN0VjFCZXRhMS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcImlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZUxpc3RcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEt1YmVBcGlTZXJ2aWNlTGlzdFYxQmV0YTFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgS3ViZUFwaVNlcnZpY2VMaXN0VjFCZXRhMS5tYW5pZmVzdChwcm9wcykpO1xuICB9XG59XG5cbi8qKlxuICogTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvbiBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYW5kIGFkbWlzc2lvbiB3ZWJob29rIHRoYXQgYWNjZXB0IG9yIHJlamVjdCBhbmQgbWF5IGNoYW5nZSB0aGUgb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZU11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25WMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0IG1ldGFkYXRhOyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24jbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogV2ViaG9va3MgaXMgYSBsaXN0IG9mIHdlYmhvb2tzIGFuZCB0aGUgYWZmZWN0ZWQgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuTXV0YXRpbmdXZWJob29rQ29uZmlndXJhdGlvbiN3ZWJob29rc1xuICAgKi9cbiAgcmVhZG9ubHkgd2ViaG9va3M/OiBNdXRhdGluZ1dlYmhvb2tbXTtcblxufVxuXG4vKipcbiAqIE11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0IGlzIGEgbGlzdCBvZiBNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIE11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVNdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uVjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbiBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYW5kIGFkbWlzc2lvbiB3ZWJob29rIHRoYXQgYWNjZXB0IG9yIHJlamVjdCBhbmQgb2JqZWN0IHdpdGhvdXQgY2hhbmdpbmcgaXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVWYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25WMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0IG1ldGFkYXRhOyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbiNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBXZWJob29rcyBpcyBhIGxpc3Qgb2Ygd2ViaG9va3MgYW5kIHRoZSBhZmZlY3RlZCByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5WYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24jd2ViaG9va3NcbiAgICovXG4gIHJlYWRvbmx5IHdlYmhvb2tzPzogVmFsaWRhdGluZ1dlYmhvb2tbXTtcblxufVxuXG4vKipcbiAqIFZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3QgaXMgYSBsaXN0IG9mIFZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVWYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25MaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuVmFsaWRhdGluZ1dlYmhvb2tDb25maWd1cmF0aW9uTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVWYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb25WMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rQ29uZmlndXJhdGlvbkxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBDb250cm9sbGVyUmV2aXNpb24gaW1wbGVtZW50cyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygc3RhdGUgZGF0YS4gQ2xpZW50cyBhcmUgcmVzcG9uc2libGUgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHRoZSBvYmplY3RzIHRoYXQgY29udGFpbiB0aGVpciBpbnRlcm5hbCBzdGF0ZS4gT25jZSBhIENvbnRyb2xsZXJSZXZpc2lvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgaXQgY2FuIG5vdCBiZSB1cGRhdGVkLiBUaGUgQVBJIFNlcnZlciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBvZiBhbGwgcmVxdWVzdHMgdGhhdCBhdHRlbXB0IHRvIG11dGF0ZSB0aGUgRGF0YSBmaWVsZC4gQ29udHJvbGxlclJldmlzaW9ucyBtYXksIGhvd2V2ZXIsIGJlIGRlbGV0ZWQuIE5vdGUgdGhhdCwgZHVlIHRvIGl0cyB1c2UgYnkgYm90aCB0aGUgRGFlbW9uU2V0IGFuZCBTdGF0ZWZ1bFNldCBjb250cm9sbGVycyBmb3IgdXBkYXRlIGFuZCByb2xsYmFjaywgdGhpcyBvYmplY3QgaXMgYmV0YS4gSG93ZXZlciwgaXQgbWF5IGJlIHN1YmplY3QgdG8gbmFtZSBhbmQgcmVwcmVzZW50YXRpb24gY2hhbmdlcyBpbiBmdXR1cmUgcmVsZWFzZXMsIGFuZCBjbGllbnRzIHNob3VsZCBub3QgZGVwZW5kIG9uIGl0cyBzdGFiaWxpdHkuIEl0IGlzIHByaW1hcmlseSBmb3IgaW50ZXJuYWwgdXNlIGJ5IGNvbnRyb2xsZXJzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDb250cm9sbGVyUmV2aXNpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBEYXRhIGlzIHRoZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuQ29udHJvbGxlclJldmlzaW9uI2RhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiBSYXdFeHRlbnNpb247XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5Db250cm9sbGVyUmV2aXNpb24jbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogUmV2aXNpb24gaW5kaWNhdGVzIHRoZSByZXZpc2lvbiBvZiB0aGUgc3RhdGUgcmVwcmVzZW50ZWQgYnkgRGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuQ29udHJvbGxlclJldmlzaW9uI3JldmlzaW9uXG4gICAqL1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQ29udHJvbGxlclJldmlzaW9uTGlzdCBpcyBhIHJlc291cmNlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIENvbnRyb2xsZXJSZXZpc2lvbiBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIHRoZSBsaXN0IG9mIENvbnRyb2xsZXJSZXZpc2lvbnNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuQ29udHJvbGxlclJldmlzaW9uTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25Qcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5Db250cm9sbGVyUmV2aXNpb25MaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogRGFlbW9uU2V0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBkYWVtb24gc2V0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEYWVtb25TZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGFlbW9uU2V0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGJlaGF2aW9yIG9mIHRoaXMgZGFlbW9uIHNldC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRGFlbW9uU2V0U3BlYztcblxufVxuXG4vKipcbiAqIERhZW1vblNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIGRhZW1vbiBzZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkRhZW1vblNldExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRGFlbW9uU2V0TGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBkYWVtb24gc2V0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGFlbW9uU2V0TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVEYWVtb25TZXRQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5EYWVtb25TZXRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogRGVwbG95bWVudCBlbmFibGVzIGRlY2xhcmF0aXZlIHVwZGF0ZXMgZm9yIFBvZHMgYW5kIFJlcGxpY2FTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLkRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRGVwbG95bWVudFByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBkZXNpcmVkIGJlaGF2aW9yIG9mIHRoZSBEZXBsb3ltZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5EZXBsb3ltZW50I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBEZXBsb3ltZW50U3BlYztcblxufVxuXG4vKipcbiAqIERlcGxveW1lbnRMaXN0IGlzIGEgbGlzdCBvZiBEZXBsb3ltZW50cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5EZXBsb3ltZW50TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEZXBsb3ltZW50TGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIHRoZSBsaXN0IG9mIERlcGxveW1lbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5EZXBsb3ltZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVEZXBsb3ltZW50UHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBSZXBsaWNhU2V0IGVuc3VyZXMgdGhhdCBhIHNwZWNpZmllZCBudW1iZXIgb2YgcG9kIHJlcGxpY2FzIGFyZSBydW5uaW5nIGF0IGFueSBnaXZlbiB0aW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLlJlcGxpY2FTZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUmVwbGljYVNldFByb3BzIHtcbiAgLyoqXG4gICAqIElmIHRoZSBMYWJlbHMgb2YgYSBSZXBsaWNhU2V0IGFyZSBlbXB0eSwgdGhleSBhcmUgZGVmYXVsdGVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBQb2QocykgdGhhdCB0aGUgUmVwbGljYVNldCBtYW5hZ2VzLiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuUmVwbGljYVNldCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGRlZmluZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIFJlcGxpY2FTZXQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3NwZWMtYW5kLXN0YXR1c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5SZXBsaWNhU2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBSZXBsaWNhU2V0U3BlYztcblxufVxuXG4vKipcbiAqIFJlcGxpY2FTZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBSZXBsaWNhU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5SZXBsaWNhU2V0TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSZXBsaWNhU2V0TGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgUmVwbGljYVNldHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL2NvbnRyb2xsZXJzL3JlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5SZXBsaWNhU2V0TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVSZXBsaWNhU2V0UHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuUmVwbGljYVNldExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bFNldCByZXByZXNlbnRzIGEgc2V0IG9mIHBvZHMgd2l0aCBjb25zaXN0ZW50IGlkZW50aXRpZXMuIElkZW50aXRpZXMgYXJlIGRlZmluZWQgYXM6XG4gLSBOZXR3b3JrOiBBIHNpbmdsZSBzdGFibGUgRE5TIGFuZCBob3N0bmFtZS5cbiAtIFN0b3JhZ2U6IEFzIG1hbnkgVm9sdW1lQ2xhaW1zIGFzIHJlcXVlc3RlZC5cblRoZSBTdGF0ZWZ1bFNldCBndWFyYW50ZWVzIHRoYXQgYSBnaXZlbiBuZXR3b3JrIGlkZW50aXR5IHdpbGwgYWx3YXlzIG1hcCB0byB0aGUgc2FtZSBzdG9yYWdlIGlkZW50aXR5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLlN0YXRlZnVsU2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVN0YXRlZnVsU2V0UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuU3RhdGVmdWxTZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIGlkZW50aXRpZXMgb2YgcG9kcyBpbiB0aGlzIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjEuU3RhdGVmdWxTZXQjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFN0YXRlZnVsU2V0U3BlYztcblxufVxuXG4vKipcbiAqIFN0YXRlZnVsU2V0TGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgU3RhdGVmdWxTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxLlN0YXRlZnVsU2V0TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTdGF0ZWZ1bFNldExpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5TdGF0ZWZ1bFNldExpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlU3RhdGVmdWxTZXRQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MS5TdGF0ZWZ1bFNldExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIENvbnRyb2xsZXJSZXZpc2lvbiBpcyBkZXByZWNhdGVkIGJ5IGFwcHMvdjFiZXRhMi9Db250cm9sbGVyUmV2aXNpb24uIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gQ29udHJvbGxlclJldmlzaW9uIGltcGxlbWVudHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHN0YXRlIGRhdGEuIENsaWVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyB0aGUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gdGhlaXIgaW50ZXJuYWwgc3RhdGUuIE9uY2UgYSBDb250cm9sbGVyUmV2aXNpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIGl0IGNhbiBub3QgYmUgdXBkYXRlZC4gVGhlIEFQSSBTZXJ2ZXIgd2lsbCBmYWlsIHZhbGlkYXRpb24gb2YgYWxsIHJlcXVlc3RzIHRoYXQgYXR0ZW1wdCB0byBtdXRhdGUgdGhlIERhdGEgZmllbGQuIENvbnRyb2xsZXJSZXZpc2lvbnMgbWF5LCBob3dldmVyLCBiZSBkZWxldGVkLiBOb3RlIHRoYXQsIGR1ZSB0byBpdHMgdXNlIGJ5IGJvdGggdGhlIERhZW1vblNldCBhbmQgU3RhdGVmdWxTZXQgY29udHJvbGxlcnMgZm9yIHVwZGF0ZSBhbmQgcm9sbGJhY2ssIHRoaXMgb2JqZWN0IGlzIGJldGEuIEhvd2V2ZXIsIGl0IG1heSBiZSBzdWJqZWN0IHRvIG5hbWUgYW5kIHJlcHJlc2VudGF0aW9uIGNoYW5nZXMgaW4gZnV0dXJlIHJlbGVhc2VzLCBhbmQgY2xpZW50cyBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHMgc3RhYmlsaXR5LiBJdCBpcyBwcmltYXJpbHkgZm9yIGludGVybmFsIHVzZSBieSBjb250cm9sbGVycy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDb250cm9sbGVyUmV2aXNpb25WMUJldGExUHJvcHMge1xuICAvKipcbiAgICogRGF0YSBpcyB0aGUgc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuQ29udHJvbGxlclJldmlzaW9uI2RhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiBSYXdFeHRlbnNpb247XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvbiNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBSZXZpc2lvbiBpbmRpY2F0ZXMgdGhlIHJldmlzaW9uIG9mIHRoZSBzdGF0ZSByZXByZXNlbnRlZCBieSBEYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvbiNyZXZpc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmV2aXNpb246IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnRyb2xsZXJSZXZpc2lvbkxpc3QgaXMgYSByZXNvdXJjZSBjb250YWluaW5nIGEgbGlzdCBvZiBDb250cm9sbGVyUmV2aXNpb24gb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGExLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ29udHJvbGxlclJldmlzaW9uTGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBDb250cm9sbGVyUmV2aXNpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuQ29udHJvbGxlclJldmlzaW9uTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDb250cm9sbGVyUmV2aXNpb25WMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5Db250cm9sbGVyUmV2aXNpb25MaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBEZXBsb3ltZW50IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MWJldGEyL0RlcGxveW1lbnQuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gRGVwbG95bWVudCBlbmFibGVzIGRlY2xhcmF0aXZlIHVwZGF0ZXMgZm9yIFBvZHMgYW5kIFJlcGxpY2FTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEZXBsb3ltZW50VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EZXBsb3ltZW50I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIERlcGxveW1lbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGVwbG95bWVudCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRGVwbG95bWVudFNwZWM7XG5cbn1cblxuLyoqXG4gKiBEZXBsb3ltZW50TGlzdCBpcyBhIGxpc3Qgb2YgRGVwbG95bWVudHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EZXBsb3ltZW50TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEZXBsb3ltZW50TGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBEZXBsb3ltZW50cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EZXBsb3ltZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVEZXBsb3ltZW50VjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGVwbG95bWVudExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiByZXByZXNlbnRzIGEgc2NhbGluZyByZXF1ZXN0IGZvciBhIHJlc291cmNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuU2NhbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2NhbGVWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0IG1ldGFkYXRhOyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlNjYWxlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBzY2FsZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuU2NhbGUjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFNjYWxlU3BlYztcblxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgLSBUaGlzIGdyb3VwIHZlcnNpb24gb2YgU3RhdGVmdWxTZXQgaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxYmV0YTIvU3RhdGVmdWxTZXQuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gU3RhdGVmdWxTZXQgcmVwcmVzZW50cyBhIHNldCBvZiBwb2RzIHdpdGggY29uc2lzdGVudCBpZGVudGl0aWVzLiBJZGVudGl0aWVzIGFyZSBkZWZpbmVkIGFzOlxuIC0gTmV0d29yazogQSBzaW5nbGUgc3RhYmxlIEROUyBhbmQgaG9zdG5hbWUuXG4gLSBTdG9yYWdlOiBBcyBtYW55IFZvbHVtZUNsYWltcyBhcyByZXF1ZXN0ZWQuXG5UaGUgU3RhdGVmdWxTZXQgZ3VhcmFudGVlcyB0aGF0IGEgZ2l2ZW4gbmV0d29yayBpZGVudGl0eSB3aWxsIGFsd2F5cyBtYXAgdG8gdGhlIHNhbWUgc3RvcmFnZSBpZGVudGl0eS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGExLlN0YXRlZnVsU2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVN0YXRlZnVsU2V0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuU3RhdGVmdWxTZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIGlkZW50aXRpZXMgb2YgcG9kcyBpbiB0aGlzIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5TdGF0ZWZ1bFNldCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogU3RhdGVmdWxTZXRTcGVjO1xuXG59XG5cbi8qKlxuICogU3RhdGVmdWxTZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBTdGF0ZWZ1bFNldHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMS5TdGF0ZWZ1bFNldExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU3RhdGVmdWxTZXRMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuU3RhdGVmdWxTZXRMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVN0YXRlZnVsU2V0VjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTEuU3RhdGVmdWxTZXRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBDb250cm9sbGVyUmV2aXNpb24gaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxL0NvbnRyb2xsZXJSZXZpc2lvbi4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBDb250cm9sbGVyUmV2aXNpb24gaW1wbGVtZW50cyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygc3RhdGUgZGF0YS4gQ2xpZW50cyBhcmUgcmVzcG9uc2libGUgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHRoZSBvYmplY3RzIHRoYXQgY29udGFpbiB0aGVpciBpbnRlcm5hbCBzdGF0ZS4gT25jZSBhIENvbnRyb2xsZXJSZXZpc2lvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgaXQgY2FuIG5vdCBiZSB1cGRhdGVkLiBUaGUgQVBJIFNlcnZlciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBvZiBhbGwgcmVxdWVzdHMgdGhhdCBhdHRlbXB0IHRvIG11dGF0ZSB0aGUgRGF0YSBmaWVsZC4gQ29udHJvbGxlclJldmlzaW9ucyBtYXksIGhvd2V2ZXIsIGJlIGRlbGV0ZWQuIE5vdGUgdGhhdCwgZHVlIHRvIGl0cyB1c2UgYnkgYm90aCB0aGUgRGFlbW9uU2V0IGFuZCBTdGF0ZWZ1bFNldCBjb250cm9sbGVycyBmb3IgdXBkYXRlIGFuZCByb2xsYmFjaywgdGhpcyBvYmplY3QgaXMgYmV0YS4gSG93ZXZlciwgaXQgbWF5IGJlIHN1YmplY3QgdG8gbmFtZSBhbmQgcmVwcmVzZW50YXRpb24gY2hhbmdlcyBpbiBmdXR1cmUgcmVsZWFzZXMsIGFuZCBjbGllbnRzIHNob3VsZCBub3QgZGVwZW5kIG9uIGl0cyBzdGFiaWxpdHkuIEl0IGlzIHByaW1hcmlseSBmb3IgaW50ZXJuYWwgdXNlIGJ5IGNvbnRyb2xsZXJzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuQ29udHJvbGxlclJldmlzaW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNvbnRyb2xsZXJSZXZpc2lvblYxQmV0YTJQcm9wcyB7XG4gIC8qKlxuICAgKiBEYXRhIGlzIHRoZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb24jZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFJhd0V4dGVuc2lvbjtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb24jbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogUmV2aXNpb24gaW5kaWNhdGVzIHRoZSByZXZpc2lvbiBvZiB0aGUgc3RhdGUgcmVwcmVzZW50ZWQgYnkgRGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb24jcmV2aXNpb25cbiAgICovXG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb250cm9sbGVyUmV2aXNpb25MaXN0IGlzIGEgcmVzb3VyY2UgY29udGFpbmluZyBhIGxpc3Qgb2YgQ29udHJvbGxlclJldmlzaW9uIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb25MaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNvbnRyb2xsZXJSZXZpc2lvbkxpc3RWMUJldGEyUHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgdGhlIGxpc3Qgb2YgQ29udHJvbGxlclJldmlzaW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkNvbnRyb2xsZXJSZXZpc2lvbkxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlQ29udHJvbGxlclJldmlzaW9uVjFCZXRhMlByb3BzW107XG5cbiAgLyoqXG4gICAqIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Db250cm9sbGVyUmV2aXNpb25MaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBEYWVtb25TZXQgaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxL0RhZW1vblNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBEYWVtb25TZXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGRhZW1vbiBzZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EYWVtb25TZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRGFlbW9uU2V0VjFCZXRhMlByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGFlbW9uU2V0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGJlaGF2aW9yIG9mIHRoaXMgZGFlbW9uIHNldC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EYWVtb25TZXQjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IERhZW1vblNldFNwZWM7XG5cbn1cblxuLyoqXG4gKiBEYWVtb25TZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBkYWVtb24gc2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRhZW1vblNldExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRGFlbW9uU2V0TGlzdFYxQmV0YTJQcm9wcyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZGFlbW9uIHNldHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGFlbW9uU2V0TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVEYWVtb25TZXRWMUJldGEyUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRhZW1vblNldExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIERlcGxveW1lbnQgaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxL0RlcGxveW1lbnQuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gRGVwbG95bWVudCBlbmFibGVzIGRlY2xhcmF0aXZlIHVwZGF0ZXMgZm9yIFBvZHMgYW5kIFJlcGxpY2FTZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEZXBsb3ltZW50VjFCZXRhMlByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIERlcGxveW1lbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRGVwbG95bWVudFNwZWM7XG5cbn1cblxuLyoqXG4gKiBEZXBsb3ltZW50TGlzdCBpcyBhIGxpc3Qgb2YgRGVwbG95bWVudHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEZXBsb3ltZW50TGlzdFYxQmV0YTJQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBEZXBsb3ltZW50cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVEZXBsb3ltZW50VjFCZXRhMlByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIFJlcGxpY2FTZXQgaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxL1JlcGxpY2FTZXQuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gUmVwbGljYVNldCBlbnN1cmVzIHRoYXQgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHBvZCByZXBsaWNhcyBhcmUgcnVubmluZyBhdCBhbnkgZ2l2ZW4gdGltZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJlcGxpY2FTZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUmVwbGljYVNldFYxQmV0YTJQcm9wcyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgTGFiZWxzIG9mIGEgUmVwbGljYVNldCBhcmUgZW1wdHksIHRoZXkgYXJlIGRlZmF1bHRlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgUG9kKHMpIHRoYXQgdGhlIFJlcGxpY2FTZXQgbWFuYWdlcy4gU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5SZXBsaWNhU2V0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVmaW5lcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiB0aGUgUmVwbGljYVNldC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5SZXBsaWNhU2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBSZXBsaWNhU2V0U3BlYztcblxufVxuXG4vKipcbiAqIFJlcGxpY2FTZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBSZXBsaWNhU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJlcGxpY2FTZXRMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJlcGxpY2FTZXRMaXN0VjFCZXRhMlByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgUmVwbGljYVNldHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL2NvbnRyb2xsZXJzL3JlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJlcGxpY2FTZXRMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJlcGxpY2FTZXRWMUJldGEyUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJlcGxpY2FTZXRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogU2NhbGUgcmVwcmVzZW50cyBhIHNjYWxpbmcgcmVxdWVzdCBmb3IgYSByZXNvdXJjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlNjYWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVNjYWxlVjFCZXRhMlByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCBtZXRhZGF0YTsgTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TY2FsZSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgc2NhbGUuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlNjYWxlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBTY2FsZVNwZWM7XG5cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIFN0YXRlZnVsU2V0IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MS9TdGF0ZWZ1bFNldC4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBtb3JlIGluZm9ybWF0aW9uLiBTdGF0ZWZ1bFNldCByZXByZXNlbnRzIGEgc2V0IG9mIHBvZHMgd2l0aCBjb25zaXN0ZW50IGlkZW50aXRpZXMuIElkZW50aXRpZXMgYXJlIGRlZmluZWQgYXM6XG4gLSBOZXR3b3JrOiBBIHNpbmdsZSBzdGFibGUgRE5TIGFuZCBob3N0bmFtZS5cbiAtIFN0b3JhZ2U6IEFzIG1hbnkgVm9sdW1lQ2xhaW1zIGFzIHJlcXVlc3RlZC5cblRoZSBTdGF0ZWZ1bFNldCBndWFyYW50ZWVzIHRoYXQgYSBnaXZlbiBuZXR3b3JrIGlkZW50aXR5IHdpbGwgYWx3YXlzIG1hcCB0byB0aGUgc2FtZSBzdG9yYWdlIGlkZW50aXR5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU3RhdGVmdWxTZXRWMUJldGEyUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgaWRlbnRpdGllcyBvZiBwb2RzIGluIHRoaXMgc2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBTdGF0ZWZ1bFNldFNwZWM7XG5cbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bFNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFN0YXRlZnVsU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTdGF0ZWZ1bFNldExpc3RWMUJldGEyUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldExpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlU3RhdGVmdWxTZXRWMUJldGEyUHJvcHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBBdWRpdFNpbmsgcmVwcmVzZW50cyBhIGNsdXN0ZXIgbGV2ZWwgYXVkaXQgc2lua1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdWRpdHJlZ2lzdHJhdGlvbi52MWFscGhhMS5BdWRpdFNpbmtcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQXVkaXRTaW5rVjFBbHBoYTFQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuQXVkaXRTaW5rI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVmaW5lcyB0aGUgYXVkaXQgY29uZmlndXJhdGlvbiBzcGVjXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdWRpdHJlZ2lzdHJhdGlvbi52MWFscGhhMS5BdWRpdFNpbmsjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEF1ZGl0U2lua1NwZWM7XG5cbn1cblxuLyoqXG4gKiBBdWRpdFNpbmtMaXN0IGlzIGEgbGlzdCBvZiBBdWRpdFNpbmsgaXRlbXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua0xpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQXVkaXRTaW5rTGlzdFYxQWxwaGExUHJvcHMge1xuICAvKipcbiAgICogTGlzdCBvZiBhdWRpdCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLkF1ZGl0U2lua0xpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlQXVkaXRTaW5rVjFBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuQXVkaXRTaW5rTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFRva2VuUmV2aWV3IGF0dGVtcHRzIHRvIGF1dGhlbnRpY2F0ZSBhIHRva2VuIHRvIGEga25vd24gdXNlci4gTm90ZTogVG9rZW5SZXZpZXcgcmVxdWVzdHMgbWF5IGJlIGNhY2hlZCBieSB0aGUgd2ViaG9vayB0b2tlbiBhdXRoZW50aWNhdG9yIHBsdWdpbiBpbiB0aGUga3ViZS1hcGlzZXJ2ZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhlbnRpY2F0aW9uLnYxLlRva2VuUmV2aWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVRva2VuUmV2aWV3UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhlbnRpY2F0aW9uLnYxLlRva2VuUmV2aWV3I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgYmVpbmcgZXZhbHVhdGVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MS5Ub2tlblJldmlldyNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBUb2tlblJldmlld1NwZWM7XG5cbn1cblxuLyoqXG4gKiBUb2tlblJldmlldyBhdHRlbXB0cyB0byBhdXRoZW50aWNhdGUgYSB0b2tlbiB0byBhIGtub3duIHVzZXIuIE5vdGU6IFRva2VuUmV2aWV3IHJlcXVlc3RzIG1heSBiZSBjYWNoZWQgYnkgdGhlIHdlYmhvb2sgdG9rZW4gYXV0aGVudGljYXRvciBwbHVnaW4gaW4gdGhlIGt1YmUtYXBpc2VydmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MWJldGExLlRva2VuUmV2aWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVRva2VuUmV2aWV3VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MWJldGExLlRva2VuUmV2aWV3I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgYmVpbmcgZXZhbHVhdGVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MWJldGExLlRva2VuUmV2aWV3I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IFRva2VuUmV2aWV3U3BlYztcblxufVxuXG4vKipcbiAqIExvY2FsU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciBub3QgYSB1c2VyIG9yIGdyb3VwIGNhbiBwZXJmb3JtIGFuIGFjdGlvbiBpbiBhIGdpdmVuIG5hbWVzcGFjZS4gSGF2aW5nIGEgbmFtZXNwYWNlIHNjb3BlZCByZXNvdXJjZSBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBncmFudCBuYW1lc3BhY2Ugc2NvcGVkIHBvbGljeSB0aGF0IGluY2x1ZGVzIHBlcm1pc3Npb25zIGNoZWNraW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVMb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXcjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdCBiZWluZyBldmFsdWF0ZWQuICBzcGVjLm5hbWVzcGFjZSBtdXN0IGJlIGVxdWFsIHRvIHRoZSBuYW1lc3BhY2UgeW91IG1hZGUgdGhlIHJlcXVlc3QgYWdhaW5zdC4gIElmIGVtcHR5LCBpdCBpcyBkZWZhdWx0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLkxvY2FsU3ViamVjdEFjY2Vzc1JldmlldyNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYztcblxufVxuXG4vKipcbiAqIFNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3IGNoZWNrcyB3aGV0aGVyIG9yIHRoZSBjdXJyZW50IHVzZXIgY2FuIHBlcmZvcm0gYW4gYWN0aW9uLiAgTm90IGZpbGxpbmcgaW4gYSBzcGVjLm5hbWVzcGFjZSBtZWFucyBcImluIGFsbCBuYW1lc3BhY2VzXCIuICBTZWxmIGlzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIHVzZXJzIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBjaGVjayB3aGV0aGVyIHRoZXkgY2FuIHBlcmZvcm0gYW4gYWN0aW9uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MS5TZWxmU3ViamVjdEFjY2Vzc1JldmlldyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGJlaW5nIGV2YWx1YXRlZC4gIHVzZXIgYW5kIGdyb3VwcyBtdXN0IGJlIGVtcHR5XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IFNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYztcblxufVxuXG4vKipcbiAqIFNlbGZTdWJqZWN0UnVsZXNSZXZpZXcgZW51bWVyYXRlcyB0aGUgc2V0IG9mIGFjdGlvbnMgdGhlIGN1cnJlbnQgdXNlciBjYW4gcGVyZm9ybSB3aXRoaW4gYSBuYW1lc3BhY2UuIFRoZSByZXR1cm5lZCBsaXN0IG9mIGFjdGlvbnMgbWF5IGJlIGluY29tcGxldGUgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2ZXIncyBhdXRob3JpemF0aW9uIG1vZGUsIGFuZCBhbnkgZXJyb3JzIGV4cGVyaWVuY2VkIGR1cmluZyB0aGUgZXZhbHVhdGlvbi4gU2VsZlN1YmplY3RSdWxlc1JldmlldyBzaG91bGQgYmUgdXNlZCBieSBVSXMgdG8gc2hvdy9oaWRlIGFjdGlvbnMsIG9yIHRvIHF1aWNrbHkgbGV0IGFuIGVuZCB1c2VyIHJlYXNvbiBhYm91dCB0aGVpciBwZXJtaXNzaW9ucy4gSXQgc2hvdWxkIE5PVCBCZSB1c2VkIGJ5IGV4dGVybmFsIHN5c3RlbXMgdG8gZHJpdmUgYXV0aG9yaXphdGlvbiBkZWNpc2lvbnMgYXMgdGhpcyByYWlzZXMgY29uZnVzZWQgZGVwdXR5LCBjYWNoZSBsaWZldGltZS9yZXZvY2F0aW9uLCBhbmQgY29ycmVjdG5lc3MgY29uY2VybnMuIFN1YmplY3RBY2Nlc3NSZXZpZXcsIGFuZCBMb2NhbEFjY2Vzc1JldmlldyBhcmUgdGhlIGNvcnJlY3Qgd2F5IHRvIGRlZmVyIGF1dGhvcml6YXRpb24gZGVjaXNpb25zIHRvIHRoZSBBUEkgc2VydmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2VsZlN1YmplY3RSdWxlc1Jldmlld1Byb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXcjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdCBiZWluZyBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogU2VsZlN1YmplY3RSdWxlc1Jldmlld1NwZWM7XG5cbn1cblxuLyoqXG4gKiBTdWJqZWN0QWNjZXNzUmV2aWV3IGNoZWNrcyB3aGV0aGVyIG9yIG5vdCBhIHVzZXIgb3IgZ3JvdXAgY2FuIHBlcmZvcm0gYW4gYWN0aW9uLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlN1YmplY3RBY2Nlc3NSZXZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU3ViamVjdEFjY2Vzc1Jldmlld1Byb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxLlN1YmplY3RBY2Nlc3NSZXZpZXcjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdCBiZWluZyBldmFsdWF0ZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjEuU3ViamVjdEFjY2Vzc1JldmlldyNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYztcblxufVxuXG4vKipcbiAqIExvY2FsU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciBub3QgYSB1c2VyIG9yIGdyb3VwIGNhbiBwZXJmb3JtIGFuIGFjdGlvbiBpbiBhIGdpdmVuIG5hbWVzcGFjZS4gSGF2aW5nIGEgbmFtZXNwYWNlIHNjb3BlZCByZXNvdXJjZSBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBncmFudCBuYW1lc3BhY2Ugc2NvcGVkIHBvbGljeSB0aGF0IGluY2x1ZGVzIHBlcm1pc3Npb25zIGNoZWNraW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1YxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLkxvY2FsU3ViamVjdEFjY2Vzc1JldmlldyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGJlaW5nIGV2YWx1YXRlZC4gIHNwZWMubmFtZXNwYWNlIG11c3QgYmUgZXF1YWwgdG8gdGhlIG5hbWVzcGFjZSB5b3UgbWFkZSB0aGUgcmVxdWVzdCBhZ2FpbnN0LiAgSWYgZW1wdHksIGl0IGlzIGRlZmF1bHRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogU3ViamVjdEFjY2Vzc1Jldmlld1NwZWM7XG5cbn1cblxuLyoqXG4gKiBTZWxmU3ViamVjdEFjY2Vzc1JldmlldyBjaGVja3Mgd2hldGhlciBvciB0aGUgY3VycmVudCB1c2VyIGNhbiBwZXJmb3JtIGFuIGFjdGlvbi4gIE5vdCBmaWxsaW5nIGluIGEgc3BlYy5uYW1lc3BhY2UgbWVhbnMgXCJpbiBhbGwgbmFtZXNwYWNlc1wiLiAgU2VsZiBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB1c2VycyBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gY2hlY2sgd2hldGhlciB0aGV5IGNhbiBwZXJmb3JtIGFuIGFjdGlvblxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TZWxmU3ViamVjdEFjY2Vzc1JldmlldyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGJlaW5nIGV2YWx1YXRlZC4gIHVzZXIgYW5kIGdyb3VwcyBtdXN0IGJlIGVtcHR5XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogU2VsZlN1YmplY3RBY2Nlc3NSZXZpZXdTcGVjO1xuXG59XG5cbi8qKlxuICogU2VsZlN1YmplY3RSdWxlc1JldmlldyBlbnVtZXJhdGVzIHRoZSBzZXQgb2YgYWN0aW9ucyB0aGUgY3VycmVudCB1c2VyIGNhbiBwZXJmb3JtIHdpdGhpbiBhIG5hbWVzcGFjZS4gVGhlIHJldHVybmVkIGxpc3Qgb2YgYWN0aW9ucyBtYXkgYmUgaW5jb21wbGV0ZSBkZXBlbmRpbmcgb24gdGhlIHNlcnZlcidzIGF1dGhvcml6YXRpb24gbW9kZSwgYW5kIGFueSBlcnJvcnMgZXhwZXJpZW5jZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uLiBTZWxmU3ViamVjdFJ1bGVzUmV2aWV3IHNob3VsZCBiZSB1c2VkIGJ5IFVJcyB0byBzaG93L2hpZGUgYWN0aW9ucywgb3IgdG8gcXVpY2tseSBsZXQgYW4gZW5kIHVzZXIgcmVhc29uIGFib3V0IHRoZWlyIHBlcm1pc3Npb25zLiBJdCBzaG91bGQgTk9UIEJlIHVzZWQgYnkgZXh0ZXJuYWwgc3lzdGVtcyB0byBkcml2ZSBhdXRob3JpemF0aW9uIGRlY2lzaW9ucyBhcyB0aGlzIHJhaXNlcyBjb25mdXNlZCBkZXB1dHksIGNhY2hlIGxpZmV0aW1lL3Jldm9jYXRpb24sIGFuZCBjb3JyZWN0bmVzcyBjb25jZXJucy4gU3ViamVjdEFjY2Vzc1JldmlldywgYW5kIExvY2FsQWNjZXNzUmV2aWV3IGFyZSB0aGUgY29ycmVjdCB3YXkgdG8gZGVmZXIgYXV0aG9yaXphdGlvbiBkZWNpc2lvbnMgdG8gdGhlIEFQSSBzZXJ2ZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TZWxmU3ViamVjdFJ1bGVzUmV2aWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVNlbGZTdWJqZWN0UnVsZXNSZXZpZXdWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TZWxmU3ViamVjdFJ1bGVzUmV2aWV3I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgYmVpbmcgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogU2VsZlN1YmplY3RSdWxlc1Jldmlld1NwZWM7XG5cbn1cblxuLyoqXG4gKiBTdWJqZWN0QWNjZXNzUmV2aWV3IGNoZWNrcyB3aGV0aGVyIG9yIG5vdCBhIHVzZXIgb3IgZ3JvdXAgY2FuIHBlcmZvcm0gYW4gYWN0aW9uLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU3ViamVjdEFjY2Vzc1Jldmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTdWJqZWN0QWNjZXNzUmV2aWV3VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU3ViamVjdEFjY2Vzc1JldmlldyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGJlaW5nIGV2YWx1YXRlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlN1YmplY3RBY2Nlc3NSZXZpZXcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogU3ViamVjdEFjY2Vzc1Jldmlld1NwZWM7XG5cbn1cblxuLyoqXG4gKiBjb25maWd1cmF0aW9uIG9mIGEgaG9yaXpvbnRhbCBwb2QgYXV0b3NjYWxlci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlciNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBiZWhhdmlvdXIgb2YgYXV0b3NjYWxlci4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXIjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEhvcml6b250YWxQb2RBdXRvc2NhbGVyU3BlYztcblxufVxuXG4vKipcbiAqIGxpc3Qgb2YgaG9yaXpvbnRhbCBwb2QgYXV0b3NjYWxlciBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0UHJvcHMge1xuICAvKipcbiAgICogbGlzdCBvZiBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogU2NhbGUgcmVwcmVzZW50cyBhIHNjYWxpbmcgcmVxdWVzdCBmb3IgYSByZXNvdXJjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuU2NhbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2NhbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QgbWV0YWRhdGE7IE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuU2NhbGUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNjYWxlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5TY2FsZSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogU2NhbGVTcGVjO1xuXG59XG5cbi8qKlxuICogSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXIgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgaG9yaXpvbnRhbCBwb2QgYXV0b3NjYWxlciwgd2hpY2ggYXV0b21hdGljYWxseSBtYW5hZ2VzIHRoZSByZXBsaWNhIGNvdW50IG9mIGFueSByZXNvdXJjZSBpbXBsZW1lbnRpbmcgdGhlIHNjYWxlIHN1YnJlc291cmNlIGJhc2VkIG9uIHRoZSBtZXRyaWNzIHNwZWNpZmllZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlclYyQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBtZXRhZGF0YSBpcyB0aGUgc3RhbmRhcmQgb2JqZWN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlciNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBzcGVjIGlzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBhdXRvc2NhbGVyLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGExLkhvcml6b250YWxQb2RBdXRvc2NhbGVyI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBIb3Jpem9udGFsUG9kQXV0b3NjYWxlclNwZWM7XG5cbn1cblxuLyoqXG4gKiBIb3Jpem9udGFsUG9kQXV0b3NjYWxlciBpcyBhIGxpc3Qgb2YgaG9yaXpvbnRhbCBwb2QgYXV0b3NjYWxlciBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGExLkhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3RWMkJldGExUHJvcHMge1xuICAvKipcbiAgICogaXRlbXMgaXMgdGhlIGxpc3Qgb2YgaG9yaXpvbnRhbCBwb2QgYXV0b3NjYWxlciBvYmplY3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMS5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlckxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJWMkJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogbWV0YWRhdGEgaXMgdGhlIHN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGExLkhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIEhvcml6b250YWxQb2RBdXRvc2NhbGVyIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGhvcml6b250YWwgcG9kIGF1dG9zY2FsZXIsIHdoaWNoIGF1dG9tYXRpY2FsbHkgbWFuYWdlcyB0aGUgcmVwbGljYSBjb3VudCBvZiBhbnkgcmVzb3VyY2UgaW1wbGVtZW50aW5nIHRoZSBzY2FsZSBzdWJyZXNvdXJjZSBiYXNlZCBvbiB0aGUgbWV0cmljcyBzcGVjaWZpZWQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJWMkJldGEyUHJvcHMge1xuICAvKipcbiAgICogbWV0YWRhdGEgaXMgdGhlIHN0YW5kYXJkIG9iamVjdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXIjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogc3BlYyBpcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGJlaGF2aW91ciBvZiB0aGUgYXV0b3NjYWxlci4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlciNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJTcGVjO1xuXG59XG5cbi8qKlxuICogSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0IGlzIGEgbGlzdCBvZiBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdFYyQmV0YTJQcm9wcyB7XG4gIC8qKlxuICAgKiBpdGVtcyBpcyB0aGUgbGlzdCBvZiBob3Jpem9udGFsIHBvZCBhdXRvc2NhbGVyIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVIb3Jpem9udGFsUG9kQXV0b3NjYWxlclYyQmV0YTJQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBtZXRhZGF0YSBpcyB0aGUgc3RhbmRhcmQgbGlzdCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogSm9iIHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBzaW5nbGUgam9iLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MS5Kb2JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlSm9iUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MS5Kb2IjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiBhIGpvYi4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MS5Kb2Ijc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEpvYlNwZWM7XG5cbn1cblxuLyoqXG4gKiBKb2JMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBqb2JzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MS5Kb2JMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUpvYkxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBpdGVtcyBpcyB0aGUgbGlzdCBvZiBKb2JzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVKb2JQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIENyb25Kb2IgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHNpbmdsZSBjcm9uIGpvYi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjFiZXRhMS5Dcm9uSm9iXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNyb25Kb2JWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MWJldGExLkNyb25Kb2IjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiBhIGNyb24gam9iLCBpbmNsdWRpbmcgdGhlIHNjaGVkdWxlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxYmV0YTEuQ3JvbkpvYiNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogQ3JvbkpvYlNwZWM7XG5cbn1cblxuLyoqXG4gKiBDcm9uSm9iTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgY3JvbiBqb2JzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MWJldGExLkNyb25Kb2JMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNyb25Kb2JMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIGl0ZW1zIGlzIHRoZSBsaXN0IG9mIENyb25Kb2JzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjFiZXRhMS5Dcm9uSm9iTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDcm9uSm9iVjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MWJldGExLkNyb25Kb2JMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogQ3JvbkpvYiByZXByZXNlbnRzIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgc2luZ2xlIGNyb24gam9iLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNyb25Kb2JWMkFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYiNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBkZXNpcmVkIGJlaGF2aW9yIG9mIGEgY3JvbiBqb2IsIGluY2x1ZGluZyB0aGUgc2NoZWR1bGUuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3NwZWMtYW5kLXN0YXR1c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYiNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogQ3JvbkpvYlNwZWM7XG5cbn1cblxuLyoqXG4gKiBDcm9uSm9iTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgY3JvbiBqb2JzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDcm9uSm9iTGlzdFYyQWxwaGExUHJvcHMge1xuICAvKipcbiAgICogaXRlbXMgaXMgdGhlIGxpc3Qgb2YgQ3JvbkpvYnMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDcm9uSm9iVjJBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYkxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3RcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IGl0c2VsZiBhbmQgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0U3BlYztcblxufVxuXG4vKipcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0TGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdExpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdFYxQmV0YTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBMZWFzZSBkZWZpbmVzIGEgbGVhc2UgY29uY2VwdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxLkxlYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUxlYXNlUHJvcHMge1xuICAvKipcbiAgICogTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBMZWFzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb29yZGluYXRpb24udjEuTGVhc2Ujc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IExlYXNlU3BlYztcblxufVxuXG4vKipcbiAqIExlYXNlTGlzdCBpcyBhIGxpc3Qgb2YgTGVhc2Ugb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxLkxlYXNlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVMZWFzZUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2Ygc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb29yZGluYXRpb24udjEuTGVhc2VMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUxlYXNlUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MS5MZWFzZUxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBMZWFzZSBkZWZpbmVzIGEgbGVhc2UgY29uY2VwdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlTGVhc2VWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIExlYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBMZWFzZVNwZWM7XG5cbn1cblxuLyoqXG4gKiBMZWFzZUxpc3QgaXMgYSBsaXN0IG9mIExlYXNlIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVMZWFzZUxpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUxlYXNlVjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb29yZGluYXRpb24udjFiZXRhMS5MZWFzZUxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBCaW5kaW5nIHRpZXMgb25lIG9iamVjdCB0byBhbm90aGVyOyBmb3IgZXhhbXBsZSwgYSBwb2QgaXMgYm91bmQgdG8gYSBub2RlIGJ5IGEgc2NoZWR1bGVyLiBEZXByZWNhdGVkIGluIDEuNywgcGxlYXNlIHVzZSB0aGUgYmluZGluZ3Mgc3VicmVzb3VyY2Ugb2YgcG9kcyBpbnN0ZWFkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkJpbmRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQmluZGluZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5CaW5kaW5nI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgb2JqZWN0IHRoYXQgeW91IHdhbnQgdG8gYmluZCB0byB0aGUgc3RhbmRhcmQgb2JqZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5CaW5kaW5nI3RhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBPYmplY3RSZWZlcmVuY2U7XG5cbn1cblxuLyoqXG4gKiBDb21wb25lbnRTdGF0dXMgKGFuZCBDb21wb25lbnRTdGF0dXNMaXN0KSBob2xkcyB0aGUgY2x1c3RlciB2YWxpZGF0aW9uIGluZm8uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNvbXBvbmVudFN0YXR1c1Byb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgY29tcG9uZW50IGNvbmRpdGlvbnMgb2JzZXJ2ZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzI2NvbmRpdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM/OiBDb21wb25lbnRDb25kaXRpb25bXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbXBvbmVudFN0YXR1cyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG59XG5cbi8qKlxuICogU3RhdHVzIG9mIGFsbCB0aGUgY29uZGl0aW9ucyBmb3IgdGhlIGNvbXBvbmVudCBhcyBhIGxpc3Qgb2YgQ29tcG9uZW50U3RhdHVzIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDb21wb25lbnRTdGF0dXNMaXN0UHJvcHMge1xuICAvKipcbiAgICogTGlzdCBvZiBDb21wb25lbnRTdGF0dXMgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50U3RhdHVzTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDb21wb25lbnRTdGF0dXNQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db21wb25lbnRTdGF0dXNMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogQ29uZmlnTWFwIGhvbGRzIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgcG9kcyB0byBjb25zdW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDb25maWdNYXBQcm9wcyB7XG4gIC8qKlxuICAgKiBCaW5hcnlEYXRhIGNvbnRhaW5zIHRoZSBiaW5hcnkgZGF0YS4gRWFjaCBrZXkgbXVzdCBjb25zaXN0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCAnLScsICdfJyBvciAnLicuIEJpbmFyeURhdGEgY2FuIGNvbnRhaW4gYnl0ZSBzZXF1ZW5jZXMgdGhhdCBhcmUgbm90IGluIHRoZSBVVEYtOCByYW5nZS4gVGhlIGtleXMgc3RvcmVkIGluIEJpbmFyeURhdGEgbXVzdCBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBvbmVzIGluIHRoZSBEYXRhIGZpZWxkLCB0aGlzIGlzIGVuZm9yY2VkIGR1cmluZyB2YWxpZGF0aW9uIHByb2Nlc3MuIFVzaW5nIHRoaXMgZmllbGQgd2lsbCByZXF1aXJlIDEuMTArIGFwaXNlcnZlciBhbmQga3ViZWxldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwI2JpbmFyeURhdGFcbiAgICovXG4gIHJlYWRvbmx5IGJpbmFyeURhdGE/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEYXRhIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGRhdGEuIEVhY2gga2V5IG11c3QgY29uc2lzdCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgJy0nLCAnXycgb3IgJy4nLiBWYWx1ZXMgd2l0aCBub24tVVRGLTggYnl0ZSBzZXF1ZW5jZXMgbXVzdCB1c2UgdGhlIEJpbmFyeURhdGEgZmllbGQuIFRoZSBrZXlzIHN0b3JlZCBpbiBEYXRhIG11c3Qgbm90IG92ZXJsYXAgd2l0aCB0aGUga2V5cyBpbiB0aGUgQmluYXJ5RGF0YSBmaWVsZCwgdGhpcyBpcyBlbmZvcmNlZCBkdXJpbmcgdmFsaWRhdGlvbiBwcm9jZXNzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXAjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXAjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxufVxuXG4vKipcbiAqIENvbmZpZ01hcExpc3QgaXMgYSByZXNvdXJjZSBjb250YWluaW5nIGEgbGlzdCBvZiBDb25maWdNYXAgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNvbmZpZ01hcExpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBDb25maWdNYXBzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUNvbmZpZ01hcFByb3BzW107XG5cbiAgLyoqXG4gICAqIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBFbmRwb2ludHMgaXMgYSBjb2xsZWN0aW9uIG9mIGVuZHBvaW50cyB0aGF0IGltcGxlbWVudCB0aGUgYWN0dWFsIHNlcnZpY2UuIEV4YW1wbGU6XG4gIE5hbWU6IFwibXlzdmNcIixcbiAgU3Vic2V0czogW1xuICAgIHtcbiAgICAgIEFkZHJlc3NlczogW3tcImlwXCI6IFwiMTAuMTAuMS4xXCJ9LCB7XCJpcFwiOiBcIjEwLjEwLjIuMlwifV0sXG4gICAgICBQb3J0czogW3tcIm5hbWVcIjogXCJhXCIsIFwicG9ydFwiOiA4Njc1fSwge1wibmFtZVwiOiBcImJcIiwgXCJwb3J0XCI6IDMwOX1dXG4gICAgfSxcbiAgICB7XG4gICAgICBBZGRyZXNzZXM6IFt7XCJpcFwiOiBcIjEwLjEwLjMuM1wifV0sXG4gICAgICBQb3J0czogW3tcIm5hbWVcIjogXCJhXCIsIFwicG9ydFwiOiA5M30sIHtcIm5hbWVcIjogXCJiXCIsIFwicG9ydFwiOiA3Nn1dXG4gICAgfSxcbiBdXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUVuZHBvaW50c1Byb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludHMjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBhbGwgZW5kcG9pbnRzIGlzIHRoZSB1bmlvbiBvZiBhbGwgc3Vic2V0cy4gQWRkcmVzc2VzIGFyZSBwbGFjZWQgaW50byBzdWJzZXRzIGFjY29yZGluZyB0byB0aGUgSVBzIHRoZXkgc2hhcmUuIEEgc2luZ2xlIGFkZHJlc3Mgd2l0aCBtdWx0aXBsZSBwb3J0cywgc29tZSBvZiB3aGljaCBhcmUgcmVhZHkgYW5kIHNvbWUgb2Ygd2hpY2ggYXJlIG5vdCAoYmVjYXVzZSB0aGV5IGNvbWUgZnJvbSBkaWZmZXJlbnQgY29udGFpbmVycykgd2lsbCByZXN1bHQgaW4gdGhlIGFkZHJlc3MgYmVpbmcgZGlzcGxheWVkIGluIGRpZmZlcmVudCBzdWJzZXRzIGZvciB0aGUgZGlmZmVyZW50IHBvcnRzLiBObyBhZGRyZXNzIHdpbGwgYXBwZWFyIGluIGJvdGggQWRkcmVzc2VzIGFuZCBOb3RSZWFkeUFkZHJlc3NlcyBpbiB0aGUgc2FtZSBzdWJzZXQuIFNldHMgb2YgYWRkcmVzc2VzIGFuZCBwb3J0cyB0aGF0IGNvbXByaXNlIGEgc2VydmljZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRzI3N1YnNldHNcbiAgICovXG4gIHJlYWRvbmx5IHN1YnNldHM/OiBFbmRwb2ludFN1YnNldFtdO1xuXG59XG5cbi8qKlxuICogRW5kcG9pbnRzTGlzdCBpcyBhIGxpc3Qgb2YgZW5kcG9pbnRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50c0xpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRW5kcG9pbnRzTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludHNMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUVuZHBvaW50c1Byb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50c0xpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBFdmVudCBpcyBhIHJlcG9ydCBvZiBhbiBldmVudCBzb21ld2hlcmUgaW4gdGhlIGNsdXN0ZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRXZlbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGF0IGFjdGlvbiB3YXMgdGFrZW4vZmFpbGVkIHJlZ2FyZGluZyB0byB0aGUgUmVnYXJkaW5nIG9iamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBldmVudCBoYXMgb2NjdXJyZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50I2NvdW50XG4gICAqL1xuICByZWFkb25seSBjb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGltZSB3aGVuIHRoaXMgRXZlbnQgd2FzIGZpcnN0IG9ic2VydmVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudCNldmVudFRpbWVcbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50VGltZT86IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBldmVudCB3YXMgZmlyc3QgcmVjb3JkZWQuIChUaW1lIG9mIHNlcnZlciByZWNlaXB0IGlzIGluIFR5cGVNZXRhLilcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjZmlyc3RUaW1lc3RhbXBcbiAgICovXG4gIHJlYWRvbmx5IGZpcnN0VGltZXN0YW1wPzogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0aGF0IHRoaXMgZXZlbnQgaXMgYWJvdXQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50I2ludm9sdmVkT2JqZWN0XG4gICAqL1xuICByZWFkb25seSBpbnZvbHZlZE9iamVjdDogT2JqZWN0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgbW9zdCByZWNlbnQgb2NjdXJyZW5jZSBvZiB0aGlzIGV2ZW50IHdhcyByZWNvcmRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjbGFzdFRpbWVzdGFtcFxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdFRpbWVzdGFtcD86IERhdGU7XG5cbiAgLyoqXG4gICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cyBvZiB0aGlzIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogVGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciB0aGUgdHJhbnNpdGlvbiBpbnRvIHRoZSBvYmplY3QncyBjdXJyZW50IHN0YXR1cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjcmVhc29uXG4gICAqL1xuICByZWFkb25seSByZWFzb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlY29uZGFyeSBvYmplY3QgZm9yIG1vcmUgY29tcGxleCBhY3Rpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudCNyZWxhdGVkXG4gICAqL1xuICByZWFkb25seSByZWxhdGVkPzogT2JqZWN0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjb250cm9sbGVyIHRoYXQgZW1pdHRlZCB0aGlzIEV2ZW50LCBlLmcuIGBrdWJlcm5ldGVzLmlvL2t1YmVsZXRgLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudCNyZXBvcnRpbmdDb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9ydGluZ0NvbXBvbmVudD86IHN0cmluZztcblxuICAvKipcbiAgICogSUQgb2YgdGhlIGNvbnRyb2xsZXIgaW5zdGFuY2UsIGUuZy4gYGt1YmVsZXQteHl6ZmAuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50I3JlcG9ydGluZ0luc3RhbmNlXG4gICAqL1xuICByZWFkb25seSByZXBvcnRpbmdJbnN0YW5jZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YSBhYm91dCB0aGUgRXZlbnQgc2VyaWVzIHRoaXMgZXZlbnQgcmVwcmVzZW50cyBvciBuaWwgaWYgaXQncyBhIHNpbmdsZXRvbiBFdmVudC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjc2VyaWVzXG4gICAqL1xuICByZWFkb25seSBzZXJpZXM/OiBFdmVudFNlcmllcztcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCByZXBvcnRpbmcgdGhpcyBldmVudC4gU2hvdWxkIGJlIGEgc2hvcnQgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50I3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRXZlbnRTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhpcyBldmVudCAoTm9ybWFsLCBXYXJuaW5nKSwgbmV3IHR5cGVzIGNvdWxkIGJlIGFkZGVkIGluIHRoZSBmdXR1cmVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnQjdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEV2ZW50TGlzdCBpcyBhIGxpc3Qgb2YgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVFdmVudExpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGV2ZW50c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudExpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlRXZlbnRQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBMaW1pdFJhbmdlIHNldHMgcmVzb3VyY2UgdXNhZ2UgbGltaXRzIGZvciBlYWNoIGtpbmQgb2YgcmVzb3VyY2UgaW4gYSBOYW1lc3BhY2UuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVMaW1pdFJhbmdlUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2UjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBkZWZpbmVzIHRoZSBsaW1pdHMgZW5mb3JjZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3NwZWMtYW5kLXN0YXR1c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBMaW1pdFJhbmdlU3BlYztcblxufVxuXG4vKipcbiAqIExpbWl0UmFuZ2VMaXN0IGlzIGEgbGlzdCBvZiBMaW1pdFJhbmdlIGl0ZW1zLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUxpbWl0UmFuZ2VMaXN0UHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIExpbWl0UmFuZ2Ugb2JqZWN0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1jb21wdXRlLXJlc291cmNlcy1jb250YWluZXIvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUxpbWl0UmFuZ2VQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIE5hbWVzcGFjZSBwcm92aWRlcyBhIHNjb3BlIGZvciBOYW1lcy4gVXNlIG9mIG11bHRpcGxlIG5hbWVzcGFjZXMgaXMgb3B0aW9uYWwuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTmFtZXNwYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZU5hbWVzcGFjZVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2UjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgTmFtZXNwYWNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTmFtZXNwYWNlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBOYW1lc3BhY2VTcGVjO1xuXG59XG5cbi8qKlxuICogTmFtZXNwYWNlTGlzdCBpcyBhIGxpc3Qgb2YgTmFtZXNwYWNlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2VMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZU5hbWVzcGFjZUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBOYW1lc3BhY2Ugb2JqZWN0cyBpbiB0aGUgbGlzdC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lc3BhY2VzL1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2VMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZU5hbWVzcGFjZVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5hbWVzcGFjZUxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBOb2RlIGlzIGEgd29ya2VyIG5vZGUgaW4gS3ViZXJuZXRlcy4gRWFjaCBub2RlIHdpbGwgaGF2ZSBhIHVuaXF1ZSBpZGVudGlmaWVyIGluIHRoZSBjYWNoZSAoaS5lLiBpbiBldGNkKS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZU5vZGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIGEgbm9kZS4gaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3NwZWMtYW5kLXN0YXR1c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBOb2RlU3BlYztcblxufVxuXG4vKipcbiAqIE5vZGVMaXN0IGlzIHRoZSB3aG9sZSBsaXN0IG9mIGFsbCBOb2RlcyB3aGljaCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIG1hc3Rlci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVOb2RlTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygbm9kZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZUxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlTm9kZVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUGVyc2lzdGVudFZvbHVtZSAoUFYpIGlzIGEgc3RvcmFnZSByZXNvdXJjZSBwcm92aXNpb25lZCBieSBhbiBhZG1pbmlzdHJhdG9yLiBJdCBpcyBhbmFsb2dvdXMgdG8gYSBub2RlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQZXJzaXN0ZW50Vm9sdW1lUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBkZWZpbmVzIGEgc3BlY2lmaWNhdGlvbiBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIG93bmVkIGJ5IHRoZSBjbHVzdGVyLiBQcm92aXNpb25lZCBieSBhbiBhZG1pbmlzdHJhdG9yLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnQtdm9sdW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBQZXJzaXN0ZW50Vm9sdW1lU3BlYztcblxufVxuXG4vKipcbiAqIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyBhIHVzZXIncyByZXF1ZXN0IGZvciBhbmQgY2xhaW0gdG8gYSBwZXJzaXN0ZW50IHZvbHVtZVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Qcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSB2b2x1bWUgcmVxdWVzdGVkIGJ5IGEgcG9kIGF1dGhvci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlYztcblxufVxuXG4vKipcbiAqIFBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3QgaXMgYSBsaXN0IG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpdGVtcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW1zLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Qcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUGVyc2lzdGVudFZvbHVtZUxpc3QgaXMgYSBsaXN0IG9mIFBlcnNpc3RlbnRWb2x1bWUgaXRlbXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUGVyc2lzdGVudFZvbHVtZUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBlcnNpc3RlbnQgdm9sdW1lcy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVQZXJzaXN0ZW50Vm9sdW1lUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBQb2QgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbnRhaW5lcnMgdGhhdCBjYW4gcnVuIG9uIGEgaG9zdC4gVGhpcyByZXNvdXJjZSBpcyBjcmVhdGVkIGJ5IGNsaWVudHMgYW5kIHNjaGVkdWxlZCBvbnRvIGhvc3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQb2RQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIHBvZC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogUG9kU3BlYztcblxufVxuXG4vKipcbiAqIFBvZExpc3QgaXMgYSBsaXN0IG9mIFBvZHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQb2RMaXN0UHJvcHMge1xuICAvKipcbiAgICogTGlzdCBvZiBwb2RzLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVBvZFByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZExpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBQb2RUZW1wbGF0ZSBkZXNjcmliZXMgYSB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgY29waWVzIG9mIGEgcHJlZGVmaW5lZCBwb2QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kVGVtcGxhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUG9kVGVtcGxhdGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kVGVtcGxhdGUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogVGVtcGxhdGUgZGVmaW5lcyB0aGUgcG9kcyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoaXMgcG9kIHRlbXBsYXRlLiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlI3RlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZT86IFBvZFRlbXBsYXRlU3BlYztcblxufVxuXG4vKipcbiAqIFBvZFRlbXBsYXRlTGlzdCBpcyBhIGxpc3Qgb2YgUG9kVGVtcGxhdGVzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQb2RUZW1wbGF0ZUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvZCB0ZW1wbGF0ZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kVGVtcGxhdGVMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVBvZFRlbXBsYXRlUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kVGVtcGxhdGVMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUmVwbGljYXRpb25Db250cm9sbGVyIHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSByZXBsaWNhdGlvbiBjb250cm9sbGVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSZXBsaWNhdGlvbkNvbnRyb2xsZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgTGFiZWxzIG9mIGEgUmVwbGljYXRpb25Db250cm9sbGVyIGFyZSBlbXB0eSwgdGhleSBhcmUgZGVmYXVsdGVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBQb2QocykgdGhhdCB0aGUgcmVwbGljYXRpb24gY29udHJvbGxlciBtYW5hZ2VzLiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVwbGljYXRpb25Db250cm9sbGVyI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVmaW5lcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiB0aGUgcmVwbGljYXRpb24gY29udHJvbGxlci4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlciNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogUmVwbGljYXRpb25Db250cm9sbGVyU3BlYztcblxufVxuXG4vKipcbiAqIFJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcmVwbGljYXRpb24gY29udHJvbGxlcnMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL2NvbnRyb2xsZXJzL3JlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJlcGxpY2F0aW9uQ29udHJvbGxlclByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBSZXNvdXJjZVF1b3RhIHNldHMgYWdncmVnYXRlIHF1b3RhIHJlc3RyaWN0aW9ucyBlbmZvcmNlZCBwZXIgbmFtZXNwYWNlXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVzb3VyY2VRdW90YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSZXNvdXJjZVF1b3RhUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGEjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHF1b3RhLiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGEjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFJlc291cmNlUXVvdGFTcGVjO1xuXG59XG5cbi8qKlxuICogUmVzb3VyY2VRdW90YUxpc3QgaXMgYSBsaXN0IG9mIFJlc291cmNlUXVvdGEgaXRlbXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVzb3VyY2VRdW90YUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUmVzb3VyY2VRdW90YUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2YgUmVzb3VyY2VRdW90YSBvYmplY3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3BvbGljeS9yZXNvdXJjZS1xdW90YXMvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGFMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJlc291cmNlUXVvdGFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFNlY3JldCBob2xkcyBzZWNyZXQgZGF0YSBvZiBhIGNlcnRhaW4gdHlwZS4gVGhlIHRvdGFsIGJ5dGVzIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIERhdGEgZmllbGQgbXVzdCBiZSBsZXNzIHRoYW4gTWF4U2VjcmV0U2l6ZSBieXRlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2VjcmV0UHJvcHMge1xuICAvKipcbiAgICogRGF0YSBjb250YWlucyB0aGUgc2VjcmV0IGRhdGEuIEVhY2gga2V5IG11c3QgY29uc2lzdCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgJy0nLCAnXycgb3IgJy4nLiBUaGUgc2VyaWFsaXplZCBmb3JtIG9mIHRoZSBzZWNyZXQgZGF0YSBpcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZywgcmVwcmVzZW50aW5nIHRoZSBhcmJpdHJhcnkgKHBvc3NpYmx5IG5vbi1zdHJpbmcpIGRhdGEgdmFsdWUgaGVyZS4gRGVzY3JpYmVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4I3NlY3Rpb24tNFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXQjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogc3RyaW5nRGF0YSBhbGxvd3Mgc3BlY2lmeWluZyBub24tYmluYXJ5IHNlY3JldCBkYXRhIGluIHN0cmluZyBmb3JtLiBJdCBpcyBwcm92aWRlZCBhcyBhIHdyaXRlLW9ubHkgY29udmVuaWVuY2UgbWV0aG9kLiBBbGwga2V5cyBhbmQgdmFsdWVzIGFyZSBtZXJnZWQgaW50byB0aGUgZGF0YSBmaWVsZCBvbiB3cml0ZSwgb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nIHZhbHVlcy4gSXQgaXMgbmV2ZXIgb3V0cHV0IHdoZW4gcmVhZGluZyBmcm9tIHRoZSBBUEkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldCNzdHJpbmdEYXRhXG4gICAqL1xuICByZWFkb25seSBzdHJpbmdEYXRhPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVXNlZCB0byBmYWNpbGl0YXRlIHByb2dyYW1tYXRpYyBoYW5kbGluZyBvZiBzZWNyZXQgZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0I3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTZWNyZXRMaXN0IGlzIGEgbGlzdCBvZiBTZWNyZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTZWNyZXRMaXN0UHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIHNlY3JldCBvYmplY3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vc2VjcmV0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldExpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlU2VjcmV0UHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0TGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFNlcnZpY2UgaXMgYSBuYW1lZCBhYnN0cmFjdGlvbiBvZiBzb2Z0d2FyZSBzZXJ2aWNlIChmb3IgZXhhbXBsZSwgbXlzcWwpIGNvbnNpc3Rpbmcgb2YgbG9jYWwgcG9ydCAoZm9yIGV4YW1wbGUgMzMwNikgdGhhdCB0aGUgcHJveHkgbGlzdGVucyBvbiwgYW5kIHRoZSBzZWxlY3RvciB0aGF0IGRldGVybWluZXMgd2hpY2ggcG9kcyB3aWxsIGFuc3dlciByZXF1ZXN0cyBzZW50IHRocm91Z2ggdGhlIHByb3h5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2VydmljZVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgYSBzZXJ2aWNlLiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2Ujc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFNlcnZpY2VTcGVjO1xuXG59XG5cbi8qKlxuICogU2VydmljZUFjY291bnQgYmluZHMgdG9nZXRoZXI6ICogYSBuYW1lLCB1bmRlcnN0b29kIGJ5IHVzZXJzLCBhbmQgcGVyaGFwcyBieSBwZXJpcGhlcmFsIHN5c3RlbXMsIGZvciBhbiBpZGVudGl0eSAqIGEgcHJpbmNpcGFsIHRoYXQgY2FuIGJlIGF1dGhlbnRpY2F0ZWQgYW5kIGF1dGhvcml6ZWQgKiBhIHNldCBvZiBzZWNyZXRzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlU2VydmljZUFjY291bnRQcm9wcyB7XG4gIC8qKlxuICAgKiBBdXRvbW91bnRTZXJ2aWNlQWNjb3VudFRva2VuIGluZGljYXRlcyB3aGV0aGVyIHBvZHMgcnVubmluZyBhcyB0aGlzIHNlcnZpY2UgYWNjb3VudCBzaG91bGQgaGF2ZSBhbiBBUEkgdG9rZW4gYXV0b21hdGljYWxseSBtb3VudGVkLiBDYW4gYmUgb3ZlcnJpZGRlbiBhdCB0aGUgcG9kIGxldmVsLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlQWNjb3VudCNhdXRvbW91bnRTZXJ2aWNlQWNjb3VudFRva2VuXG4gICAqL1xuICByZWFkb25seSBhdXRvbW91bnRTZXJ2aWNlQWNjb3VudFRva2VuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW1hZ2VQdWxsU2VjcmV0cyBpcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZWNyZXRzIGluIHRoZSBzYW1lIG5hbWVzcGFjZSB0byB1c2UgZm9yIHB1bGxpbmcgYW55IGltYWdlcyBpbiBwb2RzIHRoYXQgcmVmZXJlbmNlIHRoaXMgU2VydmljZUFjY291bnQuIEltYWdlUHVsbFNlY3JldHMgYXJlIGRpc3RpbmN0IGZyb20gU2VjcmV0cyBiZWNhdXNlIFNlY3JldHMgY2FuIGJlIG1vdW50ZWQgaW4gdGhlIHBvZCwgYnV0IEltYWdlUHVsbFNlY3JldHMgYXJlIG9ubHkgYWNjZXNzZWQgYnkgdGhlIGt1YmVsZXQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29udGFpbmVycy9pbWFnZXMvI3NwZWNpZnlpbmctaW1hZ2VwdWxsc2VjcmV0cy1vbi1hLXBvZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlQWNjb3VudCNpbWFnZVB1bGxTZWNyZXRzXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxTZWNyZXRzPzogTG9jYWxPYmplY3RSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNlY3JldHMgaXMgdGhlIGxpc3Qgb2Ygc2VjcmV0cyBhbGxvd2VkIHRvIGJlIHVzZWQgYnkgcG9kcyBydW5uaW5nIHVzaW5nIHRoaXMgU2VydmljZUFjY291bnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9zZWNyZXRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnQjc2VjcmV0c1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0cz86IE9iamVjdFJlZmVyZW5jZVtdO1xuXG59XG5cbi8qKlxuICogU2VydmljZUFjY291bnRMaXN0IGlzIGEgbGlzdCBvZiBTZXJ2aWNlQWNjb3VudCBvYmplY3RzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVNlcnZpY2VBY2NvdW50TGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgU2VydmljZUFjY291bnRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3Rhc2tzL2NvbmZpZ3VyZS1wb2QtY29udGFpbmVyL2NvbmZpZ3VyZS1zZXJ2aWNlLWFjY291bnQvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVTZXJ2aWNlQWNjb3VudFByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50TGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFNlcnZpY2VMaXN0IGhvbGRzIGEgbGlzdCBvZiBzZXJ2aWNlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTZXJ2aWNlTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygc2VydmljZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlU2VydmljZVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogRXZlbnQgaXMgYSByZXBvcnQgb2YgYW4gZXZlbnQgc29tZXdoZXJlIGluIHRoZSBjbHVzdGVyLiBJdCBnZW5lcmFsbHkgZGVub3RlcyBzb21lIHN0YXRlIGNoYW5nZSBpbiB0aGUgc3lzdGVtLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVFdmVudFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGF0IGFjdGlvbiB3YXMgdGFrZW4vZmFpbGVkIHJlZ2FyZGluZyB0byB0aGUgcmVnYXJkaW5nIG9iamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I2FjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGZpZWxkIGFzc3VyaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBjb3JlLnYxIEV2ZW50IHR5cGVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I2RlcHJlY2F0ZWRDb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRlZENvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGZpZWxkIGFzc3VyaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBjb3JlLnYxIEV2ZW50IHR5cGVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I2RlcHJlY2F0ZWRGaXJzdFRpbWVzdGFtcFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRlZEZpcnN0VGltZXN0YW1wPzogRGF0ZTtcblxuICAvKipcbiAgICogRGVwcmVjYXRlZCBmaWVsZCBhc3N1cmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggY29yZS52MSBFdmVudCB0eXBlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudCNkZXByZWNhdGVkTGFzdFRpbWVzdGFtcFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRlZExhc3RUaW1lc3RhbXA/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGZpZWxkIGFzc3VyaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBjb3JlLnYxIEV2ZW50IHR5cGVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I2RlcHJlY2F0ZWRTb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcHJlY2F0ZWRTb3VyY2U/OiBFdmVudFNvdXJjZTtcblxuICAvKipcbiAgICogUmVxdWlyZWQuIFRpbWUgd2hlbiB0aGlzIEV2ZW50IHdhcyBmaXJzdCBvYnNlcnZlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I2V2ZW50VGltZVxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRUaW1lOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXZlbnRzLnYxYmV0YTEuRXZlbnQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogT3B0aW9uYWwuIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cyBvZiB0aGlzIG9wZXJhdGlvbi4gTWF4aW1hbCBsZW5ndGggb2YgdGhlIG5vdGUgaXMgMWtCLCBidXQgbGlicmFyaWVzIHNob3VsZCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgdmFsdWVzIHVwIHRvIDY0a0IuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudCNub3RlXG4gICAqL1xuICByZWFkb25seSBub3RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaHkgdGhlIGFjdGlvbiB3YXMgdGFrZW4uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudCNyZWFzb25cbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0aGlzIEV2ZW50IGlzIGFib3V0LiBJbiBtb3N0IGNhc2VzIGl0J3MgYW4gT2JqZWN0IHJlcG9ydGluZyBjb250cm9sbGVyIGltcGxlbWVudHMuIEUuZy4gUmVwbGljYVNldENvbnRyb2xsZXIgaW1wbGVtZW50cyBSZXBsaWNhU2V0cyBhbmQgdGhpcyBldmVudCBpcyBlbWl0dGVkIGJlY2F1c2UgaXQgYWN0cyBvbiBzb21lIGNoYW5nZXMgaW4gYSBSZXBsaWNhU2V0IG9iamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I3JlZ2FyZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnYXJkaW5nPzogT2JqZWN0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZWNvbmRhcnkgb2JqZWN0IGZvciBtb3JlIGNvbXBsZXggYWN0aW9ucy4gRS5nLiB3aGVuIHJlZ2FyZGluZyBvYmplY3QgdHJpZ2dlcnMgYSBjcmVhdGlvbiBvciBkZWxldGlvbiBvZiByZWxhdGVkIG9iamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I3JlbGF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0ZWQ/OiBPYmplY3RSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgdGhhdCBlbWl0dGVkIHRoaXMgRXZlbnQsIGUuZy4gYGt1YmVybmV0ZXMuaW8va3ViZWxldGAuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudCNyZXBvcnRpbmdDb250cm9sbGVyXG4gICAqL1xuICByZWFkb25seSByZXBvcnRpbmdDb250cm9sbGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJRCBvZiB0aGUgY29udHJvbGxlciBpbnN0YW5jZSwgZS5nLiBga3ViZWxldC14eXpmYC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I3JlcG9ydGluZ0luc3RhbmNlXG4gICAqL1xuICByZWFkb25seSByZXBvcnRpbmdJbnN0YW5jZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YSBhYm91dCB0aGUgRXZlbnQgc2VyaWVzIHRoaXMgZXZlbnQgcmVwcmVzZW50cyBvciBuaWwgaWYgaXQncyBhIHNpbmdsZXRvbiBFdmVudC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50I3Nlcmllc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VyaWVzPzogRXZlbnRTZXJpZXM7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhpcyBldmVudCAoTm9ybWFsLCBXYXJuaW5nKSwgbmV3IHR5cGVzIGNvdWxkIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudCN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogRXZlbnRMaXN0IGlzIGEgbGlzdCBvZiBFdmVudCBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ldmVudHMudjFiZXRhMS5FdmVudExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlRXZlbnRMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBzY2hlbWEgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVFdmVudFYxQmV0YTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXZlbnRzLnYxYmV0YTEuRXZlbnRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBEYWVtb25TZXQgaXMgZGVwcmVjYXRlZCBieSBhcHBzL3YxYmV0YTIvRGFlbW9uU2V0LiBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIERhZW1vblNldCByZXByZXNlbnRzIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZGFlbW9uIHNldC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRhZW1vblNldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEYWVtb25TZXRWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogVGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhpcyBkYWVtb24gc2V0LiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3NwZWMtYW5kLXN0YXR1c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRhZW1vblNldCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRGFlbW9uU2V0U3BlYztcblxufVxuXG4vKipcbiAqIERhZW1vblNldExpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIGRhZW1vbiBzZXRzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0TGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVEYWVtb25TZXRMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBkYWVtb24gc2V0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZURhZW1vblNldFYxQmV0YTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0TGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIEluZ3Jlc3MgaXMgYSBjb2xsZWN0aW9uIG9mIHJ1bGVzIHRoYXQgYWxsb3cgaW5ib3VuZCBjb25uZWN0aW9ucyB0byByZWFjaCB0aGUgZW5kcG9pbnRzIGRlZmluZWQgYnkgYSBiYWNrZW5kLiBBbiBJbmdyZXNzIGNhbiBiZSBjb25maWd1cmVkIHRvIGdpdmUgc2VydmljZXMgZXh0ZXJuYWxseS1yZWFjaGFibGUgdXJscywgbG9hZCBiYWxhbmNlIHRyYWZmaWMsIHRlcm1pbmF0ZSBTU0wsIG9mZmVyIG5hbWUgYmFzZWQgdmlydHVhbCBob3N0aW5nIGV0Yy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlSW5ncmVzc1YxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgaXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgdGhlIEluZ3Jlc3MuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3NwZWMtYW5kLXN0YXR1c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3Mjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEluZ3Jlc3NTcGVjO1xuXG59XG5cbi8qKlxuICogSW5ncmVzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIEluZ3Jlc3MuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVJbmdyZXNzTGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBJbmdyZXNzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUluZ3Jlc3NWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc0xpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBERVBSRUNBVEVEIDEuOSAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBOZXR3b3JrUG9saWN5IGlzIGRlcHJlY2F0ZWQgYnkgbmV0d29ya2luZy92MS9OZXR3b3JrUG9saWN5LiBOZXR3b3JrUG9saWN5IGRlc2NyaWJlcyB3aGF0IG5ldHdvcmsgdHJhZmZpYyBpcyBhbGxvd2VkIGZvciBhIHNldCBvZiBQb2RzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5OZXR3b3JrUG9saWN5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZU5ldHdvcmtQb2xpY3lWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5OZXR3b3JrUG9saWN5I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3IgZm9yIHRoaXMgTmV0d29ya1BvbGljeS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5OZXR3b3JrUG9saWN5I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBOZXR3b3JrUG9saWN5U3BlYztcblxufVxuXG4vKipcbiAqIERFUFJFQ0FURUQgMS45IC0gVGhpcyBncm91cCB2ZXJzaW9uIG9mIE5ldHdvcmtQb2xpY3lMaXN0IGlzIGRlcHJlY2F0ZWQgYnkgbmV0d29ya2luZy92MS9OZXR3b3JrUG9saWN5TGlzdC4gTmV0d29yayBQb2xpY3kgTGlzdCBpcyBhIGxpc3Qgb2YgTmV0d29ya1BvbGljeSBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuTmV0d29ya1BvbGljeUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlTmV0d29ya1BvbGljeUxpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLk5ldHdvcmtQb2xpY3lMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZU5ldHdvcmtQb2xpY3lWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLk5ldHdvcmtQb2xpY3lMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUG9kU2VjdXJpdHlQb2xpY3kgZ292ZXJucyB0aGUgYWJpbGl0eSB0byBtYWtlIHJlcXVlc3RzIHRoYXQgYWZmZWN0IHRoZSBTZWN1cml0eSBDb250ZXh0IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGEgcG9kIGFuZCBjb250YWluZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVBvZFNlY3VyaXR5UG9saWN5VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3kjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogc3BlYyBkZWZpbmVzIHRoZSBwb2xpY3kgZW5mb3JjZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogUG9kU2VjdXJpdHlQb2xpY3lTcGVjO1xuXG59XG5cbi8qKlxuICogUG9kU2VjdXJpdHlQb2xpY3lMaXN0IGlzIGEgbGlzdCBvZiBQb2RTZWN1cml0eVBvbGljeSBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUG9kU2VjdXJpdHlQb2xpY3lMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIGl0ZW1zIGlzIGEgbGlzdCBvZiBzY2hlbWEgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVQb2RTZWN1cml0eVBvbGljeVYxQmV0YTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBSZXBsaWNhU2V0IGlzIGRlcHJlY2F0ZWQgYnkgYXBwcy92MWJldGEyL1JlcGxpY2FTZXQuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gUmVwbGljYVNldCBlbnN1cmVzIHRoYXQgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHBvZCByZXBsaWNhcyBhcmUgcnVubmluZyBhdCBhbnkgZ2l2ZW4gdGltZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUmVwbGljYVNldFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgTGFiZWxzIG9mIGEgUmVwbGljYVNldCBhcmUgZW1wdHksIHRoZXkgYXJlIGRlZmF1bHRlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgUG9kKHMpIHRoYXQgdGhlIFJlcGxpY2FTZXQgbWFuYWdlcy4gU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5SZXBsaWNhU2V0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVmaW5lcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiB0aGUgUmVwbGljYVNldC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNzcGVjLWFuZC1zdGF0dXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5SZXBsaWNhU2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBSZXBsaWNhU2V0U3BlYztcblxufVxuXG4vKipcbiAqIFJlcGxpY2FTZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBSZXBsaWNhU2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJlcGxpY2FTZXRMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgUmVwbGljYVNldHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL2NvbnRyb2xsZXJzL3JlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJlcGxpY2FTZXRWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogTmV0d29ya1BvbGljeSBkZXNjcmliZXMgd2hhdCBuZXR3b3JrIHRyYWZmaWMgaXMgYWxsb3dlZCBmb3IgYSBzZXQgb2YgUG9kc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlTmV0d29ya1BvbGljeVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3kjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBmb3IgdGhpcyBOZXR3b3JrUG9saWN5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBOZXR3b3JrUG9saWN5U3BlYztcblxufVxuXG4vKipcbiAqIE5ldHdvcmtQb2xpY3lMaXN0IGlzIGEgbGlzdCBvZiBOZXR3b3JrUG9saWN5IG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlTmV0d29ya1BvbGljeUxpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2Ygc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZU5ldHdvcmtQb2xpY3lQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUnVudGltZUNsYXNzIGRlZmluZXMgYSBjbGFzcyBvZiBjb250YWluZXIgcnVudGltZSBzdXBwb3J0ZWQgaW4gdGhlIGNsdXN0ZXIuIFRoZSBSdW50aW1lQ2xhc3MgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggY29udGFpbmVyIHJ1bnRpbWUgaXMgdXNlZCB0byBydW4gYWxsIGNvbnRhaW5lcnMgaW4gYSBwb2QuIFJ1bnRpbWVDbGFzc2VzIGFyZSAoY3VycmVudGx5KSBtYW51YWxseSBkZWZpbmVkIGJ5IGEgdXNlciBvciBjbHVzdGVyIHByb3Zpc2lvbmVyLCBhbmQgcmVmZXJlbmNlZCBpbiB0aGUgUG9kU3BlYy4gVGhlIEt1YmVsZXQgaXMgcmVzcG9uc2libGUgZm9yIHJlc29sdmluZyB0aGUgUnVudGltZUNsYXNzTmFtZSByZWZlcmVuY2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHBvZC4gIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL2dpdC5rOHMuaW8vZW5oYW5jZW1lbnRzL2tlcHMvc2lnLW5vZGUvcnVudGltZS1jbGFzcy5tZFxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSdW50aW1lQ2xhc3NWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzcyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBSdW50aW1lQ2xhc3MgTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzcyNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBSdW50aW1lQ2xhc3NTcGVjO1xuXG59XG5cbi8qKlxuICogUnVudGltZUNsYXNzTGlzdCBpcyBhIGxpc3Qgb2YgUnVudGltZUNsYXNzIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5vZGUudjFhbHBoYTEuUnVudGltZUNsYXNzTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSdW50aW1lQ2xhc3NMaXN0VjFBbHBoYTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2Ygc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc0xpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlUnVudGltZUNsYXNzVjFBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubm9kZS52MWFscGhhMS5SdW50aW1lQ2xhc3NMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUnVudGltZUNsYXNzIGRlZmluZXMgYSBjbGFzcyBvZiBjb250YWluZXIgcnVudGltZSBzdXBwb3J0ZWQgaW4gdGhlIGNsdXN0ZXIuIFRoZSBSdW50aW1lQ2xhc3MgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggY29udGFpbmVyIHJ1bnRpbWUgaXMgdXNlZCB0byBydW4gYWxsIGNvbnRhaW5lcnMgaW4gYSBwb2QuIFJ1bnRpbWVDbGFzc2VzIGFyZSAoY3VycmVudGx5KSBtYW51YWxseSBkZWZpbmVkIGJ5IGEgdXNlciBvciBjbHVzdGVyIHByb3Zpc2lvbmVyLCBhbmQgcmVmZXJlbmNlZCBpbiB0aGUgUG9kU3BlYy4gVGhlIEt1YmVsZXQgaXMgcmVzcG9uc2libGUgZm9yIHJlc29sdmluZyB0aGUgUnVudGltZUNsYXNzTmFtZSByZWZlcmVuY2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHBvZC4gIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL2dpdC5rOHMuaW8vZW5oYW5jZW1lbnRzL2tlcHMvc2lnLW5vZGUvcnVudGltZS1jbGFzcy5tZFxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYmV0YTEuUnVudGltZUNsYXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJ1bnRpbWVDbGFzc1YxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBIYW5kbGVyIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBydW50aW1lIGFuZCBjb25maWd1cmF0aW9uIHRoYXQgdGhlIENSSSBpbXBsZW1lbnRhdGlvbiB3aWxsIHVzZSB0byBoYW5kbGUgcG9kcyBvZiB0aGlzIGNsYXNzLiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZSBzcGVjaWZpYyB0byB0aGUgbm9kZSAmIENSSSBjb25maWd1cmF0aW9uLiAgSXQgaXMgYXNzdW1lZCB0aGF0IGFsbCBoYW5kbGVycyBhcmUgYXZhaWxhYmxlIG9uIGV2ZXJ5IG5vZGUsIGFuZCBoYW5kbGVycyBvZiB0aGUgc2FtZSBuYW1lIGFyZSBlcXVpdmFsZW50IG9uIGV2ZXJ5IG5vZGUuIEZvciBleGFtcGxlLCBhIGhhbmRsZXIgY2FsbGVkIFwicnVuY1wiIG1pZ2h0IHNwZWNpZnkgdGhhdCB0aGUgcnVuYyBPQ0kgcnVudGltZSAodXNpbmcgbmF0aXZlIExpbnV4IGNvbnRhaW5lcnMpIHdpbGwgYmUgdXNlZCB0byBydW4gdGhlIGNvbnRhaW5lcnMgaW4gYSBwb2QuIFRoZSBIYW5kbGVyIG11c3QgY29uZm9ybSB0byB0aGUgRE5TIExhYmVsIChSRkMgMTEyMykgcmVxdWlyZW1lbnRzLCBhbmQgaXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzcyNoYW5kbGVyXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYmV0YTEuUnVudGltZUNsYXNzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBSdW50aW1lQ2xhc3NMaXN0IGlzIGEgbGlzdCBvZiBSdW50aW1lQ2xhc3Mgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubm9kZS52MWJldGExLlJ1bnRpbWVDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUnVudGltZUNsYXNzTGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2Ygc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYmV0YTEuUnVudGltZUNsYXNzTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVSdW50aW1lQ2xhc3NWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5vZGUudjFiZXRhMS5SdW50aW1lQ2xhc3NMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogRXZpY3Rpb24gZXZpY3RzIGEgcG9kIGZyb20gaXRzIG5vZGUgc3ViamVjdCB0byBjZXJ0YWluIHBvbGljaWVzIGFuZCBzYWZldHkgY29uc3RyYWludHMuIFRoaXMgaXMgYSBzdWJyZXNvdXJjZSBvZiBQb2QuICBBIHJlcXVlc3QgdG8gY2F1c2Ugc3VjaCBhbiBldmljdGlvbiBpcyBjcmVhdGVkIGJ5IFBPU1RpbmcgdG8gLi4uL3BvZHMvPHBvZCBuYW1lPi9ldmljdGlvbnMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkV2aWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUV2aWN0aW9uVjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIERlbGV0ZU9wdGlvbnMgbWF5IGJlIHByb3ZpZGVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5FdmljdGlvbiNkZWxldGVPcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZWxldGVPcHRpb25zPzogRGVsZXRlT3B0aW9ucztcblxuICAvKipcbiAgICogT2JqZWN0TWV0YSBkZXNjcmliZXMgdGhlIHBvZCB0aGF0IGlzIGJlaW5nIGV2aWN0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5FdmljdGlvbiNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG59XG5cbi8qKlxuICogUG9kRGlzcnVwdGlvbkJ1ZGdldCBpcyBhbiBvYmplY3QgdG8gZGVmaW5lIHRoZSBtYXggZGlzcnVwdGlvbiB0aGF0IGNhbiBiZSBjYXVzZWQgdG8gYSBjb2xsZWN0aW9uIG9mIHBvZHNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kRGlzcnVwdGlvbkJ1ZGdldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQb2REaXNydXB0aW9uQnVkZ2V0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIFBvZERpc3J1cHRpb25CdWRnZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBQb2REaXNydXB0aW9uQnVkZ2V0U3BlYztcblxufVxuXG4vKipcbiAqIFBvZERpc3J1cHRpb25CdWRnZXRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBQb2REaXNydXB0aW9uQnVkZ2V0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kRGlzcnVwdGlvbkJ1ZGdldExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUG9kRGlzcnVwdGlvbkJ1ZGdldExpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZERpc3J1cHRpb25CdWRnZXRMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVBvZERpc3J1cHRpb25CdWRnZXRWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZERpc3J1cHRpb25CdWRnZXRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGUgaXMgYSBjbHVzdGVyIGxldmVsLCBsb2dpY2FsIGdyb3VwaW5nIG9mIFBvbGljeVJ1bGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYXMgYSB1bml0IGJ5IGEgUm9sZUJpbmRpbmcgb3IgQ2x1c3RlclJvbGVCaW5kaW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNsdXN0ZXJSb2xlUHJvcHMge1xuICAvKipcbiAgICogQWdncmVnYXRpb25SdWxlIGlzIGFuIG9wdGlvbmFsIGZpZWxkIHRoYXQgZGVzY3JpYmVzIGhvdyB0byBidWlsZCB0aGUgUnVsZXMgZm9yIHRoaXMgQ2x1c3RlclJvbGUuIElmIEFnZ3JlZ2F0aW9uUnVsZSBpcyBzZXQsIHRoZW4gdGhlIFJ1bGVzIGFyZSBjb250cm9sbGVyIG1hbmFnZWQgYW5kIGRpcmVjdCBjaGFuZ2VzIHRvIFJ1bGVzIHdpbGwgYmUgc3RvbXBlZCBieSB0aGUgY29udHJvbGxlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGUjYWdncmVnYXRpb25SdWxlXG4gICAqL1xuICByZWFkb25seSBhZ2dyZWdhdGlvblJ1bGU/OiBBZ2dyZWdhdGlvblJ1bGU7XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MS5DbHVzdGVyUm9sZSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBSdWxlcyBob2xkcyBhbGwgdGhlIFBvbGljeVJ1bGVzIGZvciB0aGlzIENsdXN0ZXJSb2xlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFBvbGljeVJ1bGVbXTtcblxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlQmluZGluZyByZWZlcmVuY2VzIGEgQ2x1c3RlclJvbGUsIGJ1dCBub3QgY29udGFpbiBpdC4gIEl0IGNhbiByZWZlcmVuY2UgYSBDbHVzdGVyUm9sZSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgYW5kIGFkZHMgd2hvIGluZm9ybWF0aW9uIHZpYSBTdWJqZWN0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVCaW5kaW5nI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJvbGVSZWYgY2FuIG9ubHkgcmVmZXJlbmNlIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIElmIHRoZSBSb2xlUmVmIGNhbm5vdCBiZSByZXNvbHZlZCwgdGhlIEF1dGhvcml6ZXIgbXVzdCByZXR1cm4gYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZyNyb2xlUmVmXG4gICAqL1xuICByZWFkb25seSByb2xlUmVmOiBSb2xlUmVmO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0cyBob2xkcyByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RzIHRoZSByb2xlIGFwcGxpZXMgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlQmluZGluZyNzdWJqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3ViamVjdHM/OiBTdWJqZWN0W107XG5cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUJpbmRpbmdMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBDbHVzdGVyUm9sZUJpbmRpbmdzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0UHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIENsdXN0ZXJSb2xlQmluZGluZ3NcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ2x1c3RlclJvbGVzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNsdXN0ZXJSb2xlTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBDbHVzdGVyUm9sZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuQ2x1c3RlclJvbGVMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUNsdXN0ZXJSb2xlUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLkNsdXN0ZXJSb2xlTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFJvbGUgaXMgYSBuYW1lc3BhY2VkLCBsb2dpY2FsIGdyb3VwaW5nIG9mIFBvbGljeVJ1bGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYXMgYSB1bml0IGJ5IGEgUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuUm9sZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSb2xlUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogUnVsZXMgaG9sZHMgYWxsIHRoZSBQb2xpY3lSdWxlcyBmb3IgdGhpcyBSb2xlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGUjcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogUG9saWN5UnVsZVtdO1xuXG59XG5cbi8qKlxuICogUm9sZUJpbmRpbmcgcmVmZXJlbmNlcyBhIHJvbGUsIGJ1dCBkb2VzIG5vdCBjb250YWluIGl0LiAgSXQgY2FuIHJlZmVyZW5jZSBhIFJvbGUgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIG9yIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIEl0IGFkZHMgd2hvIGluZm9ybWF0aW9uIHZpYSBTdWJqZWN0cyBhbmQgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJ5IHdoaWNoIG5hbWVzcGFjZSBpdCBleGlzdHMgaW4uICBSb2xlQmluZGluZ3MgaW4gYSBnaXZlbiBuYW1lc3BhY2Ugb25seSBoYXZlIGVmZmVjdCBpbiB0aGF0IG5hbWVzcGFjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MS5Sb2xlQmluZGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSb2xlQmluZGluZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MS5Sb2xlQmluZGluZyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBSb2xlUmVmIGNhbiByZWZlcmVuY2UgYSBSb2xlIGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBvciBhIENsdXN0ZXJSb2xlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBJZiB0aGUgUm9sZVJlZiBjYW5ub3QgYmUgcmVzb2x2ZWQsIHRoZSBBdXRob3JpemVyIG11c3QgcmV0dXJuIGFuIGVycm9yLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MS5Sb2xlQmluZGluZyNyb2xlUmVmXG4gICAqL1xuICByZWFkb25seSByb2xlUmVmOiBSb2xlUmVmO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0cyBob2xkcyByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RzIHRoZSByb2xlIGFwcGxpZXMgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVCaW5kaW5nI3N1YmplY3RzXG4gICAqL1xuICByZWFkb25seSBzdWJqZWN0cz86IFN1YmplY3RbXTtcblxufVxuXG4vKipcbiAqIFJvbGVCaW5kaW5nTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZUJpbmRpbmdzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuUm9sZUJpbmRpbmdMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJvbGVCaW5kaW5nTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBSb2xlQmluZGluZ3NcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuUm9sZUJpbmRpbmdMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJvbGVCaW5kaW5nUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVCaW5kaW5nTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFJvbGVMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBSb2xlc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJvbGVMaXN0UHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIFJvbGVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxLlJvbGVMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJvbGVQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjEuUm9sZUxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZSBpcyBhIGNsdXN0ZXIgbGV2ZWwsIGxvZ2ljYWwgZ3JvdXBpbmcgb2YgUG9saWN5UnVsZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBhcyBhIHVuaXQgYnkgYSBSb2xlQmluZGluZyBvciBDbHVzdGVyUm9sZUJpbmRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ2x1c3RlclJvbGVWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0aW9uUnVsZSBpcyBhbiBvcHRpb25hbCBmaWVsZCB0aGF0IGRlc2NyaWJlcyBob3cgdG8gYnVpbGQgdGhlIFJ1bGVzIGZvciB0aGlzIENsdXN0ZXJSb2xlLiBJZiBBZ2dyZWdhdGlvblJ1bGUgaXMgc2V0LCB0aGVuIHRoZSBSdWxlcyBhcmUgY29udHJvbGxlciBtYW5hZ2VkIGFuZCBkaXJlY3QgY2hhbmdlcyB0byBSdWxlcyB3aWxsIGJlIHN0b21wZWQgYnkgdGhlIGNvbnRyb2xsZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlI2FnZ3JlZ2F0aW9uUnVsZVxuICAgKi9cbiAgcmVhZG9ubHkgYWdncmVnYXRpb25SdWxlPzogQWdncmVnYXRpb25SdWxlO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogUnVsZXMgaG9sZHMgYWxsIHRoZSBQb2xpY3lSdWxlcyBmb3IgdGhpcyBDbHVzdGVyUm9sZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZSNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBQb2xpY3lSdWxlW107XG5cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUJpbmRpbmcgcmVmZXJlbmNlcyBhIENsdXN0ZXJSb2xlLCBidXQgbm90IGNvbnRhaW4gaXQuICBJdCBjYW4gcmVmZXJlbmNlIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGFuZCBhZGRzIHdobyBpbmZvcm1hdGlvbiB2aWEgU3ViamVjdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZUJpbmRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ2x1c3RlclJvbGVCaW5kaW5nVjFBbHBoYTFQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVCaW5kaW5nI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJvbGVSZWYgY2FuIG9ubHkgcmVmZXJlbmNlIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIElmIHRoZSBSb2xlUmVmIGNhbm5vdCBiZSByZXNvbHZlZCwgdGhlIEF1dGhvcml6ZXIgbXVzdCByZXR1cm4gYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlQmluZGluZyNyb2xlUmVmXG4gICAqL1xuICByZWFkb25seSByb2xlUmVmOiBSb2xlUmVmO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0cyBob2xkcyByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RzIHRoZSByb2xlIGFwcGxpZXMgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlQmluZGluZyNzdWJqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3ViamVjdHM/OiBTdWJqZWN0W107XG5cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUJpbmRpbmdMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBDbHVzdGVyUm9sZUJpbmRpbmdzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0VjFBbHBoYTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2YgQ2x1c3RlclJvbGVCaW5kaW5nc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUNsdXN0ZXJSb2xlQmluZGluZ1YxQWxwaGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIENsdXN0ZXJSb2xlc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLkNsdXN0ZXJSb2xlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDbHVzdGVyUm9sZUxpc3RWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBDbHVzdGVyUm9sZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUNsdXN0ZXJSb2xlVjFBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuQ2x1c3RlclJvbGVMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUm9sZSBpcyBhIG5hbWVzcGFjZWQsIGxvZ2ljYWwgZ3JvdXBpbmcgb2YgUG9saWN5UnVsZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBhcyBhIHVuaXQgYnkgYSBSb2xlQmluZGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJvbGVWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJ1bGVzIGhvbGRzIGFsbCB0aGUgUG9saWN5UnVsZXMgZm9yIHRoaXMgUm9sZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFBvbGljeVJ1bGVbXTtcblxufVxuXG4vKipcbiAqIFJvbGVCaW5kaW5nIHJlZmVyZW5jZXMgYSByb2xlLCBidXQgZG9lcyBub3QgY29udGFpbiBpdC4gIEl0IGNhbiByZWZlcmVuY2UgYSBSb2xlIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBvciBhIENsdXN0ZXJSb2xlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBJdCBhZGRzIHdobyBpbmZvcm1hdGlvbiB2aWEgU3ViamVjdHMgYW5kIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBieSB3aGljaCBuYW1lc3BhY2UgaXQgZXhpc3RzIGluLiAgUm9sZUJpbmRpbmdzIGluIGEgZ2l2ZW4gbmFtZXNwYWNlIG9ubHkgaGF2ZSBlZmZlY3QgaW4gdGhhdCBuYW1lc3BhY2UuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUJpbmRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUm9sZUJpbmRpbmdWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBSb2xlUmVmIGNhbiByZWZlcmVuY2UgYSBSb2xlIGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBvciBhIENsdXN0ZXJSb2xlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBJZiB0aGUgUm9sZVJlZiBjYW5ub3QgYmUgcmVzb2x2ZWQsIHRoZSBBdXRob3JpemVyIG11c3QgcmV0dXJuIGFuIGVycm9yLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZyNyb2xlUmVmXG4gICAqL1xuICByZWFkb25seSByb2xlUmVmOiBSb2xlUmVmO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0cyBob2xkcyByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RzIHRoZSByb2xlIGFwcGxpZXMgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLlJvbGVCaW5kaW5nI3N1YmplY3RzXG4gICAqL1xuICByZWFkb25seSBzdWJqZWN0cz86IFN1YmplY3RbXTtcblxufVxuXG4vKipcbiAqIFJvbGVCaW5kaW5nTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZUJpbmRpbmdzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFhbHBoYTEuUm9sZUJpbmRpbmdMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJvbGVCaW5kaW5nTGlzdFYxQWxwaGExUHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIFJvbGVCaW5kaW5nc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZ0xpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlUm9sZUJpbmRpbmdWMUFscGhhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlQmluZGluZ0xpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZXNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSb2xlTGlzdFYxQWxwaGExUHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgYSBsaXN0IG9mIFJvbGVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYWxwaGExLlJvbGVMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVJvbGVWMUFscGhhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWFscGhhMS5Sb2xlTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlIGlzIGEgY2x1c3RlciBsZXZlbCwgbG9naWNhbCBncm91cGluZyBvZiBQb2xpY3lSdWxlcyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGFzIGEgdW5pdCBieSBhIFJvbGVCaW5kaW5nIG9yIENsdXN0ZXJSb2xlQmluZGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNsdXN0ZXJSb2xlVjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0aW9uUnVsZSBpcyBhbiBvcHRpb25hbCBmaWVsZCB0aGF0IGRlc2NyaWJlcyBob3cgdG8gYnVpbGQgdGhlIFJ1bGVzIGZvciB0aGlzIENsdXN0ZXJSb2xlLiBJZiBBZ2dyZWdhdGlvblJ1bGUgaXMgc2V0LCB0aGVuIHRoZSBSdWxlcyBhcmUgY29udHJvbGxlciBtYW5hZ2VkIGFuZCBkaXJlY3QgY2hhbmdlcyB0byBSdWxlcyB3aWxsIGJlIHN0b21wZWQgYnkgdGhlIGNvbnRyb2xsZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGUjYWdncmVnYXRpb25SdWxlXG4gICAqL1xuICByZWFkb25seSBhZ2dyZWdhdGlvblJ1bGU/OiBBZ2dyZWdhdGlvblJ1bGU7XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJ1bGVzIGhvbGRzIGFsbCB0aGUgUG9saWN5UnVsZXMgZm9yIHRoaXMgQ2x1c3RlclJvbGVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZSNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBQb2xpY3lSdWxlW107XG5cbn1cblxuLyoqXG4gKiBDbHVzdGVyUm9sZUJpbmRpbmcgcmVmZXJlbmNlcyBhIENsdXN0ZXJSb2xlLCBidXQgbm90IGNvbnRhaW4gaXQuICBJdCBjYW4gcmVmZXJlbmNlIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGFuZCBhZGRzIHdobyBpbmZvcm1hdGlvbiB2aWEgU3ViamVjdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLkNsdXN0ZXJSb2xlQmluZGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJvbGVSZWYgY2FuIG9ubHkgcmVmZXJlbmNlIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIElmIHRoZSBSb2xlUmVmIGNhbm5vdCBiZSByZXNvbHZlZCwgdGhlIEF1dGhvcml6ZXIgbXVzdCByZXR1cm4gYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nI3JvbGVSZWZcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVSZWY6IFJvbGVSZWY7XG5cbiAgLyoqXG4gICAqIFN1YmplY3RzIGhvbGRzIHJlZmVyZW5jZXMgdG8gdGhlIG9iamVjdHMgdGhlIHJvbGUgYXBwbGllcyB0by5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZUJpbmRpbmcjc3ViamVjdHNcbiAgICovXG4gIHJlYWRvbmx5IHN1YmplY3RzPzogU3ViamVjdFtdO1xuXG59XG5cbi8qKlxuICogQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ2x1c3RlclJvbGVCaW5kaW5nc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBDbHVzdGVyUm9sZUJpbmRpbmdzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDbHVzdGVyUm9sZUJpbmRpbmdWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ2x1c3RlclJvbGVzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ2x1c3RlclJvbGVMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBDbHVzdGVyUm9sZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5DbHVzdGVyUm9sZUxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlQ2x1c3RlclJvbGVWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQ2x1c3RlclJvbGVMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUm9sZSBpcyBhIG5hbWVzcGFjZWQsIGxvZ2ljYWwgZ3JvdXBpbmcgb2YgUG9saWN5UnVsZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBhcyBhIHVuaXQgYnkgYSBSb2xlQmluZGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUm9sZVYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJ1bGVzIGhvbGRzIGFsbCB0aGUgUG9saWN5UnVsZXMgZm9yIHRoaXMgUm9sZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGUjcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogUG9saWN5UnVsZVtdO1xuXG59XG5cbi8qKlxuICogUm9sZUJpbmRpbmcgcmVmZXJlbmNlcyBhIHJvbGUsIGJ1dCBkb2VzIG5vdCBjb250YWluIGl0LiAgSXQgY2FuIHJlZmVyZW5jZSBhIFJvbGUgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIG9yIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIEl0IGFkZHMgd2hvIGluZm9ybWF0aW9uIHZpYSBTdWJqZWN0cyBhbmQgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJ5IHdoaWNoIG5hbWVzcGFjZSBpdCBleGlzdHMgaW4uICBSb2xlQmluZGluZ3MgaW4gYSBnaXZlbiBuYW1lc3BhY2Ugb25seSBoYXZlIGVmZmVjdCBpbiB0aGF0IG5hbWVzcGFjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVJvbGVCaW5kaW5nVjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVCaW5kaW5nI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFJvbGVSZWYgY2FuIHJlZmVyZW5jZSBhIFJvbGUgaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlIG9yIGEgQ2x1c3RlclJvbGUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIElmIHRoZSBSb2xlUmVmIGNhbm5vdCBiZSByZXNvbHZlZCwgdGhlIEF1dGhvcml6ZXIgbXVzdCByZXR1cm4gYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZUJpbmRpbmcjcm9sZVJlZlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZVJlZjogUm9sZVJlZjtcblxuICAvKipcbiAgICogU3ViamVjdHMgaG9sZHMgcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0cyB0aGUgcm9sZSBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVCaW5kaW5nI3N1YmplY3RzXG4gICAqL1xuICByZWFkb25seSBzdWJqZWN0cz86IFN1YmplY3RbXTtcblxufVxuXG4vKipcbiAqIFJvbGVCaW5kaW5nTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgUm9sZUJpbmRpbmdzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlQmluZGluZ0xpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUm9sZUJpbmRpbmdMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBSb2xlQmluZGluZ3NcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlQmluZGluZ0xpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlUm9sZUJpbmRpbmdWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZUJpbmRpbmdMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUm9sZUxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIFJvbGVzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVSb2xlTGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2YgUm9sZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVSb2xlVjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogUHJpb3JpdHlDbGFzcyBkZWZpbmVzIG1hcHBpbmcgZnJvbSBhIHByaW9yaXR5IGNsYXNzIG5hbWUgdG8gdGhlIHByaW9yaXR5IGludGVnZXIgdmFsdWUuIFRoZSB2YWx1ZSBjYW4gYmUgYW55IHZhbGlkIGludGVnZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjEuUHJpb3JpdHlDbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQcmlvcml0eUNsYXNzUHJvcHMge1xuICAvKipcbiAgICogZGVzY3JpcHRpb24gaXMgYW4gYXJiaXRyYXJ5IHN0cmluZyB0aGF0IHVzdWFsbHkgcHJvdmlkZXMgZ3VpZGVsaW5lcyBvbiB3aGVuIHRoaXMgcHJpb3JpdHkgY2xhc3Mgc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxLlByaW9yaXR5Q2xhc3MjZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBnbG9iYWxEZWZhdWx0IHNwZWNpZmllcyB3aGV0aGVyIHRoaXMgUHJpb3JpdHlDbGFzcyBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyB0aGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgcG9kcyB0aGF0IGRvIG5vdCBoYXZlIGFueSBwcmlvcml0eSBjbGFzcy4gT25seSBvbmUgUHJpb3JpdHlDbGFzcyBjYW4gYmUgbWFya2VkIGFzIGBnbG9iYWxEZWZhdWx0YC4gSG93ZXZlciwgaWYgbW9yZSB0aGFuIG9uZSBQcmlvcml0eUNsYXNzZXMgZXhpc3RzIHdpdGggdGhlaXIgYGdsb2JhbERlZmF1bHRgIGZpZWxkIHNldCB0byB0cnVlLCB0aGUgc21hbGxlc3QgdmFsdWUgb2Ygc3VjaCBnbG9iYWwgZGVmYXVsdCBQcmlvcml0eUNsYXNzZXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHByaW9yaXR5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzI2dsb2JhbERlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbERlZmF1bHQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjEuUHJpb3JpdHlDbGFzcyNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBQcmVlbXB0aW9uUG9saWN5IGlzIHRoZSBQb2xpY3kgZm9yIHByZWVtcHRpbmcgcG9kcyB3aXRoIGxvd2VyIHByaW9yaXR5LiBPbmUgb2YgTmV2ZXIsIFByZWVtcHRMb3dlclByaW9yaXR5LiBEZWZhdWx0cyB0byBQcmVlbXB0TG93ZXJQcmlvcml0eSBpZiB1bnNldC4gVGhpcyBmaWVsZCBpcyBhbHBoYS1sZXZlbCBhbmQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIE5vblByZWVtcHRpbmdQcmlvcml0eSBmZWF0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBQcmVlbXB0TG93ZXJQcmlvcml0eSBpZiB1bnNldC4gVGhpcyBmaWVsZCBpcyBhbHBoYS1sZXZlbCBhbmQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIE5vblByZWVtcHRpbmdQcmlvcml0eSBmZWF0dXJlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc2NoZWR1bGluZy52MS5Qcmlvcml0eUNsYXNzI3ByZWVtcHRpb25Qb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IHByZWVtcHRpb25Qb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGlzIHByaW9yaXR5IGNsYXNzLiBUaGlzIGlzIHRoZSBhY3R1YWwgcHJpb3JpdHkgdGhhdCBwb2RzIHJlY2VpdmUgd2hlbiB0aGV5IGhhdmUgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpbiB0aGVpciBwb2Qgc3BlYy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjEuUHJpb3JpdHlDbGFzcyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcblxufVxuXG4vKipcbiAqIFByaW9yaXR5Q2xhc3NMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBwcmlvcml0eSBjbGFzc2VzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxLlByaW9yaXR5Q2xhc3NMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVByaW9yaXR5Q2xhc3NMaXN0UHJvcHMge1xuICAvKipcbiAgICogaXRlbXMgaXMgdGhlIGxpc3Qgb2YgUHJpb3JpdHlDbGFzc2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxLlByaW9yaXR5Q2xhc3NMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZVByaW9yaXR5Q2xhc3NQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxLlByaW9yaXR5Q2xhc3NMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBQcmlvcml0eUNsYXNzIGlzIGRlcHJlY2F0ZWQgYnkgc2NoZWR1bGluZy5rOHMuaW8vdjEvUHJpb3JpdHlDbGFzcy4gUHJpb3JpdHlDbGFzcyBkZWZpbmVzIG1hcHBpbmcgZnJvbSBhIHByaW9yaXR5IGNsYXNzIG5hbWUgdG8gdGhlIHByaW9yaXR5IGludGVnZXIgdmFsdWUuIFRoZSB2YWx1ZSBjYW4gYmUgYW55IHZhbGlkIGludGVnZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFhbHBoYTEuUHJpb3JpdHlDbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQcmlvcml0eUNsYXNzVjFBbHBoYTFQcm9wcyB7XG4gIC8qKlxuICAgKiBkZXNjcmlwdGlvbiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIHRoYXQgdXN1YWxseSBwcm92aWRlcyBndWlkZWxpbmVzIG9uIHdoZW4gdGhpcyBwcmlvcml0eSBjbGFzcyBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFhbHBoYTEuUHJpb3JpdHlDbGFzcyNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGdsb2JhbERlZmF1bHQgc3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBQcmlvcml0eUNsYXNzIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHRoZSBkZWZhdWx0IHByaW9yaXR5IGZvciBwb2RzIHRoYXQgZG8gbm90IGhhdmUgYW55IHByaW9yaXR5IGNsYXNzLiBPbmx5IG9uZSBQcmlvcml0eUNsYXNzIGNhbiBiZSBtYXJrZWQgYXMgYGdsb2JhbERlZmF1bHRgLiBIb3dldmVyLCBpZiBtb3JlIHRoYW4gb25lIFByaW9yaXR5Q2xhc3NlcyBleGlzdHMgd2l0aCB0aGVpciBgZ2xvYmFsRGVmYXVsdGAgZmllbGQgc2V0IHRvIHRydWUsIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiBzdWNoIGdsb2JhbCBkZWZhdWx0IFByaW9yaXR5Q2xhc3NlcyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcHJpb3JpdHkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYWxwaGExLlByaW9yaXR5Q2xhc3MjZ2xvYmFsRGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc2NoZWR1bGluZy52MWFscGhhMS5Qcmlvcml0eUNsYXNzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFByZWVtcHRpb25Qb2xpY3kgaXMgdGhlIFBvbGljeSBmb3IgcHJlZW1wdGluZyBwb2RzIHdpdGggbG93ZXIgcHJpb3JpdHkuIE9uZSBvZiBOZXZlciwgUHJlZW1wdExvd2VyUHJpb3JpdHkuIERlZmF1bHRzIHRvIFByZWVtcHRMb3dlclByaW9yaXR5IGlmIHVuc2V0LiBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgTm9uUHJlZW1wdGluZ1ByaW9yaXR5IGZlYXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByZWVtcHRMb3dlclByaW9yaXR5IGlmIHVuc2V0LiBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgTm9uUHJlZW1wdGluZ1ByaW9yaXR5IGZlYXR1cmUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYWxwaGExLlByaW9yaXR5Q2xhc3MjcHJlZW1wdGlvblBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZW1wdGlvblBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoaXMgcHJpb3JpdHkgY2xhc3MuIFRoaXMgaXMgdGhlIGFjdHVhbCBwcmlvcml0eSB0aGF0IHBvZHMgcmVjZWl2ZSB3aGVuIHRoZXkgaGF2ZSB0aGUgbmFtZSBvZiB0aGlzIGNsYXNzIGluIHRoZWlyIHBvZCBzcGVjLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc2NoZWR1bGluZy52MWFscGhhMS5Qcmlvcml0eUNsYXNzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogUHJpb3JpdHlDbGFzc0xpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHByaW9yaXR5IGNsYXNzZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFhbHBoYTEuUHJpb3JpdHlDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUHJpb3JpdHlDbGFzc0xpc3RWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIGl0ZW1zIGlzIHRoZSBsaXN0IG9mIFByaW9yaXR5Q2xhc3Nlc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc2NoZWR1bGluZy52MWFscGhhMS5Qcmlvcml0eUNsYXNzTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVQcmlvcml0eUNsYXNzVjFBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYWxwaGExLlByaW9yaXR5Q2xhc3NMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogREVQUkVDQVRFRCAtIFRoaXMgZ3JvdXAgdmVyc2lvbiBvZiBQcmlvcml0eUNsYXNzIGlzIGRlcHJlY2F0ZWQgYnkgc2NoZWR1bGluZy5rOHMuaW8vdjEvUHJpb3JpdHlDbGFzcy4gUHJpb3JpdHlDbGFzcyBkZWZpbmVzIG1hcHBpbmcgZnJvbSBhIHByaW9yaXR5IGNsYXNzIG5hbWUgdG8gdGhlIHByaW9yaXR5IGludGVnZXIgdmFsdWUuIFRoZSB2YWx1ZSBjYW4gYmUgYW55IHZhbGlkIGludGVnZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFiZXRhMS5Qcmlvcml0eUNsYXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVByaW9yaXR5Q2xhc3NWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogZGVzY3JpcHRpb24gaXMgYW4gYXJiaXRyYXJ5IHN0cmluZyB0aGF0IHVzdWFsbHkgcHJvdmlkZXMgZ3VpZGVsaW5lcyBvbiB3aGVuIHRoaXMgcHJpb3JpdHkgY2xhc3Mgc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzcyNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGdsb2JhbERlZmF1bHQgc3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBQcmlvcml0eUNsYXNzIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHRoZSBkZWZhdWx0IHByaW9yaXR5IGZvciBwb2RzIHRoYXQgZG8gbm90IGhhdmUgYW55IHByaW9yaXR5IGNsYXNzLiBPbmx5IG9uZSBQcmlvcml0eUNsYXNzIGNhbiBiZSBtYXJrZWQgYXMgYGdsb2JhbERlZmF1bHRgLiBIb3dldmVyLCBpZiBtb3JlIHRoYW4gb25lIFByaW9yaXR5Q2xhc3NlcyBleGlzdHMgd2l0aCB0aGVpciBgZ2xvYmFsRGVmYXVsdGAgZmllbGQgc2V0IHRvIHRydWUsIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiBzdWNoIGdsb2JhbCBkZWZhdWx0IFByaW9yaXR5Q2xhc3NlcyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcHJpb3JpdHkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzcyNnbG9iYWxEZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBnbG9iYWxEZWZhdWx0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFiZXRhMS5Qcmlvcml0eUNsYXNzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFByZWVtcHRpb25Qb2xpY3kgaXMgdGhlIFBvbGljeSBmb3IgcHJlZW1wdGluZyBwb2RzIHdpdGggbG93ZXIgcHJpb3JpdHkuIE9uZSBvZiBOZXZlciwgUHJlZW1wdExvd2VyUHJpb3JpdHkuIERlZmF1bHRzIHRvIFByZWVtcHRMb3dlclByaW9yaXR5IGlmIHVuc2V0LiBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgTm9uUHJlZW1wdGluZ1ByaW9yaXR5IGZlYXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByZWVtcHRMb3dlclByaW9yaXR5IGlmIHVuc2V0LiBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgTm9uUHJlZW1wdGluZ1ByaW9yaXR5IGZlYXR1cmUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzcyNwcmVlbXB0aW9uUG9saWN5XG4gICAqL1xuICByZWFkb25seSBwcmVlbXB0aW9uUG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBwcmlvcml0eSBjbGFzcy4gVGhpcyBpcyB0aGUgYWN0dWFsIHByaW9yaXR5IHRoYXQgcG9kcyByZWNlaXZlIHdoZW4gdGhleSBoYXZlIHRoZSBuYW1lIG9mIHRoaXMgY2xhc3MgaW4gdGhlaXIgcG9kIHNwZWMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzcyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcblxufVxuXG4vKipcbiAqIFByaW9yaXR5Q2xhc3NMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBwcmlvcml0eSBjbGFzc2VzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzc0xpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlUHJpb3JpdHlDbGFzc0xpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogaXRlbXMgaXMgdGhlIGxpc3Qgb2YgUHJpb3JpdHlDbGFzc2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zY2hlZHVsaW5nLnYxYmV0YTEuUHJpb3JpdHlDbGFzc0xpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlUHJpb3JpdHlDbGFzc1YxQmV0YTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNjaGVkdWxpbmcudjFiZXRhMS5Qcmlvcml0eUNsYXNzTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFBvZFByZXNldCBpcyBhIHBvbGljeSByZXNvdXJjZSB0aGF0IGRlZmluZXMgYWRkaXRpb25hbCBydW50aW1lIHJlcXVpcmVtZW50cyBmb3IgYSBQb2QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVQb2RQcmVzZXRWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogUG9kUHJlc2V0U3BlYztcblxufVxuXG4vKipcbiAqIFBvZFByZXNldExpc3QgaXMgYSBsaXN0IG9mIFBvZFByZXNldCBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVBvZFByZXNldExpc3RWMUFscGhhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBzY2hlbWEgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldExpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlUG9kUHJlc2V0VjFBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogU3RvcmFnZUNsYXNzIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBmb3IgYSBjbGFzcyBvZiBzdG9yYWdlIGZvciB3aGljaCBQZXJzaXN0ZW50Vm9sdW1lcyBjYW4gYmUgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQuXG5cblN0b3JhZ2VDbGFzc2VzIGFyZSBub24tbmFtZXNwYWNlZDsgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgYWNjb3JkaW5nIHRvIGV0Y2QgaXMgaW4gT2JqZWN0TWV0YS5OYW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTdG9yYWdlQ2xhc3NQcm9wcyB7XG4gIC8qKlxuICAgKiBBbGxvd1ZvbHVtZUV4cGFuc2lvbiBzaG93cyB3aGV0aGVyIHRoZSBzdG9yYWdlIGNsYXNzIGFsbG93IHZvbHVtZSBleHBhbmRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzI2FsbG93Vm9sdW1lRXhwYW5zaW9uXG4gICAqL1xuICByZWFkb25seSBhbGxvd1ZvbHVtZUV4cGFuc2lvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlc3RyaWN0IHRoZSBub2RlIHRvcG9sb2dpZXMgd2hlcmUgdm9sdW1lcyBjYW4gYmUgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQuIEVhY2ggdm9sdW1lIHBsdWdpbiBkZWZpbmVzIGl0cyBvd24gc3VwcG9ydGVkIHRvcG9sb2d5IHNwZWNpZmljYXRpb25zLiBBbiBlbXB0eSBUb3BvbG9neVNlbGVjdG9yVGVybSBsaXN0IG1lYW5zIHRoZXJlIGlzIG5vIHRvcG9sb2d5IHJlc3RyaWN0aW9uLiBUaGlzIGZpZWxkIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlIHRoZSBWb2x1bWVTY2hlZHVsaW5nIGZlYXR1cmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzcyNhbGxvd2VkVG9wb2xvZ2llc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFRvcG9sb2dpZXM/OiBUb3BvbG9neVNlbGVjdG9yVGVybVtdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIER5bmFtaWNhbGx5IHByb3Zpc2lvbmVkIFBlcnNpc3RlbnRWb2x1bWVzIG9mIHRoaXMgc3RvcmFnZSBjbGFzcyBhcmUgY3JlYXRlZCB3aXRoIHRoZXNlIG1vdW50T3B0aW9ucywgZS5nLiBbXCJyb1wiLCBcInNvZnRcIl0uIE5vdCB2YWxpZGF0ZWQgLSBtb3VudCBvZiB0aGUgUFZzIHdpbGwgc2ltcGx5IGZhaWwgaWYgb25lIGlzIGludmFsaWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzcyNtb3VudE9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1vdW50T3B0aW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGhvbGRzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvdmlzaW9uZXIgdGhhdCBzaG91bGQgY3JlYXRlIHZvbHVtZXMgb2YgdGhpcyBzdG9yYWdlIGNsYXNzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MS5TdG9yYWdlQ2xhc3MjcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFByb3Zpc2lvbmVyIGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgcHJvdmlzaW9uZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzcyNwcm92aXNpb25lclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlzaW9uZXI6IHN0cmluZztcblxuICAvKipcbiAgICogRHluYW1pY2FsbHkgcHJvdmlzaW9uZWQgUGVyc2lzdGVudFZvbHVtZXMgb2YgdGhpcyBzdG9yYWdlIGNsYXNzIGFyZSBjcmVhdGVkIHdpdGggdGhpcyByZWNsYWltUG9saWN5LiBEZWZhdWx0cyB0byBEZWxldGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IERlbGV0ZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzI3JlY2xhaW1Qb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IHJlY2xhaW1Qb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZvbHVtZUJpbmRpbmdNb2RlIGluZGljYXRlcyBob3cgUGVyc2lzdGVudFZvbHVtZUNsYWltcyBzaG91bGQgYmUgcHJvdmlzaW9uZWQgYW5kIGJvdW5kLiAgV2hlbiB1bnNldCwgVm9sdW1lQmluZGluZ0ltbWVkaWF0ZSBpcyB1c2VkLiBUaGlzIGZpZWxkIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlIHRoZSBWb2x1bWVTY2hlZHVsaW5nIGZlYXR1cmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzcyN2b2x1bWVCaW5kaW5nTW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lQmluZGluZ01vZGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTdG9yYWdlQ2xhc3NMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBzdG9yYWdlIGNsYXNzZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTdG9yYWdlQ2xhc3NMaXN0UHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgdGhlIGxpc3Qgb2YgU3RvcmFnZUNsYXNzZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuU3RvcmFnZUNsYXNzTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVTdG9yYWdlQ2xhc3NQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlN0b3JhZ2VDbGFzc0xpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBWb2x1bWVBdHRhY2htZW50IGNhcHR1cmVzIHRoZSBpbnRlbnQgdG8gYXR0YWNoIG9yIGRldGFjaCB0aGUgc3BlY2lmaWVkIHZvbHVtZSB0by9mcm9tIHRoZSBzcGVjaWZpZWQgbm9kZS5cblxuVm9sdW1lQXR0YWNobWVudCBvYmplY3RzIGFyZSBub24tbmFtZXNwYWNlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVZvbHVtZUF0dGFjaG1lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxLlZvbHVtZUF0dGFjaG1lbnQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogT2JqZWN0TWV0YTtcblxuICAvKipcbiAgICogU3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBhdHRhY2gvZGV0YWNoIHZvbHVtZSBiZWhhdmlvci4gUG9wdWxhdGVkIGJ5IHRoZSBLdWJlcm5ldGVzIHN5c3RlbS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuVm9sdW1lQXR0YWNobWVudCNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBWb2x1bWVBdHRhY2htZW50U3BlYztcblxufVxuXG4vKipcbiAqIFZvbHVtZUF0dGFjaG1lbnRMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBWb2x1bWVBdHRhY2htZW50IG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjEuVm9sdW1lQXR0YWNobWVudExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBWb2x1bWVBdHRhY2htZW50c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVWb2x1bWVBdHRhY2htZW50UHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YSBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MS5Wb2x1bWVBdHRhY2htZW50TGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIFZvbHVtZUF0dGFjaG1lbnQgY2FwdHVyZXMgdGhlIGludGVudCB0byBhdHRhY2ggb3IgZGV0YWNoIHRoZSBzcGVjaWZpZWQgdm9sdW1lIHRvL2Zyb20gdGhlIHNwZWNpZmllZCBub2RlLlxuXG5Wb2x1bWVBdHRhY2htZW50IG9iamVjdHMgYXJlIG5vbi1uYW1lc3BhY2VkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYWxwaGExLlZvbHVtZUF0dGFjaG1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlVm9sdW1lQXR0YWNobWVudFYxQWxwaGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0IG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWFscGhhMS5Wb2x1bWVBdHRhY2htZW50I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYXR0YWNoL2RldGFjaCB2b2x1bWUgYmVoYXZpb3IuIFBvcHVsYXRlZCBieSB0aGUgS3ViZXJuZXRlcyBzeXN0ZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYWxwaGExLlZvbHVtZUF0dGFjaG1lbnQjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogVm9sdW1lQXR0YWNobWVudFNwZWM7XG5cbn1cblxuLyoqXG4gKiBWb2x1bWVBdHRhY2htZW50TGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgVm9sdW1lQXR0YWNobWVudCBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYWxwaGExLlZvbHVtZUF0dGFjaG1lbnRMaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVZvbHVtZUF0dGFjaG1lbnRMaXN0VjFBbHBoYTFQcm9wcyB7XG4gIC8qKlxuICAgKiBJdGVtcyBpcyB0aGUgbGlzdCBvZiBWb2x1bWVBdHRhY2htZW50c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWFscGhhMS5Wb2x1bWVBdHRhY2htZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVWb2x1bWVBdHRhY2htZW50VjFBbHBoYTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYWxwaGExLlZvbHVtZUF0dGFjaG1lbnRMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogQ1NJRHJpdmVyIGNhcHR1cmVzIGluZm9ybWF0aW9uIGFib3V0IGEgQ29udGFpbmVyIFN0b3JhZ2UgSW50ZXJmYWNlIChDU0kpIHZvbHVtZSBkcml2ZXIgZGVwbG95ZWQgb24gdGhlIGNsdXN0ZXIuIENTSSBkcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGUgQ1NJRHJpdmVyIG9iamVjdCBkaXJlY3RseS4gSW5zdGVhZCB0aGV5IG1heSB1c2UgdGhlIGNsdXN0ZXItZHJpdmVyLXJlZ2lzdHJhciBzaWRlY2FyIGNvbnRhaW5lci4gV2hlbiBkZXBsb3llZCB3aXRoIGEgQ1NJIGRyaXZlciBpdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBDU0lEcml2ZXIgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZHJpdmVyLiBLdWJlcm5ldGVzIGF0dGFjaCBkZXRhY2ggY29udHJvbGxlciB1c2VzIHRoaXMgb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGF0dGFjaCBpcyByZXF1aXJlZC4gS3ViZWxldCB1c2VzIHRoaXMgb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIHBvZCBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBwYXNzZWQgb24gbW91bnQuIENTSURyaXZlciBvYmplY3RzIGFyZSBub24tbmFtZXNwYWNlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSURyaXZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDc2lEcml2ZXJWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0IG1ldGFkYXRhLiBtZXRhZGF0YS5OYW1lIGluZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgQ1NJIGRyaXZlciB0aGF0IHRoaXMgb2JqZWN0IHJlZmVycyB0bzsgaXQgTVVTVCBiZSB0aGUgc2FtZSBuYW1lIHJldHVybmVkIGJ5IHRoZSBDU0kgR2V0UGx1Z2luTmFtZSgpIGNhbGwgZm9yIHRoYXQgZHJpdmVyLiBUaGUgZHJpdmVyIG5hbWUgbXVzdCBiZSA2MyBjaGFyYWN0ZXJzIG9yIGxlc3MsIGJlZ2lubmluZyBhbmQgZW5kaW5nIHdpdGggYW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciAoW2EtejAtOUEtWl0pIHdpdGggZGFzaGVzICgtKSwgZG90cyAoLiksIGFuZCBhbHBoYW51bWVyaWNzIGJldHdlZW4uIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJRHJpdmVyI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIENTSSBEcml2ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJRHJpdmVyI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IENzaURyaXZlclNwZWM7XG5cbn1cblxuLyoqXG4gKiBDU0lEcml2ZXJMaXN0IGlzIGEgY29sbGVjdGlvbiBvZiBDU0lEcml2ZXIgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSURyaXZlckxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ3NpRHJpdmVyTGlzdFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBpdGVtcyBpcyB0aGUgbGlzdCBvZiBDU0lEcml2ZXJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lEcml2ZXJMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUNzaURyaXZlclYxQmV0YTFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBsaXN0IG1ldGFkYXRhIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJRHJpdmVyTGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIENTSU5vZGUgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIENTSSBkcml2ZXJzIGluc3RhbGxlZCBvbiBhIG5vZGUuIENTSSBkcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGUgQ1NJTm9kZSBvYmplY3QgZGlyZWN0bHkuIEFzIGxvbmcgYXMgdGhleSB1c2UgdGhlIG5vZGUtZHJpdmVyLXJlZ2lzdHJhciBzaWRlY2FyIGNvbnRhaW5lciwgdGhlIGt1YmVsZXQgd2lsbCBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIHRoZSBDU0lOb2RlIG9iamVjdCBmb3IgdGhlIENTSSBkcml2ZXIgYXMgcGFydCBvZiBrdWJlbGV0IHBsdWdpbiByZWdpc3RyYXRpb24uIENTSU5vZGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBub2RlLiBJZiB0aGUgb2JqZWN0IGlzIG1pc3NpbmcsIGl0IG1lYW5zIGVpdGhlciB0aGVyZSBhcmUgbm8gQ1NJIERyaXZlcnMgYXZhaWxhYmxlIG9uIHRoZSBub2RlLCBvciB0aGUgS3ViZWxldCB2ZXJzaW9uIGlzIGxvdyBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IGNyZWF0ZSB0aGlzIG9iamVjdC4gQ1NJTm9kZSBoYXMgYW4gT3duZXJSZWZlcmVuY2UgdGhhdCBwb2ludHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSBvYmplY3QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lOb2RlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUNzaU5vZGVWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogbWV0YWRhdGEubmFtZSBtdXN0IGJlIHRoZSBLdWJlcm5ldGVzIG5vZGUgbmFtZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lOb2RlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIHNwZWMgaXMgdGhlIHNwZWNpZmljYXRpb24gb2YgQ1NJTm9kZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSU5vZGUjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogQ3NpTm9kZVNwZWM7XG5cbn1cblxuLyoqXG4gKiBDU0lOb2RlTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ1NJTm9kZSBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQ3NpTm9kZUxpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogaXRlbXMgaXMgdGhlIGxpc3Qgb2YgQ1NJTm9kZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSU5vZGVMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUNzaU5vZGVWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YSBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSU5vZGVMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogU3RvcmFnZUNsYXNzIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBmb3IgYSBjbGFzcyBvZiBzdG9yYWdlIGZvciB3aGljaCBQZXJzaXN0ZW50Vm9sdW1lcyBjYW4gYmUgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQuXG5cblN0b3JhZ2VDbGFzc2VzIGFyZSBub24tbmFtZXNwYWNlZDsgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgYWNjb3JkaW5nIHRvIGV0Y2QgaXMgaW4gT2JqZWN0TWV0YS5OYW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVN0b3JhZ2VDbGFzc1YxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBBbGxvd1ZvbHVtZUV4cGFuc2lvbiBzaG93cyB3aGV0aGVyIHRoZSBzdG9yYWdlIGNsYXNzIGFsbG93IHZvbHVtZSBleHBhbmRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5TdG9yYWdlQ2xhc3MjYWxsb3dWb2x1bWVFeHBhbnNpb25cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93Vm9sdW1lRXhwYW5zaW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVzdHJpY3QgdGhlIG5vZGUgdG9wb2xvZ2llcyB3aGVyZSB2b2x1bWVzIGNhbiBiZSBkeW5hbWljYWxseSBwcm92aXNpb25lZC4gRWFjaCB2b2x1bWUgcGx1Z2luIGRlZmluZXMgaXRzIG93biBzdXBwb3J0ZWQgdG9wb2xvZ3kgc3BlY2lmaWNhdGlvbnMuIEFuIGVtcHR5IFRvcG9sb2d5U2VsZWN0b3JUZXJtIGxpc3QgbWVhbnMgdGhlcmUgaXMgbm8gdG9wb2xvZ3kgcmVzdHJpY3Rpb24uIFRoaXMgZmllbGQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIFZvbHVtZVNjaGVkdWxpbmcgZmVhdHVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5TdG9yYWdlQ2xhc3MjYWxsb3dlZFRvcG9sb2dpZXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRUb3BvbG9naWVzPzogVG9wb2xvZ3lTZWxlY3RvclRlcm1bXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIER5bmFtaWNhbGx5IHByb3Zpc2lvbmVkIFBlcnNpc3RlbnRWb2x1bWVzIG9mIHRoaXMgc3RvcmFnZSBjbGFzcyBhcmUgY3JlYXRlZCB3aXRoIHRoZXNlIG1vdW50T3B0aW9ucywgZS5nLiBbXCJyb1wiLCBcInNvZnRcIl0uIE5vdCB2YWxpZGF0ZWQgLSBtb3VudCBvZiB0aGUgUFZzIHdpbGwgc2ltcGx5IGZhaWwgaWYgb25lIGlzIGludmFsaWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzI21vdW50T3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbW91bnRPcHRpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgaG9sZHMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm92aXNpb25lciB0aGF0IHNob3VsZCBjcmVhdGUgdm9sdW1lcyBvZiB0aGlzIHN0b3JhZ2UgY2xhc3MuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzI3BhcmFtZXRlcnNcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBQcm92aXNpb25lciBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgdGhlIHByb3Zpc2lvbmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlN0b3JhZ2VDbGFzcyNwcm92aXNpb25lclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlzaW9uZXI6IHN0cmluZztcblxuICAvKipcbiAgICogRHluYW1pY2FsbHkgcHJvdmlzaW9uZWQgUGVyc2lzdGVudFZvbHVtZXMgb2YgdGhpcyBzdG9yYWdlIGNsYXNzIGFyZSBjcmVhdGVkIHdpdGggdGhpcyByZWNsYWltUG9saWN5LiBEZWZhdWx0cyB0byBEZWxldGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IERlbGV0ZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5TdG9yYWdlQ2xhc3MjcmVjbGFpbVBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjbGFpbVBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogVm9sdW1lQmluZGluZ01vZGUgaW5kaWNhdGVzIGhvdyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1zIHNob3VsZCBiZSBwcm92aXNpb25lZCBhbmQgYm91bmQuICBXaGVuIHVuc2V0LCBWb2x1bWVCaW5kaW5nSW1tZWRpYXRlIGlzIHVzZWQuIFRoaXMgZmllbGQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIFZvbHVtZVNjaGVkdWxpbmcgZmVhdHVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5TdG9yYWdlQ2xhc3Mjdm9sdW1lQmluZGluZ01vZGVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUJpbmRpbmdNb2RlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogU3RvcmFnZUNsYXNzTGlzdCBpcyBhIGNvbGxlY3Rpb24gb2Ygc3RvcmFnZSBjbGFzc2VzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVTdG9yYWdlQ2xhc3NMaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIHRoZSBsaXN0IG9mIFN0b3JhZ2VDbGFzc2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuU3RvcmFnZUNsYXNzTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVTdG9yYWdlQ2xhc3NWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YSBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlN0b3JhZ2VDbGFzc0xpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBWb2x1bWVBdHRhY2htZW50IGNhcHR1cmVzIHRoZSBpbnRlbnQgdG8gYXR0YWNoIG9yIGRldGFjaCB0aGUgc3BlY2lmaWVkIHZvbHVtZSB0by9mcm9tIHRoZSBzcGVjaWZpZWQgbm9kZS5cblxuVm9sdW1lQXR0YWNobWVudCBvYmplY3RzIGFyZSBub24tbmFtZXNwYWNlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlVm9sdW1lQXR0YWNobWVudFYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBPYmplY3RNZXRhO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBkZXNpcmVkIGF0dGFjaC9kZXRhY2ggdm9sdW1lIGJlaGF2aW9yLiBQb3B1bGF0ZWQgYnkgdGhlIEt1YmVybmV0ZXMgc3lzdGVtLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnQjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogVm9sdW1lQXR0YWNobWVudFNwZWM7XG5cbn1cblxuLyoqXG4gKiBWb2x1bWVBdHRhY2htZW50TGlzdCBpcyBhIGNvbGxlY3Rpb24gb2YgVm9sdW1lQXR0YWNobWVudCBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudExpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlVm9sdW1lQXR0YWNobWVudExpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogSXRlbXMgaXMgdGhlIGxpc3Qgb2YgVm9sdW1lQXR0YWNobWVudHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5Wb2x1bWVBdHRhY2htZW50TGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVWb2x1bWVBdHRhY2htZW50VjFCZXRhMVByb3BzW107XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGxpc3QgbWV0YWRhdGEgTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5Wb2x1bWVBdHRhY2htZW50TGlzdCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBMaXN0TWV0YTtcblxufVxuXG4vKipcbiAqIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvbiByZXByZXNlbnRzIGEgcmVzb3VyY2UgdGhhdCBzaG91bGQgYmUgZXhwb3NlZCBvbiB0aGUgQVBJIHNlcnZlci4gIEl0cyBuYW1lIE1VU1QgYmUgaW4gdGhlIGZvcm1hdCA8LnNwZWMubmFtZT4uPC5zcGVjLmdyb3VwPi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZUN1c3RvbVJlc291cmNlRGVmaW5pdGlvblYxQmV0YTFQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgZGVzY3JpYmVzIGhvdyB0aGUgdXNlciB3YW50cyB0aGUgcmVzb3VyY2VzIHRvIGFwcGVhclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEN1c3RvbVJlc291cmNlRGVmaW5pdGlvblNwZWM7XG5cbn1cblxuLyoqXG4gKiBDdXN0b21SZXNvdXJjZURlZmluaXRpb25MaXN0IGlzIGEgbGlzdCBvZiBDdXN0b21SZXNvdXJjZURlZmluaXRpb24gb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVDdXN0b21SZXNvdXJjZURlZmluaXRpb25MaXN0VjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGluZGl2aWR1YWwgQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTGlzdCNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM6IEt1YmVDdXN0b21SZXNvdXJjZURlZmluaXRpb25WMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvbkxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBTdGF0dXMgaXMgYSByZXR1cm4gdmFsdWUgZm9yIGNhbGxzIHRoYXQgZG9uJ3QgcmV0dXJuIG90aGVyIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuU3RhdHVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZVN0YXR1c1Byb3BzIHtcbiAgLyoqXG4gICAqIFN1Z2dlc3RlZCBIVFRQIHJldHVybiBjb2RlIGZvciB0aGlzIHN0YXR1cywgMCBpZiBub3Qgc2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXMjY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZT86IG51bWJlcjtcblxuICAvKipcbiAgICogRXh0ZW5kZWQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlYXNvbi4gIEVhY2ggcmVhc29uIG1heSBkZWZpbmUgaXRzIG93biBleHRlbmRlZCBkZXRhaWxzLiBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsIGFuZCB0aGUgZGF0YSByZXR1cm5lZCBpcyBub3QgZ3VhcmFudGVlZCB0byBjb25mb3JtIHRvIGFueSBzY2hlbWEgZXhjZXB0IHRoYXQgZGVmaW5lZCBieSB0aGUgcmVhc29uIHR5cGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlN0YXR1cyNkZXRhaWxzXG4gICAqL1xuICByZWFkb25seSBkZXRhaWxzPzogU3RhdHVzRGV0YWlscztcblxuICAvKipcbiAgICogQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXMjbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhbmRhcmQgbGlzdCBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuU3RhdHVzI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG4gIC8qKlxuICAgKiBBIG1hY2hpbmUtcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2h5IHRoaXMgb3BlcmF0aW9uIGlzIGluIHRoZSBcIkZhaWx1cmVcIiBzdGF0dXMuIElmIHRoaXMgdmFsdWUgaXMgZW1wdHkgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlLiBBIFJlYXNvbiBjbGFyaWZpZXMgYW4gSFRUUCBzdGF0dXMgY29kZSBidXQgZG9lcyBub3Qgb3ZlcnJpZGUgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlN0YXR1cyNyZWFzb25cbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEFQSVNlcnZpY2UgcmVwcmVzZW50cyBhIHNlcnZlciBmb3IgYSBwYXJ0aWN1bGFyIEdyb3VwVmVyc2lvbi4gTmFtZSBtdXN0IGJlIFwidmVyc2lvbi5ncm91cFwiLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjEuQVBJU2VydmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVBcGlTZXJ2aWNlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MS5BUElTZXJ2aWNlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGxvY2F0aW5nIGFuZCBjb21tdW5pY2F0aW5nIHdpdGggYSBzZXJ2ZXJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MS5BUElTZXJ2aWNlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBBcGlTZXJ2aWNlU3BlYztcblxufVxuXG4vKipcbiAqIEFQSVNlcnZpY2VMaXN0IGlzIGEgbGlzdCBvZiBBUElTZXJ2aWNlIG9iamVjdHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MS5BUElTZXJ2aWNlTGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVBcGlTZXJ2aWNlTGlzdFByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjEuQVBJU2VydmljZUxpc3QjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zOiBLdWJlQXBpU2VydmljZVByb3BzW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjEuQVBJU2VydmljZUxpc3QjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTGlzdE1ldGE7XG5cbn1cblxuLyoqXG4gKiBBUElTZXJ2aWNlIHJlcHJlc2VudHMgYSBzZXJ2ZXIgZm9yIGEgcGFydGljdWxhciBHcm91cFZlcnNpb24uIE5hbWUgbXVzdCBiZSBcInZlcnNpb24uZ3JvdXBcIi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVBcGlTZXJ2aWNlVjFCZXRhMVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjFiZXRhMS5BUElTZXJ2aWNlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWMgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGxvY2F0aW5nIGFuZCBjb21tdW5pY2F0aW5nIHdpdGggYSBzZXJ2ZXJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2Ujc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEFwaVNlcnZpY2VTcGVjO1xuXG59XG5cbi8qKlxuICogQVBJU2VydmljZUxpc3QgaXMgYSBsaXN0IG9mIEFQSVNlcnZpY2Ugb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZUxpc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlQXBpU2VydmljZUxpc3RWMUJldGExUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2VMaXN0I2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtczogS3ViZUFwaVNlcnZpY2VWMUJldGExUHJvcHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2VMaXN0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IExpc3RNZXRhO1xuXG59XG5cbi8qKlxuICogT2JqZWN0TWV0YSBpcyBtZXRhZGF0YSB0aGF0IGFsbCBwZXJzaXN0ZWQgcmVzb3VyY2VzIG11c3QgaGF2ZSwgd2hpY2ggaW5jbHVkZXMgYWxsIG9iamVjdHMgdXNlcnMgbXVzdCBjcmVhdGUuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdE1ldGEge1xuICAvKipcbiAgICogQW5ub3RhdGlvbnMgaXMgYW4gdW5zdHJ1Y3R1cmVkIGtleSB2YWx1ZSBtYXAgc3RvcmVkIHdpdGggYSByZXNvdXJjZSB0aGF0IG1heSBiZSBzZXQgYnkgZXh0ZXJuYWwgdG9vbHMgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGFyYml0cmFyeSBtZXRhZGF0YS4gVGhleSBhcmUgbm90IHF1ZXJ5YWJsZSBhbmQgc2hvdWxkIGJlIHByZXNlcnZlZCB3aGVuIG1vZGlmeWluZyBvYmplY3RzLiBNb3JlIGluZm86IGh0dHA6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdXNlci1ndWlkZS9hbm5vdGF0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhI2Fubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBhbm5vdGF0aW9ucz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjbHVzdGVyIHdoaWNoIHRoZSBvYmplY3QgYmVsb25ncyB0by4gVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHJlc291cmNlcyB3aXRoIHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNlIGluIGRpZmZlcmVudCBjbHVzdGVycy4gVGhpcyBmaWVsZCBpcyBub3Qgc2V0IGFueXdoZXJlIHJpZ2h0IG5vdyBhbmQgYXBpc2VydmVyIGlzIGdvaW5nIHRvIGlnbm9yZSBpdCBpZiBzZXQgaW4gY3JlYXRlIG9yIHVwZGF0ZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhI2NsdXN0ZXJOYW1lXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRpb25UaW1lc3RhbXAgaXMgYSB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRoZSBzZXJ2ZXIgdGltZSB3aGVuIHRoaXMgb2JqZWN0IHdhcyBjcmVhdGVkLiBJdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBzZXQgaW4gaGFwcGVucy1iZWZvcmUgb3JkZXIgYWNyb3NzIHNlcGFyYXRlIG9wZXJhdGlvbnMuIENsaWVudHMgbWF5IG5vdCBzZXQgdGhpcyB2YWx1ZS4gSXQgaXMgcmVwcmVzZW50ZWQgaW4gUkZDMzMzOSBmb3JtIGFuZCBpcyBpbiBVVEMuXG5cblBvcHVsYXRlZCBieSB0aGUgc3lzdGVtLiBSZWFkLW9ubHkuIE51bGwgZm9yIGxpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhI2NyZWF0aW9uVGltZXN0YW1wXG4gICAqL1xuICByZWFkb25seSBjcmVhdGlvblRpbWVzdGFtcD86IERhdGU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzZWNvbmRzIGFsbG93ZWQgZm9yIHRoaXMgb2JqZWN0IHRvIGdyYWNlZnVsbHkgdGVybWluYXRlIGJlZm9yZSBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBPbmx5IHNldCB3aGVuIGRlbGV0aW9uVGltZXN0YW1wIGlzIGFsc28gc2V0LiBNYXkgb25seSBiZSBzaG9ydGVuZWQuIFJlYWQtb25seS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNkZWxldGlvbkdyYWNlUGVyaW9kU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRpb25HcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERlbGV0aW9uVGltZXN0YW1wIGlzIFJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhpcyByZXNvdXJjZSB3aWxsIGJlIGRlbGV0ZWQuIFRoaXMgZmllbGQgaXMgc2V0IGJ5IHRoZSBzZXJ2ZXIgd2hlbiBhIGdyYWNlZnVsIGRlbGV0aW9uIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlciwgYW5kIGlzIG5vdCBkaXJlY3RseSBzZXR0YWJsZSBieSBhIGNsaWVudC4gVGhlIHJlc291cmNlIGlzIGV4cGVjdGVkIHRvIGJlIGRlbGV0ZWQgKG5vIGxvbmdlciB2aXNpYmxlIGZyb20gcmVzb3VyY2UgbGlzdHMsIGFuZCBub3QgcmVhY2hhYmxlIGJ5IG5hbWUpIGFmdGVyIHRoZSB0aW1lIGluIHRoaXMgZmllbGQsIG9uY2UgdGhlIGZpbmFsaXplcnMgbGlzdCBpcyBlbXB0eS4gQXMgbG9uZyBhcyB0aGUgZmluYWxpemVycyBsaXN0IGNvbnRhaW5zIGl0ZW1zLCBkZWxldGlvbiBpcyBibG9ja2VkLiBPbmNlIHRoZSBkZWxldGlvblRpbWVzdGFtcCBpcyBzZXQsIHRoaXMgdmFsdWUgbWF5IG5vdCBiZSB1bnNldCBvciBiZSBzZXQgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUsIGFsdGhvdWdoIGl0IG1heSBiZSBzaG9ydGVuZWQgb3IgdGhlIHJlc291cmNlIG1heSBiZSBkZWxldGVkIHByaW9yIHRvIHRoaXMgdGltZS4gRm9yIGV4YW1wbGUsIGEgdXNlciBtYXkgcmVxdWVzdCB0aGF0IGEgcG9kIGlzIGRlbGV0ZWQgaW4gMzAgc2Vjb25kcy4gVGhlIEt1YmVsZXQgd2lsbCByZWFjdCBieSBzZW5kaW5nIGEgZ3JhY2VmdWwgdGVybWluYXRpb24gc2lnbmFsIHRvIHRoZSBjb250YWluZXJzIGluIHRoZSBwb2QuIEFmdGVyIHRoYXQgMzAgc2Vjb25kcywgdGhlIEt1YmVsZXQgd2lsbCBzZW5kIGEgaGFyZCB0ZXJtaW5hdGlvbiBzaWduYWwgKFNJR0tJTEwpIHRvIHRoZSBjb250YWluZXIgYW5kIGFmdGVyIGNsZWFudXAsIHJlbW92ZSB0aGUgcG9kIGZyb20gdGhlIEFQSS4gSW4gdGhlIHByZXNlbmNlIG9mIG5ldHdvcmsgcGFydGl0aW9ucywgdGhpcyBvYmplY3QgbWF5IHN0aWxsIGV4aXN0IGFmdGVyIHRoaXMgdGltZXN0YW1wLCB1bnRpbCBhbiBhZG1pbmlzdHJhdG9yIG9yIGF1dG9tYXRlZCBwcm9jZXNzIGNhbiBkZXRlcm1pbmUgdGhlIHJlc291cmNlIGlzIGZ1bGx5IHRlcm1pbmF0ZWQuIElmIG5vdCBzZXQsIGdyYWNlZnVsIGRlbGV0aW9uIG9mIHRoZSBvYmplY3QgaGFzIG5vdCBiZWVuIHJlcXVlc3RlZC5cblxuUG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0gd2hlbiBhIGdyYWNlZnVsIGRlbGV0aW9uIGlzIHJlcXVlc3RlZC4gUmVhZC1vbmx5LiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhI2RlbGV0aW9uVGltZXN0YW1wXG4gICAqL1xuICByZWFkb25seSBkZWxldGlvblRpbWVzdGFtcD86IERhdGU7XG5cbiAgLyoqXG4gICAqIE11c3QgYmUgZW1wdHkgYmVmb3JlIHRoZSBvYmplY3QgaXMgZGVsZXRlZCBmcm9tIHRoZSByZWdpc3RyeS4gRWFjaCBlbnRyeSBpcyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcmVzcG9uc2libGUgY29tcG9uZW50IHRoYXQgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpc3QuIElmIHRoZSBkZWxldGlvblRpbWVzdGFtcCBvZiB0aGUgb2JqZWN0IGlzIG5vbi1uaWwsIGVudHJpZXMgaW4gdGhpcyBsaXN0IGNhbiBvbmx5IGJlIHJlbW92ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGEjZmluYWxpemVyc1xuICAgKi9cbiAgcmVhZG9ubHkgZmluYWxpemVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZU5hbWUgaXMgYW4gb3B0aW9uYWwgcHJlZml4LCB1c2VkIGJ5IHRoZSBzZXJ2ZXIsIHRvIGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgT05MWSBJRiB0aGUgTmFtZSBmaWVsZCBoYXMgbm90IGJlZW4gcHJvdmlkZWQuIElmIHRoaXMgZmllbGQgaXMgdXNlZCwgdGhlIG5hbWUgcmV0dXJuZWQgdG8gdGhlIGNsaWVudCB3aWxsIGJlIGRpZmZlcmVudCB0aGFuIHRoZSBuYW1lIHBhc3NlZC4gVGhpcyB2YWx1ZSB3aWxsIGFsc28gYmUgY29tYmluZWQgd2l0aCBhIHVuaXF1ZSBzdWZmaXguIFRoZSBwcm92aWRlZCB2YWx1ZSBoYXMgdGhlIHNhbWUgdmFsaWRhdGlvbiBydWxlcyBhcyB0aGUgTmFtZSBmaWVsZCwgYW5kIG1heSBiZSB0cnVuY2F0ZWQgYnkgdGhlIGxlbmd0aCBvZiB0aGUgc3VmZml4IHJlcXVpcmVkIHRvIG1ha2UgdGhlIHZhbHVlIHVuaXF1ZSBvbiB0aGUgc2VydmVyLlxuXG5JZiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCBhbmQgdGhlIGdlbmVyYXRlZCBuYW1lIGV4aXN0cywgdGhlIHNlcnZlciB3aWxsIE5PVCByZXR1cm4gYSA0MDkgLSBpbnN0ZWFkLCBpdCB3aWxsIGVpdGhlciByZXR1cm4gMjAxIENyZWF0ZWQgb3IgNTAwIHdpdGggUmVhc29uIFNlcnZlclRpbWVvdXQgaW5kaWNhdGluZyBhIHVuaXF1ZSBuYW1lIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGltZSBhbGxvdHRlZCwgYW5kIHRoZSBjbGllbnQgc2hvdWxkIHJldHJ5IChvcHRpb25hbGx5IGFmdGVyIHRoZSB0aW1lIGluZGljYXRlZCBpbiB0aGUgUmV0cnktQWZ0ZXIgaGVhZGVyKS5cblxuQXBwbGllZCBvbmx5IGlmIE5hbWUgaXMgbm90IHNwZWNpZmllZC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjaWRlbXBvdGVuY3lcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNnZW5lcmF0ZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBzZXF1ZW5jZSBudW1iZXIgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZ2VuZXJhdGlvbiBvZiB0aGUgZGVzaXJlZCBzdGF0ZS4gUG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0uIFJlYWQtb25seS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBnZW5lcmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBpbml0aWFsaXplciBpcyBhIGNvbnRyb2xsZXIgd2hpY2ggZW5mb3JjZXMgc29tZSBzeXN0ZW0gaW52YXJpYW50IGF0IG9iamVjdCBjcmVhdGlvbiB0aW1lLiBUaGlzIGZpZWxkIGlzIGEgbGlzdCBvZiBpbml0aWFsaXplcnMgdGhhdCBoYXZlIG5vdCB5ZXQgYWN0ZWQgb24gdGhpcyBvYmplY3QuIElmIG5pbCBvciBlbXB0eSwgdGhpcyBvYmplY3QgaGFzIGJlZW4gY29tcGxldGVseSBpbml0aWFsaXplZC4gT3RoZXJ3aXNlLCB0aGUgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdW5pbml0aWFsaXplZCBhbmQgaXMgaGlkZGVuIChpbiBsaXN0L3dhdGNoIGFuZCBnZXQgY2FsbHMpIGZyb20gY2xpZW50cyB0aGF0IGhhdmVuJ3QgZXhwbGljaXRseSBhc2tlZCB0byBvYnNlcnZlIHVuaW5pdGlhbGl6ZWQgb2JqZWN0cy5cblxuV2hlbiBhbiBvYmplY3QgaXMgY3JlYXRlZCwgdGhlIHN5c3RlbSB3aWxsIHBvcHVsYXRlIHRoaXMgbGlzdCB3aXRoIHRoZSBjdXJyZW50IHNldCBvZiBpbml0aWFsaXplcnMuIE9ubHkgcHJpdmlsZWdlZCB1c2VycyBtYXkgc2V0IG9yIG1vZGlmeSB0aGlzIGxpc3QuIE9uY2UgaXQgaXMgZW1wdHksIGl0IG1heSBub3QgYmUgbW9kaWZpZWQgZnVydGhlciBieSBhbnkgdXNlci5cblxuREVQUkVDQVRFRCAtIGluaXRpYWxpemVycyBhcmUgYW4gYWxwaGEgZmllbGQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS4xNS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNpbml0aWFsaXplcnNcbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxpemVycz86IEluaXRpYWxpemVycztcblxuICAvKipcbiAgICogTWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSAoc2NvcGUgYW5kIHNlbGVjdCkgb2JqZWN0cy4gTWF5IG1hdGNoIHNlbGVjdG9ycyBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXMuIE1vcmUgaW5mbzogaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL2xhYmVsc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhI2xhYmVsc1xuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogTWFuYWdlZEZpZWxkcyBtYXBzIHdvcmtmbG93LWlkIGFuZCB2ZXJzaW9uIHRvIHRoZSBzZXQgb2YgZmllbGRzIHRoYXQgYXJlIG1hbmFnZWQgYnkgdGhhdCB3b3JrZmxvdy4gVGhpcyBpcyBtb3N0bHkgZm9yIGludGVybmFsIGhvdXNla2VlcGluZywgYW5kIHVzZXJzIHR5cGljYWxseSBzaG91bGRuJ3QgbmVlZCB0byBzZXQgb3IgdW5kZXJzdGFuZCB0aGlzIGZpZWxkLiBBIHdvcmtmbG93IGNhbiBiZSB0aGUgdXNlcidzIG5hbWUsIGEgY29udHJvbGxlcidzIG5hbWUsIG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgYXBwbHkgcGF0aCBsaWtlIFwiY2ktY2RcIi4gVGhlIHNldCBvZiBmaWVsZHMgaXMgYWx3YXlzIGluIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmtmbG93IHVzZWQgd2hlbiBtb2RpZnlpbmcgdGhlIG9iamVjdC5cblxuVGhpcyBmaWVsZCBpcyBhbHBoYSBhbmQgY2FuIGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCB3aXRob3V0IG5vdGljZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNtYW5hZ2VkRmllbGRzXG4gICAqL1xuICByZWFkb25seSBtYW5hZ2VkRmllbGRzPzogTWFuYWdlZEZpZWxkc0VudHJ5W107XG5cbiAgLyoqXG4gICAqIE5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgbmFtZXNwYWNlLiBJcyByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIHJlc291cmNlcywgYWx0aG91Z2ggc29tZSByZXNvdXJjZXMgbWF5IGFsbG93IGEgY2xpZW50IHRvIHJlcXVlc3QgdGhlIGdlbmVyYXRpb24gb2YgYW4gYXBwcm9wcmlhdGUgbmFtZSBhdXRvbWF0aWNhbGx5LiBOYW1lIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgY3JlYXRpb24gaWRlbXBvdGVuY2UgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbi4gQ2Fubm90IGJlIHVwZGF0ZWQuIE1vcmUgaW5mbzogaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzI25hbWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGEjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZXNwYWNlIGRlZmluZXMgdGhlIHNwYWNlIHdpdGhpbiBlYWNoIG5hbWUgbXVzdCBiZSB1bmlxdWUuIEFuIGVtcHR5IG5hbWVzcGFjZSBpcyBlcXVpdmFsZW50IHRvIHRoZSBcImRlZmF1bHRcIiBuYW1lc3BhY2UsIGJ1dCBcImRlZmF1bHRcIiBpcyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uLiBOb3QgYWxsIG9iamVjdHMgYXJlIHJlcXVpcmVkIHRvIGJlIHNjb3BlZCB0byBhIG5hbWVzcGFjZSAtIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGZvciB0aG9zZSBvYmplY3RzIHdpbGwgYmUgZW1wdHkuXG5cbk11c3QgYmUgYSBETlNfTEFCRUwuIENhbm5vdCBiZSB1cGRhdGVkLiBNb3JlIGluZm86IGh0dHA6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGEjbmFtZXNwYWNlXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygb2JqZWN0cyBkZXBlbmRlZCBieSB0aGlzIG9iamVjdC4gSWYgQUxMIG9iamVjdHMgaW4gdGhlIGxpc3QgaGF2ZSBiZWVuIGRlbGV0ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuIElmIHRoaXMgb2JqZWN0IGlzIG1hbmFnZWQgYnkgYSBjb250cm9sbGVyLCB0aGVuIGFuIGVudHJ5IGluIHRoaXMgbGlzdCB3aWxsIHBvaW50IHRvIHRoaXMgY29udHJvbGxlciwgd2l0aCB0aGUgY29udHJvbGxlciBmaWVsZCBzZXQgdG8gdHJ1ZS4gVGhlcmUgY2Fubm90IGJlIG1vcmUgdGhhbiBvbmUgbWFuYWdpbmcgY29udHJvbGxlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNvd25lclJlZmVyZW5jZXNcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyUmVmZXJlbmNlcz86IE93bmVyUmVmZXJlbmNlW107XG5cbiAgLyoqXG4gICAqIEFuIG9wYXF1ZSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGludGVybmFsIHZlcnNpb24gb2YgdGhpcyBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGRldGVybWluZSB3aGVuIG9iamVjdHMgaGF2ZSBjaGFuZ2VkLiBNYXkgYmUgdXNlZCBmb3Igb3B0aW1pc3RpYyBjb25jdXJyZW5jeSwgY2hhbmdlIGRldGVjdGlvbiwgYW5kIHRoZSB3YXRjaCBvcGVyYXRpb24gb24gYSByZXNvdXJjZSBvciBzZXQgb2YgcmVzb3VyY2VzLiBDbGllbnRzIG11c3QgdHJlYXQgdGhlc2UgdmFsdWVzIGFzIG9wYXF1ZSBhbmQgcGFzc2VkIHVubW9kaWZpZWQgYmFjayB0byB0aGUgc2VydmVyLiBUaGV5IG1heSBvbmx5IGJlIHZhbGlkIGZvciBhIHBhcnRpY3VsYXIgcmVzb3VyY2Ugb3Igc2V0IG9mIHJlc291cmNlcy5cblxuUG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0uIFJlYWQtb25seS4gVmFsdWUgbXVzdCBiZSB0cmVhdGVkIGFzIG9wYXF1ZSBieSBjbGllbnRzIGFuZCAuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI2NvbmN1cnJlbmN5LWNvbnRyb2wtYW5kLWNvbnNpc3RlbmN5XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGEjcmVzb3VyY2VWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlbGZMaW5rIGlzIGEgVVJMIHJlcHJlc2VudGluZyB0aGlzIG9iamVjdC4gUG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0uIFJlYWQtb25seS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YSNzZWxmTGlua1xuICAgKi9cbiAgcmVhZG9ubHkgc2VsZkxpbms/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVJRCBpcyB0aGUgdW5pcXVlIGluIHRpbWUgYW5kIHNwYWNlIHZhbHVlIGZvciB0aGlzIG9iamVjdC4gSXQgaXMgdHlwaWNhbGx5IGdlbmVyYXRlZCBieSB0aGUgc2VydmVyIG9uIHN1Y2Nlc3NmdWwgY3JlYXRpb24gb2YgYSByZXNvdXJjZSBhbmQgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIG9uIFBVVCBvcGVyYXRpb25zLlxuXG5Qb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbS4gUmVhZC1vbmx5LiBNb3JlIGluZm86IGh0dHA6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycyN1aWRzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGEjdWlkXG4gICAqL1xuICByZWFkb25seSB1aWQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBNdXRhdGluZ1dlYmhvb2sgZGVzY3JpYmVzIGFuIGFkbWlzc2lvbiB3ZWJob29rIGFuZCB0aGUgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zIGl0IGFwcGxpZXMgdG8uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0aW5nV2ViaG9vayB7XG4gIC8qKlxuICAgKiBBZG1pc3Npb25SZXZpZXdWZXJzaW9ucyBpcyBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJlZmVycmVkIGBBZG1pc3Npb25SZXZpZXdgIHZlcnNpb25zIHRoZSBXZWJob29rIGV4cGVjdHMuIEFQSSBzZXJ2ZXIgd2lsbCB0cnkgdG8gdXNlIGZpcnN0IHZlcnNpb24gaW4gdGhlIGxpc3Qgd2hpY2ggaXQgc3VwcG9ydHMuIElmIG5vbmUgb2YgdGhlIHZlcnNpb25zIHNwZWNpZmllZCBpbiB0aGlzIGxpc3Qgc3VwcG9ydGVkIGJ5IEFQSSBzZXJ2ZXIsIHZhbGlkYXRpb24gd2lsbCBmYWlsIGZvciB0aGlzIG9iamVjdC4gSWYgYSBwZXJzaXN0ZWQgd2ViaG9vayBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBhbGxvd2VkIHZlcnNpb25zIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGFueSB2ZXJzaW9ucyBrbm93biB0byB0aGUgQVBJIFNlcnZlciwgY2FsbHMgdG8gdGhlIHdlYmhvb2sgd2lsbCBmYWlsIGFuZCBiZSBzdWJqZWN0IHRvIHRoZSBmYWlsdXJlIHBvbGljeS4gRGVmYXVsdCB0byBgWyd2MWJldGExJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCB2MWJldGExJ11gLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuTXV0YXRpbmdXZWJob29rI2FkbWlzc2lvblJldmlld1ZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBhZG1pc3Npb25SZXZpZXdWZXJzaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDbGllbnRDb25maWcgZGVmaW5lcyBob3cgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9vay4gUmVxdWlyZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9vayNjbGllbnRDb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudENvbmZpZzogV2ViaG9va0NsaWVudENvbmZpZztcblxuICAvKipcbiAgICogRmFpbHVyZVBvbGljeSBkZWZpbmVzIGhvdyB1bnJlY29nbml6ZWQgZXJyb3JzIGZyb20gdGhlIGFkbWlzc2lvbiBlbmRwb2ludCBhcmUgaGFuZGxlZCAtIGFsbG93ZWQgdmFsdWVzIGFyZSBJZ25vcmUgb3IgRmFpbC4gRGVmYXVsdHMgdG8gSWdub3JlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJZ25vcmUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2sjZmFpbHVyZVBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbHVyZVBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogbWF0Y2hQb2xpY3kgZGVmaW5lcyBob3cgdGhlIFwicnVsZXNcIiBsaXN0IGlzIHVzZWQgdG8gbWF0Y2ggaW5jb21pbmcgcmVxdWVzdHMuIEFsbG93ZWQgdmFsdWVzIGFyZSBcIkV4YWN0XCIgb3IgXCJFcXVpdmFsZW50XCIuXG5cbi0gRXhhY3Q6IG1hdGNoIGEgcmVxdWVzdCBvbmx5IGlmIGl0IGV4YWN0bHkgbWF0Y2hlcyBhIHNwZWNpZmllZCBydWxlLiBGb3IgZXhhbXBsZSwgaWYgZGVwbG95bWVudHMgY2FuIGJlIG1vZGlmaWVkIHZpYSBhcHBzL3YxLCBhcHBzL3YxYmV0YTEsIGFuZCBleHRlbnNpb25zL3YxYmV0YTEsIGJ1dCBcInJ1bGVzXCIgb25seSBpbmNsdWRlZCBgYXBpR3JvdXBzOltcImFwcHNcIl0sIGFwaVZlcnNpb25zOltcInYxXCJdLCByZXNvdXJjZXM6IFtcImRlcGxveW1lbnRzXCJdYCwgYSByZXF1ZXN0IHRvIGFwcHMvdjFiZXRhMSBvciBleHRlbnNpb25zL3YxYmV0YTEgd291bGQgbm90IGJlIHNlbnQgdG8gdGhlIHdlYmhvb2suXG5cbi0gRXF1aXZhbGVudDogbWF0Y2ggYSByZXF1ZXN0IGlmIG1vZGlmaWVzIGEgcmVzb3VyY2UgbGlzdGVkIGluIHJ1bGVzLCBldmVuIHZpYSBhbm90aGVyIEFQSSBncm91cCBvciB2ZXJzaW9uLiBGb3IgZXhhbXBsZSwgaWYgZGVwbG95bWVudHMgY2FuIGJlIG1vZGlmaWVkIHZpYSBhcHBzL3YxLCBhcHBzL3YxYmV0YTEsIGFuZCBleHRlbnNpb25zL3YxYmV0YTEsIGFuZCBcInJ1bGVzXCIgb25seSBpbmNsdWRlZCBgYXBpR3JvdXBzOltcImFwcHNcIl0sIGFwaVZlcnNpb25zOltcInYxXCJdLCByZXNvdXJjZXM6IFtcImRlcGxveW1lbnRzXCJdYCwgYSByZXF1ZXN0IHRvIGFwcHMvdjFiZXRhMSBvciBleHRlbnNpb25zL3YxYmV0YTEgd291bGQgYmUgY29udmVydGVkIHRvIGFwcHMvdjEgYW5kIHNlbnQgdG8gdGhlIHdlYmhvb2suXG5cbkRlZmF1bHRzIHRvIFwiRXhhY3RcIlxuICAgKlxuICAgKiBAZGVmYXVsdCBFeGFjdFwiXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2sjbWF0Y2hQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IG1hdGNoUG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWRtaXNzaW9uIHdlYmhvb2suIE5hbWUgc2hvdWxkIGJlIGZ1bGx5IHF1YWxpZmllZCwgZS5nLiwgaW1hZ2Vwb2xpY3kua3ViZXJuZXRlcy5pbywgd2hlcmUgXCJpbWFnZXBvbGljeVwiIGlzIHRoZSBuYW1lIG9mIHRoZSB3ZWJob29rLCBhbmQga3ViZXJuZXRlcy5pbyBpcyB0aGUgbmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uLiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9vayNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZVNlbGVjdG9yIGRlY2lkZXMgd2hldGhlciB0byBydW4gdGhlIHdlYmhvb2sgb24gYW4gb2JqZWN0IGJhc2VkIG9uIHdoZXRoZXIgdGhlIG5hbWVzcGFjZSBmb3IgdGhhdCBvYmplY3QgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuIElmIHRoZSBvYmplY3QgaXRzZWxmIGlzIGEgbmFtZXNwYWNlLCB0aGUgbWF0Y2hpbmcgaXMgcGVyZm9ybWVkIG9uIG9iamVjdC5tZXRhZGF0YS5sYWJlbHMuIElmIHRoZSBvYmplY3QgaXMgYW5vdGhlciBjbHVzdGVyIHNjb3BlZCByZXNvdXJjZSwgaXQgbmV2ZXIgc2tpcHMgdGhlIHdlYmhvb2suXG5cbkZvciBleGFtcGxlLCB0byBydW4gdGhlIHdlYmhvb2sgb24gYW55IG9iamVjdHMgd2hvc2UgbmFtZXNwYWNlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggXCJydW5sZXZlbFwiIG9mIFwiMFwiIG9yIFwiMVwiOyAgeW91IHdpbGwgc2V0IHRoZSBzZWxlY3RvciBhcyBmb2xsb3dzOiBcIm5hbWVzcGFjZVNlbGVjdG9yXCI6IHtcbiAgXCJtYXRjaEV4cHJlc3Npb25zXCI6IFtcbiAgICB7XG4gICAgICBcImtleVwiOiBcInJ1bmxldmVsXCIsXG4gICAgICBcIm9wZXJhdG9yXCI6IFwiTm90SW5cIixcbiAgICAgIFwidmFsdWVzXCI6IFtcbiAgICAgICAgXCIwXCIsXG4gICAgICAgIFwiMVwiXG4gICAgICBdXG4gICAgfVxuICBdXG59XG5cbklmIGluc3RlYWQgeW91IHdhbnQgdG8gb25seSBydW4gdGhlIHdlYmhvb2sgb24gYW55IG9iamVjdHMgd2hvc2UgbmFtZXNwYWNlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgXCJlbnZpcm9ubWVudFwiIG9mIFwicHJvZFwiIG9yIFwic3RhZ2luZ1wiOyB5b3Ugd2lsbCBzZXQgdGhlIHNlbGVjdG9yIGFzIGZvbGxvd3M6IFwibmFtZXNwYWNlU2VsZWN0b3JcIjoge1xuICBcIm1hdGNoRXhwcmVzc2lvbnNcIjogW1xuICAgIHtcbiAgICAgIFwia2V5XCI6IFwiZW52aXJvbm1lbnRcIixcbiAgICAgIFwib3BlcmF0b3JcIjogXCJJblwiLFxuICAgICAgXCJ2YWx1ZXNcIjogW1xuICAgICAgICBcInByb2RcIixcbiAgICAgICAgXCJzdGFnaW5nXCJcbiAgICAgIF1cbiAgICB9XG4gIF1cbn1cblxuU2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL2xhYmVscy8gZm9yIG1vcmUgZXhhbXBsZXMgb2YgbGFiZWwgc2VsZWN0b3JzLlxuXG5EZWZhdWx0IHRvIHRoZSBlbXB0eSBMYWJlbFNlbGVjdG9yLCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBlbXB0eSBMYWJlbFNlbGVjdG9yLCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2sjbmFtZXNwYWNlU2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZVNlbGVjdG9yPzogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogT2JqZWN0U2VsZWN0b3IgZGVjaWRlcyB3aGV0aGVyIHRvIHJ1biB0aGUgd2ViaG9vayBiYXNlZCBvbiBpZiB0aGUgb2JqZWN0IGhhcyBtYXRjaGluZyBsYWJlbHMuIG9iamVjdFNlbGVjdG9yIGlzIGV2YWx1YXRlZCBhZ2FpbnN0IGJvdGggdGhlIG9sZE9iamVjdCBhbmQgbmV3T2JqZWN0IHRoYXQgd291bGQgYmUgc2VudCB0byB0aGUgd2ViaG9vaywgYW5kIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2ggaWYgZWl0aGVyIG9iamVjdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci4gQSBudWxsIG9iamVjdCAob2xkT2JqZWN0IGluIHRoZSBjYXNlIG9mIGNyZWF0ZSwgb3IgbmV3T2JqZWN0IGluIHRoZSBjYXNlIG9mIGRlbGV0ZSkgb3IgYW4gb2JqZWN0IHRoYXQgY2Fubm90IGhhdmUgbGFiZWxzIChsaWtlIGEgRGVwbG95bWVudFJvbGxiYWNrIG9yIGEgUG9kUHJveHlPcHRpb25zIG9iamVjdCkgaXMgbm90IGNvbnNpZGVyZWQgdG8gbWF0Y2guIFVzZSB0aGUgb2JqZWN0IHNlbGVjdG9yIG9ubHkgaWYgdGhlIHdlYmhvb2sgaXMgb3B0LWluLCBiZWNhdXNlIGVuZCB1c2VycyBtYXkgc2tpcCB0aGUgYWRtaXNzaW9uIHdlYmhvb2sgYnkgc2V0dGluZyB0aGUgbGFiZWxzLiBEZWZhdWx0IHRvIHRoZSBlbXB0eSBMYWJlbFNlbGVjdG9yLCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBlbXB0eSBMYWJlbFNlbGVjdG9yLCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2sjb2JqZWN0U2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IG9iamVjdFNlbGVjdG9yPzogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogcmVpbnZvY2F0aW9uUG9saWN5IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgd2ViaG9vayBzaG91bGQgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFzIHBhcnQgb2YgYSBzaW5nbGUgYWRtaXNzaW9uIGV2YWx1YXRpb24uIEFsbG93ZWQgdmFsdWVzIGFyZSBcIk5ldmVyXCIgYW5kIFwiSWZOZWVkZWRcIi5cblxuTmV2ZXI6IHRoZSB3ZWJob29rIHdpbGwgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBpbiBhIHNpbmdsZSBhZG1pc3Npb24gZXZhbHVhdGlvbi5cblxuSWZOZWVkZWQ6IHRoZSB3ZWJob29rIHdpbGwgYmUgY2FsbGVkIGF0IGxlYXN0IG9uZSBhZGRpdGlvbmFsIHRpbWUgYXMgcGFydCBvZiB0aGUgYWRtaXNzaW9uIGV2YWx1YXRpb24gaWYgdGhlIG9iamVjdCBiZWluZyBhZG1pdHRlZCBpcyBtb2RpZmllZCBieSBvdGhlciBhZG1pc3Npb24gcGx1Z2lucyBhZnRlciB0aGUgaW5pdGlhbCB3ZWJob29rIGNhbGwuIFdlYmhvb2tzIHRoYXQgc3BlY2lmeSB0aGlzIG9wdGlvbiAqbXVzdCogYmUgaWRlbXBvdGVudCwgYWJsZSB0byBwcm9jZXNzIG9iamVjdHMgdGhleSBwcmV2aW91c2x5IGFkbWl0dGVkLiBOb3RlOiAqIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBpbnZvY2F0aW9ucyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBleGFjdGx5IG9uZS4gKiBpZiBhZGRpdGlvbmFsIGludm9jYXRpb25zIHJlc3VsdCBpbiBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9iamVjdCwgd2ViaG9va3MgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQgYWdhaW4uICogd2ViaG9va3MgdGhhdCB1c2UgdGhpcyBvcHRpb24gbWF5IGJlIHJlb3JkZXJlZCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW52b2NhdGlvbnMuICogdG8gdmFsaWRhdGUgYW4gb2JqZWN0IGFmdGVyIGFsbCBtdXRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgY29tcGxldGUsIHVzZSBhIHZhbGlkYXRpbmcgYWRtaXNzaW9uIHdlYmhvb2sgaW5zdGVhZC5cblxuRGVmYXVsdHMgdG8gXCJOZXZlclwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOZXZlclwiLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuTXV0YXRpbmdXZWJob29rI3JlaW52b2NhdGlvblBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnZvY2F0aW9uUG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdWxlcyBkZXNjcmliZXMgd2hhdCBvcGVyYXRpb25zIG9uIHdoYXQgcmVzb3VyY2VzL3N1YnJlc291cmNlcyB0aGUgd2ViaG9vayBjYXJlcyBhYm91dC4gVGhlIHdlYmhvb2sgY2FyZXMgYWJvdXQgYW4gb3BlcmF0aW9uIGlmIGl0IG1hdGNoZXMgX2FueV8gUnVsZS4gSG93ZXZlciwgaW4gb3JkZXIgdG8gcHJldmVudCBWYWxpZGF0aW5nQWRtaXNzaW9uV2ViaG9va3MgYW5kIE11dGF0aW5nQWRtaXNzaW9uV2ViaG9va3MgZnJvbSBwdXR0aW5nIHRoZSBjbHVzdGVyIGluIGEgc3RhdGUgd2hpY2ggY2Fubm90IGJlIHJlY292ZXJlZCBmcm9tIHdpdGhvdXQgY29tcGxldGVseSBkaXNhYmxpbmcgdGhlIHBsdWdpbiwgVmFsaWRhdGluZ0FkbWlzc2lvbldlYmhvb2tzIGFuZCBNdXRhdGluZ0FkbWlzc2lvbldlYmhvb2tzIGFyZSBuZXZlciBjYWxsZWQgb24gYWRtaXNzaW9uIHJlcXVlc3RzIGZvciBWYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24gYW5kIE11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9vayNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBSdWxlV2l0aE9wZXJhdGlvbnNbXTtcblxuICAvKipcbiAgICogU2lkZUVmZmVjdHMgc3RhdGVzIHdoZXRoZXIgdGhpcyB3ZWJob29rayBoYXMgc2lkZSBlZmZlY3RzLiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IFVua25vd24sIE5vbmUsIFNvbWUsIE5vbmVPbkRyeVJ1biBXZWJob29rcyB3aXRoIHNpZGUgZWZmZWN0cyBNVVNUIGltcGxlbWVudCBhIHJlY29uY2lsaWF0aW9uIHN5c3RlbSwgc2luY2UgYSByZXF1ZXN0IG1heSBiZSByZWplY3RlZCBieSBhIGZ1dHVyZSBzdGVwIGluIHRoZSBhZG1pc3Npb24gY2hhbmdlIGFuZCB0aGUgc2lkZSBlZmZlY3RzIHRoZXJlZm9yZSBuZWVkIHRvIGJlIHVuZG9uZS4gUmVxdWVzdHMgd2l0aCB0aGUgZHJ5UnVuIGF0dHJpYnV0ZSB3aWxsIGJlIGF1dG8tcmVqZWN0ZWQgaWYgdGhleSBtYXRjaCBhIHdlYmhvb2sgd2l0aCBzaWRlRWZmZWN0cyA9PSBVbmtub3duIG9yIFNvbWUuIERlZmF1bHRzIHRvIFVua25vd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IFVua25vd24uXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5NdXRhdGluZ1dlYmhvb2sjc2lkZUVmZmVjdHNcbiAgICovXG4gIHJlYWRvbmx5IHNpZGVFZmZlY3RzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0U2Vjb25kcyBzcGVjaWZpZXMgdGhlIHRpbWVvdXQgZm9yIHRoaXMgd2ViaG9vay4gQWZ0ZXIgdGhlIHRpbWVvdXQgcGFzc2VzLCB0aGUgd2ViaG9vayBjYWxsIHdpbGwgYmUgaWdub3JlZCBvciB0aGUgQVBJIGNhbGwgd2lsbCBmYWlsIGJhc2VkIG9uIHRoZSBmYWlsdXJlIHBvbGljeS4gVGhlIHRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMwIHNlY29uZHMuIERlZmF1bHQgdG8gMzAgc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMzAgc2Vjb25kcy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLk11dGF0aW5nV2ViaG9vayN0aW1lb3V0U2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dFNlY29uZHM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBMaXN0TWV0YSBkZXNjcmliZXMgbWV0YWRhdGEgdGhhdCBzeW50aGV0aWMgcmVzb3VyY2VzIG11c3QgaGF2ZSwgaW5jbHVkaW5nIGxpc3RzIGFuZCB2YXJpb3VzIHN0YXR1cyBvYmplY3RzLiBBIHJlc291cmNlIG1heSBoYXZlIG9ubHkgb25lIG9mIHtPYmplY3RNZXRhLCBMaXN0TWV0YX0uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0TWV0YSB7XG4gIC8qKlxuICAgKiBjb250aW51ZSBtYXkgYmUgc2V0IGlmIHRoZSB1c2VyIHNldCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQsIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmVyIGhhcyBtb3JlIGRhdGEgYXZhaWxhYmxlLiBUaGUgdmFsdWUgaXMgb3BhcXVlIGFuZCBtYXkgYmUgdXNlZCB0byBpc3N1ZSBhbm90aGVyIHJlcXVlc3QgdG8gdGhlIGVuZHBvaW50IHRoYXQgc2VydmVkIHRoaXMgbGlzdCB0byByZXRyaWV2ZSB0aGUgbmV4dCBzZXQgb2YgYXZhaWxhYmxlIG9iamVjdHMuIENvbnRpbnVpbmcgYSBjb25zaXN0ZW50IGxpc3QgbWF5IG5vdCBiZSBwb3NzaWJsZSBpZiB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgb3IgbW9yZSB0aGFuIGEgZmV3IG1pbnV0ZXMgaGF2ZSBwYXNzZWQuIFRoZSByZXNvdXJjZVZlcnNpb24gZmllbGQgcmV0dXJuZWQgd2hlbiB1c2luZyB0aGlzIGNvbnRpbnVlIHZhbHVlIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgcmVzcG9uc2UsIHVubGVzcyB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRva2VuIGZyb20gYW4gZXJyb3IgbWVzc2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGEjY29udGludWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRpbnVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiByZW1haW5pbmdJdGVtQ291bnQgaXMgdGhlIG51bWJlciBvZiBzdWJzZXF1ZW50IGl0ZW1zIGluIHRoZSBsaXN0IHdoaWNoIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBsaXN0IHJlc3BvbnNlLiBJZiB0aGUgbGlzdCByZXF1ZXN0IGNvbnRhaW5lZCBsYWJlbCBvciBmaWVsZCBzZWxlY3RvcnMsIHRoZW4gdGhlIG51bWJlciBvZiByZW1haW5pbmcgaXRlbXMgaXMgdW5rbm93biBhbmQgdGhlIGZpZWxkIHdpbGwgYmUgbGVmdCB1bnNldCBhbmQgb21pdHRlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi4gSWYgdGhlIGxpc3QgaXMgY29tcGxldGUgKGVpdGhlciBiZWNhdXNlIGl0IGlzIG5vdCBjaHVua2luZyBvciBiZWNhdXNlIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmspLCB0aGVuIHRoZXJlIGFyZSBubyBtb3JlIHJlbWFpbmluZyBpdGVtcyBhbmQgdGhpcyBmaWVsZCB3aWxsIGJlIGxlZnQgdW5zZXQgYW5kIG9taXR0ZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24uIFNlcnZlcnMgb2xkZXIgdGhhbiB2MS4xNSBkbyBub3Qgc2V0IHRoaXMgZmllbGQuIFRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhlIHJlbWFpbmluZ0l0ZW1Db3VudCBpcyAqZXN0aW1hdGluZyogdGhlIHNpemUgb2YgYSBjb2xsZWN0aW9uLiBDbGllbnRzIHNob3VsZCBub3QgcmVseSBvbiB0aGUgcmVtYWluaW5nSXRlbUNvdW50IHRvIGJlIHNldCBvciB0byBiZSBleGFjdC5cblxuVGhpcyBmaWVsZCBpcyBhbHBoYSBhbmQgY2FuIGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCB3aXRob3V0IG5vdGljZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGEjcmVtYWluaW5nSXRlbUNvdW50XG4gICAqL1xuICByZWFkb25seSByZW1haW5pbmdJdGVtQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHNlcnZlcidzIGludGVybmFsIHZlcnNpb24gb2YgdGhpcyBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGRldGVybWluZSB3aGVuIG9iamVjdHMgaGF2ZSBjaGFuZ2VkLiBWYWx1ZSBtdXN0IGJlIHRyZWF0ZWQgYXMgb3BhcXVlIGJ5IGNsaWVudHMgYW5kIHBhc3NlZCB1bm1vZGlmaWVkIGJhY2sgdG8gdGhlIHNlcnZlci4gUG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0uIFJlYWQtb25seS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjY29uY3VycmVuY3ktY29udHJvbC1hbmQtY29uc2lzdGVuY3lcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGEjcmVzb3VyY2VWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHNlbGZMaW5rIGlzIGEgVVJMIHJlcHJlc2VudGluZyB0aGlzIG9iamVjdC4gUG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW0uIFJlYWQtb25seS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGEjc2VsZkxpbmtcbiAgICovXG4gIHJlYWRvbmx5IHNlbGZMaW5rPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogVmFsaWRhdGluZ1dlYmhvb2sgZGVzY3JpYmVzIGFuIGFkbWlzc2lvbiB3ZWJob29rIGFuZCB0aGUgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zIGl0IGFwcGxpZXMgdG8uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGluZ1dlYmhvb2sge1xuICAvKipcbiAgICogQWRtaXNzaW9uUmV2aWV3VmVyc2lvbnMgaXMgYW4gb3JkZXJlZCBsaXN0IG9mIHByZWZlcnJlZCBgQWRtaXNzaW9uUmV2aWV3YCB2ZXJzaW9ucyB0aGUgV2ViaG9vayBleHBlY3RzLiBBUEkgc2VydmVyIHdpbGwgdHJ5IHRvIHVzZSBmaXJzdCB2ZXJzaW9uIGluIHRoZSBsaXN0IHdoaWNoIGl0IHN1cHBvcnRzLiBJZiBub25lIG9mIHRoZSB2ZXJzaW9ucyBzcGVjaWZpZWQgaW4gdGhpcyBsaXN0IHN1cHBvcnRlZCBieSBBUEkgc2VydmVyLCB2YWxpZGF0aW9uIHdpbGwgZmFpbCBmb3IgdGhpcyBvYmplY3QuIElmIGEgcGVyc2lzdGVkIHdlYmhvb2sgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgYWxsb3dlZCB2ZXJzaW9ucyBhbmQgZG9lcyBub3QgaW5jbHVkZSBhbnkgdmVyc2lvbnMga25vd24gdG8gdGhlIEFQSSBTZXJ2ZXIsIGNhbGxzIHRvIHRoZSB3ZWJob29rIHdpbGwgZmFpbCBhbmQgYmUgc3ViamVjdCB0byB0aGUgZmFpbHVyZSBwb2xpY3kuIERlZmF1bHQgdG8gYFsndjFiZXRhMSddYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdjFiZXRhMSddYC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rI2FkbWlzc2lvblJldmlld1ZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBhZG1pc3Npb25SZXZpZXdWZXJzaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDbGllbnRDb25maWcgZGVmaW5lcyBob3cgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9vay4gUmVxdWlyZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rI2NsaWVudENvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q29uZmlnOiBXZWJob29rQ2xpZW50Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBGYWlsdXJlUG9saWN5IGRlZmluZXMgaG93IHVucmVjb2duaXplZCBlcnJvcnMgZnJvbSB0aGUgYWRtaXNzaW9uIGVuZHBvaW50IGFyZSBoYW5kbGVkIC0gYWxsb3dlZCB2YWx1ZXMgYXJlIElnbm9yZSBvciBGYWlsLiBEZWZhdWx0cyB0byBJZ25vcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IElnbm9yZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rI2ZhaWx1cmVQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGZhaWx1cmVQb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG1hdGNoUG9saWN5IGRlZmluZXMgaG93IHRoZSBcInJ1bGVzXCIgbGlzdCBpcyB1c2VkIHRvIG1hdGNoIGluY29taW5nIHJlcXVlc3RzLiBBbGxvd2VkIHZhbHVlcyBhcmUgXCJFeGFjdFwiIG9yIFwiRXF1aXZhbGVudFwiLlxuXG4tIEV4YWN0OiBtYXRjaCBhIHJlcXVlc3Qgb25seSBpZiBpdCBleGFjdGx5IG1hdGNoZXMgYSBzcGVjaWZpZWQgcnVsZS4gRm9yIGV4YW1wbGUsIGlmIGRlcGxveW1lbnRzIGNhbiBiZSBtb2RpZmllZCB2aWEgYXBwcy92MSwgYXBwcy92MWJldGExLCBhbmQgZXh0ZW5zaW9ucy92MWJldGExLCBidXQgXCJydWxlc1wiIG9ubHkgaW5jbHVkZWQgYGFwaUdyb3VwczpbXCJhcHBzXCJdLCBhcGlWZXJzaW9uczpbXCJ2MVwiXSwgcmVzb3VyY2VzOiBbXCJkZXBsb3ltZW50c1wiXWAsIGEgcmVxdWVzdCB0byBhcHBzL3YxYmV0YTEgb3IgZXh0ZW5zaW9ucy92MWJldGExIHdvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSB3ZWJob29rLlxuXG4tIEVxdWl2YWxlbnQ6IG1hdGNoIGEgcmVxdWVzdCBpZiBtb2RpZmllcyBhIHJlc291cmNlIGxpc3RlZCBpbiBydWxlcywgZXZlbiB2aWEgYW5vdGhlciBBUEkgZ3JvdXAgb3IgdmVyc2lvbi4gRm9yIGV4YW1wbGUsIGlmIGRlcGxveW1lbnRzIGNhbiBiZSBtb2RpZmllZCB2aWEgYXBwcy92MSwgYXBwcy92MWJldGExLCBhbmQgZXh0ZW5zaW9ucy92MWJldGExLCBhbmQgXCJydWxlc1wiIG9ubHkgaW5jbHVkZWQgYGFwaUdyb3VwczpbXCJhcHBzXCJdLCBhcGlWZXJzaW9uczpbXCJ2MVwiXSwgcmVzb3VyY2VzOiBbXCJkZXBsb3ltZW50c1wiXWAsIGEgcmVxdWVzdCB0byBhcHBzL3YxYmV0YTEgb3IgZXh0ZW5zaW9ucy92MWJldGExIHdvdWxkIGJlIGNvbnZlcnRlZCB0byBhcHBzL3YxIGFuZCBzZW50IHRvIHRoZSB3ZWJob29rLlxuXG5EZWZhdWx0cyB0byBcIkV4YWN0XCJcbiAgICpcbiAgICogQGRlZmF1bHQgRXhhY3RcIlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuVmFsaWRhdGluZ1dlYmhvb2sjbWF0Y2hQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IG1hdGNoUG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWRtaXNzaW9uIHdlYmhvb2suIE5hbWUgc2hvdWxkIGJlIGZ1bGx5IHF1YWxpZmllZCwgZS5nLiwgaW1hZ2Vwb2xpY3kua3ViZXJuZXRlcy5pbywgd2hlcmUgXCJpbWFnZXBvbGljeVwiIGlzIHRoZSBuYW1lIG9mIHRoZSB3ZWJob29rLCBhbmQga3ViZXJuZXRlcy5pbyBpcyB0aGUgbmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uLiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZXNwYWNlU2VsZWN0b3IgZGVjaWRlcyB3aGV0aGVyIHRvIHJ1biB0aGUgd2ViaG9vayBvbiBhbiBvYmplY3QgYmFzZWQgb24gd2hldGhlciB0aGUgbmFtZXNwYWNlIGZvciB0aGF0IG9iamVjdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci4gSWYgdGhlIG9iamVjdCBpdHNlbGYgaXMgYSBuYW1lc3BhY2UsIHRoZSBtYXRjaGluZyBpcyBwZXJmb3JtZWQgb24gb2JqZWN0Lm1ldGFkYXRhLmxhYmVscy4gSWYgdGhlIG9iamVjdCBpcyBhbm90aGVyIGNsdXN0ZXIgc2NvcGVkIHJlc291cmNlLCBpdCBuZXZlciBza2lwcyB0aGUgd2ViaG9vay5cblxuRm9yIGV4YW1wbGUsIHRvIHJ1biB0aGUgd2ViaG9vayBvbiBhbnkgb2JqZWN0cyB3aG9zZSBuYW1lc3BhY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBcInJ1bmxldmVsXCIgb2YgXCIwXCIgb3IgXCIxXCI7ICB5b3Ugd2lsbCBzZXQgdGhlIHNlbGVjdG9yIGFzIGZvbGxvd3M6IFwibmFtZXNwYWNlU2VsZWN0b3JcIjoge1xuICBcIm1hdGNoRXhwcmVzc2lvbnNcIjogW1xuICAgIHtcbiAgICAgIFwia2V5XCI6IFwicnVubGV2ZWxcIixcbiAgICAgIFwib3BlcmF0b3JcIjogXCJOb3RJblwiLFxuICAgICAgXCJ2YWx1ZXNcIjogW1xuICAgICAgICBcIjBcIixcbiAgICAgICAgXCIxXCJcbiAgICAgIF1cbiAgICB9XG4gIF1cbn1cblxuSWYgaW5zdGVhZCB5b3Ugd2FudCB0byBvbmx5IHJ1biB0aGUgd2ViaG9vayBvbiBhbnkgb2JqZWN0cyB3aG9zZSBuYW1lc3BhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBcImVudmlyb25tZW50XCIgb2YgXCJwcm9kXCIgb3IgXCJzdGFnaW5nXCI7IHlvdSB3aWxsIHNldCB0aGUgc2VsZWN0b3IgYXMgZm9sbG93czogXCJuYW1lc3BhY2VTZWxlY3RvclwiOiB7XG4gIFwibWF0Y2hFeHByZXNzaW9uc1wiOiBbXG4gICAge1xuICAgICAgXCJrZXlcIjogXCJlbnZpcm9ubWVudFwiLFxuICAgICAgXCJvcGVyYXRvclwiOiBcIkluXCIsXG4gICAgICBcInZhbHVlc1wiOiBbXG4gICAgICAgIFwicHJvZFwiLFxuICAgICAgICBcInN0YWdpbmdcIlxuICAgICAgXVxuICAgIH1cbiAgXVxufVxuXG5TZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbGFiZWxzIGZvciBtb3JlIGV4YW1wbGVzIG9mIGxhYmVsIHNlbGVjdG9ycy5cblxuRGVmYXVsdCB0byB0aGUgZW1wdHkgTGFiZWxTZWxlY3Rvciwgd2hpY2ggbWF0Y2hlcyBldmVyeXRoaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgZW1wdHkgTGFiZWxTZWxlY3Rvciwgd2hpY2ggbWF0Y2hlcyBldmVyeXRoaW5nLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuVmFsaWRhdGluZ1dlYmhvb2sjbmFtZXNwYWNlU2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZVNlbGVjdG9yPzogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogT2JqZWN0U2VsZWN0b3IgZGVjaWRlcyB3aGV0aGVyIHRvIHJ1biB0aGUgd2ViaG9vayBiYXNlZCBvbiBpZiB0aGUgb2JqZWN0IGhhcyBtYXRjaGluZyBsYWJlbHMuIG9iamVjdFNlbGVjdG9yIGlzIGV2YWx1YXRlZCBhZ2FpbnN0IGJvdGggdGhlIG9sZE9iamVjdCBhbmQgbmV3T2JqZWN0IHRoYXQgd291bGQgYmUgc2VudCB0byB0aGUgd2ViaG9vaywgYW5kIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2ggaWYgZWl0aGVyIG9iamVjdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci4gQSBudWxsIG9iamVjdCAob2xkT2JqZWN0IGluIHRoZSBjYXNlIG9mIGNyZWF0ZSwgb3IgbmV3T2JqZWN0IGluIHRoZSBjYXNlIG9mIGRlbGV0ZSkgb3IgYW4gb2JqZWN0IHRoYXQgY2Fubm90IGhhdmUgbGFiZWxzIChsaWtlIGEgRGVwbG95bWVudFJvbGxiYWNrIG9yIGEgUG9kUHJveHlPcHRpb25zIG9iamVjdCkgaXMgbm90IGNvbnNpZGVyZWQgdG8gbWF0Y2guIFVzZSB0aGUgb2JqZWN0IHNlbGVjdG9yIG9ubHkgaWYgdGhlIHdlYmhvb2sgaXMgb3B0LWluLCBiZWNhdXNlIGVuZCB1c2VycyBtYXkgc2tpcCB0aGUgYWRtaXNzaW9uIHdlYmhvb2sgYnkgc2V0dGluZyB0aGUgbGFiZWxzLiBEZWZhdWx0IHRvIHRoZSBlbXB0eSBMYWJlbFNlbGVjdG9yLCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBlbXB0eSBMYWJlbFNlbGVjdG9yLCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5WYWxpZGF0aW5nV2ViaG9vayNvYmplY3RTZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgb2JqZWN0U2VsZWN0b3I/OiBMYWJlbFNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBSdWxlcyBkZXNjcmliZXMgd2hhdCBvcGVyYXRpb25zIG9uIHdoYXQgcmVzb3VyY2VzL3N1YnJlc291cmNlcyB0aGUgd2ViaG9vayBjYXJlcyBhYm91dC4gVGhlIHdlYmhvb2sgY2FyZXMgYWJvdXQgYW4gb3BlcmF0aW9uIGlmIGl0IG1hdGNoZXMgX2FueV8gUnVsZS4gSG93ZXZlciwgaW4gb3JkZXIgdG8gcHJldmVudCBWYWxpZGF0aW5nQWRtaXNzaW9uV2ViaG9va3MgYW5kIE11dGF0aW5nQWRtaXNzaW9uV2ViaG9va3MgZnJvbSBwdXR0aW5nIHRoZSBjbHVzdGVyIGluIGEgc3RhdGUgd2hpY2ggY2Fubm90IGJlIHJlY292ZXJlZCBmcm9tIHdpdGhvdXQgY29tcGxldGVseSBkaXNhYmxpbmcgdGhlIHBsdWdpbiwgVmFsaWRhdGluZ0FkbWlzc2lvbldlYmhvb2tzIGFuZCBNdXRhdGluZ0FkbWlzc2lvbldlYmhvb2tzIGFyZSBuZXZlciBjYWxsZWQgb24gYWRtaXNzaW9uIHJlcXVlc3RzIGZvciBWYWxpZGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24gYW5kIE11dGF0aW5nV2ViaG9va0NvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVXaXRoT3BlcmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTaWRlRWZmZWN0cyBzdGF0ZXMgd2hldGhlciB0aGlzIHdlYmhvb2trIGhhcyBzaWRlIGVmZmVjdHMuIEFjY2VwdGFibGUgdmFsdWVzIGFyZTogVW5rbm93biwgTm9uZSwgU29tZSwgTm9uZU9uRHJ5UnVuIFdlYmhvb2tzIHdpdGggc2lkZSBlZmZlY3RzIE1VU1QgaW1wbGVtZW50IGEgcmVjb25jaWxpYXRpb24gc3lzdGVtLCBzaW5jZSBhIHJlcXVlc3QgbWF5IGJlIHJlamVjdGVkIGJ5IGEgZnV0dXJlIHN0ZXAgaW4gdGhlIGFkbWlzc2lvbiBjaGFuZ2UgYW5kIHRoZSBzaWRlIGVmZmVjdHMgdGhlcmVmb3JlIG5lZWQgdG8gYmUgdW5kb25lLiBSZXF1ZXN0cyB3aXRoIHRoZSBkcnlSdW4gYXR0cmlidXRlIHdpbGwgYmUgYXV0by1yZWplY3RlZCBpZiB0aGV5IG1hdGNoIGEgd2ViaG9vayB3aXRoIHNpZGVFZmZlY3RzID09IFVua25vd24gb3IgU29tZS4gRGVmYXVsdHMgdG8gVW5rbm93bi5cbiAgICpcbiAgICogQGRlZmF1bHQgVW5rbm93bi5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlZhbGlkYXRpbmdXZWJob29rI3NpZGVFZmZlY3RzXG4gICAqL1xuICByZWFkb25seSBzaWRlRWZmZWN0cz86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dFNlY29uZHMgc3BlY2lmaWVzIHRoZSB0aW1lb3V0IGZvciB0aGlzIHdlYmhvb2suIEFmdGVyIHRoZSB0aW1lb3V0IHBhc3NlcywgdGhlIHdlYmhvb2sgY2FsbCB3aWxsIGJlIGlnbm9yZWQgb3IgdGhlIEFQSSBjYWxsIHdpbGwgZmFpbCBiYXNlZCBvbiB0aGUgZmFpbHVyZSBwb2xpY3kuIFRoZSB0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzMCBzZWNvbmRzLiBEZWZhdWx0IHRvIDMwIHNlY29uZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDMwIHNlY29uZHMuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5WYWxpZGF0aW5nV2ViaG9vayN0aW1lb3V0U2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dFNlY29uZHM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBSYXdFeHRlbnNpb24gaXMgdXNlZCB0byBob2xkIGV4dGVuc2lvbnMgaW4gZXh0ZXJuYWwgdmVyc2lvbnMuXG5cblRvIHVzZSB0aGlzLCBtYWtlIGEgZmllbGQgd2hpY2ggaGFzIFJhd0V4dGVuc2lvbiBhcyBpdHMgdHlwZSBpbiB5b3VyIGV4dGVybmFsLCB2ZXJzaW9uZWQgc3RydWN0LCBhbmQgT2JqZWN0IGluIHlvdXIgaW50ZXJuYWwgc3RydWN0LiBZb3UgYWxzbyBuZWVkIHRvIHJlZ2lzdGVyIHlvdXIgdmFyaW91cyBwbHVnaW4gdHlwZXMuXG5cbi8vIEludGVybmFsIHBhY2thZ2U6IHR5cGUgTXlBUElPYmplY3Qgc3RydWN0IHtcblx0cnVudGltZS5UeXBlTWV0YSBganNvbjpcIixpbmxpbmVcImBcblx0TXlQbHVnaW4gcnVudGltZS5PYmplY3QgYGpzb246XCJteVBsdWdpblwiYFxufSB0eXBlIFBsdWdpbkEgc3RydWN0IHtcblx0QU9wdGlvbiBzdHJpbmcgYGpzb246XCJhT3B0aW9uXCJgXG59XG5cbi8vIEV4dGVybmFsIHBhY2thZ2U6IHR5cGUgTXlBUElPYmplY3Qgc3RydWN0IHtcblx0cnVudGltZS5UeXBlTWV0YSBganNvbjpcIixpbmxpbmVcImBcblx0TXlQbHVnaW4gcnVudGltZS5SYXdFeHRlbnNpb24gYGpzb246XCJteVBsdWdpblwiYFxufSB0eXBlIFBsdWdpbkEgc3RydWN0IHtcblx0QU9wdGlvbiBzdHJpbmcgYGpzb246XCJhT3B0aW9uXCJgXG59XG5cbi8vIE9uIHRoZSB3aXJlLCB0aGUgSlNPTiB3aWxsIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoge1xuXHRcImtpbmRcIjpcIk15QVBJT2JqZWN0XCIsXG5cdFwiYXBpVmVyc2lvblwiOlwidjFcIixcblx0XCJteVBsdWdpblwiOiB7XG5cdFx0XCJraW5kXCI6XCJQbHVnaW5BXCIsXG5cdFx0XCJhT3B0aW9uXCI6XCJmb29cIixcblx0fSxcbn1cblxuU28gd2hhdCBoYXBwZW5zPyBEZWNvZGUgZmlyc3QgdXNlcyBqc29uIG9yIHlhbWwgdG8gdW5tYXJzaGFsIHRoZSBzZXJpYWxpemVkIGRhdGEgaW50byB5b3VyIGV4dGVybmFsIE15QVBJT2JqZWN0LiBUaGF0IGNhdXNlcyB0aGUgcmF3IEpTT04gdG8gYmUgc3RvcmVkLCBidXQgbm90IHVucGFja2VkLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGNvcHkgKHVzaW5nIHBrZy9jb252ZXJzaW9uKSBpbnRvIHRoZSBpbnRlcm5hbCBzdHJ1Y3QuIFRoZSBydW50aW1lIHBhY2thZ2UncyBEZWZhdWx0U2NoZW1lIGhhcyBjb252ZXJzaW9uIGZ1bmN0aW9ucyBpbnN0YWxsZWQgd2hpY2ggd2lsbCB1bnBhY2sgdGhlIEpTT04gc3RvcmVkIGluIFJhd0V4dGVuc2lvbiwgdHVybmluZyBpdCBpbnRvIHRoZSBjb3JyZWN0IG9iamVjdCB0eXBlLCBhbmQgc3RvcmluZyBpdCBpbiB0aGUgT2JqZWN0LiAoVE9ETzogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIG9iamVjdCBpcyBvZiBhbiB1bmtub3duIHR5cGUsIGEgcnVudGltZS5Vbmtub3duIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHN0b3JlZC4pXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5ydW50aW1lLlJhd0V4dGVuc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd0V4dGVuc2lvbiB7XG4gIC8qKlxuICAgKiBSYXcgaXMgdGhlIHVuZGVybHlpbmcgc2VyaWFsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5ydW50aW1lLlJhd0V4dGVuc2lvbiNSYXdcbiAgICovXG4gIHJlYWRvbmx5IHJhdz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIERhZW1vblNldFNwZWMgaXMgdGhlIHNwZWNpZmljYXRpb24gb2YgYSBkYWVtb24gc2V0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERhZW1vblNldFNwZWMge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgZm9yIHdoaWNoIGEgbmV3bHkgY3JlYXRlZCBEYWVtb25TZXQgcG9kIHNob3VsZCBiZSByZWFkeSB3aXRob3V0IGFueSBvZiBpdHMgY29udGFpbmVyIGNyYXNoaW5nLCBmb3IgaXQgdG8gYmUgY29uc2lkZXJlZCBhdmFpbGFibGUuIERlZmF1bHRzIHRvIDAgKHBvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYXZhaWxhYmxlIGFzIHNvb24gYXMgaXQgaXMgcmVhZHkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwIChwb2Qgd2lsbCBiZSBjb25zaWRlcmVkIGF2YWlsYWJsZSBhcyBzb29uIGFzIGl0IGlzIHJlYWR5KS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRTcGVjI21pblJlYWR5U2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWluUmVhZHlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG9sZCBoaXN0b3J5IHRvIHJldGFpbiB0byBhbGxvdyByb2xsYmFjay4gVGhpcyBpcyBhIHBvaW50ZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBsaWNpdCB6ZXJvIGFuZCBub3Qgc3BlY2lmaWVkLiBEZWZhdWx0cyB0byAxMC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0U3BlYyNyZXZpc2lvbkhpc3RvcnlMaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgcmV2aXNpb25IaXN0b3J5TGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgbGFiZWwgcXVlcnkgb3ZlciBwb2RzIHRoYXQgYXJlIG1hbmFnZWQgYnkgdGhlIGRhZW1vbiBzZXQuIE11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZC4gSWYgZW1wdHksIGRlZmF1bHRlZCB0byBsYWJlbHMgb24gUG9kIHRlbXBsYXRlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL2xhYmVscy8jbGFiZWwtc2VsZWN0b3JzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0U3BlYyNzZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0b3I/OiBMYWJlbFNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHBvZCB0aGF0IHdpbGwgYmUgY3JlYXRlZC4gVGhlIERhZW1vblNldCB3aWxsIGNyZWF0ZSBleGFjdGx5IG9uZSBjb3B5IG9mIHRoaXMgcG9kIG9uIGV2ZXJ5IG5vZGUgdGhhdCBtYXRjaGVzIHRoZSB0ZW1wbGF0ZSdzIG5vZGUgc2VsZWN0b3IgKG9yIG9uIGV2ZXJ5IG5vZGUgaWYgbm8gbm9kZSBzZWxlY3RvciBpcyBzcGVjaWZpZWQpLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9yZXBsaWNhdGlvbmNvbnRyb2xsZXIjcG9kLXRlbXBsYXRlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0U3BlYyN0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU6IFBvZFRlbXBsYXRlU3BlYztcblxuICAvKipcbiAgICogREVQUkVDQVRFRC4gQSBzZXF1ZW5jZSBudW1iZXIgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZ2VuZXJhdGlvbiBvZiB0aGUgdGVtcGxhdGUuIFBvcHVsYXRlZCBieSB0aGUgc3lzdGVtLiBJdCBjYW4gYmUgc2V0IG9ubHkgZHVyaW5nIHRoZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRTcGVjI3RlbXBsYXRlR2VuZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGVHZW5lcmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiB1cGRhdGUgc3RyYXRlZ3kgdG8gcmVwbGFjZSBleGlzdGluZyBEYWVtb25TZXQgcG9kcyB3aXRoIG5ldyBwb2RzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRhZW1vblNldFNwZWMjdXBkYXRlU3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZVN0cmF0ZWd5PzogRGFlbW9uU2V0VXBkYXRlU3RyYXRlZ3k7XG5cbn1cblxuLyoqXG4gKiBEZXBsb3ltZW50U3BlYyBpcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiB0aGUgRGVwbG95bWVudC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFNwZWMge1xuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBmb3Igd2hpY2ggYSBuZXdseSBjcmVhdGVkIHBvZCBzaG91bGQgYmUgcmVhZHkgd2l0aG91dCBhbnkgb2YgaXRzIGNvbnRhaW5lciBjcmFzaGluZywgZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYXZhaWxhYmxlLiBEZWZhdWx0cyB0byAwIChwb2Qgd2lsbCBiZSBjb25zaWRlcmVkIGF2YWlsYWJsZSBhcyBzb29uIGFzIGl0IGlzIHJlYWR5KVxuICAgKlxuICAgKiBAZGVmYXVsdCAwIChwb2Qgd2lsbCBiZSBjb25zaWRlcmVkIGF2YWlsYWJsZSBhcyBzb29uIGFzIGl0IGlzIHJlYWR5KVxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRTcGVjI21pblJlYWR5U2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWluUmVhZHlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZGVwbG95bWVudCBpcyBwYXVzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudFNwZWMjcGF1c2VkXG4gICAqL1xuICByZWFkb25seSBwYXVzZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgZm9yIGEgZGVwbG95bWVudCB0byBtYWtlIHByb2dyZXNzIGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGZhaWxlZC4gVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB3aWxsIGNvbnRpbnVlIHRvIHByb2Nlc3MgZmFpbGVkIGRlcGxveW1lbnRzIGFuZCBhIGNvbmRpdGlvbiB3aXRoIGEgUHJvZ3Jlc3NEZWFkbGluZUV4Y2VlZGVkIHJlYXNvbiB3aWxsIGJlIHN1cmZhY2VkIGluIHRoZSBkZXBsb3ltZW50IHN0YXR1cy4gTm90ZSB0aGF0IHByb2dyZXNzIHdpbGwgbm90IGJlIGVzdGltYXRlZCBkdXJpbmcgdGhlIHRpbWUgYSBkZXBsb3ltZW50IGlzIHBhdXNlZC4gRGVmYXVsdHMgdG8gNjAwcy5cbiAgICpcbiAgICogQGRlZmF1bHQgNjAwcy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50U3BlYyNwcm9ncmVzc0RlYWRsaW5lU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvZ3Jlc3NEZWFkbGluZVNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBkZXNpcmVkIHBvZHMuIFRoaXMgaXMgYSBwb2ludGVyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZXhwbGljaXQgemVybyBhbmQgbm90IHNwZWNpZmllZC4gRGVmYXVsdHMgdG8gMS5cbiAgICpcbiAgICogQGRlZmF1bHQgMS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5EZXBsb3ltZW50U3BlYyNyZXBsaWNhc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygb2xkIFJlcGxpY2FTZXRzIHRvIHJldGFpbiB0byBhbGxvdyByb2xsYmFjay4gVGhpcyBpcyBhIHBvaW50ZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBsaWNpdCB6ZXJvIGFuZCBub3Qgc3BlY2lmaWVkLiBEZWZhdWx0cyB0byAxMC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudFNwZWMjcmV2aXNpb25IaXN0b3J5TGltaXRcbiAgICovXG4gIHJlYWRvbmx5IHJldmlzaW9uSGlzdG9yeUxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBzZWxlY3RvciBmb3IgcG9kcy4gRXhpc3RpbmcgUmVwbGljYVNldHMgd2hvc2UgcG9kcyBhcmUgc2VsZWN0ZWQgYnkgdGhpcyB3aWxsIGJlIHRoZSBvbmVzIGFmZmVjdGVkIGJ5IHRoaXMgZGVwbG95bWVudC4gSXQgbXVzdCBtYXRjaCB0aGUgcG9kIHRlbXBsYXRlJ3MgbGFiZWxzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRTcGVjI3NlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBzZWxlY3RvcjogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogVGhlIGRlcGxveW1lbnQgc3RyYXRlZ3kgdG8gdXNlIHRvIHJlcGxhY2UgZXhpc3RpbmcgcG9kcyB3aXRoIG5ldyBvbmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRTcGVjI3N0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneT86IERlcGxveW1lbnRTdHJhdGVneTtcblxuICAvKipcbiAgICogVGVtcGxhdGUgZGVzY3JpYmVzIHRoZSBwb2RzIHRoYXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRTcGVjI3RlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZTogUG9kVGVtcGxhdGVTcGVjO1xuXG59XG5cbi8qKlxuICogUmVwbGljYVNldFNwZWMgaXMgdGhlIHNwZWNpZmljYXRpb24gb2YgYSBSZXBsaWNhU2V0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhU2V0U3BlYyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiBzZWNvbmRzIGZvciB3aGljaCBhIG5ld2x5IGNyZWF0ZWQgcG9kIHNob3VsZCBiZSByZWFkeSB3aXRob3V0IGFueSBvZiBpdHMgY29udGFpbmVyIGNyYXNoaW5nLCBmb3IgaXQgdG8gYmUgY29uc2lkZXJlZCBhdmFpbGFibGUuIERlZmF1bHRzIHRvIDAgKHBvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYXZhaWxhYmxlIGFzIHNvb24gYXMgaXQgaXMgcmVhZHkpXG4gICAqXG4gICAqIEBkZWZhdWx0IDAgKHBvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYXZhaWxhYmxlIGFzIHNvb24gYXMgaXQgaXMgcmVhZHkpXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldFNwZWMjbWluUmVhZHlTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBtaW5SZWFkeVNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlcGxpY2FzIGlzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCByZXBsaWNhcy4gVGhpcyBpcyBhIHBvaW50ZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBsaWNpdCB6ZXJvIGFuZCB1bnNwZWNpZmllZC4gRGVmYXVsdHMgdG8gMS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvY29udHJvbGxlcnMvcmVwbGljYXRpb25jb250cm9sbGVyLyN3aGF0LWlzLWEtcmVwbGljYXRpb25jb250cm9sbGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IDEuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL2NvbnRyb2xsZXJzL3JlcGxpY2F0aW9uY29udHJvbGxlci8jd2hhdC1pcy1hLXJlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRTcGVjI3JlcGxpY2FzXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogU2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHBvZHMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHJlcGxpY2EgY291bnQuIElmIHRoZSBzZWxlY3RvciBpcyBlbXB0eSwgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBsYWJlbHMgcHJlc2VudCBvbiB0aGUgcG9kIHRlbXBsYXRlLiBMYWJlbCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBtdXN0IG1hdGNoIGluIG9yZGVyIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhpcyByZXBsaWNhIHNldC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9sYWJlbHMvI2xhYmVsLXNlbGVjdG9yc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJlcGxpY2FTZXRTcGVjI3NlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rvcj86IExhYmVsU2VsZWN0b3I7XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIGlzIHRoZSBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHBvZCB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpZiBpbnN1ZmZpY2llbnQgcmVwbGljYXMgYXJlIGRldGVjdGVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9yZXBsaWNhdGlvbmNvbnRyb2xsZXIjcG9kLXRlbXBsYXRlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUmVwbGljYVNldFNwZWMjdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogUG9kVGVtcGxhdGVTcGVjO1xuXG59XG5cbi8qKlxuICogQSBTdGF0ZWZ1bFNldFNwZWMgaXMgdGhlIHNwZWNpZmljYXRpb24gb2YgYSBTdGF0ZWZ1bFNldC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlZnVsU2V0U3BlYyB7XG4gIC8qKlxuICAgKiBwb2RNYW5hZ2VtZW50UG9saWN5IGNvbnRyb2xzIGhvdyBwb2RzIGFyZSBjcmVhdGVkIGR1cmluZyBpbml0aWFsIHNjYWxlIHVwLCB3aGVuIHJlcGxhY2luZyBwb2RzIG9uIG5vZGVzLCBvciB3aGVuIHNjYWxpbmcgZG93bi4gVGhlIGRlZmF1bHQgcG9saWN5IGlzIGBPcmRlcmVkUmVhZHlgLCB3aGVyZSBwb2RzIGFyZSBjcmVhdGVkIGluIGluY3JlYXNpbmcgb3JkZXIgKHBvZC0wLCB0aGVuIHBvZC0xLCBldGMpIGFuZCB0aGUgY29udHJvbGxlciB3aWxsIHdhaXQgdW50aWwgZWFjaCBwb2QgaXMgcmVhZHkgYmVmb3JlIGNvbnRpbnVpbmcuIFdoZW4gc2NhbGluZyBkb3duLCB0aGUgcG9kcyBhcmUgcmVtb3ZlZCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuIFRoZSBhbHRlcm5hdGl2ZSBwb2xpY3kgaXMgYFBhcmFsbGVsYCB3aGljaCB3aWxsIGNyZWF0ZSBwb2RzIGluIHBhcmFsbGVsIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHNjYWxlIHdpdGhvdXQgd2FpdGluZywgYW5kIG9uIHNjYWxlIGRvd24gd2lsbCBkZWxldGUgYWxsIHBvZHMgYXQgb25jZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFNwZWMjcG9kTWFuYWdlbWVudFBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgcG9kTWFuYWdlbWVudFBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogcmVwbGljYXMgaXMgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHJlcGxpY2FzIG9mIHRoZSBnaXZlbiBUZW1wbGF0ZS4gVGhlc2UgYXJlIHJlcGxpY2FzIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgYXJlIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzYW1lIFRlbXBsYXRlLCBidXQgaW5kaXZpZHVhbCByZXBsaWNhcyBhbHNvIGhhdmUgYSBjb25zaXN0ZW50IGlkZW50aXR5LiBJZiB1bnNwZWNpZmllZCwgZGVmYXVsdHMgdG8gMS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFNwZWMjcmVwbGljYXNcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiByZXZpc2lvbkhpc3RvcnlMaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV2aXNpb25zIHRoYXQgd2lsbCBiZSBtYWludGFpbmVkIGluIHRoZSBTdGF0ZWZ1bFNldCdzIHJldmlzaW9uIGhpc3RvcnkuIFRoZSByZXZpc2lvbiBoaXN0b3J5IGNvbnNpc3RzIG9mIGFsbCByZXZpc2lvbnMgbm90IHJlcHJlc2VudGVkIGJ5IGEgY3VycmVudGx5IGFwcGxpZWQgU3RhdGVmdWxTZXRTcGVjIHZlcnNpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0U3BlYyNyZXZpc2lvbkhpc3RvcnlMaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgcmV2aXNpb25IaXN0b3J5TGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHNlbGVjdG9yIGlzIGEgbGFiZWwgcXVlcnkgb3ZlciBwb2RzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSByZXBsaWNhIGNvdW50LiBJdCBtdXN0IG1hdGNoIHRoZSBwb2QgdGVtcGxhdGUncyBsYWJlbHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbGFiZWxzLyNsYWJlbC1zZWxlY3RvcnNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFNwZWMjc2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdG9yOiBMYWJlbFNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBzZXJ2aWNlTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSB0aGF0IGdvdmVybnMgdGhpcyBTdGF0ZWZ1bFNldC4gVGhpcyBzZXJ2aWNlIG11c3QgZXhpc3QgYmVmb3JlIHRoZSBTdGF0ZWZ1bFNldCwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgbmV0d29yayBpZGVudGl0eSBvZiB0aGUgc2V0LiBQb2RzIGdldCBETlMvaG9zdG5hbWVzIHRoYXQgZm9sbG93IHRoZSBwYXR0ZXJuOiBwb2Qtc3BlY2lmaWMtc3RyaW5nLnNlcnZpY2VOYW1lLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwgd2hlcmUgXCJwb2Qtc3BlY2lmaWMtc3RyaW5nXCIgaXMgbWFuYWdlZCBieSB0aGUgU3RhdGVmdWxTZXQgY29udHJvbGxlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5TdGF0ZWZ1bFNldFNwZWMjc2VydmljZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlbXBsYXRlIGlzIHRoZSBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHBvZCB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpZiBpbnN1ZmZpY2llbnQgcmVwbGljYXMgYXJlIGRldGVjdGVkLiBFYWNoIHBvZCBzdGFtcGVkIG91dCBieSB0aGUgU3RhdGVmdWxTZXQgd2lsbCBmdWxmaWxsIHRoaXMgVGVtcGxhdGUsIGJ1dCBoYXZlIGEgdW5pcXVlIGlkZW50aXR5IGZyb20gdGhlIHJlc3Qgb2YgdGhlIFN0YXRlZnVsU2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0U3BlYyN0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU6IFBvZFRlbXBsYXRlU3BlYztcblxuICAvKipcbiAgICogdXBkYXRlU3RyYXRlZ3kgaW5kaWNhdGVzIHRoZSBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5IHRoYXQgd2lsbCBiZSBlbXBsb3llZCB0byB1cGRhdGUgUG9kcyBpbiB0aGUgU3RhdGVmdWxTZXQgd2hlbiBhIHJldmlzaW9uIGlzIG1hZGUgdG8gVGVtcGxhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRTcGVjI3VwZGF0ZVN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSB1cGRhdGVTdHJhdGVneT86IFN0YXRlZnVsU2V0VXBkYXRlU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIHZvbHVtZUNsYWltVGVtcGxhdGVzIGlzIGEgbGlzdCBvZiBjbGFpbXMgdGhhdCBwb2RzIGFyZSBhbGxvd2VkIHRvIHJlZmVyZW5jZS4gVGhlIFN0YXRlZnVsU2V0IGNvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgbmV0d29yayBpZGVudGl0aWVzIHRvIGNsYWltcyBpbiBhIHdheSB0aGF0IG1haW50YWlucyB0aGUgaWRlbnRpdHkgb2YgYSBwb2QuIEV2ZXJ5IGNsYWltIGluIHRoaXMgbGlzdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIChieSBuYW1lKSB2b2x1bWVNb3VudCBpbiBvbmUgY29udGFpbmVyIGluIHRoZSB0ZW1wbGF0ZS4gQSBjbGFpbSBpbiB0aGlzIGxpc3QgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueSB2b2x1bWVzIGluIHRoZSB0ZW1wbGF0ZSwgd2l0aCB0aGUgc2FtZSBuYW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0U3BlYyN2b2x1bWVDbGFpbVRlbXBsYXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lQ2xhaW1UZW1wbGF0ZXM/OiBLdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHNbXTtcblxufVxuXG4vKipcbiAqIFNjYWxlU3BlYyBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBzY2FsZSBzdWJyZXNvdXJjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjEuU2NhbGVTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGVTcGVjIHtcbiAgLyoqXG4gICAqIGRlc2lyZWQgbnVtYmVyIG9mIGluc3RhbmNlcyBmb3IgdGhlIHNjYWxlZCBvYmplY3QuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MS5TY2FsZVNwZWMjcmVwbGljYXNcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FzPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQXVkaXRTaW5rU3BlYyBob2xkcyB0aGUgc3BlYyBmb3IgdGhlIGF1ZGl0IHNpbmtcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuQXVkaXRTaW5rU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0U2lua1NwZWMge1xuICAvKipcbiAgICogUG9saWN5IGRlZmluZXMgdGhlIHBvbGljeSBmb3Igc2VsZWN0aW5nIHdoaWNoIGV2ZW50cyBzaG91bGQgYmUgc2VudCB0byB0aGUgd2ViaG9vayByZXF1aXJlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuQXVkaXRTaW5rU3BlYyNwb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeTogUG9saWN5O1xuXG4gIC8qKlxuICAgKiBXZWJob29rIHRvIHNlbmQgZXZlbnRzIHJlcXVpcmVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdWRpdHJlZ2lzdHJhdGlvbi52MWFscGhhMS5BdWRpdFNpbmtTcGVjI3dlYmhvb2tcbiAgICovXG4gIHJlYWRvbmx5IHdlYmhvb2s6IFdlYmhvb2s7XG5cbn1cblxuLyoqXG4gKiBUb2tlblJldmlld1NwZWMgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdG9rZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aGVudGljYXRpb24udjFiZXRhMS5Ub2tlblJldmlld1NwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlblJldmlld1NwZWMge1xuICAvKipcbiAgICogQXVkaWVuY2VzIGlzIGEgbGlzdCBvZiB0aGUgaWRlbnRpZmllcnMgdGhhdCB0aGUgcmVzb3VyY2Ugc2VydmVyIHByZXNlbnRlZCB3aXRoIHRoZSB0b2tlbiBpZGVudGlmaWVzIGFzLiBBdWRpZW5jZS1hd2FyZSB0b2tlbiBhdXRoZW50aWNhdG9ycyB3aWxsIHZlcmlmeSB0aGF0IHRoZSB0b2tlbiB3YXMgaW50ZW5kZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgYXVkaWVuY2VzIGluIHRoaXMgbGlzdC4gSWYgbm8gYXVkaWVuY2VzIGFyZSBwcm92aWRlZCwgdGhlIGF1ZGllbmNlIHdpbGwgZGVmYXVsdCB0byB0aGUgYXVkaWVuY2Ugb2YgdGhlIEt1YmVybmV0ZXMgYXBpc2VydmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aGVudGljYXRpb24udjFiZXRhMS5Ub2tlblJldmlld1NwZWMjYXVkaWVuY2VzXG4gICAqL1xuICByZWFkb25seSBhdWRpZW5jZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVG9rZW4gaXMgdGhlIG9wYXF1ZSBiZWFyZXIgdG9rZW4uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRoZW50aWNhdGlvbi52MWJldGExLlRva2VuUmV2aWV3U3BlYyN0b2tlblxuICAgKi9cbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhY2Nlc3MgcmVxdWVzdC4gIEV4YWN0bHkgb25lIG9mIFJlc291cmNlQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXMgYW5kIE5vblJlc291cmNlQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXMgbXVzdCBiZSBzZXRcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlN1YmplY3RBY2Nlc3NSZXZpZXdTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViamVjdEFjY2Vzc1Jldmlld1NwZWMge1xuICAvKipcbiAgICogRXh0cmEgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXIuSW5mby5HZXRFeHRyYSgpIG1ldGhvZCBmcm9tIHRoZSBhdXRoZW50aWNhdG9yLiAgU2luY2UgdGhhdCBpcyBpbnB1dCB0byB0aGUgYXV0aG9yaXplciBpdCBuZWVkcyBhIHJlZmxlY3Rpb24gaGVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyNleHRyYVxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmE/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBpcyB0aGUgZ3JvdXBzIHlvdSdyZSB0ZXN0aW5nIGZvci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTm9uUmVzb3VyY2VBdHRyaWJ1dGVzIGRlc2NyaWJlcyBpbmZvcm1hdGlvbiBmb3IgYSBub24tcmVzb3VyY2UgYWNjZXNzIHJlcXVlc3RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyNub25SZXNvdXJjZUF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG5vblJlc291cmNlQXR0cmlidXRlcz86IE5vblJlc291cmNlQXR0cmlidXRlcztcblxuICAvKipcbiAgICogUmVzb3VyY2VBdXRob3JpemF0aW9uQXR0cmlidXRlcyBkZXNjcmliZXMgaW5mb3JtYXRpb24gZm9yIGEgcmVzb3VyY2UgYWNjZXNzIHJlcXVlc3RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyNyZXNvdXJjZUF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlQXR0cmlidXRlcz86IFJlc291cmNlQXR0cmlidXRlcztcblxuICAvKipcbiAgICogVUlEIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0aW5nIHVzZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU3ViamVjdEFjY2Vzc1Jldmlld1NwZWMjdWlkXG4gICAqL1xuICByZWFkb25seSB1aWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgaXMgdGhlIHVzZXIgeW91J3JlIHRlc3RpbmcgZm9yLiBJZiB5b3Ugc3BlY2lmeSBcIlVzZXJcIiBidXQgbm90IFwiR3JvdXBcIiwgdGhlbiBpcyBpdCBpbnRlcnByZXRlZCBhcyBcIldoYXQgaWYgVXNlciB3ZXJlIG5vdCBhIG1lbWJlciBvZiBhbnkgZ3JvdXBzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU3ViamVjdEFjY2Vzc1Jldmlld1NwZWMjdXNlclxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhY2Nlc3MgcmVxdWVzdC4gIEV4YWN0bHkgb25lIG9mIFJlc291cmNlQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXMgYW5kIE5vblJlc291cmNlQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXMgbXVzdCBiZSBzZXRcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyB7XG4gIC8qKlxuICAgKiBOb25SZXNvdXJjZUF0dHJpYnV0ZXMgZGVzY3JpYmVzIGluZm9ybWF0aW9uIGZvciBhIG5vbi1yZXNvdXJjZSBhY2Nlc3MgcmVxdWVzdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlNlbGZTdWJqZWN0QWNjZXNzUmV2aWV3U3BlYyNub25SZXNvdXJjZUF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG5vblJlc291cmNlQXR0cmlidXRlcz86IE5vblJlc291cmNlQXR0cmlidXRlcztcblxuICAvKipcbiAgICogUmVzb3VyY2VBdXRob3JpemF0aW9uQXR0cmlidXRlcyBkZXNjcmliZXMgaW5mb3JtYXRpb24gZm9yIGEgcmVzb3VyY2UgYWNjZXNzIHJlcXVlc3RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5TZWxmU3ViamVjdEFjY2Vzc1Jldmlld1NwZWMjcmVzb3VyY2VBdHRyaWJ1dGVzXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUF0dHJpYnV0ZXM/OiBSZXNvdXJjZUF0dHJpYnV0ZXM7XG5cbn1cblxuLyoqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlNlbGZTdWJqZWN0UnVsZXNSZXZpZXdTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZlN1YmplY3RSdWxlc1Jldmlld1NwZWMge1xuICAvKipcbiAgICogTmFtZXNwYWNlIHRvIGV2YWx1YXRlIHJ1bGVzIGZvci4gUmVxdWlyZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuU2VsZlN1YmplY3RSdWxlc1Jldmlld1NwZWMjbmFtZXNwYWNlXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBIb3Jpem9udGFsUG9kQXV0b3NjYWxlclNwZWMgZGVzY3JpYmVzIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEhvcml6b250YWxQb2RBdXRvc2NhbGVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxQb2RBdXRvc2NhbGVyU3BlYyB7XG4gIC8qKlxuICAgKiBtYXhSZXBsaWNhcyBpcyB0aGUgdXBwZXIgbGltaXQgZm9yIHRoZSBudW1iZXIgb2YgcmVwbGljYXMgdG8gd2hpY2ggdGhlIGF1dG9zY2FsZXIgY2FuIHNjYWxlIHVwLiBJdCBjYW5ub3QgYmUgbGVzcyB0aGF0IG1pblJlcGxpY2FzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclNwZWMjbWF4UmVwbGljYXNcbiAgICovXG4gIHJlYWRvbmx5IG1heFJlcGxpY2FzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIG1ldHJpY3MgY29udGFpbnMgdGhlIHNwZWNpZmljYXRpb25zIGZvciB3aGljaCB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBkZXNpcmVkIHJlcGxpY2EgY291bnQgKHRoZSBtYXhpbXVtIHJlcGxpY2EgY291bnQgYWNyb3NzIGFsbCBtZXRyaWNzIHdpbGwgYmUgdXNlZCkuICBUaGUgZGVzaXJlZCByZXBsaWNhIGNvdW50IGlzIGNhbGN1bGF0ZWQgbXVsdGlwbHlpbmcgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHRhcmdldCB2YWx1ZSBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgYnkgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHBvZHMuICBFcmdvLCBtZXRyaWNzIHVzZWQgbXVzdCBkZWNyZWFzZSBhcyB0aGUgcG9kIGNvdW50IGlzIGluY3JlYXNlZCwgYW5kIHZpY2UtdmVyc2EuICBTZWUgdGhlIGluZGl2aWR1YWwgbWV0cmljIHNvdXJjZSB0eXBlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgZWFjaCB0eXBlIG9mIG1ldHJpYyBtdXN0IHJlc3BvbmQuIElmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG1ldHJpYyB3aWxsIGJlIHNldCB0byA4MCUgYXZlcmFnZSBDUFUgdXRpbGl6YXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyU3BlYyNtZXRyaWNzXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzPzogTWV0cmljU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBtaW5SZXBsaWNhcyBpcyB0aGUgbG93ZXIgbGltaXQgZm9yIHRoZSBudW1iZXIgb2YgcmVwbGljYXMgdG8gd2hpY2ggdGhlIGF1dG9zY2FsZXIgY2FuIHNjYWxlIGRvd24uIEl0IGRlZmF1bHRzIHRvIDEgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlclNwZWMjbWluUmVwbGljYXNcbiAgICovXG4gIHJlYWRvbmx5IG1pblJlcGxpY2FzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBzY2FsZVRhcmdldFJlZiBwb2ludHMgdG8gdGhlIHRhcmdldCByZXNvdXJjZSB0byBzY2FsZSwgYW5kIGlzIHVzZWQgdG8gdGhlIHBvZHMgZm9yIHdoaWNoIG1ldHJpY3Mgc2hvdWxkIGJlIGNvbGxlY3RlZCwgYXMgd2VsbCBhcyB0byBhY3R1YWxseSBjaGFuZ2UgdGhlIHJlcGxpY2EgY291bnQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkhvcml6b250YWxQb2RBdXRvc2NhbGVyU3BlYyNzY2FsZVRhcmdldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVUYXJnZXRSZWY6IENyb3NzVmVyc2lvbk9iamVjdFJlZmVyZW5jZTtcblxufVxuXG4vKipcbiAqIEpvYlNwZWMgZGVzY3JpYmVzIGhvdyB0aGUgam9iIGV4ZWN1dGlvbiB3aWxsIGxvb2sgbGlrZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlNwZWMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBzdGFydFRpbWUgdGhhdCB0aGUgam9iIG1heSBiZSBhY3RpdmUgYmVmb3JlIHRoZSBzeXN0ZW0gdHJpZXMgdG8gdGVybWluYXRlIGl0OyB2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxLkpvYlNwZWMjYWN0aXZlRGVhZGxpbmVTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVEZWFkbGluZVNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgYmVmb3JlIG1hcmtpbmcgdGhpcyBqb2IgZmFpbGVkLiBEZWZhdWx0cyB0byA2XG4gICAqXG4gICAqIEBkZWZhdWx0IDZcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxLkpvYlNwZWMjYmFja29mZkxpbWl0XG4gICAqL1xuICByZWFkb25seSBiYWNrb2ZmTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGVzaXJlZCBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkIHBvZHMgdGhlIGpvYiBzaG91bGQgYmUgcnVuIHdpdGguICBTZXR0aW5nIHRvIG5pbCBtZWFucyB0aGF0IHRoZSBzdWNjZXNzIG9mIGFueSBwb2Qgc2lnbmFscyB0aGUgc3VjY2VzcyBvZiBhbGwgcG9kcywgYW5kIGFsbG93cyBwYXJhbGxlbGlzbSB0byBoYXZlIGFueSBwb3NpdGl2ZSB2YWx1ZS4gIFNldHRpbmcgdG8gMSBtZWFucyB0aGF0IHBhcmFsbGVsaXNtIGlzIGxpbWl0ZWQgdG8gMSBhbmQgdGhlIHN1Y2Nlc3Mgb2YgdGhhdCBwb2Qgc2lnbmFscyB0aGUgc3VjY2VzcyBvZiB0aGUgam9iLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9qb2JzLXJ1bi10by1jb21wbGV0aW9uL1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iU3BlYyNjb21wbGV0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgY29tcGxldGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIG1hbnVhbFNlbGVjdG9yIGNvbnRyb2xzIGdlbmVyYXRpb24gb2YgcG9kIGxhYmVscyBhbmQgcG9kIHNlbGVjdG9ycy4gTGVhdmUgYG1hbnVhbFNlbGVjdG9yYCB1bnNldCB1bmxlc3MgeW91IGFyZSBjZXJ0YWluIHdoYXQgeW91IGFyZSBkb2luZy4gV2hlbiBmYWxzZSBvciB1bnNldCwgdGhlIHN5c3RlbSBwaWNrIGxhYmVscyB1bmlxdWUgdG8gdGhpcyBqb2IgYW5kIGFwcGVuZHMgdGhvc2UgbGFiZWxzIHRvIHRoZSBwb2QgdGVtcGxhdGUuICBXaGVuIHRydWUsIHRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBwaWNraW5nIHVuaXF1ZSBsYWJlbHMgYW5kIHNwZWNpZnlpbmcgdGhlIHNlbGVjdG9yLiAgRmFpbHVyZSB0byBwaWNrIGEgdW5pcXVlIGxhYmVsIG1heSBjYXVzZSB0aGlzIGFuZCBvdGhlciBqb2JzIHRvIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkuICBIb3dldmVyLCBZb3UgbWF5IHNlZSBgbWFudWFsU2VsZWN0b3I9dHJ1ZWAgaW4gam9icyB0aGF0IHdlcmUgY3JlYXRlZCB3aXRoIHRoZSBvbGQgYGV4dGVuc2lvbnMvdjFiZXRhMWAgQVBJLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9qb2JzLXJ1bi10by1jb21wbGV0aW9uLyNzcGVjaWZ5aW5nLXlvdXItb3duLXBvZC1zZWxlY3RvclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iU3BlYyNtYW51YWxTZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgbWFudWFsU2VsZWN0b3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gZGVzaXJlZCBudW1iZXIgb2YgcG9kcyB0aGUgam9iIHNob3VsZCBydW4gYXQgYW55IGdpdmVuIHRpbWUuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHBvZHMgcnVubmluZyBpbiBzdGVhZHkgc3RhdGUgd2lsbCBiZSBsZXNzIHRoYW4gdGhpcyBudW1iZXIgd2hlbiAoKC5zcGVjLmNvbXBsZXRpb25zIC0gLnN0YXR1cy5zdWNjZXNzZnVsKSA8IC5zcGVjLnBhcmFsbGVsaXNtKSwgaS5lLiB3aGVuIHRoZSB3b3JrIGxlZnQgdG8gZG8gaXMgbGVzcyB0aGFuIG1heCBwYXJhbGxlbGlzbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvY29udHJvbGxlcnMvam9icy1ydW4tdG8tY29tcGxldGlvbi9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxLkpvYlNwZWMjcGFyYWxsZWxpc21cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGxhYmVsIHF1ZXJ5IG92ZXIgcG9kcyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgcG9kIGNvdW50LiBOb3JtYWxseSwgdGhlIHN5c3RlbSBzZXRzIHRoaXMgZmllbGQgZm9yIHlvdS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9sYWJlbHMvI2xhYmVsLXNlbGVjdG9yc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjEuSm9iU3BlYyNzZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0b3I/OiBMYWJlbFNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHBvZCB0aGF0IHdpbGwgYmUgY3JlYXRlZCB3aGVuIGV4ZWN1dGluZyBhIGpvYi4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvY29udHJvbGxlcnMvam9icy1ydW4tdG8tY29tcGxldGlvbi9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxLkpvYlNwZWMjdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlOiBQb2RUZW1wbGF0ZVNwZWM7XG5cbiAgLyoqXG4gICAqIHR0bFNlY29uZHNBZnRlckZpbmlzaGVkIGxpbWl0cyB0aGUgbGlmZXRpbWUgb2YgYSBKb2IgdGhhdCBoYXMgZmluaXNoZWQgZXhlY3V0aW9uIChlaXRoZXIgQ29tcGxldGUgb3IgRmFpbGVkKS4gSWYgdGhpcyBmaWVsZCBpcyBzZXQsIHR0bFNlY29uZHNBZnRlckZpbmlzaGVkIGFmdGVyIHRoZSBKb2IgZmluaXNoZXMsIGl0IGlzIGVsaWdpYmxlIHRvIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4gV2hlbiB0aGUgSm9iIGlzIGJlaW5nIGRlbGV0ZWQsIGl0cyBsaWZlY3ljbGUgZ3VhcmFudGVlcyAoZS5nLiBmaW5hbGl6ZXJzKSB3aWxsIGJlIGhvbm9yZWQuIElmIHRoaXMgZmllbGQgaXMgdW5zZXQsIHRoZSBKb2Igd29uJ3QgYmUgYXV0b21hdGljYWxseSBkZWxldGVkLiBJZiB0aGlzIGZpZWxkIGlzIHNldCB0byB6ZXJvLCB0aGUgSm9iIGJlY29tZXMgZWxpZ2libGUgdG8gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBhZnRlciBpdCBmaW5pc2hlcy4gVGhpcyBmaWVsZCBpcyBhbHBoYS1sZXZlbCBhbmQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIFRUTEFmdGVyRmluaXNoZWQgZmVhdHVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYxLkpvYlNwZWMjdHRsU2Vjb25kc0FmdGVyRmluaXNoZWRcbiAgICovXG4gIHJlYWRvbmx5IHR0bFNlY29uZHNBZnRlckZpbmlzaGVkPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQ3JvbkpvYlNwZWMgZGVzY3JpYmVzIGhvdyB0aGUgam9iIGV4ZWN1dGlvbiB3aWxsIGxvb2sgbGlrZSBhbmQgd2hlbiBpdCB3aWxsIGFjdHVhbGx5IHJ1bi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcm9uSm9iU3BlYyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRvIHRyZWF0IGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBvZiBhIEpvYi4gVmFsaWQgdmFsdWVzIGFyZTogLSBcIkFsbG93XCIgKGRlZmF1bHQpOiBhbGxvd3MgQ3JvbkpvYnMgdG8gcnVuIGNvbmN1cnJlbnRseTsgLSBcIkZvcmJpZFwiOiBmb3JiaWRzIGNvbmN1cnJlbnQgcnVucywgc2tpcHBpbmcgbmV4dCBydW4gaWYgcHJldmlvdXMgcnVuIGhhc24ndCBmaW5pc2hlZCB5ZXQ7IC0gXCJSZXBsYWNlXCI6IGNhbmNlbHMgY3VycmVudGx5IHJ1bm5pbmcgam9iIGFuZCByZXBsYWNlcyBpdCB3aXRoIGEgbmV3IG9uZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlNwZWMjY29uY3VycmVuY3lQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5UG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZhaWxlZCBmaW5pc2hlZCBqb2JzIHRvIHJldGFpbi4gVGhpcyBpcyBhIHBvaW50ZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBsaWNpdCB6ZXJvIGFuZCBub3Qgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlNwZWMjZmFpbGVkSm9ic0hpc3RvcnlMaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbGVkSm9ic0hpc3RvcnlMaW1pdD86IG51bWJlcjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBqb2IgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBleGVjdXRpbmcgYSBDcm9uSm9iLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuQ3JvbkpvYlNwZWMjam9iVGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IGpvYlRlbXBsYXRlOiBKb2JUZW1wbGF0ZVNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSBzY2hlZHVsZSBpbiBDcm9uIGZvcm1hdCwgc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nyb24uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iU3BlYyNzY2hlZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVhZGxpbmUgaW4gc2Vjb25kcyBmb3Igc3RhcnRpbmcgdGhlIGpvYiBpZiBpdCBtaXNzZXMgc2NoZWR1bGVkIHRpbWUgZm9yIGFueSByZWFzb24uICBNaXNzZWQgam9icyBleGVjdXRpb25zIHdpbGwgYmUgY291bnRlZCBhcyBmYWlsZWQgb25lcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmJhdGNoLnYyYWxwaGExLkNyb25Kb2JTcGVjI3N0YXJ0aW5nRGVhZGxpbmVTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBzdGFydGluZ0RlYWRsaW5lU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIGZpbmlzaGVkIGpvYnMgdG8gcmV0YWluLiBUaGlzIGlzIGEgcG9pbnRlciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGV4cGxpY2l0IHplcm8gYW5kIG5vdCBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iU3BlYyNzdWNjZXNzZnVsSm9ic0hpc3RvcnlMaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgc3VjY2Vzc2Z1bEpvYnNIaXN0b3J5TGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmxhZyB0ZWxscyB0aGUgY29udHJvbGxlciB0byBzdXNwZW5kIHN1YnNlcXVlbnQgZXhlY3V0aW9ucywgaXQgZG9lcyBub3QgYXBwbHkgdG8gYWxyZWFkeSBzdGFydGVkIGV4ZWN1dGlvbnMuICBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Dcm9uSm9iU3BlYyNzdXNwZW5kXG4gICAqL1xuICByZWFkb25seSBzdXNwZW5kPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIFRoaXMgaW5mb3JtYXRpb24gaXMgaW1tdXRhYmxlIGFmdGVyIHRoZSByZXF1ZXN0IGlzIGNyZWF0ZWQuIE9ubHkgdGhlIFJlcXVlc3QgYW5kIFVzYWdlcyBmaWVsZHMgY2FuIGJlIHNldCBvbiBjcmVhdGlvbiwgb3RoZXIgZmllbGRzIGFyZSBkZXJpdmVkIGJ5IEt1YmVybmV0ZXMgYW5kIGNhbm5vdCBiZSBtb2RpZmllZCBieSB1c2Vycy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY2VydGlmaWNhdGVzLnYxYmV0YTEuQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0U3BlYyB7XG4gIC8qKlxuICAgKiBFeHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdGluZyB1c2VyLiBTZWUgdXNlci5JbmZvIGludGVyZmFjZSBmb3IgZGV0YWlscy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNlcnRpZmljYXRlcy52MWJldGExLkNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RTcGVjI2V4dHJhXG4gICAqL1xuICByZWFkb25seSBleHRyYT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfTtcblxuICAvKipcbiAgICogR3JvdXAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3RpbmcgdXNlci4gU2VlIHVzZXIuSW5mbyBpbnRlcmZhY2UgZm9yIGRldGFpbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0U3BlYyNncm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBCYXNlNjQtZW5jb2RlZCBQS0NTIzEwIENTUiBkYXRhXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0U3BlYyNyZXF1ZXN0XG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVJRCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdGluZyB1c2VyLiBTZWUgdXNlci5JbmZvIGludGVyZmFjZSBmb3IgZGV0YWlscy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNlcnRpZmljYXRlcy52MWJldGExLkNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RTcGVjI3VpZFxuICAgKi9cbiAgcmVhZG9ubHkgdWlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhbGxvd2VkVXNhZ2VzIHNwZWNpZmllcyBhIHNldCBvZiB1c2FnZSBjb250ZXh0cyB0aGUga2V5IHdpbGwgYmUgdmFsaWQgZm9yLiBTZWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjgwI3NlY3Rpb24tNC4yLjEuM1xuICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTI4MCNzZWN0aW9uLTQuMi4xLjEyXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jZXJ0aWZpY2F0ZXMudjFiZXRhMS5DZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0U3BlYyN1c2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IHVzYWdlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdGluZyB1c2VyLiBTZWUgdXNlci5JbmZvIGludGVyZmFjZSBmb3IgZGV0YWlscy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNlcnRpZmljYXRlcy52MWJldGExLkNlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3RTcGVjI3VzZXJuYW1lXG4gICAqL1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIExlYXNlU3BlYyBpcyBhIHNwZWNpZmljYXRpb24gb2YgYSBMZWFzZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29vcmRpbmF0aW9uLnYxYmV0YTEuTGVhc2VTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVhc2VTcGVjIHtcbiAgLyoqXG4gICAqIGFjcXVpcmVUaW1lIGlzIGEgdGltZSB3aGVuIHRoZSBjdXJyZW50IGxlYXNlIHdhcyBhY3F1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlU3BlYyNhY3F1aXJlVGltZVxuICAgKi9cbiAgcmVhZG9ubHkgYWNxdWlyZVRpbWU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBob2xkZXJJZGVudGl0eSBjb250YWlucyB0aGUgaWRlbnRpdHkgb2YgdGhlIGhvbGRlciBvZiBhIGN1cnJlbnQgbGVhc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb29yZGluYXRpb24udjFiZXRhMS5MZWFzZVNwZWMjaG9sZGVySWRlbnRpdHlcbiAgICovXG4gIHJlYWRvbmx5IGhvbGRlcklkZW50aXR5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBsZWFzZUR1cmF0aW9uU2Vjb25kcyBpcyBhIGR1cmF0aW9uIHRoYXQgY2FuZGlkYXRlcyBmb3IgYSBsZWFzZSBuZWVkIHRvIHdhaXQgdG8gZm9yY2UgYWNxdWlyZSBpdC4gVGhpcyBpcyBtZWFzdXJlIGFnYWluc3QgdGltZSBvZiBsYXN0IG9ic2VydmVkIFJlbmV3VGltZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlU3BlYyNsZWFzZUR1cmF0aW9uU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbGVhc2VEdXJhdGlvblNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIGxlYXNlVHJhbnNpdGlvbnMgaXMgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBvZiBhIGxlYXNlIGJldHdlZW4gaG9sZGVycy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvb3JkaW5hdGlvbi52MWJldGExLkxlYXNlU3BlYyNsZWFzZVRyYW5zaXRpb25zXG4gICAqL1xuICByZWFkb25seSBsZWFzZVRyYW5zaXRpb25zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiByZW5ld1RpbWUgaXMgYSB0aW1lIHdoZW4gdGhlIGN1cnJlbnQgaG9sZGVyIG9mIGEgbGVhc2UgaGFzIGxhc3QgdXBkYXRlZCB0aGUgbGVhc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb29yZGluYXRpb24udjFiZXRhMS5MZWFzZVNwZWMjcmVuZXdUaW1lXG4gICAqL1xuICByZWFkb25seSByZW5ld1RpbWU/OiBEYXRlO1xuXG59XG5cbi8qKlxuICogT2JqZWN0UmVmZXJlbmNlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbiB0byBsZXQgeW91IGluc3BlY3Qgb3IgbW9kaWZ5IHRoZSByZWZlcnJlZCBvYmplY3QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuT2JqZWN0UmVmZXJlbmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0UmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFQSSB2ZXJzaW9uIG9mIHRoZSByZWZlcmVudC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuT2JqZWN0UmVmZXJlbmNlI2FwaVZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHJlZmVycmluZyB0byBhIHBpZWNlIG9mIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGVudGlyZSBvYmplY3QsIHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWluIGEgdmFsaWQgSlNPTi9HbyBmaWVsZCBhY2Nlc3Mgc3RhdGVtZW50LCBzdWNoIGFzIGRlc2lyZWRTdGF0ZS5tYW5pZmVzdC5jb250YWluZXJzWzJdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9iamVjdCByZWZlcmVuY2UgaXMgdG8gYSBjb250YWluZXIgd2l0aGluIGEgcG9kLCB0aGlzIHdvdWxkIHRha2Ugb24gYSB2YWx1ZSBsaWtlOiBcInNwZWMuY29udGFpbmVyc3tuYW1lfVwiICh3aGVyZSBcIm5hbWVcIiByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQpIG9yIGlmIG5vIGNvbnRhaW5lciBuYW1lIGlzIHNwZWNpZmllZCBcInNwZWMuY29udGFpbmVyc1syXVwiIChjb250YWluZXIgd2l0aCBpbmRleCAyIGluIHRoaXMgcG9kKS4gVGhpcyBzeW50YXggaXMgY2hvc2VuIG9ubHkgdG8gaGF2ZSBzb21lIHdlbGwtZGVmaW5lZCB3YXkgb2YgcmVmZXJlbmNpbmcgYSBwYXJ0IG9mIGFuIG9iamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuT2JqZWN0UmVmZXJlbmNlI2ZpZWxkUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgZmllbGRQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLaW5kIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuT2JqZWN0UmVmZXJlbmNlI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJlZmVyZW50LiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5PYmplY3RSZWZlcmVuY2UjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZXNwYWNlIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lc3BhY2VzL1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5PYmplY3RSZWZlcmVuY2UjbmFtZXNwYWNlXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIHJlc291cmNlVmVyc2lvbiB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSBpcyBtYWRlLCBpZiBhbnkuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI2NvbmN1cnJlbmN5LWNvbnRyb2wtYW5kLWNvbnNpc3RlbmN5XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk9iamVjdFJlZmVyZW5jZSNyZXNvdXJjZVZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVUlEIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jdWlkc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5PYmplY3RSZWZlcmVuY2UjdWlkXG4gICAqL1xuICByZWFkb25seSB1aWQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZGl0aW9uIG9mIGEgY29tcG9uZW50LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbXBvbmVudENvbmRpdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudENvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25kaXRpb24gZXJyb3IgY29kZSBmb3IgYSBjb21wb25lbnQuIEZvciBleGFtcGxlLCBhIGhlYWx0aCBjaGVjayBlcnJvciBjb2RlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db21wb25lbnRDb25kaXRpb24jZXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGFib3V0IHRoZSBjb25kaXRpb24gZm9yIGEgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgaW5mb3JtYXRpb24gYWJvdXQgYSBoZWFsdGggY2hlY2suXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbXBvbmVudENvbmRpdGlvbiNtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGF0dXMgb2YgdGhlIGNvbmRpdGlvbiBmb3IgYSBjb21wb25lbnQuIFZhbGlkIHZhbHVlcyBmb3IgXCJIZWFsdGh5XCI6IFwiVHJ1ZVwiLCBcIkZhbHNlXCIsIG9yIFwiVW5rbm93blwiLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db21wb25lbnRDb25kaXRpb24jc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBvZiBjb25kaXRpb24gZm9yIGEgY29tcG9uZW50LiBWYWxpZCB2YWx1ZTogXCJIZWFsdGh5XCJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29tcG9uZW50Q29uZGl0aW9uI3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIEVuZHBvaW50U3Vic2V0IGlzIGEgZ3JvdXAgb2YgYWRkcmVzc2VzIHdpdGggYSBjb21tb24gc2V0IG9mIHBvcnRzLiBUaGUgZXhwYW5kZWQgc2V0IG9mIGVuZHBvaW50cyBpcyB0aGUgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgQWRkcmVzc2VzIHggUG9ydHMuIEZvciBleGFtcGxlLCBnaXZlbjpcbiAge1xuICAgIEFkZHJlc3NlczogW3tcImlwXCI6IFwiMTAuMTAuMS4xXCJ9LCB7XCJpcFwiOiBcIjEwLjEwLjIuMlwifV0sXG4gICAgUG9ydHM6ICAgICBbe1wibmFtZVwiOiBcImFcIiwgXCJwb3J0XCI6IDg2NzV9LCB7XCJuYW1lXCI6IFwiYlwiLCBcInBvcnRcIjogMzA5fV1cbiAgfVxuVGhlIHJlc3VsdGluZyBzZXQgb2YgZW5kcG9pbnRzIGNhbiBiZSB2aWV3ZWQgYXM6XG4gICAgYTogWyAxMC4xMC4xLjE6ODY3NSwgMTAuMTAuMi4yOjg2NzUgXSxcbiAgICBiOiBbIDEwLjEwLjEuMTozMDksIDEwLjEwLjIuMjozMDkgXVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50U3Vic2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5kcG9pbnRTdWJzZXQge1xuICAvKipcbiAgICogSVAgYWRkcmVzc2VzIHdoaWNoIG9mZmVyIHRoZSByZWxhdGVkIHBvcnRzIHRoYXQgYXJlIG1hcmtlZCBhcyByZWFkeS4gVGhlc2UgZW5kcG9pbnRzIHNob3VsZCBiZSBjb25zaWRlcmVkIHNhZmUgZm9yIGxvYWQgYmFsYW5jZXJzIGFuZCBjbGllbnRzIHRvIHV0aWxpemUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50U3Vic2V0I2FkZHJlc3Nlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkcmVzc2VzPzogRW5kcG9pbnRBZGRyZXNzW107XG5cbiAgLyoqXG4gICAqIElQIGFkZHJlc3NlcyB3aGljaCBvZmZlciB0aGUgcmVsYXRlZCBwb3J0cyBidXQgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkIGFzIHJlYWR5IGJlY2F1c2UgdGhleSBoYXZlIG5vdCB5ZXQgZmluaXNoZWQgc3RhcnRpbmcsIGhhdmUgcmVjZW50bHkgZmFpbGVkIGEgcmVhZGluZXNzIGNoZWNrLCBvciBoYXZlIHJlY2VudGx5IGZhaWxlZCBhIGxpdmVuZXNzIGNoZWNrLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludFN1YnNldCNub3RSZWFkeUFkZHJlc3Nlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90UmVhZHlBZGRyZXNzZXM/OiBFbmRwb2ludEFkZHJlc3NbXTtcblxuICAvKipcbiAgICogUG9ydCBudW1iZXJzIGF2YWlsYWJsZSBvbiB0aGUgcmVsYXRlZCBJUCBhZGRyZXNzZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50U3Vic2V0I3BvcnRzXG4gICAqL1xuICByZWFkb25seSBwb3J0cz86IEVuZHBvaW50UG9ydFtdO1xuXG59XG5cbi8qKlxuICogRXZlbnRTZXJpZXMgY29udGFpbiBpbmZvcm1hdGlvbiBvbiBzZXJpZXMgb2YgZXZlbnRzLCBpLmUuIHRoaW5nIHRoYXQgd2FzL2lzIGhhcHBlbmluZyBjb250aW51b3VzbHkgZm9yIHNvbWUgdGltZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXZlbnRzLnYxYmV0YTEuRXZlbnRTZXJpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFNlcmllcyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygb2NjdXJyZW5jZXMgaW4gdGhpcyBzZXJpZXMgdXAgdG8gdGhlIGxhc3QgaGVhcnRiZWF0IHRpbWVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50U2VyaWVzI2NvdW50XG4gICAqL1xuICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lIHdoZW4gbGFzdCBFdmVudCBmcm9tIHRoZSBzZXJpZXMgd2FzIHNlZW4gYmVmb3JlIGxhc3QgaGVhcnRiZWF0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXZlbnRzLnYxYmV0YTEuRXZlbnRTZXJpZXMjbGFzdE9ic2VydmVkVGltZVxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdE9ic2VydmVkVGltZTogRGF0ZTtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gd2hldGhlciB0aGlzIHNlcmllcyBpcyBvbmdvaW5nIG9yIGZpbmlzaGVkLiBEZXByZWNhdGVkLiBQbGFubmVkIHJlbW92YWwgZm9yIDEuMThcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmV2ZW50cy52MWJldGExLkV2ZW50U2VyaWVzI3N0YXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0ZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogRXZlbnRTb3VyY2UgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGFuIGV2ZW50LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkV2ZW50U291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTb3VyY2Uge1xuICAvKipcbiAgICogQ29tcG9uZW50IGZyb20gd2hpY2ggdGhlIGV2ZW50IGlzIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRXZlbnRTb3VyY2UjY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5vZGUgbmFtZSBvbiB3aGljaCB0aGUgZXZlbnQgaXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FdmVudFNvdXJjZSNob3N0XG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogTGltaXRSYW5nZVNwZWMgZGVmaW5lcyBhIG1pbi9tYXggdXNhZ2UgbGltaXQgZm9yIHJlc291cmNlcyB0aGF0IG1hdGNoIG9uIGtpbmQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW1pdFJhbmdlU3BlYyB7XG4gIC8qKlxuICAgKiBMaW1pdHMgaXMgdGhlIGxpc3Qgb2YgTGltaXRSYW5nZUl0ZW0gb2JqZWN0cyB0aGF0IGFyZSBlbmZvcmNlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZVNwZWMjbGltaXRzXG4gICAqL1xuICByZWFkb25seSBsaW1pdHM6IExpbWl0UmFuZ2VJdGVtW107XG5cbn1cblxuLyoqXG4gKiBOYW1lc3BhY2VTcGVjIGRlc2NyaWJlcyB0aGUgYXR0cmlidXRlcyBvbiBhIE5hbWVzcGFjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5OYW1lc3BhY2VTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZXNwYWNlU3BlYyB7XG4gIC8qKlxuICAgKiBGaW5hbGl6ZXJzIGlzIGFuIG9wYXF1ZSBsaXN0IG9mIHZhbHVlcyB0aGF0IG11c3QgYmUgZW1wdHkgdG8gcGVybWFuZW50bHkgcmVtb3ZlIG9iamVjdCBmcm9tIHN0b3JhZ2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdGFza3MvYWRtaW5pc3Rlci1jbHVzdGVyL25hbWVzcGFjZXMvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5hbWVzcGFjZVNwZWMjZmluYWxpemVyc1xuICAgKi9cbiAgcmVhZG9ubHkgZmluYWxpemVycz86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogTm9kZVNwZWMgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIHRoYXQgYSBub2RlIGlzIGNyZWF0ZWQgd2l0aC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVTcGVjIHtcbiAgLyoqXG4gICAqIElmIHNwZWNpZmllZCwgdGhlIHNvdXJjZSB0byBnZXQgbm9kZSBjb25maWd1cmF0aW9uIGZyb20gVGhlIER5bmFtaWNLdWJlbGV0Q29uZmlnIGZlYXR1cmUgZ2F0ZSBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSBLdWJlbGV0IHRvIHVzZSB0aGlzIGZpZWxkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVTcGVjI2NvbmZpZ1NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU291cmNlPzogTm9kZUNvbmZpZ1NvdXJjZTtcblxuICAvKipcbiAgICogRGVwcmVjYXRlZC4gTm90IGFsbCBrdWJlbGV0cyB3aWxsIHNldCB0aGlzIGZpZWxkLiBSZW1vdmUgZmllbGQgYWZ0ZXIgMS4xMy4gc2VlOiBodHRwczovL2lzc3Vlcy5rOHMuaW8vNjE5NjZcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZVNwZWMjZXh0ZXJuYWxJRFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxJRD86IHN0cmluZztcblxuICAvKipcbiAgICogUG9kQ0lEUiByZXByZXNlbnRzIHRoZSBwb2QgSVAgcmFuZ2UgYXNzaWduZWQgdG8gdGhlIG5vZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVTcGVjI3BvZENJRFJcbiAgICovXG4gIHJlYWRvbmx5IHBvZENJRFI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoZSBub2RlIGFzc2lnbmVkIGJ5IHRoZSBjbG91ZCBwcm92aWRlciBpbiB0aGUgZm9ybWF0OiA8UHJvdmlkZXJOYW1lPjovLzxQcm92aWRlclNwZWNpZmljTm9kZUlEPlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU3BlYyNwcm92aWRlcklEXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcklEPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBub2RlJ3MgdGFpbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU3BlYyN0YWludHNcbiAgICovXG4gIHJlYWRvbmx5IHRhaW50cz86IFRhaW50W107XG5cbiAgLyoqXG4gICAqIFVuc2NoZWR1bGFibGUgY29udHJvbHMgbm9kZSBzY2hlZHVsYWJpbGl0eSBvZiBuZXcgcG9kcy4gQnkgZGVmYXVsdCwgbm9kZSBpcyBzY2hlZHVsYWJsZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9ub2Rlcy9ub2RlLyNtYW51YWwtbm9kZS1hZG1pbmlzdHJhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU3BlYyN1bnNjaGVkdWxhYmxlXG4gICAqL1xuICByZWFkb25seSB1bnNjaGVkdWxhYmxlPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIFBlcnNpc3RlbnRWb2x1bWVTcGVjIGlzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgcGVyc2lzdGVudCB2b2x1bWUuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZW50Vm9sdW1lU3BlYyB7XG4gIC8qKlxuICAgKiBBY2Nlc3NNb2RlcyBjb250YWlucyBhbGwgd2F5cyB0aGUgdm9sdW1lIGNhbiBiZSBtb3VudGVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNhY2Nlc3NNb2Rlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzTW9kZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQVdTRWxhc3RpY0Jsb2NrU3RvcmUgcmVwcmVzZW50cyBhbiBBV1MgRGlzayByZXNvdXJjZSB0aGF0IGlzIGF0dGFjaGVkIHRvIGEga3ViZWxldCdzIGhvc3QgbWFjaGluZSBhbmQgdGhlbiBleHBvc2VkIHRvIHRoZSBwb2QuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2F3c2VsYXN0aWNibG9ja3N0b3JlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI2F3c0VsYXN0aWNCbG9ja1N0b3JlXG4gICAqL1xuICByZWFkb25seSBhd3NFbGFzdGljQmxvY2tTdG9yZT86IEF3c0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBBenVyZURpc2sgcmVwcmVzZW50cyBhbiBBenVyZSBEYXRhIERpc2sgbW91bnQgb24gdGhlIGhvc3QgYW5kIGJpbmQgbW91bnQgdG8gdGhlIHBvZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjYXp1cmVEaXNrXG4gICAqL1xuICByZWFkb25seSBhenVyZURpc2s/OiBBenVyZURpc2tWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEF6dXJlRmlsZSByZXByZXNlbnRzIGFuIEF6dXJlIEZpbGUgU2VydmljZSBtb3VudCBvbiB0aGUgaG9zdCBhbmQgYmluZCBtb3VudCB0byB0aGUgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNhenVyZUZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGF6dXJlRmlsZT86IEF6dXJlRmlsZVBlcnNpc3RlbnRWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHBlcnNpc3RlbnQgdm9sdW1lJ3MgcmVzb3VyY2VzIGFuZCBjYXBhY2l0eS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjYXBhY2l0eVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNjYXBhY2l0eVxuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWNpdHk/OiB7IFtrZXk6IHN0cmluZ106IFF1YW50aXR5IH07XG5cbiAgLyoqXG4gICAqIENlcGhGUyByZXByZXNlbnRzIGEgQ2VwaCBGUyBtb3VudCBvbiB0aGUgaG9zdCB0aGF0IHNoYXJlcyBhIHBvZCdzIGxpZmV0aW1lXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI2NlcGhmc1xuICAgKi9cbiAgcmVhZG9ubHkgY2VwaGZzPzogQ2VwaEZzUGVyc2lzdGVudFZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogQ2luZGVyIHJlcHJlc2VudHMgYSBjaW5kZXIgdm9sdW1lIGF0dGFjaGVkIGFuZCBtb3VudGVkIG9uIGt1YmVsZXRzIGhvc3QgbWFjaGluZSBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvbXlzcWwtY2luZGVyLXBkL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNjaW5kZXJcbiAgICovXG4gIHJlYWRvbmx5IGNpbmRlcj86IENpbmRlclBlcnNpc3RlbnRWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIENsYWltUmVmIGlzIHBhcnQgb2YgYSBiaS1kaXJlY3Rpb25hbCBiaW5kaW5nIGJldHdlZW4gUGVyc2lzdGVudFZvbHVtZSBhbmQgUGVyc2lzdGVudFZvbHVtZUNsYWltLiBFeHBlY3RlZCB0byBiZSBub24tbmlsIHdoZW4gYm91bmQuIGNsYWltLlZvbHVtZU5hbWUgaXMgdGhlIGF1dGhvcml0YXRpdmUgYmluZCBiZXR3ZWVuIFBWIGFuZCBQVkMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYmluZGluZ1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNjbGFpbVJlZlxuICAgKi9cbiAgcmVhZG9ubHkgY2xhaW1SZWY/OiBPYmplY3RSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIENTSSByZXByZXNlbnRzIHN0b3JhZ2UgdGhhdCBpcyBoYW5kbGVkIGJ5IGFuIGV4dGVybmFsIENTSSBkcml2ZXIgKEJldGEgZmVhdHVyZSkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI2NzaVxuICAgKi9cbiAgcmVhZG9ubHkgY3NpPzogQ3NpUGVyc2lzdGVudFZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogRkMgcmVwcmVzZW50cyBhIEZpYnJlIENoYW5uZWwgcmVzb3VyY2UgdGhhdCBpcyBhdHRhY2hlZCB0byBhIGt1YmVsZXQncyBob3N0IG1hY2hpbmUgYW5kIHRoZW4gZXhwb3NlZCB0byB0aGUgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNmY1xuICAgKi9cbiAgcmVhZG9ubHkgZmM/OiBGY1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogRmxleFZvbHVtZSByZXByZXNlbnRzIGEgZ2VuZXJpYyB2b2x1bWUgcmVzb3VyY2UgdGhhdCBpcyBwcm92aXNpb25lZC9hdHRhY2hlZCB1c2luZyBhbiBleGVjIGJhc2VkIHBsdWdpbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjZmxleFZvbHVtZVxuICAgKi9cbiAgcmVhZG9ubHkgZmxleFZvbHVtZT86IEZsZXhQZXJzaXN0ZW50Vm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBGbG9ja2VyIHJlcHJlc2VudHMgYSBGbG9ja2VyIHZvbHVtZSBhdHRhY2hlZCB0byBhIGt1YmVsZXQncyBob3N0IG1hY2hpbmUgYW5kIGV4cG9zZWQgdG8gdGhlIHBvZCBmb3IgaXRzIHVzYWdlLiBUaGlzIGRlcGVuZHMgb24gdGhlIEZsb2NrZXIgY29udHJvbCBzZXJ2aWNlIGJlaW5nIHJ1bm5pbmdcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjZmxvY2tlclxuICAgKi9cbiAgcmVhZG9ubHkgZmxvY2tlcj86IEZsb2NrZXJWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEdDRVBlcnNpc3RlbnREaXNrIHJlcHJlc2VudHMgYSBHQ0UgRGlzayByZXNvdXJjZSB0aGF0IGlzIGF0dGFjaGVkIHRvIGEga3ViZWxldCdzIGhvc3QgbWFjaGluZSBhbmQgdGhlbiBleHBvc2VkIHRvIHRoZSBwb2QuIFByb3Zpc2lvbmVkIGJ5IGFuIGFkbWluLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNnY2VwZXJzaXN0ZW50ZGlza1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNnY2VQZXJzaXN0ZW50RGlza1xuICAgKi9cbiAgcmVhZG9ubHkgZ2NlUGVyc2lzdGVudERpc2s/OiBHY2VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogR2x1c3RlcmZzIHJlcHJlc2VudHMgYSBHbHVzdGVyZnMgdm9sdW1lIHRoYXQgaXMgYXR0YWNoZWQgdG8gYSBob3N0IGFuZCBleHBvc2VkIHRvIHRoZSBwb2QuIFByb3Zpc2lvbmVkIGJ5IGFuIGFkbWluLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9nbHVzdGVyZnMvUkVBRE1FLm1kXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI2dsdXN0ZXJmc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2x1c3RlcmZzPzogR2x1c3RlcmZzUGVyc2lzdGVudFZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogSG9zdFBhdGggcmVwcmVzZW50cyBhIGRpcmVjdG9yeSBvbiB0aGUgaG9zdC4gUHJvdmlzaW9uZWQgYnkgYSBkZXZlbG9wZXIgb3IgdGVzdGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2luZ2xlLW5vZGUgZGV2ZWxvcG1lbnQgYW5kIHRlc3Rpbmcgb25seSEgT24taG9zdCBzdG9yYWdlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYW55IHdheSBhbmQgV0lMTCBOT1QgV09SSyBpbiBhIG11bHRpLW5vZGUgY2x1c3Rlci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjaG9zdHBhdGhcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjaG9zdFBhdGhcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQYXRoPzogSG9zdFBhdGhWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIElTQ1NJIHJlcHJlc2VudHMgYW4gSVNDU0kgRGlzayByZXNvdXJjZSB0aGF0IGlzIGF0dGFjaGVkIHRvIGEga3ViZWxldCdzIGhvc3QgbWFjaGluZSBhbmQgdGhlbiBleHBvc2VkIHRvIHRoZSBwb2QuIFByb3Zpc2lvbmVkIGJ5IGFuIGFkbWluLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNpc2NzaVxuICAgKi9cbiAgcmVhZG9ubHkgaXNjc2k/OiBJc2NzaVBlcnNpc3RlbnRWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIExvY2FsIHJlcHJlc2VudHMgZGlyZWN0bHktYXR0YWNoZWQgc3RvcmFnZSB3aXRoIG5vZGUgYWZmaW5pdHlcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjbG9jYWxcbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsPzogTG9jYWxWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBtb3VudCBvcHRpb25zLCBlLmcuIFtcInJvXCIsIFwic29mdFwiXS4gTm90IHZhbGlkYXRlZCAtIG1vdW50IHdpbGwgc2ltcGx5IGZhaWwgaWYgb25lIGlzIGludmFsaWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMvI21vdW50LW9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjbW91bnRPcHRpb25zXG4gICAqL1xuICByZWFkb25seSBtb3VudE9wdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTkZTIHJlcHJlc2VudHMgYW4gTkZTIG1vdW50IG9uIHRoZSBob3N0LiBQcm92aXNpb25lZCBieSBhbiBhZG1pbi4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjbmZzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI25mc1xuICAgKi9cbiAgcmVhZG9ubHkgbmZzPzogTmZzVm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBOb2RlQWZmaW5pdHkgZGVmaW5lcyBjb25zdHJhaW50cyB0aGF0IGxpbWl0IHdoYXQgbm9kZXMgdGhpcyB2b2x1bWUgY2FuIGJlIGFjY2Vzc2VkIGZyb20uIFRoaXMgZmllbGQgaW5mbHVlbmNlcyB0aGUgc2NoZWR1bGluZyBvZiBwb2RzIHRoYXQgdXNlIHRoaXMgdm9sdW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNub2RlQWZmaW5pdHlcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVBZmZpbml0eT86IFZvbHVtZU5vZGVBZmZpbml0eTtcblxuICAvKipcbiAgICogV2hhdCBoYXBwZW5zIHRvIGEgcGVyc2lzdGVudCB2b2x1bWUgd2hlbiByZWxlYXNlZCBmcm9tIGl0cyBjbGFpbS4gVmFsaWQgb3B0aW9ucyBhcmUgUmV0YWluIChkZWZhdWx0IGZvciBtYW51YWxseSBjcmVhdGVkIFBlcnNpc3RlbnRWb2x1bWVzKSwgRGVsZXRlIChkZWZhdWx0IGZvciBkeW5hbWljYWxseSBwcm92aXNpb25lZCBQZXJzaXN0ZW50Vm9sdW1lcyksIGFuZCBSZWN5Y2xlIChkZXByZWNhdGVkKS4gUmVjeWNsZSBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgdm9sdW1lIHBsdWdpbiB1bmRlcmx5aW5nIHRoaXMgUGVyc2lzdGVudFZvbHVtZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNyZWNsYWltaW5nXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI3BlcnNpc3RlbnRWb2x1bWVSZWNsYWltUG9saWN5XG4gICAqL1xuICByZWFkb25seSBwZXJzaXN0ZW50Vm9sdW1lUmVjbGFpbVBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogUGhvdG9uUGVyc2lzdGVudERpc2sgcmVwcmVzZW50cyBhIFBob3RvbkNvbnRyb2xsZXIgcGVyc2lzdGVudCBkaXNrIGF0dGFjaGVkIGFuZCBtb3VudGVkIG9uIGt1YmVsZXRzIGhvc3QgbWFjaGluZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNwaG90b25QZXJzaXN0ZW50RGlza1xuICAgKi9cbiAgcmVhZG9ubHkgcGhvdG9uUGVyc2lzdGVudERpc2s/OiBQaG90b25QZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogUG9ydHdvcnhWb2x1bWUgcmVwcmVzZW50cyBhIHBvcnR3b3J4IHZvbHVtZSBhdHRhY2hlZCBhbmQgbW91bnRlZCBvbiBrdWJlbGV0cyBob3N0IG1hY2hpbmVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjcG9ydHdvcnhWb2x1bWVcbiAgICovXG4gIHJlYWRvbmx5IHBvcnR3b3J4Vm9sdW1lPzogUG9ydHdvcnhWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFF1b2J5dGUgcmVwcmVzZW50cyBhIFF1b2J5dGUgbW91bnQgb24gdGhlIGhvc3QgdGhhdCBzaGFyZXMgYSBwb2QncyBsaWZldGltZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNxdW9ieXRlXG4gICAqL1xuICByZWFkb25seSBxdW9ieXRlPzogUXVvYnl0ZVZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogUkJEIHJlcHJlc2VudHMgYSBSYWRvcyBCbG9jayBEZXZpY2UgbW91bnQgb24gdGhlIGhvc3QgdGhhdCBzaGFyZXMgYSBwb2QncyBsaWZldGltZS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyNyYmRcbiAgICovXG4gIHJlYWRvbmx5IHJiZD86IFJiZFBlcnNpc3RlbnRWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFNjYWxlSU8gcmVwcmVzZW50cyBhIFNjYWxlSU8gcGVyc2lzdGVudCB2b2x1bWUgYXR0YWNoZWQgYW5kIG1vdW50ZWQgb24gS3ViZXJuZXRlcyBub2Rlcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjc2NhbGVJT1xuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVJTz86IFNjYWxlSW9QZXJzaXN0ZW50Vm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIFN0b3JhZ2VDbGFzcyB0byB3aGljaCB0aGlzIHBlcnNpc3RlbnQgdm9sdW1lIGJlbG9uZ3MuIEVtcHR5IHZhbHVlIG1lYW5zIHRoYXQgdGhpcyB2b2x1bWUgZG9lcyBub3QgYmVsb25nIHRvIGFueSBTdG9yYWdlQ2xhc3MuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI3N0b3JhZ2VDbGFzc05hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VDbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2VPUyByZXByZXNlbnRzIGEgU3RvcmFnZU9TIHZvbHVtZSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoZSBrdWJlbGV0J3MgaG9zdCBtYWNoaW5lIGFuZCBtb3VudGVkIGludG8gdGhlIHBvZCBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9zdG9yYWdlb3MvUkVBRE1FLm1kXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVTcGVjI3N0b3JhZ2Vvc1xuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZW9zPzogU3RvcmFnZU9zUGVyc2lzdGVudFZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogdm9sdW1lTW9kZSBkZWZpbmVzIGlmIGEgdm9sdW1lIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBhIGZvcm1hdHRlZCBmaWxlc3lzdGVtIG9yIHRvIHJlbWFpbiBpbiByYXcgYmxvY2sgc3RhdGUuIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBzcGVjLiBUaGlzIGlzIGEgYmV0YSBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QZXJzaXN0ZW50Vm9sdW1lU3BlYyN2b2x1bWVNb2RlXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWc3BoZXJlVm9sdW1lIHJlcHJlc2VudHMgYSB2U3BoZXJlIHZvbHVtZSBhdHRhY2hlZCBhbmQgbW91bnRlZCBvbiBrdWJlbGV0cyBob3N0IG1hY2hpbmVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZVNwZWMjdnNwaGVyZVZvbHVtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnNwaGVyZVZvbHVtZT86IFZzcGhlcmVWaXJ0dWFsRGlza1ZvbHVtZVNvdXJjZTtcblxufVxuXG4vKipcbiAqIFBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMgZGVzY3JpYmVzIHRoZSBjb21tb24gYXR0cmlidXRlcyBvZiBzdG9yYWdlIGRldmljZXMgYW5kIGFsbG93cyBhIFNvdXJjZSBmb3IgcHJvdmlkZXItc3BlY2lmaWMgYXR0cmlidXRlc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjIHtcbiAgLyoqXG4gICAqIEFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMjYWNjZXNzTW9kZXNcbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc01vZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZVNuYXBzaG90RGF0YVNvdXJjZSBhbHBoYSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCBhbmQgY3VycmVudGx5IFZvbHVtZVNuYXBzaG90IGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBkYXRhIHNvdXJjZS4gSWYgdGhlIHByb3Zpc2lvbmVyIGNhbiBzdXBwb3J0IFZvbHVtZVNuYXBzaG90IGRhdGEgc291cmNlLCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyB2b2x1bWUgYW5kIGRhdGEgd2lsbCBiZSByZXN0b3JlZCB0byB0aGUgdm9sdW1lIGF0IHRoZSBzYW1lIHRpbWUuIElmIHRoZSBwcm92aXNpb25lciBkb2VzIG5vdCBzdXBwb3J0IFZvbHVtZVNuYXBzaG90IGRhdGEgc291cmNlLCB2b2x1bWUgd2lsbCBub3QgYmUgY3JlYXRlZCBhbmQgdGhlIGZhaWx1cmUgd2lsbCBiZSByZXBvcnRlZCBhcyBhbiBldmVudC4gSW4gdGhlIGZ1dHVyZSwgd2UgcGxhbiB0byBzdXBwb3J0IG1vcmUgZGF0YSBzb3VyY2UgdHlwZXMgYW5kIHRoZSBiZWhhdmlvciBvZiB0aGUgcHJvdmlzaW9uZXIgbWF5IGNoYW5nZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlYyNkYXRhU291cmNlXG4gICAqL1xuICByZWFkb25seSBkYXRhU291cmNlPzogVHlwZWRMb2NhbE9iamVjdFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMjcmVzb3VyY2VzXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXM/OiBSZXNvdXJjZVJlcXVpcmVtZW50cztcblxuICAvKipcbiAgICogQSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMjc2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdG9yPzogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMjc3RvcmFnZUNsYXNzTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogdm9sdW1lTW9kZSBkZWZpbmVzIHdoYXQgdHlwZSBvZiB2b2x1bWUgaXMgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBWYWx1ZSBvZiBGaWxlc3lzdGVtIGlzIGltcGxpZWQgd2hlbiBub3QgaW5jbHVkZWQgaW4gY2xhaW0gc3BlYy4gVGhpcyBpcyBhIGJldGEgZmVhdHVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlYyN2b2x1bWVNb2RlXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWb2x1bWVOYW1lIGlzIHRoZSBiaW5kaW5nIHJlZmVyZW5jZSB0byB0aGUgUGVyc2lzdGVudFZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW0uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWMjdm9sdW1lTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lTmFtZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFBvZFNwZWMgaXMgYSBkZXNjcmlwdGlvbiBvZiBhIHBvZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9kU3BlYyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkdXJhdGlvbiBpbiBzZWNvbmRzIHRoZSBwb2QgbWF5IGJlIGFjdGl2ZSBvbiB0aGUgbm9kZSByZWxhdGl2ZSB0byBTdGFydFRpbWUgYmVmb3JlIHRoZSBzeXN0ZW0gd2lsbCBhY3RpdmVseSB0cnkgdG8gbWFyayBpdCBmYWlsZWQgYW5kIGtpbGwgYXNzb2NpYXRlZCBjb250YWluZXJzLiBWYWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNhY3RpdmVEZWFkbGluZVNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZURlYWRsaW5lU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgcG9kJ3Mgc2NoZWR1bGluZyBjb25zdHJhaW50c1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI2FmZmluaXR5XG4gICAqL1xuICByZWFkb25seSBhZmZpbml0eT86IEFmZmluaXR5O1xuXG4gIC8qKlxuICAgKiBBdXRvbW91bnRTZXJ2aWNlQWNjb3VudFRva2VuIGluZGljYXRlcyB3aGV0aGVyIGEgc2VydmljZSBhY2NvdW50IHRva2VuIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IG1vdW50ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjYXV0b21vdW50U2VydmljZUFjY291bnRUb2tlblxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b21vdW50U2VydmljZUFjY291bnRUb2tlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY29udGFpbmVycyBiZWxvbmdpbmcgdG8gdGhlIHBvZC4gQ29udGFpbmVycyBjYW5ub3QgY3VycmVudGx5IGJlIGFkZGVkIG9yIHJlbW92ZWQuIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciBpbiBhIFBvZC4gQ2Fubm90IGJlIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjY29udGFpbmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyczogQ29udGFpbmVyW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgRE5TIHBhcmFtZXRlcnMgb2YgYSBwb2QuIFBhcmFtZXRlcnMgc3BlY2lmaWVkIGhlcmUgd2lsbCBiZSBtZXJnZWQgdG8gdGhlIGdlbmVyYXRlZCBETlMgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBETlNQb2xpY3kuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjZG5zQ29uZmlnXG4gICAqL1xuICByZWFkb25seSBkbnNDb25maWc/OiBQb2REbnNDb25maWc7XG5cbiAgLyoqXG4gICAqIFNldCBETlMgcG9saWN5IGZvciB0aGUgcG9kLiBEZWZhdWx0cyB0byBcIkNsdXN0ZXJGaXJzdFwiLiBWYWxpZCB2YWx1ZXMgYXJlICdDbHVzdGVyRmlyc3RXaXRoSG9zdE5ldCcsICdDbHVzdGVyRmlyc3QnLCAnRGVmYXVsdCcgb3IgJ05vbmUnLiBETlMgcGFyYW1ldGVycyBnaXZlbiBpbiBETlNDb25maWcgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgcG9saWN5IHNlbGVjdGVkIHdpdGggRE5TUG9saWN5LiBUbyBoYXZlIEROUyBvcHRpb25zIHNldCBhbG9uZyB3aXRoIGhvc3ROZXR3b3JrLCB5b3UgaGF2ZSB0byBzcGVjaWZ5IEROUyBwb2xpY3kgZXhwbGljaXRseSB0byAnQ2x1c3RlckZpcnN0V2l0aEhvc3ROZXQnLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDbHVzdGVyRmlyc3RcIi4gVmFsaWQgdmFsdWVzIGFyZSAnQ2x1c3RlckZpcnN0V2l0aEhvc3ROZXQnLCAnQ2x1c3RlckZpcnN0JywgJ0RlZmF1bHQnIG9yICdOb25lJy4gRE5TIHBhcmFtZXRlcnMgZ2l2ZW4gaW4gRE5TQ29uZmlnIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIHBvbGljeSBzZWxlY3RlZCB3aXRoIEROU1BvbGljeS4gVG8gaGF2ZSBETlMgb3B0aW9ucyBzZXQgYWxvbmcgd2l0aCBob3N0TmV0d29yaywgeW91IGhhdmUgdG8gc3BlY2lmeSBETlMgcG9saWN5IGV4cGxpY2l0bHkgdG8gJ0NsdXN0ZXJGaXJzdFdpdGhIb3N0TmV0Jy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNkbnNQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGRuc1BvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlU2VydmljZUxpbmtzIGluZGljYXRlcyB3aGV0aGVyIGluZm9ybWF0aW9uIGFib3V0IHNlcnZpY2VzIHNob3VsZCBiZSBpbmplY3RlZCBpbnRvIHBvZCdzIGVudmlyb25tZW50IHZhcmlhYmxlcywgbWF0Y2hpbmcgdGhlIHN5bnRheCBvZiBEb2NrZXIgbGlua3MuIE9wdGlvbmFsOiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI2VuYWJsZVNlcnZpY2VMaW5rc1xuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2VydmljZUxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSG9zdEFsaWFzZXMgaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBob3N0cyBhbmQgSVBzIHRoYXQgd2lsbCBiZSBpbmplY3RlZCBpbnRvIHRoZSBwb2QncyBob3N0cyBmaWxlIGlmIHNwZWNpZmllZC4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBub24taG9zdE5ldHdvcmsgcG9kcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNob3N0QWxpYXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgaG9zdEFsaWFzZXM/OiBIb3N0QWxpYXNbXTtcblxuICAvKipcbiAgICogVXNlIHRoZSBob3N0J3MgaXBjIG5hbWVzcGFjZS4gT3B0aW9uYWw6IERlZmF1bHQgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI2hvc3RJUENcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RJUEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3N0IG5ldHdvcmtpbmcgcmVxdWVzdGVkIGZvciB0aGlzIHBvZC4gVXNlIHRoZSBob3N0J3MgbmV0d29yayBuYW1lc3BhY2UuIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHBvcnRzIHRoYXQgd2lsbCBiZSB1c2VkIG11c3QgYmUgc3BlY2lmaWVkLiBEZWZhdWx0IHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNob3N0TmV0d29ya1xuICAgKi9cbiAgcmVhZG9ubHkgaG9zdE5ldHdvcms/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIGhvc3QncyBwaWQgbmFtZXNwYWNlLiBPcHRpb25hbDogRGVmYXVsdCB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjaG9zdFBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdFBJRD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgaG9zdG5hbWUgb2YgdGhlIFBvZCBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgcG9kJ3MgaG9zdG5hbWUgd2lsbCBiZSBzZXQgdG8gYSBzeXN0ZW0tZGVmaW5lZCB2YWx1ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNob3N0bmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEltYWdlUHVsbFNlY3JldHMgaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiByZWZlcmVuY2VzIHRvIHNlY3JldHMgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIHRvIHVzZSBmb3IgcHVsbGluZyBhbnkgb2YgdGhlIGltYWdlcyB1c2VkIGJ5IHRoaXMgUG9kU3BlYy4gSWYgc3BlY2lmaWVkLCB0aGVzZSBzZWNyZXRzIHdpbGwgYmUgcGFzc2VkIHRvIGluZGl2aWR1YWwgcHVsbGVyIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlbSB0byB1c2UuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBkb2NrZXIsIG9ubHkgRG9ja2VyQ29uZmlnIHR5cGUgc2VjcmV0cyBhcmUgaG9ub3JlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb250YWluZXJzL2ltYWdlcyNzcGVjaWZ5aW5nLWltYWdlcHVsbHNlY3JldHMtb24tYS1wb2RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNpbWFnZVB1bGxTZWNyZXRzXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxTZWNyZXRzPzogTG9jYWxPYmplY3RSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBpbml0aWFsaXphdGlvbiBjb250YWluZXJzIGJlbG9uZ2luZyB0byB0aGUgcG9kLiBJbml0IGNvbnRhaW5lcnMgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIHByaW9yIHRvIGNvbnRhaW5lcnMgYmVpbmcgc3RhcnRlZC4gSWYgYW55IGluaXQgY29udGFpbmVyIGZhaWxzLCB0aGUgcG9kIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBmYWlsZWQgYW5kIGlzIGhhbmRsZWQgYWNjb3JkaW5nIHRvIGl0cyByZXN0YXJ0UG9saWN5LiBUaGUgbmFtZSBmb3IgYW4gaW5pdCBjb250YWluZXIgb3Igbm9ybWFsIGNvbnRhaW5lciBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBhbGwgY29udGFpbmVycy4gSW5pdCBjb250YWluZXJzIG1heSBub3QgaGF2ZSBMaWZlY3ljbGUgYWN0aW9ucywgUmVhZGluZXNzIHByb2Jlcywgb3IgTGl2ZW5lc3MgcHJvYmVzLiBUaGUgcmVzb3VyY2VSZXF1aXJlbWVudHMgb2YgYW4gaW5pdCBjb250YWluZXIgYXJlIHRha2VuIGludG8gYWNjb3VudCBkdXJpbmcgc2NoZWR1bGluZyBieSBmaW5kaW5nIHRoZSBoaWdoZXN0IHJlcXVlc3QvbGltaXQgZm9yIGVhY2ggcmVzb3VyY2UgdHlwZSwgYW5kIHRoZW4gdXNpbmcgdGhlIG1heCBvZiBvZiB0aGF0IHZhbHVlIG9yIHRoZSBzdW0gb2YgdGhlIG5vcm1hbCBjb250YWluZXJzLiBMaW1pdHMgYXJlIGFwcGxpZWQgdG8gaW5pdCBjb250YWluZXJzIGluIGEgc2ltaWxhciBmYXNoaW9uLiBJbml0IGNvbnRhaW5lcnMgY2Fubm90IGN1cnJlbnRseSBiZSBhZGRlZCBvciByZW1vdmVkLiBDYW5ub3QgYmUgdXBkYXRlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvcG9kcy9pbml0LWNvbnRhaW5lcnMvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjaW5pdENvbnRhaW5lcnNcbiAgICovXG4gIHJlYWRvbmx5IGluaXRDb250YWluZXJzPzogQ29udGFpbmVyW107XG5cbiAgLyoqXG4gICAqIE5vZGVOYW1lIGlzIGEgcmVxdWVzdCB0byBzY2hlZHVsZSB0aGlzIHBvZCBvbnRvIGEgc3BlY2lmaWMgbm9kZS4gSWYgaXQgaXMgbm9uLWVtcHR5LCB0aGUgc2NoZWR1bGVyIHNpbXBseSBzY2hlZHVsZXMgdGhpcyBwb2Qgb250byB0aGF0IG5vZGUsIGFzc3VtaW5nIHRoYXQgaXQgZml0cyByZXNvdXJjZSByZXF1aXJlbWVudHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjbm9kZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb2RlU2VsZWN0b3IgaXMgYSBzZWxlY3RvciB3aGljaCBtdXN0IGJlIHRydWUgZm9yIHRoZSBwb2QgdG8gZml0IG9uIGEgbm9kZS4gU2VsZWN0b3Igd2hpY2ggbXVzdCBtYXRjaCBhIG5vZGUncyBsYWJlbHMgZm9yIHRoZSBwb2QgdG8gYmUgc2NoZWR1bGVkIG9uIHRoYXQgbm9kZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL2Fzc2lnbi1wb2Qtbm9kZS9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNub2RlU2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVTZWxlY3Rvcj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFByZWVtcHRpb25Qb2xpY3kgaXMgdGhlIFBvbGljeSBmb3IgcHJlZW1wdGluZyBwb2RzIHdpdGggbG93ZXIgcHJpb3JpdHkuIE9uZSBvZiBOZXZlciwgUHJlZW1wdExvd2VyUHJpb3JpdHkuIERlZmF1bHRzIHRvIFByZWVtcHRMb3dlclByaW9yaXR5IGlmIHVuc2V0LiBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgTm9uUHJlZW1wdGluZ1ByaW9yaXR5IGZlYXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByZWVtcHRMb3dlclByaW9yaXR5IGlmIHVuc2V0LiBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgTm9uUHJlZW1wdGluZ1ByaW9yaXR5IGZlYXR1cmUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjcHJlZW1wdGlvblBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZW1wdGlvblBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByaW9yaXR5IHZhbHVlLiBWYXJpb3VzIHN5c3RlbSBjb21wb25lbnRzIHVzZSB0aGlzIGZpZWxkIHRvIGZpbmQgdGhlIHByaW9yaXR5IG9mIHRoZSBwb2QuIFdoZW4gUHJpb3JpdHkgQWRtaXNzaW9uIENvbnRyb2xsZXIgaXMgZW5hYmxlZCwgaXQgcHJldmVudHMgdXNlcnMgZnJvbSBzZXR0aW5nIHRoaXMgZmllbGQuIFRoZSBhZG1pc3Npb24gY29udHJvbGxlciBwb3B1bGF0ZXMgdGhpcyBmaWVsZCBmcm9tIFByaW9yaXR5Q2xhc3NOYW1lLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGhpZ2hlciB0aGUgcHJpb3JpdHkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjcHJpb3JpdHlcbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBzcGVjaWZpZWQsIGluZGljYXRlcyB0aGUgcG9kJ3MgcHJpb3JpdHkuIFwic3lzdGVtLW5vZGUtY3JpdGljYWxcIiBhbmQgXCJzeXN0ZW0tY2x1c3Rlci1jcml0aWNhbFwiIGFyZSB0d28gc3BlY2lhbCBrZXl3b3JkcyB3aGljaCBpbmRpY2F0ZSB0aGUgaGlnaGVzdCBwcmlvcml0aWVzIHdpdGggdGhlIGZvcm1lciBiZWluZyB0aGUgaGlnaGVzdCBwcmlvcml0eS4gQW55IG90aGVyIG5hbWUgbXVzdCBiZSBkZWZpbmVkIGJ5IGNyZWF0aW5nIGEgUHJpb3JpdHlDbGFzcyBvYmplY3Qgd2l0aCB0aGF0IG5hbWUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBwb2QgcHJpb3JpdHkgd2lsbCBiZSBkZWZhdWx0IG9yIHplcm8gaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNwcmlvcml0eUNsYXNzTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHlDbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNwZWNpZmllZCwgYWxsIHJlYWRpbmVzcyBnYXRlcyB3aWxsIGJlIGV2YWx1YXRlZCBmb3IgcG9kIHJlYWRpbmVzcy4gQSBwb2QgaXMgcmVhZHkgd2hlbiBhbGwgaXRzIGNvbnRhaW5lcnMgYXJlIHJlYWR5IEFORCBhbGwgY29uZGl0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHJlYWRpbmVzcyBnYXRlcyBoYXZlIHN0YXR1cyBlcXVhbCB0byBcIlRydWVcIiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9lbmhhbmNlbWVudHMva2Vwcy9zaWctbmV0d29yay8wMDA3LXBvZC1yZWFkeSUyQiUyQi5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI3JlYWRpbmVzc0dhdGVzXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NHYXRlcz86IFBvZFJlYWRpbmVzc0dhdGVbXTtcblxuICAvKipcbiAgICogUmVzdGFydCBwb2xpY3kgZm9yIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgcG9kLiBPbmUgb2YgQWx3YXlzLCBPbkZhaWx1cmUsIE5ldmVyLiBEZWZhdWx0IHRvIEFsd2F5cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvcG9kcy9wb2QtbGlmZWN5Y2xlLyNyZXN0YXJ0LXBvbGljeVxuICAgKlxuICAgKiBAZGVmYXVsdCBBbHdheXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL3BvZHMvcG9kLWxpZmVjeWNsZS8jcmVzdGFydC1wb2xpY3lcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNyZXN0YXJ0UG9saWN5XG4gICAqL1xuICByZWFkb25seSByZXN0YXJ0UG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW50aW1lQ2xhc3NOYW1lIHJlZmVycyB0byBhIFJ1bnRpbWVDbGFzcyBvYmplY3QgaW4gdGhlIG5vZGUuazhzLmlvIGdyb3VwLCB3aGljaCBzaG91bGQgYmUgdXNlZCB0byBydW4gdGhpcyBwb2QuICBJZiBubyBSdW50aW1lQ2xhc3MgcmVzb3VyY2UgbWF0Y2hlcyB0aGUgbmFtZWQgY2xhc3MsIHRoZSBwb2Qgd2lsbCBub3QgYmUgcnVuLiBJZiB1bnNldCBvciBlbXB0eSwgdGhlIFwibGVnYWN5XCIgUnVudGltZUNsYXNzIHdpbGwgYmUgdXNlZCwgd2hpY2ggaXMgYW4gaW1wbGljaXQgY2xhc3Mgd2l0aCBhbiBlbXB0eSBkZWZpbml0aW9uIHRoYXQgdXNlcyB0aGUgZGVmYXVsdCBydW50aW1lIGhhbmRsZXIuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2VuaGFuY2VtZW50cy9rZXBzL3NpZy1ub2RlL3J1bnRpbWUtY2xhc3MubWQgVGhpcyBpcyBhIGJldGEgZmVhdHVyZSBhcyBvZiBLdWJlcm5ldGVzIHYxLjE0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI3J1bnRpbWVDbGFzc05hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVDbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNwZWNpZmllZCwgdGhlIHBvZCB3aWxsIGJlIGRpc3BhdGNoZWQgYnkgc3BlY2lmaWVkIHNjaGVkdWxlci4gSWYgbm90IHNwZWNpZmllZCwgdGhlIHBvZCB3aWxsIGJlIGRpc3BhdGNoZWQgYnkgZGVmYXVsdCBzY2hlZHVsZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjc2NoZWR1bGVyTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHlDb250ZXh0IGhvbGRzIHBvZC1sZXZlbCBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBjb21tb24gY29udGFpbmVyIHNldHRpbmdzLiBPcHRpb25hbDogRGVmYXVsdHMgdG8gZW1wdHkuICBTZWUgdHlwZSBkZXNjcmlwdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgb2YgZWFjaCBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZW1wdHkuICBTZWUgdHlwZSBkZXNjcmlwdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgb2YgZWFjaCBmaWVsZC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNzZWN1cml0eUNvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29udGV4dD86IFBvZFNlY3VyaXR5Q29udGV4dDtcblxuICAvKipcbiAgICogRGVwcmVjYXRlZFNlcnZpY2VBY2NvdW50IGlzIGEgZGVwcmVjaWF0ZWQgYWxpYXMgZm9yIFNlcnZpY2VBY2NvdW50TmFtZS4gRGVwcmVjYXRlZDogVXNlIHNlcnZpY2VBY2NvdW50TmFtZSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI3NlcnZpY2VBY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlQWNjb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogU2VydmljZUFjY291bnROYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBTZXJ2aWNlQWNjb3VudCB0byB1c2UgdG8gcnVuIHRoaXMgcG9kLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3Rhc2tzL2NvbmZpZ3VyZS1wb2QtY29udGFpbmVyL2NvbmZpZ3VyZS1zZXJ2aWNlLWFjY291bnQvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjc2VydmljZUFjY291bnROYW1lXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlQWNjb3VudE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNoYXJlIGEgc2luZ2xlIHByb2Nlc3MgbmFtZXNwYWNlIGJldHdlZW4gYWxsIG9mIHRoZSBjb250YWluZXJzIGluIGEgcG9kLiBXaGVuIHRoaXMgaXMgc2V0IGNvbnRhaW5lcnMgd2lsbCBiZSBhYmxlIHRvIHZpZXcgYW5kIHNpZ25hbCBwcm9jZXNzZXMgZnJvbSBvdGhlciBjb250YWluZXJzIGluIHRoZSBzYW1lIHBvZCwgYW5kIHRoZSBmaXJzdCBwcm9jZXNzIGluIGVhY2ggY29udGFpbmVyIHdpbGwgbm90IGJlIGFzc2lnbmVkIFBJRCAxLiBIb3N0UElEIGFuZCBTaGFyZVByb2Nlc3NOYW1lc3BhY2UgY2Fubm90IGJvdGggYmUgc2V0LiBPcHRpb25hbDogRGVmYXVsdCB0byBmYWxzZS4gVGhpcyBmaWVsZCBpcyBiZXRhLWxldmVsIGFuZCBtYXkgYmUgZGlzYWJsZWQgd2l0aCB0aGUgUG9kU2hhcmVQcm9jZXNzTmFtZXNwYWNlIGZlYXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLiBUaGlzIGZpZWxkIGlzIGJldGEtbGV2ZWwgYW5kIG1heSBiZSBkaXNhYmxlZCB3aXRoIHRoZSBQb2RTaGFyZVByb2Nlc3NOYW1lc3BhY2UgZmVhdHVyZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU3BlYyNzaGFyZVByb2Nlc3NOYW1lc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlUHJvY2Vzc05hbWVzcGFjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNwZWNpZmllZCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBQb2QgaG9zdG5hbWUgd2lsbCBiZSBcIjxob3N0bmFtZT4uPHN1YmRvbWFpbj4uPHBvZCBuYW1lc3BhY2U+LnN2Yy48Y2x1c3RlciBkb21haW4+XCIuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBwb2Qgd2lsbCBub3QgaGF2ZSBhIGRvbWFpbm5hbWUgYXQgYWxsLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI3N1YmRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkdXJhdGlvbiBpbiBzZWNvbmRzIHRoZSBwb2QgbmVlZHMgdG8gdGVybWluYXRlIGdyYWNlZnVsbHkuIE1heSBiZSBkZWNyZWFzZWQgaW4gZGVsZXRlIHJlcXVlc3QuIFZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXIuIFRoZSB2YWx1ZSB6ZXJvIGluZGljYXRlcyBkZWxldGUgaW1tZWRpYXRlbHkuIElmIHRoaXMgdmFsdWUgaXMgbmlsLCB0aGUgZGVmYXVsdCBncmFjZSBwZXJpb2Qgd2lsbCBiZSB1c2VkIGluc3RlYWQuIFRoZSBncmFjZSBwZXJpb2QgaXMgdGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWZ0ZXIgdGhlIHByb2Nlc3NlcyBydW5uaW5nIGluIHRoZSBwb2QgYXJlIHNlbnQgYSB0ZXJtaW5hdGlvbiBzaWduYWwgYW5kIHRoZSB0aW1lIHdoZW4gdGhlIHByb2Nlc3NlcyBhcmUgZm9yY2libHkgaGFsdGVkIHdpdGggYSBraWxsIHNpZ25hbC4gU2V0IHRoaXMgdmFsdWUgbG9uZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGNsZWFudXAgdGltZSBmb3IgeW91ciBwcm9jZXNzLiBEZWZhdWx0cyB0byAzMCBzZWNvbmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzMCBzZWNvbmRzLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI3Rlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgcG9kJ3MgdG9sZXJhdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNwZWMjdG9sZXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHRvbGVyYXRpb25zPzogVG9sZXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHZvbHVtZXMgdGhhdCBjYW4gYmUgbW91bnRlZCBieSBjb250YWluZXJzIGJlbG9uZ2luZyB0byB0aGUgcG9kLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTcGVjI3ZvbHVtZXNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBWb2x1bWVbXTtcblxufVxuXG4vKipcbiAqIFBvZFRlbXBsYXRlU3BlYyBkZXNjcmliZXMgdGhlIGRhdGEgYSBwb2Qgc2hvdWxkIGhhdmUgd2hlbiBjcmVhdGVkIGZyb20gYSB0ZW1wbGF0ZVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZFRlbXBsYXRlU3BlYyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGFcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kVGVtcGxhdGVTcGVjI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIHBvZC4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFRlbXBsYXRlU3BlYyNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogUG9kU3BlYztcblxufVxuXG4vKipcbiAqIFJlcGxpY2F0aW9uQ29udHJvbGxlclNwZWMgaXMgdGhlIHNwZWNpZmljYXRpb24gb2YgYSByZXBsaWNhdGlvbiBjb250cm9sbGVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgZm9yIHdoaWNoIGEgbmV3bHkgY3JlYXRlZCBwb2Qgc2hvdWxkIGJlIHJlYWR5IHdpdGhvdXQgYW55IG9mIGl0cyBjb250YWluZXIgY3Jhc2hpbmcsIGZvciBpdCB0byBiZSBjb25zaWRlcmVkIGF2YWlsYWJsZS4gRGVmYXVsdHMgdG8gMCAocG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhdmFpbGFibGUgYXMgc29vbiBhcyBpdCBpcyByZWFkeSlcbiAgICpcbiAgICogQGRlZmF1bHQgMCAocG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhdmFpbGFibGUgYXMgc29vbiBhcyBpdCBpcyByZWFkeSlcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVwbGljYXRpb25Db250cm9sbGVyU3BlYyNtaW5SZWFkeVNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IG1pblJlYWR5U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUmVwbGljYXMgaXMgdGhlIG51bWJlciBvZiBkZXNpcmVkIHJlcGxpY2FzLiBUaGlzIGlzIGEgcG9pbnRlciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGV4cGxpY2l0IHplcm8gYW5kIHVuc3BlY2lmaWVkLiBEZWZhdWx0cyB0byAxLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9yZXBsaWNhdGlvbmNvbnRyb2xsZXIjd2hhdC1pcy1hLXJlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKlxuICAgKiBAZGVmYXVsdCAxLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9yZXBsaWNhdGlvbmNvbnRyb2xsZXIjd2hhdC1pcy1hLXJlcGxpY2F0aW9uY29udHJvbGxlclxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjI3JlcGxpY2FzXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogU2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHBvZHMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIFJlcGxpY2FzIGNvdW50LiBJZiBTZWxlY3RvciBpcyBlbXB0eSwgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBsYWJlbHMgcHJlc2VudCBvbiB0aGUgUG9kIHRlbXBsYXRlLiBMYWJlbCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBtdXN0IG1hdGNoIGluIG9yZGVyIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhpcyByZXBsaWNhdGlvbiBjb250cm9sbGVyLCBpZiBlbXB0eSBkZWZhdWx0ZWQgdG8gbGFiZWxzIG9uIFBvZCB0ZW1wbGF0ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9sYWJlbHMvI2xhYmVsLXNlbGVjdG9yc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjI3NlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rvcj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIGlzIHRoZSBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHBvZCB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpZiBpbnN1ZmZpY2llbnQgcmVwbGljYXMgYXJlIGRldGVjdGVkLiBUaGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhIFRlbXBsYXRlUmVmLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9jb250cm9sbGVycy9yZXBsaWNhdGlvbmNvbnRyb2xsZXIjcG9kLXRlbXBsYXRlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlcGxpY2F0aW9uQ29udHJvbGxlclNwZWMjdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogUG9kVGVtcGxhdGVTcGVjO1xuXG59XG5cbi8qKlxuICogUmVzb3VyY2VRdW90YVNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBoYXJkIGxpbWl0cyB0byBlbmZvcmNlIGZvciBRdW90YS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUXVvdGFTcGVjIHtcbiAgLyoqXG4gICAqIGhhcmQgaXMgdGhlIHNldCBvZiBkZXNpcmVkIGhhcmQgbGltaXRzIGZvciBlYWNoIG5hbWVkIHJlc291cmNlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3BvbGljeS9yZXNvdXJjZS1xdW90YXMvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGFTcGVjI2hhcmRcbiAgICovXG4gIHJlYWRvbmx5IGhhcmQ/OiB7IFtrZXk6IHN0cmluZ106IFF1YW50aXR5IH07XG5cbiAgLyoqXG4gICAqIHNjb3BlU2VsZWN0b3IgaXMgYWxzbyBhIGNvbGxlY3Rpb24gb2YgZmlsdGVycyBsaWtlIHNjb3BlcyB0aGF0IG11c3QgbWF0Y2ggZWFjaCBvYmplY3QgdHJhY2tlZCBieSBhIHF1b3RhIGJ1dCBleHByZXNzZWQgdXNpbmcgU2NvcGVTZWxlY3Rvck9wZXJhdG9yIGluIGNvbWJpbmF0aW9uIHdpdGggcG9zc2libGUgdmFsdWVzLiBGb3IgYSByZXNvdXJjZSB0byBtYXRjaCwgYm90aCBzY29wZXMgQU5EIHNjb3BlU2VsZWN0b3IgKGlmIHNwZWNpZmllZCBpbiBzcGVjKSwgbXVzdCBiZSBtYXRjaGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVF1b3RhU3BlYyNzY29wZVNlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBzY29wZVNlbGVjdG9yPzogU2NvcGVTZWxlY3RvcjtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIGZpbHRlcnMgdGhhdCBtdXN0IG1hdGNoIGVhY2ggb2JqZWN0IHRyYWNrZWQgYnkgYSBxdW90YS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIHF1b3RhIG1hdGNoZXMgYWxsIG9iamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlUXVvdGFTcGVjI3Njb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVzPzogc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBTZXJ2aWNlU3BlYyBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhIHVzZXIgY3JlYXRlcyBvbiBhIHNlcnZpY2UuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU3BlYyB7XG4gIC8qKlxuICAgKiBjbHVzdGVySVAgaXMgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZpY2UgYW5kIGlzIHVzdWFsbHkgYXNzaWduZWQgcmFuZG9tbHkgYnkgdGhlIG1hc3Rlci4gSWYgYW4gYWRkcmVzcyBpcyBzcGVjaWZpZWQgbWFudWFsbHkgYW5kIGlzIG5vdCBpbiB1c2UgYnkgb3RoZXJzLCBpdCB3aWxsIGJlIGFsbG9jYXRlZCB0byB0aGUgc2VydmljZTsgb3RoZXJ3aXNlLCBjcmVhdGlvbiBvZiB0aGUgc2VydmljZSB3aWxsIGZhaWwuIFRoaXMgZmllbGQgY2FuIG5vdCBiZSBjaGFuZ2VkIHRocm91Z2ggdXBkYXRlcy4gVmFsaWQgdmFsdWVzIGFyZSBcIk5vbmVcIiwgZW1wdHkgc3RyaW5nIChcIlwiKSwgb3IgYSB2YWxpZCBJUCBhZGRyZXNzLiBcIk5vbmVcIiBjYW4gYmUgc3BlY2lmaWVkIGZvciBoZWFkbGVzcyBzZXJ2aWNlcyB3aGVuIHByb3h5aW5nIGlzIG5vdCByZXF1aXJlZC4gT25seSBhcHBsaWVzIHRvIHR5cGVzIENsdXN0ZXJJUCwgTm9kZVBvcnQsIGFuZCBMb2FkQmFsYW5jZXIuIElnbm9yZWQgaWYgdHlwZSBpcyBFeHRlcm5hbE5hbWUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9zZXJ2aWNlLyN2aXJ0dWFsLWlwcy1hbmQtc2VydmljZS1wcm94aWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VTcGVjI2NsdXN0ZXJJUFxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlcklQPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBleHRlcm5hbElQcyBpcyBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIGZvciB3aGljaCBub2RlcyBpbiB0aGUgY2x1c3RlciB3aWxsIGFsc28gYWNjZXB0IHRyYWZmaWMgZm9yIHRoaXMgc2VydmljZS4gIFRoZXNlIElQcyBhcmUgbm90IG1hbmFnZWQgYnkgS3ViZXJuZXRlcy4gIFRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRyYWZmaWMgYXJyaXZlcyBhdCBhIG5vZGUgd2l0aCB0aGlzIElQLiAgQSBjb21tb24gZXhhbXBsZSBpcyBleHRlcm5hbCBsb2FkLWJhbGFuY2VycyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgS3ViZXJuZXRlcyBzeXN0ZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VTcGVjI2V4dGVybmFsSVBzXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbElQcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBleHRlcm5hbE5hbWUgaXMgdGhlIGV4dGVybmFsIHJlZmVyZW5jZSB0aGF0IGt1YmVkbnMgb3IgZXF1aXZhbGVudCB3aWxsIHJldHVybiBhcyBhIENOQU1FIHJlY29yZCBmb3IgdGhpcyBzZXJ2aWNlLiBObyBwcm94eWluZyB3aWxsIGJlIGludm9sdmVkLiBNdXN0IGJlIGEgdmFsaWQgUkZDLTExMjMgaG9zdG5hbWUgKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMTIzKSBhbmQgcmVxdWlyZXMgVHlwZSB0byBiZSBFeHRlcm5hbE5hbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VTcGVjI2V4dGVybmFsTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBleHRlcm5hbFRyYWZmaWNQb2xpY3kgZGVub3RlcyBpZiB0aGlzIFNlcnZpY2UgZGVzaXJlcyB0byByb3V0ZSBleHRlcm5hbCB0cmFmZmljIHRvIG5vZGUtbG9jYWwgb3IgY2x1c3Rlci13aWRlIGVuZHBvaW50cy4gXCJMb2NhbFwiIHByZXNlcnZlcyB0aGUgY2xpZW50IHNvdXJjZSBJUCBhbmQgYXZvaWRzIGEgc2Vjb25kIGhvcCBmb3IgTG9hZEJhbGFuY2VyIGFuZCBOb2RlcG9ydCB0eXBlIHNlcnZpY2VzLCBidXQgcmlza3MgcG90ZW50aWFsbHkgaW1iYWxhbmNlZCB0cmFmZmljIHNwcmVhZGluZy4gXCJDbHVzdGVyXCIgb2JzY3VyZXMgdGhlIGNsaWVudCBzb3VyY2UgSVAgYW5kIG1heSBjYXVzZSBhIHNlY29uZCBob3AgdG8gYW5vdGhlciBub2RlLCBidXQgc2hvdWxkIGhhdmUgZ29vZCBvdmVyYWxsIGxvYWQtc3ByZWFkaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlU3BlYyNleHRlcm5hbFRyYWZmaWNQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsVHJhZmZpY1BvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogaGVhbHRoQ2hlY2tOb2RlUG9ydCBzcGVjaWZpZXMgdGhlIGhlYWx0aGNoZWNrIG5vZGVQb3J0IGZvciB0aGUgc2VydmljZS4gSWYgbm90IHNwZWNpZmllZCwgSGVhbHRoQ2hlY2tOb2RlUG9ydCBpcyBjcmVhdGVkIGJ5IHRoZSBzZXJ2aWNlIGFwaSBiYWNrZW5kIHdpdGggdGhlIGFsbG9jYXRlZCBub2RlUG9ydC4gV2lsbCB1c2UgdXNlci1zcGVjaWZpZWQgbm9kZVBvcnQgdmFsdWUgaWYgc3BlY2lmaWVkIGJ5IHRoZSBjbGllbnQuIE9ubHkgZWZmZWN0cyB3aGVuIFR5cGUgaXMgc2V0IHRvIExvYWRCYWxhbmNlciBhbmQgRXh0ZXJuYWxUcmFmZmljUG9saWN5IGlzIHNldCB0byBMb2NhbC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZVNwZWMjaGVhbHRoQ2hlY2tOb2RlUG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2tOb2RlUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogT25seSBhcHBsaWVzIHRvIFNlcnZpY2UgVHlwZTogTG9hZEJhbGFuY2VyIExvYWRCYWxhbmNlciB3aWxsIGdldCBjcmVhdGVkIHdpdGggdGhlIElQIHNwZWNpZmllZCBpbiB0aGlzIGZpZWxkLiBUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGNsb3VkLXByb3ZpZGVyIHN1cHBvcnRzIHNwZWNpZnlpbmcgdGhlIGxvYWRCYWxhbmNlcklQIHdoZW4gYSBsb2FkIGJhbGFuY2VyIGlzIGNyZWF0ZWQuIFRoaXMgZmllbGQgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZSBjbG91ZC1wcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlU3BlYyNsb2FkQmFsYW5jZXJJUFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VySVA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNwZWNpZmllZCBhbmQgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSwgdGhpcyB3aWxsIHJlc3RyaWN0IHRyYWZmaWMgdGhyb3VnaCB0aGUgY2xvdWQtcHJvdmlkZXIgbG9hZC1iYWxhbmNlciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBjbGllbnQgSVBzLiBUaGlzIGZpZWxkIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUgY2xvdWQtcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmVhdHVyZS5cIiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3Rhc2tzL2FjY2Vzcy1hcHBsaWNhdGlvbi1jbHVzdGVyL2NvbmZpZ3VyZS1jbG91ZC1wcm92aWRlci1maXJld2FsbC9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZVNwZWMjbG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcG9ydHMgdGhhdCBhcmUgZXhwb3NlZCBieSB0aGlzIHNlcnZpY2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9zZXJ2aWNlLyN2aXJ0dWFsLWlwcy1hbmQtc2VydmljZS1wcm94aWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VTcGVjI3BvcnRzXG4gICAqL1xuICByZWFkb25seSBwb3J0cz86IFNlcnZpY2VQb3J0W107XG5cbiAgLyoqXG4gICAqIHB1Ymxpc2hOb3RSZWFkeUFkZHJlc3Nlcywgd2hlbiBzZXQgdG8gdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgRE5TIGltcGxlbWVudGF0aW9ucyBtdXN0IHB1Ymxpc2ggdGhlIG5vdFJlYWR5QWRkcmVzc2VzIG9mIHN1YnNldHMgZm9yIHRoZSBFbmRwb2ludHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZXJ2aWNlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4gVGhlIHByaW1hcnkgdXNlIGNhc2UgZm9yIHNldHRpbmcgdGhpcyBmaWVsZCBpcyB0byB1c2UgYSBTdGF0ZWZ1bFNldCdzIEhlYWRsZXNzIFNlcnZpY2UgdG8gcHJvcGFnYXRlIFNSViByZWNvcmRzIGZvciBpdHMgUG9kcyB3aXRob3V0IHJlc3BlY3QgdG8gdGhlaXIgcmVhZGluZXNzIGZvciBwdXJwb3NlIG9mIHBlZXIgZGlzY292ZXJ5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlU3BlYyNwdWJsaXNoTm90UmVhZHlBZGRyZXNzZXNcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hOb3RSZWFkeUFkZHJlc3Nlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJvdXRlIHNlcnZpY2UgdHJhZmZpYyB0byBwb2RzIHdpdGggbGFiZWwga2V5cyBhbmQgdmFsdWVzIG1hdGNoaW5nIHRoaXMgc2VsZWN0b3IuIElmIGVtcHR5IG9yIG5vdCBwcmVzZW50LCB0aGUgc2VydmljZSBpcyBhc3N1bWVkIHRvIGhhdmUgYW4gZXh0ZXJuYWwgcHJvY2VzcyBtYW5hZ2luZyBpdHMgZW5kcG9pbnRzLCB3aGljaCBLdWJlcm5ldGVzIHdpbGwgbm90IG1vZGlmeS4gT25seSBhcHBsaWVzIHRvIHR5cGVzIENsdXN0ZXJJUCwgTm9kZVBvcnQsIGFuZCBMb2FkQmFsYW5jZXIuIElnbm9yZWQgaWYgdHlwZSBpcyBFeHRlcm5hbE5hbWUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9zZXJ2aWNlL1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlU3BlYyNzZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0b3I/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBcIkNsaWVudElQXCIgYW5kIFwiTm9uZVwiLiBVc2VkIHRvIG1haW50YWluIHNlc3Npb24gYWZmaW5pdHkuIEVuYWJsZSBjbGllbnQgSVAgYmFzZWQgc2Vzc2lvbiBhZmZpbml0eS4gTXVzdCBiZSBDbGllbnRJUCBvciBOb25lLiBEZWZhdWx0cyB0byBOb25lLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3NlcnZpY2VzLW5ldHdvcmtpbmcvc2VydmljZS8jdmlydHVhbC1pcHMtYW5kLXNlcnZpY2UtcHJveGllc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3NlcnZpY2VzLW5ldHdvcmtpbmcvc2VydmljZS8jdmlydHVhbC1pcHMtYW5kLXNlcnZpY2UtcHJveGllc1xuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlU3BlYyNzZXNzaW9uQWZmaW5pdHlcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25BZmZpbml0eT86IHN0cmluZztcblxuICAvKipcbiAgICogc2Vzc2lvbkFmZmluaXR5Q29uZmlnIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9ucyBvZiBzZXNzaW9uIGFmZmluaXR5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlU3BlYyNzZXNzaW9uQWZmaW5pdHlDb25maWdcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25BZmZpbml0eUNvbmZpZz86IFNlc3Npb25BZmZpbml0eUNvbmZpZztcblxuICAvKipcbiAgICogdHlwZSBkZXRlcm1pbmVzIGhvdyB0aGUgU2VydmljZSBpcyBleHBvc2VkLiBEZWZhdWx0cyB0byBDbHVzdGVySVAuIFZhbGlkIG9wdGlvbnMgYXJlIEV4dGVybmFsTmFtZSwgQ2x1c3RlcklQLCBOb2RlUG9ydCwgYW5kIExvYWRCYWxhbmNlci4gXCJFeHRlcm5hbE5hbWVcIiBtYXBzIHRvIHRoZSBzcGVjaWZpZWQgZXh0ZXJuYWxOYW1lLiBcIkNsdXN0ZXJJUFwiIGFsbG9jYXRlcyBhIGNsdXN0ZXItaW50ZXJuYWwgSVAgYWRkcmVzcyBmb3IgbG9hZC1iYWxhbmNpbmcgdG8gZW5kcG9pbnRzLiBFbmRwb2ludHMgYXJlIGRldGVybWluZWQgYnkgdGhlIHNlbGVjdG9yIG9yIGlmIHRoYXQgaXMgbm90IHNwZWNpZmllZCwgYnkgbWFudWFsIGNvbnN0cnVjdGlvbiBvZiBhbiBFbmRwb2ludHMgb2JqZWN0LiBJZiBjbHVzdGVySVAgaXMgXCJOb25lXCIsIG5vIHZpcnR1YWwgSVAgaXMgYWxsb2NhdGVkIGFuZCB0aGUgZW5kcG9pbnRzIGFyZSBwdWJsaXNoZWQgYXMgYSBzZXQgb2YgZW5kcG9pbnRzIHJhdGhlciB0aGFuIGEgc3RhYmxlIElQLiBcIk5vZGVQb3J0XCIgYnVpbGRzIG9uIENsdXN0ZXJJUCBhbmQgYWxsb2NhdGVzIGEgcG9ydCBvbiBldmVyeSBub2RlIHdoaWNoIHJvdXRlcyB0byB0aGUgY2x1c3RlcklQLiBcIkxvYWRCYWxhbmNlclwiIGJ1aWxkcyBvbiBOb2RlUG9ydCBhbmQgY3JlYXRlcyBhbiBleHRlcm5hbCBsb2FkLWJhbGFuY2VyIChpZiBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgY2xvdWQpIHdoaWNoIHJvdXRlcyB0byB0aGUgY2x1c3RlcklQLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3NlcnZpY2VzLW5ldHdvcmtpbmcvc2VydmljZS8jcHVibGlzaGluZy1zZXJ2aWNlcy1zZXJ2aWNlLXR5cGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IENsdXN0ZXJJUC4gVmFsaWQgb3B0aW9ucyBhcmUgRXh0ZXJuYWxOYW1lLCBDbHVzdGVySVAsIE5vZGVQb3J0LCBhbmQgTG9hZEJhbGFuY2VyLiBcIkV4dGVybmFsTmFtZVwiIG1hcHMgdG8gdGhlIHNwZWNpZmllZCBleHRlcm5hbE5hbWUuIFwiQ2x1c3RlcklQXCIgYWxsb2NhdGVzIGEgY2x1c3Rlci1pbnRlcm5hbCBJUCBhZGRyZXNzIGZvciBsb2FkLWJhbGFuY2luZyB0byBlbmRwb2ludHMuIEVuZHBvaW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgc2VsZWN0b3Igb3IgaWYgdGhhdCBpcyBub3Qgc3BlY2lmaWVkLCBieSBtYW51YWwgY29uc3RydWN0aW9uIG9mIGFuIEVuZHBvaW50cyBvYmplY3QuIElmIGNsdXN0ZXJJUCBpcyBcIk5vbmVcIiwgbm8gdmlydHVhbCBJUCBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBlbmRwb2ludHMgYXJlIHB1Ymxpc2hlZCBhcyBhIHNldCBvZiBlbmRwb2ludHMgcmF0aGVyIHRoYW4gYSBzdGFibGUgSVAuIFwiTm9kZVBvcnRcIiBidWlsZHMgb24gQ2x1c3RlcklQIGFuZCBhbGxvY2F0ZXMgYSBwb3J0IG9uIGV2ZXJ5IG5vZGUgd2hpY2ggcm91dGVzIHRvIHRoZSBjbHVzdGVySVAuIFwiTG9hZEJhbGFuY2VyXCIgYnVpbGRzIG9uIE5vZGVQb3J0IGFuZCBjcmVhdGVzIGFuIGV4dGVybmFsIGxvYWQtYmFsYW5jZXIgKGlmIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBjbG91ZCkgd2hpY2ggcm91dGVzIHRvIHRoZSBjbHVzdGVySVAuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9zZXJ2aWNlLyNwdWJsaXNoaW5nLXNlcnZpY2VzLXNlcnZpY2UtdHlwZXNcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZVNwZWMjdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIExvY2FsT2JqZWN0UmVmZXJlbmNlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbiB0byBsZXQgeW91IGxvY2F0ZSB0aGUgcmVmZXJlbmNlZCBvYmplY3QgaW5zaWRlIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsT2JqZWN0UmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJlZmVyZW50LiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogSW5ncmVzc1NwZWMgZGVzY3JpYmVzIHRoZSBJbmdyZXNzIHRoZSB1c2VyIHdpc2hlcyB0byBleGlzdC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5ncmVzc1NwZWMge1xuICAvKipcbiAgICogQSBkZWZhdWx0IGJhY2tlbmQgY2FwYWJsZSBvZiBzZXJ2aWNpbmcgcmVxdWVzdHMgdGhhdCBkb24ndCBtYXRjaCBhbnkgcnVsZS4gQXQgbGVhc3Qgb25lIG9mICdiYWNrZW5kJyBvciAncnVsZXMnIG11c3QgYmUgc3BlY2lmaWVkLiBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsIHRvIGFsbG93IHRoZSBsb2FkYmFsYW5jZXIgY29udHJvbGxlciBvciBkZWZhdWx0aW5nIGxvZ2ljIHRvIHNwZWNpZnkgYSBnbG9iYWwgZGVmYXVsdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzU3BlYyNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kPzogSW5ncmVzc0JhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBob3N0IHJ1bGVzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBJbmdyZXNzLiBJZiB1bnNwZWNpZmllZCwgb3Igbm8gcnVsZSBtYXRjaGVzLCBhbGwgdHJhZmZpYyBpcyBzZW50IHRvIHRoZSBkZWZhdWx0IGJhY2tlbmQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc1NwZWMjcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogSW5ncmVzc1J1bGVbXTtcblxuICAvKipcbiAgICogVExTIGNvbmZpZ3VyYXRpb24uIEN1cnJlbnRseSB0aGUgSW5ncmVzcyBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIFRMUyBwb3J0LCA0NDMuIElmIG11bHRpcGxlIG1lbWJlcnMgb2YgdGhpcyBsaXN0IHNwZWNpZnkgZGlmZmVyZW50IGhvc3RzLCB0aGV5IHdpbGwgYmUgbXVsdGlwbGV4ZWQgb24gdGhlIHNhbWUgcG9ydCBhY2NvcmRpbmcgdG8gdGhlIGhvc3RuYW1lIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBTTkkgVExTIGV4dGVuc2lvbiwgaWYgdGhlIGluZ3Jlc3MgY29udHJvbGxlciBmdWxmaWxsaW5nIHRoZSBpbmdyZXNzIHN1cHBvcnRzIFNOSS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzU3BlYyN0bHNcbiAgICovXG4gIHJlYWRvbmx5IHRscz86IEluZ3Jlc3NUbHNbXTtcblxufVxuXG4vKipcbiAqIE5ldHdvcmtQb2xpY3lTcGVjIHByb3ZpZGVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgTmV0d29ya1BvbGljeVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1BvbGljeVNwZWMge1xuICAvKipcbiAgICogTGlzdCBvZiBlZ3Jlc3MgcnVsZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgc2VsZWN0ZWQgcG9kcy4gT3V0Z29pbmcgdHJhZmZpYyBpcyBhbGxvd2VkIGlmIHRoZXJlIGFyZSBubyBOZXR3b3JrUG9saWNpZXMgc2VsZWN0aW5nIHRoZSBwb2QgKGFuZCBjbHVzdGVyIHBvbGljeSBvdGhlcndpc2UgYWxsb3dzIHRoZSB0cmFmZmljKSwgT1IgaWYgdGhlIHRyYWZmaWMgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgZWdyZXNzIHJ1bGUgYWNyb3NzIGFsbCBvZiB0aGUgTmV0d29ya1BvbGljeSBvYmplY3RzIHdob3NlIHBvZFNlbGVjdG9yIG1hdGNoZXMgdGhlIHBvZC4gSWYgdGhpcyBmaWVsZCBpcyBlbXB0eSB0aGVuIHRoaXMgTmV0d29ya1BvbGljeSBsaW1pdHMgYWxsIG91dGdvaW5nIHRyYWZmaWMgKGFuZCBzZXJ2ZXMgc29sZWx5IHRvIGVuc3VyZSB0aGF0IHRoZSBwb2RzIGl0IHNlbGVjdHMgYXJlIGlzb2xhdGVkIGJ5IGRlZmF1bHQpLiBUaGlzIGZpZWxkIGlzIGJldGEtbGV2ZWwgaW4gMS44XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lTcGVjI2VncmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgZWdyZXNzPzogTmV0d29ya1BvbGljeUVncmVzc1J1bGVbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBpbmdyZXNzIHJ1bGVzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNlbGVjdGVkIHBvZHMuIFRyYWZmaWMgaXMgYWxsb3dlZCB0byBhIHBvZCBpZiB0aGVyZSBhcmUgbm8gTmV0d29ya1BvbGljaWVzIHNlbGVjdGluZyB0aGUgcG9kIChhbmQgY2x1c3RlciBwb2xpY3kgb3RoZXJ3aXNlIGFsbG93cyB0aGUgdHJhZmZpYyksIE9SIGlmIHRoZSB0cmFmZmljIHNvdXJjZSBpcyB0aGUgcG9kJ3MgbG9jYWwgbm9kZSwgT1IgaWYgdGhlIHRyYWZmaWMgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgaW5ncmVzcyBydWxlIGFjcm9zcyBhbGwgb2YgdGhlIE5ldHdvcmtQb2xpY3kgb2JqZWN0cyB3aG9zZSBwb2RTZWxlY3RvciBtYXRjaGVzIHRoZSBwb2QuIElmIHRoaXMgZmllbGQgaXMgZW1wdHkgdGhlbiB0aGlzIE5ldHdvcmtQb2xpY3kgZG9lcyBub3QgYWxsb3cgYW55IHRyYWZmaWMgKGFuZCBzZXJ2ZXMgc29sZWx5IHRvIGVuc3VyZSB0aGF0IHRoZSBwb2RzIGl0IHNlbGVjdHMgYXJlIGlzb2xhdGVkIGJ5IGRlZmF1bHQpXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lTcGVjI2luZ3Jlc3NcbiAgICovXG4gIHJlYWRvbmx5IGluZ3Jlc3M/OiBOZXR3b3JrUG9saWN5SW5ncmVzc1J1bGVbXTtcblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgcG9kcyB0byB3aGljaCB0aGlzIE5ldHdvcmtQb2xpY3kgb2JqZWN0IGFwcGxpZXMuIFRoZSBhcnJheSBvZiBpbmdyZXNzIHJ1bGVzIGlzIGFwcGxpZWQgdG8gYW55IHBvZHMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZC4gTXVsdGlwbGUgbmV0d29yayBwb2xpY2llcyBjYW4gc2VsZWN0IHRoZSBzYW1lIHNldCBvZiBwb2RzLiBJbiB0aGlzIGNhc2UsIHRoZSBpbmdyZXNzIHJ1bGVzIGZvciBlYWNoIGFyZSBjb21iaW5lZCBhZGRpdGl2ZWx5LiBUaGlzIGZpZWxkIGlzIE5PVCBvcHRpb25hbCBhbmQgZm9sbG93cyBzdGFuZGFyZCBsYWJlbCBzZWxlY3RvciBzZW1hbnRpY3MuIEFuIGVtcHR5IHBvZFNlbGVjdG9yIG1hdGNoZXMgYWxsIHBvZHMgaW4gdGhpcyBuYW1lc3BhY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lTcGVjI3BvZFNlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBwb2RTZWxlY3RvcjogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogTGlzdCBvZiBydWxlIHR5cGVzIHRoYXQgdGhlIE5ldHdvcmtQb2xpY3kgcmVsYXRlcyB0by4gVmFsaWQgb3B0aW9ucyBhcmUgXCJJbmdyZXNzXCIsIFwiRWdyZXNzXCIsIG9yIFwiSW5ncmVzcyxFZ3Jlc3NcIi4gSWYgdGhpcyBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgYmFzZWQgb24gdGhlIGV4aXN0ZW5jZSBvZiBJbmdyZXNzIG9yIEVncmVzcyBydWxlczsgcG9saWNpZXMgdGhhdCBjb250YWluIGFuIEVncmVzcyBzZWN0aW9uIGFyZSBhc3N1bWVkIHRvIGFmZmVjdCBFZ3Jlc3MsIGFuZCBhbGwgcG9saWNpZXMgKHdoZXRoZXIgb3Igbm90IHRoZXkgY29udGFpbiBhbiBJbmdyZXNzIHNlY3Rpb24pIGFyZSBhc3N1bWVkIHRvIGFmZmVjdCBJbmdyZXNzLiBJZiB5b3Ugd2FudCB0byB3cml0ZSBhbiBlZ3Jlc3Mtb25seSBwb2xpY3ksIHlvdSBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBwb2xpY3lUeXBlcyBbIFwiRWdyZXNzXCIgXS4gTGlrZXdpc2UsIGlmIHlvdSB3YW50IHRvIHdyaXRlIGEgcG9saWN5IHRoYXQgc3BlY2lmaWVzIHRoYXQgbm8gZWdyZXNzIGlzIGFsbG93ZWQsIHlvdSBtdXN0IHNwZWNpZnkgYSBwb2xpY3lUeXBlcyB2YWx1ZSB0aGF0IGluY2x1ZGUgXCJFZ3Jlc3NcIiAoc2luY2Ugc3VjaCBhIHBvbGljeSB3b3VsZCBub3QgaW5jbHVkZSBhbiBFZ3Jlc3Mgc2VjdGlvbiBhbmQgd291bGQgb3RoZXJ3aXNlIGRlZmF1bHQgdG8ganVzdCBbIFwiSW5ncmVzc1wiIF0pLiBUaGlzIGZpZWxkIGlzIGJldGEtbGV2ZWwgaW4gMS44XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lTcGVjI3BvbGljeVR5cGVzXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lUeXBlcz86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogUG9kU2VjdXJpdHlQb2xpY3lTcGVjIGRlZmluZXMgdGhlIHBvbGljeSBlbmZvcmNlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9kU2VjdXJpdHlQb2xpY3lTcGVjIHtcbiAgLyoqXG4gICAqIGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiBkZXRlcm1pbmVzIGlmIGEgcG9kIGNhbiByZXF1ZXN0IHRvIGFsbG93IHByaXZpbGVnZSBlc2NhbGF0aW9uLiBJZiB1bnNwZWNpZmllZCwgZGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNhbGxvd1ByaXZpbGVnZUVzY2FsYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93ZWRDU0lEcml2ZXJzIGlzIGEgd2hpdGVsaXN0IG9mIGlubGluZSBDU0kgZHJpdmVycyB0aGF0IG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gYmUgZW1iZWRkZWQgd2l0aGluIGEgcG9kIHNwZWMuIEFuIGVtcHR5IHZhbHVlIGluZGljYXRlcyB0aGF0IGFueSBDU0kgZHJpdmVyIGNhbiBiZSB1c2VkIGZvciBpbmxpbmUgZXBoZW1lcmFsIHZvbHVtZXMuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQsIGFuZCBpcyBvbmx5IGhvbm9yZWQgaWYgdGhlIEFQSSBzZXJ2ZXIgZW5hYmxlcyB0aGUgQ1NJSW5saW5lVm9sdW1lIGZlYXR1cmUgZ2F0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNhbGxvd2VkQ1NJRHJpdmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZENTSURyaXZlcnM/OiBBbGxvd2VkQ3NpRHJpdmVyW107XG5cbiAgLyoqXG4gICAqIGFsbG93ZWRDYXBhYmlsaXRpZXMgaXMgYSBsaXN0IG9mIGNhcGFiaWxpdGllcyB0aGF0IGNhbiBiZSByZXF1ZXN0ZWQgdG8gYWRkIHRvIHRoZSBjb250YWluZXIuIENhcGFiaWxpdGllcyBpbiB0aGlzIGZpZWxkIG1heSBiZSBhZGRlZCBhdCB0aGUgcG9kIGF1dGhvcidzIGRpc2NyZXRpb24uIFlvdSBtdXN0IG5vdCBsaXN0IGEgY2FwYWJpbGl0eSBpbiBib3RoIGFsbG93ZWRDYXBhYmlsaXRpZXMgYW5kIHJlcXVpcmVkRHJvcENhcGFiaWxpdGllcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNhbGxvd2VkQ2FwYWJpbGl0aWVzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkQ2FwYWJpbGl0aWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIGFsbG93ZWRGbGV4Vm9sdW1lcyBpcyBhIHdoaXRlbGlzdCBvZiBhbGxvd2VkIEZsZXh2b2x1bWVzLiAgRW1wdHkgb3IgbmlsIGluZGljYXRlcyB0aGF0IGFsbCBGbGV4dm9sdW1lcyBtYXkgYmUgdXNlZC4gIFRoaXMgcGFyYW1ldGVyIGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gdGhlIHVzYWdlIG9mIHRoZSBGbGV4dm9sdW1lcyBpcyBhbGxvd2VkIGluIHRoZSBcInZvbHVtZXNcIiBmaWVsZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNhbGxvd2VkRmxleFZvbHVtZXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRGbGV4Vm9sdW1lcz86IEFsbG93ZWRGbGV4Vm9sdW1lW107XG5cbiAgLyoqXG4gICAqIGFsbG93ZWRIb3N0UGF0aHMgaXMgYSB3aGl0ZSBsaXN0IG9mIGFsbG93ZWQgaG9zdCBwYXRocy4gRW1wdHkgaW5kaWNhdGVzIHRoYXQgYWxsIGhvc3QgcGF0aHMgbWF5IGJlIHVzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVNwZWMjYWxsb3dlZEhvc3RQYXRoc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZEhvc3RQYXRocz86IEFsbG93ZWRIb3N0UGF0aFtdO1xuXG4gIC8qKlxuICAgKiBBbGxvd2VkUHJvY01vdW50VHlwZXMgaXMgYSB3aGl0ZWxpc3Qgb2YgYWxsb3dlZCBQcm9jTW91bnRUeXBlcy4gRW1wdHkgb3IgbmlsIGluZGljYXRlcyB0aGF0IG9ubHkgdGhlIERlZmF1bHRQcm9jTW91bnRUeXBlIG1heSBiZSB1c2VkLiBUaGlzIHJlcXVpcmVzIHRoZSBQcm9jTW91bnRUeXBlIGZlYXR1cmUgZmxhZyB0byBiZSBlbmFibGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI2FsbG93ZWRQcm9jTW91bnRUeXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFByb2NNb3VudFR5cGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIGFsbG93ZWRVbnNhZmVTeXNjdGxzIGlzIGEgbGlzdCBvZiBleHBsaWNpdGx5IGFsbG93ZWQgdW5zYWZlIHN5c2N0bHMsIGRlZmF1bHRzIHRvIG5vbmUuIEVhY2ggZW50cnkgaXMgZWl0aGVyIGEgcGxhaW4gc3lzY3RsIG5hbWUgb3IgZW5kcyBpbiBcIipcIiBpbiB3aGljaCBjYXNlIGl0IGlzIGNvbnNpZGVyZWQgYXMgYSBwcmVmaXggb2YgYWxsb3dlZCBzeXNjdGxzLiBTaW5nbGUgKiBtZWFucyBhbGwgdW5zYWZlIHN5c2N0bHMgYXJlIGFsbG93ZWQuIEt1YmVsZXQgaGFzIHRvIHdoaXRlbGlzdCBhbGwgYWxsb3dlZCB1bnNhZmUgc3lzY3RscyBleHBsaWNpdGx5IHRvIGF2b2lkIHJlamVjdGlvbi5cblxuRXhhbXBsZXM6IGUuZy4gXCJmb28vKlwiIGFsbG93cyBcImZvby9iYXJcIiwgXCJmb28vYmF6XCIsIGV0Yy4gZS5nLiBcImZvby4qXCIgYWxsb3dzIFwiZm9vLmJhclwiLCBcImZvby5iYXpcIiwgZXRjLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI2FsbG93ZWRVbnNhZmVTeXNjdGxzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkVW5zYWZlU3lzY3Rscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0QWRkQ2FwYWJpbGl0aWVzIGlzIHRoZSBkZWZhdWx0IHNldCBvZiBjYXBhYmlsaXRpZXMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb250YWluZXIgdW5sZXNzIHRoZSBwb2Qgc3BlYyBzcGVjaWZpY2FsbHkgZHJvcHMgdGhlIGNhcGFiaWxpdHkuICBZb3UgbWF5IG5vdCBsaXN0IGEgY2FwYWJpbGl0eSBpbiBib3RoIGRlZmF1bHRBZGRDYXBhYmlsaXRpZXMgYW5kIHJlcXVpcmVkRHJvcENhcGFiaWxpdGllcy4gQ2FwYWJpbGl0aWVzIGFkZGVkIGhlcmUgYXJlIGltcGxpY2l0bHkgYWxsb3dlZCwgYW5kIG5lZWQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBhbGxvd2VkQ2FwYWJpbGl0aWVzIGxpc3QuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVNwZWMjZGVmYXVsdEFkZENhcGFiaWxpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFkZENhcGFiaWxpdGllcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0QWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIGNvbnRyb2xzIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHdoZXRoZXIgYSBwcm9jZXNzIGNhbiBnYWluIG1vcmUgcHJpdmlsZWdlcyB0aGFuIGl0cyBwYXJlbnQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNkZWZhdWx0QWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogZm9yYmlkZGVuU3lzY3RscyBpcyBhIGxpc3Qgb2YgZXhwbGljaXRseSBmb3JiaWRkZW4gc3lzY3RscywgZGVmYXVsdHMgdG8gbm9uZS4gRWFjaCBlbnRyeSBpcyBlaXRoZXIgYSBwbGFpbiBzeXNjdGwgbmFtZSBvciBlbmRzIGluIFwiKlwiIGluIHdoaWNoIGNhc2UgaXQgaXMgY29uc2lkZXJlZCBhcyBhIHByZWZpeCBvZiBmb3JiaWRkZW4gc3lzY3Rscy4gU2luZ2xlICogbWVhbnMgYWxsIHN5c2N0bHMgYXJlIGZvcmJpZGRlbi5cblxuRXhhbXBsZXM6IGUuZy4gXCJmb28vKlwiIGZvcmJpZHMgXCJmb28vYmFyXCIsIFwiZm9vL2JhelwiLCBldGMuIGUuZy4gXCJmb28uKlwiIGZvcmJpZHMgXCJmb28uYmFyXCIsIFwiZm9vLmJhelwiLCBldGMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVNwZWMjZm9yYmlkZGVuU3lzY3Rsc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9yYmlkZGVuU3lzY3Rscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBmc0dyb3VwIGlzIHRoZSBzdHJhdGVneSB0aGF0IHdpbGwgZGljdGF0ZSB3aGF0IGZzIGdyb3VwIGlzIHVzZWQgYnkgdGhlIFNlY3VyaXR5Q29udGV4dC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNmc0dyb3VwXG4gICAqL1xuICByZWFkb25seSBmc0dyb3VwOiBGc0dyb3VwU3RyYXRlZ3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBob3N0SVBDIGRldGVybWluZXMgaWYgdGhlIHBvbGljeSBhbGxvd3MgdGhlIHVzZSBvZiBIb3N0SVBDIGluIHRoZSBwb2Qgc3BlYy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNob3N0SVBDXG4gICAqL1xuICByZWFkb25seSBob3N0SVBDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogaG9zdE5ldHdvcmsgZGV0ZXJtaW5lcyBpZiB0aGUgcG9saWN5IGFsbG93cyB0aGUgdXNlIG9mIEhvc3ROZXR3b3JrIGluIHRoZSBwb2Qgc3BlYy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNob3N0TmV0d29ya1xuICAgKi9cbiAgcmVhZG9ubHkgaG9zdE5ldHdvcms/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBob3N0UElEIGRldGVybWluZXMgaWYgdGhlIHBvbGljeSBhbGxvd3MgdGhlIHVzZSBvZiBIb3N0UElEIGluIHRoZSBwb2Qgc3BlYy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNob3N0UElEXG4gICAqL1xuICByZWFkb25seSBob3N0UElEPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogaG9zdFBvcnRzIGRldGVybWluZXMgd2hpY2ggaG9zdCBwb3J0IHJhbmdlcyBhcmUgYWxsb3dlZCB0byBiZSBleHBvc2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI2hvc3RQb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgaG9zdFBvcnRzPzogSG9zdFBvcnRSYW5nZVtdO1xuXG4gIC8qKlxuICAgKiBwcml2aWxlZ2VkIGRldGVybWluZXMgaWYgYSBwb2QgY2FuIHJlcXVlc3QgdG8gYmUgcnVuIGFzIHByaXZpbGVnZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVNwZWMjcHJpdmlsZWdlZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0gd2hlbiBzZXQgdG8gdHJ1ZSB3aWxsIGZvcmNlIGNvbnRhaW5lcnMgdG8gcnVuIHdpdGggYSByZWFkIG9ubHkgcm9vdCBmaWxlIHN5c3RlbS4gIElmIHRoZSBjb250YWluZXIgc3BlY2lmaWNhbGx5IHJlcXVlc3RzIHRvIHJ1biB3aXRoIGEgbm9uLXJlYWQgb25seSByb290IGZpbGUgc3lzdGVtIHRoZSBQU1Agc2hvdWxkIGRlbnkgdGhlIHBvZC4gSWYgc2V0IHRvIGZhbHNlIHRoZSBjb250YWluZXIgbWF5IHJ1biB3aXRoIGEgcmVhZCBvbmx5IHJvb3QgZmlsZSBzeXN0ZW0gaWYgaXQgd2lzaGVzIGJ1dCBpdCB3aWxsIG5vdCBiZSBmb3JjZWQgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVNwZWMjcmVhZE9ubHlSb290RmlsZXN5c3RlbVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHlSb290RmlsZXN5c3RlbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHJlcXVpcmVkRHJvcENhcGFiaWxpdGllcyBhcmUgdGhlIGNhcGFiaWxpdGllcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBmcm9tIHRoZSBjb250YWluZXIuICBUaGVzZSBhcmUgcmVxdWlyZWQgdG8gYmUgZHJvcHBlZCBhbmQgY2Fubm90IGJlIGFkZGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI3JlcXVpcmVkRHJvcENhcGFiaWxpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWREcm9wQ2FwYWJpbGl0aWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJ1bkFzR3JvdXAgaXMgdGhlIHN0cmF0ZWd5IHRoYXQgd2lsbCBkaWN0YXRlIHRoZSBhbGxvd2FibGUgUnVuQXNHcm91cCB2YWx1ZXMgdGhhdCBtYXkgYmUgc2V0LiBJZiB0aGlzIGZpZWxkIGlzIG9taXR0ZWQsIHRoZSBwb2QncyBSdW5Bc0dyb3VwIGNhbiB0YWtlIGFueSB2YWx1ZS4gVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgUnVuQXNHcm91cCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNydW5Bc0dyb3VwXG4gICAqL1xuICByZWFkb25seSBydW5Bc0dyb3VwPzogUnVuQXNHcm91cFN0cmF0ZWd5T3B0aW9ucztcblxuICAvKipcbiAgICogcnVuQXNVc2VyIGlzIHRoZSBzdHJhdGVneSB0aGF0IHdpbGwgZGljdGF0ZSB0aGUgYWxsb3dhYmxlIFJ1bkFzVXNlciB2YWx1ZXMgdGhhdCBtYXkgYmUgc2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI3J1bkFzVXNlclxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyOiBSdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIHJ1bnRpbWVDbGFzcyBpcyB0aGUgc3RyYXRlZ3kgdGhhdCB3aWxsIGRpY3RhdGUgdGhlIGFsbG93YWJsZSBSdW50aW1lQ2xhc3NlcyBmb3IgYSBwb2QuIElmIHRoaXMgZmllbGQgaXMgb21pdHRlZCwgdGhlIHBvZCdzIHJ1bnRpbWVDbGFzc05hbWUgZmllbGQgaXMgdW5yZXN0cmljdGVkLiBFbmZvcmNlbWVudCBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIFJ1bnRpbWVDbGFzcyBmZWF0dXJlIGdhdGUgYmVpbmcgZW5hYmxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZFNlY3VyaXR5UG9saWN5U3BlYyNydW50aW1lQ2xhc3NcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVDbGFzcz86IFJ1bnRpbWVDbGFzc1N0cmF0ZWd5T3B0aW9ucztcblxuICAvKipcbiAgICogc2VMaW51eCBpcyB0aGUgc3RyYXRlZ3kgdGhhdCB3aWxsIGRpY3RhdGUgdGhlIGFsbG93YWJsZSBsYWJlbHMgdGhhdCBtYXkgYmUgc2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI3NlTGludXhcbiAgICovXG4gIHJlYWRvbmx5IHNlTGludXg6IFNlTGludXhTdHJhdGVneU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIHN1cHBsZW1lbnRhbEdyb3VwcyBpcyB0aGUgc3RyYXRlZ3kgdGhhdCB3aWxsIGRpY3RhdGUgd2hhdCBzdXBwbGVtZW50YWwgZ3JvdXBzIGFyZSB1c2VkIGJ5IHRoZSBTZWN1cml0eUNvbnRleHQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2RTZWN1cml0eVBvbGljeVNwZWMjc3VwcGxlbWVudGFsR3JvdXBzXG4gICAqL1xuICByZWFkb25seSBzdXBwbGVtZW50YWxHcm91cHM6IFN1cHBsZW1lbnRhbEdyb3Vwc1N0cmF0ZWd5T3B0aW9ucztcblxuICAvKipcbiAgICogdm9sdW1lcyBpcyBhIHdoaXRlIGxpc3Qgb2YgYWxsb3dlZCB2b2x1bWUgcGx1Z2lucy4gRW1wdHkgaW5kaWNhdGVzIHRoYXQgbm8gdm9sdW1lcyBtYXkgYmUgdXNlZC4gVG8gYWxsb3cgYWxsIHZvbHVtZXMgeW91IG1heSB1c2UgJyonLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUG9kU2VjdXJpdHlQb2xpY3lTcGVjI3ZvbHVtZXNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIFJ1bnRpbWVDbGFzc1NwZWMgaXMgYSBzcGVjaWZpY2F0aW9uIG9mIGEgUnVudGltZUNsYXNzLiBJdCBjb250YWlucyBwYXJhbWV0ZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGRlc2NyaWJlIHRoZSBSdW50aW1lQ2xhc3MgdG8gdGhlIENvbnRhaW5lciBSdW50aW1lIEludGVyZmFjZSAoQ1JJKSBpbXBsZW1lbnRhdGlvbiwgYXMgd2VsbCBhcyBhbnkgb3RoZXIgY29tcG9uZW50cyB0aGF0IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBvZCB3aWxsIGJlIHJ1bi4gVGhlIFJ1bnRpbWVDbGFzc1NwZWMgaXMgaW1tdXRhYmxlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5ub2RlLnYxYWxwaGExLlJ1bnRpbWVDbGFzc1NwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lQ2xhc3NTcGVjIHtcbiAgLyoqXG4gICAqIFJ1bnRpbWVIYW5kbGVyIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBydW50aW1lIGFuZCBjb25maWd1cmF0aW9uIHRoYXQgdGhlIENSSSBpbXBsZW1lbnRhdGlvbiB3aWxsIHVzZSB0byBoYW5kbGUgcG9kcyBvZiB0aGlzIGNsYXNzLiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZSBzcGVjaWZpYyB0byB0aGUgbm9kZSAmIENSSSBjb25maWd1cmF0aW9uLiAgSXQgaXMgYXNzdW1lZCB0aGF0IGFsbCBoYW5kbGVycyBhcmUgYXZhaWxhYmxlIG9uIGV2ZXJ5IG5vZGUsIGFuZCBoYW5kbGVycyBvZiB0aGUgc2FtZSBuYW1lIGFyZSBlcXVpdmFsZW50IG9uIGV2ZXJ5IG5vZGUuIEZvciBleGFtcGxlLCBhIGhhbmRsZXIgY2FsbGVkIFwicnVuY1wiIG1pZ2h0IHNwZWNpZnkgdGhhdCB0aGUgcnVuYyBPQ0kgcnVudGltZSAodXNpbmcgbmF0aXZlIExpbnV4IGNvbnRhaW5lcnMpIHdpbGwgYmUgdXNlZCB0byBydW4gdGhlIGNvbnRhaW5lcnMgaW4gYSBwb2QuIFRoZSBSdW50aW1lSGFuZGxlciBtdXN0IGNvbmZvcm0gdG8gdGhlIEROUyBMYWJlbCAoUkZDIDExMjMpIHJlcXVpcmVtZW50cyBhbmQgaXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubm9kZS52MWFscGhhMS5SdW50aW1lQ2xhc3NTcGVjI3J1bnRpbWVIYW5kbGVyXG4gICAqL1xuICByZWFkb25seSBydW50aW1lSGFuZGxlcjogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogRGVsZXRlT3B0aW9ucyBtYXkgYmUgcHJvdmlkZWQgd2hlbiBkZWxldGluZyBhbiBBUEkgb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkRlbGV0ZU9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkRlbGV0ZU9wdGlvbnMjYXBpVmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCBtb2RpZmljYXRpb25zIHNob3VsZCBub3QgYmUgcGVyc2lzdGVkLiBBbiBpbnZhbGlkIG9yIHVucmVjb2duaXplZCBkcnlSdW4gZGlyZWN0aXZlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIHJlc3BvbnNlIGFuZCBubyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgdGhlIHJlcXVlc3QuIFZhbGlkIHZhbHVlcyBhcmU6IC0gQWxsOiBhbGwgZHJ5IHJ1biBzdGFnZXMgd2lsbCBiZSBwcm9jZXNzZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuRGVsZXRlT3B0aW9ucyNkcnlSdW5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBiZWZvcmUgdGhlIG9iamVjdCBzaG91bGQgYmUgZGVsZXRlZC4gVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlci4gVGhlIHZhbHVlIHplcm8gaW5kaWNhdGVzIGRlbGV0ZSBpbW1lZGlhdGVseS4gSWYgdGhpcyB2YWx1ZSBpcyBuaWwsIHRoZSBkZWZhdWx0IGdyYWNlIHBlcmlvZCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIHdpbGwgYmUgdXNlZC4gRGVmYXVsdHMgdG8gYSBwZXIgb2JqZWN0IHZhbHVlIGlmIG5vdCBzcGVjaWZpZWQuIHplcm8gbWVhbnMgZGVsZXRlIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIHBlciBvYmplY3QgdmFsdWUgaWYgbm90IHNwZWNpZmllZC4gemVybyBtZWFucyBkZWxldGUgaW1tZWRpYXRlbHkuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkRlbGV0ZU9wdGlvbnMjZ3JhY2VQZXJpb2RTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBncmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEtpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuIFNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLiBDYW5ub3QgYmUgdXBkYXRlZC4gSW4gQ2FtZWxDYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5EZWxldGVPcHRpb25zI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiBJb0s4U0FwaW1hY2hpbmVyeVBrZ0FwaXNNZXRhVjFEZWxldGVPcHRpb25zS2luZDtcblxuICAvKipcbiAgICogRGVwcmVjYXRlZDogcGxlYXNlIHVzZSB0aGUgUHJvcGFnYXRpb25Qb2xpY3ksIHRoaXMgZmllbGQgd2lsbCBiZSBkZXByZWNhdGVkIGluIDEuNy4gU2hvdWxkIHRoZSBkZXBlbmRlbnQgb2JqZWN0cyBiZSBvcnBoYW5lZC4gSWYgdHJ1ZS9mYWxzZSwgdGhlIFwib3JwaGFuXCIgZmluYWxpemVyIHdpbGwgYmUgYWRkZWQgdG8vcmVtb3ZlZCBmcm9tIHRoZSBvYmplY3QncyBmaW5hbGl6ZXJzIGxpc3QuIEVpdGhlciB0aGlzIGZpZWxkIG9yIFByb3BhZ2F0aW9uUG9saWN5IG1heSBiZSBzZXQsIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuRGVsZXRlT3B0aW9ucyNvcnBoYW5EZXBlbmRlbnRzXG4gICAqL1xuICByZWFkb25seSBvcnBoYW5EZXBlbmRlbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTXVzdCBiZSBmdWxmaWxsZWQgYmVmb3JlIGEgZGVsZXRpb24gaXMgY2FycmllZCBvdXQuIElmIG5vdCBwb3NzaWJsZSwgYSA0MDkgQ29uZmxpY3Qgc3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkRlbGV0ZU9wdGlvbnMjcHJlY29uZGl0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlY29uZGl0aW9ucz86IFByZWNvbmRpdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW5kIGhvdyBnYXJiYWdlIGNvbGxlY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQuIEVpdGhlciB0aGlzIGZpZWxkIG9yIE9ycGhhbkRlcGVuZGVudHMgbWF5IGJlIHNldCwgYnV0IG5vdCBib3RoLiBUaGUgZGVmYXVsdCBwb2xpY3kgaXMgZGVjaWRlZCBieSB0aGUgZXhpc3RpbmcgZmluYWxpemVyIHNldCBpbiB0aGUgbWV0YWRhdGEuZmluYWxpemVycyBhbmQgdGhlIHJlc291cmNlLXNwZWNpZmljIGRlZmF1bHQgcG9saWN5LiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6ICdPcnBoYW4nIC0gb3JwaGFuIHRoZSBkZXBlbmRlbnRzOyAnQmFja2dyb3VuZCcgLSBhbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gZGVsZXRlIHRoZSBkZXBlbmRlbnRzIGluIHRoZSBiYWNrZ3JvdW5kOyAnRm9yZWdyb3VuZCcgLSBhIGNhc2NhZGluZyBwb2xpY3kgdGhhdCBkZWxldGVzIGFsbCBkZXBlbmRlbnRzIGluIHRoZSBmb3JlZ3JvdW5kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5EZWxldGVPcHRpb25zI3Byb3BhZ2F0aW9uUG9saWN5XG4gICAqL1xuICByZWFkb25seSBwcm9wYWdhdGlvblBvbGljeT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFBvZERpc3J1cHRpb25CdWRnZXRTcGVjIGlzIGEgZGVzY3JpcHRpb24gb2YgYSBQb2REaXNydXB0aW9uQnVkZ2V0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZERpc3J1cHRpb25CdWRnZXRTcGVjIHtcbiAgLyoqXG4gICAqIEFuIGV2aWN0aW9uIGlzIGFsbG93ZWQgaWYgYXQgbW9zdCBcIm1heFVuYXZhaWxhYmxlXCIgcG9kcyBzZWxlY3RlZCBieSBcInNlbGVjdG9yXCIgYXJlIHVuYXZhaWxhYmxlIGFmdGVyIHRoZSBldmljdGlvbiwgaS5lLiBldmVuIGluIGFic2VuY2Ugb2YgdGhlIGV2aWN0ZWQgcG9kLiBGb3IgZXhhbXBsZSwgb25lIGNhbiBwcmV2ZW50IGFsbCB2b2x1bnRhcnkgZXZpY3Rpb25zIGJ5IHNwZWNpZnlpbmcgMC4gVGhpcyBpcyBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBzZXR0aW5nIHdpdGggXCJtaW5BdmFpbGFibGVcIi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZERpc3J1cHRpb25CdWRnZXRTcGVjI21heFVuYXZhaWxhYmxlXG4gICAqL1xuICByZWFkb25seSBtYXhVbmF2YWlsYWJsZT86IEludE9yU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmljdGlvbiBpcyBhbGxvd2VkIGlmIGF0IGxlYXN0IFwibWluQXZhaWxhYmxlXCIgcG9kcyBzZWxlY3RlZCBieSBcInNlbGVjdG9yXCIgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGV2aWN0aW9uLCBpLmUuIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgdGhlIGV2aWN0ZWQgcG9kLiAgU28gZm9yIGV4YW1wbGUgeW91IGNhbiBwcmV2ZW50IGFsbCB2b2x1bnRhcnkgZXZpY3Rpb25zIGJ5IHNwZWNpZnlpbmcgXCIxMDAlXCIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Qb2REaXNydXB0aW9uQnVkZ2V0U3BlYyNtaW5BdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IG1pbkF2YWlsYWJsZT86IEludE9yU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBxdWVyeSBvdmVyIHBvZHMgd2hvc2UgZXZpY3Rpb25zIGFyZSBtYW5hZ2VkIGJ5IHRoZSBkaXNydXB0aW9uIGJ1ZGdldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlBvZERpc3J1cHRpb25CdWRnZXRTcGVjI3NlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rvcj86IExhYmVsU2VsZWN0b3I7XG5cbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGlvblJ1bGUgZGVzY3JpYmVzIGhvdyB0byBsb2NhdGUgQ2x1c3RlclJvbGVzIHRvIGFnZ3JlZ2F0ZSBpbnRvIHRoZSBDbHVzdGVyUm9sZVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQWdncmVnYXRpb25SdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdncmVnYXRpb25SdWxlIHtcbiAgLyoqXG4gICAqIENsdXN0ZXJSb2xlU2VsZWN0b3JzIGhvbGRzIGEgbGlzdCBvZiBzZWxlY3RvcnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZpbmQgQ2x1c3RlclJvbGVzIGFuZCBjcmVhdGUgdGhlIHJ1bGVzLiBJZiBhbnkgb2YgdGhlIHNlbGVjdG9ycyBtYXRjaCwgdGhlbiB0aGUgQ2x1c3RlclJvbGUncyBwZXJtaXNzaW9ucyB3aWxsIGJlIGFkZGVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuQWdncmVnYXRpb25SdWxlI2NsdXN0ZXJSb2xlU2VsZWN0b3JzXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyUm9sZVNlbGVjdG9ycz86IExhYmVsU2VsZWN0b3JbXTtcblxufVxuXG4vKipcbiAqIFBvbGljeVJ1bGUgaG9sZHMgaW5mb3JtYXRpb24gdGhhdCBkZXNjcmliZXMgYSBwb2xpY3kgcnVsZSwgYnV0IGRvZXMgbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgd2hvIHRoZSBydWxlIGFwcGxpZXMgdG8gb3Igd2hpY2ggbmFtZXNwYWNlIHRoZSBydWxlIGFwcGxpZXMgdG8uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Qb2xpY3lSdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5UnVsZSB7XG4gIC8qKlxuICAgKiBBUElHcm91cHMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSUdyb3VwIHRoYXQgY29udGFpbnMgdGhlIHJlc291cmNlcy4gIElmIG11bHRpcGxlIEFQSSBncm91cHMgYXJlIHNwZWNpZmllZCwgYW55IGFjdGlvbiByZXF1ZXN0ZWQgYWdhaW5zdCBvbmUgb2YgdGhlIGVudW1lcmF0ZWQgcmVzb3VyY2VzIGluIGFueSBBUEkgZ3JvdXAgd2lsbCBiZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlBvbGljeVJ1bGUjYXBpR3JvdXBzXG4gICAqL1xuICByZWFkb25seSBhcGlHcm91cHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTm9uUmVzb3VyY2VVUkxzIGlzIGEgc2V0IG9mIHBhcnRpYWwgdXJscyB0aGF0IGEgdXNlciBzaG91bGQgaGF2ZSBhY2Nlc3MgdG8uICAqcyBhcmUgYWxsb3dlZCwgYnV0IG9ubHkgYXMgdGhlIGZ1bGwsIGZpbmFsIHN0ZXAgaW4gdGhlIHBhdGggU2luY2Ugbm9uLXJlc291cmNlIFVSTHMgYXJlIG5vdCBuYW1lc3BhY2VkLCB0aGlzIGZpZWxkIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgQ2x1c3RlclJvbGVzIHJlZmVyZW5jZWQgZnJvbSBhIENsdXN0ZXJSb2xlQmluZGluZy4gUnVsZXMgY2FuIGVpdGhlciBhcHBseSB0byBBUEkgcmVzb3VyY2VzIChzdWNoIGFzIFwicG9kc1wiIG9yIFwic2VjcmV0c1wiKSBvciBub24tcmVzb3VyY2UgVVJMIHBhdGhzIChzdWNoIGFzIFwiL2FwaVwiKSwgIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Qb2xpY3lSdWxlI25vblJlc291cmNlVVJMc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uUmVzb3VyY2VVUkxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlTmFtZXMgaXMgYW4gb3B0aW9uYWwgd2hpdGUgbGlzdCBvZiBuYW1lcyB0aGF0IHRoZSBydWxlIGFwcGxpZXMgdG8uICBBbiBlbXB0eSBzZXQgbWVhbnMgdGhhdCBldmVyeXRoaW5nIGlzIGFsbG93ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUG9saWN5UnVsZSNyZXNvdXJjZU5hbWVzXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZU5hbWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyBpcyBhIGxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgcnVsZSBhcHBsaWVzIHRvLiAgJyonIHJlcHJlc2VudHMgYWxsIHJlc291cmNlcyBpbiB0aGUgc3BlY2lmaWVkIGFwaUdyb3Vwcy4gJ18vZm9vJyByZXByZXNlbnRzIHRoZSBzdWJyZXNvdXJjZSAnZm9vJyBmb3IgYWxsIHJlc291cmNlcyBpbiB0aGUgc3BlY2lmaWVkIGFwaUdyb3Vwcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Qb2xpY3lSdWxlI3Jlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZlcmJzIGlzIGEgbGlzdCBvZiBWZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgUmVzb3VyY2VLaW5kcyBhbmQgQXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBWZXJiQWxsIHJlcHJlc2VudHMgYWxsIGtpbmRzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlBvbGljeVJ1bGUjdmVyYnNcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJzOiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIFJvbGVSZWYgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBwb2ludHMgdG8gdGhlIHJvbGUgYmVpbmcgdXNlZFxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuUm9sZVJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVSZWYge1xuICAvKipcbiAgICogQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVSZWYjYXBpR3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdyb3VwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlJvbGVSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5Sb2xlUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFN1YmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvciB1c2VyIGlkZW50aXRpZXMgYSByb2xlIGJpbmRpbmcgYXBwbGllcyB0by4gIFRoaXMgY2FuIGVpdGhlciBob2xkIGEgZGlyZWN0IEFQSSBvYmplY3QgcmVmZXJlbmNlLCBvciBhIHZhbHVlIGZvciBub24tb2JqZWN0cyBzdWNoIGFzIHVzZXIgYW5kIGdyb3VwIG5hbWVzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuU3ViamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmplY3Qge1xuICAvKipcbiAgICogQVBJR3JvdXAgaG9sZHMgdGhlIEFQSSBncm91cCBvZiB0aGUgcmVmZXJlbmNlZCBzdWJqZWN0LiBEZWZhdWx0cyB0byBcIlwiIGZvciBTZXJ2aWNlQWNjb3VudCBzdWJqZWN0cy4gRGVmYXVsdHMgdG8gXCJyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvXCIgZm9yIFVzZXIgYW5kIEdyb3VwIHN1YmplY3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmb3IgU2VydmljZUFjY291bnQgc3ViamVjdHMuIERlZmF1bHRzIHRvIFwicmJhYy5hdXRob3JpemF0aW9uLms4cy5pb1wiIGZvciBVc2VyIGFuZCBHcm91cCBzdWJqZWN0cy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5TdWJqZWN0I2FwaUdyb3VwXG4gICAqL1xuICByZWFkb25seSBhcGlHcm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogS2luZCBvZiBvYmplY3QgYmVpbmcgcmVmZXJlbmNlZC4gVmFsdWVzIGRlZmluZWQgYnkgdGhpcyBBUEkgZ3JvdXAgYXJlIFwiVXNlclwiLCBcIkdyb3VwXCIsIGFuZCBcIlNlcnZpY2VBY2NvdW50XCIuIElmIHRoZSBBdXRob3JpemVyIGRvZXMgbm90IHJlY29nbml6ZWQgdGhlIGtpbmQgdmFsdWUsIHRoZSBBdXRob3JpemVyIHNob3VsZCByZXBvcnQgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5yYmFjLnYxYmV0YTEuU3ViamVjdCNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyByZWZlcmVuY2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucmJhYy52MWJldGExLlN1YmplY3QjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jZWQgb2JqZWN0LiAgSWYgdGhlIG9iamVjdCBraW5kIGlzIG5vbi1uYW1lc3BhY2UsIHN1Y2ggYXMgXCJVc2VyXCIgb3IgXCJHcm91cFwiLCBhbmQgdGhpcyB2YWx1ZSBpcyBub3QgZW1wdHkgdGhlIEF1dGhvcml6ZXIgc2hvdWxkIHJlcG9ydCBhbiBlcnJvci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnJiYWMudjFiZXRhMS5TdWJqZWN0I25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUG9kUHJlc2V0U3BlYyBpcyBhIGRlc2NyaXB0aW9uIG9mIGEgcG9kIHByZXNldC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc2V0dGluZ3MudjFhbHBoYTEuUG9kUHJlc2V0U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZFByZXNldFNwZWMge1xuICAvKipcbiAgICogRW52IGRlZmluZXMgdGhlIGNvbGxlY3Rpb24gb2YgRW52VmFyIHRvIGluamVjdCBpbnRvIGNvbnRhaW5lcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRTcGVjI2VudlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogRW52VmFyW107XG5cbiAgLyoqXG4gICAqIEVudkZyb20gZGVmaW5lcyB0aGUgY29sbGVjdGlvbiBvZiBFbnZGcm9tU291cmNlIHRvIGluamVjdCBpbnRvIGNvbnRhaW5lcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRTcGVjI2VudkZyb21cbiAgICovXG4gIHJlYWRvbmx5IGVudkZyb20/OiBFbnZGcm9tU291cmNlW107XG5cbiAgLyoqXG4gICAqIFNlbGVjdG9yIGlzIGEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldFNwZWMjc2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdG9yPzogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogVm9sdW1lTW91bnRzIGRlZmluZXMgdGhlIGNvbGxlY3Rpb24gb2YgVm9sdW1lTW91bnQgdG8gaW5qZWN0IGludG8gY29udGFpbmVycy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnNldHRpbmdzLnYxYWxwaGExLlBvZFByZXNldFNwZWMjdm9sdW1lTW91bnRzXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVNb3VudHM/OiBWb2x1bWVNb3VudFtdO1xuXG4gIC8qKlxuICAgKiBWb2x1bWVzIGRlZmluZXMgdGhlIGNvbGxlY3Rpb24gb2YgVm9sdW1lIHRvIGluamVjdCBpbnRvIHRoZSBwb2QuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zZXR0aW5ncy52MWFscGhhMS5Qb2RQcmVzZXRTcGVjI3ZvbHVtZXNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBWb2x1bWVbXTtcblxufVxuXG4vKipcbiAqIEEgdG9wb2xvZ3kgc2VsZWN0b3IgdGVybSByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgbGFiZWwgcXVlcmllcy4gQSBudWxsIG9yIGVtcHR5IHRvcG9sb2d5IHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mIHRoZW0gYXJlIEFORGVkLiBJdCBwcm92aWRlcyBhIHN1YnNldCBvZiBmdW5jdGlvbmFsaXR5IGFzIE5vZGVTZWxlY3RvclRlcm0uIFRoaXMgaXMgYW4gYWxwaGEgZmVhdHVyZSBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRvcG9sb2d5U2VsZWN0b3JUZXJtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lTZWxlY3RvclRlcm0ge1xuICAvKipcbiAgICogQSBsaXN0IG9mIHRvcG9sb2d5IHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBsYWJlbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRvcG9sb2d5U2VsZWN0b3JUZXJtI21hdGNoTGFiZWxFeHByZXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hMYWJlbEV4cHJlc3Npb25zPzogVG9wb2xvZ3lTZWxlY3RvckxhYmVsUmVxdWlyZW1lbnRbXTtcblxufVxuXG4vKipcbiAqIFZvbHVtZUF0dGFjaG1lbnRTcGVjIGlzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgVm9sdW1lQXR0YWNobWVudCByZXF1ZXN0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWb2x1bWVBdHRhY2htZW50U3BlYyB7XG4gIC8qKlxuICAgKiBBdHRhY2hlciBpbmRpY2F0ZXMgdGhlIG5hbWUgb2YgdGhlIHZvbHVtZSBkcml2ZXIgdGhhdCBNVVNUIGhhbmRsZSB0aGlzIHJlcXVlc3QuIFRoaXMgaXMgdGhlIG5hbWUgcmV0dXJuZWQgYnkgR2V0UGx1Z2luTmFtZSgpLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnRTcGVjI2F0dGFjaGVyXG4gICAqL1xuICByZWFkb25seSBhdHRhY2hlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9kZSB0aGF0IHRoZSB2b2x1bWUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnRTcGVjI25vZGVOYW1lXG4gICAqL1xuICByZWFkb25seSBub2RlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTb3VyY2UgcmVwcmVzZW50cyB0aGUgdm9sdW1lIHRoYXQgc2hvdWxkIGJlIGF0dGFjaGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLlZvbHVtZUF0dGFjaG1lbnRTcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBWb2x1bWVBdHRhY2htZW50U291cmNlO1xuXG59XG5cbi8qKlxuICogQ1NJRHJpdmVyU3BlYyBpcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhIENTSURyaXZlci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSURyaXZlclNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc2lEcml2ZXJTcGVjIHtcbiAgLyoqXG4gICAqIGF0dGFjaFJlcXVpcmVkIGluZGljYXRlcyB0aGlzIENTSSB2b2x1bWUgZHJpdmVyIHJlcXVpcmVzIGFuIGF0dGFjaCBvcGVyYXRpb24gKGJlY2F1c2UgaXQgaW1wbGVtZW50cyB0aGUgQ1NJIENvbnRyb2xsZXJQdWJsaXNoVm9sdW1lKCkgbWV0aG9kKSwgYW5kIHRoYXQgdGhlIEt1YmVybmV0ZXMgYXR0YWNoIGRldGFjaCBjb250cm9sbGVyIHNob3VsZCBjYWxsIHRoZSBhdHRhY2ggdm9sdW1lIGludGVyZmFjZSB3aGljaCBjaGVja3MgdGhlIHZvbHVtZWF0dGFjaG1lbnQgc3RhdHVzIGFuZCB3YWl0cyB1bnRpbCB0aGUgdm9sdW1lIGlzIGF0dGFjaGVkIGJlZm9yZSBwcm9jZWVkaW5nIHRvIG1vdW50aW5nLiBUaGUgQ1NJIGV4dGVybmFsLWF0dGFjaGVyIGNvb3JkaW5hdGVzIHdpdGggQ1NJIHZvbHVtZSBkcml2ZXIgYW5kIHVwZGF0ZXMgdGhlIHZvbHVtZWF0dGFjaG1lbnQgc3RhdHVzIHdoZW4gdGhlIGF0dGFjaCBvcGVyYXRpb24gaXMgY29tcGxldGUuIElmIHRoZSBDU0lEcml2ZXJSZWdpc3RyeSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIHNwZWNpZmllZCB0byBmYWxzZSwgdGhlIGF0dGFjaCBvcGVyYXRpb24gd2lsbCBiZSBza2lwcGVkLiBPdGhlcndpc2UgdGhlIGF0dGFjaCBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJRHJpdmVyU3BlYyNhdHRhY2hSZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNoUmVxdWlyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgcG9kSW5mb09uTW91bnQgaW5kaWNhdGVzIHRoaXMgQ1NJIHZvbHVtZSBkcml2ZXIgcmVxdWlyZXMgYWRkaXRpb25hbCBwb2QgaW5mb3JtYXRpb24gKGxpa2UgcG9kTmFtZSwgcG9kVUlELCBldGMuKSBkdXJpbmcgbW91bnQgb3BlcmF0aW9ucy4gSWYgc2V0IHRvIGZhbHNlLCBwb2QgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgcGFzc2VkIG9uIG1vdW50LiBEZWZhdWx0IGlzIGZhbHNlLiBUaGUgQ1NJIGRyaXZlciBzcGVjaWZpZXMgcG9kSW5mb09uTW91bnQgYXMgcGFydCBvZiBkcml2ZXIgZGVwbG95bWVudC4gSWYgdHJ1ZSwgS3ViZWxldCB3aWxsIHBhc3MgcG9kIGluZm9ybWF0aW9uIGFzIFZvbHVtZUNvbnRleHQgaW4gdGhlIENTSSBOb2RlUHVibGlzaFZvbHVtZSgpIGNhbGxzLiBUaGUgQ1NJIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhbmQgdmFsaWRhdGluZyB0aGUgaW5mb3JtYXRpb24gcGFzc2VkIGluIGFzIFZvbHVtZUNvbnRleHQuIFRoZSBmb2xsb3dpbmcgVm9sdW1lQ29uZXh0IHdpbGwgYmUgcGFzc2VkIGlmIHBvZEluZm9Pbk1vdW50IGlzIHNldCB0byB0cnVlLiBUaGlzIGxpc3QgbWlnaHQgZ3JvdywgYnV0IHRoZSBwcmVmaXggd2lsbCBiZSB1c2VkLiBcImNzaS5zdG9yYWdlLms4cy5pby9wb2QubmFtZVwiOiBwb2QuTmFtZSBcImNzaS5zdG9yYWdlLms4cy5pby9wb2QubmFtZXNwYWNlXCI6IHBvZC5OYW1lc3BhY2UgXCJjc2kuc3RvcmFnZS5rOHMuaW8vcG9kLnVpZFwiOiBzdHJpbmcocG9kLlVJRClcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuIFRoZSBDU0kgZHJpdmVyIHNwZWNpZmllcyBwb2RJbmZvT25Nb3VudCBhcyBwYXJ0IG9mIGRyaXZlciBkZXBsb3ltZW50LiBJZiB0cnVlLCBLdWJlbGV0IHdpbGwgcGFzcyBwb2QgaW5mb3JtYXRpb24gYXMgVm9sdW1lQ29udGV4dCBpbiB0aGUgQ1NJIE5vZGVQdWJsaXNoVm9sdW1lKCkgY2FsbHMuIFRoZSBDU0kgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nIHRoZSBpbmZvcm1hdGlvbiBwYXNzZWQgaW4gYXMgVm9sdW1lQ29udGV4dC4gVGhlIGZvbGxvd2luZyBWb2x1bWVDb25leHQgd2lsbCBiZSBwYXNzZWQgaWYgcG9kSW5mb09uTW91bnQgaXMgc2V0IHRvIHRydWUuIFRoaXMgbGlzdCBtaWdodCBncm93LCBidXQgdGhlIHByZWZpeCB3aWxsIGJlIHVzZWQuIFwiY3NpLnN0b3JhZ2UuazhzLmlvL3BvZC5uYW1lXCI6IHBvZC5OYW1lIFwiY3NpLnN0b3JhZ2UuazhzLmlvL3BvZC5uYW1lc3BhY2VcIjogcG9kLk5hbWVzcGFjZSBcImNzaS5zdG9yYWdlLms4cy5pby9wb2QudWlkXCI6IHN0cmluZyhwb2QuVUlEKVxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSURyaXZlclNwZWMjcG9kSW5mb09uTW91bnRcbiAgICovXG4gIHJlYWRvbmx5IHBvZEluZm9Pbk1vdW50PzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENTSU5vZGVTcGVjIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFsbCBDU0kgZHJpdmVycyBpbnN0YWxsZWQgb24gYSBub2RlXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5DU0lOb2RlU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENzaU5vZGVTcGVjIHtcbiAgLyoqXG4gICAqIGRyaXZlcnMgaXMgYSBsaXN0IG9mIGluZm9ybWF0aW9uIG9mIGFsbCBDU0kgRHJpdmVycyBleGlzdGluZyBvbiBhIG5vZGUuIElmIGFsbCBkcml2ZXJzIGluIHRoZSBsaXN0IGFyZSB1bmluc3RhbGxlZCwgdGhpcyBjYW4gYmVjb21lIGVtcHR5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuc3RvcmFnZS52MWJldGExLkNTSU5vZGVTcGVjI2RyaXZlcnNcbiAgICovXG4gIHJlYWRvbmx5IGRyaXZlcnM6IENzaU5vZGVEcml2ZXJbXTtcblxufVxuXG4vKipcbiAqIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvblNwZWMgZGVzY3JpYmVzIGhvdyBhIHVzZXIgd2FudHMgdGhlaXIgcmVzb3VyY2UgdG8gYXBwZWFyXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21SZXNvdXJjZURlZmluaXRpb25TcGVjIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWxQcmludGVyQ29sdW1ucyBhcmUgYWRkaXRpb25hbCBjb2x1bW5zIHNob3duIGUuZy4gaW4ga3ViZWN0bCBuZXh0IHRvIHRoZSBuYW1lLiBEZWZhdWx0cyB0byBhIGNyZWF0ZWQtYXQgY29sdW1uLiBPcHRpb25hbCwgdGhlIGdsb2JhbCBjb2x1bW5zIGZvciBhbGwgdmVyc2lvbnMuIFRvcC1sZXZlbCBhbmQgcGVyLXZlcnNpb24gY29sdW1ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIGNyZWF0ZWQtYXQgY29sdW1uLiBPcHRpb25hbCwgdGhlIGdsb2JhbCBjb2x1bW5zIGZvciBhbGwgdmVyc2lvbnMuIFRvcC1sZXZlbCBhbmQgcGVyLXZlcnNpb24gY29sdW1ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uU3BlYyNhZGRpdGlvbmFsUHJpbnRlckNvbHVtbnNcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxQcmludGVyQ29sdW1ucz86IEN1c3RvbVJlc291cmNlQ29sdW1uRGVmaW5pdGlvbltdO1xuXG4gIC8qKlxuICAgKiBgY29udmVyc2lvbmAgZGVmaW5lcyBjb252ZXJzaW9uIHNldHRpbmdzIGZvciB0aGUgQ1JELlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uU3BlYyNjb252ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBjb252ZXJzaW9uPzogQ3VzdG9tUmVzb3VyY2VDb252ZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBHcm91cCBpcyB0aGUgZ3JvdXAgdGhpcyByZXNvdXJjZSBiZWxvbmdzIGluXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25TcGVjI2dyb3VwXG4gICAqL1xuICByZWFkb25seSBncm91cDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lcyBhcmUgdGhlIG5hbWVzIHVzZWQgdG8gZGVzY3JpYmUgdGhpcyBjdXN0b20gcmVzb3VyY2VcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblNwZWMjbmFtZXNcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzOiBDdXN0b21SZXNvdXJjZURlZmluaXRpb25OYW1lcztcblxuICAvKipcbiAgICogcHJlc2VydmVVbmtub3duRmllbGRzIGRpc2FibGVzIHBydW5pbmcgb2Ygb2JqZWN0IGZpZWxkcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgT3BlbkFQSSBzY2hlbWEuIGFwaVZlcnNpb24sIGtpbmQsIG1ldGFkYXRhIGFuZCBrbm93biBmaWVsZHMgaW5zaWRlIG1ldGFkYXRhIGFyZSBhbHdheXMgcHJlc2VydmVkLiBEZWZhdWx0cyB0byB0cnVlIGluIHYxYmV0YSBhbmQgd2lsbCBkZWZhdWx0IHRvIGZhbHNlIGluIHYxLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIGluIHYxYmV0YSBhbmQgd2lsbCBkZWZhdWx0IHRvIGZhbHNlIGluIHYxLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uU3BlYyNwcmVzZXJ2ZVVua25vd25GaWVsZHNcbiAgICovXG4gIHJlYWRvbmx5IHByZXNlcnZlVW5rbm93bkZpZWxkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNjb3BlIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgcmVzb3VyY2UgaXMgY2x1c3RlciBvciBuYW1lc3BhY2Ugc2NvcGVkLiAgRGVmYXVsdCBpcyBuYW1lc3BhY2VkXG4gICAqXG4gICAqIEBkZWZhdWx0IG5hbWVzcGFjZWRcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblNwZWMjc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1YnJlc291cmNlcyBkZXNjcmliZXMgdGhlIHN1YnJlc291cmNlcyBmb3IgQ3VzdG9tUmVzb3VyY2UgT3B0aW9uYWwsIHRoZSBnbG9iYWwgc3VicmVzb3VyY2VzIGZvciBhbGwgdmVyc2lvbnMuIFRvcC1sZXZlbCBhbmQgcGVyLXZlcnNpb24gc3VicmVzb3VyY2VzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25TcGVjI3N1YnJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgc3VicmVzb3VyY2VzPzogQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZXM7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gZGVzY3JpYmVzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZHMgZm9yIEN1c3RvbVJlc291cmNlcyBPcHRpb25hbCwgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIHNjaGVtYSBmb3IgYWxsIHZlcnNpb25zLiBUb3AtbGV2ZWwgYW5kIHBlci12ZXJzaW9uIHNjaGVtYXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblNwZWMjdmFsaWRhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbj86IEN1c3RvbVJlc291cmNlVmFsaWRhdGlvbjtcblxuICAvKipcbiAgICogVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiB0aGlzIHJlc291cmNlIGJlbG9uZ3MgaW4gU2hvdWxkIGJlIGFsd2F5cyBmaXJzdCBpdGVtIGluIFZlcnNpb25zIGZpZWxkIGlmIHByb3ZpZGVkLiBPcHRpb25hbCwgYnV0IGF0IGxlYXN0IG9uZSBvZiBWZXJzaW9uIG9yIFZlcnNpb25zIG11c3QgYmUgc2V0LiBEZXByZWNhdGVkOiBQbGVhc2UgdXNlIGBWZXJzaW9uc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25TcGVjI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb25zIGlzIHRoZSBsaXN0IG9mIGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMgZm9yIHRoaXMgcmVzb3VyY2UuIElmIFZlcnNpb24gZmllbGQgaXMgcHJvdmlkZWQsIHRoaXMgZmllbGQgaXMgb3B0aW9uYWwuIFZhbGlkYXRpb246IEFsbCB2ZXJzaW9ucyBtdXN0IHVzZSB0aGUgc2FtZSB2YWxpZGF0aW9uIHNjaGVtYSBmb3Igbm93LiBpLmUuLCB0b3AgbGV2ZWwgVmFsaWRhdGlvbiBmaWVsZCBpcyBhcHBsaWVkIHRvIGFsbCBvZiB0aGVzZSB2ZXJzaW9ucy4gT3JkZXI6IFRoZSB2ZXJzaW9uIG5hbWUgd2lsbCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIG9yZGVyLiBJZiB0aGUgdmVyc2lvbiBzdHJpbmcgaXMgXCJrdWJlLWxpa2VcIiwgaXQgd2lsbCBzb3J0IGFib3ZlIG5vbiBcImt1YmUtbGlrZVwiIHZlcnNpb24gc3RyaW5ncywgd2hpY2ggYXJlIG9yZGVyZWQgbGV4aWNvZ3JhcGhpY2FsbHkuIFwiS3ViZS1saWtlXCIgdmVyc2lvbnMgc3RhcnQgd2l0aCBhIFwidlwiLCB0aGVuIGFyZSBmb2xsb3dlZCBieSBhIG51bWJlciAodGhlIG1ham9yIHZlcnNpb24pLCB0aGVuIG9wdGlvbmFsbHkgdGhlIHN0cmluZyBcImFscGhhXCIgb3IgXCJiZXRhXCIgYW5kIGFub3RoZXIgbnVtYmVyICh0aGUgbWlub3IgdmVyc2lvbikuIFRoZXNlIGFyZSBzb3J0ZWQgZmlyc3QgYnkgR0EgPiBiZXRhID4gYWxwaGEgKHdoZXJlIEdBIGlzIGEgdmVyc2lvbiB3aXRoIG5vIHN1ZmZpeCBzdWNoIGFzIGJldGEgb3IgYWxwaGEpLCBhbmQgdGhlbiBieSBjb21wYXJpbmcgbWFqb3IgdmVyc2lvbiwgdGhlbiBtaW5vciB2ZXJzaW9uLiBBbiBleGFtcGxlIHNvcnRlZCBsaXN0IG9mIHZlcnNpb25zOiB2MTAsIHYyLCB2MSwgdjExYmV0YTIsIHYxMGJldGEzLCB2M2JldGExLCB2MTJhbHBoYTEsIHYxMWFscGhhMiwgZm9vMSwgZm9vMTAuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25TcGVjI3ZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9ucz86IEN1c3RvbVJlc291cmNlRGVmaW5pdGlvblZlcnNpb25bXTtcblxufVxuXG4vKipcbiAqIFN0YXR1c0RldGFpbHMgaXMgYSBzZXQgb2YgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgTUFZIGJlIHNldCBieSB0aGUgc2VydmVyIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIHJlc3BvbnNlLiBUaGUgUmVhc29uIGZpZWxkIG9mIGEgU3RhdHVzIG9iamVjdCBkZWZpbmVzIHdoYXQgYXR0cmlidXRlcyB3aWxsIGJlIHNldC4gQ2xpZW50cyBtdXN0IGlnbm9yZSBmaWVsZHMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGRlZmluZWQgdHlwZSBvZiBlYWNoIGF0dHJpYnV0ZSwgYW5kIHNob3VsZCBhc3N1bWUgdGhhdCBhbnkgYXR0cmlidXRlIG1heSBiZSBlbXB0eSwgaW52YWxpZCwgb3IgdW5kZXIgZGVmaW5lZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNEZXRhaWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzRGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgQ2F1c2VzIGFycmF5IGluY2x1ZGVzIG1vcmUgZGV0YWlscyBhc3NvY2lhdGVkIHdpdGggdGhlIFN0YXR1c1JlYXNvbiBmYWlsdXJlLiBOb3QgYWxsIFN0YXR1c1JlYXNvbnMgbWF5IHByb3ZpZGUgZGV0YWlsZWQgY2F1c2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNEZXRhaWxzI2NhdXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2F1c2VzPzogU3RhdHVzQ2F1c2VbXTtcblxuICAvKipcbiAgICogVGhlIGdyb3VwIGF0dHJpYnV0ZSBvZiB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgU3RhdHVzUmVhc29uLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNEZXRhaWxzI2dyb3VwXG4gICAqL1xuICByZWFkb25seSBncm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtpbmQgYXR0cmlidXRlIG9mIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBTdGF0dXNSZWFzb24uIE9uIHNvbWUgb3BlcmF0aW9ucyBtYXkgZGlmZmVyIGZyb20gdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBLaW5kLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNEZXRhaWxzI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgU3RhdHVzUmVhc29uICh3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIG5hbWUgd2hpY2ggY2FuIGJlIGRlc2NyaWJlZCkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlN0YXR1c0RldGFpbHMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgdGltZSBpbiBzZWNvbmRzIGJlZm9yZSB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSByZXRyaWVkLiBTb21lIGVycm9ycyBtYXkgaW5kaWNhdGUgdGhlIGNsaWVudCBtdXN0IHRha2UgYW4gYWx0ZXJuYXRlIGFjdGlvbiAtIGZvciB0aG9zZSBlcnJvcnMgdGhpcyBmaWVsZCBtYXkgaW5kaWNhdGUgaG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgdGFraW5nIHRoZSBhbHRlcm5hdGUgYWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNEZXRhaWxzI3JldHJ5QWZ0ZXJTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSByZXRyeUFmdGVyU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVUlEIG9mIHRoZSByZXNvdXJjZS4gKHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIGRlc2NyaWJlZCkuIE1vcmUgaW5mbzogaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzI3VpZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuU3RhdHVzRGV0YWlscyN1aWRcbiAgICovXG4gIHJlYWRvbmx5IHVpZD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEFQSVNlcnZpY2VTcGVjIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBsb2NhdGluZyBhbmQgY29tbXVuaWNhdGluZyB3aXRoIGEgc2VydmVyLiBPbmx5IGh0dHBzIGlzIHN1cHBvcnRlZCwgdGhvdWdoIHlvdSBhcmUgYWJsZSB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlTZXJ2aWNlU3BlYyB7XG4gIC8qKlxuICAgKiBDQUJ1bmRsZSBpcyBhIFBFTSBlbmNvZGVkIENBIGJ1bmRsZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgYW4gQVBJIHNlcnZlcidzIHNlcnZpbmcgY2VydGlmaWNhdGUuIElmIHVuc3BlY2lmaWVkLCBzeXN0ZW0gdHJ1c3Qgcm9vdHMgb24gdGhlIGFwaXNlcnZlciBhcmUgdXNlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2VTcGVjI2NhQnVuZGxlXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogR3JvdXAgaXMgdGhlIEFQSSBncm91cCBuYW1lIHRoaXMgc2VydmVyIGhvc3RzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjFiZXRhMS5BUElTZXJ2aWNlU3BlYyNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyb3VwUHJpb3JpdHlNaW5pbnVtIGlzIHRoZSBwcmlvcml0eSB0aGlzIGdyb3VwIHNob3VsZCBoYXZlIGF0IGxlYXN0LiBIaWdoZXIgcHJpb3JpdHkgbWVhbnMgdGhhdCB0aGUgZ3JvdXAgaXMgcHJlZmVycmVkIGJ5IGNsaWVudHMgb3ZlciBsb3dlciBwcmlvcml0eSBvbmVzLiBOb3RlIHRoYXQgb3RoZXIgdmVyc2lvbnMgb2YgdGhpcyBncm91cCBtaWdodCBzcGVjaWZ5IGV2ZW4gaGlnaGVyIEdyb3VwUHJpb3JpdHlNaW5pbnVtIHZhbHVlcyBzdWNoIHRoYXQgdGhlIHdob2xlIGdyb3VwIGdldHMgYSBoaWdoZXIgcHJpb3JpdHkuIFRoZSBwcmltYXJ5IHNvcnQgaXMgYmFzZWQgb24gR3JvdXBQcmlvcml0eU1pbmltdW0sIG9yZGVyZWQgaGlnaGVzdCBudW1iZXIgdG8gbG93ZXN0ICgyMCBiZWZvcmUgMTApLiBUaGUgc2Vjb25kYXJ5IHNvcnQgaXMgYmFzZWQgb24gdGhlIGFscGhhYmV0aWNhbCBjb21wYXJpc29uIG9mIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuICAodjEuYmFyIGJlZm9yZSB2MS5mb28pIFdlJ2QgcmVjb21tZW5kIHNvbWV0aGluZyBsaWtlOiAqLms4cy5pbyAoZXhjZXB0IGV4dGVuc2lvbnMpIGF0IDE4MDAwIGFuZCBQYWFTZXMgKE9wZW5TaGlmdCwgRGVpcykgYXJlIHJlY29tbWVuZGVkIHRvIGJlIGluIHRoZSAyMDAwc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZVNwZWMjZ3JvdXBQcmlvcml0eU1pbmltdW1cbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwUHJpb3JpdHlNaW5pbXVtOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluc2VjdXJlU2tpcFRMU1ZlcmlmeSBkaXNhYmxlcyBUTFMgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoaXMgc2VydmVyLiBUaGlzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLiAgWW91IHNob3VsZCB1c2UgdGhlIENBQnVuZGxlIGluc3RlYWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjFiZXRhMS5BUElTZXJ2aWNlU3BlYyNpbnNlY3VyZVNraXBUTFNWZXJpZnlcbiAgICovXG4gIHJlYWRvbmx5IGluc2VjdXJlU2tpcFRMU1ZlcmlmeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlcnZpY2UgaXMgYSByZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgZm9yIHRoaXMgQVBJIHNlcnZlci4gIEl0IG11c3QgY29tbXVuaWNhdGUgb24gcG9ydCA0NDMgSWYgdGhlIFNlcnZpY2UgaXMgbmlsLCB0aGF0IG1lYW5zIHRoZSBoYW5kbGluZyBmb3IgdGhlIEFQSSBncm91cHZlcnNpb24gaXMgaGFuZGxlZCBsb2NhbGx5IG9uIHRoaXMgc2VydmVyLiBUaGUgY2FsbCB3aWxsIHNpbXBseSBkZWxlZ2F0ZSB0byB0aGUgbm9ybWFsIGhhbmRsZXIgY2hhaW4gdG8gYmUgZnVsZmlsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5rdWJlLWFnZ3JlZ2F0b3IucGtnLmFwaXMuYXBpcmVnaXN0cmF0aW9uLnYxYmV0YTEuQVBJU2VydmljZVNwZWMjc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZTogU2VydmljZVJlZmVyZW5jZTtcblxuICAvKipcbiAgICogVmVyc2lvbiBpcyB0aGUgQVBJIHZlcnNpb24gdGhpcyBzZXJ2ZXIgaG9zdHMuICBGb3IgZXhhbXBsZSwgXCJ2MVwiXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmt1YmUtYWdncmVnYXRvci5wa2cuYXBpcy5hcGlyZWdpc3RyYXRpb24udjFiZXRhMS5BUElTZXJ2aWNlU3BlYyN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uUHJpb3JpdHkgY29udHJvbHMgdGhlIG9yZGVyaW5nIG9mIHRoaXMgQVBJIHZlcnNpb24gaW5zaWRlIG9mIGl0cyBncm91cC4gIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIFRoZSBwcmltYXJ5IHNvcnQgaXMgYmFzZWQgb24gVmVyc2lvblByaW9yaXR5LCBvcmRlcmVkIGhpZ2hlc3QgdG8gbG93ZXN0ICgyMCBiZWZvcmUgMTApLiBTaW5jZSBpdCdzIGluc2lkZSBvZiBhIGdyb3VwLCB0aGUgbnVtYmVyIGNhbiBiZSBzbWFsbCwgcHJvYmFibHkgaW4gdGhlIDEwcy4gSW4gY2FzZSBvZiBlcXVhbCB2ZXJzaW9uIHByaW9yaXRpZXMsIHRoZSB2ZXJzaW9uIHN0cmluZyB3aWxsIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgb3JkZXIgaW5zaWRlIGEgZ3JvdXAuIElmIHRoZSB2ZXJzaW9uIHN0cmluZyBpcyBcImt1YmUtbGlrZVwiLCBpdCB3aWxsIHNvcnQgYWJvdmUgbm9uIFwia3ViZS1saWtlXCIgdmVyc2lvbiBzdHJpbmdzLCB3aGljaCBhcmUgb3JkZXJlZCBsZXhpY29ncmFwaGljYWxseS4gXCJLdWJlLWxpa2VcIiB2ZXJzaW9ucyBzdGFydCB3aXRoIGEgXCJ2XCIsIHRoZW4gYXJlIGZvbGxvd2VkIGJ5IGEgbnVtYmVyICh0aGUgbWFqb3IgdmVyc2lvbiksIHRoZW4gb3B0aW9uYWxseSB0aGUgc3RyaW5nIFwiYWxwaGFcIiBvciBcImJldGFcIiBhbmQgYW5vdGhlciBudW1iZXIgKHRoZSBtaW5vciB2ZXJzaW9uKS4gVGhlc2UgYXJlIHNvcnRlZCBmaXJzdCBieSBHQSA+IGJldGEgPiBhbHBoYSAod2hlcmUgR0EgaXMgYSB2ZXJzaW9uIHdpdGggbm8gc3VmZml4IHN1Y2ggYXMgYmV0YSBvciBhbHBoYSksIGFuZCB0aGVuIGJ5IGNvbXBhcmluZyBtYWpvciB2ZXJzaW9uLCB0aGVuIG1pbm9yIHZlcnNpb24uIEFuIGV4YW1wbGUgc29ydGVkIGxpc3Qgb2YgdmVyc2lvbnM6IHYxMCwgdjIsIHYxLCB2MTFiZXRhMiwgdjEwYmV0YTMsIHYzYmV0YTEsIHYxMmFscGhhMSwgdjExYWxwaGEyLCBmb28xLCBmb28xMC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMua3ViZS1hZ2dyZWdhdG9yLnBrZy5hcGlzLmFwaXJlZ2lzdHJhdGlvbi52MWJldGExLkFQSVNlcnZpY2VTcGVjI3ZlcnNpb25Qcmlvcml0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblByaW9yaXR5OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcnMgdHJhY2tzIHRoZSBwcm9ncmVzcyBvZiBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5Jbml0aWFsaXplcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplcnMge1xuICAvKipcbiAgICogUGVuZGluZyBpcyBhIGxpc3Qgb2YgaW5pdGlhbGl6ZXJzIHRoYXQgbXVzdCBleGVjdXRlIGluIG9yZGVyIGJlZm9yZSB0aGlzIG9iamVjdCBpcyB2aXNpYmxlLiBXaGVuIHRoZSBsYXN0IHBlbmRpbmcgaW5pdGlhbGl6ZXIgaXMgcmVtb3ZlZCwgYW5kIG5vIGZhaWxpbmcgcmVzdWx0IGlzIHNldCwgdGhlIGluaXRpYWxpemVycyBzdHJ1Y3Qgd2lsbCBiZSBzZXQgdG8gbmlsIGFuZCB0aGUgb2JqZWN0IGlzIGNvbnNpZGVyZWQgYXMgaW5pdGlhbGl6ZWQgYW5kIHZpc2libGUgdG8gYWxsIGNsaWVudHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkluaXRpYWxpemVycyNwZW5kaW5nXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nOiBJbml0aWFsaXplcltdO1xuXG4gIC8qKlxuICAgKiBJZiByZXN1bHQgaXMgc2V0IHdpdGggdGhlIEZhaWx1cmUgZmllbGQsIHRoZSBvYmplY3Qgd2lsbCBiZSBwZXJzaXN0ZWQgdG8gc3RvcmFnZSBhbmQgdGhlbiBkZWxldGVkLCBlbnN1cmluZyB0aGF0IG90aGVyIGNsaWVudHMgY2FuIG9ic2VydmUgdGhlIGRlbGV0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5Jbml0aWFsaXplcnMjcmVzdWx0XG4gICAqL1xuICByZWFkb25seSByZXN1bHQ/OiBLdWJlU3RhdHVzUHJvcHM7XG5cbn1cblxuLyoqXG4gKiBNYW5hZ2VkRmllbGRzRW50cnkgaXMgYSB3b3JrZmxvdy1pZCwgYSBGaWVsZFNldCBhbmQgdGhlIGdyb3VwIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIHRoYXQgdGhlIGZpZWxkc2V0IGFwcGxpZXMgdG8uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTWFuYWdlZEZpZWxkc0VudHJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZEZpZWxkc0VudHJ5IHtcbiAgLyoqXG4gICAqIEFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlc291cmNlIHRoYXQgdGhpcyBmaWVsZCBzZXQgYXBwbGllcyB0by4gVGhlIGZvcm1hdCBpcyBcImdyb3VwL3ZlcnNpb25cIiBqdXN0IGxpa2UgdGhlIHRvcC1sZXZlbCBBUElWZXJzaW9uIGZpZWxkLiBJdCBpcyBuZWNlc3NhcnkgdG8gdHJhY2sgdGhlIHZlcnNpb24gb2YgYSBmaWVsZCBzZXQgYmVjYXVzZSBpdCBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk1hbmFnZWRGaWVsZHNFbnRyeSNhcGlWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWVsZHMgaWRlbnRpZmllcyBhIHNldCBvZiBmaWVsZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk1hbmFnZWRGaWVsZHNFbnRyeSNmaWVsZHNcbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkcz86IGFueTtcblxuICAvKipcbiAgICogTWFuYWdlciBpcyBhbiBpZGVudGlmaWVyIG9mIHRoZSB3b3JrZmxvdyBtYW5hZ2luZyB0aGVzZSBmaWVsZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk1hbmFnZWRGaWVsZHNFbnRyeSNtYW5hZ2VyXG4gICAqL1xuICByZWFkb25seSBtYW5hZ2VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcGVyYXRpb24gaXMgdGhlIHR5cGUgb2Ygb3BlcmF0aW9uIHdoaWNoIGxlYWQgdG8gdGhpcyBNYW5hZ2VkRmllbGRzRW50cnkgYmVpbmcgY3JlYXRlZC4gVGhlIG9ubHkgdmFsaWQgdmFsdWVzIGZvciB0aGlzIGZpZWxkIGFyZSAnQXBwbHknIGFuZCAnVXBkYXRlJy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTWFuYWdlZEZpZWxkc0VudHJ5I29wZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lIGlzIHRpbWVzdGFtcCBvZiB3aGVuIHRoZXNlIGZpZWxkcyB3ZXJlIHNldC4gSXQgc2hvdWxkIGFsd2F5cyBiZSBlbXB0eSBpZiBPcGVyYXRpb24gaXMgJ0FwcGx5J1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5NYW5hZ2VkRmllbGRzRW50cnkjdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZT86IERhdGU7XG5cbn1cblxuLyoqXG4gKiBPd25lclJlZmVyZW5jZSBjb250YWlucyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbGV0IHlvdSBpZGVudGlmeSBhbiBvd25pbmcgb2JqZWN0LiBBbiBvd25pbmcgb2JqZWN0IG11c3QgYmUgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBkZXBlbmRlbnQsIG9yIGJlIGNsdXN0ZXItc2NvcGVkLCBzbyB0aGVyZSBpcyBubyBuYW1lc3BhY2UgZmllbGQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT3duZXJSZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lclJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBBUEkgdmVyc2lvbiBvZiB0aGUgcmVmZXJlbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk93bmVyUmVmZXJlbmNlI2FwaVZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgQU5EIGlmIHRoZSBvd25lciBoYXMgdGhlIFwiZm9yZWdyb3VuZERlbGV0aW9uXCIgZmluYWxpemVyLCB0aGVuIHRoZSBvd25lciBjYW5ub3QgYmUgZGVsZXRlZCBmcm9tIHRoZSBrZXktdmFsdWUgc3RvcmUgdW50aWwgdGhpcyByZWZlcmVuY2UgaXMgcmVtb3ZlZC4gRGVmYXVsdHMgdG8gZmFsc2UuIFRvIHNldCB0aGlzIGZpZWxkLCBhIHVzZXIgbmVlZHMgXCJkZWxldGVcIiBwZXJtaXNzaW9uIG9mIHRoZSBvd25lciwgb3RoZXJ3aXNlIDQyMiAoVW5wcm9jZXNzYWJsZSBFbnRpdHkpIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLiBUbyBzZXQgdGhpcyBmaWVsZCwgYSB1c2VyIG5lZWRzIFwiZGVsZXRlXCIgcGVybWlzc2lvbiBvZiB0aGUgb3duZXIsIG90aGVyd2lzZSA0MjIgKFVucHJvY2Vzc2FibGUgRW50aXR5KSB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5Pd25lclJlZmVyZW5jZSNibG9ja093bmVyRGVsZXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrT3duZXJEZWxldGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRoaXMgcmVmZXJlbmNlIHBvaW50cyB0byB0aGUgbWFuYWdpbmcgY29udHJvbGxlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT3duZXJSZWZlcmVuY2UjY29udHJvbGxlclxuICAgKi9cbiAgcmVhZG9ubHkgY29udHJvbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEtpbmQgb2YgdGhlIHJlZmVyZW50LiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5Pd25lclJlZmVyZW5jZSNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJlZmVyZW50LiBNb3JlIGluZm86IGh0dHA6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycyNuYW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5Pd25lclJlZmVyZW5jZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVJRCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzI3VpZHNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT3duZXJSZWZlcmVuY2UjdWlkXG4gICAqL1xuICByZWFkb25seSB1aWQ6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFdlYmhvb2tDbGllbnRDb25maWcgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHRvIG1ha2UgYSBUTFMgY29ubmVjdGlvbiB3aXRoIHRoZSB3ZWJob29rXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLldlYmhvb2tDbGllbnRDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rQ2xpZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIGBjYUJ1bmRsZWAgaXMgYSBQRU0gZW5jb2RlZCBDQSBidW5kbGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSB3ZWJob29rJ3Mgc2VydmVyIGNlcnRpZmljYXRlLiBJZiB1bnNwZWNpZmllZCwgc3lzdGVtIHRydXN0IHJvb3RzIG9uIHRoZSBhcGlzZXJ2ZXIgYXJlIHVzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5XZWJob29rQ2xpZW50Q29uZmlnI2NhQnVuZGxlXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogYHNlcnZpY2VgIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGZvciB0aGlzIHdlYmhvb2suIEVpdGhlciBgc2VydmljZWAgb3IgYHVybGAgbXVzdCBiZSBzcGVjaWZpZWQuXG5cbklmIHRoZSB3ZWJob29rIGlzIHJ1bm5pbmcgd2l0aGluIHRoZSBjbHVzdGVyLCB0aGVuIHlvdSBzaG91bGQgdXNlIGBzZXJ2aWNlYC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLldlYmhvb2tDbGllbnRDb25maWcjc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZT86IFNlcnZpY2VSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIGB1cmxgIGdpdmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgd2ViaG9vaywgaW4gc3RhbmRhcmQgVVJMIGZvcm0gKGBzY2hlbWU6Ly9ob3N0OnBvcnQvcGF0aGApLiBFeGFjdGx5IG9uZSBvZiBgdXJsYCBvciBgc2VydmljZWAgbXVzdCBiZSBzcGVjaWZpZWQuXG5cblRoZSBgaG9zdGAgc2hvdWxkIG5vdCByZWZlciB0byBhIHNlcnZpY2UgcnVubmluZyBpbiB0aGUgY2x1c3RlcjsgdXNlIHRoZSBgc2VydmljZWAgZmllbGQgaW5zdGVhZC4gVGhlIGhvc3QgbWlnaHQgYmUgcmVzb2x2ZWQgdmlhIGV4dGVybmFsIEROUyBpbiBzb21lIGFwaXNlcnZlcnMgKGUuZy4sIGBrdWJlLWFwaXNlcnZlcmAgY2Fubm90IHJlc29sdmUgaW4tY2x1c3RlciBETlMgYXMgdGhhdCB3b3VsZCBiZSBhIGxheWVyaW5nIHZpb2xhdGlvbikuIGBob3N0YCBtYXkgYWxzbyBiZSBhbiBJUCBhZGRyZXNzLlxuXG5QbGVhc2Ugbm90ZSB0aGF0IHVzaW5nIGBsb2NhbGhvc3RgIG9yIGAxMjcuMC4wLjFgIGFzIGEgYGhvc3RgIGlzIHJpc2t5IHVubGVzcyB5b3UgdGFrZSBncmVhdCBjYXJlIHRvIHJ1biB0aGlzIHdlYmhvb2sgb24gYWxsIGhvc3RzIHdoaWNoIHJ1biBhbiBhcGlzZXJ2ZXIgd2hpY2ggbWlnaHQgbmVlZCB0byBtYWtlIGNhbGxzIHRvIHRoaXMgd2ViaG9vay4gU3VjaCBpbnN0YWxscyBhcmUgbGlrZWx5IHRvIGJlIG5vbi1wb3J0YWJsZSwgaS5lLiwgbm90IGVhc3kgdG8gdHVybiB1cCBpbiBhIG5ldyBjbHVzdGVyLlxuXG5UaGUgc2NoZW1lIG11c3QgYmUgXCJodHRwc1wiOyB0aGUgVVJMIG11c3QgYmVnaW4gd2l0aCBcImh0dHBzOi8vXCIuXG5cbkEgcGF0aCBpcyBvcHRpb25hbCwgYW5kIGlmIHByZXNlbnQgbWF5IGJlIGFueSBzdHJpbmcgcGVybWlzc2libGUgaW4gYSBVUkwuIFlvdSBtYXkgdXNlIHRoZSBwYXRoIHRvIHBhc3MgYW4gYXJiaXRyYXJ5IHN0cmluZyB0byB0aGUgd2ViaG9vaywgZm9yIGV4YW1wbGUsIGEgY2x1c3RlciBpZGVudGlmaWVyLlxuXG5BdHRlbXB0aW5nIHRvIHVzZSBhIHVzZXIgb3IgYmFzaWMgYXV0aCBlLmcuIFwidXNlcjpwYXNzd29yZEBcIiBpcyBub3QgYWxsb3dlZC4gRnJhZ21lbnRzIChcIiMuLi5cIikgYW5kIHF1ZXJ5IHBhcmFtZXRlcnMgKFwiPy4uLlwiKSBhcmUgbm90IGFsbG93ZWQsIGVpdGhlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLldlYmhvb2tDbGllbnRDb25maWcjdXJsXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBBIGxhYmVsIHNlbGVjdG9yIGlzIGEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMuIFRoZSByZXN1bHQgb2YgbWF0Y2hMYWJlbHMgYW5kIG1hdGNoRXhwcmVzc2lvbnMgYXJlIEFORGVkLiBBbiBlbXB0eSBsYWJlbCBzZWxlY3RvciBtYXRjaGVzIGFsbCBvYmplY3RzLiBBIG51bGwgbGFiZWwgc2VsZWN0b3IgbWF0Y2hlcyBubyBvYmplY3RzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbFNlbGVjdG9yIHtcbiAgLyoqXG4gICAqIG1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3IjbWF0Y2hFeHByZXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hFeHByZXNzaW9ucz86IExhYmVsU2VsZWN0b3JSZXF1aXJlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGFiZWxTZWxlY3RvciNtYXRjaExhYmVsc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hMYWJlbHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG59XG5cbi8qKlxuICogUnVsZVdpdGhPcGVyYXRpb25zIGlzIGEgdHVwbGUgb2YgT3BlcmF0aW9ucyBhbmQgUmVzb3VyY2VzLiBJdCBpcyByZWNvbW1lbmRlZCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIHR1cGxlIGV4cGFuc2lvbnMgYXJlIHZhbGlkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5SdWxlV2l0aE9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlV2l0aE9wZXJhdGlvbnMge1xuICAvKipcbiAgICogQVBJR3JvdXBzIGlzIHRoZSBBUEkgZ3JvdXBzIHRoZSByZXNvdXJjZXMgYmVsb25nIHRvLiAnKicgaXMgYWxsIGdyb3Vwcy4gSWYgJyonIGlzIHByZXNlbnQsIHRoZSBsZW5ndGggb2YgdGhlIHNsaWNlIG11c3QgYmUgb25lLiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlJ1bGVXaXRoT3BlcmF0aW9ucyNhcGlHcm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdyb3Vwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBUElWZXJzaW9ucyBpcyB0aGUgQVBJIHZlcnNpb25zIHRoZSByZXNvdXJjZXMgYmVsb25nIHRvLiAnKicgaXMgYWxsIHZlcnNpb25zLiBJZiAnKicgaXMgcHJlc2VudCwgdGhlIGxlbmd0aCBvZiB0aGUgc2xpY2UgbXVzdCBiZSBvbmUuIFJlcXVpcmVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuUnVsZVdpdGhPcGVyYXRpb25zI2FwaVZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcGVyYXRpb25zIGlzIHRoZSBvcGVyYXRpb25zIHRoZSBhZG1pc3Npb24gaG9vayBjYXJlcyBhYm91dCAtIENSRUFURSwgVVBEQVRFLCBvciAqIGZvciBhbGwgb3BlcmF0aW9ucy4gSWYgJyonIGlzIHByZXNlbnQsIHRoZSBsZW5ndGggb2YgdGhlIHNsaWNlIG11c3QgYmUgb25lLiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlJ1bGVXaXRoT3BlcmF0aW9ucyNvcGVyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyBpcyBhIGxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgcnVsZSBhcHBsaWVzIHRvLlxuXG5Gb3IgZXhhbXBsZTogJ3BvZHMnIG1lYW5zIHBvZHMuICdwb2RzL2xvZycgbWVhbnMgdGhlIGxvZyBzdWJyZXNvdXJjZSBvZiBwb2RzLiAnKicgbWVhbnMgYWxsIHJlc291cmNlcywgYnV0IG5vdCBzdWJyZXNvdXJjZXMuICdwb2RzLyonIG1lYW5zIGFsbCBzdWJyZXNvdXJjZXMgb2YgcG9kcy4gJ18vc2NhbGUnIG1lYW5zIGFsbCBzY2FsZSBzdWJyZXNvdXJjZXMuICdfLyonIG1lYW5zIGFsbCByZXNvdXJjZXMgYW5kIHRoZWlyIHN1YnJlc291cmNlcy5cblxuSWYgd2lsZGNhcmQgaXMgcHJlc2VudCwgdGhlIHZhbGlkYXRpb24gcnVsZSB3aWxsIGVuc3VyZSByZXNvdXJjZXMgZG8gbm90IG92ZXJsYXAgd2l0aCBlYWNoIG90aGVyLlxuXG5EZXBlbmRpbmcgb24gdGhlIGVuY2xvc2luZyBvYmplY3QsIHN1YnJlc291cmNlcyBtaWdodCBub3QgYmUgYWxsb3dlZC4gUmVxdWlyZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5SdWxlV2l0aE9wZXJhdGlvbnMjcmVzb3VyY2VzXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogc2NvcGUgc3BlY2lmaWVzIHRoZSBzY29wZSBvZiB0aGlzIHJ1bGUuIFZhbGlkIHZhbHVlcyBhcmUgXCJDbHVzdGVyXCIsIFwiTmFtZXNwYWNlZFwiLCBhbmQgXCIqXCIgXCJDbHVzdGVyXCIgbWVhbnMgdGhhdCBvbmx5IGNsdXN0ZXItc2NvcGVkIHJlc291cmNlcyB3aWxsIG1hdGNoIHRoaXMgcnVsZS4gTmFtZXNwYWNlIEFQSSBvYmplY3RzIGFyZSBjbHVzdGVyLXNjb3BlZC4gXCJOYW1lc3BhY2VkXCIgbWVhbnMgdGhhdCBvbmx5IG5hbWVzcGFjZWQgcmVzb3VyY2VzIHdpbGwgbWF0Y2ggdGhpcyBydWxlLiBcIipcIiBtZWFucyB0aGF0IHRoZXJlIGFyZSBubyBzY29wZSByZXN0cmljdGlvbnMuIFN1YnJlc291cmNlcyBtYXRjaCB0aGUgc2NvcGUgb2YgdGhlaXIgcGFyZW50IHJlc291cmNlLiBEZWZhdWx0IGlzIFwiKlwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCAuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5SdWxlV2l0aE9wZXJhdGlvbnMjc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmV4dGVuc2lvbnMudjFiZXRhMS5EYWVtb25TZXRVcGRhdGVTdHJhdGVneVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhZW1vblNldFVwZGF0ZVN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFJvbGxpbmcgdXBkYXRlIGNvbmZpZyBwYXJhbXMuIFByZXNlbnQgb25seSBpZiB0eXBlID0gXCJSb2xsaW5nVXBkYXRlXCIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuRGFlbW9uU2V0VXBkYXRlU3RyYXRlZ3kjcm9sbGluZ1VwZGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGluZ1VwZGF0ZT86IFJvbGxpbmdVcGRhdGVEYWVtb25TZXQ7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgZGFlbW9uIHNldCB1cGRhdGUuIENhbiBiZSBcIlJvbGxpbmdVcGRhdGVcIiBvciBcIk9uRGVsZXRlXCIuIERlZmF1bHQgaXMgT25EZWxldGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE9uRGVsZXRlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLkRhZW1vblNldFVwZGF0ZVN0cmF0ZWd5I3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBEZXBsb3ltZW50U3RyYXRlZ3kgZGVzY3JpYmVzIGhvdyB0byByZXBsYWNlIGV4aXN0aW5nIHBvZHMgd2l0aCBuZXcgb25lcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLkRlcGxveW1lbnRTdHJhdGVneVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBSb2xsaW5nIHVwZGF0ZSBjb25maWcgcGFyYW1zLiBQcmVzZW50IG9ubHkgaWYgRGVwbG95bWVudFN0cmF0ZWd5VHlwZSA9IFJvbGxpbmdVcGRhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudFN0cmF0ZWd5I3JvbGxpbmdVcGRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxpbmdVcGRhdGU/OiBSb2xsaW5nVXBkYXRlRGVwbG95bWVudDtcblxuICAvKipcbiAgICogVHlwZSBvZiBkZXBsb3ltZW50LiBDYW4gYmUgXCJSZWNyZWF0ZVwiIG9yIFwiUm9sbGluZ1VwZGF0ZVwiLiBEZWZhdWx0IGlzIFJvbGxpbmdVcGRhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJvbGxpbmdVcGRhdGUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuRGVwbG95bWVudFN0cmF0ZWd5I3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5IGluZGljYXRlcyB0aGUgc3RyYXRlZ3kgdGhhdCB0aGUgU3RhdGVmdWxTZXQgY29udHJvbGxlciB3aWxsIHVzZSB0byBwZXJmb3JtIHVwZGF0ZXMuIEl0IGluY2x1ZGVzIGFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gdGhlIHVwZGF0ZSBmb3IgdGhlIGluZGljYXRlZCBzdHJhdGVneS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlN0YXRlZnVsU2V0VXBkYXRlU3RyYXRlZ3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFJvbGxpbmdVcGRhdGUgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSBwYXJhbWV0ZXJzIHdoZW4gVHlwZSBpcyBSb2xsaW5nVXBkYXRlU3RhdGVmdWxTZXRTdHJhdGVneVR5cGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneSNyb2xsaW5nVXBkYXRlXG4gICAqL1xuICByZWFkb25seSByb2xsaW5nVXBkYXRlPzogUm9sbGluZ1VwZGF0ZVN0YXRlZnVsU2V0U3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIFR5cGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5LiBEZWZhdWx0IGlzIFJvbGxpbmdVcGRhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJvbGxpbmdVcGRhdGUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneSN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUG9saWN5IGRlZmluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaG93IGF1ZGl0IGV2ZW50cyBhcmUgbG9nZ2VkXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLlBvbGljeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIC8qKlxuICAgKiBUaGUgTGV2ZWwgdGhhdCBhbGwgcmVxdWVzdHMgYXJlIHJlY29yZGVkIGF0LiBhdmFpbGFibGUgb3B0aW9uczogTm9uZSwgTWV0YWRhdGEsIFJlcXVlc3QsIFJlcXVlc3RSZXNwb25zZSByZXF1aXJlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuUG9saWN5I2xldmVsXG4gICAqL1xuICByZWFkb25seSBsZXZlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFnZXMgaXMgYSBsaXN0IG9mIHN0YWdlcyBmb3Igd2hpY2ggZXZlbnRzIGFyZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuUG9saWN5I3N0YWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VzPzogc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBXZWJob29rIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB3ZWJob29rXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLldlYmhvb2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rIHtcbiAgLyoqXG4gICAqIENsaWVudENvbmZpZyBob2xkcyB0aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgd2ViaG9vayByZXF1aXJlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuV2ViaG9vayNjbGllbnRDb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudENvbmZpZzogV2ViaG9va0NsaWVudENvbmZpZztcblxuICAvKipcbiAgICogVGhyb3R0bGUgaG9sZHMgdGhlIG9wdGlvbnMgZm9yIHRocm90dGxpbmcgdGhlIHdlYmhvb2tcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLldlYmhvb2sjdGhyb3R0bGVcbiAgICovXG4gIHJlYWRvbmx5IHRocm90dGxlPzogV2ViaG9va1Rocm90dGxlQ29uZmlnO1xuXG59XG5cbi8qKlxuICogTm9uUmVzb3VyY2VBdHRyaWJ1dGVzIGluY2x1ZGVzIHRoZSBhdXRob3JpemF0aW9uIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIGZvciBub24tcmVzb3VyY2UgcmVxdWVzdHMgdG8gdGhlIEF1dGhvcml6ZXIgaW50ZXJmYWNlXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5Ob25SZXNvdXJjZUF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb25SZXNvdXJjZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogUGF0aCBpcyB0aGUgVVJMIHBhdGggb2YgdGhlIHJlcXVlc3RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5Ob25SZXNvdXJjZUF0dHJpYnV0ZXMjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyYiBpcyB0aGUgc3RhbmRhcmQgSFRUUCB2ZXJiXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuTm9uUmVzb3VyY2VBdHRyaWJ1dGVzI3ZlcmJcbiAgICovXG4gIHJlYWRvbmx5IHZlcmI/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXNvdXJjZUF0dHJpYnV0ZXMgaW5jbHVkZXMgdGhlIGF1dGhvcml6YXRpb24gYXR0cmlidXRlcyBhdmFpbGFibGUgZm9yIHJlc291cmNlIHJlcXVlc3RzIHRvIHRoZSBBdXRob3JpemVyIGludGVyZmFjZVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRob3JpemF0aW9uLnYxYmV0YTEuUmVzb3VyY2VBdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIEdyb3VwIGlzIHRoZSBBUEkgR3JvdXAgb2YgdGhlIFJlc291cmNlLiAgXCIqXCIgbWVhbnMgYWxsLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlJlc291cmNlQXR0cmlidXRlcyNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBcImdldFwiIG9yIGRlbGV0ZWQgZm9yIGEgXCJkZWxldGVcIi4gXCJcIiAoZW1wdHkpIG1lYW5zIGFsbC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5SZXNvdXJjZUF0dHJpYnV0ZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGFjdGlvbiBiZWluZyByZXF1ZXN0ZWQuICBDdXJyZW50bHksIHRoZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gbm8gbmFtZXNwYWNlIGFuZCBhbGwgbmFtZXNwYWNlcyBcIlwiIChlbXB0eSkgaXMgZGVmYXVsdGVkIGZvciBMb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdzIFwiXCIgKGVtcHR5KSBpcyBlbXB0eSBmb3IgY2x1c3Rlci1zY29wZWQgcmVzb3VyY2VzIFwiXCIgKGVtcHR5KSBtZWFucyBcImFsbFwiIGZvciBuYW1lc3BhY2Ugc2NvcGVkIHJlc291cmNlcyBmcm9tIGEgU3ViamVjdEFjY2Vzc1JldmlldyBvciBTZWxmU3ViamVjdEFjY2Vzc1Jldmlld1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlJlc291cmNlQXR0cmlidXRlcyNuYW1lc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2UgaXMgb25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlcy4gIFwiKlwiIG1lYW5zIGFsbC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5SZXNvdXJjZUF0dHJpYnV0ZXMjcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJyZXNvdXJjZSBpcyBvbmUgb2YgdGhlIGV4aXN0aW5nIHJlc291cmNlIHR5cGVzLiAgXCJcIiBtZWFucyBub25lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlJlc291cmNlQXR0cmlidXRlcyNzdWJyZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VicmVzb3VyY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcmIgaXMgYSBrdWJlcm5ldGVzIHJlc291cmNlIEFQSSB2ZXJiLCBsaWtlOiBnZXQsIGxpc3QsIHdhdGNoLCBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlLCBwcm94eS4gIFwiKlwiIG1lYW5zIGFsbC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dGhvcml6YXRpb24udjFiZXRhMS5SZXNvdXJjZUF0dHJpYnV0ZXMjdmVyYlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYj86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBpcyB0aGUgQVBJIFZlcnNpb24gb2YgdGhlIFJlc291cmNlLiAgXCIqXCIgbWVhbnMgYWxsLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0aG9yaXphdGlvbi52MWJldGExLlJlc291cmNlQXR0cmlidXRlcyN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogTWV0cmljU3BlYyBzcGVjaWZpZXMgaG93IHRvIHNjYWxlIGJhc2VkIG9uIGEgc2luZ2xlIG1ldHJpYyAob25seSBgdHlwZWAgYW5kIG9uZSBvdGhlciBtYXRjaGluZyBmaWVsZCBzaG91bGQgYmUgc2V0IGF0IG9uY2UpLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk1ldHJpY1NwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNTcGVjIHtcbiAgLyoqXG4gICAqIGV4dGVybmFsIHJlZmVycyB0byBhIGdsb2JhbCBtZXRyaWMgdGhhdCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBLdWJlcm5ldGVzIG9iamVjdC4gSXQgYWxsb3dzIGF1dG9zY2FsaW5nIGJhc2VkIG9uIGluZm9ybWF0aW9uIGNvbWluZyBmcm9tIGNvbXBvbmVudHMgcnVubmluZyBvdXRzaWRlIG9mIGNsdXN0ZXIgKGZvciBleGFtcGxlIGxlbmd0aCBvZiBxdWV1ZSBpbiBjbG91ZCBtZXNzYWdpbmcgc2VydmljZSwgb3IgUVBTIGZyb20gbG9hZGJhbGFuY2VyIHJ1bm5pbmcgb3V0c2lkZSBvZiBjbHVzdGVyKS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuTWV0cmljU3BlYyNleHRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWw/OiBFeHRlcm5hbE1ldHJpY1NvdXJjZTtcblxuICAvKipcbiAgICogb2JqZWN0IHJlZmVycyB0byBhIG1ldHJpYyBkZXNjcmliaW5nIGEgc2luZ2xlIGt1YmVybmV0ZXMgb2JqZWN0IChmb3IgZXhhbXBsZSwgaGl0cy1wZXItc2Vjb25kIG9uIGFuIEluZ3Jlc3Mgb2JqZWN0KS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuTWV0cmljU3BlYyNvYmplY3RcbiAgICovXG4gIHJlYWRvbmx5IG9iamVjdD86IE9iamVjdE1ldHJpY1NvdXJjZTtcblxuICAvKipcbiAgICogcG9kcyByZWZlcnMgdG8gYSBtZXRyaWMgZGVzY3JpYmluZyBlYWNoIHBvZCBpbiB0aGUgY3VycmVudCBzY2FsZSB0YXJnZXQgKGZvciBleGFtcGxlLCB0cmFuc2FjdGlvbnMtcHJvY2Vzc2VkLXBlci1zZWNvbmQpLiAgVGhlIHZhbHVlcyB3aWxsIGJlIGF2ZXJhZ2VkIHRvZ2V0aGVyIGJlZm9yZSBiZWluZyBjb21wYXJlZCB0byB0aGUgdGFyZ2V0IHZhbHVlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5NZXRyaWNTcGVjI3BvZHNcbiAgICovXG4gIHJlYWRvbmx5IHBvZHM/OiBQb2RzTWV0cmljU291cmNlO1xuXG4gIC8qKlxuICAgKiByZXNvdXJjZSByZWZlcnMgdG8gYSByZXNvdXJjZSBtZXRyaWMgKHN1Y2ggYXMgdGhvc2Ugc3BlY2lmaWVkIGluIHJlcXVlc3RzIGFuZCBsaW1pdHMpIGtub3duIHRvIEt1YmVybmV0ZXMgZGVzY3JpYmluZyBlYWNoIHBvZCBpbiB0aGUgY3VycmVudCBzY2FsZSB0YXJnZXQgKGUuZy4gQ1BVIG9yIG1lbW9yeSkuIFN1Y2ggbWV0cmljcyBhcmUgYnVpbHQgaW4gdG8gS3ViZXJuZXRlcywgYW5kIGhhdmUgc3BlY2lhbCBzY2FsaW5nIG9wdGlvbnMgb24gdG9wIG9mIHRob3NlIGF2YWlsYWJsZSB0byBub3JtYWwgcGVyLXBvZCBtZXRyaWNzIHVzaW5nIHRoZSBcInBvZHNcIiBzb3VyY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk1ldHJpY1NwZWMjcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlPzogUmVzb3VyY2VNZXRyaWNTb3VyY2U7XG5cbiAgLyoqXG4gICAqIHR5cGUgaXMgdGhlIHR5cGUgb2YgbWV0cmljIHNvdXJjZS4gIEl0IHNob3VsZCBiZSBvbmUgb2YgXCJPYmplY3RcIiwgXCJQb2RzXCIgb3IgXCJSZXNvdXJjZVwiLCBlYWNoIG1hcHBpbmcgdG8gYSBtYXRjaGluZyBmaWVsZCBpbiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5NZXRyaWNTcGVjI3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENyb3NzVmVyc2lvbk9iamVjdFJlZmVyZW5jZSBjb250YWlucyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbGV0IHlvdSBpZGVudGlmeSB0aGUgcmVmZXJyZWQgcmVzb3VyY2UuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuQ3Jvc3NWZXJzaW9uT2JqZWN0UmVmZXJlbmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NWZXJzaW9uT2JqZWN0UmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFQSSB2ZXJzaW9uIG9mIHRoZSByZWZlcmVudFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Dcm9zc1ZlcnNpb25PYmplY3RSZWZlcmVuY2UjYXBpVmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogS2luZCBvZiB0aGUgcmVmZXJlbnQ7IE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXCJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuQ3Jvc3NWZXJzaW9uT2JqZWN0UmVmZXJlbmNlI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmVmZXJlbnQ7IE1vcmUgaW5mbzogaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzI25hbWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkNyb3NzVmVyc2lvbk9iamVjdFJlZmVyZW5jZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBKb2JUZW1wbGF0ZVNwZWMgZGVzY3JpYmVzIHRoZSBkYXRhIGEgSm9iIHNob3VsZCBoYXZlIHdoZW4gY3JlYXRlZCBmcm9tIGEgdGVtcGxhdGVcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuSm9iVGVtcGxhdGVTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iVGVtcGxhdGVTcGVjIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhIG9mIHRoZSBqb2JzIGNyZWF0ZWQgZnJvbSB0aGlzIHRlbXBsYXRlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYmF0Y2gudjJhbHBoYTEuSm9iVGVtcGxhdGVTcGVjI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE9iamVjdE1ldGE7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb24gb2YgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgdGhlIGpvYi4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjc3BlYy1hbmQtc3RhdHVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5iYXRjaC52MmFscGhhMS5Kb2JUZW1wbGF0ZVNwZWMjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEpvYlNwZWM7XG5cbn1cblxuLyoqXG4gKiBFbmRwb2ludEFkZHJlc3MgaXMgYSB0dXBsZSB0aGF0IGRlc2NyaWJlcyBzaW5nbGUgSVAgYWRkcmVzcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludEFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludEFkZHJlc3Mge1xuICAvKipcbiAgICogVGhlIEhvc3RuYW1lIG9mIHRoaXMgZW5kcG9pbnRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRBZGRyZXNzI2hvc3RuYW1lXG4gICAqL1xuICByZWFkb25seSBob3N0bmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIG9mIHRoaXMgZW5kcG9pbnQuIE1heSBub3QgYmUgbG9vcGJhY2sgKDEyNy4wLjAuMC84KSwgbGluay1sb2NhbCAoMTY5LjI1NC4wLjAvMTYpLCBvciBsaW5rLWxvY2FsIG11bHRpY2FzdCAoKDIyNC4wLjAuMC8yNCkuIElQdjYgaXMgYWxzbyBhY2NlcHRlZCBidXQgbm90IGZ1bGx5IHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLiBBbHNvLCBjZXJ0YWluIGt1YmVybmV0ZXMgY29tcG9uZW50cywgbGlrZSBrdWJlLXByb3h5LCBhcmUgbm90IElQdjYgcmVhZHkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50QWRkcmVzcyNpcFxuICAgKi9cbiAgcmVhZG9ubHkgaXA6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWw6IE5vZGUgaG9zdGluZyB0aGlzIGVuZHBvaW50LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBlbmRwb2ludHMgbG9jYWwgdG8gYSBub2RlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludEFkZHJlc3Mjbm9kZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gb2JqZWN0IHByb3ZpZGluZyB0aGUgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50QWRkcmVzcyN0YXJnZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFJlZj86IE9iamVjdFJlZmVyZW5jZTtcblxufVxuXG4vKipcbiAqIEVuZHBvaW50UG9ydCBpcyBhIHR1cGxlIHRoYXQgZGVzY3JpYmVzIGEgc2luZ2xlIHBvcnQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRQb3J0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5kcG9pbnRQb3J0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgcG9ydCAoY29ycmVzcG9uZHMgdG8gU2VydmljZVBvcnQuTmFtZSkuIE11c3QgYmUgYSBETlNfTEFCRUwuIE9wdGlvbmFsIG9ubHkgaWYgb25lIHBvcnQgaXMgZGVmaW5lZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW5kcG9pbnRQb3J0I25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0IG51bWJlciBvZiB0aGUgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVuZHBvaW50UG9ydCNwb3J0XG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBwcm90b2NvbCBmb3IgdGhpcyBwb3J0LiBNdXN0IGJlIFVEUCwgVENQLCBvciBTQ1RQLiBEZWZhdWx0IGlzIFRDUC5cbiAgICpcbiAgICogQGRlZmF1bHQgVENQLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbmRwb2ludFBvcnQjcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogTGltaXRSYW5nZUl0ZW0gZGVmaW5lcyBhIG1pbi9tYXggdXNhZ2UgbGltaXQgZm9yIGFueSByZXNvdXJjZSB0aGF0IG1hdGNoZXMgb24ga2luZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlSXRlbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbWl0UmFuZ2VJdGVtIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgcmVzb3VyY2UgcmVxdWlyZW1lbnQgbGltaXQgdmFsdWUgYnkgcmVzb3VyY2UgbmFtZSBpZiByZXNvdXJjZSBsaW1pdCBpcyBvbWl0dGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlSXRlbSNkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0PzogeyBba2V5OiBzdHJpbmddOiBRdWFudGl0eSB9O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0UmVxdWVzdCBpcyB0aGUgZGVmYXVsdCByZXNvdXJjZSByZXF1aXJlbWVudCByZXF1ZXN0IHZhbHVlIGJ5IHJlc291cmNlIG5hbWUgaWYgcmVzb3VyY2UgcmVxdWVzdCBpcyBvbWl0dGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlSXRlbSNkZWZhdWx0UmVxdWVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJlcXVlc3Q/OiB7IFtrZXk6IHN0cmluZ106IFF1YW50aXR5IH07XG5cbiAgLyoqXG4gICAqIE1heCB1c2FnZSBjb25zdHJhaW50cyBvbiB0aGlzIGtpbmQgYnkgcmVzb3VyY2UgbmFtZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZUl0ZW0jbWF4XG4gICAqL1xuICByZWFkb25seSBtYXg/OiB7IFtrZXk6IHN0cmluZ106IFF1YW50aXR5IH07XG5cbiAgLyoqXG4gICAqIE1heExpbWl0UmVxdWVzdFJhdGlvIGlmIHNwZWNpZmllZCwgdGhlIG5hbWVkIHJlc291cmNlIG11c3QgaGF2ZSBhIHJlcXVlc3QgYW5kIGxpbWl0IHRoYXQgYXJlIGJvdGggbm9uLXplcm8gd2hlcmUgbGltaXQgZGl2aWRlZCBieSByZXF1ZXN0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZW51bWVyYXRlZCB2YWx1ZTsgdGhpcyByZXByZXNlbnRzIHRoZSBtYXggYnVyc3QgZm9yIHRoZSBuYW1lZCByZXNvdXJjZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGltaXRSYW5nZUl0ZW0jbWF4TGltaXRSZXF1ZXN0UmF0aW9cbiAgICovXG4gIHJlYWRvbmx5IG1heExpbWl0UmVxdWVzdFJhdGlvPzogeyBba2V5OiBzdHJpbmddOiBRdWFudGl0eSB9O1xuXG4gIC8qKlxuICAgKiBNaW4gdXNhZ2UgY29uc3RyYWludHMgb24gdGhpcyBraW5kIGJ5IHJlc291cmNlIG5hbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpbWl0UmFuZ2VJdGVtI21pblxuICAgKi9cbiAgcmVhZG9ubHkgbWluPzogeyBba2V5OiBzdHJpbmddOiBRdWFudGl0eSB9O1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHJlc291cmNlIHRoYXQgdGhpcyBsaW1pdCBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5MaW1pdFJhbmdlSXRlbSN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogTm9kZUNvbmZpZ1NvdXJjZSBzcGVjaWZpZXMgYSBzb3VyY2Ugb2Ygbm9kZSBjb25maWd1cmF0aW9uLiBFeGFjdGx5IG9uZSBzdWJmaWVsZCAoZXhjbHVkaW5nIG1ldGFkYXRhKSBtdXN0IGJlIG5vbi1uaWwuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZUNvbmZpZ1NvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVDb25maWdTb3VyY2Uge1xuICAvKipcbiAgICogQ29uZmlnTWFwIGlzIGEgcmVmZXJlbmNlIHRvIGEgTm9kZSdzIENvbmZpZ01hcFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlQ29uZmlnU291cmNlI2NvbmZpZ01hcFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnTWFwPzogQ29uZmlnTWFwTm9kZUNvbmZpZ1NvdXJjZTtcblxufVxuXG4vKipcbiAqIFRoZSBub2RlIHRoaXMgVGFpbnQgaXMgYXR0YWNoZWQgdG8gaGFzIHRoZSBcImVmZmVjdFwiIG9uIGFueSBwb2QgdGhhdCBkb2VzIG5vdCB0b2xlcmF0ZSB0aGUgVGFpbnQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVGFpbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWludCB7XG4gIC8qKlxuICAgKiBSZXF1aXJlZC4gVGhlIGVmZmVjdCBvZiB0aGUgdGFpbnQgb24gcG9kcyB0aGF0IGRvIG5vdCB0b2xlcmF0ZSB0aGUgdGFpbnQuIFZhbGlkIGVmZmVjdHMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVGFpbnQjZWZmZWN0XG4gICAqL1xuICByZWFkb25seSBlZmZlY3Q6IHN0cmluZztcblxuICAvKipcbiAgICogUmVxdWlyZWQuIFRoZSB0YWludCBrZXkgdG8gYmUgYXBwbGllZCB0byBhIG5vZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRhaW50I2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVBZGRlZCByZXByZXNlbnRzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YWludCB3YXMgYWRkZWQuIEl0IGlzIG9ubHkgd3JpdHRlbiBmb3IgTm9FeGVjdXRlIHRhaW50cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVGFpbnQjdGltZUFkZGVkXG4gICAqL1xuICByZWFkb25seSB0aW1lQWRkZWQ/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlZC4gVGhlIHRhaW50IHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhaW50IGtleS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVGFpbnQjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIFBlcnNpc3RlbnQgRGlzayByZXNvdXJjZSBpbiBBV1MuXG5cbkFuIEFXUyBFQlMgZGlzayBtdXN0IGV4aXN0IGJlZm9yZSBtb3VudGluZyB0byBhIGNvbnRhaW5lci4gVGhlIGRpc2sgbXVzdCBhbHNvIGJlIGluIHRoZSBzYW1lIEFXUyB6b25lIGFzIHRoZSBrdWJlbGV0LiBBbiBBV1MgRUJTIGRpc2sgY2FuIG9ubHkgYmUgbW91bnRlZCBhcyByZWFkL3dyaXRlIG9uY2UuIEFXUyBFQlMgdm9sdW1lcyBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IGFuZCBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgb2YgdGhlIHZvbHVtZSB0aGF0IHlvdSB3YW50IHRvIG1vdW50LiBUaXA6IEVuc3VyZSB0aGF0IHRoZSBmaWxlc3lzdGVtIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4YW1wbGVzOiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2F3c2VsYXN0aWNibG9ja3N0b3JlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uIGluIHRoZSB2b2x1bWUgdGhhdCB5b3Ugd2FudCB0byBtb3VudC4gSWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXMgdG8gbW91bnQgYnkgdm9sdW1lIG5hbWUuIEV4YW1wbGVzOiBGb3Igdm9sdW1lIC9kZXYvc2RhMSwgeW91IHNwZWNpZnkgdGhlIHBhcnRpdGlvbiBhcyBcIjFcIi4gU2ltaWxhcmx5LCB0aGUgdm9sdW1lIHBhcnRpdGlvbiBmb3IgL2Rldi9zZGEgaXMgXCIwXCIgKG9yIHlvdSBjYW4gbGVhdmUgdGhlIHByb3BlcnR5IGVtcHR5KS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2UjcGFydGl0aW9uXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgXCJ0cnVlXCIgdG8gZm9yY2UgYW5kIHNldCB0aGUgUmVhZE9ubHkgcHJvcGVydHkgaW4gVm9sdW1lTW91bnRzIHRvIFwidHJ1ZVwiLiBJZiBvbWl0dGVkLCB0aGUgZGVmYXVsdCBpcyBcImZhbHNlXCIuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2F3c2VsYXN0aWNibG9ja3N0b3JlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBJRCBvZiB0aGUgcGVyc2lzdGVudCBkaXNrIHJlc291cmNlIGluIEFXUyAoQW1hem9uIEVCUyB2b2x1bWUpLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNhd3NlbGFzdGljYmxvY2tzdG9yZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZSN2b2x1bWVJRFxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lSUQ6IHN0cmluZztcblxufVxuXG4vKipcbiAqIEF6dXJlRGlzayByZXByZXNlbnRzIGFuIEF6dXJlIERhdGEgRGlzayBtb3VudCBvbiB0aGUgaG9zdCBhbmQgYmluZCBtb3VudCB0byB0aGUgcG9kLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRGlza1ZvbHVtZVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF6dXJlRGlza1ZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBIb3N0IENhY2hpbmcgbW9kZTogTm9uZSwgUmVhZCBPbmx5LCBSZWFkIFdyaXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BenVyZURpc2tWb2x1bWVTb3VyY2UjY2FjaGluZ01vZGVcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hpbmdNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTmFtZSBvZiB0aGUgZGF0YSBkaXNrIGluIHRoZSBibG9iIHN0b3JhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQXp1cmVEaXNrVm9sdW1lU291cmNlI2Rpc2tOYW1lXG4gICAqL1xuICByZWFkb25seSBkaXNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJJIHRoZSBkYXRhIGRpc2sgaW4gdGhlIGJsb2Igc3RvcmFnZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BenVyZURpc2tWb2x1bWVTb3VyY2UjZGlza1VSSVxuICAgKi9cbiAgcmVhZG9ubHkgZGlza1VSSTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgdG8gbW91bnQuIE11c3QgYmUgYSBmaWxlc3lzdGVtIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4LiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRGlza1ZvbHVtZVNvdXJjZSNmc1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogRXhwZWN0ZWQgdmFsdWVzIFNoYXJlZDogbXVsdGlwbGUgYmxvYiBkaXNrcyBwZXIgc3RvcmFnZSBhY2NvdW50ICBEZWRpY2F0ZWQ6IHNpbmdsZSBibG9iIGRpc2sgcGVyIHN0b3JhZ2UgYWNjb3VudCAgTWFuYWdlZDogYXp1cmUgbWFuYWdlZCBkYXRhIGRpc2sgKG9ubHkgaW4gbWFuYWdlZCBhdmFpbGFiaWxpdHkgc2V0KS4gZGVmYXVsdHMgdG8gc2hhcmVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRGlza1ZvbHVtZVNvdXJjZSNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQXp1cmVEaXNrVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBBenVyZUZpbGUgcmVwcmVzZW50cyBhbiBBenVyZSBGaWxlIFNlcnZpY2UgbW91bnQgb24gdGhlIGhvc3QgYW5kIGJpbmQgbW91bnQgdG8gdGhlIHBvZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BenVyZUZpbGVQZXJzaXN0ZW50Vm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXp1cmVGaWxlUGVyc2lzdGVudFZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQXp1cmVGaWxlUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiBzZWNyZXQgdGhhdCBjb250YWlucyBBenVyZSBTdG9yYWdlIEFjY291bnQgTmFtZSBhbmQgS2V5XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRmlsZVBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2VjcmV0TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBzZWNyZXQgdGhhdCBjb250YWlucyBBenVyZSBTdG9yYWdlIEFjY291bnQgTmFtZSBhbmQgS2V5IGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgdGhlIFBvZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BenVyZUZpbGVQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3NlY3JldE5hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0TmFtZXNwYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaGFyZSBOYW1lXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRmlsZVBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2hhcmVOYW1lXG4gICAqL1xuICByZWFkb25seSBzaGFyZU5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpLnJlc291cmNlLlF1YW50aXR5XG4gKi9cbmV4cG9ydCBjbGFzcyBRdWFudGl0eSB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogUXVhbnRpdHkge1xuICAgIHJldHVybiBuZXcgUXVhbnRpdHkodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbU51bWJlcih2YWx1ZTogbnVtYmVyKTogUXVhbnRpdHkge1xuICAgIHJldHVybiBuZXcgUXVhbnRpdHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncmVzb2x2ZScsIHsgdmFsdWU6ICgpID0+IHZhbHVlIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENlcGggRmlsZXN5c3RlbSBtb3VudCB0aGF0IGxhc3RzIHRoZSBsaWZldGltZSBvZiBhIHBvZCBDZXBoZnMgdm9sdW1lcyBkbyBub3Qgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBvciBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2VwaEZTUGVyc2lzdGVudFZvbHVtZVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENlcGhGc1BlcnNpc3RlbnRWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogUmVxdWlyZWQ6IE1vbml0b3JzIGlzIGEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNQZXJzaXN0ZW50Vm9sdW1lU291cmNlI21vbml0b3JzXG4gICAqL1xuICByZWFkb25seSBtb25pdG9yczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBVc2VkIGFzIHRoZSBtb3VudGVkIHJvb3QsIHJhdGhlciB0aGFuIHRoZSBmdWxsIENlcGggdHJlZSwgZGVmYXVsdCBpcyAvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNlcGhGU1BlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWw6IERlZmF1bHRzIHRvIGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvY2VwaGZzL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvY2VwaGZzL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNlcGhGU1BlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IFNlY3JldEZpbGUgaXMgdGhlIHBhdGggdG8ga2V5IHJpbmcgZm9yIFVzZXIsIGRlZmF1bHQgaXMgL2V0Yy9jZXBoL3VzZXIuc2VjcmV0IE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3NlY3JldEZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldEZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBTZWNyZXRSZWYgaXMgcmVmZXJlbmNlIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBzZWNyZXQgZm9yIFVzZXIsIGRlZmF1bHQgaXMgZW1wdHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmPzogU2VjcmV0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogVXNlciBpcyB0aGUgcmFkb3MgdXNlciBuYW1lLCBkZWZhdWx0IGlzIGFkbWluIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHVzZXI/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2luZGVyIHZvbHVtZSByZXNvdXJjZSBpbiBPcGVuc3RhY2suIEEgQ2luZGVyIHZvbHVtZSBtdXN0IGV4aXN0IGJlZm9yZSBtb3VudGluZyB0byBhIGNvbnRhaW5lci4gVGhlIHZvbHVtZSBtdXN0IGFsc28gYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBrdWJlbGV0LiBDaW5kZXIgdm9sdW1lcyBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IGFuZCBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2luZGVyUGVyc2lzdGVudFZvbHVtZVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENpbmRlclBlcnNpc3RlbnRWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeGFtcGxlczogXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvbXlzcWwtY2luZGVyLXBkL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DaW5kZXJQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogRGVmYXVsdHMgdG8gZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvbXlzcWwtY2luZGVyLXBkL1JFQURNRS5tZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9teXNxbC1jaW5kZXItcGQvUkVBRE1FLm1kXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNpbmRlclBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IHBvaW50cyB0byBhIHNlY3JldCBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzIHVzZWQgdG8gY29ubmVjdCB0byBPcGVuU3RhY2suXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNpbmRlclBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY/OiBTZWNyZXRSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIHZvbHVtZSBpZCB1c2VkIHRvIGlkZW50aWZ5IHRoZSB2b2x1bWUgaW4gY2luZGVyIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9teXNxbC1jaW5kZXItcGQvUkVBRE1FLm1kXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNpbmRlclBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujdm9sdW1lSURcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUlEOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHN0b3JhZ2UgdGhhdCBpcyBtYW5hZ2VkIGJ5IGFuIGV4dGVybmFsIENTSSB2b2x1bWUgZHJpdmVyIChCZXRhIGZlYXR1cmUpXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzaVBlcnNpc3RlbnRWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogQ29udHJvbGxlckV4cGFuZFNlY3JldFJlZiBpcyBhIHJlZmVyZW5jZSB0byB0aGUgc2VjcmV0IG9iamVjdCBjb250YWluaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHRoZSBDU0kgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBDU0kgQ29udHJvbGxlckV4cGFuZFZvbHVtZSBjYWxsLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBFeHBhbmRDU0lWb2x1bWVzIGZlYXR1cmUgZ2F0ZS4gVGhpcyBmaWVsZCBpcyBvcHRpb25hbCwgYW5kIG1heSBiZSBlbXB0eSBpZiBubyBzZWNyZXQgaXMgcmVxdWlyZWQuIElmIHRoZSBzZWNyZXQgb2JqZWN0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgc2VjcmV0LCBhbGwgc2VjcmV0cyBhcmUgcGFzc2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2NvbnRyb2xsZXJFeHBhbmRTZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyb2xsZXJFeHBhbmRTZWNyZXRSZWY/OiBTZWNyZXRSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xsZXJQdWJsaXNoU2VjcmV0UmVmIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBzZWNyZXQgb2JqZWN0IGNvbnRhaW5pbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIHRvIHBhc3MgdG8gdGhlIENTSSBkcml2ZXIgdG8gY29tcGxldGUgdGhlIENTSSBDb250cm9sbGVyUHVibGlzaFZvbHVtZSBhbmQgQ29udHJvbGxlclVucHVibGlzaFZvbHVtZSBjYWxscy4gVGhpcyBmaWVsZCBpcyBvcHRpb25hbCwgYW5kIG1heSBiZSBlbXB0eSBpZiBubyBzZWNyZXQgaXMgcmVxdWlyZWQuIElmIHRoZSBzZWNyZXQgb2JqZWN0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgc2VjcmV0LCBhbGwgc2VjcmV0cyBhcmUgcGFzc2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2NvbnRyb2xsZXJQdWJsaXNoU2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBjb250cm9sbGVyUHVibGlzaFNlY3JldFJlZj86IFNlY3JldFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogRHJpdmVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdG8gdXNlIGZvciB0aGlzIHZvbHVtZS4gUmVxdWlyZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNTSVBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjZHJpdmVyXG4gICAqL1xuICByZWFkb25seSBkcml2ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeC4gXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb2RlUHVibGlzaFNlY3JldFJlZiBpcyBhIHJlZmVyZW5jZSB0byB0aGUgc2VjcmV0IG9iamVjdCBjb250YWluaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHRoZSBDU0kgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBDU0kgTm9kZVB1Ymxpc2hWb2x1bWUgYW5kIE5vZGVVbnB1Ymxpc2hWb2x1bWUgY2FsbHMuIFRoaXMgZmllbGQgaXMgb3B0aW9uYWwsIGFuZCBtYXkgYmUgZW1wdHkgaWYgbm8gc2VjcmV0IGlzIHJlcXVpcmVkLiBJZiB0aGUgc2VjcmV0IG9iamVjdCBjb250YWlucyBtb3JlIHRoYW4gb25lIHNlY3JldCwgYWxsIHNlY3JldHMgYXJlIHBhc3NlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNub2RlUHVibGlzaFNlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVB1Ymxpc2hTZWNyZXRSZWY/OiBTZWNyZXRSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIE5vZGVTdGFnZVNlY3JldFJlZiBpcyBhIHJlZmVyZW5jZSB0byB0aGUgc2VjcmV0IG9iamVjdCBjb250YWluaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHRoZSBDU0kgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBDU0kgTm9kZVN0YWdlVm9sdW1lIGFuZCBOb2RlU3RhZ2VWb2x1bWUgYW5kIE5vZGVVbnN0YWdlVm9sdW1lIGNhbGxzLiBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsLCBhbmQgbWF5IGJlIGVtcHR5IGlmIG5vIHNlY3JldCBpcyByZXF1aXJlZC4gSWYgdGhlIHNlY3JldCBvYmplY3QgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBzZWNyZXQsIGFsbCBzZWNyZXRzIGFyZSBwYXNzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNTSVBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujbm9kZVN0YWdlU2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBub2RlU3RhZ2VTZWNyZXRSZWY/OiBTZWNyZXRSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBUaGUgdmFsdWUgdG8gcGFzcyB0byBDb250cm9sbGVyUHVibGlzaFZvbHVtZVJlcXVlc3QuIERlZmF1bHRzIHRvIGZhbHNlIChyZWFkL3dyaXRlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgKHJlYWQvd3JpdGUpLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgb2YgdGhlIHZvbHVtZSB0byBwdWJsaXNoLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3ZvbHVtZUF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUF0dHJpYnV0ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBWb2x1bWVIYW5kbGUgaXMgdGhlIHVuaXF1ZSB2b2x1bWUgbmFtZSByZXR1cm5lZCBieSB0aGUgQ1NJIHZvbHVtZSBwbHVnaW7igJlzIENyZWF0ZVZvbHVtZSB0byByZWZlciB0byB0aGUgdm9sdW1lIG9uIGFsbCBzdWJzZXF1ZW50IGNhbGxzLiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSN2b2x1bWVIYW5kbGVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUhhbmRsZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEZpYnJlIENoYW5uZWwgdm9sdW1lLiBGaWJyZSBDaGFubmVsIHZvbHVtZXMgY2FuIG9ubHkgYmUgbW91bnRlZCBhcyByZWFkL3dyaXRlIG9uY2UuIEZpYnJlIENoYW5uZWwgdm9sdW1lcyBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IGFuZCBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRkNWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGY1ZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgdG8gbW91bnQuIE11c3QgYmUgYSBmaWxlc3lzdGVtIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4LiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkZDVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogRkMgdGFyZ2V0IGx1biBudW1iZXJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRkNWb2x1bWVTb3VyY2UjbHVuXG4gICAqL1xuICByZWFkb25seSBsdW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRkNWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZDIHRhcmdldCB3b3JsZHdpZGUgbmFtZXMgKFdXTnMpXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkZDVm9sdW1lU291cmNlI3RhcmdldFdXTnNcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFdXTnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZDIHZvbHVtZSB3b3JsZCB3aWRlIGlkZW50aWZpZXJzICh3d2lkcykgRWl0aGVyIHd3aWRzIG9yIGNvbWJpbmF0aW9uIG9mIHRhcmdldFdXTnMgYW5kIGx1biBtdXN0IGJlIHNldCwgYnV0IG5vdCBib3RoIHNpbXVsdGFuZW91c2x5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GQ1ZvbHVtZVNvdXJjZSN3d2lkc1xuICAgKi9cbiAgcmVhZG9ubHkgd3dpZHM/OiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIEZsZXhQZXJzaXN0ZW50Vm9sdW1lU291cmNlIHJlcHJlc2VudHMgYSBnZW5lcmljIHBlcnNpc3RlbnQgdm9sdW1lIHJlc291cmNlIHRoYXQgaXMgcHJvdmlzaW9uZWQvYXR0YWNoZWQgdXNpbmcgYW4gZXhlYyBiYXNlZCBwbHVnaW4uXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRmxleFBlcnNpc3RlbnRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbGV4UGVyc2lzdGVudFZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBEcml2ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB0byB1c2UgZm9yIHRoaXMgdm9sdW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4UGVyc2lzdGVudFZvbHVtZVNvdXJjZSNkcml2ZXJcbiAgICovXG4gIHJlYWRvbmx5IGRyaXZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgdG8gbW91bnQuIE11c3QgYmUgYSBmaWxlc3lzdGVtIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4LiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIFRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gZGVwZW5kcyBvbiBGbGV4Vm9sdW1lIHNjcmlwdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRmxleFBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjZnNUeXBlXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBFeHRyYSBjb21tYW5kIG9wdGlvbnMgaWYgYW55LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4UGVyc2lzdGVudFZvbHVtZVNvdXJjZSNvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IERlZmF1bHRzIHRvIGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4UGVyc2lzdGVudFZvbHVtZVNvdXJjZSNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogU2VjcmV0UmVmIGlzIHJlZmVyZW5jZSB0byB0aGUgc2VjcmV0IG9iamVjdCBjb250YWluaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHRoZSBwbHVnaW4gc2NyaXB0cy4gVGhpcyBtYXkgYmUgZW1wdHkgaWYgbm8gc2VjcmV0IG9iamVjdCBpcyBzcGVjaWZpZWQuIElmIHRoZSBzZWNyZXQgb2JqZWN0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgc2VjcmV0LCBhbGwgc2VjcmV0cyBhcmUgcGFzc2VkIHRvIHRoZSBwbHVnaW4gc2NyaXB0cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRmxleFBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY/OiBTZWNyZXRSZWZlcmVuY2U7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgRmxvY2tlciB2b2x1bWUgbW91bnRlZCBieSB0aGUgRmxvY2tlciBhZ2VudC4gT25lIGFuZCBvbmx5IG9uZSBvZiBkYXRhc2V0TmFtZSBhbmQgZGF0YXNldFVVSUQgc2hvdWxkIGJlIHNldC4gRmxvY2tlciB2b2x1bWVzIGRvIG5vdCBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IG9yIFNFTGludXggcmVsYWJlbGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbG9ja2VyVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvY2tlclZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhc2V0IHN0b3JlZCBhcyBtZXRhZGF0YSAtPiBuYW1lIG9uIHRoZSBkYXRhc2V0IGZvciBGbG9ja2VyIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIGRlcHJlY2F0ZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRmxvY2tlclZvbHVtZVNvdXJjZSNkYXRhc2V0TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YXNldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVVSUQgb2YgdGhlIGRhdGFzZXQuIFRoaXMgaXMgdW5pcXVlIGlkZW50aWZpZXIgb2YgYSBGbG9ja2VyIGRhdGFzZXRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRmxvY2tlclZvbHVtZVNvdXJjZSNkYXRhc2V0VVVJRFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YXNldFVVSUQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgUGVyc2lzdGVudCBEaXNrIHJlc291cmNlIGluIEdvb2dsZSBDb21wdXRlIEVuZ2luZS5cblxuQSBHQ0UgUEQgbXVzdCBleGlzdCBiZWZvcmUgbW91bnRpbmcgdG8gYSBjb250YWluZXIuIFRoZSBkaXNrIG11c3QgYWxzbyBiZSBpbiB0aGUgc2FtZSBHQ0UgcHJvamVjdCBhbmQgem9uZSBhcyB0aGUga3ViZWxldC4gQSBHQ0UgUEQgY2FuIG9ubHkgYmUgbW91bnRlZCBhcyByZWFkL3dyaXRlIG9uY2Ugb3IgcmVhZC1vbmx5IG1hbnkgdGltZXMuIEdDRSBQRHMgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBhbmQgU0VMaW51eCByZWxhYmVsaW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2NlUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIG9mIHRoZSB2b2x1bWUgdGhhdCB5b3Ugd2FudCB0byBtb3VudC4gVGlwOiBFbnN1cmUgdGhhdCB0aGUgZmlsZXN5c3RlbSB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeGFtcGxlczogXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNnY2VwZXJzaXN0ZW50ZGlza1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZSNmc1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiBpbiB0aGUgdm9sdW1lIHRoYXQgeW91IHdhbnQgdG8gbW91bnQuIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzIHRvIG1vdW50IGJ5IHZvbHVtZSBuYW1lLiBFeGFtcGxlczogRm9yIHZvbHVtZSAvZGV2L3NkYTEsIHlvdSBzcGVjaWZ5IHRoZSBwYXJ0aXRpb24gYXMgXCIxXCIuIFNpbWlsYXJseSwgdGhlIHZvbHVtZSBwYXJ0aXRpb24gZm9yIC9kZXYvc2RhIGlzIFwiMFwiIChvciB5b3UgY2FuIGxlYXZlIHRoZSBwcm9wZXJ0eSBlbXB0eSkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2djZXBlcnNpc3RlbnRkaXNrXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlI3BhcnRpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgbmFtZSBvZiB0aGUgUEQgcmVzb3VyY2UgaW4gR0NFLiBVc2VkIHRvIGlkZW50aWZ5IHRoZSBkaXNrIGluIEdDRS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjZ2NlcGVyc2lzdGVudGRpc2tcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2UjcGROYW1lXG4gICAqL1xuICByZWFkb25seSBwZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy4gRGVmYXVsdHMgdG8gZmFsc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2djZXBlcnNpc3RlbnRkaXNrXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNnY2VwZXJzaXN0ZW50ZGlza1xuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZSNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEdsdXN0ZXJmcyBtb3VudCB0aGF0IGxhc3RzIHRoZSBsaWZldGltZSBvZiBhIHBvZC4gR2x1c3RlcmZzIHZvbHVtZXMgZG8gbm90IHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQgb3IgU0VMaW51eCByZWxhYmVsaW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdsdXN0ZXJmc1BlcnNpc3RlbnRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbHVzdGVyZnNQZXJzaXN0ZW50Vm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIEVuZHBvaW50c05hbWUgaXMgdGhlIGVuZHBvaW50IG5hbWUgdGhhdCBkZXRhaWxzIEdsdXN0ZXJmcyB0b3BvbG9neS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR2x1c3RlcmZzUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNlbmRwb2ludHNcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50czogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmRwb2ludHNOYW1lc3BhY2UgaXMgdGhlIG5hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIEdsdXN0ZXJmcyBlbmRwb2ludC4gSWYgdGhpcyBmaWVsZCBpcyBlbXB0eSwgdGhlIEVuZHBvaW50TmFtZXNwYWNlIGRlZmF1bHRzIHRvIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgYm91bmQgUFZDLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5HbHVzdGVyZnNQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2VuZHBvaW50c05hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRzTmFtZXNwYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIGlzIHRoZSBHbHVzdGVyZnMgdm9sdW1lIHBhdGguIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdsdXN0ZXJmc1BlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIEdsdXN0ZXJmcyB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9ucy4gRGVmYXVsdHMgdG8gZmFsc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5HbHVzdGVyZnNQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgaG9zdCBwYXRoIG1hcHBlZCBpbnRvIGEgcG9kLiBIb3N0IHBhdGggdm9sdW1lcyBkbyBub3Qgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBvciBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSG9zdFBhdGhWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0UGF0aFZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBkaXJlY3Rvcnkgb24gdGhlIGhvc3QuIElmIHRoZSBwYXRoIGlzIGEgc3ltbGluaywgaXQgd2lsbCBmb2xsb3cgdGhlIGxpbmsgdG8gdGhlIHJlYWwgcGF0aC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjaG9zdHBhdGhcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSG9zdFBhdGhWb2x1bWVTb3VyY2UjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBIb3N0UGF0aCBWb2x1bWUgRGVmYXVsdHMgdG8gXCJcIiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNob3N0cGF0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNob3N0cGF0aFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ib3N0UGF0aFZvbHVtZVNvdXJjZSN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogSVNDU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlIHJlcHJlc2VudHMgYW4gSVNDU0kgZGlzay4gSVNDU0kgdm9sdW1lcyBjYW4gb25seSBiZSBtb3VudGVkIGFzIHJlYWQvd3JpdGUgb25jZS4gSVNDU0kgdm9sdW1lcyBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IGFuZCBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSVNDU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNjc2lQZXJzaXN0ZW50Vm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIHdoZXRoZXIgc3VwcG9ydCBpU0NTSSBEaXNjb3ZlcnkgQ0hBUCBhdXRoZW50aWNhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjY2hhcEF1dGhEaXNjb3ZlcnlcbiAgICovXG4gIHJlYWRvbmx5IGNoYXBBdXRoRGlzY292ZXJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogd2hldGhlciBzdXBwb3J0IGlTQ1NJIFNlc3Npb24gQ0hBUCBhdXRoZW50aWNhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjY2hhcEF1dGhTZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBjaGFwQXV0aFNlc3Npb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgb2YgdGhlIHZvbHVtZSB0aGF0IHlvdSB3YW50IHRvIG1vdW50LiBUaXA6IEVuc3VyZSB0aGF0IHRoZSBmaWxlc3lzdGVtIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4YW1wbGVzOiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2lzY3NpXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNmc1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGlTQ1NJIEluaXRpYXRvciBOYW1lLiBJZiBpbml0aWF0b3JOYW1lIGlzIHNwZWNpZmllZCB3aXRoIGlzY3NpSW50ZXJmYWNlIHNpbXVsdGFuZW91c2x5LCBuZXcgaVNDU0kgaW50ZXJmYWNlIDx0YXJnZXQgcG9ydGFsPjo8dm9sdW1lIG5hbWU+IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNpbml0aWF0b3JOYW1lXG4gICAqL1xuICByZWFkb25seSBpbml0aWF0b3JOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgaVNDU0kgUXVhbGlmaWVkIE5hbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNpcW5cbiAgICovXG4gIHJlYWRvbmx5IGlxbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBpU0NTSSBJbnRlcmZhY2UgTmFtZSB0aGF0IHVzZXMgYW4gaVNDU0kgdHJhbnNwb3J0LiBEZWZhdWx0cyB0byAnZGVmYXVsdCcgKHRjcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlZmF1bHQnICh0Y3ApLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjaXNjc2lJbnRlcmZhY2VcbiAgICovXG4gIHJlYWRvbmx5IGlzY3NpSW50ZXJmYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBpU0NTSSBUYXJnZXQgTHVuIG51bWJlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSVNDU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2x1blxuICAgKi9cbiAgcmVhZG9ubHkgbHVuOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIGlTQ1NJIFRhcmdldCBQb3J0YWwgTGlzdC4gVGhlIFBvcnRhbCBpcyBlaXRoZXIgYW4gSVAgb3IgaXBfYWRkcjpwb3J0IGlmIHRoZSBwb3J0IGlzIG90aGVyIHRoYW4gZGVmYXVsdCAodHlwaWNhbGx5IFRDUCBwb3J0cyA4NjAgYW5kIDMyNjApLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcG9ydGFsc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydGFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDSEFQIFNlY3JldCBmb3IgaVNDU0kgdGFyZ2V0IGFuZCBpbml0aWF0b3IgYXV0aGVudGljYXRpb25cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSVNDU0lQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmPzogU2VjcmV0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBpU0NTSSBUYXJnZXQgUG9ydGFsLiBUaGUgUG9ydGFsIGlzIGVpdGhlciBhbiBJUCBvciBpcF9hZGRyOnBvcnQgaWYgdGhlIHBvcnQgaXMgb3RoZXIgdGhhbiBkZWZhdWx0ICh0eXBpY2FsbHkgVENQIHBvcnRzIDg2MCBhbmQgMzI2MCkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJUGVyc2lzdGVudFZvbHVtZVNvdXJjZSN0YXJnZXRQb3J0YWxcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFBvcnRhbDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogTG9jYWwgcmVwcmVzZW50cyBkaXJlY3RseS1hdHRhY2hlZCBzdG9yYWdlIHdpdGggbm9kZSBhZmZpbml0eSAoQmV0YSBmZWF0dXJlKVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxvY2FsVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBJdCBhcHBsaWVzIG9ubHkgd2hlbiB0aGUgUGF0aCBpcyBhIGJsb2NrIGRldmljZS4gTXVzdCBiZSBhIGZpbGVzeXN0ZW0gdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gRXguIFwiZXh0NFwiLCBcInhmc1wiLCBcIm50ZnNcIi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdG8gYXV0by1zZWxlY3QgYSBmaWxleXN0ZW0gaWYgdW5zcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxvY2FsVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSB2b2x1bWUgb24gdGhlIG5vZGUuIEl0IGNhbiBiZSBlaXRoZXIgYSBkaXJlY3Rvcnkgb3IgYmxvY2sgZGV2aWNlIChkaXNrLCBwYXJ0aXRpb24sIC4uLikuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxvY2FsVm9sdW1lU291cmNlI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gTkZTIG1vdW50IHRoYXQgbGFzdHMgdGhlIGxpZmV0aW1lIG9mIGEgcG9kLiBORlMgdm9sdW1lcyBkbyBub3Qgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBvciBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTkZTVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmZzVm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIFBhdGggdGhhdCBpcyBleHBvcnRlZCBieSB0aGUgTkZTIHNlcnZlci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjbmZzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5GU1ZvbHVtZVNvdXJjZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgTkZTIGV4cG9ydCB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zLiBEZWZhdWx0cyB0byBmYWxzZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjbmZzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNuZnNcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTkZTVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlcnZlciBpcyB0aGUgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiB0aGUgTkZTIHNlcnZlci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjbmZzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5GU1ZvbHVtZVNvdXJjZSNzZXJ2ZXJcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcjogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogVm9sdW1lTm9kZUFmZmluaXR5IGRlZmluZXMgY29uc3RyYWludHMgdGhhdCBsaW1pdCB3aGF0IG5vZGVzIHRoaXMgdm9sdW1lIGNhbiBiZSBhY2Nlc3NlZCBmcm9tLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZU5vZGVBZmZpbml0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZU5vZGVBZmZpbml0eSB7XG4gIC8qKlxuICAgKiBSZXF1aXJlZCBzcGVjaWZpZXMgaGFyZCBub2RlIGNvbnN0cmFpbnRzIHRoYXQgbXVzdCBiZSBtZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZU5vZGVBZmZpbml0eSNyZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ/OiBOb2RlU2VsZWN0b3I7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgUGhvdG9uIENvbnRyb2xsZXIgcGVyc2lzdGVudCBkaXNrIHJlc291cmNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBob3RvblBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGhvdG9uUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeC4gXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QaG90b25QZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZSNmc1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogSUQgdGhhdCBpZGVudGlmaWVzIFBob3RvbiBDb250cm9sbGVyIHBlcnNpc3RlbnQgZGlza1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5QaG90b25QZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZSNwZElEXG4gICAqL1xuICByZWFkb25seSBwZElEOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBQb3J0d29yeFZvbHVtZVNvdXJjZSByZXByZXNlbnRzIGEgUG9ydHdvcnggdm9sdW1lIHJlc291cmNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvcnR3b3J4Vm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydHdvcnhWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRlNUeXBlIHJlcHJlc2VudHMgdGhlIGZpbGVzeXN0ZW0gdHlwZSB0byBtb3VudCBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeC4gXCJleHQ0XCIsIFwieGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvcnR3b3J4Vm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9ydHdvcnhWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVm9sdW1lSUQgdW5pcXVlbHkgaWRlbnRpZmllcyBhIFBvcnR3b3J4IHZvbHVtZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb3J0d29yeFZvbHVtZVNvdXJjZSN2b2x1bWVJRFxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lSUQ6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBRdW9ieXRlIG1vdW50IHRoYXQgbGFzdHMgdGhlIGxpZmV0aW1lIG9mIGEgcG9kLiBRdW9ieXRlIHZvbHVtZXMgZG8gbm90IHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQgb3IgU0VMaW51eCByZWxhYmVsaW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlF1b2J5dGVWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW9ieXRlVm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIEdyb3VwIHRvIG1hcCB2b2x1bWUgYWNjZXNzIHRvIERlZmF1bHQgaXMgbm8gZ3JvdXBcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gZ3JvdXBcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUXVvYnl0ZVZvbHVtZVNvdXJjZSNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUXVvYnl0ZSB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9ucy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5RdW9ieXRlVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgb3IgbXVsdGlwbGUgUXVvYnl0ZSBSZWdpc3RyeSBzZXJ2aWNlcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgYXMgaG9zdDpwb3J0IHBhaXIgKG11bHRpcGxlIGVudHJpZXMgYXJlIHNlcGFyYXRlZCB3aXRoIGNvbW1hcykgd2hpY2ggYWN0cyBhcyB0aGUgY2VudHJhbCByZWdpc3RyeSBmb3Igdm9sdW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5RdW9ieXRlVm9sdW1lU291cmNlI3JlZ2lzdHJ5XG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZW5hbnQgb3duaW5nIHRoZSBnaXZlbiBRdW9ieXRlIHZvbHVtZSBpbiB0aGUgQmFja2VuZCBVc2VkIHdpdGggZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQgUXVvYnl0ZSB2b2x1bWVzLCB2YWx1ZSBpcyBzZXQgYnkgdGhlIHBsdWdpblxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5RdW9ieXRlVm9sdW1lU291cmNlI3RlbmFudFxuICAgKi9cbiAgcmVhZG9ubHkgdGVuYW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2VyIHRvIG1hcCB2b2x1bWUgYWNjZXNzIHRvIERlZmF1bHRzIHRvIHNlcml2Y2VhY2NvdW50IHVzZXJcbiAgICpcbiAgICogQGRlZmF1bHQgc2VyaXZjZWFjY291bnQgdXNlclxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5RdW9ieXRlVm9sdW1lU291cmNlI3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHVzZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZvbHVtZSBpcyBhIHN0cmluZyB0aGF0IHJlZmVyZW5jZXMgYW4gYWxyZWFkeSBjcmVhdGVkIFF1b2J5dGUgdm9sdW1lIGJ5IG5hbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlF1b2J5dGVWb2x1bWVTb3VyY2Ujdm9sdW1lXG4gICAqL1xuICByZWFkb25seSB2b2x1bWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBSYWRvcyBCbG9jayBEZXZpY2UgbW91bnQgdGhhdCBsYXN0cyB0aGUgbGlmZXRpbWUgb2YgYSBwb2QuIFJCRCB2b2x1bWVzIHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQgYW5kIFNFTGludXggcmVsYWJlbGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRQZXJzaXN0ZW50Vm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmJkUGVyc2lzdGVudFZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgb2YgdGhlIHZvbHVtZSB0aGF0IHlvdSB3YW50IHRvIG1vdW50LiBUaXA6IEVuc3VyZSB0aGF0IHRoZSBmaWxlc3lzdGVtIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4YW1wbGVzOiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI3JiZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRQZXJzaXN0ZW50Vm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFkb3MgaW1hZ2UgbmFtZS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJCRFBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtleXJpbmcgaXMgdGhlIHBhdGggdG8ga2V5IHJpbmcgZm9yIFJCRFVzZXIuIERlZmF1bHQgaXMgL2V0Yy9jZXBoL2tleXJpbmcuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCBldGMvY2VwaC9rZXlyaW5nLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUkJEUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNrZXlyaW5nXG4gICAqL1xuICByZWFkb25seSBrZXlyaW5nPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9ycy4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJCRFBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjbW9uaXRvcnNcbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJhZG9zIHBvb2wgbmFtZS4gRGVmYXVsdCBpcyByYmQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCByYmQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3Bvb2xcbiAgICovXG4gIHJlYWRvbmx5IHBvb2w/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuIERlZmF1bHRzIHRvIGZhbHNlLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRQZXJzaXN0ZW50Vm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlY3JldFJlZiBpcyBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBzZWNyZXQgZm9yIFJCRFVzZXIuIElmIHByb3ZpZGVkIG92ZXJyaWRlcyBrZXlyaW5nLiBEZWZhdWx0IGlzIG5pbC4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBkZWZhdWx0IG5pbC4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJCRFBlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY/OiBTZWNyZXRSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFRoZSByYWRvcyB1c2VyIG5hbWUuIERlZmF1bHQgaXMgYWRtaW4uIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCBhZG1pbi4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJCRFBlcnNpc3RlbnRWb2x1bWVTb3VyY2UjdXNlclxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFNjYWxlSU9QZXJzaXN0ZW50Vm9sdW1lU291cmNlIHJlcHJlc2VudHMgYSBwZXJzaXN0ZW50IFNjYWxlSU8gdm9sdW1lXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1BlcnNpc3RlbnRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsZUlvUGVyc2lzdGVudFZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgdG8gbW91bnQuIE11c3QgYmUgYSBmaWxlc3lzdGVtIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4LiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIERlZmF1bHQgaXMgXCJ4ZnNcIlxuICAgKlxuICAgKiBAZGVmYXVsdCB4ZnNcIlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TY2FsZUlPUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNmc1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhvc3QgYWRkcmVzcyBvZiB0aGUgU2NhbGVJTyBBUEkgR2F0ZXdheS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1BlcnNpc3RlbnRWb2x1bWVTb3VyY2UjZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgU2NhbGVJTyBQcm90ZWN0aW9uIERvbWFpbiBmb3IgdGhlIGNvbmZpZ3VyZWQgc3RvcmFnZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1BlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcHJvdGVjdGlvbkRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdGVjdGlvbkRvbWFpbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjYWxlSU9QZXJzaXN0ZW50Vm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlY3JldFJlZiByZWZlcmVuY2VzIHRvIHRoZSBzZWNyZXQgZm9yIFNjYWxlSU8gdXNlciBhbmQgb3RoZXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwgTG9naW4gb3BlcmF0aW9uIHdpbGwgZmFpbC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1BlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY6IFNlY3JldFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogRmxhZyB0byBlbmFibGUvZGlzYWJsZSBTU0wgY29tbXVuaWNhdGlvbiB3aXRoIEdhdGV3YXksIGRlZmF1bHQgZmFsc2VcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1BlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc3NsRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3NsRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdG9yYWdlIGZvciBhIHZvbHVtZSBzaG91bGQgYmUgVGhpY2tQcm92aXNpb25lZCBvciBUaGluUHJvdmlzaW9uZWQuIERlZmF1bHQgaXMgVGhpblByb3Zpc2lvbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGluUHJvdmlzaW9uZWQuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjYWxlSU9QZXJzaXN0ZW50Vm9sdW1lU291cmNlI3N0b3JhZ2VNb2RlXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlTW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNjYWxlSU8gU3RvcmFnZSBQb29sIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdGVjdGlvbiBkb21haW4uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjYWxlSU9QZXJzaXN0ZW50Vm9sdW1lU291cmNlI3N0b3JhZ2VQb29sXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlUG9vbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2Ugc3lzdGVtIGFzIGNvbmZpZ3VyZWQgaW4gU2NhbGVJTy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1BlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc3lzdGVtXG4gICAqL1xuICByZWFkb25seSBzeXN0ZW06IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgYSB2b2x1bWUgYWxyZWFkeSBjcmVhdGVkIGluIHRoZSBTY2FsZUlPIHN5c3RlbSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZvbHVtZSBzb3VyY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjYWxlSU9QZXJzaXN0ZW50Vm9sdW1lU291cmNlI3ZvbHVtZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZU5hbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgU3RvcmFnZU9TIHBlcnNpc3RlbnQgdm9sdW1lIHJlc291cmNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlN0b3JhZ2VPU1BlcnNpc3RlbnRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3NQZXJzaXN0ZW50Vm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gdHlwZSB0byBtb3VudC4gTXVzdCBiZSBhIGZpbGVzeXN0ZW0gdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gRXguIFwiZXh0NFwiLCBcInhmc1wiLCBcIm50ZnNcIi4gSW1wbGljaXRseSBpbmZlcnJlZCB0byBiZSBcImV4dDRcIiBpZiB1bnNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU3RvcmFnZU9TUGVyc2lzdGVudFZvbHVtZVNvdXJjZSNmc1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IGZzVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlN0b3JhZ2VPU1BlcnNpc3RlbnRWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VjcmV0UmVmIHNwZWNpZmllcyB0aGUgc2VjcmV0IHRvIHVzZSBmb3Igb2J0YWluaW5nIHRoZSBTdG9yYWdlT1MgQVBJIGNyZWRlbnRpYWxzLiAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSBhdHRlbXB0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlN0b3JhZ2VPU1BlcnNpc3RlbnRWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY/OiBPYmplY3RSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFZvbHVtZU5hbWUgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIFN0b3JhZ2VPUyB2b2x1bWUuICBWb2x1bWUgbmFtZXMgYXJlIG9ubHkgdW5pcXVlIHdpdGhpbiBhIG5hbWVzcGFjZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU3RvcmFnZU9TUGVyc2lzdGVudFZvbHVtZVNvdXJjZSN2b2x1bWVOYW1lXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWb2x1bWVOYW1lc3BhY2Ugc3BlY2lmaWVzIHRoZSBzY29wZSBvZiB0aGUgdm9sdW1lIHdpdGhpbiBTdG9yYWdlT1MuICBJZiBubyBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIFBvZCdzIG5hbWVzcGFjZSB3aWxsIGJlIHVzZWQuICBUaGlzIGFsbG93cyB0aGUgS3ViZXJuZXRlcyBuYW1lIHNjb3BpbmcgdG8gYmUgbWlycm9yZWQgd2l0aGluIFN0b3JhZ2VPUyBmb3IgdGlnaHRlciBpbnRlZ3JhdGlvbi4gU2V0IFZvbHVtZU5hbWUgdG8gYW55IG5hbWUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLiBTZXQgdG8gXCJkZWZhdWx0XCIgaWYgeW91IGFyZSBub3QgdXNpbmcgbmFtZXNwYWNlcyB3aXRoaW4gU3RvcmFnZU9TLiBOYW1lc3BhY2VzIHRoYXQgZG8gbm90IHByZS1leGlzdCB3aXRoaW4gU3RvcmFnZU9TIHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU3RvcmFnZU9TUGVyc2lzdGVudFZvbHVtZVNvdXJjZSN2b2x1bWVOYW1lc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZU5hbWVzcGFjZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB2U3BoZXJlIHZvbHVtZSByZXNvdXJjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wc3BoZXJlVmlydHVhbERpc2tWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWc3BoZXJlVmlydHVhbERpc2tWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeC4gXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wc3BoZXJlVmlydHVhbERpc2tWb2x1bWVTb3VyY2UjZnNUeXBlXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgUG9saWN5IEJhc2VkIE1hbmFnZW1lbnQgKFNQQk0pIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdG9yYWdlUG9saWN5TmFtZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVnNwaGVyZVZpcnR1YWxEaXNrVm9sdW1lU291cmNlI3N0b3JhZ2VQb2xpY3lJRFxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZVBvbGljeUlEPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIFBvbGljeSBCYXNlZCBNYW5hZ2VtZW50IChTUEJNKSBwcm9maWxlIG5hbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZzcGhlcmVWaXJ0dWFsRGlza1ZvbHVtZVNvdXJjZSNzdG9yYWdlUG9saWN5TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZVBvbGljeU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdGhhdCBpZGVudGlmaWVzIHZTcGhlcmUgdm9sdW1lIHZtZGtcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVnNwaGVyZVZpcnR1YWxEaXNrVm9sdW1lU291cmNlI3ZvbHVtZVBhdGhcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVBhdGg6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFR5cGVkTG9jYWxPYmplY3RSZWZlcmVuY2UgY29udGFpbnMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGxldCB5b3UgbG9jYXRlIHRoZSB0eXBlZCByZWZlcmVuY2VkIG9iamVjdCBpbnNpZGUgdGhlIHNhbWUgbmFtZXNwYWNlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlR5cGVkTG9jYWxPYmplY3RSZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlZExvY2FsT2JqZWN0UmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlR5cGVkTG9jYWxPYmplY3RSZWZlcmVuY2UjYXBpR3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdyb3VwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVHlwZWRMb2NhbE9iamVjdFJlZmVyZW5jZSNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5UeXBlZExvY2FsT2JqZWN0UmVmZXJlbmNlI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFJlc291cmNlUmVxdWlyZW1lbnRzIGRlc2NyaWJlcyB0aGUgY29tcHV0ZSByZXNvdXJjZSByZXF1aXJlbWVudHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVzb3VyY2VSZXF1aXJlbWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVJlcXVpcmVtZW50cyB7XG4gIC8qKlxuICAgKiBMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLWNvbXB1dGUtcmVzb3VyY2VzLWNvbnRhaW5lci9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVzb3VyY2VSZXF1aXJlbWVudHMjbGltaXRzXG4gICAqL1xuICByZWFkb25seSBsaW1pdHM/OiB7IFtrZXk6IHN0cmluZ106IFF1YW50aXR5IH07XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtY29tcHV0ZS1yZXNvdXJjZXMtY29udGFpbmVyL1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZVJlcXVpcmVtZW50cyNyZXF1ZXN0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdHM/OiB7IFtrZXk6IHN0cmluZ106IFF1YW50aXR5IH07XG5cbn1cblxuLyoqXG4gKiBBZmZpbml0eSBpcyBhIGdyb3VwIG9mIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQWZmaW5pdHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZmZpbml0eSB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgbm9kZSBhZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzIGZvciB0aGUgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BZmZpbml0eSNub2RlQWZmaW5pdHlcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVBZmZpbml0eT86IE5vZGVBZmZpbml0eTtcblxuICAvKipcbiAgICogRGVzY3JpYmVzIHBvZCBhZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzIChlLmcuIGNvLWxvY2F0ZSB0aGlzIHBvZCBpbiB0aGUgc2FtZSBub2RlLCB6b25lLCBldGMuIGFzIHNvbWUgb3RoZXIgcG9kKHMpKS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQWZmaW5pdHkjcG9kQWZmaW5pdHlcbiAgICovXG4gIHJlYWRvbmx5IHBvZEFmZmluaXR5PzogUG9kQWZmaW5pdHk7XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyBwb2QgYW50aS1hZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzIChlLmcuIGF2b2lkIHB1dHRpbmcgdGhpcyBwb2QgaW4gdGhlIHNhbWUgbm9kZSwgem9uZSwgZXRjLiBhcyBzb21lIG90aGVyIHBvZChzKSkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkFmZmluaXR5I3BvZEFudGlBZmZpbml0eVxuICAgKi9cbiAgcmVhZG9ubHkgcG9kQW50aUFmZmluaXR5PzogUG9kQW50aUFmZmluaXR5O1xuXG59XG5cbi8qKlxuICogQSBzaW5nbGUgYXBwbGljYXRpb24gY29udGFpbmVyIHRoYXQgeW91IHdhbnQgdG8gcnVuIHdpdGhpbiBhIHBvZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXIge1xuICAvKipcbiAgICogQXJndW1lbnRzIHRvIHRoZSBlbnRyeXBvaW50LiBUaGUgZG9ja2VyIGltYWdlJ3MgQ01EIGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQuIFZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudC4gSWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWQsIHRoZSByZWZlcmVuY2UgaW4gdGhlIGlucHV0IHN0cmluZyB3aWxsIGJlIHVuY2hhbmdlZC4gVGhlICQoVkFSX05BTUUpIHN5bnRheCBjYW4gYmUgZXNjYXBlZCB3aXRoIGEgZG91YmxlICQkLCBpZTogJCQoVkFSX05BTUUpLiBFc2NhcGVkIHJlZmVyZW5jZXMgd2lsbCBuZXZlciBiZSBleHBhbmRlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YXJpYWJsZSBleGlzdHMgb3Igbm90LiBDYW5ub3QgYmUgdXBkYXRlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy90YXNrcy9pbmplY3QtZGF0YS1hcHBsaWNhdGlvbi9kZWZpbmUtY29tbWFuZC1hcmd1bWVudC1jb250YWluZXIvI3J1bm5pbmctYS1jb21tYW5kLWluLWEtc2hlbGxcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI2FyZ3NcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW50cnlwb2ludCBhcnJheS4gTm90IGV4ZWN1dGVkIHdpdGhpbiBhIHNoZWxsLiBUaGUgZG9ja2VyIGltYWdlJ3MgRU5UUllQT0lOVCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkLiBWYXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQuIElmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkLCB0aGUgcmVmZXJlbmNlIGluIHRoZSBpbnB1dCBzdHJpbmcgd2lsbCBiZSB1bmNoYW5nZWQuIFRoZSAkKFZBUl9OQU1FKSBzeW50YXggY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGRvdWJsZSAkJCwgaWU6ICQkKFZBUl9OQU1FKS4gRXNjYXBlZCByZWZlcmVuY2VzIHdpbGwgbmV2ZXIgYmUgZXhwYW5kZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdmFyaWFibGUgZXhpc3RzIG9yIG5vdC4gQ2Fubm90IGJlIHVwZGF0ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdGFza3MvaW5qZWN0LWRhdGEtYXBwbGljYXRpb24vZGVmaW5lLWNvbW1hbmQtYXJndW1lbnQtY29udGFpbmVyLyNydW5uaW5nLWEtY29tbWFuZC1pbi1hLXNoZWxsXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lciNjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyLiBDYW5ub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI2VudlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogRW52VmFyW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc291cmNlcyB0byBwb3B1bGF0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGNvbnRhaW5lci4gVGhlIGtleXMgZGVmaW5lZCB3aXRoaW4gYSBzb3VyY2UgbXVzdCBiZSBhIENfSURFTlRJRklFUi4gQWxsIGludmFsaWQga2V5cyB3aWxsIGJlIHJlcG9ydGVkIGFzIGFuIGV2ZW50IHdoZW4gdGhlIGNvbnRhaW5lciBpcyBzdGFydGluZy4gV2hlbiBhIGtleSBleGlzdHMgaW4gbXVsdGlwbGUgc291cmNlcywgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFzdCBzb3VyY2Ugd2lsbCB0YWtlIHByZWNlZGVuY2UuIFZhbHVlcyBkZWZpbmVkIGJ5IGFuIEVudiB3aXRoIGEgZHVwbGljYXRlIGtleSB3aWxsIHRha2UgcHJlY2VkZW5jZS4gQ2Fubm90IGJlIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lciNlbnZGcm9tXG4gICAqL1xuICByZWFkb25seSBlbnZGcm9tPzogRW52RnJvbVNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgaW1hZ2UgbmFtZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb250YWluZXJzL2ltYWdlcyBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsIHRvIGFsbG93IGhpZ2hlciBsZXZlbCBjb25maWcgbWFuYWdlbWVudCB0byBkZWZhdWx0IG9yIG92ZXJyaWRlIGNvbnRhaW5lciBpbWFnZXMgaW4gd29ya2xvYWQgY29udHJvbGxlcnMgbGlrZSBEZXBsb3ltZW50cyBhbmQgU3RhdGVmdWxTZXRzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbWFnZSBwdWxsIHBvbGljeS4gT25lIG9mIEFsd2F5cywgTmV2ZXIsIElmTm90UHJlc2VudC4gRGVmYXVsdHMgdG8gQWx3YXlzIGlmIDpsYXRlc3QgdGFnIGlzIHNwZWNpZmllZCwgb3IgSWZOb3RQcmVzZW50IG90aGVyd2lzZS4gQ2Fubm90IGJlIHVwZGF0ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29udGFpbmVycy9pbWFnZXMjdXBkYXRpbmctaW1hZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IEFsd2F5cyBpZiA6bGF0ZXN0IHRhZyBpcyBzcGVjaWZpZWQsIG9yIElmTm90UHJlc2VudCBvdGhlcndpc2UuIENhbm5vdCBiZSB1cGRhdGVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbnRhaW5lcnMvaW1hZ2VzI3VwZGF0aW5nLWltYWdlc1xuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjaW1hZ2VQdWxsUG9saWN5XG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxQb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGlvbnMgdGhhdCB0aGUgbWFuYWdlbWVudCBzeXN0ZW0gc2hvdWxkIHRha2UgaW4gcmVzcG9uc2UgdG8gY29udGFpbmVyIGxpZmVjeWNsZSBldmVudHMuIENhbm5vdCBiZSB1cGRhdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjbGlmZWN5Y2xlXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBMaWZlY3ljbGU7XG5cbiAgLyoqXG4gICAqIFBlcmlvZGljIHByb2JlIG9mIGNvbnRhaW5lciBsaXZlbmVzcy4gQ29udGFpbmVyIHdpbGwgYmUgcmVzdGFydGVkIGlmIHRoZSBwcm9iZSBmYWlscy4gQ2Fubm90IGJlIHVwZGF0ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL3BvZHMvcG9kLWxpZmVjeWNsZSNjb250YWluZXItcHJvYmVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lciNsaXZlbmVzc1Byb2JlXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc1Byb2JlPzogUHJvYmU7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNvbnRhaW5lciBzcGVjaWZpZWQgYXMgYSBETlNfTEFCRUwuIEVhY2ggY29udGFpbmVyIGluIGEgcG9kIG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lIChETlNfTEFCRUwpLiBDYW5ub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBwb3J0cyB0byBleHBvc2UgZnJvbSB0aGUgY29udGFpbmVyLiBFeHBvc2luZyBhIHBvcnQgaGVyZSBnaXZlcyB0aGUgc3lzdGVtIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5ldHdvcmsgY29ubmVjdGlvbnMgYSBjb250YWluZXIgdXNlcywgYnV0IGlzIHByaW1hcmlseSBpbmZvcm1hdGlvbmFsLiBOb3Qgc3BlY2lmeWluZyBhIHBvcnQgaGVyZSBET0VTIE5PVCBwcmV2ZW50IHRoYXQgcG9ydCBmcm9tIGJlaW5nIGV4cG9zZWQuIEFueSBwb3J0IHdoaWNoIGlzIGxpc3RlbmluZyBvbiB0aGUgZGVmYXVsdCBcIjAuMC4wLjBcIiBhZGRyZXNzIGluc2lkZSBhIGNvbnRhaW5lciB3aWxsIGJlIGFjY2Vzc2libGUgZnJvbSB0aGUgbmV0d29yay4gQ2Fubm90IGJlIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lciNwb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBDb250YWluZXJQb3J0W107XG5cbiAgLyoqXG4gICAqIFBlcmlvZGljIHByb2JlIG9mIGNvbnRhaW5lciBzZXJ2aWNlIHJlYWRpbmVzcy4gQ29udGFpbmVyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHNlcnZpY2UgZW5kcG9pbnRzIGlmIHRoZSBwcm9iZSBmYWlscy4gQ2Fubm90IGJlIHVwZGF0ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvd29ya2xvYWRzL3BvZHMvcG9kLWxpZmVjeWNsZSNjb250YWluZXItcHJvYmVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lciNyZWFkaW5lc3NQcm9iZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzUHJvYmU/OiBQcm9iZTtcblxuICAvKipcbiAgICogQ29tcHV0ZSBSZXNvdXJjZXMgcmVxdWlyZWQgYnkgdGhpcyBjb250YWluZXIuIENhbm5vdCBiZSB1cGRhdGVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLWNvbXB1dGUtcmVzb3VyY2VzLWNvbnRhaW5lci9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI3Jlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzPzogUmVzb3VyY2VSZXF1aXJlbWVudHM7XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IG9wdGlvbnMgdGhlIHBvZCBzaG91bGQgcnVuIHdpdGguIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvcG9saWN5L3NlY3VyaXR5LWNvbnRleHQvIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvdGFza3MvY29uZmlndXJlLXBvZC1jb250YWluZXIvc2VjdXJpdHktY29udGV4dC9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI3NlY3VyaXR5Q29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlDb250ZXh0PzogU2VjdXJpdHlDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29udGFpbmVyIHNob3VsZCBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3Igc3RkaW4gaW4gdGhlIGNvbnRhaW5lciBydW50aW1lLiBJZiB0aGlzIGlzIG5vdCBzZXQsIHJlYWRzIGZyb20gc3RkaW4gaW4gdGhlIGNvbnRhaW5lciB3aWxsIGFsd2F5cyByZXN1bHQgaW4gRU9GLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI3N0ZGluXG4gICAqL1xuICByZWFkb25seSBzdGRpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRhaW5lciBydW50aW1lIHNob3VsZCBjbG9zZSB0aGUgc3RkaW4gY2hhbm5lbCBhZnRlciBpdCBoYXMgYmVlbiBvcGVuZWQgYnkgYSBzaW5nbGUgYXR0YWNoLiBXaGVuIHN0ZGluIGlzIHRydWUgdGhlIHN0ZGluIHN0cmVhbSB3aWxsIHJlbWFpbiBvcGVuIGFjcm9zcyBtdWx0aXBsZSBhdHRhY2ggc2Vzc2lvbnMuIElmIHN0ZGluT25jZSBpcyBzZXQgdG8gdHJ1ZSwgc3RkaW4gaXMgb3BlbmVkIG9uIGNvbnRhaW5lciBzdGFydCwgaXMgZW1wdHkgdW50aWwgdGhlIGZpcnN0IGNsaWVudCBhdHRhY2hlcyB0byBzdGRpbiwgYW5kIHRoZW4gcmVtYWlucyBvcGVuIGFuZCBhY2NlcHRzIGRhdGEgdW50aWwgdGhlIGNsaWVudCBkaXNjb25uZWN0cywgYXQgd2hpY2ggdGltZSBzdGRpbiBpcyBjbG9zZWQgYW5kIHJlbWFpbnMgY2xvc2VkIHVudGlsIHRoZSBjb250YWluZXIgaXMgcmVzdGFydGVkLiBJZiB0aGlzIGZsYWcgaXMgZmFsc2UsIGEgY29udGFpbmVyIHByb2Nlc3NlcyB0aGF0IHJlYWRzIGZyb20gc3RkaW4gd2lsbCBuZXZlciByZWNlaXZlIGFuIEVPRi4gRGVmYXVsdCBpcyBmYWxzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjc3RkaW5PbmNlXG4gICAqL1xuICByZWFkb25seSBzdGRpbk9uY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0aCBhdCB3aGljaCB0aGUgZmlsZSB0byB3aGljaCB0aGUgY29udGFpbmVyJ3MgdGVybWluYXRpb24gbWVzc2FnZSB3aWxsIGJlIHdyaXR0ZW4gaXMgbW91bnRlZCBpbnRvIHRoZSBjb250YWluZXIncyBmaWxlc3lzdGVtLiBNZXNzYWdlIHdyaXR0ZW4gaXMgaW50ZW5kZWQgdG8gYmUgYnJpZWYgZmluYWwgc3RhdHVzLCBzdWNoIGFzIGFuIGFzc2VydGlvbiBmYWlsdXJlIG1lc3NhZ2UuIFdpbGwgYmUgdHJ1bmNhdGVkIGJ5IHRoZSBub2RlIGlmIGdyZWF0ZXIgdGhhbiA0MDk2IGJ5dGVzLiBUaGUgdG90YWwgbWVzc2FnZSBsZW5ndGggYWNyb3NzIGFsbCBjb250YWluZXJzIHdpbGwgYmUgbGltaXRlZCB0byAxMmtiLiBEZWZhdWx0cyB0byAvZGV2L3Rlcm1pbmF0aW9uLWxvZy4gQ2Fubm90IGJlIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRldi90ZXJtaW5hdGlvbi1sb2cuIENhbm5vdCBiZSB1cGRhdGVkLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjdGVybWluYXRpb25NZXNzYWdlUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgdGVybWluYXRpb25NZXNzYWdlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGUgaG93IHRoZSB0ZXJtaW5hdGlvbiBtZXNzYWdlIHNob3VsZCBiZSBwb3B1bGF0ZWQuIEZpbGUgd2lsbCB1c2UgdGhlIGNvbnRlbnRzIG9mIHRlcm1pbmF0aW9uTWVzc2FnZVBhdGggdG8gcG9wdWxhdGUgdGhlIGNvbnRhaW5lciBzdGF0dXMgbWVzc2FnZSBvbiBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIEZhbGxiYWNrVG9Mb2dzT25FcnJvciB3aWxsIHVzZSB0aGUgbGFzdCBjaHVuayBvZiBjb250YWluZXIgbG9nIG91dHB1dCBpZiB0aGUgdGVybWluYXRpb24gbWVzc2FnZSBmaWxlIGlzIGVtcHR5IGFuZCB0aGUgY29udGFpbmVyIGV4aXRlZCB3aXRoIGFuIGVycm9yLiBUaGUgbG9nIG91dHB1dCBpcyBsaW1pdGVkIHRvIDIwNDggYnl0ZXMgb3IgODAgbGluZXMsIHdoaWNoZXZlciBpcyBzbWFsbGVyLiBEZWZhdWx0cyB0byBGaWxlLiBDYW5ub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRmlsZS4gQ2Fubm90IGJlIHVwZGF0ZWQuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lciN0ZXJtaW5hdGlvbk1lc3NhZ2VQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IHRlcm1pbmF0aW9uTWVzc2FnZVBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGNvbnRhaW5lciBzaG91bGQgYWxsb2NhdGUgYSBUVFkgZm9yIGl0c2VsZiwgYWxzbyByZXF1aXJlcyAnc3RkaW4nIHRvIGJlIHRydWUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjdHR5XG4gICAqL1xuICByZWFkb25seSB0dHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiB2b2x1bWVEZXZpY2VzIGlzIHRoZSBsaXN0IG9mIGJsb2NrIGRldmljZXMgdG8gYmUgdXNlZCBieSB0aGUgY29udGFpbmVyLiBUaGlzIGlzIGEgYmV0YSBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjdm9sdW1lRGV2aWNlc1xuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lRGV2aWNlcz86IFZvbHVtZURldmljZVtdO1xuXG4gIC8qKlxuICAgKiBQb2Qgdm9sdW1lcyB0byBtb3VudCBpbnRvIHRoZSBjb250YWluZXIncyBmaWxlc3lzdGVtLiBDYW5ub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29udGFpbmVyI3ZvbHVtZU1vdW50c1xuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lTW91bnRzPzogVm9sdW1lTW91bnRbXTtcblxuICAvKipcbiAgICogQ29udGFpbmVyJ3Mgd29ya2luZyBkaXJlY3RvcnkuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250YWluZXIgcnVudGltZSdzIGRlZmF1bHQgd2lsbCBiZSB1c2VkLCB3aGljaCBtaWdodCBiZSBjb25maWd1cmVkIGluIHRoZSBjb250YWluZXIgaW1hZ2UuIENhbm5vdCBiZSB1cGRhdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXIjd29ya2luZ0RpclxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0Rpcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFBvZEROU0NvbmZpZyBkZWZpbmVzIHRoZSBETlMgcGFyYW1ldGVycyBvZiBhIHBvZCBpbiBhZGRpdGlvbiB0byB0aG9zZSBnZW5lcmF0ZWQgZnJvbSBETlNQb2xpY3kuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kRE5TQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9kRG5zQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBETlMgbmFtZSBzZXJ2ZXIgSVAgYWRkcmVzc2VzLiBUaGlzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJhc2UgbmFtZXNlcnZlcnMgZ2VuZXJhdGVkIGZyb20gRE5TUG9saWN5LiBEdXBsaWNhdGVkIG5hbWVzZXJ2ZXJzIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kRE5TQ29uZmlnI25hbWVzZXJ2ZXJzXG4gICAqL1xuICByZWFkb25seSBuYW1lc2VydmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgRE5TIHJlc29sdmVyIG9wdGlvbnMuIFRoaXMgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgYmFzZSBvcHRpb25zIGdlbmVyYXRlZCBmcm9tIEROU1BvbGljeS4gRHVwbGljYXRlZCBlbnRyaWVzIHdpbGwgYmUgcmVtb3ZlZC4gUmVzb2x1dGlvbiBvcHRpb25zIGdpdmVuIGluIE9wdGlvbnMgd2lsbCBvdmVycmlkZSB0aG9zZSB0aGF0IGFwcGVhciBpbiB0aGUgYmFzZSBETlNQb2xpY3kuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEROU0NvbmZpZyNvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogUG9kRG5zQ29uZmlnT3B0aW9uW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBETlMgc2VhcmNoIGRvbWFpbnMgZm9yIGhvc3QtbmFtZSBsb29rdXAuIFRoaXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYmFzZSBzZWFyY2ggcGF0aHMgZ2VuZXJhdGVkIGZyb20gRE5TUG9saWN5LiBEdXBsaWNhdGVkIHNlYXJjaCBwYXRocyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEROU0NvbmZpZyNzZWFyY2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoZXM/OiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIEhvc3RBbGlhcyBob2xkcyB0aGUgbWFwcGluZyBiZXR3ZWVuIElQIGFuZCBob3N0bmFtZXMgdGhhdCB3aWxsIGJlIGluamVjdGVkIGFzIGFuIGVudHJ5IGluIHRoZSBwb2QncyBob3N0cyBmaWxlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkhvc3RBbGlhc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RBbGlhcyB7XG4gIC8qKlxuICAgKiBIb3N0bmFtZXMgZm9yIHRoZSBhYm92ZSBJUCBhZGRyZXNzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ib3N0QWxpYXMjaG9zdG5hbWVzXG4gICAqL1xuICByZWFkb25seSBob3N0bmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSVAgYWRkcmVzcyBvZiB0aGUgaG9zdCBmaWxlIGVudHJ5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ib3N0QWxpYXMjaXBcbiAgICovXG4gIHJlYWRvbmx5IGlwPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUG9kUmVhZGluZXNzR2F0ZSBjb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIGEgcG9kIGNvbmRpdGlvblxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFJlYWRpbmVzc0dhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2RSZWFkaW5lc3NHYXRlIHtcbiAgLyoqXG4gICAqIENvbmRpdGlvblR5cGUgcmVmZXJzIHRvIGEgY29uZGl0aW9uIGluIHRoZSBwb2QncyBjb25kaXRpb24gbGlzdCB3aXRoIG1hdGNoaW5nIHR5cGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFJlYWRpbmVzc0dhdGUjY29uZGl0aW9uVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uVHlwZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUG9kU2VjdXJpdHlDb250ZXh0IGhvbGRzIHBvZC1sZXZlbCBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBjb21tb24gY29udGFpbmVyIHNldHRpbmdzLiBTb21lIGZpZWxkcyBhcmUgYWxzbyBwcmVzZW50IGluIGNvbnRhaW5lci5zZWN1cml0eUNvbnRleHQuICBGaWVsZCB2YWx1ZXMgb2YgY29udGFpbmVyLnNlY3VyaXR5Q29udGV4dCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBmaWVsZCB2YWx1ZXMgb2YgUG9kU2VjdXJpdHlDb250ZXh0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNlY3VyaXR5Q29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZFNlY3VyaXR5Q29udGV4dCB7XG4gIC8qKlxuICAgKiBBIHNwZWNpYWwgc3VwcGxlbWVudGFsIGdyb3VwIHRoYXQgYXBwbGllcyB0byBhbGwgY29udGFpbmVycyBpbiBhIHBvZC4gU29tZSB2b2x1bWUgdHlwZXMgYWxsb3cgdGhlIEt1YmVsZXQgdG8gY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhhdCB2b2x1bWUgdG8gYmUgb3duZWQgYnkgdGhlIHBvZDpcblxuMS4gVGhlIG93bmluZyBHSUQgd2lsbCBiZSB0aGUgRlNHcm91cCAyLiBUaGUgc2V0Z2lkIGJpdCBpcyBzZXQgKG5ldyBmaWxlcyBjcmVhdGVkIGluIHRoZSB2b2x1bWUgd2lsbCBiZSBvd25lZCBieSBGU0dyb3VwKSAzLiBUaGUgcGVybWlzc2lvbiBiaXRzIGFyZSBPUidkIHdpdGggcnctcnctLS0tXG5cbklmIHVuc2V0LCB0aGUgS3ViZWxldCB3aWxsIG5vdCBtb2RpZnkgdGhlIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMgb2YgYW55IHZvbHVtZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU2VjdXJpdHlDb250ZXh0I2ZzR3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGZzR3JvdXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBHSUQgdG8gcnVuIHRoZSBlbnRyeXBvaW50IG9mIHRoZSBjb250YWluZXIgcHJvY2Vzcy4gVXNlcyBydW50aW1lIGRlZmF1bHQgaWYgdW5zZXQuIE1heSBhbHNvIGJlIHNldCBpbiBTZWN1cml0eUNvbnRleHQuICBJZiBzZXQgaW4gYm90aCBTZWN1cml0eUNvbnRleHQgYW5kIFBvZFNlY3VyaXR5Q29udGV4dCwgdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBTZWN1cml0eUNvbnRleHQgdGFrZXMgcHJlY2VkZW5jZSBmb3IgdGhhdCBjb250YWluZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNlY3VyaXR5Q29udGV4dCNydW5Bc0dyb3VwXG4gICAqL1xuICByZWFkb25seSBydW5Bc0dyb3VwPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY29udGFpbmVyIG11c3QgcnVuIGFzIGEgbm9uLXJvb3QgdXNlci4gSWYgdHJ1ZSwgdGhlIEt1YmVsZXQgd2lsbCB2YWxpZGF0ZSB0aGUgaW1hZ2UgYXQgcnVudGltZSB0byBlbnN1cmUgdGhhdCBpdCBkb2VzIG5vdCBydW4gYXMgVUlEIDAgKHJvb3QpIGFuZCBmYWlsIHRvIHN0YXJ0IHRoZSBjb250YWluZXIgaWYgaXQgZG9lcy4gSWYgdW5zZXQgb3IgZmFsc2UsIG5vIHN1Y2ggdmFsaWRhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4gTWF5IGFsc28gYmUgc2V0IGluIFNlY3VyaXR5Q29udGV4dC4gIElmIHNldCBpbiBib3RoIFNlY3VyaXR5Q29udGV4dCBhbmQgUG9kU2VjdXJpdHlDb250ZXh0LCB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIFNlY3VyaXR5Q29udGV4dCB0YWtlcyBwcmVjZWRlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTZWN1cml0eUNvbnRleHQjcnVuQXNOb25Sb290XG4gICAqL1xuICByZWFkb25seSBydW5Bc05vblJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgVUlEIHRvIHJ1biB0aGUgZW50cnlwb2ludCBvZiB0aGUgY29udGFpbmVyIHByb2Nlc3MuIERlZmF1bHRzIHRvIHVzZXIgc3BlY2lmaWVkIGluIGltYWdlIG1ldGFkYXRhIGlmIHVuc3BlY2lmaWVkLiBNYXkgYWxzbyBiZSBzZXQgaW4gU2VjdXJpdHlDb250ZXh0LiAgSWYgc2V0IGluIGJvdGggU2VjdXJpdHlDb250ZXh0IGFuZCBQb2RTZWN1cml0eUNvbnRleHQsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gU2VjdXJpdHlDb250ZXh0IHRha2VzIHByZWNlZGVuY2UgZm9yIHRoYXQgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1c2VyIHNwZWNpZmllZCBpbiBpbWFnZSBtZXRhZGF0YSBpZiB1bnNwZWNpZmllZC4gTWF5IGFsc28gYmUgc2V0IGluIFNlY3VyaXR5Q29udGV4dC4gIElmIHNldCBpbiBib3RoIFNlY3VyaXR5Q29udGV4dCBhbmQgUG9kU2VjdXJpdHlDb250ZXh0LCB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIFNlY3VyaXR5Q29udGV4dCB0YWtlcyBwcmVjZWRlbmNlIGZvciB0aGF0IGNvbnRhaW5lci5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU2VjdXJpdHlDb250ZXh0I3J1bkFzVXNlclxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgU0VMaW51eCBjb250ZXh0IHRvIGJlIGFwcGxpZWQgdG8gYWxsIGNvbnRhaW5lcnMuIElmIHVuc3BlY2lmaWVkLCB0aGUgY29udGFpbmVyIHJ1bnRpbWUgd2lsbCBhbGxvY2F0ZSBhIHJhbmRvbSBTRUxpbnV4IGNvbnRleHQgZm9yIGVhY2ggY29udGFpbmVyLiAgTWF5IGFsc28gYmUgc2V0IGluIFNlY3VyaXR5Q29udGV4dC4gIElmIHNldCBpbiBib3RoIFNlY3VyaXR5Q29udGV4dCBhbmQgUG9kU2VjdXJpdHlDb250ZXh0LCB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIFNlY3VyaXR5Q29udGV4dCB0YWtlcyBwcmVjZWRlbmNlIGZvciB0aGF0IGNvbnRhaW5lci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU2VjdXJpdHlDb250ZXh0I3NlTGludXhPcHRpb25zXG4gICAqL1xuICByZWFkb25seSBzZUxpbnV4T3B0aW9ucz86IFNlTGludXhPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ3JvdXBzIGFwcGxpZWQgdG8gdGhlIGZpcnN0IHByb2Nlc3MgcnVuIGluIGVhY2ggY29udGFpbmVyLCBpbiBhZGRpdGlvbiB0byB0aGUgY29udGFpbmVyJ3MgcHJpbWFyeSBHSUQuICBJZiB1bnNwZWNpZmllZCwgbm8gZ3JvdXBzIHdpbGwgYmUgYWRkZWQgdG8gYW55IGNvbnRhaW5lci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kU2VjdXJpdHlDb250ZXh0I3N1cHBsZW1lbnRhbEdyb3Vwc1xuICAgKi9cbiAgcmVhZG9ubHkgc3VwcGxlbWVudGFsR3JvdXBzPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFN5c2N0bHMgaG9sZCBhIGxpc3Qgb2YgbmFtZXNwYWNlZCBzeXNjdGxzIHVzZWQgZm9yIHRoZSBwb2QuIFBvZHMgd2l0aCB1bnN1cHBvcnRlZCBzeXNjdGxzIChieSB0aGUgY29udGFpbmVyIHJ1bnRpbWUpIG1pZ2h0IGZhaWwgdG8gbGF1bmNoLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RTZWN1cml0eUNvbnRleHQjc3lzY3Rsc1xuICAgKi9cbiAgcmVhZG9ubHkgc3lzY3Rscz86IFN5c2N0bFtdO1xuXG4gIC8qKlxuICAgKiBXaW5kb3dzIHNlY3VyaXR5IG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZFNlY3VyaXR5Q29udGV4dCN3aW5kb3dzT3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgd2luZG93c09wdGlvbnM/OiBXaW5kb3dzU2VjdXJpdHlDb250ZXh0T3B0aW9ucztcblxufVxuXG4vKipcbiAqIFRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgPGtleSx2YWx1ZSxlZmZlY3Q+IHVzaW5nIHRoZSBtYXRjaGluZyBvcGVyYXRvciA8b3BlcmF0b3I+LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRvbGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2xlcmF0aW9uIHtcbiAgLyoqXG4gICAqIEVmZmVjdCBpbmRpY2F0ZXMgdGhlIHRhaW50IGVmZmVjdCB0byBtYXRjaC4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGVmZmVjdHMuIFdoZW4gc3BlY2lmaWVkLCBhbGxvd2VkIHZhbHVlcyBhcmUgTm9TY2hlZHVsZSwgUHJlZmVyTm9TY2hlZHVsZSBhbmQgTm9FeGVjdXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ub2xlcmF0aW9uI2VmZmVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZWZmZWN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXkgaXMgdGhlIHRhaW50IGtleSB0aGF0IHRoZSB0b2xlcmF0aW9uIGFwcGxpZXMgdG8uIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBrZXlzLiBJZiB0aGUga2V5IGlzIGVtcHR5LCBvcGVyYXRvciBtdXN0IGJlIEV4aXN0czsgdGhpcyBjb21iaW5hdGlvbiBtZWFucyB0byBtYXRjaCBhbGwgdmFsdWVzIGFuZCBhbGwga2V5cy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVG9sZXJhdGlvbiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogT3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byB0aGUgdmFsdWUuIFZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzIGFuZCBFcXVhbC4gRGVmYXVsdHMgdG8gRXF1YWwuIEV4aXN0cyBpcyBlcXVpdmFsZW50IHRvIHdpbGRjYXJkIGZvciB2YWx1ZSwgc28gdGhhdCBhIHBvZCBjYW4gdG9sZXJhdGUgYWxsIHRhaW50cyBvZiBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IEVxdWFsLiBFeGlzdHMgaXMgZXF1aXZhbGVudCB0byB3aWxkY2FyZCBmb3IgdmFsdWUsIHNvIHRoYXQgYSBwb2QgY2FuIHRvbGVyYXRlIGFsbCB0YWludHMgb2YgYSBwYXJ0aWN1bGFyIGNhdGVnb3J5LlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ub2xlcmF0aW9uI29wZXJhdG9yXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvcj86IHN0cmluZztcblxuICAvKipcbiAgICogVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmUgb2YgZWZmZWN0IE5vRXhlY3V0ZSwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgaWdub3JlZCkgdG9sZXJhdGVzIHRoZSB0YWludC4gQnkgZGVmYXVsdCwgaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRvbGVyYXRpb24jdG9sZXJhdGlvblNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHRvbGVyYXRpb25TZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBpcyB0aGUgdGFpbnQgdmFsdWUgdGhlIHRvbGVyYXRpb24gbWF0Y2hlcyB0by4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVG9sZXJhdGlvbiN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBWb2x1bWUgcmVwcmVzZW50cyBhIG5hbWVkIHZvbHVtZSBpbiBhIHBvZCB0aGF0IG1heSBiZSBhY2Nlc3NlZCBieSBhbnkgY29udGFpbmVyIGluIHRoZSBwb2QuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lIHtcbiAgLyoqXG4gICAqIEFXU0VsYXN0aWNCbG9ja1N0b3JlIHJlcHJlc2VudHMgYW4gQVdTIERpc2sgcmVzb3VyY2UgdGhhdCBpcyBhdHRhY2hlZCB0byBhIGt1YmVsZXQncyBob3N0IG1hY2hpbmUgYW5kIHRoZW4gZXhwb3NlZCB0byB0aGUgcG9kLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNhd3NlbGFzdGljYmxvY2tzdG9yZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjYXdzRWxhc3RpY0Jsb2NrU3RvcmVcbiAgICovXG4gIHJlYWRvbmx5IGF3c0VsYXN0aWNCbG9ja1N0b3JlPzogQXdzRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEF6dXJlRGlzayByZXByZXNlbnRzIGFuIEF6dXJlIERhdGEgRGlzayBtb3VudCBvbiB0aGUgaG9zdCBhbmQgYmluZCBtb3VudCB0byB0aGUgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjYXp1cmVEaXNrXG4gICAqL1xuICByZWFkb25seSBhenVyZURpc2s/OiBBenVyZURpc2tWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEF6dXJlRmlsZSByZXByZXNlbnRzIGFuIEF6dXJlIEZpbGUgU2VydmljZSBtb3VudCBvbiB0aGUgaG9zdCBhbmQgYmluZCBtb3VudCB0byB0aGUgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjYXp1cmVGaWxlXG4gICAqL1xuICByZWFkb25seSBhenVyZUZpbGU/OiBBenVyZUZpbGVWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIENlcGhGUyByZXByZXNlbnRzIGEgQ2VwaCBGUyBtb3VudCBvbiB0aGUgaG9zdCB0aGF0IHNoYXJlcyBhIHBvZCdzIGxpZmV0aW1lXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNjZXBoZnNcbiAgICovXG4gIHJlYWRvbmx5IGNlcGhmcz86IENlcGhGc1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogQ2luZGVyIHJlcHJlc2VudHMgYSBjaW5kZXIgdm9sdW1lIGF0dGFjaGVkIGFuZCBtb3VudGVkIG9uIGt1YmVsZXRzIGhvc3QgbWFjaGluZSBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvbXlzcWwtY2luZGVyLXBkL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjY2luZGVyXG4gICAqL1xuICByZWFkb25seSBjaW5kZXI/OiBDaW5kZXJWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIENvbmZpZ01hcCByZXByZXNlbnRzIGEgY29uZmlnTWFwIHRoYXQgc2hvdWxkIHBvcHVsYXRlIHRoaXMgdm9sdW1lXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNjb25maWdNYXBcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ01hcD86IENvbmZpZ01hcFZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogQ1NJIChDb250YWluZXIgU3RvcmFnZSBJbnRlcmZhY2UpIHJlcHJlc2VudHMgc3RvcmFnZSB0aGF0IGlzIGhhbmRsZWQgYnkgYW4gZXh0ZXJuYWwgQ1NJIGRyaXZlciAoQWxwaGEgZmVhdHVyZSkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNjc2lcbiAgICovXG4gIHJlYWRvbmx5IGNzaT86IENzaVZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogRG93bndhcmRBUEkgcmVwcmVzZW50cyBkb3dud2FyZCBBUEkgYWJvdXQgdGhlIHBvZCB0aGF0IHNob3VsZCBwb3B1bGF0ZSB0aGlzIHZvbHVtZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjZG93bndhcmRBUElcbiAgICovXG4gIHJlYWRvbmx5IGRvd253YXJkQVBJPzogRG93bndhcmRBcGlWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEVtcHR5RGlyIHJlcHJlc2VudHMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgc2hhcmVzIGEgcG9kJ3MgbGlmZXRpbWUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2VtcHR5ZGlyXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNlbXB0eURpclxuICAgKi9cbiAgcmVhZG9ubHkgZW1wdHlEaXI/OiBFbXB0eURpclZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogRkMgcmVwcmVzZW50cyBhIEZpYnJlIENoYW5uZWwgcmVzb3VyY2UgdGhhdCBpcyBhdHRhY2hlZCB0byBhIGt1YmVsZXQncyBob3N0IG1hY2hpbmUgYW5kIHRoZW4gZXhwb3NlZCB0byB0aGUgcG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjZmNcbiAgICovXG4gIHJlYWRvbmx5IGZjPzogRmNWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEZsZXhWb2x1bWUgcmVwcmVzZW50cyBhIGdlbmVyaWMgdm9sdW1lIHJlc291cmNlIHRoYXQgaXMgcHJvdmlzaW9uZWQvYXR0YWNoZWQgdXNpbmcgYW4gZXhlYyBiYXNlZCBwbHVnaW4uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNmbGV4Vm9sdW1lXG4gICAqL1xuICByZWFkb25seSBmbGV4Vm9sdW1lPzogRmxleFZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogRmxvY2tlciByZXByZXNlbnRzIGEgRmxvY2tlciB2b2x1bWUgYXR0YWNoZWQgdG8gYSBrdWJlbGV0J3MgaG9zdCBtYWNoaW5lLiBUaGlzIGRlcGVuZHMgb24gdGhlIEZsb2NrZXIgY29udHJvbCBzZXJ2aWNlIGJlaW5nIHJ1bm5pbmdcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lI2Zsb2NrZXJcbiAgICovXG4gIHJlYWRvbmx5IGZsb2NrZXI/OiBGbG9ja2VyVm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBHQ0VQZXJzaXN0ZW50RGlzayByZXByZXNlbnRzIGEgR0NFIERpc2sgcmVzb3VyY2UgdGhhdCBpcyBhdHRhY2hlZCB0byBhIGt1YmVsZXQncyBob3N0IG1hY2hpbmUgYW5kIHRoZW4gZXhwb3NlZCB0byB0aGUgcG9kLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNnY2VwZXJzaXN0ZW50ZGlza1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjZ2NlUGVyc2lzdGVudERpc2tcbiAgICovXG4gIHJlYWRvbmx5IGdjZVBlcnNpc3RlbnREaXNrPzogR2NlUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEdpdFJlcG8gcmVwcmVzZW50cyBhIGdpdCByZXBvc2l0b3J5IGF0IGEgcGFydGljdWxhciByZXZpc2lvbi4gREVQUkVDQVRFRDogR2l0UmVwbyBpcyBkZXByZWNhdGVkLiBUbyBwcm92aXNpb24gYSBjb250YWluZXIgd2l0aCBhIGdpdCByZXBvLCBtb3VudCBhbiBFbXB0eURpciBpbnRvIGFuIEluaXRDb250YWluZXIgdGhhdCBjbG9uZXMgdGhlIHJlcG8gdXNpbmcgZ2l0LCB0aGVuIG1vdW50IHRoZSBFbXB0eURpciBpbnRvIHRoZSBQb2QncyBjb250YWluZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNnaXRSZXBvXG4gICAqL1xuICByZWFkb25seSBnaXRSZXBvPzogR2l0UmVwb1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogR2x1c3RlcmZzIHJlcHJlc2VudHMgYSBHbHVzdGVyZnMgbW91bnQgb24gdGhlIGhvc3QgdGhhdCBzaGFyZXMgYSBwb2QncyBsaWZldGltZS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvZ2x1c3RlcmZzL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjZ2x1c3RlcmZzXG4gICAqL1xuICByZWFkb25seSBnbHVzdGVyZnM/OiBHbHVzdGVyZnNWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEhvc3RQYXRoIHJlcHJlc2VudHMgYSBwcmUtZXhpc3RpbmcgZmlsZSBvciBkaXJlY3Rvcnkgb24gdGhlIGhvc3QgbWFjaGluZSB0aGF0IGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIGNvbnRhaW5lci4gVGhpcyBpcyBnZW5lcmFsbHkgdXNlZCBmb3Igc3lzdGVtIGFnZW50cyBvciBvdGhlciBwcml2aWxlZ2VkIHRoaW5ncyB0aGF0IGFyZSBhbGxvd2VkIHRvIHNlZSB0aGUgaG9zdCBtYWNoaW5lLiBNb3N0IGNvbnRhaW5lcnMgd2lsbCBOT1QgbmVlZCB0aGlzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNob3N0cGF0aFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjaG9zdFBhdGhcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQYXRoPzogSG9zdFBhdGhWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIElTQ1NJIHJlcHJlc2VudHMgYW4gSVNDU0kgRGlzayByZXNvdXJjZSB0aGF0IGlzIGF0dGFjaGVkIHRvIGEga3ViZWxldCdzIGhvc3QgbWFjaGluZSBhbmQgdGhlbiBleHBvc2VkIHRvIHRoZSBwb2QuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2lzY3NpL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjaXNjc2lcbiAgICovXG4gIHJlYWRvbmx5IGlzY3NpPzogSXNjc2lWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFZvbHVtZSdzIG5hbWUuIE11c3QgYmUgYSBETlNfTEFCRUwgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTkZTIHJlcHJlc2VudHMgYW4gTkZTIG1vdW50IG9uIHRoZSBob3N0IHRoYXQgc2hhcmVzIGEgcG9kJ3MgbGlmZXRpbWUgTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjbmZzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNuZnNcbiAgICovXG4gIHJlYWRvbmx5IG5mcz86IE5mc1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaW4gdGhlIHNhbWUgbmFtZXNwYWNlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lI3BlcnNpc3RlbnRWb2x1bWVDbGFpbVxuICAgKi9cbiAgcmVhZG9ubHkgcGVyc2lzdGVudFZvbHVtZUNsYWltPzogUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBQaG90b25QZXJzaXN0ZW50RGlzayByZXByZXNlbnRzIGEgUGhvdG9uQ29udHJvbGxlciBwZXJzaXN0ZW50IGRpc2sgYXR0YWNoZWQgYW5kIG1vdW50ZWQgb24ga3ViZWxldHMgaG9zdCBtYWNoaW5lXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNwaG90b25QZXJzaXN0ZW50RGlza1xuICAgKi9cbiAgcmVhZG9ubHkgcGhvdG9uUGVyc2lzdGVudERpc2s/OiBQaG90b25QZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogUG9ydHdvcnhWb2x1bWUgcmVwcmVzZW50cyBhIHBvcnR3b3J4IHZvbHVtZSBhdHRhY2hlZCBhbmQgbW91bnRlZCBvbiBrdWJlbGV0cyBob3N0IG1hY2hpbmVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lI3BvcnR3b3J4Vm9sdW1lXG4gICAqL1xuICByZWFkb25seSBwb3J0d29yeFZvbHVtZT86IFBvcnR3b3J4Vm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBJdGVtcyBmb3IgYWxsIGluIG9uZSByZXNvdXJjZXMgc2VjcmV0cywgY29uZmlnbWFwcywgYW5kIGRvd253YXJkIEFQSVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjcHJvamVjdGVkXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0ZWQ/OiBQcm9qZWN0ZWRWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFF1b2J5dGUgcmVwcmVzZW50cyBhIFF1b2J5dGUgbW91bnQgb24gdGhlIGhvc3QgdGhhdCBzaGFyZXMgYSBwb2QncyBsaWZldGltZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjcXVvYnl0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVvYnl0ZT86IFF1b2J5dGVWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFJCRCByZXByZXNlbnRzIGEgUmFkb3MgQmxvY2sgRGV2aWNlIG1vdW50IG9uIHRoZSBob3N0IHRoYXQgc2hhcmVzIGEgcG9kJ3MgbGlmZXRpbWUuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lI3JiZFxuICAgKi9cbiAgcmVhZG9ubHkgcmJkPzogUmJkVm9sdW1lU291cmNlO1xuXG4gIC8qKlxuICAgKiBTY2FsZUlPIHJlcHJlc2VudHMgYSBTY2FsZUlPIHBlcnNpc3RlbnQgdm9sdW1lIGF0dGFjaGVkIGFuZCBtb3VudGVkIG9uIEt1YmVybmV0ZXMgbm9kZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZSNzY2FsZUlPXG4gICAqL1xuICByZWFkb25seSBzY2FsZUlPPzogU2NhbGVJb1ZvbHVtZVNvdXJjZTtcblxuICAvKipcbiAgICogU2VjcmV0IHJlcHJlc2VudHMgYSBzZWNyZXQgdGhhdCBzaG91bGQgcG9wdWxhdGUgdGhpcyB2b2x1bWUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI3NlY3JldFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjc2VjcmV0XG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ/OiBTZWNyZXRWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2VPUyByZXByZXNlbnRzIGEgU3RvcmFnZU9TIHZvbHVtZSBhdHRhY2hlZCBhbmQgbW91bnRlZCBvbiBLdWJlcm5ldGVzIG5vZGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjc3RvcmFnZW9zXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlb3M/OiBTdG9yYWdlT3NWb2x1bWVTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFZzcGhlcmVWb2x1bWUgcmVwcmVzZW50cyBhIHZTcGhlcmUgdm9sdW1lIGF0dGFjaGVkIGFuZCBtb3VudGVkIG9uIGt1YmVsZXRzIGhvc3QgbWFjaGluZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWUjdnNwaGVyZVZvbHVtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnNwaGVyZVZvbHVtZT86IFZzcGhlcmVWaXJ0dWFsRGlza1ZvbHVtZVNvdXJjZTtcblxufVxuXG4vKipcbiAqIEEgc2NvcGUgc2VsZWN0b3IgcmVwcmVzZW50cyB0aGUgQU5EIG9mIHRoZSBzZWxlY3RvcnMgcmVwcmVzZW50ZWQgYnkgdGhlIHNjb3BlZC1yZXNvdXJjZSBzZWxlY3RvciByZXF1aXJlbWVudHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NvcGVTZWxlY3RvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlU2VsZWN0b3Ige1xuICAvKipcbiAgICogQSBsaXN0IG9mIHNjb3BlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBzY29wZSBvZiB0aGUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TY29wZVNlbGVjdG9yI21hdGNoRXhwcmVzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1hdGNoRXhwcmVzc2lvbnM/OiBTY29wZWRSZXNvdXJjZVNlbGVjdG9yUmVxdWlyZW1lbnRbXTtcblxufVxuXG4vKipcbiAqIFNlcnZpY2VQb3J0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHNlcnZpY2UncyBwb3J0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VQb3J0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVBvcnQge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBwb3J0IHdpdGhpbiB0aGUgc2VydmljZS4gVGhpcyBtdXN0IGJlIGEgRE5TX0xBQkVMLiBBbGwgcG9ydHMgd2l0aGluIGEgU2VydmljZVNwZWMgbXVzdCBoYXZlIHVuaXF1ZSBuYW1lcy4gVGhpcyBtYXBzIHRvIHRoZSAnTmFtZScgZmllbGQgaW4gRW5kcG9pbnRQb3J0IG9iamVjdHMuIE9wdGlvbmFsIGlmIG9ubHkgb25lIFNlcnZpY2VQb3J0IGlzIGRlZmluZWQgb24gdGhpcyBzZXJ2aWNlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlUG9ydCNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9ydCBvbiBlYWNoIG5vZGUgb24gd2hpY2ggdGhpcyBzZXJ2aWNlIGlzIGV4cG9zZWQgd2hlbiB0eXBlPU5vZGVQb3J0IG9yIExvYWRCYWxhbmNlci4gVXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtLiBJZiBzcGVjaWZpZWQsIGl0IHdpbGwgYmUgYWxsb2NhdGVkIHRvIHRoZSBzZXJ2aWNlIGlmIHVudXNlZCBvciBlbHNlIGNyZWF0aW9uIG9mIHRoZSBzZXJ2aWNlIHdpbGwgZmFpbC4gRGVmYXVsdCBpcyB0byBhdXRvLWFsbG9jYXRlIGEgcG9ydCBpZiB0aGUgU2VydmljZVR5cGUgb2YgdGhpcyBTZXJ2aWNlIHJlcXVpcmVzIG9uZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zZXJ2aWNlcy1uZXR3b3JraW5nL3NlcnZpY2UvI3R5cGUtbm9kZXBvcnRcbiAgICpcbiAgICogQGRlZmF1bHQgdG8gYXV0by1hbGxvY2F0ZSBhIHBvcnQgaWYgdGhlIFNlcnZpY2VUeXBlIG9mIHRoaXMgU2VydmljZSByZXF1aXJlcyBvbmUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9zZXJ2aWNlLyN0eXBlLW5vZGVwb3J0XG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VQb3J0I25vZGVQb3J0XG4gICAqL1xuICByZWFkb25seSBub2RlUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHBvcnQgdGhhdCB3aWxsIGJlIGV4cG9zZWQgYnkgdGhpcyBzZXJ2aWNlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlUG9ydCNwb3J0XG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBwcm90b2NvbCBmb3IgdGhpcyBwb3J0LiBTdXBwb3J0cyBcIlRDUFwiLCBcIlVEUFwiLCBhbmQgXCJTQ1RQXCIuIERlZmF1bHQgaXMgVENQLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUQ1AuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VQb3J0I3Byb3RvY29sXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxuICAvKipcbiAgICogTnVtYmVyIG9yIG5hbWUgb2YgdGhlIHBvcnQgdG8gYWNjZXNzIG9uIHRoZSBwb2RzIHRhcmdldGVkIGJ5IHRoZSBzZXJ2aWNlLiBOdW1iZXIgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMSB0byA2NTUzNS4gTmFtZSBtdXN0IGJlIGFuIElBTkFfU1ZDX05BTUUuIElmIHRoaXMgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgbG9va2VkIHVwIGFzIGEgbmFtZWQgcG9ydCBpbiB0aGUgdGFyZ2V0IFBvZCdzIGNvbnRhaW5lciBwb3J0cy4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgdGhlICdwb3J0JyBmaWVsZCBpcyB1c2VkIChhbiBpZGVudGl0eSBtYXApLiBUaGlzIGZpZWxkIGlzIGlnbm9yZWQgZm9yIHNlcnZpY2VzIHdpdGggY2x1c3RlcklQPU5vbmUsIGFuZCBzaG91bGQgYmUgb21pdHRlZCBvciBzZXQgZXF1YWwgdG8gdGhlICdwb3J0JyBmaWVsZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zZXJ2aWNlcy1uZXR3b3JraW5nL3NlcnZpY2UvI2RlZmluaW5nLWEtc2VydmljZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlUG9ydCN0YXJnZXRQb3J0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXRQb3J0PzogSW50T3JTdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTZXNzaW9uQWZmaW5pdHlDb25maWcgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbnMgb2Ygc2Vzc2lvbiBhZmZpbml0eS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXNzaW9uQWZmaW5pdHlDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQWZmaW5pdHlDb25maWcge1xuICAvKipcbiAgICogY2xpZW50SVAgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb25zIG9mIENsaWVudCBJUCBiYXNlZCBzZXNzaW9uIGFmZmluaXR5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXNzaW9uQWZmaW5pdHlDb25maWcjY2xpZW50SVBcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudElQPzogQ2xpZW50SXBDb25maWc7XG5cbn1cblxuLyoqXG4gKiBJbmdyZXNzQmFja2VuZCBkZXNjcmliZXMgYWxsIGVuZHBvaW50cyBmb3IgYSBnaXZlbiBzZXJ2aWNlIGFuZCBwb3J0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc0JhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdyZXNzQmFja2VuZCB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZWQgc2VydmljZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzQmFja2VuZCNzZXJ2aWNlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBwb3J0IG9mIHRoZSByZWZlcmVuY2VkIHNlcnZpY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc0JhY2tlbmQjc2VydmljZVBvcnRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VQb3J0OiBJbnRPclN0cmluZztcblxufVxuXG4vKipcbiAqIEluZ3Jlc3NSdWxlIHJlcHJlc2VudHMgdGhlIHJ1bGVzIG1hcHBpbmcgdGhlIHBhdGhzIHVuZGVyIGEgc3BlY2lmaWVkIGhvc3QgdG8gdGhlIHJlbGF0ZWQgYmFja2VuZCBzZXJ2aWNlcy4gSW5jb21pbmcgcmVxdWVzdHMgYXJlIGZpcnN0IGV2YWx1YXRlZCBmb3IgYSBob3N0IG1hdGNoLCB0aGVuIHJvdXRlZCB0byB0aGUgYmFja2VuZCBhc3NvY2lhdGVkIHdpdGggdGhlIG1hdGNoaW5nIEluZ3Jlc3NSdWxlVmFsdWUuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzUnVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ3Jlc3NSdWxlIHtcbiAgLyoqXG4gICAqIEhvc3QgaXMgdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBvZiBhIG5ldHdvcmsgaG9zdCwgYXMgZGVmaW5lZCBieSBSRkMgMzk4Ni4gTm90ZSB0aGUgZm9sbG93aW5nIGRldmlhdGlvbnMgZnJvbSB0aGUgXCJob3N0XCIgcGFydCBvZiB0aGUgVVJJIGFzIGRlZmluZWQgaW4gdGhlIFJGQzogMS4gSVBzIGFyZSBub3QgYWxsb3dlZC4gQ3VycmVudGx5IGFuIEluZ3Jlc3NSdWxlVmFsdWUgY2FuIG9ubHkgYXBwbHkgdG8gdGhlXG5cdCAgSVAgaW4gdGhlIFNwZWMgb2YgdGhlIHBhcmVudCBJbmdyZXNzLlxuMi4gVGhlIGA6YCBkZWxpbWl0ZXIgaXMgbm90IHJlc3BlY3RlZCBiZWNhdXNlIHBvcnRzIGFyZSBub3QgYWxsb3dlZC5cblx0ICBDdXJyZW50bHkgdGhlIHBvcnQgb2YgYW4gSW5ncmVzcyBpcyBpbXBsaWNpdGx5IDo4MCBmb3IgaHR0cCBhbmRcblx0ICA6NDQzIGZvciBodHRwcy5cbkJvdGggdGhlc2UgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLiBJbmNvbWluZyByZXF1ZXN0cyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBob3N0IGJlZm9yZSB0aGUgSW5ncmVzc1J1bGVWYWx1ZS4gSWYgdGhlIGhvc3QgaXMgdW5zcGVjaWZpZWQsIHRoZSBJbmdyZXNzIHJvdXRlcyBhbGwgdHJhZmZpYyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIEluZ3Jlc3NSdWxlVmFsdWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc1J1bGUjaG9zdFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzUnVsZSNodHRwXG4gICAqL1xuICByZWFkb25seSBodHRwPzogSHR0cEluZ3Jlc3NSdWxlVmFsdWU7XG5cbn1cblxuLyoqXG4gKiBJbmdyZXNzVExTIGRlc2NyaWJlcyB0aGUgdHJhbnNwb3J0IGxheWVyIHNlY3VyaXR5IGFzc29jaWF0ZWQgd2l0aCBhbiBJbmdyZXNzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSW5ncmVzc1RMU1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ3Jlc3NUbHMge1xuICAvKipcbiAgICogSG9zdHMgYXJlIGEgbGlzdCBvZiBob3N0cyBpbmNsdWRlZCBpbiB0aGUgVExTIGNlcnRpZmljYXRlLiBUaGUgdmFsdWVzIGluIHRoaXMgbGlzdCBtdXN0IG1hdGNoIHRoZSBuYW1lL3MgdXNlZCBpbiB0aGUgdGxzU2VjcmV0LiBEZWZhdWx0cyB0byB0aGUgd2lsZGNhcmQgaG9zdCBzZXR0aW5nIGZvciB0aGUgbG9hZGJhbGFuY2VyIGNvbnRyb2xsZXIgZnVsZmlsbGluZyB0aGlzIEluZ3Jlc3MsIGlmIGxlZnQgdW5zcGVjaWZpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSB3aWxkY2FyZCBob3N0IHNldHRpbmcgZm9yIHRoZSBsb2FkYmFsYW5jZXIgY29udHJvbGxlciBmdWxmaWxsaW5nIHRoaXMgSW5ncmVzcywgaWYgbGVmdCB1bnNwZWNpZmllZC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjFiZXRhMS5JbmdyZXNzVExTI2hvc3RzXG4gICAqL1xuICByZWFkb25seSBob3N0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTZWNyZXROYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdXNlZCB0byB0ZXJtaW5hdGUgU1NMIHRyYWZmaWMgb24gNDQzLiBGaWVsZCBpcyBsZWZ0IG9wdGlvbmFsIHRvIGFsbG93IFNTTCByb3V0aW5nIGJhc2VkIG9uIFNOSSBob3N0bmFtZSBhbG9uZS4gSWYgdGhlIFNOSSBob3N0IGluIGEgbGlzdGVuZXIgY29uZmxpY3RzIHdpdGggdGhlIFwiSG9zdFwiIGhlYWRlciBmaWVsZCB1c2VkIGJ5IGFuIEluZ3Jlc3NSdWxlLCB0aGUgU05JIGhvc3QgaXMgdXNlZCBmb3IgdGVybWluYXRpb24gYW5kIHZhbHVlIG9mIHRoZSBIb3N0IGhlYWRlciBpcyB1c2VkIGZvciByb3V0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkluZ3Jlc3NUTFMjc2VjcmV0TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0TmFtZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIE5ldHdvcmtQb2xpY3lFZ3Jlc3NSdWxlIGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgc2V0IG9mIHRyYWZmaWMgdGhhdCBpcyBhbGxvd2VkIG91dCBvZiBwb2RzIG1hdGNoZWQgYnkgYSBOZXR3b3JrUG9saWN5U3BlYydzIHBvZFNlbGVjdG9yLiBUaGUgdHJhZmZpYyBtdXN0IG1hdGNoIGJvdGggcG9ydHMgYW5kIHRvLiBUaGlzIHR5cGUgaXMgYmV0YS1sZXZlbCBpbiAxLjhcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5RWdyZXNzUnVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lFZ3Jlc3NSdWxlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZGVzdGluYXRpb24gcG9ydHMgZm9yIG91dGdvaW5nIHRyYWZmaWMuIEVhY2ggaXRlbSBpbiB0aGlzIGxpc3QgaXMgY29tYmluZWQgdXNpbmcgYSBsb2dpY2FsIE9SLiBJZiB0aGlzIGZpZWxkIGlzIGVtcHR5IG9yIG1pc3NpbmcsIHRoaXMgcnVsZSBtYXRjaGVzIGFsbCBwb3J0cyAodHJhZmZpYyBub3QgcmVzdHJpY3RlZCBieSBwb3J0KS4gSWYgdGhpcyBmaWVsZCBpcyBwcmVzZW50IGFuZCBjb250YWlucyBhdCBsZWFzdCBvbmUgaXRlbSwgdGhlbiB0aGlzIHJ1bGUgYWxsb3dzIHRyYWZmaWMgb25seSBpZiB0aGUgdHJhZmZpYyBtYXRjaGVzIGF0IGxlYXN0IG9uZSBwb3J0IGluIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5RWdyZXNzUnVsZSNwb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBOZXR3b3JrUG9saWN5UG9ydFtdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGRlc3RpbmF0aW9ucyBmb3Igb3V0Z29pbmcgdHJhZmZpYyBvZiBwb2RzIHNlbGVjdGVkIGZvciB0aGlzIHJ1bGUuIEl0ZW1zIGluIHRoaXMgbGlzdCBhcmUgY29tYmluZWQgdXNpbmcgYSBsb2dpY2FsIE9SIG9wZXJhdGlvbi4gSWYgdGhpcyBmaWVsZCBpcyBlbXB0eSBvciBtaXNzaW5nLCB0aGlzIHJ1bGUgbWF0Y2hlcyBhbGwgZGVzdGluYXRpb25zICh0cmFmZmljIG5vdCByZXN0cmljdGVkIGJ5IGRlc3RpbmF0aW9uKS4gSWYgdGhpcyBmaWVsZCBpcyBwcmVzZW50IGFuZCBjb250YWlucyBhdCBsZWFzdCBvbmUgaXRlbSwgdGhpcyBydWxlIGFsbG93cyB0cmFmZmljIG9ubHkgaWYgdGhlIHRyYWZmaWMgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgaXRlbSBpbiB0aGUgdG8gbGlzdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeUVncmVzc1J1bGUjdG9cbiAgICovXG4gIHJlYWRvbmx5IHRvPzogTmV0d29ya1BvbGljeVBlZXJbXTtcblxufVxuXG4vKipcbiAqIE5ldHdvcmtQb2xpY3lJbmdyZXNzUnVsZSBkZXNjcmliZXMgYSBwYXJ0aWN1bGFyIHNldCBvZiB0cmFmZmljIHRoYXQgaXMgYWxsb3dlZCB0byB0aGUgcG9kcyBtYXRjaGVkIGJ5IGEgTmV0d29ya1BvbGljeVNwZWMncyBwb2RTZWxlY3Rvci4gVGhlIHRyYWZmaWMgbXVzdCBtYXRjaCBib3RoIHBvcnRzIGFuZCBmcm9tLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lJbmdyZXNzUnVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lJbmdyZXNzUnVsZSB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHNvdXJjZXMgd2hpY2ggc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBwb2RzIHNlbGVjdGVkIGZvciB0aGlzIHJ1bGUuIEl0ZW1zIGluIHRoaXMgbGlzdCBhcmUgY29tYmluZWQgdXNpbmcgYSBsb2dpY2FsIE9SIG9wZXJhdGlvbi4gSWYgdGhpcyBmaWVsZCBpcyBlbXB0eSBvciBtaXNzaW5nLCB0aGlzIHJ1bGUgbWF0Y2hlcyBhbGwgc291cmNlcyAodHJhZmZpYyBub3QgcmVzdHJpY3RlZCBieSBzb3VyY2UpLiBJZiB0aGlzIGZpZWxkIGlzIHByZXNlbnQgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uIGl0ZW0sIHRoaXMgcnVsZSBhbGxvd3MgdHJhZmZpYyBvbmx5IGlmIHRoZSB0cmFmZmljIG1hdGNoZXMgYXQgbGVhc3Qgb25lIGl0ZW0gaW4gdGhlIGZyb20gbGlzdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeUluZ3Jlc3NSdWxlI2Zyb21cbiAgICovXG4gIHJlYWRvbmx5IGZyb20/OiBOZXR3b3JrUG9saWN5UGVlcltdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvcnRzIHdoaWNoIHNob3VsZCBiZSBtYWRlIGFjY2Vzc2libGUgb24gdGhlIHBvZHMgc2VsZWN0ZWQgZm9yIHRoaXMgcnVsZS4gRWFjaCBpdGVtIGluIHRoaXMgbGlzdCBpcyBjb21iaW5lZCB1c2luZyBhIGxvZ2ljYWwgT1IuIElmIHRoaXMgZmllbGQgaXMgZW1wdHkgb3IgbWlzc2luZywgdGhpcyBydWxlIG1hdGNoZXMgYWxsIHBvcnRzICh0cmFmZmljIG5vdCByZXN0cmljdGVkIGJ5IHBvcnQpLiBJZiB0aGlzIGZpZWxkIGlzIHByZXNlbnQgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBpdGVtLCB0aGVuIHRoaXMgcnVsZSBhbGxvd3MgdHJhZmZpYyBvbmx5IGlmIHRoZSB0cmFmZmljIG1hdGNoZXMgYXQgbGVhc3Qgb25lIHBvcnQgaW4gdGhlIGxpc3QuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lJbmdyZXNzUnVsZSNwb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBOZXR3b3JrUG9saWN5UG9ydFtdO1xuXG59XG5cbi8qKlxuICogQWxsb3dlZENTSURyaXZlciByZXByZXNlbnRzIGEgc2luZ2xlIGlubGluZSBDU0kgRHJpdmVyIHRoYXQgaXMgYWxsb3dlZCB0byBiZSB1c2VkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5BbGxvd2VkQ1NJRHJpdmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENzaURyaXZlciB7XG4gIC8qKlxuICAgKiBOYW1lIGlzIHRoZSByZWdpc3RlcmVkIG5hbWUgb2YgdGhlIENTSSBkcml2ZXJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkFsbG93ZWRDU0lEcml2ZXIjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQWxsb3dlZEZsZXhWb2x1bWUgcmVwcmVzZW50cyBhIHNpbmdsZSBGbGV4dm9sdW1lIHRoYXQgaXMgYWxsb3dlZCB0byBiZSB1c2VkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5BbGxvd2VkRmxleFZvbHVtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsbG93ZWRGbGV4Vm9sdW1lIHtcbiAgLyoqXG4gICAqIGRyaXZlciBpcyB0aGUgbmFtZSBvZiB0aGUgRmxleHZvbHVtZSBkcml2ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5BbGxvd2VkRmxleFZvbHVtZSNkcml2ZXJcbiAgICovXG4gIHJlYWRvbmx5IGRyaXZlcjogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQWxsb3dlZEhvc3RQYXRoIGRlZmluZXMgdGhlIGhvc3Qgdm9sdW1lIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIGVuYWJsZWQgYnkgYSBwb2xpY3kgZm9yIHBvZHMgdG8gdXNlLiBJdCByZXF1aXJlcyB0aGUgcGF0aCBwcmVmaXggdG8gYmUgZGVmaW5lZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuQWxsb3dlZEhvc3RQYXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZEhvc3RQYXRoIHtcbiAgLyoqXG4gICAqIHBhdGhQcmVmaXggaXMgdGhlIHBhdGggcHJlZml4IHRoYXQgdGhlIGhvc3Qgdm9sdW1lIG11c3QgbWF0Y2guIEl0IGRvZXMgbm90IHN1cHBvcnQgYCpgLiBUcmFpbGluZyBzbGFzaGVzIGFyZSB0cmltbWVkIHdoZW4gdmFsaWRhdGluZyB0aGUgcGF0aCBwcmVmaXggd2l0aCBhIGhvc3QgcGF0aC5cblxuRXhhbXBsZXM6IGAvZm9vYCB3b3VsZCBhbGxvdyBgL2Zvb2AsIGAvZm9vL2AgYW5kIGAvZm9vL2JhcmAgYC9mb29gIHdvdWxkIG5vdCBhbGxvdyBgL2Zvb2RgIG9yIGAvZXRjL2Zvb2BcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkFsbG93ZWRIb3N0UGF0aCNwYXRoUHJlZml4XG4gICAqL1xuICByZWFkb25seSBwYXRoUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB3aGVuIHNldCB0byB0cnVlLCB3aWxsIGFsbG93IGhvc3Qgdm9sdW1lcyBtYXRjaGluZyB0aGUgcGF0aFByZWZpeCBvbmx5IGlmIGFsbCB2b2x1bWUgbW91bnRzIGFyZSByZWFkT25seS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkFsbG93ZWRIb3N0UGF0aCNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogRlNHcm91cFN0cmF0ZWd5T3B0aW9ucyBkZWZpbmVzIHRoZSBzdHJhdGVneSB0eXBlIGFuZCBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBzdHJhdGVneS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuRlNHcm91cFN0cmF0ZWd5T3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZzR3JvdXBTdHJhdGVneU9wdGlvbnMge1xuICAvKipcbiAgICogcmFuZ2VzIGFyZSB0aGUgYWxsb3dlZCByYW5nZXMgb2YgZnMgZ3JvdXBzLiAgSWYgeW91IHdvdWxkIGxpa2UgdG8gZm9yY2UgYSBzaW5nbGUgZnMgZ3JvdXAgdGhlbiBzdXBwbHkgYSBzaW5nbGUgcmFuZ2Ugd2l0aCB0aGUgc2FtZSBzdGFydCBhbmQgZW5kLiBSZXF1aXJlZCBmb3IgTXVzdFJ1bkFzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuRlNHcm91cFN0cmF0ZWd5T3B0aW9ucyNyYW5nZXNcbiAgICovXG4gIHJlYWRvbmx5IHJhbmdlcz86IElkUmFuZ2VbXTtcblxuICAvKipcbiAgICogcnVsZSBpcyB0aGUgc3RyYXRlZ3kgdGhhdCB3aWxsIGRpY3RhdGUgd2hhdCBGU0dyb3VwIGlzIHVzZWQgaW4gdGhlIFNlY3VyaXR5Q29udGV4dC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkZTR3JvdXBTdHJhdGVneU9wdGlvbnMjcnVsZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVsZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEhvc3RQb3J0UmFuZ2UgZGVmaW5lcyBhIHJhbmdlIG9mIGhvc3QgcG9ydHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQgYnkgYSBwb2xpY3kgZm9yIHBvZHMgdG8gdXNlLiAgSXQgcmVxdWlyZXMgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCB0byBiZSBkZWZpbmVkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5Ib3N0UG9ydFJhbmdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdFBvcnRSYW5nZSB7XG4gIC8qKlxuICAgKiBtYXggaXMgdGhlIGVuZCBvZiB0aGUgcmFuZ2UsIGluY2x1c2l2ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkhvc3RQb3J0UmFuZ2UjbWF4XG4gICAqL1xuICByZWFkb25seSBtYXg6IG51bWJlcjtcblxuICAvKipcbiAgICogbWluIGlzIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UsIGluY2x1c2l2ZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLkhvc3RQb3J0UmFuZ2UjbWluXG4gICAqL1xuICByZWFkb25seSBtaW46IG51bWJlcjtcblxufVxuXG4vKipcbiAqIFJ1bkFzR3JvdXBTdHJhdGVneU9wdGlvbnMgZGVmaW5lcyB0aGUgc3RyYXRlZ3kgdHlwZSBhbmQgYW55IG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIHN0cmF0ZWd5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5SdW5Bc0dyb3VwU3RyYXRlZ3lPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQXNHcm91cFN0cmF0ZWd5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiByYW5nZXMgYXJlIHRoZSBhbGxvd2VkIHJhbmdlcyBvZiBnaWRzIHRoYXQgbWF5IGJlIHVzZWQuIElmIHlvdSB3b3VsZCBsaWtlIHRvIGZvcmNlIGEgc2luZ2xlIGdpZCB0aGVuIHN1cHBseSBhIHNpbmdsZSByYW5nZSB3aXRoIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQuIFJlcXVpcmVkIGZvciBNdXN0UnVuQXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5SdW5Bc0dyb3VwU3RyYXRlZ3lPcHRpb25zI3Jhbmdlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmFuZ2VzPzogSWRSYW5nZVtdO1xuXG4gIC8qKlxuICAgKiBydWxlIGlzIHRoZSBzdHJhdGVneSB0aGF0IHdpbGwgZGljdGF0ZSB0aGUgYWxsb3dhYmxlIFJ1bkFzR3JvdXAgdmFsdWVzIHRoYXQgbWF5IGJlIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlJ1bkFzR3JvdXBTdHJhdGVneU9wdGlvbnMjcnVsZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVsZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zIGRlZmluZXMgdGhlIHN0cmF0ZWd5IHR5cGUgYW5kIGFueSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBzdHJhdGVneS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIHJhbmdlcyBhcmUgdGhlIGFsbG93ZWQgcmFuZ2VzIG9mIHVpZHMgdGhhdCBtYXkgYmUgdXNlZC4gSWYgeW91IHdvdWxkIGxpa2UgdG8gZm9yY2UgYSBzaW5nbGUgdWlkIHRoZW4gc3VwcGx5IGEgc2luZ2xlIHJhbmdlIHdpdGggdGhlIHNhbWUgc3RhcnQgYW5kIGVuZC4gUmVxdWlyZWQgZm9yIE11c3RSdW5Bcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlJ1bkFzVXNlclN0cmF0ZWd5T3B0aW9ucyNyYW5nZXNcbiAgICovXG4gIHJlYWRvbmx5IHJhbmdlcz86IElkUmFuZ2VbXTtcblxuICAvKipcbiAgICogcnVsZSBpcyB0aGUgc3RyYXRlZ3kgdGhhdCB3aWxsIGRpY3RhdGUgdGhlIGFsbG93YWJsZSBSdW5Bc1VzZXIgdmFsdWVzIHRoYXQgbWF5IGJlIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlJ1bkFzVXNlclN0cmF0ZWd5T3B0aW9ucyNydWxlXG4gICAqL1xuICByZWFkb25seSBydWxlOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSdW50aW1lQ2xhc3NTdHJhdGVneU9wdGlvbnMgZGVmaW5lIHRoZSBzdHJhdGVneSB0aGF0IHdpbGwgZGljdGF0ZSB0aGUgYWxsb3dhYmxlIFJ1bnRpbWVDbGFzc2VzIGZvciBhIHBvZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuUnVudGltZUNsYXNzU3RyYXRlZ3lPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZUNsYXNzU3RyYXRlZ3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIGFsbG93ZWRSdW50aW1lQ2xhc3NOYW1lcyBpcyBhIHdoaXRlbGlzdCBvZiBSdW50aW1lQ2xhc3MgbmFtZXMgdGhhdCBtYXkgYmUgc3BlY2lmaWVkIG9uIGEgcG9kLiBBIHZhbHVlIG9mIFwiKlwiIG1lYW5zIHRoYXQgYW55IFJ1bnRpbWVDbGFzcyBuYW1lIGlzIGFsbG93ZWQsIGFuZCBtdXN0IGJlIHRoZSBvbmx5IGl0ZW0gaW4gdGhlIGxpc3QuIEFuIGVtcHR5IGxpc3QgcmVxdWlyZXMgdGhlIFJ1bnRpbWVDbGFzc05hbWUgZmllbGQgdG8gYmUgdW5zZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5SdW50aW1lQ2xhc3NTdHJhdGVneU9wdGlvbnMjYWxsb3dlZFJ1bnRpbWVDbGFzc05hbWVzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkUnVudGltZUNsYXNzTmFtZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0UnVudGltZUNsYXNzTmFtZSBpcyB0aGUgZGVmYXVsdCBSdW50aW1lQ2xhc3NOYW1lIHRvIHNldCBvbiB0aGUgcG9kLiBUaGUgZGVmYXVsdCBNVVNUIGJlIGFsbG93ZWQgYnkgdGhlIGFsbG93ZWRSdW50aW1lQ2xhc3NOYW1lcyBsaXN0LiBBIHZhbHVlIG9mIG5pbCBkb2VzIG5vdCBtdXRhdGUgdGhlIFBvZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLlJ1bnRpbWVDbGFzc1N0cmF0ZWd5T3B0aW9ucyNkZWZhdWx0UnVudGltZUNsYXNzTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJ1bnRpbWVDbGFzc05hbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTRUxpbnV4U3RyYXRlZ3lPcHRpb25zIGRlZmluZXMgdGhlIHN0cmF0ZWd5IHR5cGUgYW5kIGFueSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBzdHJhdGVneS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuU0VMaW51eFN0cmF0ZWd5T3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlTGludXhTdHJhdGVneU9wdGlvbnMge1xuICAvKipcbiAgICogcnVsZSBpcyB0aGUgc3RyYXRlZ3kgdGhhdCB3aWxsIGRpY3RhdGUgdGhlIGFsbG93YWJsZSBsYWJlbHMgdGhhdCBtYXkgYmUgc2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuU0VMaW51eFN0cmF0ZWd5T3B0aW9ucyNydWxlXG4gICAqL1xuICByZWFkb25seSBydWxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHNlTGludXhPcHRpb25zIHJlcXVpcmVkIHRvIHJ1biBhczsgcmVxdWlyZWQgZm9yIE11c3RSdW5BcyBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3Rhc2tzL2NvbmZpZ3VyZS1wb2QtY29udGFpbmVyL3NlY3VyaXR5LWNvbnRleHQvXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5TRUxpbnV4U3RyYXRlZ3lPcHRpb25zI3NlTGludXhPcHRpb25zXG4gICAqL1xuICByZWFkb25seSBzZUxpbnV4T3B0aW9ucz86IFNlTGludXhPcHRpb25zO1xuXG59XG5cbi8qKlxuICogU3VwcGxlbWVudGFsR3JvdXBzU3RyYXRlZ3lPcHRpb25zIGRlZmluZXMgdGhlIHN0cmF0ZWd5IHR5cGUgYW5kIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIHN0cmF0ZWd5LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5TdXBwbGVtZW50YWxHcm91cHNTdHJhdGVneU9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdXBwbGVtZW50YWxHcm91cHNTdHJhdGVneU9wdGlvbnMge1xuICAvKipcbiAgICogcmFuZ2VzIGFyZSB0aGUgYWxsb3dlZCByYW5nZXMgb2Ygc3VwcGxlbWVudGFsIGdyb3Vwcy4gIElmIHlvdSB3b3VsZCBsaWtlIHRvIGZvcmNlIGEgc2luZ2xlIHN1cHBsZW1lbnRhbCBncm91cCB0aGVuIHN1cHBseSBhIHNpbmdsZSByYW5nZSB3aXRoIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQuIFJlcXVpcmVkIGZvciBNdXN0UnVuQXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5TdXBwbGVtZW50YWxHcm91cHNTdHJhdGVneU9wdGlvbnMjcmFuZ2VzXG4gICAqL1xuICByZWFkb25seSByYW5nZXM/OiBJZFJhbmdlW107XG5cbiAgLyoqXG4gICAqIHJ1bGUgaXMgdGhlIHN0cmF0ZWd5IHRoYXQgd2lsbCBkaWN0YXRlIHdoYXQgc3VwcGxlbWVudGFsIGdyb3VwcyBpcyB1c2VkIGluIHRoZSBTZWN1cml0eUNvbnRleHQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5wb2xpY3kudjFiZXRhMS5TdXBwbGVtZW50YWxHcm91cHNTdHJhdGVneU9wdGlvbnMjcnVsZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVsZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEtpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuIFNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLiBDYW5ub3QgYmUgdXBkYXRlZC4gSW4gQ2FtZWxDYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICpcbiAqIEBzY2hlbWEgSW9LOFNBcGltYWNoaW5lcnlQa2dBcGlzTWV0YVYxRGVsZXRlT3B0aW9uc0tpbmRcbiAqL1xuZXhwb3J0IGVudW0gSW9LOFNBcGltYWNoaW5lcnlQa2dBcGlzTWV0YVYxRGVsZXRlT3B0aW9uc0tpbmQge1xuICAvKiogRGVsZXRlT3B0aW9ucyAqL1xuICBERUxFVEVfT1BUSU9OUyA9ICdEZWxldGVPcHRpb25zJyxcbn1cblxuLyoqXG4gKiBQcmVjb25kaXRpb25zIG11c3QgYmUgZnVsZmlsbGVkIGJlZm9yZSBhbiBvcGVyYXRpb24gKHVwZGF0ZSwgZGVsZXRlLCBldGMuKSBpcyBjYXJyaWVkIG91dC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5QcmVjb25kaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlY29uZGl0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRhcmdldCBSZXNvdXJjZVZlcnNpb25cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuUHJlY29uZGl0aW9ucyNyZXNvdXJjZVZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0YXJnZXQgVUlELlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5QcmVjb25kaXRpb25zI3VpZFxuICAgKi9cbiAgcmVhZG9ubHkgdWlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy51dGlsLmludHN0ci5JbnRPclN0cmluZ1xuICovXG5leHBvcnQgY2xhc3MgSW50T3JTdHJpbmcge1xuICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcodmFsdWU6IHN0cmluZyk6IEludE9yU3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEludE9yU3RyaW5nKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGZyb21OdW1iZXIodmFsdWU6IG51bWJlcik6IEludE9yU3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEludE9yU3RyaW5nKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Jlc29sdmUnLCB7IHZhbHVlOiAoKSA9PiB2YWx1ZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEVudlZhciByZXByZXNlbnRzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHByZXNlbnQgaW4gYSBDb250YWluZXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW52VmFyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52VmFyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLiBNdXN0IGJlIGEgQ19JREVOVElGSUVSLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbnZWYXIjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgcHJldmlvdXMgZGVmaW5lZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGNvbnRhaW5lciBhbmQgYW55IHNlcnZpY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZCwgdGhlIHJlZmVyZW5jZSBpbiB0aGUgaW5wdXQgc3RyaW5nIHdpbGwgYmUgdW5jaGFuZ2VkLiBUaGUgJChWQVJfTkFNRSkgc3ludGF4IGNhbiBiZSBlc2NhcGVkIHdpdGggYSBkb3VibGUgJCQsIGllOiAkJChWQVJfTkFNRSkuIEVzY2FwZWQgcmVmZXJlbmNlcyB3aWxsIG5ldmVyIGJlIGV4cGFuZGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHZhcmlhYmxlIGV4aXN0cyBvciBub3QuIERlZmF1bHRzIHRvIFwiXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW52VmFyI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogU291cmNlIGZvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUncyB2YWx1ZS4gQ2Fubm90IGJlIHVzZWQgaWYgdmFsdWUgaXMgbm90IGVtcHR5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbnZWYXIjdmFsdWVGcm9tXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUZyb20/OiBFbnZWYXJTb3VyY2U7XG5cbn1cblxuLyoqXG4gKiBFbnZGcm9tU291cmNlIHJlcHJlc2VudHMgdGhlIHNvdXJjZSBvZiBhIHNldCBvZiBDb25maWdNYXBzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW52RnJvbVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudkZyb21Tb3VyY2Uge1xuICAvKipcbiAgICogVGhlIENvbmZpZ01hcCB0byBzZWxlY3QgZnJvbVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbnZGcm9tU291cmNlI2NvbmZpZ01hcFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnTWFwUmVmPzogQ29uZmlnTWFwRW52U291cmNlO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBpZGVudGlmaWVyIHRvIHByZXBlbmQgdG8gZWFjaCBrZXkgaW4gdGhlIENvbmZpZ01hcC4gTXVzdCBiZSBhIENfSURFTlRJRklFUi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW52RnJvbVNvdXJjZSNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNlY3JldCB0byBzZWxlY3QgZnJvbVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbnZGcm9tU291cmNlI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmPzogU2VjcmV0RW52U291cmNlO1xuXG59XG5cbi8qKlxuICogVm9sdW1lTW91bnQgZGVzY3JpYmVzIGEgbW91bnRpbmcgb2YgYSBWb2x1bWUgd2l0aGluIGEgY29udGFpbmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZU1vdW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lTW91bnQge1xuICAvKipcbiAgICogUGF0aCB3aXRoaW4gdGhlIGNvbnRhaW5lciBhdCB3aGljaCB0aGUgdm9sdW1lIHNob3VsZCBiZSBtb3VudGVkLiAgTXVzdCBub3QgY29udGFpbiAnOicuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZU1vdW50I21vdW50UGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgbW91bnRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG1vdW50UHJvcGFnYXRpb24gZGV0ZXJtaW5lcyBob3cgbW91bnRzIGFyZSBwcm9wYWdhdGVkIGZyb20gdGhlIGhvc3QgdG8gY29udGFpbmVyIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gV2hlbiBub3Qgc2V0LCBNb3VudFByb3BhZ2F0aW9uTm9uZSBpcyB1c2VkLiBUaGlzIGZpZWxkIGlzIGJldGEgaW4gMS4xMC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lTW91bnQjbW91bnRQcm9wYWdhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbW91bnRQcm9wYWdhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBtdXN0IG1hdGNoIHRoZSBOYW1lIG9mIGEgVm9sdW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWVNb3VudCNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1vdW50ZWQgcmVhZC1vbmx5IGlmIHRydWUsIHJlYWQtd3JpdGUgb3RoZXJ3aXNlIChmYWxzZSBvciB1bnNwZWNpZmllZCkuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lTW91bnQjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGF0aCB3aXRoaW4gdGhlIHZvbHVtZSBmcm9tIHdoaWNoIHRoZSBjb250YWluZXIncyB2b2x1bWUgc2hvdWxkIGJlIG1vdW50ZWQuIERlZmF1bHRzIHRvIFwiXCIgKHZvbHVtZSdzIHJvb3QpLlxuICAgKlxuICAgKiBAZGVmYXVsdCB2b2x1bWUncyByb290KS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lTW91bnQjc3ViUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgc3ViUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogRXhwYW5kZWQgcGF0aCB3aXRoaW4gdGhlIHZvbHVtZSBmcm9tIHdoaWNoIHRoZSBjb250YWluZXIncyB2b2x1bWUgc2hvdWxkIGJlIG1vdW50ZWQuIEJlaGF2ZXMgc2ltaWxhcmx5IHRvIFN1YlBhdGggYnV0IGVudmlyb25tZW50IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudC4gRGVmYXVsdHMgdG8gXCJcIiAodm9sdW1lJ3Mgcm9vdCkuIFN1YlBhdGhFeHByIGFuZCBTdWJQYXRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIFRoaXMgZmllbGQgaXMgYmV0YSBpbiAxLjE1LlxuICAgKlxuICAgKiBAZGVmYXVsdCB2b2x1bWUncyByb290KS4gU3ViUGF0aEV4cHIgYW5kIFN1YlBhdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gVGhpcyBmaWVsZCBpcyBiZXRhIGluIDEuMTUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZU1vdW50I3N1YlBhdGhFeHByXG4gICAqL1xuICByZWFkb25seSBzdWJQYXRoRXhwcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEEgdG9wb2xvZ3kgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IG1hdGNoZXMgZ2l2ZW4gbGFiZWwuIFRoaXMgaXMgYW4gYWxwaGEgZmVhdHVyZSBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRvcG9sb2d5U2VsZWN0b3JMYWJlbFJlcXVpcmVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lTZWxlY3RvckxhYmVsUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ub3BvbG9neVNlbGVjdG9yTGFiZWxSZXF1aXJlbWVudCNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBPbmUgdmFsdWUgbXVzdCBtYXRjaCB0aGUgbGFiZWwgdG8gYmUgc2VsZWN0ZWQuIEVhY2ggZW50cnkgaW4gVmFsdWVzIGlzIE9SZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRvcG9sb2d5U2VsZWN0b3JMYWJlbFJlcXVpcmVtZW50I3ZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIFZvbHVtZUF0dGFjaG1lbnRTb3VyY2UgcmVwcmVzZW50cyBhIHZvbHVtZSB0aGF0IHNob3VsZCBiZSBhdHRhY2hlZC4gUmlnaHQgbm93IG9ubHkgUGVyc2lzdGVuVm9sdW1lcyBjYW4gYmUgYXR0YWNoZWQgdmlhIGV4dGVybmFsIGF0dGFjaGVyLCBpbiBmdXR1cmUgd2UgbWF5IGFsbG93IGFsc28gaW5saW5lIHZvbHVtZXMgaW4gcG9kcy4gRXhhY3RseSBvbmUgbWVtYmVyIGNhbiBiZSBzZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5Wb2x1bWVBdHRhY2htZW50U291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lQXR0YWNobWVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBpbmxpbmVWb2x1bWVTcGVjIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGF0dGFjaCBhIHBlcnNpc3RlbnQgdm9sdW1lIGRlZmluZWQgYnkgYSBwb2QncyBpbmxpbmUgVm9sdW1lU291cmNlLiBUaGlzIGZpZWxkIGlzIHBvcHVsYXRlZCBvbmx5IGZvciB0aGUgQ1NJTWlncmF0aW9uIGZlYXR1cmUuIEl0IGNvbnRhaW5zIHRyYW5zbGF0ZWQgZmllbGRzIGZyb20gYSBwb2QncyBpbmxpbmUgVm9sdW1lU291cmNlIHRvIGEgUGVyc2lzdGVudFZvbHVtZVNwZWMuIFRoaXMgZmllbGQgaXMgYWxwaGEtbGV2ZWwgYW5kIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlZCB0aGUgQ1NJTWlncmF0aW9uIGZlYXR1cmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuVm9sdW1lQXR0YWNobWVudFNvdXJjZSNpbmxpbmVWb2x1bWVTcGVjXG4gICAqL1xuICByZWFkb25seSBpbmxpbmVWb2x1bWVTcGVjPzogUGVyc2lzdGVudFZvbHVtZVNwZWM7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBlcnNpc3RlbnQgdm9sdW1lIHRvIGF0dGFjaC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLnN0b3JhZ2UudjFiZXRhMS5Wb2x1bWVBdHRhY2htZW50U291cmNlI3BlcnNpc3RlbnRWb2x1bWVOYW1lXG4gICAqL1xuICByZWFkb25seSBwZXJzaXN0ZW50Vm9sdW1lTmFtZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENTSU5vZGVEcml2ZXIgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmljYXRpb24gb2Ygb25lIENTSSBkcml2ZXIgaW5zdGFsbGVkIG9uIGEgbm9kZVxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZURyaXZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzaU5vZGVEcml2ZXIge1xuICAvKipcbiAgICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgQ1NJIGRyaXZlciB0aGF0IHRoaXMgb2JqZWN0IHJlZmVycyB0by4gVGhpcyBNVVNUIGJlIHRoZSBzYW1lIG5hbWUgcmV0dXJuZWQgYnkgdGhlIENTSSBHZXRQbHVnaW5OYW1lKCkgY2FsbCBmb3IgdGhhdCBkcml2ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZURyaXZlciNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG5vZGVJRCBvZiB0aGUgbm9kZSBmcm9tIHRoZSBkcml2ZXIgcG9pbnQgb2Ygdmlldy4gVGhpcyBmaWVsZCBlbmFibGVzIEt1YmVybmV0ZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBzdG9yYWdlIHN5c3RlbXMgdGhhdCBkbyBub3Qgc2hhcmUgdGhlIHNhbWUgbm9tZW5jbGF0dXJlIGZvciBub2Rlcy4gRm9yIGV4YW1wbGUsIEt1YmVybmV0ZXMgbWF5IHJlZmVyIHRvIGEgZ2l2ZW4gbm9kZSBhcyBcIm5vZGUxXCIsIGJ1dCB0aGUgc3RvcmFnZSBzeXN0ZW0gbWF5IHJlZmVyIHRvIHRoZSBzYW1lIG5vZGUgYXMgXCJub2RlQVwiLiBXaGVuIEt1YmVybmV0ZXMgaXNzdWVzIGEgY29tbWFuZCB0byB0aGUgc3RvcmFnZSBzeXN0ZW0gdG8gYXR0YWNoIGEgdm9sdW1lIHRvIGEgc3BlY2lmaWMgbm9kZSwgaXQgY2FuIHVzZSB0aGlzIGZpZWxkIHRvIHJlZmVyIHRvIHRoZSBub2RlIG5hbWUgdXNpbmcgdGhlIElEIHRoYXQgdGhlIHN0b3JhZ2Ugc3lzdGVtIHdpbGwgdW5kZXJzdGFuZCwgZS5nLiBcIm5vZGVBXCIgaW5zdGVhZCBvZiBcIm5vZGUxXCIuIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZURyaXZlciNub2RlSURcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVJRDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0b3BvbG9neUtleXMgaXMgdGhlIGxpc3Qgb2Yga2V5cyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4gV2hlbiBhIGRyaXZlciBpcyBpbml0aWFsaXplZCBvbiBhIGNsdXN0ZXIsIGl0IHByb3ZpZGVzIGEgc2V0IG9mIHRvcG9sb2d5IGtleXMgdGhhdCBpdCB1bmRlcnN0YW5kcyAoZS5nLiBcImNvbXBhbnkuY29tL3pvbmVcIiwgXCJjb21wYW55LmNvbS9yZWdpb25cIikuIFdoZW4gYSBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgb24gYSBub2RlLCBpdCBwcm92aWRlcyB0aGUgc2FtZSB0b3BvbG9neSBrZXlzIGFsb25nIHdpdGggdmFsdWVzLiBLdWJlbGV0IHdpbGwgZXhwb3NlIHRoZXNlIHRvcG9sb2d5IGtleXMgYXMgbGFiZWxzIG9uIGl0cyBvd24gbm9kZSBvYmplY3QuIFdoZW4gS3ViZXJuZXRlcyBkb2VzIHRvcG9sb2d5IGF3YXJlIHByb3Zpc2lvbmluZywgaXQgY2FuIHVzZSB0aGlzIGxpc3QgdG8gZGV0ZXJtaW5lIHdoaWNoIGxhYmVscyBpdCBzaG91bGQgcmV0cmlldmUgZnJvbSB0aGUgbm9kZSBvYmplY3QgYW5kIHBhc3MgYmFjayB0byB0aGUgZHJpdmVyLiBJdCBpcyBwb3NzaWJsZSBmb3IgZGlmZmVyZW50IG5vZGVzIHRvIHVzZSBkaWZmZXJlbnQgdG9wb2xvZ3kga2V5cy4gVGhpcyBjYW4gYmUgZW1wdHkgaWYgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdG9wb2xvZ3kuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5zdG9yYWdlLnYxYmV0YTEuQ1NJTm9kZURyaXZlciN0b3BvbG9neUtleXNcbiAgICovXG4gIHJlYWRvbmx5IHRvcG9sb2d5S2V5cz86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogQ3VzdG9tUmVzb3VyY2VDb2x1bW5EZWZpbml0aW9uIHNwZWNpZmllcyBhIGNvbHVtbiBmb3Igc2VydmVyIHNpZGUgcHJpbnRpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlQ29sdW1uRGVmaW5pdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlQ29sdW1uRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBKU09OUGF0aCBpcyBhIHNpbXBsZSBKU09OIHBhdGgsIGkuZS4gd2l0aCBhcnJheSBub3RhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlQ29sdW1uRGVmaW5pdGlvbiNKU09OUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkganNvblBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGRlc2NyaXB0aW9uIGlzIGEgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhpcyBjb2x1bW4uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZUNvbHVtbkRlZmluaXRpb24jZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBmb3JtYXQgaXMgYW4gb3B0aW9uYWwgT3BlbkFQSSB0eXBlIGRlZmluaXRpb24gZm9yIHRoaXMgY29sdW1uLiBUaGUgJ25hbWUnIGZvcm1hdCBpcyBhcHBsaWVkIHRvIHRoZSBwcmltYXJ5IGlkZW50aWZpZXIgY29sdW1uIHRvIGFzc2lzdCBpbiBjbGllbnRzIGlkZW50aWZ5aW5nIGNvbHVtbiBpcyB0aGUgcmVzb3VyY2UgbmFtZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9PQUkvT3BlbkFQSS1TcGVjaWZpY2F0aW9uL2Jsb2IvbWFzdGVyL3ZlcnNpb25zLzIuMC5tZCNkYXRhLXR5cGVzIGZvciBtb3JlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VDb2x1bW5EZWZpbml0aW9uI2Zvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBuYW1lIGlzIGEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhlIGNvbHVtbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlQ29sdW1uRGVmaW5pdGlvbiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHByaW9yaXR5IGlzIGFuIGludGVnZXIgZGVmaW5pbmcgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgdGhpcyBjb2x1bW4gY29tcGFyZWQgdG8gb3RoZXJzLiBMb3dlciBudW1iZXJzIGFyZSBjb25zaWRlcmVkIGhpZ2hlciBwcmlvcml0eS4gQ29sdW1ucyB0aGF0IG1heSBiZSBvbWl0dGVkIGluIGxpbWl0ZWQgc3BhY2Ugc2NlbmFyaW9zIHNob3VsZCBiZSBnaXZlbiBhIGhpZ2hlciBwcmlvcml0eS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlQ29sdW1uRGVmaW5pdGlvbiNwcmlvcml0eVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHR5cGUgaXMgYW4gT3BlbkFQSSB0eXBlIGRlZmluaXRpb24gZm9yIHRoaXMgY29sdW1uLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL09BSS9PcGVuQVBJLVNwZWNpZmljYXRpb24vYmxvYi9tYXN0ZXIvdmVyc2lvbnMvMi4wLm1kI2RhdGEtdHlwZXMgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZUNvbHVtbkRlZmluaXRpb24jdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ3VzdG9tUmVzb3VyY2VDb252ZXJzaW9uIGRlc2NyaWJlcyBob3cgdG8gY29udmVydCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgYSBDUi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VDb252ZXJzaW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VDb252ZXJzaW9uIHtcbiAgLyoqXG4gICAqIENvbnZlcnNpb25SZXZpZXdWZXJzaW9ucyBpcyBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJlZmVycmVkIGBDb252ZXJzaW9uUmV2aWV3YCB2ZXJzaW9ucyB0aGUgV2ViaG9vayBleHBlY3RzLiBBUEkgc2VydmVyIHdpbGwgdHJ5IHRvIHVzZSBmaXJzdCB2ZXJzaW9uIGluIHRoZSBsaXN0IHdoaWNoIGl0IHN1cHBvcnRzLiBJZiBub25lIG9mIHRoZSB2ZXJzaW9ucyBzcGVjaWZpZWQgaW4gdGhpcyBsaXN0IHN1cHBvcnRlZCBieSBBUEkgc2VydmVyLCBjb252ZXJzaW9uIHdpbGwgZmFpbCBmb3IgdGhpcyBvYmplY3QuIElmIGEgcGVyc2lzdGVkIFdlYmhvb2sgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgYWxsb3dlZCB2ZXJzaW9ucyBhbmQgZG9lcyBub3QgaW5jbHVkZSBhbnkgdmVyc2lvbnMga25vd24gdG8gdGhlIEFQSSBTZXJ2ZXIsIGNhbGxzIHRvIHRoZSB3ZWJob29rIHdpbGwgZmFpbC4gRGVmYXVsdCB0byBgWyd2MWJldGExJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCB2MWJldGExJ11gLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VDb252ZXJzaW9uI2NvbnZlcnNpb25SZXZpZXdWZXJzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgY29udmVyc2lvblJldmlld1ZlcnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIGBzdHJhdGVneWAgc3BlY2lmaWVzIHRoZSBjb252ZXJzaW9uIHN0cmF0ZWd5LiBBbGxvd2VkIHZhbHVlcyBhcmU6IC0gYE5vbmVgOiBUaGUgY29udmVydGVyIG9ubHkgY2hhbmdlIHRoZSBhcGlWZXJzaW9uIGFuZCB3b3VsZCBub3QgdG91Y2ggYW55IG90aGVyIGZpZWxkIGluIHRoZSBDUi4gLSBgV2ViaG9va2A6IEFQSSBTZXJ2ZXIgd2lsbCBjYWxsIHRvIGFuIGV4dGVybmFsIHdlYmhvb2sgdG8gZG8gdGhlIGNvbnZlcnNpb24uIEFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAgaXMgbmVlZGVkIGZvciB0aGlzIG9wdGlvbi4gVGhpcyByZXF1aXJlcyBzcGVjLnByZXNlcnZlVW5rbm93bkZpZWxkcyB0byBiZSBmYWxzZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlQ29udmVyc2lvbiNzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyYXRlZ3k6IHN0cmluZztcblxuICAvKipcbiAgICogYHdlYmhvb2tDbGllbnRDb25maWdgIGlzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGhvdyB0byBjYWxsIHRoZSB3ZWJob29rIGlmIHN0cmF0ZWd5IGlzIGBXZWJob29rYC4gVGhpcyBmaWVsZCBpcyBhbHBoYS1sZXZlbCBhbmQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIEN1c3RvbVJlc291cmNlV2ViaG9va0NvbnZlcnNpb24gZmVhdHVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlQ29udmVyc2lvbiN3ZWJob29rQ2xpZW50Q29uZmlnXG4gICAqL1xuICByZWFkb25seSB3ZWJob29rQ2xpZW50Q29uZmlnPzogV2ViaG9va0NsaWVudENvbmZpZztcblxufVxuXG4vKipcbiAqIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvbk5hbWVzIGluZGljYXRlcyB0aGUgbmFtZXMgdG8gc2VydmUgdGhpcyBDdXN0b21SZXNvdXJjZURlZmluaXRpb25cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTmFtZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21SZXNvdXJjZURlZmluaXRpb25OYW1lcyB7XG4gIC8qKlxuICAgKiBDYXRlZ29yaWVzIGlzIGEgbGlzdCBvZiBncm91cGVkIHJlc291cmNlcyBjdXN0b20gcmVzb3VyY2VzIGJlbG9uZyB0byAoZS5nLiAnYWxsJylcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvbk5hbWVzI2NhdGVnb3JpZXNcbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3JpZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogS2luZCBpcyB0aGUgc2VyaWFsaXplZCBraW5kIG9mIHRoZSByZXNvdXJjZS4gIEl0IGlzIG5vcm1hbGx5IENhbWVsQ2FzZSBhbmQgc2luZ3VsYXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25OYW1lcyNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3RLaW5kIGlzIHRoZSBzZXJpYWxpemVkIGtpbmQgb2YgdGhlIGxpc3QgZm9yIHRoaXMgcmVzb3VyY2UuICBEZWZhdWx0cyB0byA8a2luZD5MaXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBraW5kPkxpc3QuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25OYW1lcyNsaXN0S2luZFxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdEtpbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsdXJhbCBpcyB0aGUgcGx1cmFsIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIHNlcnZlLiAgSXQgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uLXJlZ2lzdHJhdGlvbiB0b286IHBsdXJhbC5ncm91cCBhbmQgaXQgbXVzdCBiZSBhbGwgbG93ZXJjYXNlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTmFtZXMjcGx1cmFsXG4gICAqL1xuICByZWFkb25seSBwbHVyYWw6IHN0cmluZztcblxuICAvKipcbiAgICogU2hvcnROYW1lcyBhcmUgc2hvcnQgbmFtZXMgZm9yIHRoZSByZXNvdXJjZS4gIEl0IG11c3QgYmUgYWxsIGxvd2VyY2FzZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvbk5hbWVzI3Nob3J0TmFtZXNcbiAgICovXG4gIHJlYWRvbmx5IHNob3J0TmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2luZ3VsYXIgaXMgdGhlIHNpbmd1bGFyIG5hbWUgb2YgdGhlIHJlc291cmNlLiAgSXQgbXVzdCBiZSBhbGwgbG93ZXJjYXNlICBEZWZhdWx0cyB0byBsb3dlcmNhc2VkIDxraW5kPlxuICAgKlxuICAgKiBAZGVmYXVsdCBsb3dlcmNhc2VkIDxraW5kPlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uTmFtZXMjc2luZ3VsYXJcbiAgICovXG4gIHJlYWRvbmx5IHNpbmd1bGFyPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZXMgZGVmaW5lcyB0aGUgc3RhdHVzIGFuZCBzY2FsZSBzdWJyZXNvdXJjZXMgZm9yIEN1c3RvbVJlc291cmNlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21SZXNvdXJjZVN1YnJlc291cmNlcyB7XG4gIC8qKlxuICAgKiBTY2FsZSBkZW5vdGVzIHRoZSBzY2FsZSBzdWJyZXNvdXJjZSBmb3IgQ3VzdG9tUmVzb3VyY2VzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZVN1YnJlc291cmNlcyNzY2FsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGU/OiBDdXN0b21SZXNvdXJjZVN1YnJlc291cmNlU2NhbGU7XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBkZW5vdGVzIHRoZSBzdGF0dXMgc3VicmVzb3VyY2UgZm9yIEN1c3RvbVJlc291cmNlc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZXMjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBhbnk7XG5cbn1cblxuLyoqXG4gKiBDdXN0b21SZXNvdXJjZVZhbGlkYXRpb24gaXMgYSBsaXN0IG9mIHZhbGlkYXRpb24gbWV0aG9kcyBmb3IgQ3VzdG9tUmVzb3VyY2VzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZVZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21SZXNvdXJjZVZhbGlkYXRpb24ge1xuICAvKipcbiAgICogT3BlbkFQSVYzU2NoZW1hIGlzIHRoZSBPcGVuQVBJIHYzIHNjaGVtYSB0byBiZSB2YWxpZGF0ZWQgYWdhaW5zdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlVmFsaWRhdGlvbiNvcGVuQVBJVjNTY2hlbWFcbiAgICovXG4gIHJlYWRvbmx5IG9wZW5BUElWM1NjaGVtYT86IEpzb25TY2hlbWFQcm9wcztcblxufVxuXG4vKipcbiAqIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvblZlcnNpb24gZGVzY3JpYmVzIGEgdmVyc2lvbiBmb3IgQ1JELlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25WZXJzaW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsUHJpbnRlckNvbHVtbnMgYXJlIGFkZGl0aW9uYWwgY29sdW1ucyBzaG93biBlLmcuIGluIGt1YmVjdGwgbmV4dCB0byB0aGUgbmFtZS4gRGVmYXVsdHMgdG8gYSBjcmVhdGVkLWF0IGNvbHVtbi4gVG9wLWxldmVsIGFuZCBwZXItdmVyc2lvbiBjb2x1bW5zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIFBlci12ZXJzaW9uIGNvbHVtbnMgbXVzdCBub3QgYWxsIGJlIHNldCB0byBpZGVudGljYWwgdmFsdWVzICh0b3AtbGV2ZWwgY29sdW1ucyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkKSBUaGlzIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGUgQ3VzdG9tUmVzb3VyY2VXZWJob29rQ29udmVyc2lvbiBmZWF0dXJlLiBOT1RFOiBDUkRzIGNyZWF0ZWQgcHJpb3IgdG8gMS4xMyBwb3B1bGF0ZWQgdGhlIHRvcC1sZXZlbCBhZGRpdGlvbmFsUHJpbnRlckNvbHVtbnMgZmllbGQgYnkgZGVmYXVsdC4gVG8gYXBwbHkgYW4gdXBkYXRlIHRoYXQgY2hhbmdlcyB0byBwZXItdmVyc2lvbiBhZGRpdGlvbmFsUHJpbnRlckNvbHVtbnMsIHRoZSB0b3AtbGV2ZWwgYWRkaXRpb25hbFByaW50ZXJDb2x1bW5zIGZpZWxkIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gbnVsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBhIGNyZWF0ZWQtYXQgY29sdW1uLiBUb3AtbGV2ZWwgYW5kIHBlci12ZXJzaW9uIGNvbHVtbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gUGVyLXZlcnNpb24gY29sdW1ucyBtdXN0IG5vdCBhbGwgYmUgc2V0IHRvIGlkZW50aWNhbCB2YWx1ZXMgKHRvcC1sZXZlbCBjb2x1bW5zIHNob3VsZCBiZSB1c2VkIGluc3RlYWQpIFRoaXMgZmllbGQgaXMgYWxwaGEtbGV2ZWwgYW5kIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlIHRoZSBDdXN0b21SZXNvdXJjZVdlYmhvb2tDb252ZXJzaW9uIGZlYXR1cmUuIE5PVEU6IENSRHMgY3JlYXRlZCBwcmlvciB0byAxLjEzIHBvcHVsYXRlZCB0aGUgdG9wLWxldmVsIGFkZGl0aW9uYWxQcmludGVyQ29sdW1ucyBmaWVsZCBieSBkZWZhdWx0LiBUbyBhcHBseSBhbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRvIHBlci12ZXJzaW9uIGFkZGl0aW9uYWxQcmludGVyQ29sdW1ucywgdGhlIHRvcC1sZXZlbCBhZGRpdGlvbmFsUHJpbnRlckNvbHVtbnMgZmllbGQgbXVzdCBiZSBleHBsaWNpdGx5IHNldCB0byBudWxsXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25WZXJzaW9uI2FkZGl0aW9uYWxQcmludGVyQ29sdW1uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFByaW50ZXJDb2x1bW5zPzogQ3VzdG9tUmVzb3VyY2VDb2x1bW5EZWZpbml0aW9uW107XG5cbiAgLyoqXG4gICAqIE5hbWUgaXMgdGhlIHZlcnNpb24gbmFtZSwgZS5nLiDigJx2MeKAnSwg4oCcdjJiZXRhMeKAnSwgZXRjLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uVmVyc2lvbiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjaGVtYSBkZXNjcmliZXMgdGhlIHNjaGVtYSBmb3IgQ3VzdG9tUmVzb3VyY2UgdXNlZCBpbiB2YWxpZGF0aW9uLCBwcnVuaW5nLCBhbmQgZGVmYXVsdGluZy4gVG9wLWxldmVsIGFuZCBwZXItdmVyc2lvbiBzY2hlbWFzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIFBlci12ZXJzaW9uIHNjaGVtYXMgbXVzdCBub3QgYWxsIGJlIHNldCB0byBpZGVudGljYWwgdmFsdWVzICh0b3AtbGV2ZWwgdmFsaWRhdGlvbiBzY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCkgVGhpcyBmaWVsZCBpcyBhbHBoYS1sZXZlbCBhbmQgaXMgb25seSBob25vcmVkIGJ5IHNlcnZlcnMgdGhhdCBlbmFibGUgdGhlIEN1c3RvbVJlc291cmNlV2ViaG9va0NvbnZlcnNpb24gZmVhdHVyZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblZlcnNpb24jc2NoZW1hXG4gICAqL1xuICByZWFkb25seSBzY2hlbWE/OiBDdXN0b21SZXNvdXJjZVZhbGlkYXRpb247XG5cbiAgLyoqXG4gICAqIFNlcnZlZCBpcyBhIGZsYWcgZW5hYmxpbmcvZGlzYWJsaW5nIHRoaXMgdmVyc2lvbiBmcm9tIGJlaW5nIHNlcnZlZCB2aWEgUkVTVCBBUElzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25WZXJzaW9uI3NlcnZlZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIGZsYWdzIHRoZSB2ZXJzaW9uIGFzIHN0b3JhZ2UgdmVyc2lvbi4gVGhlcmUgbXVzdCBiZSBleGFjdGx5IG9uZSBmbGFnZ2VkIGFzIHN0b3JhZ2UgdmVyc2lvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlRGVmaW5pdGlvblZlcnNpb24jc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3VicmVzb3VyY2VzIGRlc2NyaWJlcyB0aGUgc3VicmVzb3VyY2VzIGZvciBDdXN0b21SZXNvdXJjZSBUb3AtbGV2ZWwgYW5kIHBlci12ZXJzaW9uIHN1YnJlc291cmNlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBQZXItdmVyc2lvbiBzdWJyZXNvdXJjZXMgbXVzdCBub3QgYWxsIGJlIHNldCB0byBpZGVudGljYWwgdmFsdWVzICh0b3AtbGV2ZWwgc3VicmVzb3VyY2VzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQpIFRoaXMgZmllbGQgaXMgYWxwaGEtbGV2ZWwgYW5kIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlIHRoZSBDdXN0b21SZXNvdXJjZVdlYmhvb2tDb252ZXJzaW9uIGZlYXR1cmUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZURlZmluaXRpb25WZXJzaW9uI3N1YnJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgc3VicmVzb3VyY2VzPzogQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZXM7XG5cbn1cblxuLyoqXG4gKiBTdGF0dXNDYXVzZSBwcm92aWRlcyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwaS5TdGF0dXMgZmFpbHVyZSwgaW5jbHVkaW5nIGNhc2VzIHdoZW4gbXVsdGlwbGUgZXJyb3JzIGFyZSBlbmNvdW50ZXJlZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNDYXVzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0NhdXNlIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBoYXMgY2F1c2VkIHRoaXMgZXJyb3IsIGFzIG5hbWVkIGJ5IGl0cyBKU09OIHNlcmlhbGl6YXRpb24uIE1heSBpbmNsdWRlIGRvdCBhbmQgcG9zdGZpeCBub3RhdGlvbiBmb3IgbmVzdGVkIGF0dHJpYnV0ZXMuIEFycmF5cyBhcmUgemVyby1pbmRleGVkLiAgRmllbGRzIG1heSBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gYW4gYXJyYXkgb2YgY2F1c2VzIGR1ZSB0byBmaWVsZHMgaGF2aW5nIG11bHRpcGxlIGVycm9ycy4gT3B0aW9uYWwuXG5cbkV4YW1wbGVzOlxuICBcIm5hbWVcIiAtIHRoZSBmaWVsZCBcIm5hbWVcIiBvbiB0aGUgY3VycmVudCByZXNvdXJjZVxuICBcIml0ZW1zWzBdLm5hbWVcIiAtIHRoZSBmaWVsZCBcIm5hbWVcIiBvbiB0aGUgZmlyc3QgYXJyYXkgZW50cnkgaW4gXCJpdGVtc1wiXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlN0YXR1c0NhdXNlI2ZpZWxkXG4gICAqL1xuICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yLiAgVGhpcyBmaWVsZCBtYXkgYmUgcHJlc2VudGVkIGFzLWlzIHRvIGEgcmVhZGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5TdGF0dXNDYXVzZSNtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1hY2hpbmUtcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4gSWYgdGhpcyB2YWx1ZSBpcyBlbXB0eSB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlN0YXR1c0NhdXNlI3JlYXNvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogU2VydmljZVJlZmVyZW5jZSBob2xkcyBhIHJlZmVyZW5jZSB0byBTZXJ2aWNlLmxlZ2FjeS5rOHMuaW9cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuU2VydmljZVJlZmVyZW5jZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VSZWZlcmVuY2Uge1xuICAvKipcbiAgICogYG5hbWVgIGlzIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLiBSZXF1aXJlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuU2VydmljZVJlZmVyZW5jZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGBuYW1lc3BhY2VgIGlzIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHNlcnZpY2UuIFJlcXVpcmVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hZG1pc3Npb25yZWdpc3RyYXRpb24udjFiZXRhMS5TZXJ2aWNlUmVmZXJlbmNlI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGBwYXRoYCBpcyBhbiBvcHRpb25hbCBVUkwgcGF0aCB3aGljaCB3aWxsIGJlIHNlbnQgaW4gYW55IHJlcXVlc3QgdG8gdGhpcyBzZXJ2aWNlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYWRtaXNzaW9ucmVnaXN0cmF0aW9uLnYxYmV0YTEuU2VydmljZVJlZmVyZW5jZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBwb3J0IG9uIHRoZSBzZXJ2aWNlIHRoYXQgaG9zdGluZyB3ZWJob29rLiBEZWZhdWx0IHRvIDQ0MyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gYHBvcnRgIHNob3VsZCBiZSBhIHZhbGlkIHBvcnQgbnVtYmVyICgxLTY1NTM1LCBpbmNsdXNpdmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCA0NDMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIGBwb3J0YCBzaG91bGQgYmUgYSB2YWxpZCBwb3J0IG51bWJlciAoMS02NTUzNSwgaW5jbHVzaXZlKS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFkbWlzc2lvbnJlZ2lzdHJhdGlvbi52MWJldGExLlNlcnZpY2VSZWZlcmVuY2UjcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIEluaXRpYWxpemVyIGlzIGluZm9ybWF0aW9uIGFib3V0IGFuIGluaXRpYWxpemVyIHRoYXQgaGFzIG5vdCB5ZXQgY29tcGxldGVkLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkluaXRpYWxpemVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZXIge1xuICAvKipcbiAgICogbmFtZSBvZiB0aGUgcHJvY2VzcyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhpcyBvYmplY3QuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkluaXRpYWxpemVyI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIEEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3JSZXF1aXJlbWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2VsZWN0b3JSZXF1aXJlbWVudCB7XG4gIC8qKlxuICAgKiBrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MYWJlbFNlbGVjdG9yUmVxdWlyZW1lbnQja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogb3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGFiZWxTZWxlY3RvclJlcXVpcmVtZW50I29wZXJhdG9yXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGFiZWxTZWxlY3RvclJlcXVpcmVtZW50I3ZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzPzogc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBTcGVjIHRvIGNvbnRyb2wgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YgZGFlbW9uIHNldCByb2xsaW5nIHVwZGF0ZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuZXh0ZW5zaW9ucy52MWJldGExLlJvbGxpbmdVcGRhdGVEYWVtb25TZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xsaW5nVXBkYXRlRGFlbW9uU2V0IHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBEYWVtb25TZXQgcG9kcyB0aGF0IGNhbiBiZSB1bmF2YWlsYWJsZSBkdXJpbmcgdGhlIHVwZGF0ZS4gVmFsdWUgY2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZXg6IDUpIG9yIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBudW1iZXIgb2YgRGFlbW9uU2V0IHBvZHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSB1cGRhdGUgKGV4OiAxMCUpLiBBYnNvbHV0ZSBudW1iZXIgaXMgY2FsY3VsYXRlZCBmcm9tIHBlcmNlbnRhZ2UgYnkgcm91bmRpbmcgdXAuIFRoaXMgY2Fubm90IGJlIDAuIERlZmF1bHQgdmFsdWUgaXMgMS4gRXhhbXBsZTogd2hlbiB0aGlzIGlzIHNldCB0byAzMCUsIGF0IG1vc3QgMzAlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgdGhhdCBzaG91bGQgYmUgcnVubmluZyB0aGUgZGFlbW9uIHBvZCAoaS5lLiBzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCkgY2FuIGhhdmUgdGhlaXIgcG9kcyBzdG9wcGVkIGZvciBhbiB1cGRhdGUgYXQgYW55IGdpdmVuIHRpbWUuIFRoZSB1cGRhdGUgc3RhcnRzIGJ5IHN0b3BwaW5nIGF0IG1vc3QgMzAlIG9mIHRob3NlIERhZW1vblNldCBwb2RzIGFuZCB0aGVuIGJyaW5ncyB1cCBuZXcgRGFlbW9uU2V0IHBvZHMgaW4gdGhlaXIgcGxhY2UuIE9uY2UgdGhlIG5ldyBwb2RzIGFyZSBhdmFpbGFibGUsIGl0IHRoZW4gcHJvY2VlZHMgb250byBvdGhlciBEYWVtb25TZXQgcG9kcywgdGh1cyBlbnN1cmluZyB0aGF0IGF0IGxlYXN0IDcwJSBvZiBvcmlnaW5hbCBudW1iZXIgb2YgRGFlbW9uU2V0IHBvZHMgYXJlIGF2YWlsYWJsZSBhdCBhbGwgdGltZXMgZHVyaW5nIHRoZSB1cGRhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5leHRlbnNpb25zLnYxYmV0YTEuUm9sbGluZ1VwZGF0ZURhZW1vblNldCNtYXhVbmF2YWlsYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VW5hdmFpbGFibGU/OiBJbnRPclN0cmluZztcblxufVxuXG4vKipcbiAqIFNwZWMgdG8gY29udHJvbCB0aGUgZGVzaXJlZCBiZWhhdmlvciBvZiByb2xsaW5nIHVwZGF0ZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJvbGxpbmdVcGRhdGVEZXBsb3ltZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sbGluZ1VwZGF0ZURlcGxveW1lbnQge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvZHMgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIGFib3ZlIHRoZSBkZXNpcmVkIG51bWJlciBvZiBwb2RzLiBWYWx1ZSBjYW4gYmUgYW4gYWJzb2x1dGUgbnVtYmVyIChleDogNSkgb3IgYSBwZXJjZW50YWdlIG9mIGRlc2lyZWQgcG9kcyAoZXg6IDEwJSkuIFRoaXMgY2FuIG5vdCBiZSAwIGlmIE1heFVuYXZhaWxhYmxlIGlzIDAuIEFic29sdXRlIG51bWJlciBpcyBjYWxjdWxhdGVkIGZyb20gcGVyY2VudGFnZSBieSByb3VuZGluZyB1cC4gRGVmYXVsdHMgdG8gMjUlLiBFeGFtcGxlOiB3aGVuIHRoaXMgaXMgc2V0IHRvIDMwJSwgdGhlIG5ldyBSZXBsaWNhU2V0IGNhbiBiZSBzY2FsZWQgdXAgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcm9sbGluZyB1cGRhdGUgc3RhcnRzLCBzdWNoIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBvbGQgYW5kIG5ldyBwb2RzIGRvIG5vdCBleGNlZWQgMTMwJSBvZiBkZXNpcmVkIHBvZHMuIE9uY2Ugb2xkIHBvZHMgaGF2ZSBiZWVuIGtpbGxlZCwgbmV3IFJlcGxpY2FTZXQgY2FuIGJlIHNjYWxlZCB1cCBmdXJ0aGVyLCBlbnN1cmluZyB0aGF0IHRvdGFsIG51bWJlciBvZiBwb2RzIHJ1bm5pbmcgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB1cGRhdGUgaXMgYXQgbW9zdCAxMzAlIG9mIGRlc2lyZWQgcG9kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMjUlLiBFeGFtcGxlOiB3aGVuIHRoaXMgaXMgc2V0IHRvIDMwJSwgdGhlIG5ldyBSZXBsaWNhU2V0IGNhbiBiZSBzY2FsZWQgdXAgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcm9sbGluZyB1cGRhdGUgc3RhcnRzLCBzdWNoIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBvbGQgYW5kIG5ldyBwb2RzIGRvIG5vdCBleGNlZWQgMTMwJSBvZiBkZXNpcmVkIHBvZHMuIE9uY2Ugb2xkIHBvZHMgaGF2ZSBiZWVuIGtpbGxlZCwgbmV3IFJlcGxpY2FTZXQgY2FuIGJlIHNjYWxlZCB1cCBmdXJ0aGVyLCBlbnN1cmluZyB0aGF0IHRvdGFsIG51bWJlciBvZiBwb2RzIHJ1bm5pbmcgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB1cGRhdGUgaXMgYXQgbW9zdCAxMzAlIG9mIGRlc2lyZWQgcG9kcy5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmFwcHMudjFiZXRhMi5Sb2xsaW5nVXBkYXRlRGVwbG95bWVudCNtYXhTdXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U3VyZ2U/OiBJbnRPclN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvZHMgdGhhdCBjYW4gYmUgdW5hdmFpbGFibGUgZHVyaW5nIHRoZSB1cGRhdGUuIFZhbHVlIGNhbiBiZSBhbiBhYnNvbHV0ZSBudW1iZXIgKGV4OiA1KSBvciBhIHBlcmNlbnRhZ2Ugb2YgZGVzaXJlZCBwb2RzIChleDogMTAlKS4gQWJzb2x1dGUgbnVtYmVyIGlzIGNhbGN1bGF0ZWQgZnJvbSBwZXJjZW50YWdlIGJ5IHJvdW5kaW5nIGRvd24uIFRoaXMgY2FuIG5vdCBiZSAwIGlmIE1heFN1cmdlIGlzIDAuIERlZmF1bHRzIHRvIDI1JS4gRXhhbXBsZTogd2hlbiB0aGlzIGlzIHNldCB0byAzMCUsIHRoZSBvbGQgUmVwbGljYVNldCBjYW4gYmUgc2NhbGVkIGRvd24gdG8gNzAlIG9mIGRlc2lyZWQgcG9kcyBpbW1lZGlhdGVseSB3aGVuIHRoZSByb2xsaW5nIHVwZGF0ZSBzdGFydHMuIE9uY2UgbmV3IHBvZHMgYXJlIHJlYWR5LCBvbGQgUmVwbGljYVNldCBjYW4gYmUgc2NhbGVkIGRvd24gZnVydGhlciwgZm9sbG93ZWQgYnkgc2NhbGluZyB1cCB0aGUgbmV3IFJlcGxpY2FTZXQsIGVuc3VyaW5nIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwb2RzIGF2YWlsYWJsZSBhdCBhbGwgdGltZXMgZHVyaW5nIHRoZSB1cGRhdGUgaXMgYXQgbGVhc3QgNzAlIG9mIGRlc2lyZWQgcG9kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMjUlLiBFeGFtcGxlOiB3aGVuIHRoaXMgaXMgc2V0IHRvIDMwJSwgdGhlIG9sZCBSZXBsaWNhU2V0IGNhbiBiZSBzY2FsZWQgZG93biB0byA3MCUgb2YgZGVzaXJlZCBwb2RzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHJvbGxpbmcgdXBkYXRlIHN0YXJ0cy4gT25jZSBuZXcgcG9kcyBhcmUgcmVhZHksIG9sZCBSZXBsaWNhU2V0IGNhbiBiZSBzY2FsZWQgZG93biBmdXJ0aGVyLCBmb2xsb3dlZCBieSBzY2FsaW5nIHVwIHRoZSBuZXcgUmVwbGljYVNldCwgZW5zdXJpbmcgdGhhdCB0aGUgdG90YWwgbnVtYmVyIG9mIHBvZHMgYXZhaWxhYmxlIGF0IGFsbCB0aW1lcyBkdXJpbmcgdGhlIHVwZGF0ZSBpcyBhdCBsZWFzdCA3MCUgb2YgZGVzaXJlZCBwb2RzLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJvbGxpbmdVcGRhdGVEZXBsb3ltZW50I21heFVuYXZhaWxhYmxlXG4gICAqL1xuICByZWFkb25seSBtYXhVbmF2YWlsYWJsZT86IEludE9yU3RyaW5nO1xuXG59XG5cbi8qKlxuICogUm9sbGluZ1VwZGF0ZVN0YXRlZnVsU2V0U3RyYXRlZ3kgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSBwYXJhbWV0ZXIgZm9yIFJvbGxpbmdVcGRhdGVTdGF0ZWZ1bFNldFN0cmF0ZWd5VHlwZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXBwcy52MWJldGEyLlJvbGxpbmdVcGRhdGVTdGF0ZWZ1bFNldFN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sbGluZ1VwZGF0ZVN0YXRlZnVsU2V0U3RyYXRlZ3kge1xuICAvKipcbiAgICogUGFydGl0aW9uIGluZGljYXRlcyB0aGUgb3JkaW5hbCBhdCB3aGljaCB0aGUgU3RhdGVmdWxTZXQgc2hvdWxkIGJlIHBhcnRpdGlvbmVkLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hcHBzLnYxYmV0YTIuUm9sbGluZ1VwZGF0ZVN0YXRlZnVsU2V0U3RyYXRlZ3kjcGFydGl0aW9uXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb24/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBXZWJob29rVGhyb3R0bGVDb25maWcgaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRocm90dGxpbmcgZXZlbnRzXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLldlYmhvb2tUaHJvdHRsZUNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tUaHJvdHRsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaHJvdHRsZUJ1cnN0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBldmVudHMgc2VudCBhdCB0aGUgc2FtZSBtb21lbnQgZGVmYXVsdCAxNSBRUFNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1ZGl0cmVnaXN0cmF0aW9uLnYxYWxwaGExLldlYmhvb2tUaHJvdHRsZUNvbmZpZyNidXJzdFxuICAgKi9cbiAgcmVhZG9ubHkgYnVyc3Q/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRocm90dGxlUVBTIG1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgcGVyIHNlY29uZCBkZWZhdWx0IDEwIFFQU1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXVkaXRyZWdpc3RyYXRpb24udjFhbHBoYTEuV2ViaG9va1Rocm90dGxlQ29uZmlnI3Fwc1xuICAgKi9cbiAgcmVhZG9ubHkgcXBzPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogRXh0ZXJuYWxNZXRyaWNTb3VyY2UgaW5kaWNhdGVzIGhvdyB0byBzY2FsZSBvbiBhIG1ldHJpYyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBLdWJlcm5ldGVzIG9iamVjdCAoZm9yIGV4YW1wbGUgbGVuZ3RoIG9mIHF1ZXVlIGluIGNsb3VkIG1lc3NhZ2luZyBzZXJ2aWNlLCBvciBRUFMgZnJvbSBsb2FkYmFsYW5jZXIgcnVubmluZyBvdXRzaWRlIG9mIGNsdXN0ZXIpLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLkV4dGVybmFsTWV0cmljU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxNZXRyaWNTb3VyY2Uge1xuICAvKipcbiAgICogbWV0cmljIGlkZW50aWZpZXMgdGhlIHRhcmdldCBtZXRyaWMgYnkgbmFtZSBhbmQgc2VsZWN0b3JcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuRXh0ZXJuYWxNZXRyaWNTb3VyY2UjbWV0cmljXG4gICAqL1xuICByZWFkb25seSBtZXRyaWM6IE1ldHJpY0lkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIHRhcmdldCBzcGVjaWZpZXMgdGhlIHRhcmdldCB2YWx1ZSBmb3IgdGhlIGdpdmVuIG1ldHJpY1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5FeHRlcm5hbE1ldHJpY1NvdXJjZSN0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogTWV0cmljVGFyZ2V0O1xuXG59XG5cbi8qKlxuICogT2JqZWN0TWV0cmljU291cmNlIGluZGljYXRlcyBob3cgdG8gc2NhbGUgb24gYSBtZXRyaWMgZGVzY3JpYmluZyBhIGt1YmVybmV0ZXMgb2JqZWN0IChmb3IgZXhhbXBsZSwgaGl0cy1wZXItc2Vjb25kIG9uIGFuIEluZ3Jlc3Mgb2JqZWN0KS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5PYmplY3RNZXRyaWNTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RNZXRyaWNTb3VyY2Uge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuT2JqZWN0TWV0cmljU291cmNlI2Rlc2NyaWJlZE9iamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpYmVkT2JqZWN0OiBDcm9zc1ZlcnNpb25PYmplY3RSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIG1ldHJpYyBpZGVudGlmaWVzIHRoZSB0YXJnZXQgbWV0cmljIGJ5IG5hbWUgYW5kIHNlbGVjdG9yXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk9iamVjdE1ldHJpY1NvdXJjZSNtZXRyaWNcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpYzogTWV0cmljSWRlbnRpZmllcjtcblxuICAvKipcbiAgICogdGFyZ2V0IHNwZWNpZmllcyB0aGUgdGFyZ2V0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gbWV0cmljXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk9iamVjdE1ldHJpY1NvdXJjZSN0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogTWV0cmljVGFyZ2V0O1xuXG59XG5cbi8qKlxuICogUG9kc01ldHJpY1NvdXJjZSBpbmRpY2F0ZXMgaG93IHRvIHNjYWxlIG9uIGEgbWV0cmljIGRlc2NyaWJpbmcgZWFjaCBwb2QgaW4gdGhlIGN1cnJlbnQgc2NhbGUgdGFyZ2V0IChmb3IgZXhhbXBsZSwgdHJhbnNhY3Rpb25zLXByb2Nlc3NlZC1wZXItc2Vjb25kKS4gVGhlIHZhbHVlcyB3aWxsIGJlIGF2ZXJhZ2VkIHRvZ2V0aGVyIGJlZm9yZSBiZWluZyBjb21wYXJlZCB0byB0aGUgdGFyZ2V0IHZhbHVlLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLlBvZHNNZXRyaWNTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2RzTWV0cmljU291cmNlIHtcbiAgLyoqXG4gICAqIG1ldHJpYyBpZGVudGlmaWVzIHRoZSB0YXJnZXQgbWV0cmljIGJ5IG5hbWUgYW5kIHNlbGVjdG9yXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLlBvZHNNZXRyaWNTb3VyY2UjbWV0cmljXG4gICAqL1xuICByZWFkb25seSBtZXRyaWM6IE1ldHJpY0lkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIHRhcmdldCBzcGVjaWZpZXMgdGhlIHRhcmdldCB2YWx1ZSBmb3IgdGhlIGdpdmVuIG1ldHJpY1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5Qb2RzTWV0cmljU291cmNlI3RhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBNZXRyaWNUYXJnZXQ7XG5cbn1cblxuLyoqXG4gKiBSZXNvdXJjZU1ldHJpY1NvdXJjZSBpbmRpY2F0ZXMgaG93IHRvIHNjYWxlIG9uIGEgcmVzb3VyY2UgbWV0cmljIGtub3duIHRvIEt1YmVybmV0ZXMsIGFzIHNwZWNpZmllZCBpbiByZXF1ZXN0cyBhbmQgbGltaXRzLCBkZXNjcmliaW5nIGVhY2ggcG9kIGluIHRoZSBjdXJyZW50IHNjYWxlIHRhcmdldCAoZS5nLiBDUFUgb3IgbWVtb3J5KS4gIFRoZSB2YWx1ZXMgd2lsbCBiZSBhdmVyYWdlZCB0b2dldGhlciBiZWZvcmUgYmVpbmcgY29tcGFyZWQgdG8gdGhlIHRhcmdldC4gIFN1Y2ggbWV0cmljcyBhcmUgYnVpbHQgaW4gdG8gS3ViZXJuZXRlcywgYW5kIGhhdmUgc3BlY2lhbCBzY2FsaW5nIG9wdGlvbnMgb24gdG9wIG9mIHRob3NlIGF2YWlsYWJsZSB0byBub3JtYWwgcGVyLXBvZCBtZXRyaWNzIHVzaW5nIHRoZSBcInBvZHNcIiBzb3VyY2UuICBPbmx5IG9uZSBcInRhcmdldFwiIHR5cGUgc2hvdWxkIGJlIHNldC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5SZXNvdXJjZU1ldHJpY1NvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlTWV0cmljU291cmNlIHtcbiAgLyoqXG4gICAqIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIGluIHF1ZXN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5SZXNvdXJjZU1ldHJpY1NvdXJjZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRhcmdldCBzcGVjaWZpZXMgdGhlIHRhcmdldCB2YWx1ZSBmb3IgdGhlIGdpdmVuIG1ldHJpY1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5SZXNvdXJjZU1ldHJpY1NvdXJjZSN0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogTWV0cmljVGFyZ2V0O1xuXG59XG5cbi8qKlxuICogQ29uZmlnTWFwTm9kZUNvbmZpZ1NvdXJjZSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdG8gcmVmZXJlbmNlIGEgQ29uZmlnTWFwIGFzIGEgY29uZmlnIHNvdXJjZSBmb3IgdGhlIE5vZGUuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwTm9kZUNvbmZpZ1NvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ01hcE5vZGVDb25maWdTb3VyY2Uge1xuICAvKipcbiAgICogS3ViZWxldENvbmZpZ0tleSBkZWNsYXJlcyB3aGljaCBrZXkgb2YgdGhlIHJlZmVyZW5jZWQgQ29uZmlnTWFwIGNvcnJlc3BvbmRzIHRvIHRoZSBLdWJlbGV0Q29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgVGhpcyBmaWVsZCBpcyByZXF1aXJlZCBpbiBhbGwgY2FzZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcE5vZGVDb25maWdTb3VyY2Uja3ViZWxldENvbmZpZ0tleVxuICAgKi9cbiAgcmVhZG9ubHkga3ViZWxldENvbmZpZ0tleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIGlzIHRoZSBtZXRhZGF0YS5uYW1lIG9mIHRoZSByZWZlcmVuY2VkIENvbmZpZ01hcC4gVGhpcyBmaWVsZCBpcyByZXF1aXJlZCBpbiBhbGwgY2FzZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcE5vZGVDb25maWdTb3VyY2UjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2UgaXMgdGhlIG1ldGFkYXRhLm5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNlZCBDb25maWdNYXAuIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQgaW4gYWxsIGNhc2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBOb2RlQ29uZmlnU291cmNlI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlVmVyc2lvbiBpcyB0aGUgbWV0YWRhdGEuUmVzb3VyY2VWZXJzaW9uIG9mIHRoZSByZWZlcmVuY2VkIENvbmZpZ01hcC4gVGhpcyBmaWVsZCBpcyBmb3JiaWRkZW4gaW4gTm9kZS5TcGVjLCBhbmQgcmVxdWlyZWQgaW4gTm9kZS5TdGF0dXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcE5vZGVDb25maWdTb3VyY2UjcmVzb3VyY2VWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVJRCBpcyB0aGUgbWV0YWRhdGEuVUlEIG9mIHRoZSByZWZlcmVuY2VkIENvbmZpZ01hcC4gVGhpcyBmaWVsZCBpcyBmb3JiaWRkZW4gaW4gTm9kZS5TcGVjLCBhbmQgcmVxdWlyZWQgaW4gTm9kZS5TdGF0dXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcE5vZGVDb25maWdTb3VyY2UjdWlkXG4gICAqL1xuICByZWFkb25seSB1aWQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTZWNyZXRSZWZlcmVuY2UgcmVwcmVzZW50cyBhIFNlY3JldCBSZWZlcmVuY2UuIEl0IGhhcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcmV0cmlldmUgc2VjcmV0IGluIGFueSBuYW1lc3BhY2VcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRSZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZWZlcmVuY2Uge1xuICAvKipcbiAgICogTmFtZSBpcyB1bmlxdWUgd2l0aGluIGEgbmFtZXNwYWNlIHRvIHJlZmVyZW5jZSBhIHNlY3JldCByZXNvdXJjZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0UmVmZXJlbmNlI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZSBkZWZpbmVzIHRoZSBzcGFjZSB3aXRoaW4gd2hpY2ggdGhlIHNlY3JldCBuYW1lIG11c3QgYmUgdW5pcXVlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRSZWZlcmVuY2UjbmFtZXNwYWNlXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBBIG5vZGUgc2VsZWN0b3IgcmVwcmVzZW50cyB0aGUgdW5pb24gb2YgdGhlIHJlc3VsdHMgb2Ygb25lIG9yIG1vcmUgbGFiZWwgcXVlcmllcyBvdmVyIGEgc2V0IG9mIG5vZGVzOyB0aGF0IGlzLCBpdCByZXByZXNlbnRzIHRoZSBPUiBvZiB0aGUgc2VsZWN0b3JzIHJlcHJlc2VudGVkIGJ5IHRoZSBub2RlIHNlbGVjdG9yIHRlcm1zLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVTZWxlY3RvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZVNlbGVjdG9yI25vZGVTZWxlY3RvclRlcm1zXG4gICAqL1xuICByZWFkb25seSBub2RlU2VsZWN0b3JUZXJtczogTm9kZVNlbGVjdG9yVGVybVtdO1xuXG59XG5cbi8qKlxuICogTm9kZSBhZmZpbml0eSBpcyBhIGdyb3VwIG9mIG5vZGUgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlQWZmaW5pdHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlQWZmaW5pdHkge1xuICAvKipcbiAgICogVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlIGEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpcyBtb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuIGZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZSByZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWF0Y2hFeHByZXNzaW9uczsgdGhlIG5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZUFmZmluaXR5I3ByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uXG4gICAqL1xuICByZWFkb25seSBwcmVmZXJyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbj86IFByZWZlcnJlZFNjaGVkdWxpbmdUZXJtW107XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhbiB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZUFmZmluaXR5I3JlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24/OiBOb2RlU2VsZWN0b3I7XG5cbn1cblxuLyoqXG4gKiBQb2QgYWZmaW5pdHkgaXMgYSBncm91cCBvZiBpbnRlciBwb2QgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RBZmZpbml0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZEFmZmluaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlZHVsZXIgd2lsbCBwcmVmZXIgdG8gc2NoZWR1bGUgcG9kcyB0byBub2RlcyB0aGF0IHNhdGlzZnkgdGhlIGFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZSBhIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXMgbW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLiBmb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2UgcmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFmZmluaXR5IGV4cHJlc3Npb25zLCBldGMuKSwgY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgYWRkaW5nIFwid2VpZ2h0XCIgdG8gdGhlIHN1bSBpZiB0aGUgbm9kZSBoYXMgcG9kcyB3aGljaCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybTsgdGhlIG5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kQWZmaW5pdHkjcHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uPzogV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm1bXTtcblxuICAvKipcbiAgICogSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kQWZmaW5pdHkjcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbj86IFBvZEFmZmluaXR5VGVybVtdO1xuXG59XG5cbi8qKlxuICogUG9kIGFudGkgYWZmaW5pdHkgaXMgYSBncm91cCBvZiBpbnRlciBwb2QgYW50aSBhZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEFudGlBZmZpbml0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZEFudGlBZmZpbml0eSB7XG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZSBhIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXMgbW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLiBmb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2UgcmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qb2RBbnRpQWZmaW5pdHkjcHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uPzogV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm1bXTtcblxuICAvKipcbiAgICogSWYgdGhlIGFudGktYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0IHNjaGVkdWxpbmcgdGltZSwgdGhlIHBvZCB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgb250byB0aGUgbm9kZS4gSWYgdGhlIGFudGktYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhIHBvZCBsYWJlbCB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4gV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMsIHRoZSBsaXN0cyBvZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcG9kQWZmaW5pdHlUZXJtIGFyZSBpbnRlcnNlY3RlZCwgaS5lLiBhbGwgdGVybXMgbXVzdCBiZSBzYXRpc2ZpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEFudGlBZmZpbml0eSNyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uPzogUG9kQWZmaW5pdHlUZXJtW107XG5cbn1cblxuLyoqXG4gKiBMaWZlY3ljbGUgZGVzY3JpYmVzIGFjdGlvbnMgdGhhdCB0aGUgbWFuYWdlbWVudCBzeXN0ZW0gc2hvdWxkIHRha2UgaW4gcmVzcG9uc2UgdG8gY29udGFpbmVyIGxpZmVjeWNsZSBldmVudHMuIEZvciB0aGUgUG9zdFN0YXJ0IGFuZCBQcmVTdG9wIGxpZmVjeWNsZSBoYW5kbGVycywgbWFuYWdlbWVudCBvZiB0aGUgY29udGFpbmVyIGJsb2NrcyB1bnRpbCB0aGUgYWN0aW9uIGlzIGNvbXBsZXRlLCB1bmxlc3MgdGhlIGNvbnRhaW5lciBwcm9jZXNzIGZhaWxzLCBpbiB3aGljaCBjYXNlIHRoZSBoYW5kbGVyIGlzIGFib3J0ZWQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGlmZWN5Y2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlmZWN5Y2xlIHtcbiAgLyoqXG4gICAqIFBvc3RTdGFydCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjb250YWluZXIgaXMgY3JlYXRlZC4gSWYgdGhlIGhhbmRsZXIgZmFpbHMsIHRoZSBjb250YWluZXIgaXMgdGVybWluYXRlZCBhbmQgcmVzdGFydGVkIGFjY29yZGluZyB0byBpdHMgcmVzdGFydCBwb2xpY3kuIE90aGVyIG1hbmFnZW1lbnQgb2YgdGhlIGNvbnRhaW5lciBibG9ja3MgdW50aWwgdGhlIGhvb2sgY29tcGxldGVzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbnRhaW5lcnMvY29udGFpbmVyLWxpZmVjeWNsZS1ob29rcy8jY29udGFpbmVyLWhvb2tzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkxpZmVjeWNsZSNwb3N0U3RhcnRcbiAgICovXG4gIHJlYWRvbmx5IHBvc3RTdGFydD86IEhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIFByZVN0b3AgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBhIGNvbnRhaW5lciBpcyB0ZXJtaW5hdGVkIGR1ZSB0byBhbiBBUEkgcmVxdWVzdCBvciBtYW5hZ2VtZW50IGV2ZW50IHN1Y2ggYXMgbGl2ZW5lc3MgcHJvYmUgZmFpbHVyZSwgcHJlZW1wdGlvbiwgcmVzb3VyY2UgY29udGVudGlvbiwgZXRjLiBUaGUgaGFuZGxlciBpcyBub3QgY2FsbGVkIGlmIHRoZSBjb250YWluZXIgY3Jhc2hlcyBvciBleGl0cy4gVGhlIHJlYXNvbiBmb3IgdGVybWluYXRpb24gaXMgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUaGUgUG9kJ3MgdGVybWluYXRpb24gZ3JhY2UgcGVyaW9kIGNvdW50ZG93biBiZWdpbnMgYmVmb3JlIHRoZSBQcmVTdG9wIGhvb2tlZCBpcyBleGVjdXRlZC4gUmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiB0aGUgaGFuZGxlciwgdGhlIGNvbnRhaW5lciB3aWxsIGV2ZW50dWFsbHkgdGVybWluYXRlIHdpdGhpbiB0aGUgUG9kJ3MgdGVybWluYXRpb24gZ3JhY2UgcGVyaW9kLiBPdGhlciBtYW5hZ2VtZW50IG9mIHRoZSBjb250YWluZXIgYmxvY2tzIHVudGlsIHRoZSBob29rIGNvbXBsZXRlcyBvciB1bnRpbCB0aGUgdGVybWluYXRpb24gZ3JhY2UgcGVyaW9kIGlzIHJlYWNoZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29udGFpbmVycy9jb250YWluZXItbGlmZWN5Y2xlLWhvb2tzLyNjb250YWluZXItaG9va3NcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTGlmZWN5Y2xlI3ByZVN0b3BcbiAgICovXG4gIHJlYWRvbmx5IHByZVN0b3A/OiBIYW5kbGVyO1xuXG59XG5cbi8qKlxuICogUHJvYmUgZGVzY3JpYmVzIGEgaGVhbHRoIGNoZWNrIHRvIGJlIHBlcmZvcm1lZCBhZ2FpbnN0IGEgY29udGFpbmVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGFsaXZlIG9yIHJlYWR5IHRvIHJlY2VpdmUgdHJhZmZpYy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qcm9iZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlIHtcbiAgLyoqXG4gICAqIE9uZSBhbmQgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgc3BlY2lmaWVkLiBFeGVjIHNwZWNpZmllcyB0aGUgYWN0aW9uIHRvIHRha2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlByb2JlI2V4ZWNcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM/OiBFeGVjQWN0aW9uO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvbnNlY3V0aXZlIGZhaWx1cmVzIGZvciB0aGUgcHJvYmUgdG8gYmUgY29uc2lkZXJlZCBmYWlsZWQgYWZ0ZXIgaGF2aW5nIHN1Y2NlZWRlZC4gRGVmYXVsdHMgdG8gMy4gTWluaW11bSB2YWx1ZSBpcyAxLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzLiBNaW5pbXVtIHZhbHVlIGlzIDEuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlByb2JlI2ZhaWx1cmVUaHJlc2hvbGRcbiAgICovXG4gIHJlYWRvbmx5IGZhaWx1cmVUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhUVFBHZXQgc3BlY2lmaWVzIHRoZSBodHRwIHJlcXVlc3QgdG8gcGVyZm9ybS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJvYmUjaHR0cEdldFxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEdldD86IEh0dHBHZXRBY3Rpb247XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHRoZSBjb250YWluZXIgaGFzIHN0YXJ0ZWQgYmVmb3JlIGxpdmVuZXNzIHByb2JlcyBhcmUgaW5pdGlhdGVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3dvcmtsb2Fkcy9wb2RzL3BvZC1saWZlY3ljbGUjY29udGFpbmVyLXByb2Jlc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qcm9iZSNpbml0aWFsRGVsYXlTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBpbml0aWFsRGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gKGluIHNlY29uZHMpIHRvIHBlcmZvcm0gdGhlIHByb2JlLiBEZWZhdWx0IHRvIDEwIHNlY29uZHMuIE1pbmltdW0gdmFsdWUgaXMgMS5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAgc2Vjb25kcy4gTWluaW11bSB2YWx1ZSBpcyAxLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qcm9iZSNwZXJpb2RTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBwZXJpb2RTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvbnNlY3V0aXZlIHN1Y2Nlc3NlcyBmb3IgdGhlIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBhZnRlciBoYXZpbmcgZmFpbGVkLiBEZWZhdWx0cyB0byAxLiBNdXN0IGJlIDEgZm9yIGxpdmVuZXNzLiBNaW5pbXVtIHZhbHVlIGlzIDEuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEuIE11c3QgYmUgMSBmb3IgbGl2ZW5lc3MuIE1pbmltdW0gdmFsdWUgaXMgMS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJvYmUjc3VjY2Vzc1RocmVzaG9sZFxuICAgKi9cbiAgcmVhZG9ubHkgc3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogVENQU29ja2V0IHNwZWNpZmllcyBhbiBhY3Rpb24gaW52b2x2aW5nIGEgVENQIHBvcnQuIFRDUCBob29rcyBub3QgeWV0IHN1cHBvcnRlZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qcm9iZSN0Y3BTb2NrZXRcbiAgICovXG4gIHJlYWRvbmx5IHRjcFNvY2tldD86IFRjcFNvY2tldEFjdGlvbjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHByb2JlIHRpbWVzIG91dC4gRGVmYXVsdHMgdG8gMSBzZWNvbmQuIE1pbmltdW0gdmFsdWUgaXMgMS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvcG9kcy9wb2QtbGlmZWN5Y2xlI2NvbnRhaW5lci1wcm9iZXNcbiAgICpcbiAgICogQGRlZmF1bHQgMSBzZWNvbmQuIE1pbmltdW0gdmFsdWUgaXMgMS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvcG9kcy9wb2QtbGlmZWN5Y2xlI2NvbnRhaW5lci1wcm9iZXNcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJvYmUjdGltZW91dFNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQ29udGFpbmVyUG9ydCByZXByZXNlbnRzIGEgbmV0d29yayBwb3J0IGluIGEgc2luZ2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXJQb3J0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyUG9ydCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcG9ydCB0byBleHBvc2Ugb24gdGhlIHBvZCdzIElQIGFkZHJlc3MuIFRoaXMgbXVzdCBiZSBhIHZhbGlkIHBvcnQgbnVtYmVyLCAwIDwgeCA8IDY1NTM2LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXJQb3J0I2NvbnRhaW5lclBvcnRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hhdCBob3N0IElQIHRvIGJpbmQgdGhlIGV4dGVybmFsIHBvcnQgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lclBvcnQjaG9zdElQXG4gICAqL1xuICByZWFkb25seSBob3N0SVA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBwb3J0IHRvIGV4cG9zZSBvbiB0aGUgaG9zdC4gSWYgc3BlY2lmaWVkLCB0aGlzIG11c3QgYmUgYSB2YWxpZCBwb3J0IG51bWJlciwgMCA8IHggPCA2NTUzNi4gSWYgSG9zdE5ldHdvcmsgaXMgc3BlY2lmaWVkLCB0aGlzIG11c3QgbWF0Y2ggQ29udGFpbmVyUG9ydC4gTW9zdCBjb250YWluZXJzIGRvIG5vdCBuZWVkIHRoaXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lclBvcnQjaG9zdFBvcnRcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoaXMgbXVzdCBiZSBhbiBJQU5BX1NWQ19OQU1FIGFuZCB1bmlxdWUgd2l0aGluIHRoZSBwb2QuIEVhY2ggbmFtZWQgcG9ydCBpbiBhIHBvZCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4gTmFtZSBmb3IgdGhlIHBvcnQgdGhhdCBjYW4gYmUgcmVmZXJyZWQgdG8gYnkgc2VydmljZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbnRhaW5lclBvcnQjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgZm9yIHBvcnQuIE11c3QgYmUgVURQLCBUQ1AsIG9yIFNDVFAuIERlZmF1bHRzIHRvIFwiVENQXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRDUFwiLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db250YWluZXJQb3J0I3Byb3RvY29sXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFNlY3VyaXR5Q29udGV4dCBob2xkcyBzZWN1cml0eSBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGEgY29udGFpbmVyLiBTb21lIGZpZWxkcyBhcmUgcHJlc2VudCBpbiBib3RoIFNlY3VyaXR5Q29udGV4dCBhbmQgUG9kU2VjdXJpdHlDb250ZXh0LiAgV2hlbiBib3RoIGFyZSBzZXQsIHRoZSB2YWx1ZXMgaW4gU2VjdXJpdHlDb250ZXh0IHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWN1cml0eUNvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUNvbnRleHQge1xuICAvKipcbiAgICogQWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIGNvbnRyb2xzIHdoZXRoZXIgYSBwcm9jZXNzIGNhbiBnYWluIG1vcmUgcHJpdmlsZWdlcyB0aGFuIGl0cyBwYXJlbnQgcHJvY2Vzcy4gVGhpcyBib29sIGRpcmVjdGx5IGNvbnRyb2xzIGlmIHRoZSBub19uZXdfcHJpdnMgZmxhZyB3aWxsIGJlIHNldCBvbiB0aGUgY29udGFpbmVyIHByb2Nlc3MuIEFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiBpcyB0cnVlIGFsd2F5cyB3aGVuIHRoZSBjb250YWluZXIgaXM6IDEpIHJ1biBhcyBQcml2aWxlZ2VkIDIpIGhhcyBDQVBfU1lTX0FETUlOXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3VyaXR5Q29udGV4dCNhbGxvd1ByaXZpbGVnZUVzY2FsYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjYXBhYmlsaXRpZXMgdG8gYWRkL2Ryb3Agd2hlbiBydW5uaW5nIGNvbnRhaW5lcnMuIERlZmF1bHRzIHRvIHRoZSBkZWZhdWx0IHNldCBvZiBjYXBhYmlsaXRpZXMgZ3JhbnRlZCBieSB0aGUgY29udGFpbmVyIHJ1bnRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBkZWZhdWx0IHNldCBvZiBjYXBhYmlsaXRpZXMgZ3JhbnRlZCBieSB0aGUgY29udGFpbmVyIHJ1bnRpbWUuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3VyaXR5Q29udGV4dCNjYXBhYmlsaXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGNhcGFiaWxpdGllcz86IENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogUnVuIGNvbnRhaW5lciBpbiBwcml2aWxlZ2VkIG1vZGUuIFByb2Nlc3NlcyBpbiBwcml2aWxlZ2VkIGNvbnRhaW5lcnMgYXJlIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gcm9vdCBvbiB0aGUgaG9zdC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWN1cml0eUNvbnRleHQjcHJpdmlsZWdlZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHByb2NNb3VudCBkZW5vdGVzIHRoZSB0eXBlIG9mIHByb2MgbW91bnQgdG8gdXNlIGZvciB0aGUgY29udGFpbmVycy4gVGhlIGRlZmF1bHQgaXMgRGVmYXVsdFByb2NNb3VudCB3aGljaCB1c2VzIHRoZSBjb250YWluZXIgcnVudGltZSBkZWZhdWx0cyBmb3IgcmVhZG9ubHkgcGF0aHMgYW5kIG1hc2tlZCBwYXRocy4gVGhpcyByZXF1aXJlcyB0aGUgUHJvY01vdW50VHlwZSBmZWF0dXJlIGZsYWcgdG8gYmUgZW5hYmxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjdXJpdHlDb250ZXh0I3Byb2NNb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvY01vdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29udGFpbmVyIGhhcyBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0uIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWN1cml0eUNvbnRleHQjcmVhZE9ubHlSb290RmlsZXN5c3RlbVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHlSb290RmlsZXN5c3RlbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBHSUQgdG8gcnVuIHRoZSBlbnRyeXBvaW50IG9mIHRoZSBjb250YWluZXIgcHJvY2Vzcy4gVXNlcyBydW50aW1lIGRlZmF1bHQgaWYgdW5zZXQuIE1heSBhbHNvIGJlIHNldCBpbiBQb2RTZWN1cml0eUNvbnRleHQuICBJZiBzZXQgaW4gYm90aCBTZWN1cml0eUNvbnRleHQgYW5kIFBvZFNlY3VyaXR5Q29udGV4dCwgdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBTZWN1cml0eUNvbnRleHQgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjdXJpdHlDb250ZXh0I3J1bkFzR3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHJ1bkFzR3JvdXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBjb250YWluZXIgbXVzdCBydW4gYXMgYSBub24tcm9vdCB1c2VyLiBJZiB0cnVlLCB0aGUgS3ViZWxldCB3aWxsIHZhbGlkYXRlIHRoZSBpbWFnZSBhdCBydW50aW1lIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMgbm90IHJ1biBhcyBVSUQgMCAocm9vdCkgYW5kIGZhaWwgdG8gc3RhcnQgdGhlIGNvbnRhaW5lciBpZiBpdCBkb2VzLiBJZiB1bnNldCBvciBmYWxzZSwgbm8gc3VjaCB2YWxpZGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLiBNYXkgYWxzbyBiZSBzZXQgaW4gUG9kU2VjdXJpdHlDb250ZXh0LiAgSWYgc2V0IGluIGJvdGggU2VjdXJpdHlDb250ZXh0IGFuZCBQb2RTZWN1cml0eUNvbnRleHQsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gU2VjdXJpdHlDb250ZXh0IHRha2VzIHByZWNlZGVuY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3VyaXR5Q29udGV4dCNydW5Bc05vblJvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJ1bkFzTm9uUm9vdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBVSUQgdG8gcnVuIHRoZSBlbnRyeXBvaW50IG9mIHRoZSBjb250YWluZXIgcHJvY2Vzcy4gRGVmYXVsdHMgdG8gdXNlciBzcGVjaWZpZWQgaW4gaW1hZ2UgbWV0YWRhdGEgaWYgdW5zcGVjaWZpZWQuIE1heSBhbHNvIGJlIHNldCBpbiBQb2RTZWN1cml0eUNvbnRleHQuICBJZiBzZXQgaW4gYm90aCBTZWN1cml0eUNvbnRleHQgYW5kIFBvZFNlY3VyaXR5Q29udGV4dCwgdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBTZWN1cml0eUNvbnRleHQgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdXNlciBzcGVjaWZpZWQgaW4gaW1hZ2UgbWV0YWRhdGEgaWYgdW5zcGVjaWZpZWQuIE1heSBhbHNvIGJlIHNldCBpbiBQb2RTZWN1cml0eUNvbnRleHQuICBJZiBzZXQgaW4gYm90aCBTZWN1cml0eUNvbnRleHQgYW5kIFBvZFNlY3VyaXR5Q29udGV4dCwgdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBTZWN1cml0eUNvbnRleHQgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjdXJpdHlDb250ZXh0I3J1bkFzVXNlclxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgU0VMaW51eCBjb250ZXh0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lci4gSWYgdW5zcGVjaWZpZWQsIHRoZSBjb250YWluZXIgcnVudGltZSB3aWxsIGFsbG9jYXRlIGEgcmFuZG9tIFNFTGludXggY29udGV4dCBmb3IgZWFjaCBjb250YWluZXIuICBNYXkgYWxzbyBiZSBzZXQgaW4gUG9kU2VjdXJpdHlDb250ZXh0LiAgSWYgc2V0IGluIGJvdGggU2VjdXJpdHlDb250ZXh0IGFuZCBQb2RTZWN1cml0eUNvbnRleHQsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gU2VjdXJpdHlDb250ZXh0IHRha2VzIHByZWNlZGVuY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3VyaXR5Q29udGV4dCNzZUxpbnV4T3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VMaW51eE9wdGlvbnM/OiBTZUxpbnV4T3B0aW9ucztcblxuICAvKipcbiAgICogV2luZG93cyBzZWN1cml0eSBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWN1cml0eUNvbnRleHQjd2luZG93c09wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHdpbmRvd3NPcHRpb25zPzogV2luZG93c1NlY3VyaXR5Q29udGV4dE9wdGlvbnM7XG5cbn1cblxuLyoqXG4gKiB2b2x1bWVEZXZpY2UgZGVzY3JpYmVzIGEgbWFwcGluZyBvZiBhIHJhdyBibG9jayBkZXZpY2Ugd2l0aGluIGEgY29udGFpbmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlZvbHVtZURldmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZURldmljZSB7XG4gIC8qKlxuICAgKiBkZXZpY2VQYXRoIGlzIHRoZSBwYXRoIGluc2lkZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgdGhlIGRldmljZSB3aWxsIGJlIG1hcHBlZCB0by5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lRGV2aWNlI2RldmljZVBhdGhcbiAgICovXG4gIHJlYWRvbmx5IGRldmljZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogbmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIGEgcGVyc2lzdGVudFZvbHVtZUNsYWltIGluIHRoZSBwb2RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lRGV2aWNlI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFBvZEROU0NvbmZpZ09wdGlvbiBkZWZpbmVzIEROUyByZXNvbHZlciBvcHRpb25zIG9mIGEgcG9kLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEROU0NvbmZpZ09wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZERuc0NvbmZpZ09wdGlvbiB7XG4gIC8qKlxuICAgKiBSZXF1aXJlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kRE5TQ29uZmlnT3B0aW9uI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEROU0NvbmZpZ09wdGlvbiN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTRUxpbnV4T3B0aW9ucyBhcmUgdGhlIGxhYmVscyB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb250YWluZXJcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TRUxpbnV4T3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlTGludXhPcHRpb25zIHtcbiAgLyoqXG4gICAqIExldmVsIGlzIFNFTGludXggbGV2ZWwgbGFiZWwgdGhhdCBhcHBsaWVzIHRvIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNFTGludXhPcHRpb25zI2xldmVsXG4gICAqL1xuICByZWFkb25seSBsZXZlbD86IHN0cmluZztcblxuICAvKipcbiAgICogUm9sZSBpcyBhIFNFTGludXggcm9sZSBsYWJlbCB0aGF0IGFwcGxpZXMgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU0VMaW51eE9wdGlvbnMjcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBpcyBhIFNFTGludXggdHlwZSBsYWJlbCB0aGF0IGFwcGxpZXMgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU0VMaW51eE9wdGlvbnMjdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlciBpcyBhIFNFTGludXggdXNlciBsYWJlbCB0aGF0IGFwcGxpZXMgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU0VMaW51eE9wdGlvbnMjdXNlclxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFN5c2N0bCBkZWZpbmVzIGEga2VybmVsIHBhcmFtZXRlciB0byBiZSBzZXRcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TeXNjdGxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXNjdGwge1xuICAvKipcbiAgICogTmFtZSBvZiBhIHByb3BlcnR5IHRvIHNldFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TeXNjdGwjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiBhIHByb3BlcnR5IHRvIHNldFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TeXNjdGwjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBXaW5kb3dzU2VjdXJpdHlDb250ZXh0T3B0aW9ucyBjb250YWluIFdpbmRvd3Mtc3BlY2lmaWMgb3B0aW9ucyBhbmQgY3JlZGVudGlhbHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuV2luZG93c1NlY3VyaXR5Q29udGV4dE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dzU2VjdXJpdHlDb250ZXh0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBHTVNBQ3JlZGVudGlhbFNwZWMgaXMgd2hlcmUgdGhlIEdNU0EgYWRtaXNzaW9uIHdlYmhvb2sgKGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzLXNpZ3Mvd2luZG93cy1nbXNhKSBpbmxpbmVzIHRoZSBjb250ZW50cyBvZiB0aGUgR01TQSBjcmVkZW50aWFsIHNwZWMgbmFtZWQgYnkgdGhlIEdNU0FDcmVkZW50aWFsU3BlY05hbWUgZmllbGQuIFRoaXMgZmllbGQgaXMgYWxwaGEtbGV2ZWwgYW5kIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlIHRoZSBXaW5kb3dzR01TQSBmZWF0dXJlIGZsYWcuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLldpbmRvd3NTZWN1cml0eUNvbnRleHRPcHRpb25zI2dtc2FDcmVkZW50aWFsU3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgZ21zYUNyZWRlbnRpYWxTcGVjPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHTVNBQ3JlZGVudGlhbFNwZWNOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBHTVNBIGNyZWRlbnRpYWwgc3BlYyB0byB1c2UuIFRoaXMgZmllbGQgaXMgYWxwaGEtbGV2ZWwgYW5kIGlzIG9ubHkgaG9ub3JlZCBieSBzZXJ2ZXJzIHRoYXQgZW5hYmxlIHRoZSBXaW5kb3dzR01TQSBmZWF0dXJlIGZsYWcuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLldpbmRvd3NTZWN1cml0eUNvbnRleHRPcHRpb25zI2dtc2FDcmVkZW50aWFsU3BlY05hbWVcbiAgICovXG4gIHJlYWRvbmx5IGdtc2FDcmVkZW50aWFsU3BlY05hbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBBenVyZUZpbGUgcmVwcmVzZW50cyBhbiBBenVyZSBGaWxlIFNlcnZpY2UgbW91bnQgb24gdGhlIGhvc3QgYW5kIGJpbmQgbW91bnQgdG8gdGhlIHBvZC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5BenVyZUZpbGVWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBenVyZUZpbGVWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRmlsZVZvbHVtZVNvdXJjZSNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiBzZWNyZXQgdGhhdCBjb250YWlucyBBenVyZSBTdG9yYWdlIEFjY291bnQgTmFtZSBhbmQgS2V5XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkF6dXJlRmlsZVZvbHVtZVNvdXJjZSNzZWNyZXROYW1lXG4gICAqL1xuICByZWFkb25seSBzZWNyZXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNoYXJlIE5hbWVcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQXp1cmVGaWxlVm9sdW1lU291cmNlI3NoYXJlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmVOYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ2VwaCBGaWxlc3lzdGVtIG1vdW50IHRoYXQgbGFzdHMgdGhlIGxpZmV0aW1lIG9mIGEgcG9kIENlcGhmcyB2b2x1bWVzIGRvIG5vdCBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IG9yIFNFTGludXggcmVsYWJlbGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZXBoRnNWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogUmVxdWlyZWQ6IE1vbml0b3JzIGlzIGEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNWb2x1bWVTb3VyY2UjbW9uaXRvcnNcbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IFVzZWQgYXMgdGhlIG1vdW50ZWQgcm9vdCwgcmF0aGVyIHRoYW4gdGhlIGZ1bGwgQ2VwaCB0cmVlLCBkZWZhdWx0IGlzIC9cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2VwaEZTVm9sdW1lU291cmNlI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IFNlY3JldEZpbGUgaXMgdGhlIHBhdGggdG8ga2V5IHJpbmcgZm9yIFVzZXIsIGRlZmF1bHQgaXMgL2V0Yy9jZXBoL3VzZXIuc2VjcmV0IE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNWb2x1bWVTb3VyY2Ujc2VjcmV0RmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0RmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWw6IFNlY3JldFJlZiBpcyByZWZlcmVuY2UgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIHNlY3JldCBmb3IgVXNlciwgZGVmYXVsdCBpcyBlbXB0eS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvY2VwaGZzL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNlcGhGU1ZvbHVtZVNvdXJjZSNzZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldFJlZj86IExvY2FsT2JqZWN0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogVXNlciBpcyB0aGUgcmFkb3MgdXNlciBuYW1lLCBkZWZhdWx0IGlzIGFkbWluIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL2NlcGhmcy9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DZXBoRlNWb2x1bWVTb3VyY2UjdXNlclxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjaW5kZXIgdm9sdW1lIHJlc291cmNlIGluIE9wZW5zdGFjay4gQSBDaW5kZXIgdm9sdW1lIG11c3QgZXhpc3QgYmVmb3JlIG1vdW50aW5nIHRvIGEgY29udGFpbmVyLiBUaGUgdm9sdW1lIG11c3QgYWxzbyBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIGt1YmVsZXQuIENpbmRlciB2b2x1bWVzIHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQgYW5kIFNFTGludXggcmVsYWJlbGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DaW5kZXJWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaW5kZXJWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeGFtcGxlczogXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvbXlzcWwtY2luZGVyLXBkL1JFQURNRS5tZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DaW5kZXJWb2x1bWVTb3VyY2UjZnNUeXBlXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9teXNxbC1jaW5kZXItcGQvUkVBRE1FLm1kXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL215c3FsLWNpbmRlci1wZC9SRUFETUUubWRcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2luZGVyVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBwb2ludHMgdG8gYSBzZWNyZXQgb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVycyB1c2VkIHRvIGNvbm5lY3QgdG8gT3BlblN0YWNrLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DaW5kZXJWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY/OiBMb2NhbE9iamVjdFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogdm9sdW1lIGlkIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHZvbHVtZSBpbiBjaW5kZXIgTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL215c3FsLWNpbmRlci1wZC9SRUFETUUubWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2luZGVyVm9sdW1lU291cmNlI3ZvbHVtZUlEXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVJRDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQWRhcHRzIGEgQ29uZmlnTWFwIGludG8gYSB2b2x1bWUuXG5cblRoZSBjb250ZW50cyBvZiB0aGUgdGFyZ2V0IENvbmZpZ01hcCdzIERhdGEgZmllbGQgd2lsbCBiZSBwcmVzZW50ZWQgaW4gYSB2b2x1bWUgYXMgZmlsZXMgdXNpbmcgdGhlIGtleXMgaW4gdGhlIERhdGEgZmllbGQgYXMgdGhlIGZpbGUgbmFtZXMsIHVubGVzcyB0aGUgaXRlbXMgZWxlbWVudCBpcyBwb3B1bGF0ZWQgd2l0aCBzcGVjaWZpYyBtYXBwaW5ncyBvZiBrZXlzIHRvIHBhdGhzLiBDb25maWdNYXAgdm9sdW1lcyBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IGFuZCBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFwVm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBtb2RlIGJpdHMgdG8gdXNlIG9uIGNyZWF0ZWQgZmlsZXMgYnkgZGVmYXVsdC4gTXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMDc3Ny4gRGVmYXVsdHMgdG8gMDY0NC4gRGlyZWN0b3JpZXMgd2l0aGluIHRoZSBwYXRoIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpcyBzZXR0aW5nLiBUaGlzIG1pZ2h0IGJlIGluIGNvbmZsaWN0IHdpdGggb3RoZXIgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgZmlsZSBtb2RlLCBsaWtlIGZzR3JvdXAsIGFuZCB0aGUgcmVzdWx0IGNhbiBiZSBvdGhlciBtb2RlIGJpdHMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAwNjQ0LiBEaXJlY3RvcmllcyB3aXRoaW4gdGhlIHBhdGggYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuIFRoaXMgbWlnaHQgYmUgaW4gY29uZmxpY3Qgd2l0aCBvdGhlciBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBmaWxlIG1vZGUsIGxpa2UgZnNHcm91cCwgYW5kIHRoZSByZXN1bHQgY2FuIGJlIG90aGVyIG1vZGUgYml0cyBzZXQuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcFZvbHVtZVNvdXJjZSNkZWZhdWx0TW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdE1vZGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIHVuc3BlY2lmaWVkLCBlYWNoIGtleS12YWx1ZSBwYWlyIGluIHRoZSBEYXRhIGZpZWxkIG9mIHRoZSByZWZlcmVuY2VkIENvbmZpZ01hcCB3aWxsIGJlIHByb2plY3RlZCBpbnRvIHRoZSB2b2x1bWUgYXMgYSBmaWxlIHdob3NlIG5hbWUgaXMgdGhlIGtleSBhbmQgY29udGVudCBpcyB0aGUgdmFsdWUuIElmIHNwZWNpZmllZCwgdGhlIGxpc3RlZCBrZXlzIHdpbGwgYmUgcHJvamVjdGVkIGludG8gdGhlIHNwZWNpZmllZCBwYXRocywgYW5kIHVubGlzdGVkIGtleXMgd2lsbCBub3QgYmUgcHJlc2VudC4gSWYgYSBrZXkgaXMgc3BlY2lmaWVkIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHRoZSBDb25maWdNYXAsIHRoZSB2b2x1bWUgc2V0dXAgd2lsbCBlcnJvciB1bmxlc3MgaXQgaXMgbWFya2VkIG9wdGlvbmFsLiBQYXRocyBtdXN0IGJlIHJlbGF0aXZlIGFuZCBtYXkgbm90IGNvbnRhaW4gdGhlICcuLicgcGF0aCBvciBzdGFydCB3aXRoICcuLicuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcFZvbHVtZVNvdXJjZSNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM/OiBLZXlUb1BhdGhbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI25hbWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcFZvbHVtZVNvdXJjZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIENvbmZpZ01hcCBvciBpdHMga2V5cyBtdXN0IGJlIGRlZmluZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwVm9sdW1lU291cmNlI29wdGlvbmFsXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc291cmNlIGxvY2F0aW9uIG9mIGEgdm9sdW1lIHRvIG1vdW50LCBtYW5hZ2VkIGJ5IGFuIGV4dGVybmFsIENTSSBkcml2ZXJcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc2lWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRHJpdmVyIGlzIHRoZSBuYW1lIG9mIHRoZSBDU0kgZHJpdmVyIHRoYXQgaGFuZGxlcyB0aGlzIHZvbHVtZS4gQ29uc3VsdCB3aXRoIHlvdXIgYWRtaW4gZm9yIHRoZSBjb3JyZWN0IG5hbWUgYXMgcmVnaXN0ZXJlZCBpbiB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ1NJVm9sdW1lU291cmNlI2RyaXZlclxuICAgKi9cbiAgcmVhZG9ubHkgZHJpdmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gdHlwZSB0byBtb3VudC4gRXguIFwiZXh0NFwiLCBcInhmc1wiLCBcIm50ZnNcIi4gSWYgbm90IHByb3ZpZGVkLCB0aGUgZW1wdHkgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBhc3NvY2lhdGVkIENTSSBkcml2ZXIgd2hpY2ggd2lsbCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZmlsZXN5c3RlbSB0byBhcHBseS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ1NJVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb2RlUHVibGlzaFNlY3JldFJlZiBpcyBhIHJlZmVyZW5jZSB0byB0aGUgc2VjcmV0IG9iamVjdCBjb250YWluaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHRoZSBDU0kgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBDU0kgTm9kZVB1Ymxpc2hWb2x1bWUgYW5kIE5vZGVVbnB1Ymxpc2hWb2x1bWUgY2FsbHMuIFRoaXMgZmllbGQgaXMgb3B0aW9uYWwsIGFuZCAgbWF5IGJlIGVtcHR5IGlmIG5vIHNlY3JldCBpcyByZXF1aXJlZC4gSWYgdGhlIHNlY3JldCBvYmplY3QgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBzZWNyZXQsIGFsbCBzZWNyZXQgcmVmZXJlbmNlcyBhcmUgcGFzc2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5DU0lWb2x1bWVTb3VyY2Ujbm9kZVB1Ymxpc2hTZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVQdWJsaXNoU2VjcmV0UmVmPzogTG9jYWxPYmplY3RSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHJlYWQtb25seSBjb25maWd1cmF0aW9uIGZvciB0aGUgdm9sdW1lLiBEZWZhdWx0cyB0byBmYWxzZSAocmVhZC93cml0ZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChyZWFkL3dyaXRlKS5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ1NJVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZvbHVtZUF0dHJpYnV0ZXMgc3RvcmVzIGRyaXZlci1zcGVjaWZpYyBwcm9wZXJ0aWVzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgQ1NJIGRyaXZlci4gQ29uc3VsdCB5b3VyIGRyaXZlcidzIGRvY3VtZW50YXRpb24gZm9yIHN1cHBvcnRlZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNTSVZvbHVtZVNvdXJjZSN2b2x1bWVBdHRyaWJ1dGVzXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVBdHRyaWJ1dGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxufVxuXG4vKipcbiAqIERvd253YXJkQVBJVm9sdW1lU291cmNlIHJlcHJlc2VudHMgYSB2b2x1bWUgY29udGFpbmluZyBkb3dud2FyZCBBUEkgaW5mby4gRG93bndhcmQgQVBJIHZvbHVtZXMgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBhbmQgU0VMaW51eCByZWxhYmVsaW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkRvd253YXJkQVBJVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG93bndhcmRBcGlWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogT3B0aW9uYWw6IG1vZGUgYml0cyB0byB1c2Ugb24gY3JlYXRlZCBmaWxlcyBieSBkZWZhdWx0LiBNdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAwNzc3LiBEZWZhdWx0cyB0byAwNjQ0LiBEaXJlY3RvcmllcyB3aXRoaW4gdGhlIHBhdGggYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuIFRoaXMgbWlnaHQgYmUgaW4gY29uZmxpY3Qgd2l0aCBvdGhlciBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBmaWxlIG1vZGUsIGxpa2UgZnNHcm91cCwgYW5kIHRoZSByZXN1bHQgY2FuIGJlIG90aGVyIG1vZGUgYml0cyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDA2NDQuIERpcmVjdG9yaWVzIHdpdGhpbiB0aGUgcGF0aCBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4gVGhpcyBtaWdodCBiZSBpbiBjb25mbGljdCB3aXRoIG90aGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGZpbGUgbW9kZSwgbGlrZSBmc0dyb3VwLCBhbmQgdGhlIHJlc3VsdCBjYW4gYmUgb3RoZXIgbW9kZSBiaXRzIHNldC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRG93bndhcmRBUElWb2x1bWVTb3VyY2UjZGVmYXVsdE1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRNb2RlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJdGVtcyBpcyBhIGxpc3Qgb2YgZG93bndhcmQgQVBJIHZvbHVtZSBmaWxlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkRvd253YXJkQVBJVm9sdW1lU291cmNlI2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtcz86IERvd253YXJkQXBpVm9sdW1lRmlsZVtdO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBlbXB0eSBkaXJlY3RvcnkgZm9yIGEgcG9kLiBFbXB0eSBkaXJlY3Rvcnkgdm9sdW1lcyBzdXBwb3J0IG93bmVyc2hpcCBtYW5hZ2VtZW50IGFuZCBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW1wdHlEaXJWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eURpclZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBXaGF0IHR5cGUgb2Ygc3RvcmFnZSBtZWRpdW0gc2hvdWxkIGJhY2sgdGhpcyBkaXJlY3RvcnkuIFRoZSBkZWZhdWx0IGlzIFwiXCIgd2hpY2ggbWVhbnMgdG8gdXNlIHRoZSBub2RlJ3MgZGVmYXVsdCBtZWRpdW0uIE11c3QgYmUgYW4gZW1wdHkgc3RyaW5nIChkZWZhdWx0KSBvciBNZW1vcnkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2VtcHR5ZGlyXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVtcHR5RGlyVm9sdW1lU291cmNlI21lZGl1bVxuICAgKi9cbiAgcmVhZG9ubHkgbWVkaXVtPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb3RhbCBhbW91bnQgb2YgbG9jYWwgc3RvcmFnZSByZXF1aXJlZCBmb3IgdGhpcyBFbXB0eURpciB2b2x1bWUuIFRoZSBzaXplIGxpbWl0IGlzIGFsc28gYXBwbGljYWJsZSBmb3IgbWVtb3J5IG1lZGl1bS4gVGhlIG1heGltdW0gdXNhZ2Ugb24gbWVtb3J5IG1lZGl1bSBFbXB0eURpciB3b3VsZCBiZSB0aGUgbWluaW11bSB2YWx1ZSBiZXR3ZWVuIHRoZSBTaXplTGltaXQgc3BlY2lmaWVkIGhlcmUgYW5kIHRoZSBzdW0gb2YgbWVtb3J5IGxpbWl0cyBvZiBhbGwgY29udGFpbmVycyBpbiBhIHBvZC4gVGhlIGRlZmF1bHQgaXMgbmlsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxpbWl0IGlzIHVuZGVmaW5lZC4gTW9yZSBpbmZvOiBodHRwOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcyNlbXB0eWRpclxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbXB0eURpclZvbHVtZVNvdXJjZSNzaXplTGltaXRcbiAgICovXG4gIHJlYWRvbmx5IHNpemVMaW1pdD86IFF1YW50aXR5O1xuXG59XG5cbi8qKlxuICogRmxleFZvbHVtZSByZXByZXNlbnRzIGEgZ2VuZXJpYyB2b2x1bWUgcmVzb3VyY2UgdGhhdCBpcyBwcm92aXNpb25lZC9hdHRhY2hlZCB1c2luZyBhbiBleGVjIGJhc2VkIHBsdWdpbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4Vm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxleFZvbHVtZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBEcml2ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB0byB1c2UgZm9yIHRoaXMgdm9sdW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4Vm9sdW1lU291cmNlI2RyaXZlclxuICAgKi9cbiAgcmVhZG9ubHkgZHJpdmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gdHlwZSB0byBtb3VudC4gTXVzdCBiZSBhIGZpbGVzeXN0ZW0gdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gRXguIFwiZXh0NFwiLCBcInhmc1wiLCBcIm50ZnNcIi4gVGhlIGRlZmF1bHQgZmlsZXN5c3RlbSBkZXBlbmRzIG9uIEZsZXhWb2x1bWUgc2NyaXB0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4Vm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogRXh0cmEgY29tbWFuZCBvcHRpb25zIGlmIGFueS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRmxleFZvbHVtZVNvdXJjZSNvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IERlZmF1bHRzIHRvIGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4Vm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBTZWNyZXRSZWYgaXMgcmVmZXJlbmNlIHRvIHRoZSBzZWNyZXQgb2JqZWN0IGNvbnRhaW5pbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIHRvIHBhc3MgdG8gdGhlIHBsdWdpbiBzY3JpcHRzLiBUaGlzIG1heSBiZSBlbXB0eSBpZiBubyBzZWNyZXQgb2JqZWN0IGlzIHNwZWNpZmllZC4gSWYgdGhlIHNlY3JldCBvYmplY3QgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBzZWNyZXQsIGFsbCBzZWNyZXRzIGFyZSBwYXNzZWQgdG8gdGhlIHBsdWdpbiBzY3JpcHRzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5GbGV4Vm9sdW1lU291cmNlI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmPzogTG9jYWxPYmplY3RSZWZlcmVuY2U7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdm9sdW1lIHRoYXQgaXMgcG9wdWxhdGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgZ2l0IHJlcG9zaXRvcnkuIEdpdCByZXBvIHZvbHVtZXMgZG8gbm90IHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQuIEdpdCByZXBvIHZvbHVtZXMgc3VwcG9ydCBTRUxpbnV4IHJlbGFiZWxpbmcuXG5cbkRFUFJFQ0FURUQ6IEdpdFJlcG8gaXMgZGVwcmVjYXRlZC4gVG8gcHJvdmlzaW9uIGEgY29udGFpbmVyIHdpdGggYSBnaXQgcmVwbywgbW91bnQgYW4gRW1wdHlEaXIgaW50byBhbiBJbml0Q29udGFpbmVyIHRoYXQgY2xvbmVzIHRoZSByZXBvIHVzaW5nIGdpdCwgdGhlbiBtb3VudCB0aGUgRW1wdHlEaXIgaW50byB0aGUgUG9kJ3MgY29udGFpbmVyLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdpdFJlcG9Wb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRSZXBvVm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIFRhcmdldCBkaXJlY3RvcnkgbmFtZS4gTXVzdCBub3QgY29udGFpbiBvciBzdGFydCB3aXRoICcuLicuICBJZiAnLicgaXMgc3VwcGxpZWQsIHRoZSB2b2x1bWUgZGlyZWN0b3J5IHdpbGwgYmUgdGhlIGdpdCByZXBvc2l0b3J5LiAgT3RoZXJ3aXNlLCBpZiBzcGVjaWZpZWQsIHRoZSB2b2x1bWUgd2lsbCBjb250YWluIHRoZSBnaXQgcmVwb3NpdG9yeSBpbiB0aGUgc3ViZGlyZWN0b3J5IHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdpdFJlcG9Wb2x1bWVTb3VyY2UjZGlyZWN0b3J5XG4gICAqL1xuICByZWFkb25seSBkaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgVVJMXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkdpdFJlcG9Wb2x1bWVTb3VyY2UjcmVwb3NpdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21taXQgaGFzaCBmb3IgdGhlIHNwZWNpZmllZCByZXZpc2lvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR2l0UmVwb1ZvbHVtZVNvdXJjZSNyZXZpc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmV2aXNpb24/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgR2x1c3RlcmZzIG1vdW50IHRoYXQgbGFzdHMgdGhlIGxpZmV0aW1lIG9mIGEgcG9kLiBHbHVzdGVyZnMgdm9sdW1lcyBkbyBub3Qgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBvciBTRUxpbnV4IHJlbGFiZWxpbmcuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR2x1c3RlcmZzVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2x1c3RlcmZzVm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIEVuZHBvaW50c05hbWUgaXMgdGhlIGVuZHBvaW50IG5hbWUgdGhhdCBkZXRhaWxzIEdsdXN0ZXJmcyB0b3BvbG9neS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR2x1c3RlcmZzVm9sdW1lU291cmNlI2VuZHBvaW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggaXMgdGhlIEdsdXN0ZXJmcyB2b2x1bWUgcGF0aC4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR2x1c3RlcmZzVm9sdW1lU291cmNlI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBHbHVzdGVyZnMgdm9sdW1lIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnMuIERlZmF1bHRzIHRvIGZhbHNlLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuR2x1c3RlcmZzVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElTQ1NJIGRpc2suIElTQ1NJIHZvbHVtZXMgY2FuIG9ubHkgYmUgbW91bnRlZCBhcyByZWFkL3dyaXRlIG9uY2UuIElTQ1NJIHZvbHVtZXMgc3VwcG9ydCBvd25lcnNoaXAgbWFuYWdlbWVudCBhbmQgU0VMaW51eCByZWxhYmVsaW5nLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNjc2lWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogd2hldGhlciBzdXBwb3J0IGlTQ1NJIERpc2NvdmVyeSBDSEFQIGF1dGhlbnRpY2F0aW9uXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJVm9sdW1lU291cmNlI2NoYXBBdXRoRGlzY292ZXJ5XG4gICAqL1xuICByZWFkb25seSBjaGFwQXV0aERpc2NvdmVyeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgc3VwcG9ydCBpU0NTSSBTZXNzaW9uIENIQVAgYXV0aGVudGljYXRpb25cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSVNDU0lWb2x1bWVTb3VyY2UjY2hhcEF1dGhTZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBjaGFwQXV0aFNlc3Npb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgb2YgdGhlIHZvbHVtZSB0aGF0IHlvdSB3YW50IHRvIG1vdW50LiBUaXA6IEVuc3VyZSB0aGF0IHRoZSBmaWxlc3lzdGVtIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEV4YW1wbGVzOiBcImV4dDRcIiwgXCJ4ZnNcIiwgXCJudGZzXCIuIEltcGxpY2l0bHkgaW5mZXJyZWQgdG8gYmUgXCJleHQ0XCIgaWYgdW5zcGVjaWZpZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2lzY3NpXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaVNDU0kgSW5pdGlhdG9yIE5hbWUuIElmIGluaXRpYXRvck5hbWUgaXMgc3BlY2lmaWVkIHdpdGggaXNjc2lJbnRlcmZhY2Ugc2ltdWx0YW5lb3VzbHksIG5ldyBpU0NTSSBpbnRlcmZhY2UgPHRhcmdldCBwb3J0YWw+Ojx2b2x1bWUgbmFtZT4gd2lsbCBiZSBjcmVhdGVkIGZvciB0aGUgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSVNDU0lWb2x1bWVTb3VyY2UjaW5pdGlhdG9yTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhdG9yTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGFyZ2V0IGlTQ1NJIFF1YWxpZmllZCBOYW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVZvbHVtZVNvdXJjZSNpcW5cbiAgICovXG4gIHJlYWRvbmx5IGlxbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBpU0NTSSBJbnRlcmZhY2UgTmFtZSB0aGF0IHVzZXMgYW4gaVNDU0kgdHJhbnNwb3J0LiBEZWZhdWx0cyB0byAnZGVmYXVsdCcgKHRjcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRlZmF1bHQnICh0Y3ApLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVZvbHVtZVNvdXJjZSNpc2NzaUludGVyZmFjZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNjc2lJbnRlcmZhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGlTQ1NJIFRhcmdldCBMdW4gbnVtYmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVZvbHVtZVNvdXJjZSNsdW5cbiAgICovXG4gIHJlYWRvbmx5IGx1bjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBpU0NTSSBUYXJnZXQgUG9ydGFsIExpc3QuIFRoZSBwb3J0YWwgaXMgZWl0aGVyIGFuIElQIG9yIGlwX2FkZHI6cG9ydCBpZiB0aGUgcG9ydCBpcyBvdGhlciB0aGFuIGRlZmF1bHQgKHR5cGljYWxseSBUQ1AgcG9ydHMgODYwIGFuZCAzMjYwKS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSVNDU0lWb2x1bWVTb3VyY2UjcG9ydGFsc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydGFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENIQVAgU2VjcmV0IGZvciBpU0NTSSB0YXJnZXQgYW5kIGluaXRpYXRvciBhdXRoZW50aWNhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5JU0NTSVZvbHVtZVNvdXJjZSNzZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldFJlZj86IExvY2FsT2JqZWN0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBpU0NTSSBUYXJnZXQgUG9ydGFsLiBUaGUgUG9ydGFsIGlzIGVpdGhlciBhbiBJUCBvciBpcF9hZGRyOnBvcnQgaWYgdGhlIHBvcnQgaXMgb3RoZXIgdGhhbiBkZWZhdWx0ICh0eXBpY2FsbHkgVENQIHBvcnRzIDg2MCBhbmQgMzI2MCkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLklTQ1NJVm9sdW1lU291cmNlI3RhcmdldFBvcnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UG9ydGFsOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2UgcmVmZXJlbmNlcyB0aGUgdXNlcidzIFBWQyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UuIFRoaXMgdm9sdW1lIGZpbmRzIHRoZSBib3VuZCBQViBhbmQgbW91bnRzIHRoYXQgdm9sdW1lIGZvciB0aGUgcG9kLiBBIFBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZSBpcywgZXNzZW50aWFsbHksIGEgd3JhcHBlciBhcm91bmQgYW5vdGhlciB0eXBlIG9mIHZvbHVtZSB0aGF0IGlzIG93bmVkIGJ5IHNvbWVvbmUgZWxzZSAodGhlIHN5c3RlbSkuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlIHtcbiAgLyoqXG4gICAqIENsYWltTmFtZSBpcyB0aGUgbmFtZSBvZiBhIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIHBvZCB1c2luZyB0aGlzIHZvbHVtZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZSNjbGFpbU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNsYWltTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy4gRGVmYXVsdCBmYWxzZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlI3JlYWRPbmx5XG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcHJvamVjdGVkIHZvbHVtZSBzb3VyY2VcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Qcm9qZWN0ZWRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0ZWRWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogTW9kZSBiaXRzIHRvIHVzZSBvbiBjcmVhdGVkIGZpbGVzIGJ5IGRlZmF1bHQuIE11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDA3NzcuIERpcmVjdG9yaWVzIHdpdGhpbiB0aGUgcGF0aCBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4gVGhpcyBtaWdodCBiZSBpbiBjb25mbGljdCB3aXRoIG90aGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGZpbGUgbW9kZSwgbGlrZSBmc0dyb3VwLCBhbmQgdGhlIHJlc3VsdCBjYW4gYmUgb3RoZXIgbW9kZSBiaXRzIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJvamVjdGVkVm9sdW1lU291cmNlI2RlZmF1bHRNb2RlXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TW9kZT86IG51bWJlcjtcblxuICAvKipcbiAgICogbGlzdCBvZiB2b2x1bWUgcHJvamVjdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJvamVjdGVkVm9sdW1lU291cmNlI3NvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZXM6IFZvbHVtZVByb2plY3Rpb25bXTtcblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBSYWRvcyBCbG9jayBEZXZpY2UgbW91bnQgdGhhdCBsYXN0cyB0aGUgbGlmZXRpbWUgb2YgYSBwb2QuIFJCRCB2b2x1bWVzIHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQgYW5kIFNFTGludXggcmVsYWJlbGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYmRWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIG9mIHRoZSB2b2x1bWUgdGhhdCB5b3Ugd2FudCB0byBtb3VudC4gVGlwOiBFbnN1cmUgdGhhdCB0aGUgZmlsZXN5c3RlbSB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeGFtcGxlczogXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNyYmRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUkJEVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFkb3MgaW1hZ2UgbmFtZS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJCRFZvbHVtZVNvdXJjZSNpbWFnZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogS2V5cmluZyBpcyB0aGUgcGF0aCB0byBrZXkgcmluZyBmb3IgUkJEVXNlci4gRGVmYXVsdCBpcyAvZXRjL2NlcGgva2V5cmluZy4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBkZWZhdWx0IGV0Yy9jZXBoL2tleXJpbmcuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRWb2x1bWVTb3VyY2Uja2V5cmluZ1xuICAgKi9cbiAgcmVhZG9ubHkga2V5cmluZz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIENlcGggbW9uaXRvcnMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRWb2x1bWVTb3VyY2UjbW9uaXRvcnNcbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJhZG9zIHBvb2wgbmFtZS4gRGVmYXVsdCBpcyByYmQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCByYmQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRWb2x1bWVTb3VyY2UjcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgcG9vbD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy4gRGVmYXVsdHMgdG8gZmFsc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJCRFZvbHVtZVNvdXJjZSNyZWFkT25seVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZWNyZXRSZWYgaXMgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gc2VjcmV0IGZvciBSQkRVc2VyLiBJZiBwcm92aWRlZCBvdmVycmlkZXMga2V5cmluZy4gRGVmYXVsdCBpcyBuaWwuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKlxuICAgKiBAZGVmYXVsdCBuaWwuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy92b2x1bWVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SQkRWb2x1bWVTb3VyY2Ujc2VjcmV0UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRSZWY/OiBMb2NhbE9iamVjdFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogVGhlIHJhZG9zIHVzZXIgbmFtZS4gRGVmYXVsdCBpcyBhZG1pbi4gTW9yZSBpbmZvOiBodHRwczovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3ZvbHVtZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XG4gICAqXG4gICAqIEBkZWZhdWx0IGFkbWluLiBNb3JlIGluZm86IGh0dHBzOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvdm9sdW1lcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUkJEVm9sdW1lU291cmNlI3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHVzZXI/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBTY2FsZUlPVm9sdW1lU291cmNlIHJlcHJlc2VudHMgYSBwZXJzaXN0ZW50IFNjYWxlSU8gdm9sdW1lXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1ZvbHVtZVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjYWxlSW9Wb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeC4gXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBEZWZhdWx0IGlzIFwieGZzXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IHhmc1wiLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TY2FsZUlPVm9sdW1lU291cmNlI2ZzVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBhZGRyZXNzIG9mIHRoZSBTY2FsZUlPIEFQSSBHYXRld2F5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TY2FsZUlPVm9sdW1lU291cmNlI2dhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFNjYWxlSU8gUHJvdGVjdGlvbiBEb21haW4gZm9yIHRoZSBjb25maWd1cmVkIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjYWxlSU9Wb2x1bWVTb3VyY2UjcHJvdGVjdGlvbkRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdGVjdGlvbkRvbWFpbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSAocmVhZC93cml0ZSkuIFJlYWRPbmx5IGhlcmUgd2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjYWxlSU9Wb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VjcmV0UmVmIHJlZmVyZW5jZXMgdG8gdGhlIHNlY3JldCBmb3IgU2NhbGVJTyB1c2VyIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIElmIHRoaXMgaXMgbm90IHByb3ZpZGVkLCBMb2dpbiBvcGVyYXRpb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TY2FsZUlPVm9sdW1lU291cmNlI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmOiBMb2NhbE9iamVjdFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogRmxhZyB0byBlbmFibGUvZGlzYWJsZSBTU0wgY29tbXVuaWNhdGlvbiB3aXRoIEdhdGV3YXksIGRlZmF1bHQgZmFsc2VcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1ZvbHVtZVNvdXJjZSNzc2xFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBzc2xFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JhZ2UgZm9yIGEgdm9sdW1lIHNob3VsZCBiZSBUaGlja1Byb3Zpc2lvbmVkIG9yIFRoaW5Qcm92aXNpb25lZC4gRGVmYXVsdCBpcyBUaGluUHJvdmlzaW9uZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoaW5Qcm92aXNpb25lZC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1ZvbHVtZVNvdXJjZSNzdG9yYWdlTW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZU1vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTY2FsZUlPIFN0b3JhZ2UgUG9vbCBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3RlY3Rpb24gZG9tYWluLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TY2FsZUlPVm9sdW1lU291cmNlI3N0b3JhZ2VQb29sXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlUG9vbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2Ugc3lzdGVtIGFzIGNvbmZpZ3VyZWQgaW4gU2NhbGVJTy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1ZvbHVtZVNvdXJjZSNzeXN0ZW1cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhIHZvbHVtZSBhbHJlYWR5IGNyZWF0ZWQgaW4gdGhlIFNjYWxlSU8gc3lzdGVtIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdm9sdW1lIHNvdXJjZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NhbGVJT1ZvbHVtZVNvdXJjZSN2b2x1bWVOYW1lXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVOYW1lPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQWRhcHRzIGEgU2VjcmV0IGludG8gYSB2b2x1bWUuXG5cblRoZSBjb250ZW50cyBvZiB0aGUgdGFyZ2V0IFNlY3JldCdzIERhdGEgZmllbGQgd2lsbCBiZSBwcmVzZW50ZWQgaW4gYSB2b2x1bWUgYXMgZmlsZXMgdXNpbmcgdGhlIGtleXMgaW4gdGhlIERhdGEgZmllbGQgYXMgdGhlIGZpbGUgbmFtZXMuIFNlY3JldCB2b2x1bWVzIHN1cHBvcnQgb3duZXJzaGlwIG1hbmFnZW1lbnQgYW5kIFNFTGludXggcmVsYWJlbGluZy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogT3B0aW9uYWw6IG1vZGUgYml0cyB0byB1c2Ugb24gY3JlYXRlZCBmaWxlcyBieSBkZWZhdWx0LiBNdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAwNzc3LiBEZWZhdWx0cyB0byAwNjQ0LiBEaXJlY3RvcmllcyB3aXRoaW4gdGhlIHBhdGggYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuIFRoaXMgbWlnaHQgYmUgaW4gY29uZmxpY3Qgd2l0aCBvdGhlciBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBmaWxlIG1vZGUsIGxpa2UgZnNHcm91cCwgYW5kIHRoZSByZXN1bHQgY2FuIGJlIG90aGVyIG1vZGUgYml0cyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDA2NDQuIERpcmVjdG9yaWVzIHdpdGhpbiB0aGUgcGF0aCBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4gVGhpcyBtaWdodCBiZSBpbiBjb25mbGljdCB3aXRoIG90aGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGZpbGUgbW9kZSwgbGlrZSBmc0dyb3VwLCBhbmQgdGhlIHJlc3VsdCBjYW4gYmUgb3RoZXIgbW9kZSBiaXRzIHNldC5cbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0Vm9sdW1lU291cmNlI2RlZmF1bHRNb2RlXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TW9kZT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdW5zcGVjaWZpZWQsIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIERhdGEgZmllbGQgb2YgdGhlIHJlZmVyZW5jZWQgU2VjcmV0IHdpbGwgYmUgcHJvamVjdGVkIGludG8gdGhlIHZvbHVtZSBhcyBhIGZpbGUgd2hvc2UgbmFtZSBpcyB0aGUga2V5IGFuZCBjb250ZW50IGlzIHRoZSB2YWx1ZS4gSWYgc3BlY2lmaWVkLCB0aGUgbGlzdGVkIGtleXMgd2lsbCBiZSBwcm9qZWN0ZWQgaW50byB0aGUgc3BlY2lmaWVkIHBhdGhzLCBhbmQgdW5saXN0ZWQga2V5cyB3aWxsIG5vdCBiZSBwcmVzZW50LiBJZiBhIGtleSBpcyBzcGVjaWZpZWQgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gdGhlIFNlY3JldCwgdGhlIHZvbHVtZSBzZXR1cCB3aWxsIGVycm9yIHVubGVzcyBpdCBpcyBtYXJrZWQgb3B0aW9uYWwuIFBhdGhzIG11c3QgYmUgcmVsYXRpdmUgYW5kIG1heSBub3QgY29udGFpbiB0aGUgJy4uJyBwYXRoIG9yIHN0YXJ0IHdpdGggJy4uJy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0Vm9sdW1lU291cmNlI2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtcz86IEtleVRvUGF0aFtdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIFNlY3JldCBvciBpdHMga2V5cyBtdXN0IGJlIGRlZmluZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0Vm9sdW1lU291cmNlI29wdGlvbmFsXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNlY3JldCBpbiB0aGUgcG9kJ3MgbmFtZXNwYWNlIHRvIHVzZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjc2VjcmV0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldFZvbHVtZVNvdXJjZSNzZWNyZXROYW1lXG4gICAqL1xuICByZWFkb25seSBzZWNyZXROYW1lPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIFN0b3JhZ2VPUyBwZXJzaXN0ZW50IHZvbHVtZSByZXNvdXJjZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TdG9yYWdlT1NWb2x1bWVTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3NWb2x1bWVTb3VyY2Uge1xuICAvKipcbiAgICogRmlsZXN5c3RlbSB0eXBlIHRvIG1vdW50LiBNdXN0IGJlIGEgZmlsZXN5c3RlbSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBFeC4gXCJleHQ0XCIsIFwieGZzXCIsIFwibnRmc1wiLiBJbXBsaWNpdGx5IGluZmVycmVkIHRvIGJlIFwiZXh0NFwiIGlmIHVuc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TdG9yYWdlT1NWb2x1bWVTb3VyY2UjZnNUeXBlXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlIChyZWFkL3dyaXRlKS4gUmVhZE9ubHkgaGVyZSB3aWxsIGZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgKHJlYWQvd3JpdGUpLiBSZWFkT25seSBoZXJlIHdpbGwgZm9yY2UgdGhlIFJlYWRPbmx5IHNldHRpbmcgaW4gVm9sdW1lTW91bnRzLlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TdG9yYWdlT1NWb2x1bWVTb3VyY2UjcmVhZE9ubHlcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VjcmV0UmVmIHNwZWNpZmllcyB0aGUgc2VjcmV0IHRvIHVzZSBmb3Igb2J0YWluaW5nIHRoZSBTdG9yYWdlT1MgQVBJIGNyZWRlbnRpYWxzLiAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSBhdHRlbXB0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlN0b3JhZ2VPU1ZvbHVtZVNvdXJjZSNzZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldFJlZj86IExvY2FsT2JqZWN0UmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBWb2x1bWVOYW1lIGlzIHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoZSBTdG9yYWdlT1Mgdm9sdW1lLiAgVm9sdW1lIG5hbWVzIGFyZSBvbmx5IHVuaXF1ZSB3aXRoaW4gYSBuYW1lc3BhY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlN0b3JhZ2VPU1ZvbHVtZVNvdXJjZSN2b2x1bWVOYW1lXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWb2x1bWVOYW1lc3BhY2Ugc3BlY2lmaWVzIHRoZSBzY29wZSBvZiB0aGUgdm9sdW1lIHdpdGhpbiBTdG9yYWdlT1MuICBJZiBubyBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIFBvZCdzIG5hbWVzcGFjZSB3aWxsIGJlIHVzZWQuICBUaGlzIGFsbG93cyB0aGUgS3ViZXJuZXRlcyBuYW1lIHNjb3BpbmcgdG8gYmUgbWlycm9yZWQgd2l0aGluIFN0b3JhZ2VPUyBmb3IgdGlnaHRlciBpbnRlZ3JhdGlvbi4gU2V0IFZvbHVtZU5hbWUgdG8gYW55IG5hbWUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLiBTZXQgdG8gXCJkZWZhdWx0XCIgaWYgeW91IGFyZSBub3QgdXNpbmcgbmFtZXNwYWNlcyB3aXRoaW4gU3RvcmFnZU9TLiBOYW1lc3BhY2VzIHRoYXQgZG8gbm90IHByZS1leGlzdCB3aXRoaW4gU3RvcmFnZU9TIHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU3RvcmFnZU9TVm9sdW1lU291cmNlI3ZvbHVtZU5hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lTmFtZXNwYWNlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQSBzY29wZWQtcmVzb3VyY2Ugc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBzY29wZSBuYW1lLCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBzY29wZSBuYW1lIGFuZCB2YWx1ZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NvcGVkUmVzb3VyY2VTZWxlY3RvclJlcXVpcmVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVkUmVzb3VyY2VTZWxlY3RvclJlcXVpcmVtZW50IHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBzY29wZSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NvcGVkUmVzb3VyY2VTZWxlY3RvclJlcXVpcmVtZW50I29wZXJhdG9yXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2NvcGUgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2NvcGVkUmVzb3VyY2VTZWxlY3RvclJlcXVpcmVtZW50I3Njb3BlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNjb3BlZFJlc291cmNlU2VsZWN0b3JSZXF1aXJlbWVudCN2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogQ2xpZW50SVBDb25maWcgcmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbnMgb2YgQ2xpZW50IElQIGJhc2VkIHNlc3Npb24gYWZmaW5pdHkuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2xpZW50SVBDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGllbnRJcENvbmZpZyB7XG4gIC8qKlxuICAgKiB0aW1lb3V0U2Vjb25kcyBzcGVjaWZpZXMgdGhlIHNlY29uZHMgb2YgQ2xpZW50SVAgdHlwZSBzZXNzaW9uIHN0aWNreSB0aW1lLiBUaGUgdmFsdWUgbXVzdCBiZSA+MCAmJiA8PTg2NDAwKGZvciAxIGRheSkgaWYgU2VydmljZUFmZmluaXR5ID09IFwiQ2xpZW50SVBcIi4gRGVmYXVsdCB2YWx1ZSBpcyAxMDgwMChmb3IgMyBob3VycykuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNsaWVudElQQ29uZmlnI3RpbWVvdXRTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0U2Vjb25kcz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIEhUVFBJbmdyZXNzUnVsZVZhbHVlIGlzIGEgbGlzdCBvZiBodHRwIHNlbGVjdG9ycyBwb2ludGluZyB0byBiYWNrZW5kcy4gSW4gdGhlIGV4YW1wbGU6IGh0dHA6Ly88aG9zdD4vPHBhdGg+PzxzZWFyY2hwYXJ0PiAtPiBiYWNrZW5kIHdoZXJlIHdoZXJlIHBhcnRzIG9mIHRoZSB1cmwgY29ycmVzcG9uZCB0byBSRkMgMzk4NiwgdGhpcyByZXNvdXJjZSB3aWxsIGJlIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0ICcvJyBhbmQgYmVmb3JlIHRoZSBmaXJzdCAnPycgb3IgJyMnLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSFRUUEluZ3Jlc3NSdWxlVmFsdWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwSW5ncmVzc1J1bGVWYWx1ZSB7XG4gIC8qKlxuICAgKiBBIGNvbGxlY3Rpb24gb2YgcGF0aHMgdGhhdCBtYXAgcmVxdWVzdHMgdG8gYmFja2VuZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSFRUUEluZ3Jlc3NSdWxlVmFsdWUjcGF0aHNcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzOiBIdHRwSW5ncmVzc1BhdGhbXTtcblxufVxuXG4vKipcbiAqIE5ldHdvcmtQb2xpY3lQb3J0IGRlc2NyaWJlcyBhIHBvcnQgdG8gYWxsb3cgdHJhZmZpYyBvblxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLk5ldHdvcmtQb2xpY3lQb3J0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1BvbGljeVBvcnQge1xuICAvKipcbiAgICogVGhlIHBvcnQgb24gdGhlIGdpdmVuIHByb3RvY29sLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSBudW1lcmljYWwgb3IgbmFtZWQgcG9ydCBvbiBhIHBvZC4gSWYgdGhpcyBmaWVsZCBpcyBub3QgcHJvdmlkZWQsIHRoaXMgbWF0Y2hlcyBhbGwgcG9ydCBuYW1lcyBhbmQgbnVtYmVycy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeVBvcnQjcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IEludE9yU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgKFRDUCwgVURQLCBvciBTQ1RQKSB3aGljaCB0cmFmZmljIG11c3QgbWF0Y2guIElmIG5vdCBzcGVjaWZpZWQsIHRoaXMgZmllbGQgZGVmYXVsdHMgdG8gVENQLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5UG9ydCNwcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBOZXR3b3JrUG9saWN5UGVlciBkZXNjcmliZXMgYSBwZWVyIHRvIGFsbG93IHRyYWZmaWMgZnJvbS4gT25seSBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBmaWVsZHMgYXJlIGFsbG93ZWRcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5UGVlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lQZWVyIHtcbiAgLyoqXG4gICAqIElQQmxvY2sgZGVmaW5lcyBwb2xpY3kgb24gYSBwYXJ0aWN1bGFyIElQQmxvY2suIElmIHRoaXMgZmllbGQgaXMgc2V0IHRoZW4gbmVpdGhlciBvZiB0aGUgb3RoZXIgZmllbGRzIGNhbiBiZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeVBlZXIjaXBCbG9ja1xuICAgKi9cbiAgcmVhZG9ubHkgaXBCbG9jaz86IElwQmxvY2s7XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgTmFtZXNwYWNlcyB1c2luZyBjbHVzdGVyLXNjb3BlZCBsYWJlbHMuIFRoaXMgZmllbGQgZm9sbG93cyBzdGFuZGFyZCBsYWJlbCBzZWxlY3RvciBzZW1hbnRpY3M7IGlmIHByZXNlbnQgYnV0IGVtcHR5LCBpdCBzZWxlY3RzIGFsbCBuYW1lc3BhY2VzLlxuXG5JZiBQb2RTZWxlY3RvciBpcyBhbHNvIHNldCwgdGhlbiB0aGUgTmV0d29ya1BvbGljeVBlZXIgYXMgYSB3aG9sZSBzZWxlY3RzIHRoZSBQb2RzIG1hdGNoaW5nIFBvZFNlbGVjdG9yIGluIHRoZSBOYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IE5hbWVzcGFjZVNlbGVjdG9yLiBPdGhlcndpc2UgaXQgc2VsZWN0cyBhbGwgUG9kcyBpbiB0aGUgTmFtZXNwYWNlcyBzZWxlY3RlZCBieSBOYW1lc3BhY2VTZWxlY3Rvci5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLm5ldHdvcmtpbmcudjEuTmV0d29ya1BvbGljeVBlZXIjbmFtZXNwYWNlU2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZVNlbGVjdG9yPzogTGFiZWxTZWxlY3RvcjtcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGxhYmVsIHNlbGVjdG9yIHdoaWNoIHNlbGVjdHMgUG9kcy4gVGhpcyBmaWVsZCBmb2xsb3dzIHN0YW5kYXJkIGxhYmVsIHNlbGVjdG9yIHNlbWFudGljczsgaWYgcHJlc2VudCBidXQgZW1wdHksIGl0IHNlbGVjdHMgYWxsIHBvZHMuXG5cbklmIE5hbWVzcGFjZVNlbGVjdG9yIGlzIGFsc28gc2V0LCB0aGVuIHRoZSBOZXR3b3JrUG9saWN5UGVlciBhcyBhIHdob2xlIHNlbGVjdHMgdGhlIFBvZHMgbWF0Y2hpbmcgUG9kU2VsZWN0b3IgaW4gdGhlIE5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgTmFtZXNwYWNlU2VsZWN0b3IuIE90aGVyd2lzZSBpdCBzZWxlY3RzIHRoZSBQb2RzIG1hdGNoaW5nIFBvZFNlbGVjdG9yIGluIHRoZSBwb2xpY3kncyBvd24gTmFtZXNwYWNlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5OZXR3b3JrUG9saWN5UGVlciNwb2RTZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgcG9kU2VsZWN0b3I/OiBMYWJlbFNlbGVjdG9yO1xuXG59XG5cbi8qKlxuICogSURSYW5nZSBwcm92aWRlcyBhIG1pbi9tYXggb2YgYW4gYWxsb3dlZCByYW5nZSBvZiBJRHMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLnBvbGljeS52MWJldGExLklEUmFuZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZFJhbmdlIHtcbiAgLyoqXG4gICAqIG1heCBpcyB0aGUgZW5kIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuSURSYW5nZSNtYXhcbiAgICovXG4gIHJlYWRvbmx5IG1heDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBtaW4gaXMgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkucG9saWN5LnYxYmV0YTEuSURSYW5nZSNtaW5cbiAgICovXG4gIHJlYWRvbmx5IG1pbjogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogRW52VmFyU291cmNlIHJlcHJlc2VudHMgYSBzb3VyY2UgZm9yIHRoZSB2YWx1ZSBvZiBhbiBFbnZWYXIuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW52VmFyU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52VmFyU291cmNlIHtcbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBrZXkgb2YgYSBDb25maWdNYXAuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkVudlZhclNvdXJjZSNjb25maWdNYXBLZXlSZWZcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ01hcEtleVJlZj86IENvbmZpZ01hcEtleVNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgZmllbGQgb2YgdGhlIHBvZDogc3VwcG9ydHMgbWV0YWRhdGEubmFtZSwgbWV0YWRhdGEubmFtZXNwYWNlLCBtZXRhZGF0YS5sYWJlbHMsIG1ldGFkYXRhLmFubm90YXRpb25zLCBzcGVjLm5vZGVOYW1lLCBzcGVjLnNlcnZpY2VBY2NvdW50TmFtZSwgc3RhdHVzLmhvc3RJUCwgc3RhdHVzLnBvZElQLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbnZWYXJTb3VyY2UjZmllbGRSZWZcbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkUmVmPzogT2JqZWN0RmllbGRTZWxlY3RvcjtcblxuICAvKipcbiAgICogU2VsZWN0cyBhIHJlc291cmNlIG9mIHRoZSBjb250YWluZXI6IG9ubHkgcmVzb3VyY2VzIGxpbWl0cyBhbmQgcmVxdWVzdHMgKGxpbWl0cy5jcHUsIGxpbWl0cy5tZW1vcnksIGxpbWl0cy5lcGhlbWVyYWwtc3RvcmFnZSwgcmVxdWVzdHMuY3B1LCByZXF1ZXN0cy5tZW1vcnkgYW5kIHJlcXVlc3RzLmVwaGVtZXJhbC1zdG9yYWdlKSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRW52VmFyU291cmNlI3Jlc291cmNlRmllbGRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlRmllbGRSZWY/OiBSZXNvdXJjZUZpZWxkU2VsZWN0b3I7XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBrZXkgb2YgYSBzZWNyZXQgaW4gdGhlIHBvZCdzIG5hbWVzcGFjZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FbnZWYXJTb3VyY2Ujc2VjcmV0S2V5UmVmXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRLZXlSZWY/OiBTZWNyZXRLZXlTZWxlY3RvcjtcblxufVxuXG4vKipcbiAqIENvbmZpZ01hcEVudlNvdXJjZSBzZWxlY3RzIGEgQ29uZmlnTWFwIHRvIHBvcHVsYXRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aC5cblxuVGhlIGNvbnRlbnRzIG9mIHRoZSB0YXJnZXQgQ29uZmlnTWFwJ3MgRGF0YSBmaWVsZCB3aWxsIHJlcHJlc2VudCB0aGUga2V5LXZhbHVlIHBhaXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBFbnZTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdNYXBFbnZTb3VyY2Uge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI25hbWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNvbmZpZ01hcEVudlNvdXJjZSNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIENvbmZpZ01hcCBtdXN0IGJlIGRlZmluZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwRW52U291cmNlI29wdGlvbmFsXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBTZWNyZXRFbnZTb3VyY2Ugc2VsZWN0cyBhIFNlY3JldCB0byBwb3B1bGF0ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGguXG5cblRoZSBjb250ZW50cyBvZiB0aGUgdGFyZ2V0IFNlY3JldCdzIERhdGEgZmllbGQgd2lsbCByZXByZXNlbnQgdGhlIGtleS12YWx1ZSBwYWlycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0RW52U291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0RW52U291cmNlIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJlZmVyZW50LiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lc1xuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRFbnZTb3VyY2UjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBTZWNyZXQgbXVzdCBiZSBkZWZpbmVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldEVudlNvdXJjZSNvcHRpb25hbFxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uYWw/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZVNjYWxlIGRlZmluZXMgaG93IHRvIHNlcnZlIHRoZSBzY2FsZSBzdWJyZXNvdXJjZSBmb3IgQ3VzdG9tUmVzb3VyY2VzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZVN1YnJlc291cmNlU2NhbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21SZXNvdXJjZVN1YnJlc291cmNlU2NhbGUge1xuICAvKipcbiAgICogTGFiZWxTZWxlY3RvclBhdGggZGVmaW5lcyB0aGUgSlNPTiBwYXRoIGluc2lkZSBvZiBhIEN1c3RvbVJlc291cmNlIHRoYXQgY29ycmVzcG9uZHMgdG8gU2NhbGUuU3RhdHVzLlNlbGVjdG9yLiBPbmx5IEpTT04gcGF0aHMgd2l0aG91dCB0aGUgYXJyYXkgbm90YXRpb24gYXJlIGFsbG93ZWQuIE11c3QgYmUgYSBKU09OIFBhdGggdW5kZXIgLnN0YXR1cyBvciAuc3BlYy4gTXVzdCBiZSBzZXQgdG8gd29yayB3aXRoIEhQQS4gVGhlIGZpZWxkIHBvaW50ZWQgYnkgdGhpcyBKU09OIHBhdGggbXVzdCBiZSBhIHN0cmluZyBmaWVsZCAobm90IGEgY29tcGxleCBzZWxlY3RvciBzdHJ1Y3QpIHdoaWNoIGNvbnRhaW5zIGEgc2VyaWFsaXplZCBsYWJlbCBzZWxlY3RvciBpbiBzdHJpbmcgZm9ybS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy90YXNrcy9hY2Nlc3Mta3ViZXJuZXRlcy1hcGkvY3VzdG9tLXJlc291cmNlcy9jdXN0b20tcmVzb3VyY2UtZGVmaW5pdGlvbnMjc2NhbGUtc3VicmVzb3VyY2UgSWYgdGhlcmUgaXMgbm8gdmFsdWUgdW5kZXIgdGhlIGdpdmVuIHBhdGggaW4gdGhlIEN1c3RvbVJlc291cmNlLCB0aGUgc3RhdHVzIGxhYmVsIHNlbGVjdG9yIHZhbHVlIGluIHRoZSAvc2NhbGUgc3VicmVzb3VyY2Ugd2lsbCBkZWZhdWx0IHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5DdXN0b21SZXNvdXJjZVN1YnJlc291cmNlU2NhbGUjbGFiZWxTZWxlY3RvclBhdGhcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsU2VsZWN0b3JQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjUmVwbGljYXNQYXRoIGRlZmluZXMgdGhlIEpTT04gcGF0aCBpbnNpZGUgb2YgYSBDdXN0b21SZXNvdXJjZSB0aGF0IGNvcnJlc3BvbmRzIHRvIFNjYWxlLlNwZWMuUmVwbGljYXMuIE9ubHkgSlNPTiBwYXRocyB3aXRob3V0IHRoZSBhcnJheSBub3RhdGlvbiBhcmUgYWxsb3dlZC4gTXVzdCBiZSBhIEpTT04gUGF0aCB1bmRlciAuc3BlYy4gSWYgdGhlcmUgaXMgbm8gdmFsdWUgdW5kZXIgdGhlIGdpdmVuIHBhdGggaW4gdGhlIEN1c3RvbVJlc291cmNlLCB0aGUgL3NjYWxlIHN1YnJlc291cmNlIHdpbGwgcmV0dXJuIGFuIGVycm9yIG9uIEdFVC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkN1c3RvbVJlc291cmNlU3VicmVzb3VyY2VTY2FsZSNzcGVjUmVwbGljYXNQYXRoXG4gICAqL1xuICByZWFkb25seSBzcGVjUmVwbGljYXNQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YXR1c1JlcGxpY2FzUGF0aCBkZWZpbmVzIHRoZSBKU09OIHBhdGggaW5zaWRlIG9mIGEgQ3VzdG9tUmVzb3VyY2UgdGhhdCBjb3JyZXNwb25kcyB0byBTY2FsZS5TdGF0dXMuUmVwbGljYXMuIE9ubHkgSlNPTiBwYXRocyB3aXRob3V0IHRoZSBhcnJheSBub3RhdGlvbiBhcmUgYWxsb3dlZC4gTXVzdCBiZSBhIEpTT04gUGF0aCB1bmRlciAuc3RhdHVzLiBJZiB0aGVyZSBpcyBubyB2YWx1ZSB1bmRlciB0aGUgZ2l2ZW4gcGF0aCBpbiB0aGUgQ3VzdG9tUmVzb3VyY2UsIHRoZSBzdGF0dXMgcmVwbGljYSB2YWx1ZSBpbiB0aGUgL3NjYWxlIHN1YnJlc291cmNlIHdpbGwgZGVmYXVsdCB0byAwLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuQ3VzdG9tUmVzb3VyY2VTdWJyZXNvdXJjZVNjYWxlI3N0YXR1c1JlcGxpY2FzUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzUmVwbGljYXNQYXRoOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBKU09OU2NoZW1hUHJvcHMgaXMgYSBKU09OLVNjaGVtYSBmb2xsb3dpbmcgU3BlY2lmaWNhdGlvbiBEcmFmdCA0IChodHRwOi8vanNvbi1zY2hlbWEub3JnLykuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25TY2hlbWFQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzIyRyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyMkc2NoZW1hXG4gICAqL1xuICByZWFkb25seSBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjYWRkaXRpb25hbEl0ZW1zXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSXRlbXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjYWRkaXRpb25hbFByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxQcm9wZXJ0aWVzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI2FsbE9mXG4gICAqL1xuICByZWFkb25seSBhbGxPZj86IEpzb25TY2hlbWFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI2FueU9mXG4gICAqL1xuICByZWFkb25seSBhbnlPZj86IEpzb25TY2hlbWFQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0IGlzIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdW5kZWZpbmVkIG9iamVjdCBmaWVsZHMuIERlZmF1bHRpbmcgaXMgYW4gYWxwaGEgZmVhdHVyZSB1bmRlciB0aGUgQ3VzdG9tUmVzb3VyY2VEZWZhdWx0aW5nIGZlYXR1cmUgZ2F0ZS4gRGVmYXVsdGluZyByZXF1aXJlcyBzcGVjLnByZXNlcnZlVW5rbm93bkZpZWxkcyB0byBiZSBmYWxzZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI2RlZmluaXRpb25zXG4gICAqL1xuICByZWFkb25seSBkZWZpbml0aW9ucz86IHsgW2tleTogc3RyaW5nXTogSnNvblNjaGVtYVByb3BzIH07XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI2Rlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNlbnVtXG4gICAqL1xuICByZWFkb25seSBlbnVtPzogYW55W107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjZXhhbXBsZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhhbXBsZT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNleGNsdXNpdmVNYXhpbXVtXG4gICAqL1xuICByZWFkb25seSBleGNsdXNpdmVNYXhpbXVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNleGNsdXNpdmVNaW5pbXVtXG4gICAqL1xuICByZWFkb25seSBleGNsdXNpdmVNaW5pbXVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNleHRlcm5hbERvY3NcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsRG9jcz86IEV4dGVybmFsRG9jdW1lbnRhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNmb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjaXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI21heEl0ZW1zXG4gICAqL1xuICByZWFkb25seSBtYXhJdGVtcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNtYXhMZW5ndGhcbiAgICovXG4gIHJlYWRvbmx5IG1heExlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNtYXhQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBtYXhQcm9wZXJ0aWVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI21heGltdW1cbiAgICovXG4gIHJlYWRvbmx5IG1heGltdW0/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjbWluSXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbkl0ZW1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI21pbkxlbmd0aFxuICAgKi9cbiAgcmVhZG9ubHkgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI21pblByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pblByb3BlcnRpZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjbWluaW11bVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNtdWx0aXBsZU9mXG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZU9mPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI25vdFxuICAgKi9cbiAgcmVhZG9ubHkgbm90PzogSnNvblNjaGVtYVByb3BzO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI251bGxhYmxlXG4gICAqL1xuICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjb25lT2ZcbiAgICovXG4gIHJlYWRvbmx5IG9uZU9mPzogSnNvblNjaGVtYVByb3BzW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5KU09OU2NoZW1hUHJvcHMjcGF0dGVyblxuICAgKi9cbiAgcmVhZG9ubHkgcGF0dGVybj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyNwYXR0ZXJuUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcGF0dGVyblByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IEpzb25TY2hlbWFQcm9wcyB9O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI3Byb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IEpzb25TY2hlbWFQcm9wcyB9O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI3JlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI3RpdGxlXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkpTT05TY2hlbWFQcm9wcyN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGlleHRlbnNpb25zLWFwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxYmV0YTEuSlNPTlNjaGVtYVByb3BzI3VuaXF1ZUl0ZW1zXG4gICAqL1xuICByZWFkb25seSB1bmlxdWVJdGVtcz86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBNZXRyaWNJZGVudGlmaWVyIGRlZmluZXMgdGhlIG5hbWUgYW5kIG9wdGlvbmFsbHkgc2VsZWN0b3IgZm9yIGEgbWV0cmljXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuTWV0cmljSWRlbnRpZmllclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY0lkZW50aWZpZXIge1xuICAvKipcbiAgICogbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gbWV0cmljXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk1ldHJpY0lkZW50aWZpZXIjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBzZWxlY3RvciBpcyB0aGUgc3RyaW5nLWVuY29kZWQgZm9ybSBvZiBhIHN0YW5kYXJkIGt1YmVybmV0ZXMgbGFiZWwgc2VsZWN0b3IgZm9yIHRoZSBnaXZlbiBtZXRyaWMgV2hlbiBzZXQsIGl0IGlzIHBhc3NlZCBhcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciB0byB0aGUgbWV0cmljcyBzZXJ2ZXIgZm9yIG1vcmUgc3BlY2lmaWMgbWV0cmljcyBzY29waW5nLiBXaGVuIHVuc2V0LCBqdXN0IHRoZSBtZXRyaWNOYW1lIHdpbGwgYmUgdXNlZCB0byBnYXRoZXIgbWV0cmljcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmF1dG9zY2FsaW5nLnYyYmV0YTIuTWV0cmljSWRlbnRpZmllciNzZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0b3I/OiBMYWJlbFNlbGVjdG9yO1xuXG59XG5cbi8qKlxuICogTWV0cmljVGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB2YWx1ZSwgYXZlcmFnZSB2YWx1ZSwgb3IgYXZlcmFnZSB1dGlsaXphdGlvbiBvZiBhIHNwZWNpZmljIG1ldHJpY1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk1ldHJpY1RhcmdldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY1RhcmdldCB7XG4gIC8qKlxuICAgKiBhdmVyYWdlVXRpbGl6YXRpb24gaXMgdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgYXZlcmFnZSBvZiB0aGUgcmVzb3VyY2UgbWV0cmljIGFjcm9zcyBhbGwgcmVsZXZhbnQgcG9kcywgcmVwcmVzZW50ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSByZXF1ZXN0ZWQgdmFsdWUgb2YgdGhlIHJlc291cmNlIGZvciB0aGUgcG9kcy4gQ3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIFJlc291cmNlIG1ldHJpYyBzb3VyY2UgdHlwZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5NZXRyaWNUYXJnZXQjYXZlcmFnZVV0aWxpemF0aW9uXG4gICAqL1xuICByZWFkb25seSBhdmVyYWdlVXRpbGl6YXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIGF2ZXJhZ2VWYWx1ZSBpcyB0aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBhdmVyYWdlIG9mIHRoZSBtZXRyaWMgYWNyb3NzIGFsbCByZWxldmFudCBwb2RzIChhcyBhIHF1YW50aXR5KVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuYXV0b3NjYWxpbmcudjJiZXRhMi5NZXRyaWNUYXJnZXQjYXZlcmFnZVZhbHVlXG4gICAqL1xuICByZWFkb25seSBhdmVyYWdlVmFsdWU/OiBRdWFudGl0eTtcblxuICAvKipcbiAgICogdHlwZSByZXByZXNlbnRzIHdoZXRoZXIgdGhlIG1ldHJpYyB0eXBlIGlzIFV0aWxpemF0aW9uLCBWYWx1ZSwgb3IgQXZlcmFnZVZhbHVlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk1ldHJpY1RhcmdldCN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHZhbHVlIGlzIHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIG1ldHJpYyAoYXMgYSBxdWFudGl0eSkuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5hdXRvc2NhbGluZy52MmJldGEyLk1ldHJpY1RhcmdldCN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBRdWFudGl0eTtcblxufVxuXG4vKipcbiAqIEEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mIHRoZW0gYXJlIEFORGVkLiBUaGUgVG9wb2xvZ3lTZWxlY3RvclRlcm0gdHlwZSBpbXBsZW1lbnRzIGEgc3Vic2V0IG9mIHRoZSBOb2RlU2VsZWN0b3JUZXJtLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVTZWxlY3RvclRlcm1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlU2VsZWN0b3JUZXJtIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgbGFiZWxzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU2VsZWN0b3JUZXJtI21hdGNoRXhwcmVzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1hdGNoRXhwcmVzc2lvbnM/OiBOb2RlU2VsZWN0b3JSZXF1aXJlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuTm9kZVNlbGVjdG9yVGVybSNtYXRjaEZpZWxkc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hGaWVsZHM/OiBOb2RlU2VsZWN0b3JSZXF1aXJlbWVudFtdO1xuXG59XG5cbi8qKlxuICogQW4gZW1wdHkgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIGFsbCBvYmplY3RzIHdpdGggaW1wbGljaXQgd2VpZ2h0IDAgKGkuZS4gaXQncyBhIG5vLW9wKS4gQSBudWxsIHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzIChpLmUuIGlzIGFsc28gYSBuby1vcCkuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJlZmVycmVkU2NoZWR1bGluZ1Rlcm1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVmZXJyZWRTY2hlZHVsaW5nVGVybSB7XG4gIC8qKlxuICAgKiBBIG5vZGUgc2VsZWN0b3IgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUHJlZmVycmVkU2NoZWR1bGluZ1Rlcm0jcHJlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZmVyZW5jZTogTm9kZVNlbGVjdG9yVGVybTtcblxuICAvKipcbiAgICogV2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBub2RlU2VsZWN0b3JUZXJtLCBpbiB0aGUgcmFuZ2UgMS0xMDAuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlByZWZlcnJlZFNjaGVkdWxpbmdUZXJtI3dlaWdodFxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWlnaHRlZFBvZEFmZmluaXR5VGVybSB7XG4gIC8qKlxuICAgKiBSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0jcG9kQWZmaW5pdHlUZXJtXG4gICAqL1xuICByZWFkb25seSBwb2RBZmZpbml0eVRlcm06IFBvZEFmZmluaXR5VGVybTtcblxuICAvKipcbiAgICogd2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0jd2VpZ2h0XG4gICAqL1xuICByZWFkb25seSB3ZWlnaHQ6IG51bWJlcjtcblxufVxuXG4vKipcbiAqIERlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSA8dG9wb2xvZ3lLZXk+IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhIHBvZCBvZiB0aGUgc2V0IG9mIHBvZHMgaXMgcnVubmluZ1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlBvZEFmZmluaXR5VGVybVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZEFmZmluaXR5VGVybSB7XG4gIC8qKlxuICAgKiBBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kQWZmaW5pdHlUZXJtI2xhYmVsU2VsZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsU2VsZWN0b3I/OiBMYWJlbFNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBuYW1lc3BhY2VzIHNwZWNpZmllcyB3aGljaCBuYW1lc3BhY2VzIHRoZSBsYWJlbFNlbGVjdG9yIGFwcGxpZXMgdG8gKG1hdGNoZXMgYWdhaW5zdCk7IG51bGwgb3IgZW1wdHkgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCJcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kQWZmaW5pdHlUZXJtI25hbWVzcGFjZXNcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUG9kQWZmaW5pdHlUZXJtI3RvcG9sb2d5S2V5XG4gICAqL1xuICByZWFkb25seSB0b3BvbG9neUtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogSGFuZGxlciBkZWZpbmVzIGEgc3BlY2lmaWMgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHRha2VuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSGFuZGxlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXIge1xuICAvKipcbiAgICogT25lIGFuZCBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBzcGVjaWZpZWQuIEV4ZWMgc3BlY2lmaWVzIHRoZSBhY3Rpb24gdG8gdGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuSGFuZGxlciNleGVjXG4gICAqL1xuICByZWFkb25seSBleGVjPzogRXhlY0FjdGlvbjtcblxuICAvKipcbiAgICogSFRUUEdldCBzcGVjaWZpZXMgdGhlIGh0dHAgcmVxdWVzdCB0byBwZXJmb3JtLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5IYW5kbGVyI2h0dHBHZXRcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBHZXQ/OiBIdHRwR2V0QWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUQ1BTb2NrZXQgc3BlY2lmaWVzIGFuIGFjdGlvbiBpbnZvbHZpbmcgYSBUQ1AgcG9ydC4gVENQIGhvb2tzIG5vdCB5ZXQgc3VwcG9ydGVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkhhbmRsZXIjdGNwU29ja2V0XG4gICAqL1xuICByZWFkb25seSB0Y3BTb2NrZXQ/OiBUY3BTb2NrZXRBY3Rpb247XG5cbn1cblxuLyoqXG4gKiBFeGVjQWN0aW9uIGRlc2NyaWJlcyBhIFwicnVuIGluIGNvbnRhaW5lclwiIGFjdGlvbi5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FeGVjQWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY0FjdGlvbiB7XG4gIC8qKlxuICAgKiBDb21tYW5kIGlzIHRoZSBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBpbnNpZGUgdGhlIGNvbnRhaW5lciwgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgY29tbWFuZCAgaXMgcm9vdCAoJy8nKSBpbiB0aGUgY29udGFpbmVyJ3MgZmlsZXN5c3RlbS4gVGhlIGNvbW1hbmQgaXMgc2ltcGx5IGV4ZWMnZCwgaXQgaXMgbm90IHJ1biBpbnNpZGUgYSBzaGVsbCwgc28gdHJhZGl0aW9uYWwgc2hlbGwgaW5zdHJ1Y3Rpb25zICgnfCcsIGV0Yykgd29uJ3Qgd29yay4gVG8gdXNlIGEgc2hlbGwsIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCBvdXQgdG8gdGhhdCBzaGVsbC4gRXhpdCBzdGF0dXMgb2YgMCBpcyB0cmVhdGVkIGFzIGxpdmUvaGVhbHRoeSBhbmQgbm9uLXplcm8gaXMgdW5oZWFsdGh5LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5FeGVjQWN0aW9uI2NvbW1hbmRcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ/OiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIEhUVFBHZXRBY3Rpb24gZGVzY3JpYmVzIGFuIGFjdGlvbiBiYXNlZCBvbiBIVFRQIEdldCByZXF1ZXN0cy5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5IVFRQR2V0QWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEdldEFjdGlvbiB7XG4gIC8qKlxuICAgKiBIb3N0IG5hbWUgdG8gY29ubmVjdCB0bywgZGVmYXVsdHMgdG8gdGhlIHBvZCBJUC4gWW91IHByb2JhYmx5IHdhbnQgdG8gc2V0IFwiSG9zdFwiIGluIGh0dHBIZWFkZXJzIGluc3RlYWQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkhUVFBHZXRBY3Rpb24jaG9zdFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGhlYWRlcnMgdG8gc2V0IGluIHRoZSByZXF1ZXN0LiBIVFRQIGFsbG93cyByZXBlYXRlZCBoZWFkZXJzLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5IVFRQR2V0QWN0aW9uI2h0dHBIZWFkZXJzXG4gICAqL1xuICByZWFkb25seSBodHRwSGVhZGVycz86IEh0dHBIZWFkZXJbXTtcblxuICAvKipcbiAgICogUGF0aCB0byBhY2Nlc3Mgb24gdGhlIEhUVFAgc2VydmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5IVFRQR2V0QWN0aW9uI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb3IgbnVtYmVyIG9mIHRoZSBwb3J0IHRvIGFjY2VzcyBvbiB0aGUgY29udGFpbmVyLiBOdW1iZXIgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMSB0byA2NTUzNS4gTmFtZSBtdXN0IGJlIGFuIElBTkFfU1ZDX05BTUUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkhUVFBHZXRBY3Rpb24jcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogSW50T3JTdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjaGVtZSB0byB1c2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIGhvc3QuIERlZmF1bHRzIHRvIEhUVFAuXG4gICAqXG4gICAqIEBkZWZhdWx0IEhUVFAuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkhUVFBHZXRBY3Rpb24jc2NoZW1lXG4gICAqL1xuICByZWFkb25seSBzY2hlbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBUQ1BTb2NrZXRBY3Rpb24gZGVzY3JpYmVzIGFuIGFjdGlvbiBiYXNlZCBvbiBvcGVuaW5nIGEgc29ja2V0XG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVENQU29ja2V0QWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGNwU29ja2V0QWN0aW9uIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBIb3N0IG5hbWUgdG8gY29ubmVjdCB0bywgZGVmYXVsdHMgdG8gdGhlIHBvZCBJUC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVENQU29ja2V0QWN0aW9uI2hvc3RcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvciBuYW1lIG9mIHRoZSBwb3J0IHRvIGFjY2VzcyBvbiB0aGUgY29udGFpbmVyLiBOdW1iZXIgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMSB0byA2NTUzNS4gTmFtZSBtdXN0IGJlIGFuIElBTkFfU1ZDX05BTUUuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlRDUFNvY2tldEFjdGlvbiNwb3J0XG4gICAqL1xuICByZWFkb25seSBwb3J0OiBJbnRPclN0cmluZztcblxufVxuXG4vKipcbiAqIEFkZHMgYW5kIHJlbW92ZXMgUE9TSVggY2FwYWJpbGl0aWVzIGZyb20gcnVubmluZyBjb250YWluZXJzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBBZGRlZCBjYXBhYmlsaXRpZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ2FwYWJpbGl0aWVzI2FkZFxuICAgKi9cbiAgcmVhZG9ubHkgYWRkPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlbW92ZWQgY2FwYWJpbGl0aWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkNhcGFiaWxpdGllcyNkcm9wXG4gICAqL1xuICByZWFkb25seSBkcm9wPzogc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBNYXBzIGEgc3RyaW5nIGtleSB0byBhIHBhdGggd2l0aGluIGEgdm9sdW1lLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLktleVRvUGF0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVRvUGF0aCB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHByb2plY3QuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLktleVRvUGF0aCNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogbW9kZSBiaXRzIHRvIHVzZSBvbiB0aGlzIGZpbGUsIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDA3NzcuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB2b2x1bWUgZGVmYXVsdE1vZGUgd2lsbCBiZSB1c2VkLiBUaGlzIG1pZ2h0IGJlIGluIGNvbmZsaWN0IHdpdGggb3RoZXIgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgZmlsZSBtb2RlLCBsaWtlIGZzR3JvdXAsIGFuZCB0aGUgcmVzdWx0IGNhbiBiZSBvdGhlciBtb2RlIGJpdHMgc2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5LZXlUb1BhdGgjbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGZpbGUgdG8gbWFwIHRoZSBrZXkgdG8uIE1heSBub3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4gTWF5IG5vdCBjb250YWluIHRoZSBwYXRoIGVsZW1lbnQgJy4uJy4gTWF5IG5vdCBzdGFydCB3aXRoIHRoZSBzdHJpbmcgJy4uJy5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuS2V5VG9QYXRoI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxufVxuXG4vKipcbiAqIERvd253YXJkQVBJVm9sdW1lRmlsZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBwb2QgZmllbGRcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Eb3dud2FyZEFQSVZvbHVtZUZpbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3dud2FyZEFwaVZvbHVtZUZpbGUge1xuICAvKipcbiAgICogUmVxdWlyZWQ6IFNlbGVjdHMgYSBmaWVsZCBvZiB0aGUgcG9kOiBvbmx5IGFubm90YXRpb25zLCBsYWJlbHMsIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Eb3dud2FyZEFQSVZvbHVtZUZpbGUjZmllbGRSZWZcbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkUmVmPzogT2JqZWN0RmllbGRTZWxlY3RvcjtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IG1vZGUgYml0cyB0byB1c2Ugb24gdGhpcyBmaWxlLCBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAwNzc3LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgdm9sdW1lIGRlZmF1bHRNb2RlIHdpbGwgYmUgdXNlZC4gVGhpcyBtaWdodCBiZSBpbiBjb25mbGljdCB3aXRoIG90aGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGZpbGUgbW9kZSwgbGlrZSBmc0dyb3VwLCBhbmQgdGhlIHJlc3VsdCBjYW4gYmUgb3RoZXIgbW9kZSBiaXRzIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRG93bndhcmRBUElWb2x1bWVGaWxlI21vZGVcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkOiBQYXRoIGlzICB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQuIE11c3Qgbm90IGJlIGFic29sdXRlIG9yIGNvbnRhaW4gdGhlICcuLicgcGF0aC4gTXVzdCBiZSB1dGYtOCBlbmNvZGVkLiBUaGUgZmlyc3QgaXRlbSBvZiB0aGUgcmVsYXRpdmUgcGF0aCBtdXN0IG5vdCBzdGFydCB3aXRoICcuLidcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRG93bndhcmRBUElWb2x1bWVGaWxlI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogU2VsZWN0cyBhIHJlc291cmNlIG9mIHRoZSBjb250YWluZXI6IG9ubHkgcmVzb3VyY2VzIGxpbWl0cyBhbmQgcmVxdWVzdHMgKGxpbWl0cy5jcHUsIGxpbWl0cy5tZW1vcnksIHJlcXVlc3RzLmNwdSBhbmQgcmVxdWVzdHMubWVtb3J5KSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRG93bndhcmRBUElWb2x1bWVGaWxlI3Jlc291cmNlRmllbGRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlRmllbGRSZWY/OiBSZXNvdXJjZUZpZWxkU2VsZWN0b3I7XG5cbn1cblxuLyoqXG4gKiBQcm9qZWN0aW9uIHRoYXQgbWF5IGJlIHByb2plY3RlZCBhbG9uZyB3aXRoIG90aGVyIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXNcbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWVQcm9qZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lUHJvamVjdGlvbiB7XG4gIC8qKlxuICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmlnTWFwIGRhdGEgdG8gcHJvamVjdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWVQcm9qZWN0aW9uI2NvbmZpZ01hcFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnTWFwPzogQ29uZmlnTWFwUHJvamVjdGlvbjtcblxuICAvKipcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRvd253YXJkQVBJIGRhdGEgdG8gcHJvamVjdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWVQcm9qZWN0aW9uI2Rvd253YXJkQVBJXG4gICAqL1xuICByZWFkb25seSBkb3dud2FyZEFQST86IERvd253YXJkQXBpUHJvamVjdGlvbjtcblxuICAvKipcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlY3JldCBkYXRhIHRvIHByb2plY3RcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuVm9sdW1lUHJvamVjdGlvbiNzZWNyZXRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldD86IFNlY3JldFByb2plY3Rpb247XG5cbiAgLyoqXG4gICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlQWNjb3VudFRva2VuIGRhdGEgdG8gcHJvamVjdFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Wb2x1bWVQcm9qZWN0aW9uI3NlcnZpY2VBY2NvdW50VG9rZW5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VBY2NvdW50VG9rZW4/OiBTZXJ2aWNlQWNjb3VudFRva2VuUHJvamVjdGlvbjtcblxufVxuXG4vKipcbiAqIEhUVFBJbmdyZXNzUGF0aCBhc3NvY2lhdGVzIGEgcGF0aCByZWdleCB3aXRoIGEgYmFja2VuZC4gSW5jb21pbmcgdXJscyBtYXRjaGluZyB0aGUgcGF0aCBhcmUgZm9yd2FyZGVkIHRvIHRoZSBiYWNrZW5kLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSFRUUEluZ3Jlc3NQYXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEluZ3Jlc3NQYXRoIHtcbiAgLyoqXG4gICAqIEJhY2tlbmQgZGVmaW5lcyB0aGUgcmVmZXJlbmNlZCBzZXJ2aWNlIGVuZHBvaW50IHRvIHdoaWNoIHRoZSB0cmFmZmljIHdpbGwgYmUgZm9yd2FyZGVkIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MWJldGExLkhUVFBJbmdyZXNzUGF0aCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBJbmdyZXNzQmFja2VuZDtcblxuICAvKipcbiAgICogUGF0aCBpcyBhbiBleHRlbmRlZCBQT1NJWCByZWdleCBhcyBkZWZpbmVkIGJ5IElFRUUgU3RkIDEwMDMuMSwgKGkuZSB0aGlzIGZvbGxvd3MgdGhlIGVncmVwL3VuaXggc3ludGF4LCBub3QgdGhlIHBlcmwgc3ludGF4KSBtYXRjaGVkIGFnYWluc3QgdGhlIHBhdGggb2YgYW4gaW5jb21pbmcgcmVxdWVzdC4gQ3VycmVudGx5IGl0IGNhbiBjb250YWluIGNoYXJhY3RlcnMgZGlzYWxsb3dlZCBmcm9tIHRoZSBjb252ZW50aW9uYWwgXCJwYXRoXCIgcGFydCBvZiBhIFVSTCBhcyBkZWZpbmVkIGJ5IFJGQyAzOTg2LiBQYXRocyBtdXN0IGJlZ2luIHdpdGggYSAnLycuIElmIHVuc3BlY2lmaWVkLCB0aGUgcGF0aCBkZWZhdWx0cyB0byBhIGNhdGNoIGFsbCBzZW5kaW5nIHRyYWZmaWMgdG8gdGhlIGJhY2tlbmQuXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxYmV0YTEuSFRUUEluZ3Jlc3NQYXRoI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBJUEJsb2NrIGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgQ0lEUiAoRXguIFwiMTkyLjE2OC4xLjEvMjRcIikgdGhhdCBpcyBhbGxvd2VkIHRvIHRoZSBwb2RzIG1hdGNoZWQgYnkgYSBOZXR3b3JrUG9saWN5U3BlYydzIHBvZFNlbGVjdG9yLiBUaGUgZXhjZXB0IGVudHJ5IGRlc2NyaWJlcyBDSURScyB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgd2l0aGluIHRoaXMgcnVsZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5JUEJsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBCbG9jayB7XG4gIC8qKlxuICAgKiBDSURSIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSVAgQmxvY2sgVmFsaWQgZXhhbXBsZXMgYXJlIFwiMTkyLjE2OC4xLjEvMjRcIlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkubmV0d29ya2luZy52MS5JUEJsb2NrI2NpZHJcbiAgICovXG4gIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcblxuICAvKipcbiAgICogRXhjZXB0IGlzIGEgc2xpY2Ugb2YgQ0lEUnMgdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIHdpdGhpbiBhbiBJUCBCbG9jayBWYWxpZCBleGFtcGxlcyBhcmUgXCIxOTIuMTY4LjEuMS8yNFwiIEV4Y2VwdCB2YWx1ZXMgd2lsbCBiZSByZWplY3RlZCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZSBDSURSIHJhbmdlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5uZXR3b3JraW5nLnYxLklQQmxvY2sjZXhjZXB0XG4gICAqL1xuICByZWFkb25seSBleGNlcHQ/OiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIFNlbGVjdHMgYSBrZXkgZnJvbSBhIENvbmZpZ01hcC5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBLZXlTZWxlY3RvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ01hcEtleVNlbGVjdG9yIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gc2VsZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBLZXlTZWxlY3RvciNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwS2V5U2VsZWN0b3IjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBDb25maWdNYXAgb3IgaXRzIGtleSBtdXN0IGJlIGRlZmluZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwS2V5U2VsZWN0b3Ijb3B0aW9uYWxcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIE9iamVjdEZpZWxkU2VsZWN0b3Igc2VsZWN0cyBhbiBBUElWZXJzaW9uZWQgZmllbGQgb2YgYW4gb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk9iamVjdEZpZWxkU2VsZWN0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RGaWVsZFNlbGVjdG9yIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIHNjaGVtYSB0aGUgRmllbGRQYXRoIGlzIHdyaXR0ZW4gaW4gdGVybXMgb2YsIGRlZmF1bHRzIHRvIFwidjFcIi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuT2JqZWN0RmllbGRTZWxlY3RvciNhcGlWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBmaWVsZCB0byBzZWxlY3QgaW4gdGhlIHNwZWNpZmllZCBBUEkgdmVyc2lvbi5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuT2JqZWN0RmllbGRTZWxlY3RvciNmaWVsZFBhdGhcbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkUGF0aDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUmVzb3VyY2VGaWVsZFNlbGVjdG9yIHJlcHJlc2VudHMgY29udGFpbmVyIHJlc291cmNlcyAoY3B1LCBtZW1vcnkpIGFuZCB0aGVpciBvdXRwdXQgZm9ybWF0XG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuUmVzb3VyY2VGaWVsZFNlbGVjdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VGaWVsZFNlbGVjdG9yIHtcbiAgLyoqXG4gICAqIENvbnRhaW5lciBuYW1lOiByZXF1aXJlZCBmb3Igdm9sdW1lcywgb3B0aW9uYWwgZm9yIGVudiB2YXJzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlRmllbGRTZWxlY3RvciNjb250YWluZXJOYW1lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGV4cG9zZWQgcmVzb3VyY2VzLCBkZWZhdWx0cyB0byBcIjFcIlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5SZXNvdXJjZUZpZWxkU2VsZWN0b3IjZGl2aXNvclxuICAgKi9cbiAgcmVhZG9ubHkgZGl2aXNvcj86IFF1YW50aXR5O1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlZDogcmVzb3VyY2UgdG8gc2VsZWN0XG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlJlc291cmNlRmllbGRTZWxlY3RvciNyZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2U6IHN0cmluZztcblxufVxuXG4vKipcbiAqIFNlY3JldEtleVNlbGVjdG9yIHNlbGVjdHMgYSBrZXkgb2YgYSBTZWNyZXQuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0S2V5U2VsZWN0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRLZXlTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBUaGUga2V5IG9mIHRoZSBzZWNyZXQgdG8gc2VsZWN0IGZyb20uICBNdXN0IGJlIGEgdmFsaWQgc2VjcmV0IGtleS5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0S2V5U2VsZWN0b3Ija2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI25hbWVzXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldEtleVNlbGVjdG9yI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgU2VjcmV0IG9yIGl0cyBrZXkgbXVzdCBiZSBkZWZpbmVkXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlY3JldEtleVNlbGVjdG9yI29wdGlvbmFsXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBFeHRlcm5hbERvY3VtZW50YXRpb24gYWxsb3dzIHJlZmVyZW5jaW5nIGFuIGV4dGVybmFsIHJlc291cmNlIGZvciBleHRlbmRlZCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5FeHRlcm5hbERvY3VtZW50YXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbERvY3VtZW50YXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpZXh0ZW5zaW9ucy1hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MWJldGExLkV4dGVybmFsRG9jdW1lbnRhdGlvbiNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaWV4dGVuc2lvbnMtYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjFiZXRhMS5FeHRlcm5hbERvY3VtZW50YXRpb24jdXJsXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVTZWxlY3RvclJlcXVpcmVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVNlbGVjdG9yUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU2VsZWN0b3JSZXF1aXJlbWVudCNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Ob2RlU2VsZWN0b3JSZXF1aXJlbWVudCNvcGVyYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3I6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLk5vZGVTZWxlY3RvclJlcXVpcmVtZW50I3ZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzPzogc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBIVFRQSGVhZGVyIGRlc2NyaWJlcyBhIGN1c3RvbSBoZWFkZXIgdG8gYmUgdXNlZCBpbiBIVFRQIHByb2Jlc1xuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkhUVFBIZWFkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwSGVhZGVyIHtcbiAgLyoqXG4gICAqIFRoZSBoZWFkZXIgZmllbGQgbmFtZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5IVFRQSGVhZGVyI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhlYWRlciBmaWVsZCB2YWx1ZVxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5IVFRQSGVhZGVyI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQWRhcHRzIGEgQ29uZmlnTWFwIGludG8gYSBwcm9qZWN0ZWQgdm9sdW1lLlxuXG5UaGUgY29udGVudHMgb2YgdGhlIHRhcmdldCBDb25maWdNYXAncyBEYXRhIGZpZWxkIHdpbGwgYmUgcHJlc2VudGVkIGluIGEgcHJvamVjdGVkIHZvbHVtZSBhcyBmaWxlcyB1c2luZyB0aGUga2V5cyBpbiB0aGUgRGF0YSBmaWVsZCBhcyB0aGUgZmlsZSBuYW1lcywgdW5sZXNzIHRoZSBpdGVtcyBlbGVtZW50IGlzIHBvcHVsYXRlZCB3aXRoIHNwZWNpZmljIG1hcHBpbmdzIG9mIGtleXMgdG8gcGF0aHMuIE5vdGUgdGhhdCB0aGlzIGlzIGlkZW50aWNhbCB0byBhIGNvbmZpZ21hcCB2b2x1bWUgc291cmNlIHdpdGhvdXQgdGhlIGRlZmF1bHQgbW9kZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBQcm9qZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFwUHJvamVjdGlvbiB7XG4gIC8qKlxuICAgKiBJZiB1bnNwZWNpZmllZCwgZWFjaCBrZXktdmFsdWUgcGFpciBpbiB0aGUgRGF0YSBmaWVsZCBvZiB0aGUgcmVmZXJlbmNlZCBDb25maWdNYXAgd2lsbCBiZSBwcm9qZWN0ZWQgaW50byB0aGUgdm9sdW1lIGFzIGEgZmlsZSB3aG9zZSBuYW1lIGlzIHRoZSBrZXkgYW5kIGNvbnRlbnQgaXMgdGhlIHZhbHVlLiBJZiBzcGVjaWZpZWQsIHRoZSBsaXN0ZWQga2V5cyB3aWxsIGJlIHByb2plY3RlZCBpbnRvIHRoZSBzcGVjaWZpZWQgcGF0aHMsIGFuZCB1bmxpc3RlZCBrZXlzIHdpbGwgbm90IGJlIHByZXNlbnQuIElmIGEga2V5IGlzIHNwZWNpZmllZCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiB0aGUgQ29uZmlnTWFwLCB0aGUgdm9sdW1lIHNldHVwIHdpbGwgZXJyb3IgdW5sZXNzIGl0IGlzIG1hcmtlZCBvcHRpb25hbC4gUGF0aHMgbXVzdCBiZSByZWxhdGl2ZSBhbmQgbWF5IG5vdCBjb250YWluIHRoZSAnLi4nIHBhdGggb3Igc3RhcnQgd2l0aCAnLi4nLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5Db25maWdNYXBQcm9qZWN0aW9uI2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtcz86IEtleVRvUGF0aFtdO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwUHJvamVjdGlvbiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIENvbmZpZ01hcCBvciBpdHMga2V5cyBtdXN0IGJlIGRlZmluZWRcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuQ29uZmlnTWFwUHJvamVjdGlvbiNvcHRpb25hbFxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uYWw/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBkb3dud2FyZCBBUEkgaW5mbyBmb3IgcHJvamVjdGluZyBpbnRvIGEgcHJvamVjdGVkIHZvbHVtZS4gTm90ZSB0aGF0IHRoaXMgaXMgaWRlbnRpY2FsIHRvIGEgZG93bndhcmRBUEkgdm9sdW1lIHNvdXJjZSB3aXRob3V0IHRoZSBkZWZhdWx0IG1vZGUuXG4gKlxuICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuRG93bndhcmRBUElQcm9qZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG93bndhcmRBcGlQcm9qZWN0aW9uIHtcbiAgLyoqXG4gICAqIEl0ZW1zIGlzIGEgbGlzdCBvZiBEb3dud2FyZEFQSVZvbHVtZSBmaWxlXG4gICAqXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLkRvd253YXJkQVBJUHJvamVjdGlvbiNpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXM/OiBEb3dud2FyZEFwaVZvbHVtZUZpbGVbXTtcblxufVxuXG4vKipcbiAqIEFkYXB0cyBhIHNlY3JldCBpbnRvIGEgcHJvamVjdGVkIHZvbHVtZS5cblxuVGhlIGNvbnRlbnRzIG9mIHRoZSB0YXJnZXQgU2VjcmV0J3MgRGF0YSBmaWVsZCB3aWxsIGJlIHByZXNlbnRlZCBpbiBhIHByb2plY3RlZCB2b2x1bWUgYXMgZmlsZXMgdXNpbmcgdGhlIGtleXMgaW4gdGhlIERhdGEgZmllbGQgYXMgdGhlIGZpbGUgbmFtZXMuIE5vdGUgdGhhdCB0aGlzIGlzIGlkZW50aWNhbCB0byBhIHNlY3JldCB2b2x1bWUgc291cmNlIHdpdGhvdXQgdGhlIGRlZmF1bHQgbW9kZS5cbiAqXG4gKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRQcm9qZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0UHJvamVjdGlvbiB7XG4gIC8qKlxuICAgKiBJZiB1bnNwZWNpZmllZCwgZWFjaCBrZXktdmFsdWUgcGFpciBpbiB0aGUgRGF0YSBmaWVsZCBvZiB0aGUgcmVmZXJlbmNlZCBTZWNyZXQgd2lsbCBiZSBwcm9qZWN0ZWQgaW50byB0aGUgdm9sdW1lIGFzIGEgZmlsZSB3aG9zZSBuYW1lIGlzIHRoZSBrZXkgYW5kIGNvbnRlbnQgaXMgdGhlIHZhbHVlLiBJZiBzcGVjaWZpZWQsIHRoZSBsaXN0ZWQga2V5cyB3aWxsIGJlIHByb2plY3RlZCBpbnRvIHRoZSBzcGVjaWZpZWQgcGF0aHMsIGFuZCB1bmxpc3RlZCBrZXlzIHdpbGwgbm90IGJlIHByZXNlbnQuIElmIGEga2V5IGlzIHNwZWNpZmllZCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiB0aGUgU2VjcmV0LCB0aGUgdm9sdW1lIHNldHVwIHdpbGwgZXJyb3IgdW5sZXNzIGl0IGlzIG1hcmtlZCBvcHRpb25hbC4gUGF0aHMgbXVzdCBiZSByZWxhdGl2ZSBhbmQgbWF5IG5vdCBjb250YWluIHRoZSAnLi4nIHBhdGggb3Igc3RhcnQgd2l0aCAnLi4nLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRQcm9qZWN0aW9uI2l0ZW1zXG4gICAqL1xuICByZWFkb25seSBpdGVtcz86IEtleVRvUGF0aFtdO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXNcbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VjcmV0UHJvamVjdGlvbiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIFNlY3JldCBvciBpdHMga2V5IG11c3QgYmUgZGVmaW5lZFxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZWNyZXRQcm9qZWN0aW9uI29wdGlvbmFsXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBTZXJ2aWNlQWNjb3VudFRva2VuUHJvamVjdGlvbiByZXByZXNlbnRzIGEgcHJvamVjdGVkIHNlcnZpY2UgYWNjb3VudCB0b2tlbiB2b2x1bWUuIFRoaXMgcHJvamVjdGlvbiBjYW4gYmUgdXNlZCB0byBpbnNlcnQgYSBzZXJ2aWNlIGFjY291bnQgdG9rZW4gaW50byB0aGUgcG9kcyBydW50aW1lIGZpbGVzeXN0ZW0gZm9yIHVzZSBhZ2FpbnN0IEFQSXMgKEt1YmVybmV0ZXMgQVBJIFNlcnZlciBvciBvdGhlcndpc2UpLlxuICpcbiAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50VG9rZW5Qcm9qZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUFjY291bnRUb2tlblByb2plY3Rpb24ge1xuICAvKipcbiAgICogQXVkaWVuY2UgaXMgdGhlIGludGVuZGVkIGF1ZGllbmNlIG9mIHRoZSB0b2tlbi4gQSByZWNpcGllbnQgb2YgYSB0b2tlbiBtdXN0IGlkZW50aWZ5IGl0c2VsZiB3aXRoIGFuIGlkZW50aWZpZXIgc3BlY2lmaWVkIGluIHRoZSBhdWRpZW5jZSBvZiB0aGUgdG9rZW4sIGFuZCBvdGhlcndpc2Ugc2hvdWxkIHJlamVjdCB0aGUgdG9rZW4uIFRoZSBhdWRpZW5jZSBkZWZhdWx0cyB0byB0aGUgaWRlbnRpZmllciBvZiB0aGUgYXBpc2VydmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIGlvLms4cy5hcGkuY29yZS52MS5TZXJ2aWNlQWNjb3VudFRva2VuUHJvamVjdGlvbiNhdWRpZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaWVuY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4cGlyYXRpb25TZWNvbmRzIGlzIHRoZSByZXF1ZXN0ZWQgZHVyYXRpb24gb2YgdmFsaWRpdHkgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0b2tlbi4gQXMgdGhlIHRva2VuIGFwcHJvYWNoZXMgZXhwaXJhdGlvbiwgdGhlIGt1YmVsZXQgdm9sdW1lIHBsdWdpbiB3aWxsIHByb2FjdGl2ZWx5IHJvdGF0ZSB0aGUgc2VydmljZSBhY2NvdW50IHRva2VuLiBUaGUga3ViZWxldCB3aWxsIHN0YXJ0IHRyeWluZyB0byByb3RhdGUgdGhlIHRva2VuIGlmIHRoZSB0b2tlbiBpcyBvbGRlciB0aGFuIDgwIHBlcmNlbnQgb2YgaXRzIHRpbWUgdG8gbGl2ZSBvciBpZiB0aGUgdG9rZW4gaXMgb2xkZXIgdGhhbiAyNCBob3Vycy5EZWZhdWx0cyB0byAxIGhvdXIgYW5kIG11c3QgYmUgYXQgbGVhc3QgMTAgbWludXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMSBob3VyIGFuZCBtdXN0IGJlIGF0IGxlYXN0IDEwIG1pbnV0ZXMuXG4gICAqIEBzY2hlbWEgaW8uazhzLmFwaS5jb3JlLnYxLlNlcnZpY2VBY2NvdW50VG9rZW5Qcm9qZWN0aW9uI2V4cGlyYXRpb25TZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUGF0aCBpcyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgbW91bnQgcG9pbnQgb2YgdGhlIGZpbGUgdG8gcHJvamVjdCB0aGUgdG9rZW4gaW50by5cbiAgICpcbiAgICogQHNjaGVtYSBpby5rOHMuYXBpLmNvcmUudjEuU2VydmljZUFjY291bnRUb2tlblByb2plY3Rpb24jcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG59XG5cbiJdfQ==