cdk-iam-floyd
Version:
AWS IAM policy statement generator with fluent interface for AWS CDK
401 lines • 34.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cloudsearch = void 0;
const shared_1 = require("../../shared");
/**
* Statement provider for service [cloudsearch](https://docs.aws.amazon.com/service-authorization/latest/reference/list_cloudsearch.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
class Cloudsearch extends shared_1.PolicyStatement {
/**
* Attaches resource tags to an Amazon CloudSearch domain
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_AddTags.html
*/
toAddTags() {
return this.to('AddTags');
}
/**
* Indexes the search suggestions
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_BuildSuggesters.html
*/
toBuildSuggesters() {
return this.to('BuildSuggesters');
}
/**
* Creates a new search domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_CreateDomain.html
*/
toCreateDomain() {
return this.to('CreateDomain');
}
/**
* Configures an analysis scheme that can be applied to a text or text-array field to define language-specific text processing options
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DefineAnalysisScheme.html
*/
toDefineAnalysisScheme() {
return this.to('DefineAnalysisScheme');
}
/**
* Configures an Expression for the search domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DefineExpression.html
*/
toDefineExpression() {
return this.to('DefineExpression');
}
/**
* Configures an IndexField for the search domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DefineIndexField.html
*/
toDefineIndexField() {
return this.to('DefineIndexField');
}
/**
* Configures a suggester for a domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DefineSuggester.html
*/
toDefineSuggester() {
return this.to('DefineSuggester');
}
/**
* Deletes an analysis scheme
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DeleteAnalysisScheme.html
*/
toDeleteAnalysisScheme() {
return this.to('DeleteAnalysisScheme');
}
/**
* Permanently deletes a search domain and all of its data
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DeleteDomain.html
*/
toDeleteDomain() {
return this.to('DeleteDomain');
}
/**
* Removes an Expression from the search domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DeleteExpression.html
*/
toDeleteExpression() {
return this.to('DeleteExpression');
}
/**
* Removes an IndexField from the search domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DeleteIndexField.html
*/
toDeleteIndexField() {
return this.to('DeleteIndexField');
}
/**
* Deletes a suggester
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DeleteSuggester.html
*/
toDeleteSuggester() {
return this.to('DeleteSuggester');
}
/**
* Gets the analysis schemes configured for a domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeAnalysisSchemes.html
*/
toDescribeAnalysisSchemes() {
return this.to('DescribeAnalysisSchemes');
}
/**
* Gets the availability options configured for a domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeAvailabilityOptions.html
*/
toDescribeAvailabilityOptions() {
return this.to('DescribeAvailabilityOptions');
}
/**
* Gets the domain endpoint options configured for a domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeDomainEndpointOptions.html
*/
toDescribeDomainEndpointOptions() {
return this.to('DescribeDomainEndpointOptions');
}
/**
* Gets information about the search domains owned by this account
*
* Access Level: List
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeDomains.html
*/
toDescribeDomains() {
return this.to('DescribeDomains');
}
/**
* Gets the expressions configured for the search domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeExpressions.html
*/
toDescribeExpressions() {
return this.to('DescribeExpressions');
}
/**
* Gets information about the index fields configured for the search domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeIndexFields.html
*/
toDescribeIndexFields() {
return this.to('DescribeIndexFields');
}
/**
* Gets the scaling parameters configured for a domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeScalingParameters.html
*/
toDescribeScalingParameters() {
return this.to('DescribeScalingParameters');
}
/**
* Gets information about the access policies that control access to the domain's document and search endpoints
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeServiceAccessPolicies.html
*/
toDescribeServiceAccessPolicies() {
return this.to('DescribeServiceAccessPolicies');
}
/**
* Gets the suggesters configured for a domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_DescribeSuggesters.html
*/
toDescribeSuggesters() {
return this.to('DescribeSuggesters');
}
/**
* Tells the search domain to start indexing its documents using the latest indexing options
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_IndexDocuments.html
*/
toIndexDocuments() {
return this.to('IndexDocuments');
}
/**
* Lists all search domains owned by an account
*
* Access Level: List
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_ListDomainNames.html
*/
toListDomainNames() {
return this.to('ListDomainNames');
}
/**
* Displays all of the resource tags for an Amazon CloudSearch domain
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_ListTags.html
*/
toListTags() {
return this.to('ListTags');
}
/**
* Removes the specified resource tags from an Amazon ES domain
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_RemoveTags.html
*/
toRemoveTags() {
return this.to('RemoveTags');
}
/**
* Configures the availability options for a domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_UpdateAvailabilityOptions.html
*/
toUpdateAvailabilityOptions() {
return this.to('UpdateAvailabilityOptions');
}
/**
* Configures the domain endpoint options for a domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_UpdateDomainEndpointOptions.html
*/
toUpdateDomainEndpointOptions() {
return this.to('UpdateDomainEndpointOptions');
}
/**
* Configures scaling parameters for a domain
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_UpdateScalingParameters.html
*/
toUpdateScalingParameters() {
return this.to('UpdateScalingParameters');
}
/**
* Configures the access rules that control access to the domain's document and search endpoints
*
* Access Level: Permissions management, Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_UpdateServiceAccessPolicies.html
*/
toUpdateServiceAccessPolicies() {
return this.to('UpdateServiceAccessPolicies');
}
/**
* Allows access to the document service operations
*
* Access Level: Write
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-access.html#cloudsearch-actions
*/
toDocument() {
return this.to('document');
}
/**
* Allows access to the search operations
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-access.html#cloudsearch-actions
*/
toSearch() {
return this.to('search');
}
/**
* Allows access to the suggest operations
*
* Access Level: Read
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-access.html#cloudsearch-actions
*/
toSuggest() {
return this.to('suggest');
}
/**
* Adds a resource of type domain to the statement
*
* https://docs.aws.amazon.com/cloudsearch/latest/developerguide/creating-domains.html
*
* @param domainName - Identifier for the domainName.
* @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.
*/
onDomain(domainName, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:cloudsearch:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:domain/${domainName}`);
}
/**
* Statement provider for service [cloudsearch](https://docs.aws.amazon.com/service-authorization/latest/reference/list_cloudsearch.html).
*
*/
constructor(props) {
super(props);
this.servicePrefix = 'cloudsearch';
this.accessLevelList = {
Tagging: [
'AddTags',
'RemoveTags'
],
Write: [
'AddTags',
'BuildSuggesters',
'CreateDomain',
'DefineAnalysisScheme',
'DefineExpression',
'DefineIndexField',
'DefineSuggester',
'DeleteAnalysisScheme',
'DeleteDomain',
'DeleteExpression',
'DeleteIndexField',
'DeleteSuggester',
'IndexDocuments',
'RemoveTags',
'UpdateAvailabilityOptions',
'UpdateDomainEndpointOptions',
'UpdateScalingParameters',
'UpdateServiceAccessPolicies',
'document'
],
Read: [
'DescribeAnalysisSchemes',
'DescribeAvailabilityOptions',
'DescribeDomainEndpointOptions',
'DescribeExpressions',
'DescribeIndexFields',
'DescribeScalingParameters',
'DescribeServiceAccessPolicies',
'DescribeSuggesters',
'ListTags',
'search',
'suggest'
],
List: [
'DescribeDomains',
'ListDomainNames'
],
'Permissions management': [
'UpdateServiceAccessPolicies'
]
};
}
}
exports.Cloudsearch = Cloudsearch;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRzZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZHNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBK0M7QUFHL0M7Ozs7R0FJRztBQUNILE1BQWEsV0FBWSxTQUFRLHdCQUFlO0lBRzlDOzs7Ozs7T0FNRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHNCQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFj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QUNyQixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjtnQkFDM0IsK0JBQStCO2dCQUMvQixvQkFBb0I7Z0JBQ3BCLFVBQVU7Z0JBQ1YsUUFBUTtnQkFDUixTQUFTO2FBQ1Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osaUJBQWlCO2dCQUNqQixpQkFBaUI7YUFDbEI7WUFDRCx3QkFBd0IsRUFBRTtnQkFDeEIsNkJBQTZCO2FBQzlCO1NBQ0YsQ0FBQztJQXNCRixDQUFDO0NBQ0Y7QUF4YUQsa0NBd2FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjZXNzTGV2ZWxMaXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FjY2Vzcy1sZXZlbCc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2Nsb3Vkc2VhcmNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9jbG91ZHNlYXJjaC5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3Vkc2VhcmNoIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnY2xvdWRzZWFyY2gnO1xuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyByZXNvdXJjZSB0YWdzIHRvIGFuIEFtYXpvbiBDbG91ZFNlYXJjaCBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nLCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9BZGRUYWdzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0FkZFRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FkZFRhZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRleGVzIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9CdWlsZFN1Z2dlc3RlcnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQnVpbGRTdWdnZXN0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCdWlsZFN1Z2dlc3RlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHNlYXJjaCBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9DcmVhdGVEb21haW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlRG9tYWluKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVEb21haW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuIGFuYWx5c2lzIHNjaGVtZSB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgdGV4dCBvciB0ZXh0LWFycmF5IGZpZWxkIHRvIGRlZmluZSBsYW5ndWFnZS1zcGVjaWZpYyB0ZXh0IHByb2Nlc3Npbmcgb3B0aW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHNlYXJjaC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVBJX0RlZmluZUFuYWx5c2lzU2NoZW1lLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlZmluZUFuYWx5c2lzU2NoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWZpbmVBbmFseXNpc1NjaGVtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgYW4gRXhwcmVzc2lvbiBmb3IgdGhlIHNlYXJjaCBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9EZWZpbmVFeHByZXNzaW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlZmluZUV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlZmluZUV4cHJlc3Npb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuIEluZGV4RmllbGQgZm9yIHRoZSBzZWFyY2ggZG9tYWluXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfRGVmaW5lSW5kZXhGaWVsZC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWZpbmVJbmRleEZpZWxkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWZpbmVJbmRleEZpZWxkJyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBhIHN1Z2dlc3RlciBmb3IgYSBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9EZWZpbmVTdWdnZXN0ZXIuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVmaW5lU3VnZ2VzdGVyKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWZpbmVTdWdnZXN0ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGFuYWx5c2lzIHNjaGVtZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHNlYXJjaC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVBJX0RlbGV0ZUFuYWx5c2lzU2NoZW1lLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUFuYWx5c2lzU2NoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBbmFseXNpc1NjaGVtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1hbmVudGx5IGRlbGV0ZXMgYSBzZWFyY2ggZG9tYWluIGFuZCBhbGwgb2YgaXRzIGRhdGFcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9EZWxldGVEb21haW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRG9tYWluKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVEb21haW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIEV4cHJlc3Npb24gZnJvbSB0aGUgc2VhcmNoIGRvbWFpblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHNlYXJjaC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVBJX0RlbGV0ZUV4cHJlc3Npb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRXhwcmVzc2lvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gSW5kZXhGaWVsZCBmcm9tIHRoZSBzZWFyY2ggZG9tYWluXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfRGVsZXRlSW5kZXhGaWVsZC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVJbmRleEZpZWxkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVJbmRleEZpZWxkJyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHN1Z2dlc3RlclxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHNlYXJjaC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVBJX0RlbGV0ZVN1Z2dlc3Rlci5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTdWdnZXN0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVN1Z2dlc3RlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFuYWx5c2lzIHNjaGVtZXMgY29uZmlndXJlZCBmb3IgYSBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHNlYXJjaC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVBJX0Rlc2NyaWJlQW5hbHlzaXNTY2hlbWVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlQW5hbHlzaXNTY2hlbWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUFuYWx5c2lzU2NoZW1lcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGF2YWlsYWJpbGl0eSBvcHRpb25zIGNvbmZpZ3VyZWQgZm9yIGEgZG9tYWluXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9EZXNjcmliZUF2YWlsYWJpbGl0eU9wdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVBdmFpbGFiaWxpdHlPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUF2YWlsYWJpbGl0eU9wdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkb21haW4gZW5kcG9pbnQgb3B0aW9ucyBjb25maWd1cmVkIGZvciBhIGRvbWFpblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfRGVzY3JpYmVEb21haW5FbmRwb2ludE9wdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVEb21haW5FbmRwb2ludE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlRG9tYWluRW5kcG9pbnRPcHRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VhcmNoIGRvbWFpbnMgb3duZWQgYnkgdGhpcyBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9EZXNjcmliZURvbWFpbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVEb21haW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZURvbWFpbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBleHByZXNzaW9ucyBjb25maWd1cmVkIGZvciB0aGUgc2VhcmNoIGRvbWFpblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfRGVzY3JpYmVFeHByZXNzaW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZUV4cHJlc3Npb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUV4cHJlc3Npb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5kZXggZmllbGRzIGNvbmZpZ3VyZWQgZm9yIHRoZSBzZWFyY2ggZG9tYWluXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9EZXNjcmliZUluZGV4RmllbGRzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlSW5kZXhGaWVsZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlSW5kZXhGaWVsZHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzY2FsaW5nIHBhcmFtZXRlcnMgY29uZmlndXJlZCBmb3IgYSBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHNlYXJjaC9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVBJX0Rlc2NyaWJlU2NhbGluZ1BhcmFtZXRlcnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVTY2FsaW5nUGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVTY2FsaW5nUGFyYW1ldGVycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjY2VzcyBwb2xpY2llcyB0aGF0IGNvbnRyb2wgYWNjZXNzIHRvIHRoZSBkb21haW4ncyBkb2N1bWVudCBhbmQgc2VhcmNoIGVuZHBvaW50c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfRGVzY3JpYmVTZXJ2aWNlQWNjZXNzUG9saWNpZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVTZXJ2aWNlQWNjZXNzUG9saWNpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlU2VydmljZUFjY2Vzc1BvbGljaWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3VnZ2VzdGVycyBjb25maWd1cmVkIGZvciBhIGRvbWFpblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfRGVzY3JpYmVTdWdnZXN0ZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlU3VnZ2VzdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVTdWdnZXN0ZXJzJyk7XG4gIH1cblxuICAvKipcbiAgICogVGVsbHMgdGhlIHNlYXJjaCBkb21haW4gdG8gc3RhcnQgaW5kZXhpbmcgaXRzIGRvY3VtZW50cyB1c2luZyB0aGUgbGF0ZXN0IGluZGV4aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9JbmRleERvY3VtZW50cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9JbmRleERvY3VtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnSW5kZXhEb2N1bWVudHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBhbGwgc2VhcmNoIGRvbWFpbnMgb3duZWQgYnkgYW4gYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkc2VhcmNoL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BUElfTGlzdERvbWFpbk5hbWVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3REb21haW5OYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdERvbWFpbk5hbWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYWxsIG9mIHRoZSByZXNvdXJjZSB0YWdzIGZvciBhbiBBbWF6b24gQ2xvdWRTZWFyY2ggZG9tYWluXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9MaXN0VGFncy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFncygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRhZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgdGFncyBmcm9tIGFuIEFtYXpvbiBFUyBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nLCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9SZW1vdmVUYWdzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1JlbW92ZVRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1JlbW92ZVRhZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBhdmFpbGFiaWxpdHkgb3B0aW9ucyBmb3IgYSBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9VcGRhdGVBdmFpbGFiaWxpdHlPcHRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUF2YWlsYWJpbGl0eU9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUF2YWlsYWJpbGl0eU9wdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBkb21haW4gZW5kcG9pbnQgb3B0aW9ucyBmb3IgYSBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9VcGRhdGVEb21haW5FbmRwb2ludE9wdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlRG9tYWluRW5kcG9pbnRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVEb21haW5FbmRwb2ludE9wdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHNjYWxpbmcgcGFyYW1ldGVycyBmb3IgYSBkb21haW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9VcGRhdGVTY2FsaW5nUGFyYW1ldGVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVTY2FsaW5nUGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlU2NhbGluZ1BhcmFtZXRlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBhY2Nlc3MgcnVsZXMgdGhhdCBjb250cm9sIGFjY2VzcyB0byB0aGUgZG9tYWluJ3MgZG9jdW1lbnQgYW5kIHNlYXJjaCBlbmRwb2ludHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBQZXJtaXNzaW9ucyBtYW5hZ2VtZW50LCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FQSV9VcGRhdGVTZXJ2aWNlQWNjZXNzUG9saWNpZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlU2VydmljZUFjY2Vzc1BvbGljaWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVTZXJ2aWNlQWNjZXNzUG9saWNpZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYWNjZXNzIHRvIHRoZSBkb2N1bWVudCBzZXJ2aWNlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvbmZpZ3VyaW5nLWFjY2Vzcy5odG1sI2Nsb3Vkc2VhcmNoLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0RvY3VtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdkb2N1bWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBhY2Nlc3MgdG8gdGhlIHNlYXJjaCBvcGVyYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvbmZpZ3VyaW5nLWFjY2Vzcy5odG1sI2Nsb3Vkc2VhcmNoLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b1NlYXJjaCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnc2VhcmNoJyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGFjY2VzcyB0byB0aGUgc3VnZ2VzdCBvcGVyYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvbmZpZ3VyaW5nLWFjY2Vzcy5odG1sI2Nsb3Vkc2VhcmNoLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b1N1Z2dlc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ3N1Z2dlc3QnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY2Nlc3NMZXZlbExpc3Q6IEFjY2Vzc0xldmVsTGlzdCA9IHtcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnQWRkVGFncycsXG4gICAgICAnUmVtb3ZlVGFncydcbiAgICBdLFxuICAgIFdyaXRlOiBbXG4gICAgICAnQWRkVGFncycsXG4gICAgICAnQnVpbGRTdWdnZXN0ZXJzJyxcbiAgICAgICdDcmVhdGVEb21haW4nLFxuICAgICAgJ0RlZmluZUFuYWx5c2lzU2NoZW1lJyxcbiAgICAgICdEZWZpbmVFeHByZXNzaW9uJyxcbiAgICAgICdEZWZpbmVJbmRleEZpZWxkJyxcbiAgICAgICdEZWZpbmVTdWdnZXN0ZXInLFxuICAgICAgJ0RlbGV0ZUFuYWx5c2lzU2NoZW1lJyxcbiAgICAgICdEZWxldGVEb21haW4nLFxuICAgICAgJ0RlbGV0ZUV4cHJlc3Npb24nLFxuICAgICAgJ0RlbGV0ZUluZGV4RmllbGQnLFxuICAgICAgJ0RlbGV0ZVN1Z2dlc3RlcicsXG4gICAgICAnSW5kZXhEb2N1bWVudHMnLFxuICAgICAgJ1JlbW92ZVRhZ3MnLFxuICAgICAgJ1VwZGF0ZUF2YWlsYWJpbGl0eU9wdGlvbnMnLFxuICAgICAgJ1VwZGF0ZURvbWFpbkVuZHBvaW50T3B0aW9ucycsXG4gICAgICAnVXBkYXRlU2NhbGluZ1BhcmFtZXRlcnMnLFxuICAgICAgJ1VwZGF0ZVNlcnZpY2VBY2Nlc3NQb2xpY2llcycsXG4gICAgICAnZG9jdW1lbnQnXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnRGVzY3JpYmVBbmFseXNpc1NjaGVtZXMnLFxuICAgICAgJ0Rlc2NyaWJlQXZhaWxhYmlsaXR5T3B0aW9ucycsXG4gICAgICAnRGVzY3JpYmVEb21haW5FbmRwb2ludE9wdGlvbnMnLFxuICAgICAgJ0Rlc2NyaWJlRXhwcmVzc2lvbnMnLFxuICAgICAgJ0Rlc2NyaWJlSW5kZXhGaWVsZHMnLFxuICAgICAgJ0Rlc2NyaWJlU2NhbGluZ1BhcmFtZXRlcnMnLFxuICAgICAgJ0Rlc2NyaWJlU2VydmljZUFjY2Vzc1BvbGljaWVzJyxcbiAgICAgICdEZXNjcmliZVN1Z2dlc3RlcnMnLFxuICAgICAgJ0xpc3RUYWdzJyxcbiAgICAgICdzZWFyY2gnLFxuICAgICAgJ3N1Z2dlc3QnXG4gICAgXSxcbiAgICBMaXN0OiBbXG4gICAgICAnRGVzY3JpYmVEb21haW5zJyxcbiAgICAgICdMaXN0RG9tYWluTmFtZXMnXG4gICAgXSxcbiAgICAnUGVybWlzc2lvbnMgbWFuYWdlbWVudCc6IFtcbiAgICAgICdVcGRhdGVTZXJ2aWNlQWNjZXNzUG9saWNpZXMnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBkb21haW4gdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRzZWFyY2gvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NyZWF0aW5nLWRvbWFpbnMuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gZG9tYWluTmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSBkb21haW5OYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvbkRvbWFpbihkb21haW5OYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xvdWRzZWFyY2g6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmRvbWFpbi8keyBkb21haW5OYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2Nsb3Vkc2VhcmNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9jbG91ZHNlYXJjaC5odG1sKS5cbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogaWFtLlBvbGljeVN0YXRlbWVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG59XG4iXX0=