text:
#==============================================================================#
# Route53Domains.jl
#
# This file is generated from:
# https://github.com/aws/aws-sdk-js/blob/master/apis/route53domains-2014-05-15.normal.json
#==============================================================================#

__precompile__()

module Route53Domains

using AWSCore

"""
    using AWSSDK.Route53Domains.check_domain_availability
    check_domain_availability([::AWSConfig], arguments::Dict)
    check_domain_availability([::AWSConfig]; DomainName=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "CheckDomainAvailability", arguments::Dict)
    route53domains([::AWSConfig], "CheckDomainAvailability", DomainName=, <keyword arguments>)

# CheckDomainAvailability Operation

This operation checks the availability of one domain name. Note that if the availability status of a domain is pending, you must submit another request to determine the availability of the domain name.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to get availability for.

Constraints: The domain name can contain only the letters a through z, the numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not supported.

## `IdnLangCode = ::String`
Reserved for future use.

# Returns

`CheckDomainAvailabilityResponse`

# Exceptions

`InvalidInput` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/CheckDomainAvailability)
"""
@inline check_domain_availability(aws::AWSConfig=default_aws_config(); args...) = check_domain_availability(aws, args)

@inline check_domain_availability(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "CheckDomainAvailability", args)

@inline check_domain_availability(args) = check_domain_availability(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.check_domain_transferability
    check_domain_transferability([::AWSConfig], arguments::Dict)
    check_domain_transferability([::AWSConfig]; DomainName=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "CheckDomainTransferability", arguments::Dict)
    route53domains([::AWSConfig], "CheckDomainTransferability", DomainName=, <keyword arguments>)

# CheckDomainTransferability Operation

Checks whether a domain name can be transferred to Amazon Route 53.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to transfer to Amazon Route 53.

Constraints: The domain name can contain only the letters a through z, the numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not supported.

## `AuthCode = ::String`
If the registrar for the top-level domain (TLD) requires an authorization code to transfer the domain, the code that you got from the current registrar for the domain.

# Returns

`CheckDomainTransferabilityResponse`

# Exceptions

`InvalidInput` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/CheckDomainTransferability)
"""
@inline check_domain_transferability(aws::AWSConfig=default_aws_config(); args...) = check_domain_transferability(aws, args)

@inline check_domain_transferability(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "CheckDomainTransferability", args)

@inline check_domain_transferability(args) = check_domain_transferability(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.delete_tags_for_domain
    delete_tags_for_domain([::AWSConfig], arguments::Dict)
    delete_tags_for_domain([::AWSConfig]; DomainName=, TagsToDelete=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "DeleteTagsForDomain", arguments::Dict)
    route53domains([::AWSConfig], "DeleteTagsForDomain", DomainName=, TagsToDelete=)

# DeleteTagsForDomain Operation

This operation deletes the specified tags for a domain.

All tag operations are eventually consistent; subsequent operations might not immediately represent all issued operations.

# Arguments

## `DomainName = ::String` -- *Required*
The domain for which you want to delete one or more tags.

## `TagsToDelete = [::String, ...]` -- *Required*
A list of tag keys to delete.

# Returns

`DeleteTagsForDomainResponse`

# Exceptions

`InvalidInput`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/DeleteTagsForDomain)
"""
@inline delete_tags_for_domain(aws::AWSConfig=default_aws_config(); args...) = delete_tags_for_domain(aws, args)

@inline delete_tags_for_domain(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "DeleteTagsForDomain", args)

@inline delete_tags_for_domain(args) = delete_tags_for_domain(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.disable_domain_auto_renew
    disable_domain_auto_renew([::AWSConfig], arguments::Dict)
    disable_domain_auto_renew([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "DisableDomainAutoRenew", arguments::Dict)
    route53domains([::AWSConfig], "DisableDomainAutoRenew", DomainName=)

# DisableDomainAutoRenew Operation

This operation disables automatic renewal of domain registration for the specified domain.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to disable automatic renewal for.

# Returns

`DisableDomainAutoRenewResponse`

# Exceptions

`InvalidInput` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/DisableDomainAutoRenew)
"""
@inline disable_domain_auto_renew(aws::AWSConfig=default_aws_config(); args...) = disable_domain_auto_renew(aws, args)

@inline disable_domain_auto_renew(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "DisableDomainAutoRenew", args)

@inline disable_domain_auto_renew(args) = disable_domain_auto_renew(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.disable_domain_transfer_lock
    disable_domain_transfer_lock([::AWSConfig], arguments::Dict)
    disable_domain_transfer_lock([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "DisableDomainTransferLock", arguments::Dict)
    route53domains([::AWSConfig], "DisableDomainTransferLock", DomainName=)

# DisableDomainTransferLock Operation

This operation removes the transfer lock on the domain (specifically the `clientTransferProhibited` status) to allow domain transfers. We recommend you refrain from performing this action unless you intend to transfer the domain to a different registrar. Successful submission returns an operation ID that you can use to track the progress and completion of the action. If the request is not completed successfully, the domain registrant will be notified by email.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to remove the transfer lock for.

# Returns

`DisableDomainTransferLockResponse`

# Exceptions

`InvalidInput`, `DuplicateRequest`, `TLDRulesViolation`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/DisableDomainTransferLock)
"""
@inline disable_domain_transfer_lock(aws::AWSConfig=default_aws_config(); args...) = disable_domain_transfer_lock(aws, args)

@inline disable_domain_transfer_lock(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "DisableDomainTransferLock", args)

@inline disable_domain_transfer_lock(args) = disable_domain_transfer_lock(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.enable_domain_auto_renew
    enable_domain_auto_renew([::AWSConfig], arguments::Dict)
    enable_domain_auto_renew([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "EnableDomainAutoRenew", arguments::Dict)
    route53domains([::AWSConfig], "EnableDomainAutoRenew", DomainName=)

# EnableDomainAutoRenew Operation

This operation configures Amazon Route 53 to automatically renew the specified domain before the domain registration expires. The cost of renewing your domain registration is billed to your AWS account.

The period during which you can renew a domain name varies by TLD. For a list of TLDs and their renewal policies, see ["Renewal, restoration, and deletion times"](http://wiki.gandi.net/en/domains/renew#renewal_restoration_and_deletion_times) on the website for our registrar associate, Gandi. Amazon Route 53 requires that you renew before the end of the renewal period that is listed on the Gandi website so we can complete processing before the deadline.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to enable automatic renewal for.

# Returns

`EnableDomainAutoRenewResponse`

# Exceptions

`InvalidInput`, `UnsupportedTLD` or `TLDRulesViolation`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/EnableDomainAutoRenew)
"""
@inline enable_domain_auto_renew(aws::AWSConfig=default_aws_config(); args...) = enable_domain_auto_renew(aws, args)

@inline enable_domain_auto_renew(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "EnableDomainAutoRenew", args)

@inline enable_domain_auto_renew(args) = enable_domain_auto_renew(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.enable_domain_transfer_lock
    enable_domain_transfer_lock([::AWSConfig], arguments::Dict)
    enable_domain_transfer_lock([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "EnableDomainTransferLock", arguments::Dict)
    route53domains([::AWSConfig], "EnableDomainTransferLock", DomainName=)

# EnableDomainTransferLock Operation

This operation sets the transfer lock on the domain (specifically the `clientTransferProhibited` status) to prevent domain transfers. Successful submission returns an operation ID that you can use to track the progress and completion of the action. If the request is not completed successfully, the domain registrant will be notified by email.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to set the transfer lock for.

# Returns

`EnableDomainTransferLockResponse`

# Exceptions

`InvalidInput`, `DuplicateRequest`, `TLDRulesViolation`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/EnableDomainTransferLock)
"""
@inline enable_domain_transfer_lock(aws::AWSConfig=default_aws_config(); args...) = enable_domain_transfer_lock(aws, args)

@inline enable_domain_transfer_lock(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "EnableDomainTransferLock", args)

@inline enable_domain_transfer_lock(args) = enable_domain_transfer_lock(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.get_contact_reachability_status
    get_contact_reachability_status([::AWSConfig], arguments::Dict)
    get_contact_reachability_status([::AWSConfig]; <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "GetContactReachabilityStatus", arguments::Dict)
    route53domains([::AWSConfig], "GetContactReachabilityStatus", <keyword arguments>)

# GetContactReachabilityStatus Operation

For operations that require confirmation that the email address for the registrant contact is valid, such as registering a new domain, this operation returns information about whether the registrant contact has responded.

If you want us to resend the email, use the `ResendContactReachabilityEmail` operation.

# Arguments

## `domainName = ::String`
The name of the domain for which you want to know whether the registrant contact has confirmed that the email address is valid.

# Returns

`GetContactReachabilityStatusResponse`

# Exceptions

`InvalidInput`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/GetContactReachabilityStatus)
"""
@inline get_contact_reachability_status(aws::AWSConfig=default_aws_config(); args...) = get_contact_reachability_status(aws, args)

@inline get_contact_reachability_status(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "GetContactReachabilityStatus", args)

@inline get_contact_reachability_status(args) = get_contact_reachability_status(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.get_domain_detail
    get_domain_detail([::AWSConfig], arguments::Dict)
    get_domain_detail([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "GetDomainDetail", arguments::Dict)
    route53domains([::AWSConfig], "GetDomainDetail", DomainName=)

# GetDomainDetail Operation

This operation returns detailed information about a specified domain that is associated with the current AWS account. Contact information for the domain is also returned as part of the output.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to get detailed information about.

# Returns

`GetDomainDetailResponse`

# Exceptions

`InvalidInput` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/GetDomainDetail)
"""
@inline get_domain_detail(aws::AWSConfig=default_aws_config(); args...) = get_domain_detail(aws, args)

@inline get_domain_detail(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "GetDomainDetail", args)

@inline get_domain_detail(args) = get_domain_detail(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.get_domain_suggestions
    get_domain_suggestions([::AWSConfig], arguments::Dict)
    get_domain_suggestions([::AWSConfig]; DomainName=, SuggestionCount=, OnlyAvailable=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "GetDomainSuggestions", arguments::Dict)
    route53domains([::AWSConfig], "GetDomainSuggestions", DomainName=, SuggestionCount=, OnlyAvailable=)

# GetDomainSuggestions Operation

The GetDomainSuggestions operation returns a list of suggested domain names given a string, which can either be a domain name or simply a word or phrase (without spaces).

# Arguments

## `DomainName = ::String` -- *Required*
A domain name that you want to use as the basis for a list of possible domain names. The domain name must contain a top-level domain (TLD), such as .com, that Amazon Route 53 supports. For a list of TLDs, see [Domains that You Can Register with Amazon Route 53](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar-tld-list.html) in the *Amazon Route 53 Developer Guide*.

## `SuggestionCount = ::Int` -- *Required*
The number of suggested domain names that you want Amazon Route 53 to return.

## `OnlyAvailable = ::Bool` -- *Required*
If `OnlyAvailable` is `true`, Amazon Route 53 returns only domain names that are available. If `OnlyAvailable` is `false`, Amazon Route 53 returns domain names without checking whether they're available to be registered. To determine whether the domain is available, you can call `checkDomainAvailability` for each suggestion.

# Returns

`GetDomainSuggestionsResponse`

# Exceptions

`InvalidInput` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/GetDomainSuggestions)
"""
@inline get_domain_suggestions(aws::AWSConfig=default_aws_config(); args...) = get_domain_suggestions(aws, args)

@inline get_domain_suggestions(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "GetDomainSuggestions", args)

@inline get_domain_suggestions(args) = get_domain_suggestions(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.get_operation_detail
    get_operation_detail([::AWSConfig], arguments::Dict)
    get_operation_detail([::AWSConfig]; OperationId=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "GetOperationDetail", arguments::Dict)
    route53domains([::AWSConfig], "GetOperationDetail", OperationId=)

# GetOperationDetail Operation

This operation returns the current status of an operation that is not completed.

# Arguments

## `OperationId = ::String` -- *Required*
The identifier for the operation for which you want to get the status. Amazon Route 53 returned the identifier in the response to the original request.

# Returns

`GetOperationDetailResponse`

# Exceptions

`InvalidInput`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/GetOperationDetail)
"""
@inline get_operation_detail(aws::AWSConfig=default_aws_config(); args...) = get_operation_detail(aws, args)

@inline get_operation_detail(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "GetOperationDetail", args)

@inline get_operation_detail(args) = get_operation_detail(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.list_domains
    list_domains([::AWSConfig], arguments::Dict)
    list_domains([::AWSConfig]; <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "ListDomains", arguments::Dict)
    route53domains([::AWSConfig], "ListDomains", <keyword arguments>)

# ListDomains Operation

This operation returns all the domain names registered with Amazon Route 53 for the current AWS account.

# Arguments

## `Marker = ::String`
For an initial request for a list of domains, omit this element. If the number of domains that are associated with the current AWS account is greater than the value that you specified for `MaxItems`, you can use `Marker` to return additional domains. Get the value of `NextPageMarker` from the previous response, and submit another request that includes the value of `NextPageMarker` in the `Marker` element.

Constraints: The marker must match the value specified in the previous request.

## `MaxItems = ::Int`
Number of domains to be returned.

Default: 20

# Returns

`ListDomainsResponse`

# Exceptions

`InvalidInput`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/ListDomains)
"""
@inline list_domains(aws::AWSConfig=default_aws_config(); args...) = list_domains(aws, args)

@inline list_domains(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "ListDomains", args)

@inline list_domains(args) = list_domains(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.list_operations
    list_operations([::AWSConfig], arguments::Dict)
    list_operations([::AWSConfig]; <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "ListOperations", arguments::Dict)
    route53domains([::AWSConfig], "ListOperations", <keyword arguments>)

# ListOperations Operation

This operation returns the operation IDs of operations that are not yet complete.

# Arguments

## `SubmittedSince = timestamp`
An optional parameter that lets you get information about all the operations that you submitted after a specified date and time. Specify the date and time in Coordinated Universal time (UTC).

## `Marker = ::String`
For an initial request for a list of operations, omit this element. If the number of operations that are not yet complete is greater than the value that you specified for `MaxItems`, you can use `Marker` to return additional operations. Get the value of `NextPageMarker` from the previous response, and submit another request that includes the value of `NextPageMarker` in the `Marker` element.

## `MaxItems = ::Int`
Number of domains to be returned.

Default: 20

# Returns

`ListOperationsResponse`

# Exceptions

`InvalidInput`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/ListOperations)
"""
@inline list_operations(aws::AWSConfig=default_aws_config(); args...) = list_operations(aws, args)

@inline list_operations(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "ListOperations", args)

@inline list_operations(args) = list_operations(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.list_tags_for_domain
    list_tags_for_domain([::AWSConfig], arguments::Dict)
    list_tags_for_domain([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "ListTagsForDomain", arguments::Dict)
    route53domains([::AWSConfig], "ListTagsForDomain", DomainName=)

# ListTagsForDomain Operation

This operation returns all of the tags that are associated with the specified domain.

All tag operations are eventually consistent; subsequent operations might not immediately represent all issued operations.

# Arguments

## `DomainName = ::String` -- *Required*
The domain for which you want to get a list of tags.

# Returns

`ListTagsForDomainResponse`

# Exceptions

`InvalidInput`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/ListTagsForDomain)
"""
@inline list_tags_for_domain(aws::AWSConfig=default_aws_config(); args...) = list_tags_for_domain(aws, args)

@inline list_tags_for_domain(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "ListTagsForDomain", args)

@inline list_tags_for_domain(args) = list_tags_for_domain(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.register_domain
    register_domain([::AWSConfig], arguments::Dict)
    register_domain([::AWSConfig]; DomainName=, DurationInYears=, AdminContact=, RegistrantContact=, TechContact=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "RegisterDomain", arguments::Dict)
    route53domains([::AWSConfig], "RegisterDomain", DomainName=, DurationInYears=, AdminContact=, RegistrantContact=, TechContact=, <keyword arguments>)

# RegisterDomain Operation

This operation registers a domain. Domains are registered either by Amazon Registrar (for .com, .net, and .org domains) or by our registrar associate, Gandi (for all other domains). For some top-level domains (TLDs), this operation requires extra parameters.

When you register a domain, Amazon Route 53 does the following:

*   Creates a Amazon Route 53 hosted zone that has the same name as the domain. Amazon Route 53 assigns four name servers to your hosted zone and automatically updates your domain registration with the names of these name servers.

*   Enables autorenew, so your domain registration will renew automatically each year. We'll notify you in advance of the renewal date so you can choose whether to renew the registration.

*   Optionally enables privacy protection, so WHOIS queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you don't enable privacy protection, WHOIS queries return the information that you entered for the registrant, admin, and tech contacts.

*   If registration is successful, returns an operation ID that you can use to track the progress and completion of the action. If the request is not completed successfully, the domain registrant is notified by email.

*   Charges your AWS account an amount based on the top-level domain. For more information, see [Amazon Route 53 Pricing](http://aws.amazon.com/route53/pricing/).

# Arguments

## `DomainName = ::String` -- *Required*
The domain name that you want to register.

Constraints: The domain name can contain only the letters a through z, the numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not supported.

## `IdnLangCode = ::String`
Reserved for future use.

## `DurationInYears = ::Int` -- *Required*
The number of years that you want to register the domain for. Domains are registered for a minimum of one year. The maximum period depends on the top-level domain. For the range of valid values for your domain, see [Domains that You Can Register with Amazon Route 53](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar-tld-list.html) in the *Amazon Route 53 Developer Guide*.

Default: 1

## `AutoRenew = ::Bool`
Indicates whether the domain will be automatically renewed (`true`) or not (`false`). Autorenewal only takes effect after the account is charged.

Default: `true`

## `AdminContact = [ ... ]` -- *Required*
Provides detailed contact information.
```
 AdminContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `RegistrantContact = [ ... ]` -- *Required*
Provides detailed contact information.
```
 RegistrantContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `TechContact = [ ... ]` -- *Required*
Provides detailed contact information.
```
 TechContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `PrivacyProtectAdminContact = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the admin contact.

Default: `true`

## `PrivacyProtectRegistrantContact = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the registrant contact (the domain owner).

Default: `true`

## `PrivacyProtectTechContact = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the technical contact.

Default: `true`

# Returns

`RegisterDomainResponse`

# Exceptions

`InvalidInput`, `UnsupportedTLD`, `DuplicateRequest`, `TLDRulesViolation`, `DomainLimitExceeded` or `OperationLimitExceeded`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/RegisterDomain)
"""
@inline register_domain(aws::AWSConfig=default_aws_config(); args...) = register_domain(aws, args)

@inline register_domain(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "RegisterDomain", args)

@inline register_domain(args) = register_domain(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.renew_domain
    renew_domain([::AWSConfig], arguments::Dict)
    renew_domain([::AWSConfig]; DomainName=, CurrentExpiryYear=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "RenewDomain", arguments::Dict)
    route53domains([::AWSConfig], "RenewDomain", DomainName=, CurrentExpiryYear=, <keyword arguments>)

# RenewDomain Operation

This operation renews a domain for the specified number of years. The cost of renewing your domain is billed to your AWS account.

We recommend that you renew your domain several weeks before the expiration date. Some TLD registries delete domains before the expiration date if you haven't renewed far enough in advance. For more information about renewing domain registration, see [Renewing Registration for a Domain](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-renew.html) in the Amazon Route 53 Developer Guide.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to renew.

## `DurationInYears = ::Int`
The number of years that you want to renew the domain for. The maximum number of years depends on the top-level domain. For the range of valid values for your domain, see [Domains that You Can Register with Amazon Route 53](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar-tld-list.html) in the *Amazon Route 53 Developer Guide*.

Default: 1

## `CurrentExpiryYear = ::Int` -- *Required*
The year when the registration for the domain is set to expire. This value must match the current expiration date for the domain.

# Returns

`RenewDomainResponse`

# Exceptions

`InvalidInput`, `UnsupportedTLD`, `DuplicateRequest`, `TLDRulesViolation` or `OperationLimitExceeded`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/RenewDomain)
"""
@inline renew_domain(aws::AWSConfig=default_aws_config(); args...) = renew_domain(aws, args)

@inline renew_domain(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "RenewDomain", args)

@inline renew_domain(args) = renew_domain(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.resend_contact_reachability_email
    resend_contact_reachability_email([::AWSConfig], arguments::Dict)
    resend_contact_reachability_email([::AWSConfig]; <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "ResendContactReachabilityEmail", arguments::Dict)
    route53domains([::AWSConfig], "ResendContactReachabilityEmail", <keyword arguments>)

# ResendContactReachabilityEmail Operation

For operations that require confirmation that the email address for the registrant contact is valid, such as registering a new domain, this operation resends the confirmation email to the current email address for the registrant contact.

# Arguments

## `domainName = ::String`
The name of the domain for which you want Amazon Route 53 to resend a confirmation email to the registrant contact.

# Returns

`ResendContactReachabilityEmailResponse`

# Exceptions

`InvalidInput`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/ResendContactReachabilityEmail)
"""
@inline resend_contact_reachability_email(aws::AWSConfig=default_aws_config(); args...) = resend_contact_reachability_email(aws, args)

@inline resend_contact_reachability_email(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "ResendContactReachabilityEmail", args)

@inline resend_contact_reachability_email(args) = resend_contact_reachability_email(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.retrieve_domain_auth_code
    retrieve_domain_auth_code([::AWSConfig], arguments::Dict)
    retrieve_domain_auth_code([::AWSConfig]; DomainName=)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "RetrieveDomainAuthCode", arguments::Dict)
    route53domains([::AWSConfig], "RetrieveDomainAuthCode", DomainName=)

# RetrieveDomainAuthCode Operation

This operation returns the AuthCode for the domain. To transfer a domain to another registrar, you provide this value to the new registrar.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to get an authorization code for.

# Returns

`RetrieveDomainAuthCodeResponse`

# Exceptions

`InvalidInput` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/RetrieveDomainAuthCode)
"""
@inline retrieve_domain_auth_code(aws::AWSConfig=default_aws_config(); args...) = retrieve_domain_auth_code(aws, args)

@inline retrieve_domain_auth_code(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "RetrieveDomainAuthCode", args)

@inline retrieve_domain_auth_code(args) = retrieve_domain_auth_code(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.transfer_domain
    transfer_domain([::AWSConfig], arguments::Dict)
    transfer_domain([::AWSConfig]; DomainName=, DurationInYears=, AdminContact=, RegistrantContact=, TechContact=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "TransferDomain", arguments::Dict)
    route53domains([::AWSConfig], "TransferDomain", DomainName=, DurationInYears=, AdminContact=, RegistrantContact=, TechContact=, <keyword arguments>)

# TransferDomain Operation

This operation transfers a domain from another registrar to Amazon Route 53. When the transfer is complete, the domain is registered either with Amazon Registrar (for .com, .net, and .org domains) or with our registrar associate, Gandi (for all other TLDs).

For transfer requirements, a detailed procedure, and information about viewing the status of a domain transfer, see [Transferring Registration for a Domain to Amazon Route 53](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-transfer-to-route-53.html) in the *Amazon Route 53 Developer Guide*.

If the registrar for your domain is also the DNS service provider for the domain, we highly recommend that you consider transferring your DNS service to Amazon Route 53 or to another DNS service provider before you transfer your registration. Some registrars provide free DNS service when you purchase a domain registration. When you transfer the registration, the previous registrar will not renew your domain registration and could end your DNS service at any time.

**Important**
> If the registrar for your domain is also the DNS service provider for the domain and you don't transfer DNS service to another provider, your website, email, and the web applications associated with the domain might become unavailable.

If the transfer is successful, this method returns an operation ID that you can use to track the progress and completion of the action. If the transfer doesn't complete successfully, the domain registrant will be notified by email.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to transfer to Amazon Route 53.

Constraints: The domain name can contain only the letters a through z, the numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not supported.

## `IdnLangCode = ::String`
Reserved for future use.

## `DurationInYears = ::Int` -- *Required*
The number of years that you want to register the domain for. Domains are registered for a minimum of one year. The maximum period depends on the top-level domain.

Default: 1

## `Nameservers = [[ ... ], ...]`
Contains details for the host and glue IP addresses.
```
 Nameservers = [[
        "Name" => <required> ::String,
        "GlueIps" =>  [::String, ...]
    ], ...]
```

## `AuthCode = ::String`
The authorization code for the domain. You get this value from the current registrar.

## `AutoRenew = ::Bool`
Indicates whether the domain will be automatically renewed (true) or not (false). Autorenewal only takes effect after the account is charged.

Default: true

## `AdminContact = [ ... ]` -- *Required*
Provides detailed contact information.
```
 AdminContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `RegistrantContact = [ ... ]` -- *Required*
Provides detailed contact information.
```
 RegistrantContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `TechContact = [ ... ]` -- *Required*
Provides detailed contact information.
```
 TechContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `PrivacyProtectAdminContact = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the admin contact.

Default: `true`

## `PrivacyProtectRegistrantContact = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the registrant contact (domain owner).

Default: `true`

## `PrivacyProtectTechContact = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the technical contact.

Default: `true`

# Returns

`TransferDomainResponse`

# Exceptions

`InvalidInput`, `UnsupportedTLD`, `DuplicateRequest`, `TLDRulesViolation`, `DomainLimitExceeded` or `OperationLimitExceeded`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/TransferDomain)
"""
@inline transfer_domain(aws::AWSConfig=default_aws_config(); args...) = transfer_domain(aws, args)

@inline transfer_domain(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "TransferDomain", args)

@inline transfer_domain(args) = transfer_domain(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.update_domain_contact
    update_domain_contact([::AWSConfig], arguments::Dict)
    update_domain_contact([::AWSConfig]; DomainName=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "UpdateDomainContact", arguments::Dict)
    route53domains([::AWSConfig], "UpdateDomainContact", DomainName=, <keyword arguments>)

# UpdateDomainContact Operation

This operation updates the contact information for a particular domain. You must specify information for at least one contact: registrant, administrator, or technical.

If the update is successful, this method returns an operation ID that you can use to track the progress and completion of the action. If the request is not completed successfully, the domain registrant will be notified by email.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to update contact information for.

## `AdminContact = [ ... ]`
Provides detailed contact information.
```
 AdminContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `RegistrantContact = [ ... ]`
Provides detailed contact information.
```
 RegistrantContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

## `TechContact = [ ... ]`
Provides detailed contact information.
```
 TechContact = [
        "FirstName" =>  ::String,
        "LastName" =>  ::String,
        "ContactType" =>  "PERSON", "COMPANY", "ASSOCIATION", "PUBLIC_BODY" or "RESELLER",
        "OrganizationName" =>  ::String,
        "AddressLine1" =>  ::String,
        "AddressLine2" =>  ::String,
        "City" =>  ::String,
        "State" =>  ::String,
        "CountryCode" =>  "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GH", "GI", "GL", "GM", "GN", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM" or "ZW",
        "ZipCode" =>  ::String,
        "PhoneNumber" =>  ::String,
        "Email" =>  ::String,
        "Fax" =>  ::String,
        "ExtraParams" =>  [[
            "Name" => <required> "DUNS_NUMBER", "BRAND_NUMBER", "BIRTH_DEPARTMENT", "BIRTH_DATE_IN_YYYY_MM_DD", "BIRTH_COUNTRY", "BIRTH_CITY", "DOCUMENT_NUMBER", "AU_ID_NUMBER", "AU_ID_TYPE", "CA_LEGAL_TYPE", "CA_BUSINESS_ENTITY_TYPE", "ES_IDENTIFICATION", "ES_IDENTIFICATION_TYPE", "ES_LEGAL_FORM", "FI_BUSINESS_NUMBER", "FI_ID_NUMBER", "FI_NATIONALITY", "FI_ORGANIZATION_TYPE", "IT_PIN", "IT_REGISTRANT_ENTITY_TYPE", "RU_PASSPORT_DATA", "SE_ID_NUMBER", "SG_ID_NUMBER", "VAT_NUMBER", "UK_CONTACT_TYPE" or "UK_COMPANY_NUMBER",
            "Value" => <required> ::String
        ], ...]
    ]
```

# Returns

`UpdateDomainContactResponse`

# Exceptions

`InvalidInput`, `DuplicateRequest`, `TLDRulesViolation`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/UpdateDomainContact)
"""
@inline update_domain_contact(aws::AWSConfig=default_aws_config(); args...) = update_domain_contact(aws, args)

@inline update_domain_contact(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "UpdateDomainContact", args)

@inline update_domain_contact(args) = update_domain_contact(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.update_domain_contact_privacy
    update_domain_contact_privacy([::AWSConfig], arguments::Dict)
    update_domain_contact_privacy([::AWSConfig]; DomainName=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "UpdateDomainContactPrivacy", arguments::Dict)
    route53domains([::AWSConfig], "UpdateDomainContactPrivacy", DomainName=, <keyword arguments>)

# UpdateDomainContactPrivacy Operation

This operation updates the specified domain contact's privacy setting. When privacy protection is enabled, contact information such as email address is replaced either with contact information for Amazon Registrar (for .com, .net, and .org domains) or with contact information for our registrar associate, Gandi.

This operation affects only the contact information for the specified contact type (registrant, administrator, or tech). If the request succeeds, Amazon Route 53 returns an operation ID that you can use with [GetOperationDetail](@ref) to track the progress and completion of the action. If the request doesn't complete successfully, the domain registrant will be notified by email.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to update the privacy setting for.

## `AdminPrivacy = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the admin contact.

## `RegistrantPrivacy = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the registrant contact (domain owner).

## `TechPrivacy = ::Bool`
Whether you want to conceal contact information from WHOIS queries. If you specify `true`, WHOIS ("who is") queries return contact information either for Amazon Registrar (for .com, .net, and .org domains) or for our registrar associate, Gandi (for all other TLDs). If you specify `false`, WHOIS queries return the information that you entered for the technical contact.

# Returns

`UpdateDomainContactPrivacyResponse`

# Exceptions

`InvalidInput`, `DuplicateRequest`, `TLDRulesViolation`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/UpdateDomainContactPrivacy)
"""
@inline update_domain_contact_privacy(aws::AWSConfig=default_aws_config(); args...) = update_domain_contact_privacy(aws, args)

@inline update_domain_contact_privacy(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "UpdateDomainContactPrivacy", args)

@inline update_domain_contact_privacy(args) = update_domain_contact_privacy(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.update_domain_nameservers
    update_domain_nameservers([::AWSConfig], arguments::Dict)
    update_domain_nameservers([::AWSConfig]; DomainName=, Nameservers=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "UpdateDomainNameservers", arguments::Dict)
    route53domains([::AWSConfig], "UpdateDomainNameservers", DomainName=, Nameservers=, <keyword arguments>)

# UpdateDomainNameservers Operation

This operation replaces the current set of name servers for the domain with the specified set of name servers. If you use Amazon Route 53 as your DNS service, specify the four name servers in the delegation set for the hosted zone for the domain.

If successful, this operation returns an operation ID that you can use to track the progress and completion of the action. If the request is not completed successfully, the domain registrant will be notified by email.

# Arguments

## `DomainName = ::String` -- *Required*
The name of the domain that you want to change name servers for.

## `FIAuthKey = ::String`
The authorization key for .fi domains

## `Nameservers = [[ ... ], ...]` -- *Required*
A list of new name servers for the domain.
```
 Nameservers = [[
        "Name" => <required> ::String,
        "GlueIps" =>  [::String, ...]
    ], ...]
```

# Returns

`UpdateDomainNameserversResponse`

# Exceptions

`InvalidInput`, `DuplicateRequest`, `TLDRulesViolation`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/UpdateDomainNameservers)
"""
@inline update_domain_nameservers(aws::AWSConfig=default_aws_config(); args...) = update_domain_nameservers(aws, args)

@inline update_domain_nameservers(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "UpdateDomainNameservers", args)

@inline update_domain_nameservers(args) = update_domain_nameservers(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.update_tags_for_domain
    update_tags_for_domain([::AWSConfig], arguments::Dict)
    update_tags_for_domain([::AWSConfig]; DomainName=, <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "UpdateTagsForDomain", arguments::Dict)
    route53domains([::AWSConfig], "UpdateTagsForDomain", DomainName=, <keyword arguments>)

# UpdateTagsForDomain Operation

This operation adds or updates tags for a specified domain.

All tag operations are eventually consistent; subsequent operations might not immediately represent all issued operations.

# Arguments

## `DomainName = ::String` -- *Required*
The domain for which you want to add or update tags.

## `TagsToUpdate = [[ ... ], ...]`
A list of the tag keys and values that you want to add or update. If you specify a key that already exists, the corresponding value will be replaced.
```
 TagsToUpdate = [[
        "Key" =>  ::String,
        "Value" =>  ::String
    ], ...]
```

# Returns

`UpdateTagsForDomainResponse`

# Exceptions

`InvalidInput`, `OperationLimitExceeded` or `UnsupportedTLD`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/UpdateTagsForDomain)
"""
@inline update_tags_for_domain(aws::AWSConfig=default_aws_config(); args...) = update_tags_for_domain(aws, args)

@inline update_tags_for_domain(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "UpdateTagsForDomain", args)

@inline update_tags_for_domain(args) = update_tags_for_domain(default_aws_config(), args)

"""
    using AWSSDK.Route53Domains.view_billing
    view_billing([::AWSConfig], arguments::Dict)
    view_billing([::AWSConfig]; <keyword arguments>)

    using AWSCore.Services.route53domains
    route53domains([::AWSConfig], "ViewBilling", arguments::Dict)
    route53domains([::AWSConfig], "ViewBilling", <keyword arguments>)

# ViewBilling Operation

Returns all the domain-related billing records for the current AWS account for a specified period

# Arguments

## `Start = timestamp`
The beginning date and time for the time period for which you want a list of billing records. Specify the date and time in Coordinated Universal time (UTC).

## `End = timestamp`
The end date and time for the time period for which you want a list of billing records. Specify the date and time in Coordinated Universal time (UTC).

## `Marker = ::String`
For an initial request for a list of billing records, omit this element. If the number of billing records that are associated with the current AWS account during the specified period is greater than the value that you specified for `MaxItems`, you can use `Marker` to return additional billing records. Get the value of `NextPageMarker` from the previous response, and submit another request that includes the value of `NextPageMarker` in the `Marker` element.

Constraints: The marker must match the value of `NextPageMarker` that was returned in the previous response.

## `MaxItems = ::Int`
The number of billing records to be returned.

Default: 20

# Returns

`ViewBillingResponse`

# Exceptions

`InvalidInput`.

See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/route53domains-2014-05-15/ViewBilling)
"""
@inline view_billing(aws::AWSConfig=default_aws_config(); args...) = view_billing(aws, args)

@inline view_billing(aws::AWSConfig, args) = AWSCore.Services.route53domains(aws, "ViewBilling", args)

@inline view_billing(args) = view_billing(default_aws_config(), args)

end # module Route53Domains

#==============================================================================#
# End of file
#==============================================================================#


text:
using Plots

data = readdlm(IOBuffer("""
    1 |           524288 |        1.026098 |     0.000510953
    2 |           524288 |        1.285015 |     0.000408001
    4 |           524288 |        1.286281 |     0.000407600
    8 |           524288 |        1.165687 |     0.000449767
   16 |           524288 |        1.103974 |     0.000474910
   32 |           524288 |        1.205526 |     0.000434904
   64 |           524288 |        1.112961 |     0.000471075
   """), '|')

data[:,4]*=524288/4096 #Correct reporting error

plot([1,64], [data[1,4], data[1,4]*64], c=:lightgrey, label="ideal")
plot!(data[:,1], data[:,4], xlabel="# cores", ylabel="Gflops", c=:blue, label="",
	xlims=(0,64), ylims=(0,0.1))
scatter!(data[:,1], data[:,4], c=:blue, label="")
png("../plots/randomupdate")

ext: jl


text:
# =================================#
# Dictionaries store mappings      #
# key => value pairs               #
# key is indexed and unique        #
# =================================#
d = Dict()

# append elements
d['a']=1; d['b']=4; d['c']=8
println("d = ",d)

# Create a dictionary using a literal
numbers = Dict( "one"   => 1,
                "two"   => 2,
                "three" => 3)
println("numbers = ", numbers)

# Access elements
println("first =", numbers["one"])
println("last  =", numbers["three"])

max_stars_repo_name: elucian/julia

max_issues_repo_name: elucian/julia

max_forks_repo_name: elucian/julia


text:
# To run this script, `cd` to the `./test/fixtures` directory and then, from the Julia terminal, `include("./runner.jl")`.

import JSON

# Integer values:
x = linspace( -1000, 1000, 2001 )
y = sinpi( x )

data = Dict([
	("x", x),
	("expected", y)
])

outfile = open( "./integers.json", "w" )
write( outfile, JSON.json(data) )
close( outfile )

# Decimal values:
x = linspace( -100, 100, 2003 )
y = sinpi( x )

data = Dict([
	("x", x),
	("expected", y)
])

outfile = open( "./decimals.json", "w" )
write( outfile, JSON.json(data) )
close( outfile )

max_stars_repo_name: math-io/sinpi

max_issues_repo_name: math-io/sinpi

max_forks_repo_name: math-io/sinpi


text: println("Julia running inside docker.")

max_stars_repo_name: joshuawalcher/dockerfile-boilerplates

max_issues_repo_name: joshuawalcher/dockerfile-boilerplates

max_forks_repo_name: joshuawalcher/dockerfile-boilerplates


text:
include("../graph_utils.jl")

function lif_graph(vstart::Float64, vthresh::Float64)
    nin = 5; nout = 5
    mg = get_graph(nin, nout, 20)
    add_node!(mg, nin+1, CGP.Config.f_const, p=vthresh)
    add_node!(mg, nin+2, CGP.Config.f_const, p=0.8)
    add_node!(mg, nin+3, CGP.Config.f_const, p=vstart)
    add_node!(mg, nin+4, CGP.Config.f_const, p=-0.05)
    add_node!(mg, nin+5, CGP.Config.f_const, p=1.0)
    add_node!(mg, nin+6, CGP.Config.f_gte, x=1, y=nin+1)
    add_node!(mg, nin+7, CGP.Config.f_gt, x=nin+2, y=2)
    add_node!(mg, nin+8, CGP.Config.f_mult, x=nin+6, y=nin+7)
    add_node!(mg, nin+9, CGP.Config.f_minus, x=nin+5, y=nin+8)
    add_node!(mg, nin+10, CGP.Config.f_minus, x=nin+3, y=1)
    add_node!(mg, nin+11, CGP.Config.f_mult, x=nin+4, y=1)
    add_node!(mg, nin+12, CGP.Config.f_mult, x=nin+10, y=nin+8)
    add_node!(mg, nin+13, CGP.Config.f_sum, x=nin+11, y=5)
    add_node!(mg, nin+14, CGP.Config.f_mult, x=nin+13, y=nin+9)
    add_node!(mg, nin+15, CGP.Config.f_sum, x=nin+14, y=nin+12)
    add_node!(mg, nin+16, CGP.Config.f_minus, x=nin+5, y=2)
    add_node!(mg, nin+17, CGP.Config.f_mult, x=nin+4, y=2)
    add_node!(mg, nin+18, CGP.Config.f_mult, x=nin+16, y=nin+8)
    add_node!(mg, nin+19, CGP.Config.f_mult, x=nin+17, y=nin+9)
    add_node!(mg, nin+20, CGP.Config.f_sum, x=nin+18, y=nin+19)
    set_outputs!(mg, nin, nout, 20, nin.+[15, 20, rand(1:20), rand(1:20), 8])
    mg
end


text:
#=
    Vector valued bounds
        VectorOfVariables -in- Nonnegatives
        VectorOfVariables -in- Nonpositives
        VectorOfVariables -in- Zeros

    SOS
        VectorOfVariables -in- SOS1
        VectorOfVariables -in- SOS2
=#
constrdict(model::LinQuadOptimizer, ::VVCI{MOI.Nonnegatives}) = cmap(model).vv_nonnegatives
constrdict(model::LinQuadOptimizer, ::VVCI{MOI.Nonpositives}) = cmap(model).vv_nonpositives
constrdict(model::LinQuadOptimizer, ::VVCI{MOI.Zeros}) = cmap(model).vv_zeros

constrdict(model::LinQuadOptimizer, ::VVCI{SOS1}) = cmap(model).sos1
constrdict(model::LinQuadOptimizer, ::VVCI{SOS2}) = cmap(model).sos2

function set_variable_bound(model::LinQuadOptimizer, columns::Vector{Int}, bounds::Vector{Float64}, sense)
    @assert length(columns) == length(bounds)
    change_variable_bounds!(model, columns, bounds, sense)
end

function set_variable_bound(model::LinQuadOptimizer, vs::Vector{VarInd}, sets::Vector{LE})
    set_variable_bound(model, get_column.(model, vs), [s.upper for s=sets],
                       fill(backend_type(model, Val{:Upperbound}()), length(vs)))
end
function set_variable_bound(model::LinQuadOptimizer, vs::Vector{VarInd}, sets::Vector{GE})
    set_variable_bound(model, get_column.(model, vs), [s.lower for s=sets],
                       fill(backend_type(model, Val{:Lowerbound}()), length(vs)))
end
function set_variable_bound(model::LinQuadOptimizer, vs::Vector{VarInd}, sets::Vector{EQ})
    set_variable_bound(model, get_column.(model, vs), [s.value for s=sets],
                       fill(backend_type(model, Val{:Upperbound}()), length(vs)))
    set_variable_bound(model, get_column.(model, vs), [s.value for s=sets],
                       fill(backend_type(model, Val{:Lowerbound}()), length(vs)))
end
function set_variable_bound(model::LinQuadOptimizer, vs::Vector{VarInd}, sets::Vector{IV})
    set_variable_bound(model, get_column(model, v), [s.upper for s=sets],
                       fill(backend_type(model, Val{:Upperbound}()), length(vs)))
    set_variable_bound(model, get_column(model, v), [s.lower for s=sets],
                       fill(backend_type(model, Val{:Lowerbound}()), length(vs)))
end

function MOI.addconstraints!(model::LinQuadOptimizer, funcs::VecVar, sets::Vector{S}) where S <: LinSets
    # __assert_supported_constraint__(model, VecVar, S)
    # __check_for_conflicting__(model, variable, set,
    # S, MOI.Semicontinuous{Float64}, MOI.Semiinteger{Float64}, MOI.ZeroOne)
    num_vars = length(sets)
    set_variable_bound(model, funcs.variables, sets)
    # TODO we have to return some sort of constrdict here, need help!

    # model.last_constraint_reference += 1
    # index = VVCI{S}(model.last_constraint_reference)
    # dict = constrdict(model, index)
    # dict[index] = variable.variable
    # return index
end

function MOI.addconstraint!(model::LinQuadOptimizer, func::VecVar, set::S) where S <: VecLinSets
    __assert_supported_constraint__(model, VecVar, S)
    @assert length(func.variables) == MOI.dimension(set)
    rows = get_number_linear_constraints(model)
    num_vars = MOI.dimension(set)
    add_linear_constraints!(model,
        CSRMatrix{Float64}(collect(1:num_vars),
                           get_column.(Ref(model), func.variables),
                           ones(num_vars)),
        fill(backend_type(model, set), num_vars),
        zeros(num_vars)
    )
    model.last_constraint_reference += 1
    index = VVCI{S}(model.last_constraint_reference)
    dict = constrdict(model, index)
    dict[index] = collect((rows + 1):(rows + num_vars))
    append!(model.constraint_primal_solution, fill(NaN, num_vars))
    append!(model.constraint_dual_solution, fill(NaN, num_vars))
    append!(model.constraint_constant, fill(0.0, num_vars))
    return index
end

function MOI.delete!(model::LinQuadOptimizer, index::VVCI{S}) where S <: VecLinSets
    __assert_valid__(model, index)
    delete_constraint_name(model, index)
    dict = constrdict(model, index)
    # we delete rows from largest to smallest here so that we don't have
    # to worry about updating references in a greater numbered row, only to
    # modify it later.
    for row in sort(dict[index], rev=true)
        delete_linear_constraints!(model, row, row)
        deleteat!(model.constraint_primal_solution, row)
        deleteat!(model.constraint_dual_solution, row)
        deleteat!(model.constraint_constant, row)
        # shift all the other references
        shift_references_after_delete_affine!(model, row)
    end
    delete!(dict, index)
end

#=
    Get constraint set of vector variable bound
=#

MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{VVCI{S}}) where S <: VecLinSets = true
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::VVCI{S}) where S <: VecLinSets
    S(length(model[index]))
end

#=
    Get constraint function of vector variable bound (linear ctr)
=#

MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintFunction, ::Type{VVCI{S}}) where S <: VecLinSets = true
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintFunction, index::VVCI{<: VecLinSets})
    rows = model[index]
    variables = VarInd[]
    sizehint!(variables, length(rows))
    for row in rows
        cols, coefs = get_linear_constraint(model, row)
        if length(cols) != 1
            error("Unexpected constraint")
        end
        push!(variables, model.variable_references[cols[1]])
    end
    return VecVar(variables)
end

#=
    SOS constraints
=#

function MOI.addconstraint!(model::LinQuadOptimizer, func::VecVar, set::S) where S <: Union{MOI.SOS1, MOI.SOS2}
    __assert_supported_constraint__(model, VecVar, S)
    make_problem_type_integer(model)
    add_sos_constraint!(model, get_column.(Ref(model), func.variables),
                        set.weights, backend_type(model, set))
    model.last_constraint_reference += 1
    index = VVCI{S}(model.last_constraint_reference)
    dict = constrdict(model, index)
    dict[index] = length(cmap(model).sos1) + length(cmap(model).sos2) + 1
    return index
end

function MOI.delete!(model::LinQuadOptimizer, index::VVCI{<:Union{SOS1, SOS2}})
    __assert_valid__(model, index)
    delete_constraint_name(model, index)
    dict = constrdict(model, index)
    sos_row = dict[index]
    delete_sos!(model, sos_row, sos_row)
    deleteref!(cmap(model).sos1, sos_row, index)
    deleteref!(cmap(model).sos2, sos_row, index)
    if !has_integer(model)
        make_problem_type_continuous(model)
    end
end

MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{VVCI{S}}) where S <: Union{MOI.SOS1, MOI.SOS2} = true
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::VVCI{S}) where S <: Union{MOI.SOS1, MOI.SOS2}
    indices, weights, types = get_sos_constraint(model, model[index])
    set = S(weights)
    @assert types == backend_type(model, set)
    return set
end

MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintFunction, ::Type{VVCI{S}}) where S <: Union{MOI.SOS1, MOI.SOS2} = true
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintFunction, index::VVCI{<:Union{SOS1, SOS2}})
    indices, weights, types = get_sos_constraint(model, model[index])
    return VecVar(model.variable_references[indices])
end


text:
using MechanicalSketch
import MechanicalSketch: °, background, sethue, O, EM, finish, HE, WI, empty_figure
import MechanicalSketch: m, dimension_aligned, place_image, modify_latex, color_with_lumin
import MechanicalSketch: @latexify, latexify, LaTeXString, @L_str, PALETTE, Point

@info "test_11.jl is currently disabled because the solver will
    suppress the versions of a number of other packages. "
#=
using JuMP    # Julia Mathematical Programming language
using Ipopt   # Nonlinear solver

let
BACKCOLOR = color_with_lumin(PALETTE[1], 80)
function restart()
    empty_figure(filename = joinpath(@__DIR__, "test_11.png"))
    background(BACKCOLOR)
    sethue(PALETTE[1])
end
restart()

#=
Catenary Problem

# Based on https://github.com/StaffJoy/jump-examples/blob/master/src/catenary.jl
=#

# Since Ipopt is a depencency with executables, we don't include it in MechanicalSketch.
# It also don't work well with quantities. In this case, we don't bother making a wrapper,
# this is just an experiment with JuMP.

# Also note, this will sometimes simply exit with a crash, depending on the calling context.

NP = 20             # number of start and end points of chainlinks
L = 1.0               # difference in x-coords of endlinks
h = 2 * L / (NP - 1) # length of each link

mo = Model(Ipopt.Optimizer)

@variables(mo, begin
    x[1:NP], (base_name = "Pos x, c.o.g. of link", lower_bound = 0.0L, upper_bound = L)
    y[1:NP], (base_name = "Pos y, c.o.g. of link")
end)

# Anchor ends
@constraints(mo, begin
    x[1] == 0.01
    x[NP] == L-0.01
    y[1] == 0.0
    y[NP] == 0.0
end)

# Link together pieces
for j in 2:NP
    @NLconstraint(mo, (x[j] - x[j-1])^2 + (y[j] - y[j-1])^2 <= h^2)
end
# Minimize potential energy from center of mass for link
@objective(mo, Min, sum(2:NP) do j
    (y[j-1] + y[j] ) / 2
end)

optimize!(mo)

if termination_status(mo) != JuMP.MathOptInterface.LOCALLY_SOLVED
    println(termination_status(mo))
 end

# Extract solution
xx = 20m .* value.(x)
yy = 20m .* value.(y)

sp = Point(-10m, 10m)

for i in 2:NP
    p1 = sp + (xx[i - 1], yy[i - 1])
    p2 = sp + (xx[i], yy[i])

    dimension_aligned(p1, p2;
        offset = 0,
        fromextension = (0.3EM, 0.3EM),
        toextension = (0.3EM, 0.3EM),
        unit = m,
        digits = 2)
end

p = O + (-0.45WI, 0.25HE)
inner = L"\frac{y_n + y_{n-1}}{2}";
inner = latexify(:((y[j-1] + y[j] ) / 2));
innerst = modify_latex(inner)
l = L"\text{Minimize: }\sum_{n=2}^{%$NP} %$innerst";
_, _, scalefactor = place_image(p, l, height = 2EM)

l2 = latexify(quote
         (x[j] - x[j-1])^2 + (y[j] - y[j-1])^2 <= h^2
    end);
l3 = "\\textrm{;where }" * modify_latex(l2)
place_image(p + (EM, 2.35EM), LaTeXString(l3); scalefactor)

finish();

nothing
end #let
=#


text:
using LowLevelParticleFilters, LinearAlgebra, StaticArrays, Distributions, Random

#=M = 1000 # Number of smoothing trajectories, NOTE: if this is set higher, the result will be better at the expense of linear scaling of the computational cost.
N = 1000 # Number of particles in the particle filter
@inline pos(s) = s[SVector(1,2)]

dgσ = 1#0.1 # the deviation of the measurement noise distribution
dvσ = 1#1 # the deviation of the dynamics noise distribution
daσ = 0.7#1

const dg = MvNormal(zero(SVector{2, Float64}), dgσ)
const df = MvNormal(zero(SVector{4, Float64}), [0.01, 0.01, dvσ, daσ])

const noisevec = zeros(4)

@inline function dynamics(s,u,t,noise=false)
    # current states
    x, y, v, a = s
    # get noise
    if noise
        x_noise, y_noise, v_noise, a_noise = rand!(df, noisevec)
    else
        x_noise, y_noise, v_noise, a_noise = 0.,0.,0.,0.
    end
    # next states
    dy, dx = sincos(a)
    x += x_noise + dx*v
    y += y_noise + dy*v
    v⁺ = max(0.999v + v_noise, 0.0)
    a += a_noise
    SVector{4,Float64}(x, y, v⁺, a)
end
function measurement_likelihood(s,y,t)
    logpdf(dg, pos(s)-y) # A simple linear measurement model with normal additive noise
end
@inline measurement(s,t=1) = pos(s)
@inline measurement(s,t,noise) = measurement(s) + noise*rand(dg) # We observer the position coordinates with the measurement

function smoothed(xy)
    d0 = MvNormal(SVector(xy[1]..., norm(xy[2] - xy[1]), atan(reverse(xy[2] - xy[1])...)), ones(4))
    u = zeros(length(xy))
    pf = AuxiliaryParticleFilter(AdvancedParticleFilter(N, dynamics, measurement, measurement_likelihood, df, d0))
    x1,w,we,ll=forward_trajectory(pf,u,xy)
    xh = mean_trajectory(x1,we)
    sb, _ = smooth(pf, M, u, xy) # Sample smooting particles (b for backward-trajectory)
    s = smoothed_mean(sb)     # Calculate the mean of smoothing trajectories
    s[1:2, :], s[3, :], s[4, :]
end=#

M = 100 # Number of smoothing trajectories, NOTE: if this is set higher, the result will be better at the expense of linear scaling of the computational cost.
N = 1000 # Number of particles in the particle filter
@inline pos(s) = s[SVector(1,2)]

dgσ = 3#0.1 # the deviation of the measurement noise distribution
dvσ = 1#1 # the deviation of the dynamics noise distribution
daσ = 0.06 # 0.05 works really well

const dg = MvNormal(zero(SVector{2, Float64}), dgσ)
# const df = MvNormal(zero(SVector{4, Float64}), [0.01, 0.01, dvσ, daσ])
const switch_prob = 0.01
const df = LowLevelParticleFilters.TupleProduct((Normal.(0,[0.01, 0.01, dvσ, daσ])..., Binomial(1, switch_prob)))

const noisevec = zeros(5)

@inline function dynamics(s,u,t,noise=false)
    # current states
    x, y, v, a, m = s
    # get noise
    if noise
        x_noise, y_noise, v_noise, a_noise, _ = rand!(df, noisevec)
    else
        x_noise, y_noise, v_noise, a_noise = 0.,0.,0.,0.
    end
    # next states
    dy, dx = sincos(a)
    x += x_noise + dx*v
    y += y_noise + dy*v
    v⁺ = max(0.999v + v_noise, 0.0)
    m⁺ = m == 0 ? Int(rand() < switch_prob) : 1
    a += a_noise*(1 + 6m⁺)
    SVector{5,Float64}(x, y, v⁺, a, m⁺)
end
function measurement_likelihood(s,y,t)
    logpdf(dg, pos(s)-y) # A simple linear measurement model with normal additive noise
end
@inline measurement(s,t=1) = pos(s)
@inline measurement(s,t,noise) = measurement(s) + noise*rand(dg) # We observer the position coordinates with the measurement

function smoothed(xy)
    d0 = MvNormal(SVector(xy[1]..., norm(xy[2] - xy[1]), atan(reverse(xy[2] - xy[1])...), 0), Float64[1, 1, 1, 1, 0])
    u = zeros(length(xy))
    pf = AuxiliaryParticleFilter(AdvancedParticleFilter(N, dynamics, measurement, measurement_likelihood, df, d0))
    # x1,w,we,ll=forward_trajectory(pf,u,xy)
    # xh = mean_trajectory(x1,we)
    sb, _ = smooth(pf, M, u, xy) # Sample smooting particles (b for backward-trajectory)
    s = smoothed_mean(sb)     # Calculate the mean of smoothing trajectories
    s[1:2, :], s[3, :], s[4, :], s[5, :]
end

# 26 41
#=i = Common(x[5])
xy = i.track.xy
_xy, v, a, m = smoothed(xy)
xys = Point.(eachcol(_xy))
tp = findfirst(x -> x > 0.5, m)
sc = Scene(scale_plot = false, limits = FRect(-100, -100, 200, 200))
s1 = slider(2:length(xy), raw = true, camera = campixel!, start = 2)
lines!(sc, lift(i -> xy[1:i], s1[end][:value]), color = :black)
lines!(sc, lift(i -> xys[1:i], s1[end][:value]), color = :red)
scatter!(sc, lift(i -> i > tp ? [xys[tp]] : [Point(NaN, NaN)], s1[end][:value]), color = :blue, markersize = 5)
hbox(s1, sc)=#


text:
using DataDepsGenerators:format_checksums
using Test

@testset "Formatting Checksums" begin
    @test  format_checksums("898237b") ==
                    "\"898237b\""

    @test  format_checksums(["898237b", "aba1"]) ==
                "[\"898237b\", \"aba1\"]"

    @test  format_checksums((:md5, "898237b")) ==
                    "(md5, \"898237b\")"

    @test  format_checksums([(:md5, "898237b"),(:md6, "a1237b")]) ==
                "[(md5, \"898237b\"), (md6, \"a1237b\")]"

    @test  format_checksums([(:md5, "898237b"), "fafaf"]) ==
            "[(md5, \"898237b\"), \"fafaf\"]"

end


text:
# An AST walker that knows about the context of the currently visited node in the AST.

type ContextAstWalker <: AstWalker
end

# The default behavior is to only copy each AST node.
transform(at::AstTransformer, n) = deepcopy(n)

# For the expressions we must traverse sub-trees.
function transform(at::AstTransformer, e::Expr)
  # println("Transforming expression: head = ", e.head, "\n ", e)

  @match e begin

      Expr(:function,  [signature, body], _)      => begin
      	# println("Function body = ", body)

      	Expr(:function, signature, ast_transform(at, body))
      end

      Expr(:block,  stmts, _)      => begin
      	# We create a new array to hold the statements since we might need to insert new ones while
      	# transforming the old ones.
      	transformed_stmts = Any[]

      	# Populate it by transforming all sub-stmts in this block
      	for i in 1:length(stmts)
      		res = transform(at, stmts[i])
      		if isa(res, Array)
      			# Add all statements if an Array was returned
      			push!(transformed_stmts, res...)
      		else
      			push!(transformed_stmts, res)
      		end
      	end

      	# And create and return the transformed block
      	Expr(:block, transformed_stmts...)
      end

      # Default case is just to copy
      _   => deepcopy(e)
  end

end

dump(a)

at = AstTransformer()
a2 = ast_transform(at, a)
dump(a2)


text:
# For <: v1.1

macro λ(ex)
    return parse_lambda(ex)
end

"""
    parse_lambda(ex)

Parse a lambda expression to `LegibleLambda` constructor expression.
"""
function parse_lambda(ex)
    if ex.head == :(->)
        ex_cut = ex |> (ex -> postwalk(cutlnn, ex)) |> (ex -> postwalk(cutblock, ex))
        name = replace((repr(ex_cut |> pretty_kwargs)[2:end]), "->" => " -> ")
        :(LegibleLambda($name, $(esc(ex))))
    else
        throw("Must be called on a Lambda expression")
    end
end

struct LegibleLambda{F <: Function} <: Function
    name::String
    λ::F
end

(f::LegibleLambda)(args...) = (f.λ)(args...)

function Base.show(io::IO, f::LegibleLambda)
    print(io, f.name)
end

function Base.show(io::IO, ::MIME"text/plain", f::LegibleLambda)
    print(io, f.name)
end


text:
###############################################################################
# other stuff, trivia and non-trivia
###############################################################################

#TODO: only makes sense if f is univ (uses only one var)
function (Rx::FmpzPolyRing)(f::fmpq_mpoly)
  fp = Rx()
  R = base_ring(Rx)
  d = denominator(f)
  @assert d == 1
  for t = terms(f)
    e = total_degree(t)
    @assert length(t) == 1
    c = coeff(t, 1)
    setcoeff!(fp, e, numerator(c*d))
  end
  return fp
end

function (Rx::FmpqPolyRing)(f::fmpq_mpoly)
  fp = Rx()
  R = base_ring(Rx)
  for t = terms(f)
    e = total_degree(t)
    @assert length(t) == 1
    c = coeff(t, 1)
    setcoeff!(fp, e, c)
  end
  return fp
end

function (Rx::GFPPolyRing)(f::fmpq_mpoly)
  fp = Rx()
  R = base_ring(Rx)
  d = denominator(f)
  for t = terms(f)
    e = total_degree(t)
    @assert length(t) == 1
    c = coeff(t, 1)
    setcoeff!(fp, e, R(numerator(c*d)))
  end
  return fp * inv(R(d))
end

function mul!(res::fmpq_mpoly, a::fmpq_mpoly, c::fmpz)
  ccall((:fmpq_mpoly_scalar_mul_fmpz, libflint), Nothing,
    (Ref{fmpq_mpoly}, Ref{fmpq_mpoly}, Ref{fmpz}, Ref{FmpqMPolyRing}), res, a, c, parent(a))
  return nothing
end

#@doc Markdown.doc"""
#    isunivariate(f::Generic.MPoly{T}) where T <: NumFieldElem -> Bool, PolyElem{T}
#
#Tests if $f$ involves only one variable. If so, return a corresponding univariate polynomial.
#"""
#function isunivariate(f::Generic.MPoly{T}) where T
#  kx, x = PolynomialRing(base_ring(f), "x", cached = false)
#  if ngens(parent(f)) == 1
#    f1 = kx()
#    for i = 1:f.length
#      setcoeff!(f1, Int(f.exps[1, i]), f.coeffs[i])
#    end
#    return true, f1
#  end
#  if f.length == 0
#    @assert iszero(f)
#    return true, kx(0)
#  end
#  n = ngens(parent(f))
#  i = 1
#  while i <= n && iszero(f.exps[i, :])
#    i += 1
#  end
#  j = n
#  while j >= 1 && iszero(f.exps[j, :])
#    j -= 1
#  end
#  if i != j
#    return false, x
#  end
#  f1 = kx()
#  for j = 1:f.length
#    setcoeff!(f1, Int(f.exps[i, j]), f.coeffs[j])
#  end
#  return true, f1
#end

function (R::FmpzMPolyRing)(f::fmpq_mpoly)
  return map_coefficients(ZZ, f, parent = R)
end
Hecke.ngens(R::FmpzMPolyRing) = length(gens(R))

#check with Nemo/ Dan if there are better solutions
#the block is also not used here I think
#functionality to view mpoly as upoly in variable `i`, so the
#coefficients are mpoly's without variable `i`.
function Hecke.leading_coefficient(f::MPolyElem, i::Int)
  g = MPolyBuildCtx(parent(f))
  d = degree(f, i)
  for (c, e) = zip(coefficients(f), exponent_vectors(f))
    if e[i] == d
      e[i] = 0
      push_term!(g, c, e)
    end
  end
  return finish(g)
end

#not used here
"""
`content` as a polynomial in the variable `i`, i.e. the gcd of all the
coefficients when viewed as univariate polynomial in `i`.
"""
function Hecke.content(f::MPolyElem, i::Int)
  return reduce(gcd, coefficients(f, i))
end

"""
The coefficients of `f` when viewed as a univariate polynomial in the `i`-th
variable.
"""
function Hecke.coefficients(f::MPolyElem, i::Int)
  d = degree(f, i)
  cf = [MPolyBuildCtx(parent(f)) for j=0:d]
  for (c, e) = zip(coefficients(f), exponent_vectors(f))
    a = e[i]
    e[i] = 0
    push_term!(cf[a+1], c, e)
  end
  return map(finish, cf)
end