cdk-iam-floyd
Version:
AWS IAM policy statement generator with fluent interface for AWS CDK
902 lines • 82 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Healthlake = void 0;
const shared_1 = require("../../shared");
/**
* Statement provider for service [healthlake](https://docs.aws.amazon.com/service-authorization/latest/reference/list_healthlake.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
class Healthlake extends shared_1.PolicyStatement {
/**
* Grants permission to cancel an on going FHIR Export job with Delete
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/export-datastore-rest.html
*/
toCancelFHIRExportJobWithDelete() {
return this.to('CancelFHIRExportJobWithDelete');
}
/**
* Grants permission to allow customers to indicate to a Producer that the Consumer does not have any more changes to be made to the Attribution List
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-confirm-attribution-list.html
*/
toConfirmAttributionList() {
return this.to('ConfirmAttributionList');
}
/**
* Grants permission to create a data transformation profile
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsResourceTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_CreateDataTransformationProfile.html
*/
toCreateDataTransformationProfile() {
return this.to('CreateDataTransformationProfile');
}
/**
* Grants permission to create a datastore that can ingest and export FHIR data
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsResourceTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_CreateFHIRDatastore.html
*/
toCreateFHIRDatastore() {
return this.to('CreateFHIRDatastore');
}
/**
* Grants permission to create resource
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toCreateResource() {
return this.to('CreateResource');
}
/**
* Grants permission to delete a data transformation profile and all its versions
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DeleteDataTransformationProfile.html
*/
toDeleteDataTransformationProfile() {
return this.to('DeleteDataTransformationProfile');
}
/**
* Grants permission to delete a datastore
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DeleteFHIRDatastore.html
*/
toDeleteFHIRDatastore() {
return this.to('DeleteFHIRDatastore');
}
/**
* Grants permission to delete resource
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toDeleteResource() {
return this.to('DeleteResource');
}
/**
* Grants permission to describe a data transformation job
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DescribeDataTransformationJob.html
*/
toDescribeDataTransformationJob() {
return this.to('DescribeDataTransformationJob');
}
/**
* Grants permission to describe a FHIR Bulk Delete Job
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-delete.html
*/
toDescribeFHIRBulkDeleteJob() {
return this.to('DescribeFHIRBulkDeleteJob');
}
/**
* Grants permission to describe a FHIR Bulk Member Match Job
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-member-match.html
*/
toDescribeFHIRBulkMemberMatchJob() {
return this.to('DescribeFHIRBulkMemberMatchJob');
}
/**
* Grants permission to get the properties associated with the FHIR datastore, including the datastore ID, datastore ARN, datastore name, datastore status, created at, datastore type version, and datastore endpoint
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DescribeFHIRDatastore.html
*/
toDescribeFHIRDatastore() {
return this.to('DescribeFHIRDatastore');
}
/**
* Grants permission to display the properties of a FHIR export job, including the ID, ARN, name, and the status of the datastore
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DescribeFHIRExportJob.html
*/
toDescribeFHIRExportJob() {
return this.to('DescribeFHIRExportJob');
}
/**
* Grants permission to display the properties of a FHIR export job, including the ID, ARN, name, and the status of the datastore with Get
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/export-datastore-rest.html
*/
toDescribeFHIRExportJobWithGet() {
return this.to('DescribeFHIRExportJobWithGet');
}
/**
* Grants permission to display the properties of a FHIR import job, including the ID, ARN, name, and the status of the datastore
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DescribeFHIRImportJob.html
*/
toDescribeFHIRImportJob() {
return this.to('DescribeFHIRImportJob');
}
/**
* Grants permission to search and expand ValueSet resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-expand.html
*/
toExpandValueSetWithGet() {
return this.to('ExpandValueSetWithGet');
}
/**
* Grants permission to search and expand ValueSet resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-expand.html
*/
toExpandValueSetWithPost() {
return this.to('ExpandValueSetWithPost');
}
/**
* Grants permission to generate a clinical document resource
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-document.html
*/
toGenerateDocumentWithGet() {
return this.to('GenerateDocumentWithGet');
}
/**
* Grants permission to generate a clinical document resource
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-document.html
*/
toGenerateDocumentWithPost() {
return this.to('GenerateDocumentWithPost');
}
/**
* Grants permission to get the capabilities of a FHIR datastore
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toGetCapabilities() {
return this.to('GetCapabilities');
}
/**
* Grants permission to retrieve a data transformation profile and its content
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_GetDataTransformationProfile.html
*/
toGetDataTransformationProfile() {
return this.to('GetDataTransformationProfile');
}
/**
* Grants permission to access exported files from a FHIR Export job initiated with Get
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/export-datastore-rest.html
*/
toGetExportedFile() {
return this.to('GetExportedFile');
}
/**
* Grants permission to read resource history
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toGetHistoryByResourceId() {
return this.to('GetHistoryByResourceId');
}
/**
* Grants permission to inquire about the status of a prior authorization Claim
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-inquire.html
*/
toInquirePreAuthClaim() {
return this.to('InquirePreAuthClaim');
}
/**
* Grants permission to list data transformation jobs in the account
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListDataTransformationJobs.html
*/
toListDataTransformationJobs() {
return this.to('ListDataTransformationJobs');
}
/**
* Grants permission to list all versions of a data transformation profile
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListDataTransformationProfileVersions.html
*/
toListDataTransformationProfileVersions() {
return this.to('ListDataTransformationProfileVersions');
}
/**
* Grants permission to list data transformation profiles in the account
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListDataTransformationProfiles.html
*/
toListDataTransformationProfiles() {
return this.to('ListDataTransformationProfiles');
}
/**
* Grants permission to list all FHIR datastores that are in the user's account, regardless of datastore status
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListFHIRDatastores.html
*/
toListFHIRDatastores() {
return this.to('ListFHIRDatastores');
}
/**
* Grants permission to get a list of export jobs for the specified datastore
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListFHIRExportJobs.html
*/
toListFHIRExportJobs() {
return this.to('ListFHIRExportJobs');
}
/**
* Grants permission to get a list of import jobs for the specified datastore
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListFHIRImportJobs.html
*/
toListFHIRImportJobs() {
return this.to('ListFHIRImportJobs');
}
/**
* Grants permission to get a list of tags for the specified datastore
*
* Access Level: List
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_ListTagsForResource.html
*/
toListTagsForResource() {
return this.to('ListTagsForResource');
}
/**
* Grants permission to retrieve Codes for a CodeSystem resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-lookup.html
*/
toLookupCodeSystemWithGet() {
return this.to('LookupCodeSystemWithGet');
}
/**
* Grants permission to retrieve Codes for a CodeSystem resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-lookup.html
*/
toLookupCodeSystemWithPost() {
return this.to('LookupCodeSystemWithPost');
}
/**
* Grants permission to attribute a member with a specific provider group
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-member-add.html
*/
toMemberAdd() {
return this.to('MemberAdd');
}
/**
* Grants permission to enable cross-system patient matching
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-member-match.html
*/
toMemberMatch() {
return this.to('MemberMatch');
}
/**
* Grants permission to remove a member from a group
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-member-remove.html
*/
toMemberRemove() {
return this.to('MemberRemove');
}
/**
* Grants permission to patch a resource
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/managing-fhir-resources-patch.html
*/
toPatchResource() {
return this.to('PatchResource');
}
/**
* Grants permission to bundle multiple resource operations
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toProcessBundle() {
return this.to('ProcessBundle');
}
/**
* Grants permission to publish a new immutable version of a data transformation profile
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_PublishDataTransformationProfile.html
*/
toPublishDataTransformationProfile() {
return this.to('PublishDataTransformationProfile');
}
/**
* Grants permission to retrieve Questionnaire packages with dependency Library and ValueSet resources
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-questionnaire-package.html
*/
toQuestionnairePackage() {
return this.to('QuestionnairePackage');
}
/**
* Grants permission to read resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toReadResource() {
return this.to('ReadResource');
}
/**
* Grants permission to retrieve member attribution status
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-attribution-status.html
*/
toRetrieveAttributionStatus() {
return this.to('RetrieveAttributionStatus');
}
/**
* Grants permission to search all resources related to a patient
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/search-healthlake.html
*/
toSearchEverything() {
return this.to('SearchEverything');
}
/**
* Grants permission to search resources with GET method
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/search-healthlake.html
*/
toSearchWithGet() {
return this.to('SearchWithGet');
}
/**
* Grants permission to search resources with POST method
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/search-healthlake.html
*/
toSearchWithPost() {
return this.to('SearchWithPost');
}
/**
* Grants permission to start an asynchronous data transformation job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_StartDataTransformationJob.html
*/
toStartDataTransformationJob() {
return this.to('StartDataTransformationJob');
}
/**
* Grants permission to begin a FHIR Bulk Delete Job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-delete.html
*/
toStartFHIRBulkDeleteJob() {
return this.to('StartFHIRBulkDeleteJob');
}
/**
* Grants permission to begin a FHIR Bulk Member Match Job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-member-match.html
*/
toStartFHIRBulkMemberMatchJob() {
return this.to('StartFHIRBulkMemberMatchJob');
}
/**
* Grants permission to begin a FHIR Export job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_StartFHIRExportJob.html
*/
toStartFHIRExportJob() {
return this.to('StartFHIRExportJob');
}
/**
* Grants permission to begin a FHIR Export job with Get
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/export-datastore-rest.html
*/
toStartFHIRExportJobWithGet() {
return this.to('StartFHIRExportJobWithGet');
}
/**
* Grants permission to begin a FHIR Export job with Post
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/export-datastore-rest.html
*/
toStartFHIRExportJobWithPost() {
return this.to('StartFHIRExportJobWithPost');
}
/**
* Grants permission to begin a FHIR Import job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_StartFHIRImportJob.html
*/
toStartFHIRImportJob() {
return this.to('StartFHIRImportJob');
}
/**
* Grants permission to submit a prior authorization Claim request
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-submit.html
*/
toSubmitPreAuthClaim() {
return this.to('SubmitPreAuthClaim');
}
/**
* Grants permission to add tags to a datastore
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_TagResource.html
*/
toTagResource() {
return this.to('TagResource');
}
/**
* Grants permission to perform a synchronous data transformation
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/data-transformation-getting-started-sdk.html
*/
toTransformData() {
return this.to('TransformData');
}
/**
* Grants permission to translate a code from one value set to another using a ConceptMap resource with GET method
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-translate.html
*/
toTranslateConceptMapWithGet() {
return this.to('TranslateConceptMapWithGet');
}
/**
* Grants permission to translate a code from one value set to another using a ConceptMap resource with POST method
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-translate.html
*/
toTranslateConceptMapWithPost() {
return this.to('TranslateConceptMapWithPost');
}
/**
* Grants permission to remove tags associated with a datastore
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_UntagResource.html
*/
toUntagResource() {
return this.to('UntagResource');
}
/**
* Grants permission to update the draft version of a data transformation profile
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_UpdateDataTransformationProfile.html
*/
toUpdateDataTransformationProfile() {
return this.to('UpdateDataTransformationProfile');
}
/**
* Grants permission to update the configuration of a datastore
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_UpdateFHIRDatastore.html
*/
toUpdateFHIRDatastore() {
return this.to('UpdateFHIRDatastore');
}
/**
* Grants permission to update a data transformation profile using the AI agent
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_UpdateProfileWithAgent.html
*/
toUpdateProfileWithAgent() {
return this.to('UpdateProfileWithAgent');
}
/**
* Grants permission to update resource
*
* Access Level: Write
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toUpdateResource() {
return this.to('UpdateResource');
}
/**
* Grants permission to validate a resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-validate.html
*/
toValidateResource() {
return this.to('ValidateResource');
}
/**
* Grants permission to validate source data against format specifications
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/data-transformation-features.html
*/
toValidateSource() {
return this.to('ValidateSource');
}
/**
* Grants permission to read version of a resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/healthlake/latest/devguide/crud-healthlake.html
*/
toVersionReadResource() {
return this.to('VersionReadResource');
}
/**
* Adds a resource of type dataTransformationProfile to the statement
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DataTransformationProfileSummary.html
*
* @param profileId - Identifier for the profileId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onDataTransformationProfile(profileId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:healthlake:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:dataTransformationProfile/${profileId}`);
}
/**
* Adds a resource of type datastore to the statement
*
* https://docs.aws.amazon.com/healthlake/latest/APIReference/API_DatastoreProperties.html
*
* @param datastoreId - Identifier for the datastoreId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onDatastore(datastoreId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:healthlake:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:datastore/fhir/${datastoreId}`);
}
/**
* Filters access by the presence of tag key-value pairs in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
*
* Applies to actions:
* - .toCreateDataTransformationProfile()
* - .toCreateFHIRDatastore()
* - .toTagResource()
*
* @param tagKey The tag key to check
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsRequestTag(tagKey, value, operator) {
return this.if(`aws:RequestTag/${tagKey}`, value, operator ?? 'StringLike');
}
/**
* Filters access by the presence of tag key-value pairs attached to the resource
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
*
* Applies to actions:
* - .toCancelFHIRExportJobWithDelete()
* - .toConfirmAttributionList()
* - .toCreateDataTransformationProfile()
* - .toCreateFHIRDatastore()
* - .toCreateResource()
* - .toDeleteDataTransformationProfile()
* - .toDeleteFHIRDatastore()
* - .toDeleteResource()
* - .toDescribeFHIRBulkDeleteJob()
* - .toDescribeFHIRBulkMemberMatchJob()
* - .toDescribeFHIRDatastore()
* - .toDescribeFHIRExportJob()
* - .toDescribeFHIRExportJobWithGet()
* - .toDescribeFHIRImportJob()
* - .toExpandValueSetWithGet()
* - .toExpandValueSetWithPost()
* - .toGenerateDocumentWithGet()
* - .toGenerateDocumentWithPost()
* - .toGetCapabilities()
* - .toGetDataTransformationProfile()
* - .toGetExportedFile()
* - .toGetHistoryByResourceId()
* - .toInquirePreAuthClaim()
* - .toListDataTransformationProfileVersions()
* - .toListFHIRExportJobs()
* - .toListFHIRImportJobs()
* - .toListTagsForResource()
* - .toLookupCodeSystemWithGet()
* - .toLookupCodeSystemWithPost()
* - .toMemberAdd()
* - .toMemberMatch()
* - .toMemberRemove()
* - .toPatchResource()
* - .toProcessBundle()
* - .toPublishDataTransformationProfile()
* - .toQuestionnairePackage()
* - .toReadResource()
* - .toRetrieveAttributionStatus()
* - .toSearchEverything()
* - .toSearchWithGet()
* - .toSearchWithPost()
* - .toStartDataTransformationJob()
* - .toStartFHIRBulkDeleteJob()
* - .toStartFHIRBulkMemberMatchJob()
* - .toStartFHIRExportJob()
* - .toStartFHIRExportJobWithGet()
* - .toStartFHIRExportJobWithPost()
* - .toStartFHIRImportJob()
* - .toSubmitPreAuthClaim()
* - .toTagResource()
* - .toTransformData()
* - .toTranslateConceptMapWithGet()
* - .toTranslateConceptMapWithPost()
* - .toUntagResource()
* - .toUpdateDataTransformationProfile()
* - .toUpdateFHIRDatastore()
* - .toUpdateProfileWithAgent()
* - .toUpdateResource()
* - .toValidateResource()
* - .toVersionReadResource()
*
* Applies to resource types:
* - dataTransformationProfile
* - datastore
*
* @param tagKey The tag key to check
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsResourceTag(tagKey, value, operator) {
return this.if(`aws:ResourceTag/${tagKey}`, value, operator ?? 'StringLike');
}
/**
* Filters access by the presence of tag keys in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
*
* Applies to actions:
* - .toCreateDataTransformationProfile()
* - .toCreateFHIRDatastore()
* - .toTagResource()
* - .toUntagResource()
*
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsTagKeys(value, operator) {
return this.if(`aws:TagKeys`, value, operator ?? 'StringLike');
}
/**
* Statement provider for service [healthlake](https://docs.aws.amazon.com/service-authorization/latest/reference/list_healthlake.html).
*
*/
constructor(props) {
super(props);
this.servicePrefix = 'healthlake';
this.accessLevelList = {
Write: [
'CancelFHIRExportJobWithDelete',
'ConfirmAttributionList',
'CreateDataTransformationProfile',
'CreateFHIRDatastore',
'CreateResource',
'DeleteDataTransformationProfile',
'DeleteFHIRDatastore',
'DeleteResource',
'GenerateDocumentWithGet',
'GenerateDocumentWithPost',
'MemberAdd',
'MemberMatch',
'MemberRemove',
'PatchResource',
'ProcessBundle',
'PublishDataTransformationProfile',
'RetrieveAttributionStatus',
'StartDataTransformationJob',
'StartFHIRBulkDeleteJob',
'StartFHIRBulkMemberMatchJob',
'StartFHIRExportJob',
'StartFHIRExportJobWithGet',
'StartFHIRExportJobWithPost',
'StartFHIRImportJob',
'SubmitPreAuthClaim',
'TagResource',
'TransformData',
'UntagResource',
'UpdateDataTransformationProfile',
'UpdateFHIRDatastore',
'UpdateProfileWithAgent',
'UpdateResource'
],
Read: [
'DescribeDataTransformationJob',
'DescribeFHIRBulkDeleteJob',
'DescribeFHIRBulkMemberMatchJob',
'DescribeFHIRDatastore',
'DescribeFHIRExportJob',
'DescribeFHIRExportJobWithGet',
'DescribeFHIRImportJob',
'ExpandValueSetWithGet',
'ExpandValueSetWithPost',
'GetCapabilities',
'GetDataTransformationProfile',
'GetExportedFile',
'GetHistoryByResourceId',
'InquirePreAuthClaim',
'LookupCodeSystemWithGet',
'LookupCodeSystemWithPost',
'QuestionnairePackage',
'ReadResource',
'SearchEverything',
'SearchWithGet',
'SearchWithPost',
'TranslateConceptMapWithGet',
'TranslateConceptMapWithPost',
'ValidateResource',
'ValidateSource',
'VersionReadResource'
],
List: [
'ListDataTransformationJobs',
'ListDataTransformationProfileVersions',
'ListDataTransformationProfiles',
'ListFHIRDatastores',
'ListFHIRExportJobs',
'ListFHIRImportJobs',
'ListTagsForResource'
],
Tagging: [
'TagResource',
'UntagResource'
]
};
}
}
exports.Healthlake = Healthlake;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRobGFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlYWx0aGxha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBR3pEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSx3QkFBZTtJQUc3Qzs7Ozs7O09BTUc7SUFDSSwrQkFBK0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHdCQUF3QjtRQUM3QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxpQ0FBaUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlDQUFpQztRQUN0QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLCtCQUErQjtRQUNwQyxPQUFPLElBQUks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ZUFBZTtnQkFDZixlQUFlO2dCQUNmLGlDQUFpQztnQkFDakMscUJBQXFCO2dCQUNyQix3QkFBd0I7Z0JBQ3hCLGdCQUFnQjthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDSiwrQkFBK0I7Z0JBQy9CLDJCQUEyQjtnQkFDM0IsZ0NBQWdDO2dCQUNoQyx1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsOEJBQThCO2dCQUM5Qix1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsd0JBQXdCO2dCQUN4QixpQkFBaUI7Z0JBQ2pCLDhCQUE4QjtnQkFDOUIsaUJBQWlCO2dCQUNqQix3QkFBd0I7Z0JBQ3hCLHFCQUFxQjtnQkFDckIseUJBQXlCO2dCQUN6QiwwQkFBMEI7Z0JBQzFCLHNCQUFzQjtnQkFDdEIsY0FBYztnQkFDZCxrQkFBa0I7Z0JBQ2xCLGVBQWU7Z0JBQ2YsZ0JBQWdCO2dCQUNoQiw0QkFBNEI7Z0JBQzVCLDZCQUE2QjtnQkFDN0Isa0JBQWtCO2dCQUNsQixnQkFBZ0I7Z0JBQ2hCLHFCQUFxQjthQUN0QjtZQUNELElBQUksRUFBRTtnQkFDSiw0QkFBNEI7Z0JBQzVCLHVDQUF1QztnQkFDdkMsZ0NBQWdDO2dCQUNoQyxvQkFBb0I7Z0JBQ3BCLG9CQUFvQjtnQkFDcEIsb0JBQW9CO2dCQUNwQixxQkFBcUI7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQTZKRixDQUFDO0NBQ0Y7QUFsOEJELGdDQWs4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2hlYWx0aGxha2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2hlYWx0aGxha2UuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBIZWFsdGhsYWtlIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnaGVhbHRobGFrZSc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNhbmNlbCBhbiBvbiBnb2luZyBGSElSIEV4cG9ydCBqb2Igd2l0aCBEZWxldGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvZXhwb3J0LWRhdGFzdG9yZS1yZXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NhbmNlbEZISVJFeHBvcnRKb2JXaXRoRGVsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDYW5jZWxGSElSRXhwb3J0Sm9iV2l0aERlbGV0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFsbG93IGN1c3RvbWVycyB0byBpbmRpY2F0ZSB0byBhIFByb2R1Y2VyIHRoYXQgdGhlIENvbnN1bWVyIGRvZXMgbm90IGhhdmUgYW55IG1vcmUgY2hhbmdlcyB0byBiZSBtYWRlIHRvIHRoZSBBdHRyaWJ1dGlvbiBMaXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtY29uZmlybS1hdHRyaWJ1dGlvbi1saXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgZGF0YXN0b3JlIHRoYXQgY2FuIGluZ2VzdCBhbmQgZXhwb3J0IEZISVIgZGF0YVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVGSElSRGF0YXN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUZISVJEYXRhc3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUZISVJEYXRhc3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZSBhbmQgYWxsIGl0cyB2ZXJzaW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZUZISVJEYXRhc3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRkhJUkRhdGFzdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIGpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVEYXRhVHJhbnNmb3JtYXRpb25Kb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVEYXRhVHJhbnNmb3JtYXRpb25Kb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlRGF0YVRyYW5zZm9ybWF0aW9uSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgYSBGSElSIEJ1bGsgRGVsZXRlIEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtYnVsay1kZWxldGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlc2NyaWJlIGEgRkhJUiBCdWxrIE1lbWJlciBNYXRjaCBKb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWJ1bGstbWVtYmVyLW1hdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkJ1bGtNZW1iZXJNYXRjaEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSQnVsa01lbWJlck1hdGNoSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IHRoZSBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRkhJUiBkYXRhc3RvcmUsIGluY2x1ZGluZyB0aGUgZGF0YXN0b3JlIElELCBkYXRhc3RvcmUgQVJOLCBkYXRhc3RvcmUgbmFtZSwgZGF0YXN0b3JlIHN0YXR1cywgY3JlYXRlZCBhdCwgZGF0YXN0b3JlIHR5cGUgdmVyc2lvbiwgYW5kIGRhdGFzdG9yZSBlbmRwb2ludFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVGSElSRGF0YXN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSRGF0YXN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgcHJvcGVydGllcyBvZiBhIEZISVIgZXhwb3J0IGpvYiwgaW5jbHVkaW5nIHRoZSBJRCwgQVJOLCBuYW1lLCBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZUZISVJFeHBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJFeHBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIGEgRkhJUiBleHBvcnQgam9iLCBpbmNsdWRpbmcgdGhlIElELCBBUk4sIG5hbWUsIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBkYXRhc3RvcmUgd2l0aCBHZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iV2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSRXhwb3J0Sm9iV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgYSBGSElSIGltcG9ydCBqb2IsIGluY2x1ZGluZyB0aGUgSUQsIEFSTiwgbmFtZSwgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVGSElSSW1wb3J0Sm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkltcG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSSW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc2VhcmNoIGFuZCBleHBhbmQgVmFsdWVTZXQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWV4cGFuZC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9FeHBhbmRWYWx1ZVNldFdpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0V4cGFuZFZhbHVlU2V0V2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHNlYXJjaCBhbmQgZXhwYW5kIFZhbHVlU2V0IHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1leHBhbmQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRXhwYW5kVmFsdWVTZXRXaXRoUG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRXhwYW5kVmFsdWVTZXRXaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdlbmVyYXRlIGEgY2xpbmljYWwgZG9jdW1lbnQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1kb2N1bWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZW5lcmF0ZURvY3VtZW50V2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2VuZXJhdGVEb2N1bWVudFdpdGhHZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZW5lcmF0ZSBhIGNsaW5pY2FsIGRvY3VtZW50IHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtZG9jdW1lbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2VuZXJhdGVEb2N1bWVudFdpdGhQb3N0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZW5lcmF0ZURvY3VtZW50V2l0aFBvc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgdGhlIGNhcGFiaWxpdGllcyBvZiBhIEZISVIgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENhcGFiaWxpdGllcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q2FwYWJpbGl0aWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGUgYW5kIGl0cyBjb250ZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXREYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhY2Nlc3MgZXhwb3J0ZWQgZmlsZXMgZnJvbSBhIEZISVIgRXhwb3J0IGpvYiBpbml0aWF0ZWQgd2l0aCBHZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0RXhwb3J0ZWRGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRFeHBvcnRlZEZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIHJlc291cmNlIGhpc3RvcnlcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SGlzdG9yeUJ5UmVzb3VyY2VJZCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SGlzdG9yeUJ5UmVzb3VyY2VJZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGlucXVpcmUgYWJvdXQgdGhlIHN0YXR1cyBvZiBhIHByaW9yIGF1dGhvcml6YXRpb24gQ2xhaW1cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWlucXVpcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvSW5xdWlyZVByZUF1dGhDbGFpbSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnSW5xdWlyZVByZUF1dGhDbGFpbScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgZGF0YSB0cmFuc2Zvcm1hdGlvbiBqb2JzIGluIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uSm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdERhdGFUcmFuc2Zvcm1hdGlvbkpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCB2ZXJzaW9ucyBvZiBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVWZXJzaW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGVzIGluIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCBGSElSIGRhdGFzdG9yZXMgdGhhdCBhcmUgaW4gdGhlIHVzZXIncyBhY2NvdW50LCByZWdhcmRsZXNzIG9mIGRhdGFzdG9yZSBzdGF0dXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RGSElSRGF0YXN0b3Jlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RkhJUkRhdGFzdG9yZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RGSElSRGF0YXN0b3JlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIGxpc3Qgb2YgZXhwb3J0IGpvYnMgZm9yIHRoZSBzcGVjaWZpZWQgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RkhJUkV4cG9ydEpvYnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEZISVJFeHBvcnRKb2JzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RkhJUkV4cG9ydEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBsaXN0IG9mIGltcG9ydCBqb2JzIGZvciB0aGUgc3BlY2lmaWVkIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEZISVJJbXBvcnRKb2JzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RGSElSSW1wb3J0Sm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEZISVJJbXBvcnRKb2JzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGEgbGlzdCBvZiB0YWdzIGZvciB0aGUgc3BlY2lmaWVkIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdFRhZ3NGb3JSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFnc0ZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGFnc0ZvclJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgQ29kZXMgZm9yIGEgQ29kZVN5c3RlbSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtbG9va3VwLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xvb2t1cENvZGVTeXN0ZW1XaXRoR2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMb29rdXBDb2RlU3lzdGVtV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIENvZGVzIGZvciBhIENvZGVTeXN0ZW0gcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWxvb2t1cC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9Mb29rdXBDb2RlU3lzdGVtV2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGF0dHJpYnV0ZSBhIG1lbWJlciB3aXRoIGEgc3BlY2lmaWMgcHJvdmlkZXIgZ3JvdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1tZW1iZXItYWRkLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b01lbWJlckFkZCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTWVtYmVyQWRkJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZW5hYmxlIGNyb3NzLXN5c3RlbSBwYXRpZW50IG1hdGNoaW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtbWVtYmVyLW1hdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b01lbWJlck1hdGNoKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdNZW1iZXJNYXRjaCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSBhIG1lbWJlciBmcm9tIGEgZ3JvdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1tZW1iZXItcmVtb3ZlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b01lbWJlclJlbW92ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTWVtYmVyUmVtb3ZlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcGF0Y2ggYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9tYW5hZ2luZy1maGlyLXJlc291cmNlcy1wYXRjaC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9QYXRjaFJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdQYXRjaFJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYnVuZGxlIG11bHRpcGxlIHJlc291cmNlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1Byb2Nlc3NCdW5kbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1Byb2Nlc3NCdW5kbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwdWJsaXNoIGEgbmV3IGltbXV0YWJsZSB2ZXJzaW9uIG9mIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHVibGlzaERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUHVibGlzaERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1B1Ymxpc2hEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgUXVlc3Rpb25uYWlyZSBwYWNrYWdlcyB3aXRoIGRlcGVuZGVuY3kgTGlicmFyeSBhbmQgVmFsdWVTZXQgcmVzb3VyY2VzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1xdWVzdGlvbm5haXJlLXBhY2thZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUXVlc3Rpb25uYWlyZVBhY2thZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1F1ZXN0aW9ubmFpcmVQYWNrYWdlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2NydWQtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9SZWFkUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1JlYWRSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIG1lbWJlciBhdHRyaWJ1dGlvbiBzdGF0dXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1hdHRyaWJ1dGlvbi1zdGF0dXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUmV0cmlldmVBdHRyaWJ1dGlvblN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUmV0cmlldmVBdHRyaWJ1dGlvblN0YXR1cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHNlYXJjaCBhbGwgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gYSBwYXRpZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvc2VhcmNoLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU2VhcmNoRXZlcnl0aGluZygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU2VhcmNoRXZlcnl0aGluZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHNlYXJjaCByZXNvdXJjZXMgd2l0aCBHRVQgbWV0aG9kXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvc2VhcmNoLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU2VhcmNoV2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU2VhcmNoV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHNlYXJjaCByZXNvdXJjZXMgd2l0aCBQT1NUIG1ldGhvZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3NlYXJjaC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1NlYXJjaFdpdGhQb3N0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTZWFyY2hXaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IGFuIGFzeW5jaHJvbm91cyBkYXRhIHRyYW5zZm9ybWF0aW9uIGpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1N0YXJ0RGF0YVRyYW5zZm9ybWF0aW9uSm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RGF0YVRyYW5zZm9ybWF0aW9uSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydERhdGFUcmFuc2Zvcm1hdGlvbkpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJlZ2luIGEgRkhJUiBCdWxrIERlbGV0ZSBKb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1idWxrLWRlbGV0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydEZISVJCdWxrRGVsZXRlSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJCdWxrRGVsZXRlSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEJ1bGsgTWVtYmVyIE1hdGNoIEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWJ1bGstbWVtYmVyLW1hdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkJ1bGtNZW1iZXJNYXRjaEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSQnVsa01lbWJlck1hdGNoSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEV4cG9ydCBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdGFydEZISVJFeHBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSRXhwb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJFeHBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBiZWdpbiBhIEZISVIgRXhwb3J0IGpvYiB3aXRoIEdldFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSRXhwb3J0Sm9iV2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSRXhwb3J0Sm9iV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJlZ2luIGEgRkhJUiBFeHBvcnQgam9iIHdpdGggUG9zdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSRXhwb3J0Sm9iV2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEltcG9ydCBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdGFydEZISVJJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSSW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJJbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdWJtaXQgYSBwcmlvciBhdXRob3JpemF0aW9uIENsYWltIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1zdWJtaXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3VibWl0UHJlQXV0aENsYWltKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdWJtaXRQcmVBdXRoQ2xhaW0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhZGQgdGFncyB0byBhIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUYWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gYSBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZm9ybWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2RhdGEtdHJhbnNmb3JtYXRpb24tZ2V0dGluZy1zdGFydGVkLXNkay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UcmFuc2Zvcm1EYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUcmFuc2Zvcm1EYXRhJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdHJhbnNsYXRlIGEgY29kZSBmcm9tIG9uZSB2YWx1ZSBzZXQgdG8gYW5vdGhlciB1c2luZyBhIENvbmNlcHRNYXAgcmVzb3VyY2Ugd2l0aCBHRVQgbWV0aG9kXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy10cmFuc2xhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoR2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdHJhbnNsYXRlIGEgY29kZSBmcm9tIG9uZSB2YWx1ZSBzZXQgdG8gYW5vdGhlciB1c2luZyBhIENvbmNlcHRNYXAgcmVzb3VyY2Ugd2l0aCBQT1NUIG1ldGhvZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtdHJhbnNsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoUG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIGEgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZywgV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVW50YWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VbnRhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVbnRhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlRkhJUkRhdGFzdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVGSElSRGF0YXN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVGSElSRGF0YXN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlIHVzaW5nIHRoZSBBSSBhZ2VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvZmlsZVdpdGhBZ2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlUHJvZmlsZVdpdGhBZ2VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmFsaWRhdGUgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtdmFsaWRhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVmFsaWRhdGVSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVmFsaWRhdGVSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZhbGlkYXRlIHNvdXJjZSBkYXRhIGFnYWluc3QgZm9ybWF0IHNwZWNpZmljYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvZGF0YS10cmFuc2Zvcm1hdGlvbi1mZWF0dXJlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9WYWxpZGF0ZVNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVmFsaWRhdGVTb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIHZlcnNpb24gb2YgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2NydWQtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9WZXJzaW9uUmVhZFJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdWZXJzaW9uUmVhZFJlc291cmNlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWNjZXNzTGV2ZWxMaXN0OiBBY2Nlc3NMZXZlbExpc3QgPSB7XG4gICAgV3JpdGU6IFtcbiAgICAgICdDYW5jZWxGSElSRXhwb3J0Sm9iV2l0aERlbGV0ZScsXG4gICAgICAnQ29uZmlybUF0dHJpYnV0aW9uTGlzdCcsXG4gICAgICAnQ3JlYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScsXG4gICAgICAnQ3JlYXRlRkhJUkRhdGFzdG9yZScsXG4gICAgICAnQ3JlYXRlUmVzb3VyY2UnLFxuICAgICAgJ0RlbGV0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ0RlbGV0ZUZISVJEYXRhc3RvcmUnLFxuICAgICAgJ0RlbGV0ZVJlc291cmNlJyxcbiAgICAgICdHZW5lcmF0ZURvY3VtZW50V2l0aEdldCcsXG4gICAgICAnR2VuZXJhdGVEb2N1bWVudFdpdGhQb3N0JyxcbiAgICAgICdNZW1iZXJBZGQnLFxuICAgICAgJ01lbWJlck1hdGNoJyxcbiAgICAgICdNZW1iZXJSZW1vdmUnLFxuICAgICAgJ1BhdGNoUmVzb3VyY2UnLFxuICAgICAgJ1Byb2Nlc3NCdW5kbGUnLFxuICAgICAgJ1B1Ymxpc2hEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyxcbiAgICAgICdSZXRyaWV2ZUF0dHJpYnV0aW9uU3RhdHVzJyxcbiAgICAgICdTdGFydERhdGFUcmFuc2Zvcm1hdGlvbkpvYicsXG4gICAgICAnU3RhcnRGSElSQnVsa0RlbGV0ZUpvYicsXG4gICAgICAnU3RhcnRGSElSQnVsa01lbWJlck1hdGNoSm9iJyxcbiAgICAgICdTdGFydEZISVJFeHBvcnRKb2InLFxuICAgICAgJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhHZXQnLFxuICAgICAgJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhQb3N0JyxcbiAgICAgICdTdGFydEZISVJJbXBvcnRKb2InLFxuICAgICAgJ1N1Ym1pdFByZUF1dGhDbGFpbScsXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1RyYW5zZm9ybURhdGEnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnLFxuICAgICAgJ1VwZGF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ1VwZGF0ZUZISVJEYXRhc3RvcmUnLFxuICAgICAgJ1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQnLFxuICAgICAgJ1VwZGF0ZVJlc291cmNlJ1xuICAgIF0sXG4gICAgUmVhZDogW1xuICAgICAgJ0Rlc2NyaWJlRGF0YVRyYW5zZm9ybWF0aW9uSm9iJyxcbiAgICAgICdEZXNjcmliZUZISVJCdWxrRGVsZXRlSm9iJyxcbiAgICAgICdEZXNjcmliZUZISVJCdWxrTWVtYmVyTWF0Y2hKb2InLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkRhdGFzdG9yZScsXG4gICAgICAnRGVzY3JpYmVGSElSRXhwb3J0Sm9iJyxcbiAgICAgICdEZXNjcmliZUZISVJFeHBvcnRKb2JXaXRoR2V0JyxcbiAgICAgICdEZXNjcmliZUZISVJJbXBvcnRKb2InLFxuICAgICAgJ0V4cGFuZFZhbHVlU2V0V2l0aEdldCcsXG4gICAgICAnRXhwYW5kVmFsdWVTZXRXaXRoUG9zdCcsXG4gICAgICAnR2V0Q2FwYWJpbGl0aWVzJyxcbiAgICAgICdHZXREYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyxcbiAgICAgICdHZXRFeHBvcnRlZEZpbGUnLFxuICAgICAgJ0dldEhpc3RvcnlCeVJlc291cmNlSWQnLFxuICAgICAgJ0lucXVpcmVQcmVBdXRoQ2xhaW0nLFxuICAgICAgJ0xvb2t1cENvZGVTeXN0ZW1XaXRoR2V0JyxcbiAgICAgICdMb29rdXBDb2RlU3lzdGVtV2l0aFBvc3QnLFxuICAgICAgJ1F1ZXN0aW9ubmFpcmVQYWNrYWdlJyxcbiAgICAgICdSZWFkUmVzb3VyY2UnLFxuICAgICAgJ1NlYXJjaEV2ZXJ5dGhpbmcnLFxuICAgICAgJ1NlYXJjaFdpdGhHZXQnLFxuICAgICAgJ1NlYXJjaFdpdGhQb3N0JyxcbiAgICAgICdUcmFuc2xhdGVDb25jZXB0TWFwV2l0aEdldCcsXG4gICAgICAnVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhQb3N0JyxcbiAgICAgICdWYWxpZGF0ZVJlc291cmNlJyxcbiAgICAgICdWYWxpZGF0ZVNvdXJjZScsXG4gICAgICAnVmVyc2lvblJlYWRSZXNvdXJjZSdcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uSm9icycsXG4gICAgICAnTGlzdERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVWZXJzaW9ucycsXG4gICAgICAnTGlzdERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVzJyxcbiAgICAgICdMaXN0RkhJUkRhdGFzdG9yZXMnLFxuICAgICAgJ0xpc3RGSElSRXhwb3J0Sm9icycsXG4gICAgICAnTGlzdEZISVJJbXBvcnRKb2JzJyxcbiAgICAgICdMaXN0VGFnc0ZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgVGFnZ2luZzogW1xuICAgICAgJ1RhZ1Jlc291cmNlJyxcbiAgICAgICdVbnRhZ1Jlc291cmNlJ1xuICAgIF1cbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgZGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVTdW1tYXJ5Lmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHByb2ZpbGVJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBwcm9maWxlSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbkRhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUocHJvZmlsZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06aGVhbHRobGFrZTokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06ZGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS8keyBwcm9maWxlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIGRhdGFzdG9yZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RhdGFzdG9yZVByb3BlcnRpZXMuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YXN0b3JlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgZGF0YXN0b3JlSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbkRhdGFzdG9yZShkYXRhc3RvcmVJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmhlYWx0aGxha2U6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmRhdGFzdG9yZS9maGlyLyR7IGRhdGFzdG9yZUlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgcHJlc2VuY2Ugb2YgdGFnIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvQ3JlYXRlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHByZXNlbmNlIG9mIHRhZyBrZXktdmFsdWUgcGFpcnMgYXR0YWNoZWQgdG8gdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ2FuY2VsRkhJUkV4cG9ydEpvYldpdGhEZWxldGUoKVxuICAgKiAtIC50b0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QoKVxuICAgKiAtIC50b0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKVxuICAgKiAtIC50b0NyZWF0ZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b0NyZWF0ZVJlc291cmNlKClcbiAgICogLSAudG9EZWxldGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9EZWxldGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9EZWxldGVSZXNvdXJjZSgpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYigpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSQnVsa01lbWJlck1hdGNoSm9iKClcbiAgICogLSAudG9EZXNjcmliZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b0Rlc2NyaWJlRkhJUkV4cG9ydEpvYigpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iV2l0aEdldCgpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSSW1wb3J0Sm9iKClcbiAgICogLSAudG9FeHBhbmRWYWx1ZVNldFdpdGhHZXQoKVxuICAgKiAtIC50b0V4cGFuZFZhbHVlU2V0V2l0aFBvc3QoKVxuICAgKiAtIC50b0dlbmVyYXRlRG9jdW1lbnRXaXRoR2V0KClcbiAgICogLSAudG9HZW5lcmF0ZURvY3VtZW50V2l0aFBvc3QoKVxuICAgKiAtIC50b0dldENhcGFiaWxpdGllcygpXG4gICAqIC0gLnRvR2V0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvR2V0RXhwb3J0ZWRGaWxlKClcbiAgICogLSAudG9HZXRIaXN0b3J5QnlSZXNvdXJjZUlkKClcbiAgICogLSAudG9JbnF1aXJlUHJlQXV0aENsYWltKClcbiAgICogLSAudG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zKClcbiAgICogLSAudG9MaXN0RkhJUkV4cG9ydEpvYnMoKVxuICAgKiAtIC50b0xpc3RGSElSSW1wb3J0Sm9icygpXG4gICAqIC0gLnRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpXG4gICAqIC0gLnRvTG9va3VwQ29kZVN5c3RlbVdpdGhHZXQoKVxuICAgKiAtIC50b0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCgpXG4gICAqIC0gLnRvTWVtYmVyQWRkKClcbiAgICogLSAudG9NZW1iZXJNYXRjaCgpXG4gICAqIC0gLnRvTWVtYmVyUmVtb3ZlKClcbiAgICogLSAudG9QYXRjaFJlc291cmNlKClcbiAgICogLSAudG9Qcm9jZXNzQnVuZGxlKClcbiAgICogLSAudG9QdWJsaXNoRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvUXVlc3Rpb25uYWlyZVBhY2thZ2UoKVxuICAgKiAtIC50b1JlYWRSZXNvdXJjZSgpXG4gICAqIC0gLnRvUmV0cmlldmVBdHRyaWJ1dGlvblN0YXR1cygpXG4gICAqIC0gLnRvU2VhcmNoRXZlcnl0aGluZygpXG4gICAqIC0gLnRvU2VhcmNoV2l0aEdldCgpXG4gICAqIC0gLnRvU2VhcmNoV2l0aFBvc3QoKVxuICAgKiAtIC50b1N0YXJ0RGF0YVRyYW5zZm9ybWF0aW9uSm9iKClcbiAgICogLSAudG9TdGFydEZISVJCdWxrRGVsZXRlSm9iKClcbiAgICogLSAudG9TdGFydEZISVJCdWxrTWVtYmVyTWF0Y2hKb2IoKVxuICAgKiAtIC50b1N0YXJ0RkhJUkV4cG9ydEpvYigpXG4gICAqIC0gLnRvU3RhcnRGSElSRXhwb3J0Sm9iV2l0aEdldCgpXG4gICAqIC0gLnRvU3RhcnRGSElSRXhwb3J0Sm9iV2l0aFBvc3QoKVxuICAgKiAtIC50b1N0YXJ0RkhJUkltcG9ydEpvYigpXG4gICAqIC0gLnRvU3VibWl0UHJlQXV0aENsYWltKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVHJhbnNmb3JtRGF0YSgpXG4gICAqIC0gLnRvVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhHZXQoKVxuICAgKiAtIC50b1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoUG9zdCgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVXBkYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvVXBkYXRlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvVXBkYXRlUHJvZmlsZVdpdGhBZ2VudCgpXG4gICAqIC0gLnRvVXBkYXRlUmVzb3VyY2UoKVxuICAgKiAtIC50b1ZhbGlkYXRlUmVzb3VyY2UoKVxuICAgKiAtIC50b1ZlcnNpb25SZWFkUmVzb3VyY2UoKVxuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIGRhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVcbiAgICogLSBkYXRhc3RvcmVcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHByZXNlbmNlIG9mIHRhZyBrZXlzIGluIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy10YWdrZXlzXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9DcmVhdGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2hlYWx0aGxha2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2hlYWx0aGxha2UuaHRtbCkuXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuIl19