iam-floyd
Version:
AWS IAM policy statement generator with fluent interface
896 lines • 75.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Iq = void 0;
const shared_1 = require("../../shared");
/**
* Statement provider for service [iq](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiq.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
class Iq extends shared_1.PolicyStatement {
/**
* Statement provider for service [iq](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiq.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
constructor(sid) {
super(sid);
this.servicePrefix = 'iq';
this.accessLevelList = {
Write: [
'AcceptCall',
'ApprovePaymentRequest',
'ApproveProposal',
'ArchiveConversation',
'CompleteProposal',
'CreateConversation',
'CreateExpert',
'CreateListing',
'CreateMilestoneProposal',
'CreatePaymentRequest',
'CreateProject',
'CreateRequest',
'CreateScheduledProposal',
'CreateSeller',
'CreateUpfrontProposal',
'DeclineCall',
'DeleteAttachment',
'DisableIndividualPublicProfile',
'EnableIndividualPublicProfile',
'EndCall',
'HideRequest',
'InitiateCall',
'LinkAwsCertification',
'MarkChatMessageRead',
'RejectPaymentRequest',
'RejectProposal',
'SendCompanyChatMessage',
'SendIndividualChatMessage',
'UnarchiveConversation',
'UnlinkAwsCertification',
'UpdateCompanyProfile',
'UpdateConversationMembers',
'UpdateExpert',
'UpdateListing',
'UpdateRequest',
'UploadAttachment',
'WithdrawPaymentRequest',
'WithdrawProposal',
'WriteReview'
],
Read: [
'DownloadAttachment',
'GetBuyer',
'GetCall',
'GetChatInfo',
'GetChatMessages',
'GetChatToken',
'GetCompanyChatMessages',
'GetCompanyProfile',
'GetConversation',
'GetExpert',
'GetListing',
'GetMarketplaceSeller',
'GetPaymentRequest',
'GetProposal',
'GetRequest',
'GetReview',
'ListConversations',
'ListExpertAccessLogs',
'ListListings',
'ListPaymentRequests',
'ListProposals',
'ListRequests',
'ListReviews'
],
List: [
'ListAttachments'
]
};
}
/**
* Grants permission to accept an incoming voice/video call
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toAcceptCall() {
return this.to('AcceptCall');
}
/**
* Grants permission to approve a payment request
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toApprovePaymentRequest() {
return this.to('ApprovePaymentRequest');
}
/**
* Grants permission to approve a proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toApproveProposal() {
return this.to('ApproveProposal');
}
/**
* Grants permission to archive a conversation
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toArchiveConversation() {
return this.to('ArchiveConversation');
}
/**
* Grants permission to complete a proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCompleteProposal() {
return this.to('CompleteProposal');
}
/**
* Grants permission to respond to a request or send a direct message to initiate a conversation
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateConversation() {
return this.to('CreateConversation');
}
/**
* Grants permission to create an expert profile
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateExpert() {
return this.to('CreateExpert');
}
/**
* Grants permission to create a listing
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateListing() {
return this.to('CreateListing');
}
/**
* Grants permission to create a milestone proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateMilestoneProposal() {
return this.to('CreateMilestoneProposal');
}
/**
* Grants permission to create a payment request
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreatePaymentRequest() {
return this.to('CreatePaymentRequest');
}
/**
* Grants permission to submit new requests
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateProject() {
return this.to('CreateProject');
}
/**
* Grants permission to submit new requests
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateRequest() {
return this.to('CreateRequest');
}
/**
* Grants permission to create a scheduled proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateScheduledProposal() {
return this.to('CreateScheduledProposal');
}
/**
* Grants permission to create a seller profile
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateSeller() {
return this.to('CreateSeller');
}
/**
* Grants permission to create an upfront proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toCreateUpfrontProposal() {
return this.to('CreateUpfrontProposal');
}
/**
* Grants permission to decline an incoming voice/video call
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toDeclineCall() {
return this.to('DeclineCall');
}
/**
* Grants permission to delete an existing attachment
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toDeleteAttachment() {
return this.to('DeleteAttachment');
}
/**
* Grants permission to disable individual public profile page
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toDisableIndividualPublicProfile() {
return this.to('DisableIndividualPublicProfile');
}
/**
* Grants permission to download existing attachment
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toDownloadAttachment() {
return this.to('DownloadAttachment');
}
/**
* Grants permission to enable individual public profile page
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toEnableIndividualPublicProfile() {
return this.to('EnableIndividualPublicProfile');
}
/**
* Grants permission to end a voice/video call
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toEndCall() {
return this.to('EndCall');
}
/**
* Grants permission to read buyer information
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetBuyer() {
return this.to('GetBuyer');
}
/**
* Grants permission to read details of a voice/video call
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetCall() {
return this.to('GetCall');
}
/**
* Grants permission to read the chat environment details about a conversation
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetChatInfo() {
return this.to('GetChatInfo');
}
/**
* Grants permission to read chat messages in a conversation
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetChatMessages() {
return this.to('GetChatMessages');
}
/**
* Grants permission to request a websocket token for the conversation notifications
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetChatToken() {
return this.to('GetChatToken');
}
/**
* Grants permission to read chat messages in a company conversation
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetCompanyChatMessages() {
return this.to('GetCompanyChatMessages');
}
/**
* Grants permission to read a company profile
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetCompanyProfile() {
return this.to('GetCompanyProfile');
}
/**
* Grants permission to read details of a conversation
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetConversation() {
return this.to('GetConversation');
}
/**
* Grants permission to read expert information
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetExpert() {
return this.to('GetExpert');
}
/**
* Grants permission to read a listing
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetListing() {
return this.to('GetListing');
}
/**
* Grants permission to read a seller profile information
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetMarketplaceSeller() {
return this.to('GetMarketplaceSeller');
}
/**
* Grants permission to read a payment request
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetPaymentRequest() {
return this.to('GetPaymentRequest');
}
/**
* Grants permission to read a proposal
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetProposal() {
return this.to('GetProposal');
}
/**
* Grants permission to get a created request
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetRequest() {
return this.to('GetRequest');
}
/**
* Grants permission to read a review for an expert
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toGetReview() {
return this.to('GetReview');
}
/**
* Grants permission to hide a request
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toHideRequest() {
return this.to('HideRequest');
}
/**
* Grants permission to start a voice/video call
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toInitiateCall() {
return this.to('InitiateCall');
}
/**
* Grants permission to link an AWS certification to individual profile
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toLinkAwsCertification() {
return this.to('LinkAwsCertification');
}
/**
* Grants permission to list existing attachments
*
* Access Level: List
*
* https://aws.amazon.com/iq/
*/
toListAttachments() {
return this.to('ListAttachments');
}
/**
* Grants permission to list existing conversations
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListConversations() {
return this.to('ListConversations');
}
/**
* Grants permission to list access logs of expert activity
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListExpertAccessLogs() {
return this.to('ListExpertAccessLogs');
}
/**
* Grants permission to list listings
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListListings() {
return this.to('ListListings');
}
/**
* Grants permission to list payment requests
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListPaymentRequests() {
return this.to('ListPaymentRequests');
}
/**
* Grants permission to list proposals
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListProposals() {
return this.to('ListProposals');
}
/**
* Grants permission to list requests that are created
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListRequests() {
return this.to('ListRequests');
}
/**
* Grants permission to list reviews for an expert
*
* Access Level: Read
*
* https://aws.amazon.com/iq/
*/
toListReviews() {
return this.to('ListReviews');
}
/**
* Grants permission to mark a message as read in a conversation
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toMarkChatMessageRead() {
return this.to('MarkChatMessageRead');
}
/**
* Grants permission to reject a payment request
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toRejectPaymentRequest() {
return this.to('RejectPaymentRequest');
}
/**
* Grants permission to reject a proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toRejectProposal() {
return this.to('RejectProposal');
}
/**
* Grants permission to send a message in a conversation as a company
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toSendCompanyChatMessage() {
return this.to('SendCompanyChatMessage');
}
/**
* Grants permission to send a message in a conversation as an individual
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toSendIndividualChatMessage() {
return this.to('SendIndividualChatMessage');
}
/**
* Grants permission to unarchive a conversation
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUnarchiveConversation() {
return this.to('UnarchiveConversation');
}
/**
* Grants permission to unlink an AWS certification from individual profile
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUnlinkAwsCertification() {
return this.to('UnlinkAwsCertification');
}
/**
* Grants permission to update a company profile
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUpdateCompanyProfile() {
return this.to('UpdateCompanyProfile');
}
/**
* Grants permission to add more participants into a conversation
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUpdateConversationMembers() {
return this.to('UpdateConversationMembers');
}
/**
* Grants permission to update an expert information
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUpdateExpert() {
return this.to('UpdateExpert');
}
/**
* Grants permission to update a listing
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUpdateListing() {
return this.to('UpdateListing');
}
/**
* Grants permission to update a request
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUpdateRequest() {
return this.to('UpdateRequest');
}
/**
* Grants permission to upload an attachment
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toUploadAttachment() {
return this.to('UploadAttachment');
}
/**
* Grants permission to withdraw a payment request
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toWithdrawPaymentRequest() {
return this.to('WithdrawPaymentRequest');
}
/**
* Grants permission to withdraw a proposal
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toWithdrawProposal() {
return this.to('WithdrawProposal');
}
/**
* Grants permission to write a review for an expert
*
* Access Level: Write
*
* https://aws.amazon.com/iq/
*/
toWriteReview() {
return this.to('WriteReview');
}
/**
* Adds a resource of type conversation to the statement
*
* https://aws.amazon.com/iq/
*
* @param conversationId - Identifier for the conversationId.
* @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.
*/
onConversation(conversationId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::conversation/${conversationId}`);
}
/**
* Adds a resource of type buyer to the statement
*
* https://aws.amazon.com/iq/
*
* @param buyerId - Identifier for the buyerId.
* @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.
*/
onBuyer(buyerId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::buyer/${buyerId}`);
}
/**
* Adds a resource of type expert to the statement
*
* https://aws.amazon.com/iq/
*
* @param expertId - Identifier for the expertId.
* @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.
*/
onExpert(expertId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::expert/${expertId}`);
}
/**
* Adds a resource of type call to the statement
*
* https://aws.amazon.com/iq/
*
* @param callId - Identifier for the callId.
* @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.
*/
onCall(callId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::call/${callId}`);
}
/**
* Adds a resource of type token to the statement
*
* https://aws.amazon.com/iq/
*
* @param tokenId - Identifier for the tokenId.
* @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.
*/
onToken(tokenId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::token/${tokenId}`);
}
/**
* Adds a resource of type proposal to the statement
*
* https://aws.amazon.com/iq/
*
* @param conversationId - Identifier for the conversationId.
* @param proposalId - Identifier for the proposalId.
* @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.
*/
onProposal(conversationId, proposalId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::proposal/${conversationId}/${proposalId}`);
}
/**
* Adds a resource of type paymentRequest to the statement
*
* https://aws.amazon.com/iq/
*
* @param conversationId - Identifier for the conversationId.
* @param proposalId - Identifier for the proposalId.
* @param paymentRequestId - Identifier for the paymentRequestId.
* @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.
*/
onPaymentRequest(conversationId, proposalId, paymentRequestId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::paymentRequest/${conversationId}/${proposalId}/${paymentRequestId}`);
}
/**
* Adds a resource of type paymentSchedule to the statement
*
* https://aws.amazon.com/iq/
*
* @param conversationId - Identifier for the conversationId.
* @param proposalId - Identifier for the proposalId.
* @param versionId - Identifier for the versionId.
* @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.
*/
onPaymentSchedule(conversationId, proposalId, versionId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::paymentSchedule/${conversationId}/${proposalId}/${versionId}`);
}
/**
* Adds a resource of type seller to the statement
*
* https://aws.amazon.com/iq/
*
* @param sellerAwsAccountId - Identifier for the sellerAwsAccountId.
* @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.
*/
onSeller(sellerAwsAccountId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::seller/${sellerAwsAccountId}`);
}
/**
* Adds a resource of type company to the statement
*
* https://aws.amazon.com/iq/
*
* @param companyId - Identifier for the companyId.
* @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.
*/
onCompany(companyId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::company/${companyId}`);
}
/**
* Adds a resource of type request to the statement
*
* https://aws.amazon.com/iq/
*
* @param requestId - Identifier for the requestId.
* @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.
*/
onRequest(requestId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::request/${requestId}`);
}
/**
* Adds a resource of type listing to the statement
*
* https://aws.amazon.com/iq/
*
* @param listingId - Identifier for the listingId.
* @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.
*/
onListing(listingId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::listing/${listingId}`);
}
/**
* Adds a resource of type attachment to the statement
*
* https://aws.amazon.com/iq/
*
* @param attachmentId - Identifier for the attachmentId.
* @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.
*/
onAttachment(attachmentId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq:${region ?? this.defaultRegion}::attachment/${attachmentId}`);
}
/**
* Adds a resource of type permission to the statement
*
* https://aws.amazon.com/iq/
*
* @param permissionRequestId - Identifier for the permissionRequestId.
* @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.
*/
onPermission(permissionRequestId, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:iq-permission:${region ?? this.defaultRegion}::permission/${permissionRequestId}`);
}
}
exports.Iq = Iq;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpcS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBK0M7QUFFL0M7Ozs7R0FJRztBQUNILE1BQWEsRUFBRyxTQUFRLHdCQUFlO0lBR3JDOzs7O09BSUc7SUFDSCxZQUFZLEdBQVk7UUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBUk4sa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFnc0JsQixvQkFBZSxHQUFvQjtZQUMzQyxLQUFLLEVBQUU7Z0JBQ0wsWUFBWTtnQkFDWix1QkFBdUI7Z0JBQ3ZCLGlCQUFpQjtnQkFDakIscUJBQXFCO2dCQUNyQixrQkFBa0I7Z0JBQ2xCLG9CQUFvQjtnQkFDcEIsY0FBYztnQkFDZCxlQUFlO2dCQUNmLHlCQUF5QjtnQkFDekIsc0JBQXNCO2dCQUN0QixlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YseUJBQXlCO2dCQUN6QixjQUFjO2dCQUNkLHVCQUF1QjtnQkFDdkIsYUFBYTtnQkFDYixrQkFBa0I7Z0JBQ2xCLGdDQUFnQztnQkFDaEMsK0JBQStCO2dCQUMvQixTQUFTO2dCQUNULGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxzQkFBc0I7Z0JBQ3RCLHFCQUFxQjtnQkFDckIsc0JBQXNCO2dCQUN0QixnQkFBZ0I7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsMkJBQTJCO2dCQUMzQix1QkFBdUI7Z0JBQ3ZCLHdCQUF3QjtnQkFDeEIsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLGNBQWM7Z0JBQ2QsZUFBZTtnQkFDZixlQUFlO2dCQUNmLGtCQUFrQjtnQkFDbEIsd0JBQXdCO2dCQUN4QixrQkFBa0I7Z0JBQ2xCLGFBQWE7YUFDZDtZQUNELElBQUksRUFBRTtnQkFDSixvQkFBb0I7Z0JBQ3BCLFVBQVU7Z0JBQ1YsU0FBUztnQkFDVCxhQUFhO2dCQUNiLGlCQUFpQjtnQkFDakIsY0FBYztnQkFDZCx3QkFBd0I7Z0JBQ3hCLG1CQUFtQjtnQkFDbkIsaUJBQWlC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Q25JLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLFlBQVksQ0FBQyxtQkFBMkIsRUFBRSxNQUFlLEVBQUUsU0FBa0I7UUFDbEYsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQVEsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBaUIsa0JBQW1CLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYyxnQkFBaUIsbUJBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JKLENBQUM7Q0FDRjtBQW44QkQsZ0JBbThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY2Vzc0xldmVsTGlzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hY2Nlc3MtbGV2ZWwnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2lxXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hd3NpcS5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIElxIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnaXEnO1xuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2lxXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hd3NpcS5odG1sKS5cbiAgICpcbiAgICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzaWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFjY2VwdCBhbiBpbmNvbWluZyB2b2ljZS92aWRlbyBjYWxsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0FjY2VwdENhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FjY2VwdENhbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhcHByb3ZlIGEgcGF5bWVudCByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0FwcHJvdmVQYXltZW50UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXBwcm92ZVBheW1lbnRSZXF1ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXBwcm92ZSBhIHByb3Bvc2FsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0FwcHJvdmVQcm9wb3NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXBwcm92ZVByb3Bvc2FsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXJjaGl2ZSBhIGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9BcmNoaXZlQ29udmVyc2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBcmNoaXZlQ29udmVyc2F0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY29tcGxldGUgYSBwcm9wb3NhbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9Db21wbGV0ZVByb3Bvc2FsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDb21wbGV0ZVByb3Bvc2FsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVzcG9uZCB0byBhIHJlcXVlc3Qgb3Igc2VuZCBhIGRpcmVjdCBtZXNzYWdlIHRvIGluaXRpYXRlIGEgY29udmVyc2F0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUNvbnZlcnNhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29udmVyc2F0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuIGV4cGVydCBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUV4cGVydCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlRXhwZXJ0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbGlzdGluZ1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVMaXN0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVMaXN0aW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbWlsZXN0b25lIHByb3Bvc2FsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZU1pbGVzdG9uZVByb3Bvc2FsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVNaWxlc3RvbmVQcm9wb3NhbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHBheW1lbnQgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVQYXltZW50UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlUGF5bWVudFJlcXVlc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdWJtaXQgbmV3IHJlcXVlc3RzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVByb2plY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVByb2plY3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdWJtaXQgbmV3IHJlcXVlc3RzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVJlcXVlc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBzY2hlZHVsZWQgcHJvcG9zYWxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU2NoZWR1bGVkUHJvcG9zYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVNjaGVkdWxlZFByb3Bvc2FsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgc2VsbGVyIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU2VsbGVyKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVTZWxsZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gdXBmcm9udCBwcm9wb3NhbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVVcGZyb250UHJvcG9zYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVVwZnJvbnRQcm9wb3NhbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlY2xpbmUgYW4gaW5jb21pbmcgdm9pY2UvdmlkZW8gY2FsbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9EZWNsaW5lQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVjbGluZUNhbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgYXR0YWNobWVudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVBdHRhY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBdHRhY2htZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzYWJsZSBpbmRpdmlkdWFsIHB1YmxpYyBwcm9maWxlIHBhZ2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvRGlzYWJsZUluZGl2aWR1YWxQdWJsaWNQcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEaXNhYmxlSW5kaXZpZHVhbFB1YmxpY1Byb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkb3dubG9hZCBleGlzdGluZyBhdHRhY2htZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvRG93bmxvYWRBdHRhY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEb3dubG9hZEF0dGFjaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgaW5kaXZpZHVhbCBwdWJsaWMgcHJvZmlsZSBwYWdlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0VuYWJsZUluZGl2aWR1YWxQdWJsaWNQcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdFbmFibGVJbmRpdmlkdWFsUHVibGljUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGVuZCBhIHZvaWNlL3ZpZGVvIGNhbGxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvRW5kQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRW5kQ2FsbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgYnV5ZXIgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9HZXRCdXllcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QnV5ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGRldGFpbHMgb2YgYSB2b2ljZS92aWRlbyBjYWxsXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q2FsbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIGNoYXQgZW52aXJvbm1lbnQgZGV0YWlscyBhYm91dCBhIGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldENoYXRJbmZvKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDaGF0SW5mbycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgY2hhdCBtZXNzYWdlcyBpbiBhIGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldENoYXRNZXNzYWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q2hhdE1lc3NhZ2VzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCBhIHdlYnNvY2tldCB0b2tlbiBmb3IgdGhlIGNvbnZlcnNhdGlvbiBub3RpZmljYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q2hhdFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDaGF0VG9rZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGNoYXQgbWVzc2FnZXMgaW4gYSBjb21wYW55IGNvbnZlcnNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldENvbXBhbnlDaGF0TWVzc2FnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldENvbXBhbnlDaGF0TWVzc2FnZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGEgY29tcGFueSBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q29tcGFueVByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldENvbXBhbnlQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCBkZXRhaWxzIG9mIGEgY29udmVyc2F0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL2lxL1xuICAgKi9cbiAgcHVibGljIHRvR2V0Q29udmVyc2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb252ZXJzYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIGV4cGVydCBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9pcS9cbiAgICovXG4gIHB1YmxpYyB0b0dldEV4cGVydCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0RXhwZXJ0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCBhIGxpc3RpbmdcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vaXEvXG4gICAqL1xuICBwdWJsaWMgdG9HZXRMaXN0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRMaXN0aW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIH