# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs

__all__ = [
    'LocalRulestackRuleCategory',
    'LocalRulestackRuleDestination',
    'LocalRulestackRuleSource',
    'NextGenerationFirewallVirtualHubLocalRulestackDestinationNat',
    'NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig',
    'NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig',
    'NextGenerationFirewallVirtualHubLocalRulestackDnsSettings',
    'NextGenerationFirewallVirtualHubLocalRulestackNetworkProfile',
    'NextGenerationFirewallVirtualHubPanoramaDestinationNat',
    'NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig',
    'NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig',
    'NextGenerationFirewallVirtualHubPanoramaDnsSettings',
    'NextGenerationFirewallVirtualHubPanoramaNetworkProfile',
    'NextGenerationFirewallVirtualHubPanoramaPanorama',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNat',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig',
    'NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettings',
    'NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfile',
    'NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration',
    'NextGenerationFirewallVirtualNetworkPanoramaDestinationNat',
    'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig',
    'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig',
    'NextGenerationFirewallVirtualNetworkPanoramaDnsSettings',
    'NextGenerationFirewallVirtualNetworkPanoramaNetworkProfile',
    'NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration',
    'NextGenerationFirewallVirtualNetworkPanoramaPanorama',
]

@pulumi.output_type
class LocalRulestackRuleCategory(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customUrls":
            suggest = "custom_urls"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in LocalRulestackRuleCategory. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        LocalRulestackRuleCategory.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        LocalRulestackRuleCategory.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 custom_urls: Sequence[str],
                 feeds: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] custom_urls: Specifies a list of URL categories to match. Possible values include `abortion`, `abused-drugs`, `adult`, `alcohol-and-tobacco`, `auctions`, `business-and-economy`, `command-and-control`, `computer-and-internet-info`, `content-delivery-networks`, `copyright-infringement`, `cryptocurrency`, `dating`, `dynamic-dns`, `educational-institutions`, `entertainment-and-arts`, `extremism`, `financial-services`, `gambling`, `games`, `government`, `grayware`, `hacking`, `health-and-medicine`, `high-risk`, `home-and-garden`, `hunting-and-fishing`, `insufficient-content`, `internet-communications-and-telephony`, `internet-portals`, `job-search`, `legal`, `low-risk`, `malware`, `medium-risk`, `military`, `motor-vehicles`, `music`, `newly-registered-domain`, `news`, `not-resolved`, `nudity`, `online-storage-and-backup`, `parked`, `peer-to-peer`, `personal-sites-and-blogs`, `philosophy-and-political-advocacy`, `phishing`, `private-ip-addresses`, `proxy-avoidance-and-anonymizers`, `questionable`, `real-estate`, `real-time-detection`, `recreation-and-hobbies`, `reference-and-research`, `religion`, `search-engines`, `sex-education`, `shareware-and-freeware`, `shopping`, `social-networking`, `society`, `sports`, `stock-advice-and-tools`, `streaming-media`, `swimsuits-and-intimate-apparel`, `training-and-tools`, `translation`, `travel`, `unknown`, `weapons`, `web-advertisements`, `web-based-email`, and `web-hosting`.
        :param Sequence[str] feeds: Specifies a list of feeds to match.
        """
        pulumi.set(__self__, "custom_urls", custom_urls)
        if feeds is not None:
            pulumi.set(__self__, "feeds", feeds)

    @property
    @pulumi.getter(name="customUrls")
    def custom_urls(self) -> Sequence[str]:
        """
        Specifies a list of URL categories to match. Possible values include `abortion`, `abused-drugs`, `adult`, `alcohol-and-tobacco`, `auctions`, `business-and-economy`, `command-and-control`, `computer-and-internet-info`, `content-delivery-networks`, `copyright-infringement`, `cryptocurrency`, `dating`, `dynamic-dns`, `educational-institutions`, `entertainment-and-arts`, `extremism`, `financial-services`, `gambling`, `games`, `government`, `grayware`, `hacking`, `health-and-medicine`, `high-risk`, `home-and-garden`, `hunting-and-fishing`, `insufficient-content`, `internet-communications-and-telephony`, `internet-portals`, `job-search`, `legal`, `low-risk`, `malware`, `medium-risk`, `military`, `motor-vehicles`, `music`, `newly-registered-domain`, `news`, `not-resolved`, `nudity`, `online-storage-and-backup`, `parked`, `peer-to-peer`, `personal-sites-and-blogs`, `philosophy-and-political-advocacy`, `phishing`, `private-ip-addresses`, `proxy-avoidance-and-anonymizers`, `questionable`, `real-estate`, `real-time-detection`, `recreation-and-hobbies`, `reference-and-research`, `religion`, `search-engines`, `sex-education`, `shareware-and-freeware`, `shopping`, `social-networking`, `society`, `sports`, `stock-advice-and-tools`, `streaming-media`, `swimsuits-and-intimate-apparel`, `training-and-tools`, `translation`, `travel`, `unknown`, `weapons`, `web-advertisements`, `web-based-email`, and `web-hosting`.
        """
        return pulumi.get(self, "custom_urls")

    @property
    @pulumi.getter
    def feeds(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of feeds to match.
        """
        return pulumi.get(self, "feeds")


@pulumi.output_type
class LocalRulestackRuleDestination(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "localRulestackFqdnListIds":
            suggest = "local_rulestack_fqdn_list_ids"
        elif key == "localRulestackPrefixListIds":
            suggest = "local_rulestack_prefix_list_ids"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in LocalRulestackRuleDestination. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        LocalRulestackRuleDestination.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        LocalRulestackRuleDestination.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cidrs: Optional[Sequence[str]] = None,
                 countries: Optional[Sequence[str]] = None,
                 feeds: Optional[Sequence[str]] = None,
                 local_rulestack_fqdn_list_ids: Optional[Sequence[str]] = None,
                 local_rulestack_prefix_list_ids: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] cidrs: Specifies a list of CIDR's.
        :param Sequence[str] countries: Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        :param Sequence[str] feeds: Specifies a list of Feeds.
        :param Sequence[str] local_rulestack_fqdn_list_ids: Specifies a list of FQDN lists.
               
               > **Note:** This is a list of names of FQDN Lists configured on the same Local Rulestack as this Rule is being created.
        :param Sequence[str] local_rulestack_prefix_list_ids: Specifies a list of Prefix Lists.
               
               > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        if cidrs is not None:
            pulumi.set(__self__, "cidrs", cidrs)
        if countries is not None:
            pulumi.set(__self__, "countries", countries)
        if feeds is not None:
            pulumi.set(__self__, "feeds", feeds)
        if local_rulestack_fqdn_list_ids is not None:
            pulumi.set(__self__, "local_rulestack_fqdn_list_ids", local_rulestack_fqdn_list_ids)
        if local_rulestack_prefix_list_ids is not None:
            pulumi.set(__self__, "local_rulestack_prefix_list_ids", local_rulestack_prefix_list_ids)

    @property
    @pulumi.getter
    def cidrs(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of CIDR's.
        """
        return pulumi.get(self, "cidrs")

    @property
    @pulumi.getter
    def countries(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        """
        return pulumi.get(self, "countries")

    @property
    @pulumi.getter
    def feeds(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Feeds.
        """
        return pulumi.get(self, "feeds")

    @property
    @pulumi.getter(name="localRulestackFqdnListIds")
    def local_rulestack_fqdn_list_ids(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of FQDN lists.

        > **Note:** This is a list of names of FQDN Lists configured on the same Local Rulestack as this Rule is being created.
        """
        return pulumi.get(self, "local_rulestack_fqdn_list_ids")

    @property
    @pulumi.getter(name="localRulestackPrefixListIds")
    def local_rulestack_prefix_list_ids(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Prefix Lists.

        > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        return pulumi.get(self, "local_rulestack_prefix_list_ids")


@pulumi.output_type
class LocalRulestackRuleSource(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "localRulestackPrefixListIds":
            suggest = "local_rulestack_prefix_list_ids"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in LocalRulestackRuleSource. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        LocalRulestackRuleSource.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        LocalRulestackRuleSource.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cidrs: Optional[Sequence[str]] = None,
                 countries: Optional[Sequence[str]] = None,
                 feeds: Optional[Sequence[str]] = None,
                 local_rulestack_prefix_list_ids: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] cidrs: Specifies a list of CIDRs.
        :param Sequence[str] countries: Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        :param Sequence[str] feeds: Specifies a list of Feeds.
        :param Sequence[str] local_rulestack_prefix_list_ids: Specifies a list of Prefix Lists.
               
               > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        if cidrs is not None:
            pulumi.set(__self__, "cidrs", cidrs)
        if countries is not None:
            pulumi.set(__self__, "countries", countries)
        if feeds is not None:
            pulumi.set(__self__, "feeds", feeds)
        if local_rulestack_prefix_list_ids is not None:
            pulumi.set(__self__, "local_rulestack_prefix_list_ids", local_rulestack_prefix_list_ids)

    @property
    @pulumi.getter
    def cidrs(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of CIDRs.
        """
        return pulumi.get(self, "cidrs")

    @property
    @pulumi.getter
    def countries(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of ISO3361-1 Alpha-2 Country codes. Possible values include `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BQ`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CW`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GG`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IM`, `IL`, `IT`, `JM`, `JP`, `JE`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `ME`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `BL`, `SH`, `KN`, `LC`, `MF`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `RS`, `SC`, `SL`, `SG`, `SX`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `SS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`
        """
        return pulumi.get(self, "countries")

    @property
    @pulumi.getter
    def feeds(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Feeds.
        """
        return pulumi.get(self, "feeds")

    @property
    @pulumi.getter(name="localRulestackPrefixListIds")
    def local_rulestack_prefix_list_ids(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Prefix Lists.

        > **Note:** This is a list of names of Prefix Lists configured on the same Local Rulestack as this Rule is being created.
        """
        return pulumi.get(self, "local_rulestack_prefix_list_ids")


@pulumi.output_type
class NextGenerationFirewallVirtualHubLocalRulestackDestinationNat(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendConfig":
            suggest = "backend_config"
        elif key == "frontendConfig":
            suggest = "frontend_config"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubLocalRulestackDestinationNat. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDestinationNat.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDestinationNat.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 protocol: str,
                 backend_config: Optional['outputs.NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig'] = None,
                 frontend_config: Optional['outputs.NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig'] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig']:
        return pulumi.get(self, "backend_config")

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig']:
        return pulumi.get(self, "frontend_config")


@pulumi.output_type
class NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddress":
            suggest = "public_ip_address"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDestinationNatBackendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address: str):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> int:
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> str:
        return pulumi.get(self, "public_ip_address")


@pulumi.output_type
class NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddressId":
            suggest = "public_ip_address_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDestinationNatFrontendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address_id: str):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> int:
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> str:
        return pulumi.get(self, "public_ip_address_id")


@pulumi.output_type
class NextGenerationFirewallVirtualHubLocalRulestackDnsSettings(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "azureDnsServers":
            suggest = "azure_dns_servers"
        elif key == "dnsServers":
            suggest = "dns_servers"
        elif key == "useAzureDns":
            suggest = "use_azure_dns"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubLocalRulestackDnsSettings. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDnsSettings.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackDnsSettings.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 azure_dns_servers: Optional[Sequence[str]] = None,
                 dns_servers: Optional[Sequence[str]] = None,
                 use_azure_dns: Optional[bool] = None):
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "azure_dns_servers")

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "dns_servers")

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[bool]:
        return pulumi.get(self, "use_azure_dns")


@pulumi.output_type
class NextGenerationFirewallVirtualHubLocalRulestackNetworkProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "networkVirtualApplianceId":
            suggest = "network_virtual_appliance_id"
        elif key == "publicIpAddressIds":
            suggest = "public_ip_address_ids"
        elif key == "virtualHubId":
            suggest = "virtual_hub_id"
        elif key == "egressNatIpAddressIds":
            suggest = "egress_nat_ip_address_ids"
        elif key == "egressNatIpAddresses":
            suggest = "egress_nat_ip_addresses"
        elif key == "ipOfTrustForUserDefinedRoutes":
            suggest = "ip_of_trust_for_user_defined_routes"
        elif key == "publicIpAddresses":
            suggest = "public_ip_addresses"
        elif key == "trustedAddressRanges":
            suggest = "trusted_address_ranges"
        elif key == "trustedSubnetId":
            suggest = "trusted_subnet_id"
        elif key == "untrustedSubnetId":
            suggest = "untrusted_subnet_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubLocalRulestackNetworkProfile. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackNetworkProfile.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubLocalRulestackNetworkProfile.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 network_virtual_appliance_id: str,
                 public_ip_address_ids: Sequence[str],
                 virtual_hub_id: str,
                 egress_nat_ip_address_ids: Optional[Sequence[str]] = None,
                 egress_nat_ip_addresses: Optional[Sequence[str]] = None,
                 ip_of_trust_for_user_defined_routes: Optional[str] = None,
                 public_ip_addresses: Optional[Sequence[str]] = None,
                 trusted_address_ranges: Optional[Sequence[str]] = None,
                 trusted_subnet_id: Optional[str] = None,
                 untrusted_subnet_id: Optional[str] = None):
        pulumi.set(__self__, "network_virtual_appliance_id", network_virtual_appliance_id)
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "virtual_hub_id", virtual_hub_id)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if trusted_address_ranges is not None:
            pulumi.set(__self__, "trusted_address_ranges", trusted_address_ranges)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="networkVirtualApplianceId")
    def network_virtual_appliance_id(self) -> str:
        return pulumi.get(self, "network_virtual_appliance_id")

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> Sequence[str]:
        return pulumi.get(self, "public_ip_address_ids")

    @property
    @pulumi.getter(name="virtualHubId")
    def virtual_hub_id(self) -> str:
        return pulumi.get(self, "virtual_hub_id")

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[str]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "public_ip_addresses")

    @property
    @pulumi.getter(name="trustedAddressRanges")
    def trusted_address_ranges(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "trusted_address_ranges")

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[str]:
        return pulumi.get(self, "trusted_subnet_id")

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[str]:
        return pulumi.get(self, "untrusted_subnet_id")


@pulumi.output_type
class NextGenerationFirewallVirtualHubPanoramaDestinationNat(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendConfig":
            suggest = "backend_config"
        elif key == "frontendConfig":
            suggest = "frontend_config"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubPanoramaDestinationNat. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDestinationNat.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDestinationNat.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 protocol: str,
                 backend_config: Optional['outputs.NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig'] = None,
                 frontend_config: Optional['outputs.NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig'] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig']:
        return pulumi.get(self, "backend_config")

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig']:
        return pulumi.get(self, "frontend_config")


@pulumi.output_type
class NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddress":
            suggest = "public_ip_address"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDestinationNatBackendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address: str):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> int:
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> str:
        return pulumi.get(self, "public_ip_address")


@pulumi.output_type
class NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddressId":
            suggest = "public_ip_address_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDestinationNatFrontendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address_id: str):
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> int:
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> str:
        return pulumi.get(self, "public_ip_address_id")


@pulumi.output_type
class NextGenerationFirewallVirtualHubPanoramaDnsSettings(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "azureDnsServers":
            suggest = "azure_dns_servers"
        elif key == "dnsServers":
            suggest = "dns_servers"
        elif key == "useAzureDns":
            suggest = "use_azure_dns"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubPanoramaDnsSettings. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDnsSettings.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubPanoramaDnsSettings.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 azure_dns_servers: Optional[Sequence[str]] = None,
                 dns_servers: Optional[Sequence[str]] = None,
                 use_azure_dns: Optional[bool] = None):
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "azure_dns_servers")

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "dns_servers")

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[bool]:
        return pulumi.get(self, "use_azure_dns")


@pulumi.output_type
class NextGenerationFirewallVirtualHubPanoramaNetworkProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "networkVirtualApplianceId":
            suggest = "network_virtual_appliance_id"
        elif key == "publicIpAddressIds":
            suggest = "public_ip_address_ids"
        elif key == "virtualHubId":
            suggest = "virtual_hub_id"
        elif key == "egressNatIpAddressIds":
            suggest = "egress_nat_ip_address_ids"
        elif key == "egressNatIpAddresses":
            suggest = "egress_nat_ip_addresses"
        elif key == "ipOfTrustForUserDefinedRoutes":
            suggest = "ip_of_trust_for_user_defined_routes"
        elif key == "publicIpAddresses":
            suggest = "public_ip_addresses"
        elif key == "trustedAddressRanges":
            suggest = "trusted_address_ranges"
        elif key == "trustedSubnetId":
            suggest = "trusted_subnet_id"
        elif key == "untrustedSubnetId":
            suggest = "untrusted_subnet_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubPanoramaNetworkProfile. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubPanoramaNetworkProfile.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubPanoramaNetworkProfile.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 network_virtual_appliance_id: str,
                 public_ip_address_ids: Sequence[str],
                 virtual_hub_id: str,
                 egress_nat_ip_address_ids: Optional[Sequence[str]] = None,
                 egress_nat_ip_addresses: Optional[Sequence[str]] = None,
                 ip_of_trust_for_user_defined_routes: Optional[str] = None,
                 public_ip_addresses: Optional[Sequence[str]] = None,
                 trusted_address_ranges: Optional[Sequence[str]] = None,
                 trusted_subnet_id: Optional[str] = None,
                 untrusted_subnet_id: Optional[str] = None):
        pulumi.set(__self__, "network_virtual_appliance_id", network_virtual_appliance_id)
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "virtual_hub_id", virtual_hub_id)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if trusted_address_ranges is not None:
            pulumi.set(__self__, "trusted_address_ranges", trusted_address_ranges)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="networkVirtualApplianceId")
    def network_virtual_appliance_id(self) -> str:
        return pulumi.get(self, "network_virtual_appliance_id")

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> Sequence[str]:
        return pulumi.get(self, "public_ip_address_ids")

    @property
    @pulumi.getter(name="virtualHubId")
    def virtual_hub_id(self) -> str:
        return pulumi.get(self, "virtual_hub_id")

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[str]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "public_ip_addresses")

    @property
    @pulumi.getter(name="trustedAddressRanges")
    def trusted_address_ranges(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "trusted_address_ranges")

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[str]:
        return pulumi.get(self, "trusted_subnet_id")

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[str]:
        return pulumi.get(self, "untrusted_subnet_id")


@pulumi.output_type
class NextGenerationFirewallVirtualHubPanoramaPanorama(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "deviceGroupName":
            suggest = "device_group_name"
        elif key == "hostName":
            suggest = "host_name"
        elif key == "panoramaServer1":
            suggest = "panorama_server1"
        elif key == "panoramaServer2":
            suggest = "panorama_server2"
        elif key == "templateName":
            suggest = "template_name"
        elif key == "virtualMachineSshKey":
            suggest = "virtual_machine_ssh_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualHubPanoramaPanorama. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualHubPanoramaPanorama.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualHubPanoramaPanorama.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 device_group_name: Optional[str] = None,
                 host_name: Optional[str] = None,
                 name: Optional[str] = None,
                 panorama_server1: Optional[str] = None,
                 panorama_server2: Optional[str] = None,
                 template_name: Optional[str] = None,
                 virtual_machine_ssh_key: Optional[str] = None):
        if device_group_name is not None:
            pulumi.set(__self__, "device_group_name", device_group_name)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if panorama_server1 is not None:
            pulumi.set(__self__, "panorama_server1", panorama_server1)
        if panorama_server2 is not None:
            pulumi.set(__self__, "panorama_server2", panorama_server2)
        if template_name is not None:
            pulumi.set(__self__, "template_name", template_name)
        if virtual_machine_ssh_key is not None:
            pulumi.set(__self__, "virtual_machine_ssh_key", virtual_machine_ssh_key)

    @property
    @pulumi.getter(name="deviceGroupName")
    def device_group_name(self) -> Optional[str]:
        return pulumi.get(self, "device_group_name")

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[str]:
        return pulumi.get(self, "host_name")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="panoramaServer1")
    def panorama_server1(self) -> Optional[str]:
        return pulumi.get(self, "panorama_server1")

    @property
    @pulumi.getter(name="panoramaServer2")
    def panorama_server2(self) -> Optional[str]:
        return pulumi.get(self, "panorama_server2")

    @property
    @pulumi.getter(name="templateName")
    def template_name(self) -> Optional[str]:
        return pulumi.get(self, "template_name")

    @property
    @pulumi.getter(name="virtualMachineSshKey")
    def virtual_machine_ssh_key(self) -> Optional[str]:
        return pulumi.get(self, "virtual_machine_ssh_key")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNat(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendConfig":
            suggest = "backend_config"
        elif key == "frontendConfig":
            suggest = "frontend_config"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNat. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNat.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNat.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 protocol: str,
                 backend_config: Optional['outputs.NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig'] = None,
                 frontend_config: Optional['outputs.NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig'] = None):
        """
        :param str name: The name which should be used for this Destination NAT.
        :param str protocol: The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        :param 'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfigArgs' backend_config: A `backend_config` block as defined above.
        :param 'NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfigArgs' frontend_config: A `frontend_config` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name which should be used for this Destination NAT.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig']:
        """
        A `backend_config` block as defined above.
        """
        return pulumi.get(self, "backend_config")

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig']:
        """
        A `frontend_config` block as defined below.
        """
        return pulumi.get(self, "frontend_config")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddress":
            suggest = "public_ip_address"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatBackendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address: str):
        """
        :param int port: The port number to send traffic to.
        :param str public_ip_address: The IP Address to send the traffic to.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port number to send traffic to.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> str:
        """
        The IP Address to send the traffic to.
        """
        return pulumi.get(self, "public_ip_address")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddressId":
            suggest = "public_ip_address_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDestinationNatFrontendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address_id: str):
        """
        :param int port: The port on which to receive traffic.
        :param str public_ip_address_id: The ID of the Public IP Address on which to receive traffic. 
               
               > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port on which to receive traffic.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> str:
        """
        The ID of the Public IP Address on which to receive traffic. 

        > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        return pulumi.get(self, "public_ip_address_id")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettings(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "azureDnsServers":
            suggest = "azure_dns_servers"
        elif key == "dnsServers":
            suggest = "dns_servers"
        elif key == "useAzureDns":
            suggest = "use_azure_dns"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettings. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettings.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackDnsSettings.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 azure_dns_servers: Optional[Sequence[str]] = None,
                 dns_servers: Optional[Sequence[str]] = None,
                 use_azure_dns: Optional[bool] = None):
        """
        :param Sequence[str] dns_servers: Specifies a list of DNS servers to use. Conflicts with `dns_settings[0].use_azure_dns`.
        :param bool use_azure_dns: Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings[0].dns_servers`. Defaults to `false`.
        """
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "azure_dns_servers")

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of DNS servers to use. Conflicts with `dns_settings[0].use_azure_dns`.
        """
        return pulumi.get(self, "dns_servers")

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[bool]:
        """
        Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings[0].dns_servers`. Defaults to `false`.
        """
        return pulumi.get(self, "use_azure_dns")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddressIds":
            suggest = "public_ip_address_ids"
        elif key == "vnetConfiguration":
            suggest = "vnet_configuration"
        elif key == "egressNatIpAddressIds":
            suggest = "egress_nat_ip_address_ids"
        elif key == "egressNatIpAddresses":
            suggest = "egress_nat_ip_addresses"
        elif key == "publicIpAddresses":
            suggest = "public_ip_addresses"
        elif key == "trustedAddressRanges":
            suggest = "trusted_address_ranges"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfile. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfile.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfile.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 public_ip_address_ids: Sequence[str],
                 vnet_configuration: 'outputs.NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration',
                 egress_nat_ip_address_ids: Optional[Sequence[str]] = None,
                 egress_nat_ip_addresses: Optional[Sequence[str]] = None,
                 public_ip_addresses: Optional[Sequence[str]] = None,
                 trusted_address_ranges: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] public_ip_address_ids: Specifies a list of Azure Public IP Address IDs.
        :param 'NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfigurationArgs' vnet_configuration: A `vnet_configuration` block as defined below.
        :param Sequence[str] egress_nat_ip_address_ids: Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        :param Sequence[str] trusted_address_ranges: Specifies a list of trusted ranges to use for the Network.
        """
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "vnet_configuration", vnet_configuration)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if trusted_address_ranges is not None:
            pulumi.set(__self__, "trusted_address_ranges", trusted_address_ranges)

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> Sequence[str]:
        """
        Specifies a list of Azure Public IP Address IDs.
        """
        return pulumi.get(self, "public_ip_address_ids")

    @property
    @pulumi.getter(name="vnetConfiguration")
    def vnet_configuration(self) -> 'outputs.NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration':
        """
        A `vnet_configuration` block as defined below.
        """
        return pulumi.get(self, "vnet_configuration")

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        """
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "public_ip_addresses")

    @property
    @pulumi.getter(name="trustedAddressRanges")
    def trusted_address_ranges(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of trusted ranges to use for the Network.
        """
        return pulumi.get(self, "trusted_address_ranges")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "virtualNetworkId":
            suggest = "virtual_network_id"
        elif key == "ipOfTrustForUserDefinedRoutes":
            suggest = "ip_of_trust_for_user_defined_routes"
        elif key == "trustedSubnetId":
            suggest = "trusted_subnet_id"
        elif key == "untrustedSubnetId":
            suggest = "untrusted_subnet_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkLocalRulestackNetworkProfileVnetConfiguration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 virtual_network_id: str,
                 ip_of_trust_for_user_defined_routes: Optional[str] = None,
                 trusted_subnet_id: Optional[str] = None,
                 untrusted_subnet_id: Optional[str] = None):
        """
        :param str virtual_network_id: The ID of the Virtual Network.
        :param str trusted_subnet_id: The ID of the Trust subnet.
        :param str untrusted_subnet_id: The ID of the UnTrust subnet.
        """
        pulumi.set(__self__, "virtual_network_id", virtual_network_id)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> str:
        """
        The ID of the Virtual Network.
        """
        return pulumi.get(self, "virtual_network_id")

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[str]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[str]:
        """
        The ID of the Trust subnet.
        """
        return pulumi.get(self, "trusted_subnet_id")

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[str]:
        """
        The ID of the UnTrust subnet.
        """
        return pulumi.get(self, "untrusted_subnet_id")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaDestinationNat(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendConfig":
            suggest = "backend_config"
        elif key == "frontendConfig":
            suggest = "frontend_config"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaDestinationNat. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDestinationNat.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDestinationNat.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 protocol: str,
                 backend_config: Optional['outputs.NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig'] = None,
                 frontend_config: Optional['outputs.NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig'] = None):
        """
        :param str name: The name which should be used for this Destination NAT.
        :param str protocol: The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        :param 'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfigArgs' backend_config: A `backend_config` block as defined above.
        :param 'NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfigArgs' frontend_config: A `frontend_config` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if backend_config is not None:
            pulumi.set(__self__, "backend_config", backend_config)
        if frontend_config is not None:
            pulumi.set(__self__, "frontend_config", frontend_config)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name which should be used for this Destination NAT.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The Protocol for this Destination NAT configuration. Possible values include `TCP` and `UDP`.
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig']:
        """
        A `backend_config` block as defined above.
        """
        return pulumi.get(self, "backend_config")

    @property
    @pulumi.getter(name="frontendConfig")
    def frontend_config(self) -> Optional['outputs.NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig']:
        """
        A `frontend_config` block as defined below.
        """
        return pulumi.get(self, "frontend_config")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddress":
            suggest = "public_ip_address"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDestinationNatBackendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address: str):
        """
        :param int port: The port number to send traffic to.
        :param str public_ip_address: The IP Address to send the traffic to.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address", public_ip_address)

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port number to send traffic to.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddress")
    def public_ip_address(self) -> str:
        """
        The IP Address to send the traffic to.
        """
        return pulumi.get(self, "public_ip_address")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddressId":
            suggest = "public_ip_address_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDestinationNatFrontendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 port: int,
                 public_ip_address_id: str):
        """
        :param int port: The port on which to receive traffic.
        :param str public_ip_address_id: The ID of the Public IP Address on which to receive traffic.
               
               > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port on which to receive traffic.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> str:
        """
        The ID of the Public IP Address on which to receive traffic.

        > **Note:** This must be an Azure Public IP address ID also specified in the `public_ip_address_ids` list.
        """
        return pulumi.get(self, "public_ip_address_id")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaDnsSettings(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "azureDnsServers":
            suggest = "azure_dns_servers"
        elif key == "dnsServers":
            suggest = "dns_servers"
        elif key == "useAzureDns":
            suggest = "use_azure_dns"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaDnsSettings. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDnsSettings.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaDnsSettings.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 azure_dns_servers: Optional[Sequence[str]] = None,
                 dns_servers: Optional[Sequence[str]] = None,
                 use_azure_dns: Optional[bool] = None):
        """
        :param Sequence[str] dns_servers: Specifies a list of DNS servers to use. Conflicts with `dns_settings[0].use_azure_dns`.
        :param bool use_azure_dns: Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings[0].dns_servers`. Defaults to `false`.
        """
        if azure_dns_servers is not None:
            pulumi.set(__self__, "azure_dns_servers", azure_dns_servers)
        if dns_servers is not None:
            pulumi.set(__self__, "dns_servers", dns_servers)
        if use_azure_dns is not None:
            pulumi.set(__self__, "use_azure_dns", use_azure_dns)

    @property
    @pulumi.getter(name="azureDnsServers")
    def azure_dns_servers(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "azure_dns_servers")

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of DNS servers to use. Conflicts with `dns_settings[0].use_azure_dns`.
        """
        return pulumi.get(self, "dns_servers")

    @property
    @pulumi.getter(name="useAzureDns")
    def use_azure_dns(self) -> Optional[bool]:
        """
        Should the Firewall use Azure Supplied DNS servers. Conflicts with `dns_settings[0].dns_servers`. Defaults to `false`.
        """
        return pulumi.get(self, "use_azure_dns")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaNetworkProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicIpAddressIds":
            suggest = "public_ip_address_ids"
        elif key == "vnetConfiguration":
            suggest = "vnet_configuration"
        elif key == "egressNatIpAddressIds":
            suggest = "egress_nat_ip_address_ids"
        elif key == "egressNatIpAddresses":
            suggest = "egress_nat_ip_addresses"
        elif key == "publicIpAddresses":
            suggest = "public_ip_addresses"
        elif key == "trustedAddressRanges":
            suggest = "trusted_address_ranges"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaNetworkProfile. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaNetworkProfile.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaNetworkProfile.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 public_ip_address_ids: Sequence[str],
                 vnet_configuration: 'outputs.NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration',
                 egress_nat_ip_address_ids: Optional[Sequence[str]] = None,
                 egress_nat_ip_addresses: Optional[Sequence[str]] = None,
                 public_ip_addresses: Optional[Sequence[str]] = None,
                 trusted_address_ranges: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] public_ip_address_ids: Specifies a list of Azure Public IP Address IDs.
        :param 'NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfigurationArgs' vnet_configuration: A `vnet_configuration` block as defined below.
        :param Sequence[str] egress_nat_ip_address_ids: Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        :param Sequence[str] trusted_address_ranges: Specifies a list of trusted ranges to use for the Network.
        """
        pulumi.set(__self__, "public_ip_address_ids", public_ip_address_ids)
        pulumi.set(__self__, "vnet_configuration", vnet_configuration)
        if egress_nat_ip_address_ids is not None:
            pulumi.set(__self__, "egress_nat_ip_address_ids", egress_nat_ip_address_ids)
        if egress_nat_ip_addresses is not None:
            pulumi.set(__self__, "egress_nat_ip_addresses", egress_nat_ip_addresses)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if trusted_address_ranges is not None:
            pulumi.set(__self__, "trusted_address_ranges", trusted_address_ranges)

    @property
    @pulumi.getter(name="publicIpAddressIds")
    def public_ip_address_ids(self) -> Sequence[str]:
        """
        Specifies a list of Azure Public IP Address IDs.
        """
        return pulumi.get(self, "public_ip_address_ids")

    @property
    @pulumi.getter(name="vnetConfiguration")
    def vnet_configuration(self) -> 'outputs.NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration':
        """
        A `vnet_configuration` block as defined below.
        """
        return pulumi.get(self, "vnet_configuration")

    @property
    @pulumi.getter(name="egressNatIpAddressIds")
    def egress_nat_ip_address_ids(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Azure Public IP Address IDs that can be used for Egress (Source) Network Address Translation.
        """
        return pulumi.get(self, "egress_nat_ip_address_ids")

    @property
    @pulumi.getter(name="egressNatIpAddresses")
    def egress_nat_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "egress_nat_ip_addresses")

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "public_ip_addresses")

    @property
    @pulumi.getter(name="trustedAddressRanges")
    def trusted_address_ranges(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of trusted ranges to use for the Network.
        """
        return pulumi.get(self, "trusted_address_ranges")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "virtualNetworkId":
            suggest = "virtual_network_id"
        elif key == "ipOfTrustForUserDefinedRoutes":
            suggest = "ip_of_trust_for_user_defined_routes"
        elif key == "trustedSubnetId":
            suggest = "trusted_subnet_id"
        elif key == "untrustedSubnetId":
            suggest = "untrusted_subnet_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaNetworkProfileVnetConfiguration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 virtual_network_id: str,
                 ip_of_trust_for_user_defined_routes: Optional[str] = None,
                 trusted_subnet_id: Optional[str] = None,
                 untrusted_subnet_id: Optional[str] = None):
        """
        :param str virtual_network_id: The ID of the Virtual Network.
        :param str trusted_subnet_id: The ID of the Trust subnet.
        :param str untrusted_subnet_id: The ID of the UnTrust subnet.
        """
        pulumi.set(__self__, "virtual_network_id", virtual_network_id)
        if ip_of_trust_for_user_defined_routes is not None:
            pulumi.set(__self__, "ip_of_trust_for_user_defined_routes", ip_of_trust_for_user_defined_routes)
        if trusted_subnet_id is not None:
            pulumi.set(__self__, "trusted_subnet_id", trusted_subnet_id)
        if untrusted_subnet_id is not None:
            pulumi.set(__self__, "untrusted_subnet_id", untrusted_subnet_id)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> str:
        """
        The ID of the Virtual Network.
        """
        return pulumi.get(self, "virtual_network_id")

    @property
    @pulumi.getter(name="ipOfTrustForUserDefinedRoutes")
    def ip_of_trust_for_user_defined_routes(self) -> Optional[str]:
        return pulumi.get(self, "ip_of_trust_for_user_defined_routes")

    @property
    @pulumi.getter(name="trustedSubnetId")
    def trusted_subnet_id(self) -> Optional[str]:
        """
        The ID of the Trust subnet.
        """
        return pulumi.get(self, "trusted_subnet_id")

    @property
    @pulumi.getter(name="untrustedSubnetId")
    def untrusted_subnet_id(self) -> Optional[str]:
        """
        The ID of the UnTrust subnet.
        """
        return pulumi.get(self, "untrusted_subnet_id")


@pulumi.output_type
class NextGenerationFirewallVirtualNetworkPanoramaPanorama(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "deviceGroupName":
            suggest = "device_group_name"
        elif key == "hostName":
            suggest = "host_name"
        elif key == "panoramaServer1":
            suggest = "panorama_server1"
        elif key == "panoramaServer2":
            suggest = "panorama_server2"
        elif key == "templateName":
            suggest = "template_name"
        elif key == "virtualMachineSshKey":
            suggest = "virtual_machine_ssh_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in NextGenerationFirewallVirtualNetworkPanoramaPanorama. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaPanorama.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        NextGenerationFirewallVirtualNetworkPanoramaPanorama.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 device_group_name: Optional[str] = None,
                 host_name: Optional[str] = None,
                 name: Optional[str] = None,
                 panorama_server1: Optional[str] = None,
                 panorama_server2: Optional[str] = None,
                 template_name: Optional[str] = None,
                 virtual_machine_ssh_key: Optional[str] = None):
        """
        :param str device_group_name: The Device Group Name to which this Firewall Resource is registered.
        :param str host_name: The Host Name of this Firewall Resource.
        :param str name: The name which should be used for this Palo Alto Next Generation Firewall Virtual Network Panorama. Changing this forces a new Palo Alto Next Generation Firewall Virtual Network Panorama to be created.
        :param str panorama_server1: The name of the First Panorana server.
        :param str panorama_server2: The name of the Second Panorana server.
        :param str template_name: The name of the Panorama Template applied to this Firewall Resource.
        :param str virtual_machine_ssh_key: The SSH Key to connect to the Firewall Resource.
        """
        if device_group_name is not None:
            pulumi.set(__self__, "device_group_name", device_group_name)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if panorama_server1 is not None:
            pulumi.set(__self__, "panorama_server1", panorama_server1)
        if panorama_server2 is not None:
            pulumi.set(__self__, "panorama_server2", panorama_server2)
        if template_name is not None:
            pulumi.set(__self__, "template_name", template_name)
        if virtual_machine_ssh_key is not None:
            pulumi.set(__self__, "virtual_machine_ssh_key", virtual_machine_ssh_key)

    @property
    @pulumi.getter(name="deviceGroupName")
    def device_group_name(self) -> Optional[str]:
        """
        The Device Group Name to which this Firewall Resource is registered.
        """
        return pulumi.get(self, "device_group_name")

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[str]:
        """
        The Host Name of this Firewall Resource.
        """
        return pulumi.get(self, "host_name")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        The name which should be used for this Palo Alto Next Generation Firewall Virtual Network Panorama. Changing this forces a new Palo Alto Next Generation Firewall Virtual Network Panorama to be created.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="panoramaServer1")
    def panorama_server1(self) -> Optional[str]:
        """
        The name of the First Panorana server.
        """
        return pulumi.get(self, "panorama_server1")

    @property
    @pulumi.getter(name="panoramaServer2")
    def panorama_server2(self) -> Optional[str]:
        """
        The name of the Second Panorana server.
        """
        return pulumi.get(self, "panorama_server2")

    @property
    @pulumi.getter(name="templateName")
    def template_name(self) -> Optional[str]:
        """
        The name of the Panorama Template applied to this Firewall Resource.
        """
        return pulumi.get(self, "template_name")

    @property
    @pulumi.getter(name="virtualMachineSshKey")
    def virtual_machine_ssh_key(self) -> Optional[str]:
        """
        The SSH Key to connect to the Firewall Resource.
        """
        return pulumi.get(self, "virtual_machine_ssh_key")


